2014-12-27 53 views
0

我想阅读下列方式使用MPI一个txt文件:MPI文件的读取未结束

“主节点应该加载数据,鸿沟和 工人处理器之间分配它。”

但是我的代码没有结束。

这里是相应的代码块:

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

当你正在从一个* single *节点读取数据时,是否有使用MPI IO而不是常规IO(从'')使用MPI IO的原因?从我所读的内容来看,MPI IO是*并行的,集体IO *,所以这种方式击败了目的(并可能解释为什么它被卡住了)。 – Rufflewind 2014-12-27 13:55:06

+0

我认为你是对的,但这是一个学校项目。可能是TA的错误。无论如何,我只需要了解如何在处理器之间读取文件和发送/接收消息。 – user2870 2014-12-27 14:02:32

+0

@Rufflewind,MPI IO非常适用于非平行的情况,甚至可以方便地使用,例如它允许使用派生的MPI数据类型传输数据。 – 2014-12-27 14:04:15

回答

3

MPI_File_read_at_all集体版本的MPI_File_read_at。集体行动只有在给定的沟通者的所有职位都接听电话后才能完成。在你的情况下,打开操作包括MPI_COMM_WORLD,而你只能叫MPI_File_read_at_all在等级0

你应该与非集体MPI_File_read_at取代它,或者甚至更好,使用标准的C I/O例程来代替。