Mkstemp(3) с поддержкой MPI для использования с MPI_FILE_OPEN?

Я хотел бы создать уникальное имя файла в приложении 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?

1 ответ

MPI_FILE_OPEN это коллективная операция. Он предназначен для вызова всеми рангами MPI с одним и тем же именем файла, и имя также должно указывать на местоположение в общей файловой системе. В противном случае это не имеет смысла. mkstemp(3) будет генерировать разные имена, если вызывается в разных рангах. Также он создает файл и возвращает его дескриптор файла. Вероятно, не то, что вы хотите, если вы хотите использовать параллельный ввод-вывод MPI.

Если вы действительно хотите создать уникальный файл, то вы можете сделать что-то вроде этого:

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:, Вы также можете сделать это после трансляции, если вам нужно добавить некоторые специфичные для процесса декорации.

Другие вопросы по тегам