Допустим, у меня есть 2 процесса с двумя потоками (1 поток IO, 1 поток вычислений)
Меня интересует использование библиотеки IO (adios).
Я спрашиваю, что произойдет, если я буду писать что-то вроде этого?:
позволяет сказать, что потоки ввода-вывода в двух процессах выполняют некоторые MPI_Barrier(MPI_COMM_WORLD)
ввода-вывода, и они используют MPI_Barrier(MPI_COMM_WORLD)
в некоторой точке B для синхронизации ввода-вывода!
потоки вычислений в двух процессах также используют MPI_Barrier(MPI_COMM_WORLD)
в некоторой точке A для синхронизации вычисления (в то время как потоки ввода-вывода работают).
---> Я точно не знаю, что может случиться, возможен следующий случай:
=>, а процесс 1 и 2 синхронизируются (так что процесс 1 оставляет барьер в B и процесс 2 в A (также процесс 2 не имеет той же точки, где он синхронизируется!)
Если это может произойти, это не нежелательное поведение, которое не было предусмотрено программистом. (Можно ли этого избежать, используя два разных коммуникатора с одинаковым количеством процессов (MPI_Comm_dup(...)
)?
Или барьер действительно зависит от линии кода? Но как это реализуется, если это так?
Это смущает!
Большое спасибо!
Вероятно, произойдет первый сценарий (вызовы баррелей из разных потоков, соответствующие друг другу). С точки зрения MPI барьер должен вводиться всеми рядами внутри коммуникатора, независимо от того, какой поток вызывает барьерный вызов и на какой строке кода находится вызов. MPI по-прежнему не имеет понятия идентичности потоков, и все потоки обрабатываются вместе как единый объект - ранг. Единственное специальное лечение заключается в том, что когда MPI_THREAD_MULTIPLE
уровень поддержки потока MPI_THREAD_MULTIPLE
, библиотека должна внедрять надлежащие блокировки, чтобы вызовы MPI могли быть сделаны из любого потока и в любое время.
Поэтому очень желательно, чтобы авторы параллельных библиотек всегда дублировали мировой коммуникатор и использовали дубликат для внутренних коммуникационных потребностей. Таким образом, код библиотеки не будет мешать коду пользователя (с некоторыми особыми исключениями, которые могут привести к взаимоблокировкам).