我正在尝试使用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()
。
可能是什么问题?
答案 0 :(得分:3)
MPI_File_read_at_all
是MPI_File_read_at
的集体版本。集合操作仅在给定通信器中的所有队列进行呼叫时才完成。在您的情况下,开放操作包含MPI_COMM_WORLD
,而您只在0级调用MPI_File_read_at_all
。
您应该将其替换为非集体MPI_File_read_at
,或者更好的是,使用标准的C I / O例程。