- 使用MPI的文件读写函数时,文件需为二进制文件,可以使用代码自己进行格式转换
示例代码:
//将存储三个数的文本文件转换为二进制文件
int r,c,m;
FILE *fp = fopen(filein, "r");
fscanf(fp, "%d", &r);
fscanf(fp, "%d", &c);
fscanf(fp, "%d", &m);
fclose(fp);
fp = fopen(fileout, "wb");
fwrite(&r, sizeof(int), 1, fp);
fwrite(&c, sizeof(int), 1, fp);
fwrite(&m, sizeof(int), 1, fp);
fclose(fp);
- MPI_File_read_at_allMPI_File_read_at_all
int MPIAPI MPI_File_read_at_all(
MPI_File file, //文件指针
MPI_Offset offset, //偏移量
_Out_ void *buf, //读出的缓冲区地址
int count, //读出的个数
MPI_Datatype datatype, //读的数据类型
_Out_ MPI_Status *status
);
/*使用示例
MPI_File fh;
MPI_Status status;
MPI_File_read_at_all(fh, offset, array, count, MPI_INT, &status);
*/
//此函数使用时所有进程都同时调用,当某一进程执行完毕后,会阻塞直到所有进程都执行完毕为止
//区别于MPI_File_read_at,此函数不用所有进程都同时调用
//相关的使用还有MPI_File_write_at_all, MPI_File_write_at
- MPI_File_open
int MPIAPI MPI_File_open(
MPI_Comm comm, //集合通信子
_In_ char *filename, //打开的文件名
int amode, //打开模式,包括读写等
MPI_Info info,
_Out_ MPI_File *newfile //文件指针
);
//本函数也是组函数,只要一个进程想调用此函数,就需要所有进程都使用了这个函数后程序才能继续运行
/*使用示例
MPI_File_open(MPI_COMM_WORLD, "in", MPI_MODE_RDONLY, MPI_INFO_NULL, &fh);
MPI_File_open(MPI_COMM_WORLD, "out", MPI_MODE_CREATE | MPI_MODE_WRONLY, MPI_INFO_NULL, &fh);
*/
//一般而言,输入输出函数为二进制文件,需要自己进行转换