我正在做一些MPI编程,并且做了很多搜索和谷歌搜索。我的工作期限很紧,现在是凌晨2点,因此在此先感谢您的答复。

而不是像这样写入文件:

fprintf(fp, "%d %d %.12E %.12E %.12E %d\n", ii, jj, u_x, u_y, pressure, obstacles[ii * params.nx + jj]);


我想使用MPI_file_Iwrite(....buf.....)

这意味着我需要与fprintf中的格式完全相同的格式,但需要将其复制到缓冲区(Char数组)中。
任何人都可以建议一种轻松实现此目的的方法。没有一些真正费力的类型转换和在大的for循环中的strcpy()strcat()等,我有些难过。
谢谢!

最佳答案

您需要的是sprintf将上述格式打印到缓冲区

给定您的示例,这里是您需要的C代码示例

tmp = (char *) malloc(SIZE);
strcpy(tmp, filename);
sprintf(filename, "%d %d %.12E %.12E %.12E %d\n", ii, jj, u_x, u_y, pressure, obstacles[ii * params.nx + jj]);


然后是相关的MPI代码

MPI_File fh;
MPI_File_open(MPI_COMM_SELF, filename, MPI_MODE_CREATE | MPI_MODE_RDWR, MPI_INFO_NULL, &fh);
MPI_File_set_view(fh, 0, MPI_INT, MPI_INT, "native", MPI_INFO_NULL);
MPI_File_iwrite(fh, buf, nints, MPI_INT, &request);
MPI_Wait( &request, &status );
MPI_File_close(&fh);


有关完整示例,请参见here

10-06 04:09