3

MPI アプリケーション内で一意のファイル名を生成したいと考えています。

MPI_FILE_OPEN仕様のバージョン 2.2 で「実装者へのアドバイス」を読むuriPrefix:foo/bar/bazと、通常のファイル名に加えて、次のようなファイル名foo/bar/bazが可能であることが示されます。のようなファイル名も同様baz/PASSWORD=SECRETです。MPI 実装は、この追加情報を使用して正しいことを行うことが期待されています。

これらの追加のファイル名要素は、mkstemp(3). 前者の場合、uriPrefixファイルを格納する場所を示すことができます。後者の場合、のテンプレートの規則bazXXXXXX/PASSWORD=SECRETが台無しになります。mkstemp(3)

mkstemp(3)と安全に組み合わせる方法についての提案はありMPI_FILE_OPENますか?

4

1 に答える 1

2

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=SECRETfstype:

于 2012-11-01T17:06:26.110 に答える