0

我正在尝试使用 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"。但是如果给了我一个非常大的数字。

我究竟做错了什么?

4

2 回答 2

3

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

在这种情况下,您可以例如将整个文件读入缓冲区,然后使用 sscanf() 或您可用的任何其他文本解析函数。

于 2013-04-04T15:44:00.370 回答
0

我认为您可以使用类似的 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 获取二进制文件可以读取

于 2017-06-08T07:28:09.060 回答