MPI_File_Iwrite,将fprintf复制到缓冲区

时间:2013-11-29 01:48:31

标签: c arrays mpi printf

我正在做一些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数组)。 任何人都可以建议一种方法来轻松做到这一点我有点难过,没有一些非常费力的类型转换和strcpy()strcat()在一个大的for循环等。 谢谢!

1 个答案:

答案 0 :(得分:1)

您需要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