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(テキスト)ファイルを指定すると、おそらく最初の4文字が1つの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 can read を使用してバイナリ ファイルを取得できます。

于 2017-06-08T07:28:09.060 に答える