Я запускаю приложение, которое выполняет некоторые преобразования больших матриц в кластере из 7 узлов. Узлы подключены через QDR 40 Gbit Infiniband. В системе установлен Open MPI 1.4.3.
Данное матричное преобразование требует большого обмена данными между узлами таким образом, чтобы на каждом шаге алгоритма был один узел, который отправляет данные, а все остальные получают. Количество процессов равно количеству используемых узлов. Я должен сказать, что я относительно новичок в MPI, но мне кажется, что идеальный способ сделать это — использовать MPI_Bcast.
На некоторых не очень больших матрицах все работало нормально. Однако при увеличении размера матрицы в какой-то момент приложение зависает и остается там навсегда.
Я не совсем уверен, но похоже, что в моем коде нет ошибок. Я подробно проследил это, чтобы проверить, есть ли какие-то незавершенные коллективные операции перед этим конкретным вызовом MPI_Bcast, но все выглядит нормально. Кроме того, для этого конкретного вызова во всех процессах правильно установлен root, а также тип и размер сообщения, и, конечно же, во всех процессах вызывается MPI_Bcast.
Я также прогнал множество сценариев (запуск приложения на матрицах разного размера и изменение количества процессов), чтобы выяснить, когда это происходит. Что можно наблюдать, так это следующее:
- для матрицы того же размера приложение успешно завершается, если я указываю количество процессов
- однако для заданного количества процессов приложение будет зависать на некоторой чуть большей матрице
- при заданном размере матрицы и количестве процессов, на которых у меня зависает программа, если я уменьшаю размер сообщения в каждом вызове MPI_Bcat в два раза (конечно результат будет неверным), зависаний не будет
Итак, мне кажется, что проблема может быть в некоторых буферах, которые использует MPI, и, возможно, следует изменить какой-то параметр MCA по умолчанию, но, как я уже сказал, у меня нет большого опыта в программировании MPI, и я не нашел решение этой проблемы. Итак, вопрос в том, была ли у кого-нибудь похожая проблема, и, возможно, знает, можно ли ее решить, установив соответствующий параметр MCA, или знает какое-либо другое решение или объяснение?