2013-04-22 3 views
-1

Так что я пытаюсь написать себе умножение матрицы, использующее MPI (реализация OpenMPI). Проблема заключается в том, что хотя отправка частей матрицы из master в slaves с помощью MPI_Send/MPI_Recv работает правильно, MPI_Recv в главном процессе, который должен получать ответы от ведомых (отмеченный комментарием // !!!), ждет бесконечно, никогда не получая ответа ,Mpi_recv зависает во время ожидания сообщения, отправленного с ведомого процесса

Однако я вижу, что подчиненные процессы отправляют ответы (debugMessage в строке 167).

Для того, чтобы вопрос ясно, код можно найти здесь: http://pastebin.com/ZY9jQXDD

Итак, кто-нибудь знает, где проблема, и может помочь мне?

+0

Код, который вы ищите, больше не доступен. Пожалуйста, подумайте о том, чтобы включить его в свой вопрос. – niklasfi

ответ

1

Ваша проблема так же проста, как несоответствующие значения тегов. Мастер-процесс ожидает сообщения со значением тега 0:

MPI_Recv(&ans, sizeof(answer),MPI_BYTE,MPI_ANY_SOURCE,0, 
     MPI_COMM_WORLD,MPI_STATUS_IGNORE);   | 
// ------------------- tag = 0 -----------------------+ 

в то время как рабочие процессы посылают сообщения с тегом RESULT, который бывает быть определен как 1. Поместите правильный тег в принимающий вызов мастера или используйте MPI_ANY_TAG, если рабочие могут отправлять сообщения с различными тегами.

Беспроцентный совет: отправка структур с использованием MPI_BYTE чрезвычайно анти-MPI и очень непортативный стиль. Постройте производный тип данных с помощью MPI_Type_create_struct, чтобы отправить структуры портативным способом.

+0

... Черт возьми, я слепой! Спасибо! Кроме того, я прислушаюсь к вашим советам (позже, прямо сейчас, я хочу, чтобы это сработало) –

Смежные вопросы