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:
前加上。如果您需要放置一些特定流程的裝飾品,您也可以在廣播後進行。
「裝飾」這個名字的想法是一個很好的想法,但目前還不清楚裝飾是否改變了應該創建臨時文件的文件系統。一個MPI感知的'mkstemp'似乎是必要的,或者以某種方式查詢關於裝飾將被解釋的方式的MPI實現。 –