MPI_File_read错误(MPI_File_read Error)

2019-08-19 12:56发布

我试图使用MPI_File_read从输入文件中读取。 但它不能正确读取值。 这里是我的输入文件:

11 3 4 5 2

这里是我使用的尝试读取它的代码:

char *filename = "input/8";
int n;

if (MPI_File_open(comm_2d, filename, MPI_MODE_RDONLY, MPI_INFO_NULL, &f) != MPI_SUCCESS) {
    fprintf(stderr, "Cannot open file %s\n", filename);
    MPI_Abort(comm_2d, FILE_NOT_FOUND);
    MPI_Finalize();
    return 1;
}
MPI_File_seek(f, 0, MPI_SEEK_SET);
MPI_File_read(f, &n, 1, MPI_INT, &status);

cout << "n :" << n << endl;
MPI_File_close(&f);

从我的理解这应该读从input.txt的第一INT“11”。 但是,如果给了我一个非常大的数字来代替。

我究竟做错了什么?

Answer 1:

MPI_File_Read读取文件的MPI_INT的二进制表示。 如果你给它一个ASCII(基于文本) - 文件它可能会解释前4个字符作为一个32位整数,并返回一个“非常大的数字”就像你描述。

在这种情况下,例如,您可以读取整个文件到缓冲区中,然后使用的sscanf()或者你有其他任何可用的文本分析功能。



Answer 2:

我想你可以使用类似的API:MPI_File_write生成你想要轻松的二进制文件。

char *filename = "input/8";
int n;

if (MPI_File_open(comm_2d, filename, MPI_MODE_CREATE| MPI_MODE_RDWR, MPI_INFO_NULL, &f) != MPI_SUCCESS) {
    fprintf(stderr, "Cannot open file %s\n", filename);
    MPI_Abort(comm_2d, FILE_NOT_FOUND);
    MPI_Finalize();
    return 1;
}
MPI_File_seek(f, 0, MPI_SEEK_SET);
int data[10];
data[0]=11;
data[1]=3;data[2]=4;data[3]=5;data[4]=2;
MPI_File_write(f, data, 5, MPI_INT, &status);
MPI_File_close(&f);

在运行使用过程1上面的代码,你可以使用MPI_File_read可以阅读得到的二进制文件



文章来源: MPI_File_read Error
标签: c++ mpi