0

共有ファイル ポインターを使用して MPI-I/O (OpenMPI 実装) を使用して、複数の長い分散配列を 1 つのファイルに書き込もうとしています。次のエラー メッセージが表示されます

lseek:引数が無効です

書き込みに失敗しました

問題を再現するために簡略化されたコード スニペットを用意しました。

        long long globalUpperBnd = 2200000000;// more than size of int
        long long average = globalUpperBnd/commSize;
        long long length = (commRank == commSize-1) ? globalUpperBnd-(average*commRank) : average;
        char *buf = new char[length];
        ... // fill the buffer

        MPI_File file;
        MPI_File_open(comm, "test.bin", MPI_MODE_CREATE|MPI_MODE_WRONLY, MPI_INFO_NULL, &file);

        MPI_File_set_view(file, 0, MPI_BYTE, MPI_BYTE, "native", MPI_INFO_NULL);
        MPI_File_write_ordered(file, buf, length, MPI_BYTE, MPI_STATUS_IGNORE);
        // here I got an error message
        MPI_File_write_ordered(file, buf, length, MPI_BYTE, MPI_STATUS_IGNORE);

        MPI_File_close(&file);

        delete []buf;

MPI_Offsetのように見えint、2回目の呼び出しでオーバーフローMPI_File_write_orderedMPI_Offset発生し、オフセットが負になります。同じ量のデータの書き込みが、globalUpperBnd2 を掛けて 1 回呼び出すMPI_File_write_orderedだけで成功するというのは非常に興味深いことです。MPI_File_write_ordered何とかオフセットオーバーフローを回避しているようです。

私は 64 ビットの OpenMPI ライブラリを使用しています。

この場合の回避策はありますか?

4

1 に答える 1