我正在做一些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