#io #mpi
#io #mpi
Вопрос:
Что касается программирования на mpi, когда я должен использовать коллективную операцию для ввода-вывода? Когда я должен использовать операции ввода-вывода с общим файловым указателем вместо операций ввода-вывода с отдельным файловым указателем?
Ответ №1:
Коллективный ввод-вывод MPI обычно более оптимизирован, и вы можете предпочесть его, когда у вас в коде есть регулярные точки ввода-вывода, которые все процессы достигают одновременно. Для выполнения фактической записи может использоваться меньше процессов (например, по одному на узел), чтобы записывать меньше, но большие фрагменты данных, чтобы минимизировать накладные расходы. Он также может начать сбор данных до фактической записи.
Например, если у вас есть хорошо разложенный домен для вашей проблемы, и вы хотите записывать обновленные значения в конце каждого временного шага, это хороший выбор.
Коллективные операции отмечены _all
частью в названии, а «противоположностью» им являются операции с одной задачей (без _all
), которые не зависят от процесса (например, у вас могут быть некоторые процессы, записывающие разные данные, чем другие). Все они имеют как блокирующую, так и неблокирующую версию. Имейте в виду, что «коллективный» не подразумевает «блокировку».
Как вы уже выяснили, как одиночная задача, так и коллективные операции существуют в версии «индивидуального файлового указателя» (самой простой), версии «явного смещения» ( _at
) и «общего файлового указателя» ( _shared
(одиночная задача) или _ordered
(коллективная)).
Вы можете использовать указатели на отдельные файлы, когда хотите записать другой файл в рамках каждого процесса. Это может быть лучше, когда у вас есть много данных для каждого процесса для записи, а также много узлов, и лучше записывать их локально, чтобы уменьшить пропускную способность. Я не знаю, в каких сценариях и файловых системах именно это может быть полезно, но имейте в виду, что в «обычных» задачах обычно лучше иметь несколько больших потоков данных, а не много маленьких, чтобы уменьшить накладные расходы. У вас также могут быть некоторые причины для этого после обработки или просто не все ваши процессы записывают данные одного и того же типа.
Когда речь идет об одном и том же файле:
Вы можете использовать явное смещение, чтобы указать каждому процессу другую точку в вашем файле.
Вы можете использовать версию с общим указателем в основном при работе с группами процессов. Таким образом, каждый процесс может начинаться с общего указателя в качестве ссылки и записывать в соответствующее место после него.
Имейте в виду, что указатель также связан с представлением файла. Но это уже другая большая тема.