我正试图通过以下方式使用mpi读取txt文件:
“主节点应该加载数据,将其分割并分发给
工作处理器。”
但是我的代码没有结束。
下面是相应的代码段:
MPI_File_open(MPI_COMM_WORLD, argv[1], MPI_MODE_RDONLY, MPI_INFO_NULL, &in);
if (rank == 0){
printf("OK\n");
MPI_Offset filesize;
MPI_Offset localsize;
MPI_Offset start;
MPI_Offset end;
char *chunk;
MPI_File_get_size(in, &filesize);
//localsize = filesize/size;
start = 0;
end = filesize - 1;
printf("OK\n");
localsize = end - start + 1;
/* allocate memory */
chunk = malloc( (localsize + 1)*sizeof(char));
MPI_File_read_at_all(in, start, chunk, localsize, MPI_CHAR, MPI_STATUS_IGNORE);
printf("OK\n");
chunk[localsize] = '\0';
}
MPI_Finalize();
上面的代码没有打印第三个“OK”。因此,我想问题出在
MPI_File_read_at_all()
。有什么问题吗?
最佳答案
MPI_File_read_at_all
是MPI_File_read_at
的集合版本。只有当给定通信器中的所有列组都进行了调用时,集合操作才会完成。在您的情况下,open操作包含MPI_COMM_WORLD
,而您只调用秩为0的MPI_File_read_at_all
。
您应该用非集合MPI_File_read_at
替换它,或者更好地使用标准的C I/O例程。