Как я могу передать файл из одного процесса ко всем другим с помощью MPI?

У меня есть текстовый файл, который доступен только на одном компьютере, и мне нужны другие компьютеры, чтобы иметь возможность читать этот файл тоже. Как я могу отправить файл, используя mpich2 (C++)?

Я пытался с помощью MPI_File_open() но кажется, что все компьютеры нуждаются в этом файле локально для работы.

2 ответа

Решение

Так что в итоге я прочитал файл и передал его остальным процессам как массив символов.
спасибо @haraldkl

ОК, это секретный ответ ниндзя на ваш вопрос. Ответ haraldkl является самым простым, но есть и другой способ: ROMIO (реализация MPI-IO в MPICH2) имеет мало документированную функцию, называемую отложенным открытием: если вы сообщаете ROMIO, что не будете делать независимый ввод-вывод, а будете делать только коллективные вызовы, тогда только "агрегатор ввода / вывода" откроет файл, и двухфазная оптимизация коллективного ввода / вывода отправит эти данные всем процессорам.

MPI_Info_set(info, "romio_no_indep_rw" "true"); MPI_File_open(comm, filename, mode, info, &fh); MPI_File_read_all(fh, buf, count, MPI_CHAR, &status);

Чтение и трансляция - это, вероятно, путь, поскольку каждый процесс читает одни и те же данные. Просто подумал, что упомяну это, если вы окажетесь в другой ситуации, когда не каждый процесс имеет доступ к файлу.

У меня есть более подробная рецензия на блог ROMIO: http://press3.mcs.anl.gov/romio/2003/08/05/deferred-open/

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