【发布时间】:2014-12-27 21:58:18
【问题描述】:
我正在尝试通过以下方式使用 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 IO 而不是常规 IO(例如来自
<stdio.h>)?根据我的阅读,MPI IO 用于并行、集体 IO,所以这种方式违背了目的(并且可能解释了为什么它被卡住了)。 -
我认为你是对的,但这是一个学校项目。可能是TA的失误。无论如何,我只需要学习如何在处理器之间读取文件和发送/接收消息。
-
@Rufflewind,MPI IO 在非并行情况下非常有用,甚至派上用场,例如它允许使用派生的 MPI 数据类型传输数据。