MPI_Bcast зависает после передачи некоторых данных

Я запускаю приложение, которое выполняет некоторые преобразования больших матриц в кластере из 7 узлов. Узлы подключены через QDR 40 Gbit Infiniband. В системе установлен Open MPI 1.4.3.

Данное матричное преобразование требует большого обмена данными между узлами таким образом, чтобы на каждом шаге алгоритма был один узел, который отправляет данные, а все остальные получают. Количество процессов равно количеству используемых узлов. Я должен сказать, что я относительно новичок в MPI, но мне кажется, что идеальный способ сделать это — использовать MPI_Bcast.

На некоторых не очень больших матрицах все работало нормально. Однако при увеличении размера матрицы в какой-то момент приложение зависает и остается там навсегда.

Я не совсем уверен, но похоже, что в моем коде нет ошибок. Я подробно проследил это, чтобы проверить, есть ли какие-то незавершенные коллективные операции перед этим конкретным вызовом MPI_Bcast, но все выглядит нормально. Кроме того, для этого конкретного вызова во всех процессах правильно установлен root, а также тип и размер сообщения, и, конечно же, во всех процессах вызывается MPI_Bcast.

Я также прогнал множество сценариев (запуск приложения на матрицах разного размера и изменение количества процессов), чтобы выяснить, когда это происходит. Что можно наблюдать, так это следующее:

  • для матрицы того же размера приложение успешно завершается, если я указываю количество процессов
  • однако для заданного количества процессов приложение будет зависать на некоторой чуть большей матрице
  • при заданном размере матрицы и количестве процессов, на которых у меня зависает программа, если я уменьшаю размер сообщения в каждом вызове MPI_Bcat в два раза (конечно результат будет неверным), зависаний не будет

Итак, мне кажется, что проблема может быть в некоторых буферах, которые использует MPI, и, возможно, следует изменить какой-то параметр MCA по умолчанию, но, как я уже сказал, у меня нет большого опыта в программировании MPI, и я не нашел решение этой проблемы. Итак, вопрос в том, была ли у кого-нибудь похожая проблема, и, возможно, знает, можно ли ее решить, установив соответствующий параметр MCA, или знает какое-либо другое решение или объяснение?


person dzovejn    schedule 25.07.2013    source источник
comment
Open MPI 1.4.3 — очень старая программа. Я бы посоветовал вам задать вопрос в списке рассылки пользователей Open MPI, если еще не так сделано. Кстати, сколько данных (в байтах) транслируется?   -  person Hristo Iliev    schedule 26.07.2013
comment
Христо, спасибо за быстрый ответ. Размер сообщения составляет от 50 до 200 МБ. Однако до этого конкретного вызова MPI_Bcast, который зависает, у меня есть много успешно завершенных вызовов MPI_Bcast с сообщениями того же размера.   -  person dzovejn    schedule 26.07.2013
comment
Пробовали ли вы тот же код с другой реализацией MPI, например. МВАПИЧ или Intel MPI? Алгоритм широковещательной рассылки по умолчанию для больших сообщений, который использует OMPI, не должен вызывать зависаний, если только не произойдет что-то действительно неправильное.   -  person Hristo Iliev    schedule 26.07.2013
comment
Нет, я не пробовал другие реализации MPI, но обязательно попробую. Спасибо еще раз.   -  person dzovejn    schedule 26.07.2013


Ответы (1)


Как уже упоминалось @Hristo, начните с использования более новой версии OMPI из Open MPI. веб-сайт Текущая стабильная версия — 1.6.5, так что это то, что вы должны получить. Скорее всего, это заставит проблему уйти.

Если проблема не устранена, то лучший способ решить ее — обсудить ее в списке рассылки пользователей OMPI — там ее быстро решат.

Если вы все еще хотите поиграться с параметрами MCA, я предлагаю начать с них:

--mca btl_openib_flags <hex value>
--mca mpi_leave_pinned <0|1>
person kliteyn    schedule 26.07.2013
comment
Учитывая способ реализации MPI_Bcast, я сомневаюсь, что какой-либо из этих флагов повлияет на случай OP. - person Hristo Iliev; 27.07.2013