2012-10-31 21 views
2

我想在MPI應用程序中生成一個唯一的文件名。MPI-aware mkstemp(3)用於MPI_FILE_OPEN?

在規範的2.2版本中閱讀MPI_FILE_OPEN下的「對實施者的建議」指出除了通常的foo/bar/baz以外,文件名uriPrefix:foo/bar/baz也是可能的。就像baz/PASSWORD=SECRET這樣的文件名。預計MPI的實施將爲這些附加信息做正確的事情。

這些額外的文件名元素會對mkstemp(3)造成嚴重破壞。在前一種情況下,uriPrefix可指示文件應放置在何處。在後一種情況下,bazXXXXXX/PASSWORD=SECRET將搞砸mkstemp(3)的模板約定。

有沒有人有建議如何安全地將mkstemp(3)MPI_FILE_OPEN結合?

回答

1

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:前加上。如果您需要放置一些特定流程的裝飾品,您也可以在廣播後進行。

+0

「裝飾」這個名字的想法是一個很好的想法,但目前還不清楚裝飾是否改變了應該創建臨時文件的文件系統。一個MPI感知的'mkstemp'似乎是必要的,或者以某種方式查詢關於裝飾將被解釋的方式的MPI實現。 –

相關問題