私の MPI プログラムでは、いくつかの計算の結果を 1 つの (共有) ファイルに書き込む必要があります。このファイルでは、各 MPI プロセスがデータのその部分を異なるオフセットに書き込みます。十分に単純です。私はそれを次のように実装しました:
offset = rank * sizeof(double) * N;
for (i = 0; i < N; i++) {
data = ...;
MPI_File_write_at(file, offset, &data, 1, MPI_DOUBLE, &status);
offset += sizeof(double);
}
これは実際には配列であるため、少し単純化されdata
ていますが、簡潔にするために単一の値であると仮定しましょう。すべてのプロセスがこのルーチンを同時に呼び出し、正常に動作します。ただし、これが MPI で IO を実行する最適な方法かどうかはわかりません。を使用しMPI_File_write_at_all
たりMPI_File_write_ordered
、パフォーマンスを向上させたりすることはできますか?
残念ながら、クラスター (Lustre を含む) での時間は非常に限られているため、考えられるすべての実装を広範囲にテストすることはできません。