0

MPI parallel ioを使用して、複数のプロセスに整数バッファーを同時にファイルに書き込ませようとしています。この目標を達成するために、私はさまざまなWebサイトを検索しました。

そして私は彼らの教えを学ぼうとしました。それらをテストするために、c++で次の簡単なコードを作成しました。

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>

#define BUFSIZE 100

using namespace std;

int main(int argc, char *argv[])
{
    int myrank, buf[BUFSIZE], rcode;
    MPI_File thefile;

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &myrank);

    for (int i=0; i<BUFSIZE; i++)
        buf[i] = myrank * BUFSIZE + i;

    rcode = MPI_File_open(MPI_COMM_WORLD, "testfile", MPI_MODE_CREATE | MPI_MODE_RDWR,
                                MPI_INFO_NULL, &thefile);

    if(rcode != MPI_SUCCESS){
        cerr << "Did not open file" << endl;
        return EXIT_FAILURE;
    }

    rcode = MPI_File_set_view(thefile, myrank * (MPI_Offset)BUFSIZE * sizeof(int), MPI_INT, MPI_INT,
                                        "native", MPI_INFO_NULL);
    if(rcode != MPI_SUCCESS){
        cerr << "Problem setting process view" << endl;
        return EXIT_FAILURE;
    }


    MPI_File_write(thefile, buf, BUFSIZE, MPI_INT, MPI_STATUS_IGNORE);
    if(rcode != MPI_SUCCESS){
        cerr << "Problem writting file" << endl;
        return EXIT_FAILURE;
    }

    MPI_File_close(&thefile);
    MPI_Finalize();

    return EXIT_SUCCESS;
}

ただし、Kateでファイルを読み取ろうとすると、ランダムなゴミが発生します。正方形、長方形、!$ "%&!! /記号がたくさんあり、整数はまったくありません。

私が間違っていることは何ですか?

4

1 に答える 1

2

テキスト/バイナリデータの誤解があるようです。

intによって書き込まれるは、MPI_File_write(..., MPI_INT,...)ASCIIまたはUnicodeテキストではなく、バイナリデータとして書き込まれます。「正方形、長方形、@#$ @#!記号の束」は、テキストエディタでファイルを開いて、ASCII番号を探しているかのように私に読み上げます。

フォーマットされた出力が必要な場合は、自分でフォーマットする必要があります。テキストエディタでファイルを読み取れるようにする場合は、intsではなくテキストを書き込む必要があります。

于 2013-03-24T18:54:53.730 に答える