У меня есть две функции с разными алгоритмами.В первой функции я реализовал неблокирующую связь (MPI_Irecv, MPI_Isend) и программа работает без ошибок.Даже когда я изменяю неблокирование на блокировку связи, все хорошо.Нет тупика.Но если я реализую вторую функцию с базовой блокировкой связи, как это (свел алгоритм к проблеме):
if( my_rank == 0)
{
a = 3 ;
MPI_Send(&a,1,MPI_DOUBLE,1,0,MPI_COMM_WORLD) ;
}
else if( my_rank == 1 )
{
MPI_Recv(&a,1,MPI_DOUBLE,0,0,MPI_COMM_WORLD, &status ) ;
}
Итак, процесс 1 должен получить значение a из процесса 0. Но я получаю этоошибка:
Неустранимая ошибка в MPI_Recv: сообщение обрезано, стек ошибок: MPI_Recv (187) .......................:MPI_Recv (buf = 0xbfbef2a8, count = 1, MPI_DOUBLE, src = 0, tag = 0, MPI_COMM_WORLD, status = 0xbfbef294) не удалось MPIDI_CH3U_Request_unpack_uebuf (600): сообщение обрезано;Получено 32 байта, но размер буфера равен 8, ранг 2 в задании 39. Blabla вызвал коллективное прерывание всех рангов. Статус выхода на ранг 2: уничтожен по сигналу 9
Если запустить программу только с одним из двухфункции, то они работают, как они должны.Но оба вместе приводят к сообщению об ошибке выше.Я понимаю сообщение об ошибке, но я не знаю, что я могу сделать, чтобы предотвратить это.Может кто-нибудь объяснить мне, где я должен искать ошибку?Поскольку в первой функции я не захожу в тупик, я предполагаю, что не может быть полученного сообщения от первой функции, которое приводит к ошибке во второй.