MPI_FILE_OPEN
集団運営です。これは、すべての MPI ランクから同じファイル名で呼び出されることを意図しており、その名前は共有ファイルシステム上の場所を指す必要もあります。そうでなければ意味がありません。mkstemp(3)
異なるランクで呼び出された場合、異なる名前が生成されます。また、ファイルを作成し、そのファイル記述子を返します。MPI 並列 IO を使用したい場合は、おそらくあなたが望むものではありません。
本当に一意のファイルを作成したい場合は、おそらく次のようにすることができます。
int rank;
char name[PATH_MAX] = "/path/to/shared/directory/prefixXXXXXX";
MPI_File fh;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
// Create the temporary file in rank 0 only
if (rank == 0)
{
int fd = mkstemp(name);
// Close the handle - we don't need it
close(fd);
// <----- Decorate name here
}
// Broadcast the file name to all other ranks
MPI_Bcast(name, PATH_MAX, MPI_CHAR, 0, MPI_COMM_WORLD);
// Now open the file for MPI parallel IO
MPI_File_open(MPI_COMM_WORLD, name, MPI_MODE_RDWR, MPI_INFO_NULL, &fh);
から名前を取得したらmkstemp(3)
、 としてマークされたポイントでDecorate name here
、名前に追加の装飾を実行できます。プロセス固有の装飾を配置する必要がある場合は、ブロードキャスト後に行うこともできます。/PASSWORD=SECRET
fstype: