Я только что столкнулся с подобной проблемой.
MPI_Request* req = (MPI_Request*) malloc(sizeof(MPI_Request)*2*numThings*numItems);
int count;
for( item in items ) {
count = 0;
for( thing in things ) {
MPI_Irecv(<sendBufF>, 1, MPI_INT, <src>, <tag>, MPI_COMM_WORLD, &req[count++]);
MPI_Isend(<recvBufF>, 1, MPI_INT, <dest>, <tag>, MPI_COMM_WORLD, &req[count++]);
}
}
MPI_Status* stat = (MPI_Status*) malloc(sizeof(MPI_Status)*2*numThings*numItems);
MPI_Waitall(count, req, stat);
Вызов MPI_Waitall(...)
осуществляется со значением count
, которое меньше числа выполненных Isend и recv;что приводит к тому, что сообщения не принимаются.Перемещение count=0
за пределы цикла for устранило ошибку MPI_Finalize(...)
.