Что может вызвать асимметричную пропускную способность неблокирующих сообщений MPI? - PullRequest
1 голос
/ 30 ноября 2011

Я использую неблокирующие сообщения MPI для связи между двумя задачами. Шаблон связи следующий: каждая задача имеет главный поток, который получает сообщения от других задач. Он имеет около 5 рабочих потоков, которые выполняют вычисления и отправляют сообщения другим задачам. Главный поток зацикливается, проверяя входящие сообщения. Это единственное, что он делает.

Моя проблема в том, что, хотя задача 0 мгновенно получает все, отправленное из задачи 1 (количество отправленных и полученных сообщений примерно совпадает), задача 1 получает только около 1/4 сообщений, отправленных задачей 0. После выполнения в течение минуты Есть сотни тысяч выдающихся сообщений.

Используя PAPI, я определил, что задача 1, кажется, блокируется при тестировании и irecv. Пропускная способность команды составляет всего 0,03 мкс / цикл, в отличие от> 0,2 для другой задачи, и остановка задачи в отладчике показывает, что она пытается получить блокировку. Однако блокировка приема и проверки не для «пропущенных» сообщений, а для другого класса гораздо более редких сообщений.

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

Я использую OpenMPI 1.5.3 с MPI_THREAD_MULTIPLE, и связь завершена через sm (две задачи находятся на одном узле).

Буду признателен за любые идеи, как это отследить.

...