下面是一个源代码实现的输出,如下所示。我不确定它是什么意思,也不知道我应该如何修复代码。
aborting job:
Fatal error in MPI_Wait: Invalid MPI_Request, error stack:
MPI_Wait(139): MPI_Wait(request=0xffffd6a4, status0xffffd690) failed
MPI_Wait(75) : Invalid MPI_Request
rank 0 in job 1 <processor #) caused collective abort of all ranks
exit status of rank 0: return code 13源代码:
#define Rows 48
...
double *northedge1 = new double[Rows];
double *northofnorthedge3 = new double[Rows];
...
...
int main (int argc, char *argv[])
{
....
....
MPI_Request send_request, recv_request;
...
...
if ((my_rank) == 1)
{
MPI_Isend(northedge1, Rows, MPI_DOUBLE, my_rank+2, 0, MPI_COMM_WORLD, &send_request);
}
if ((my_rank) == 3)
{
MPI_Irecv(northofnorthedge3, Rows, MPI_DOUBLE, my_rank-2, MPI_ANY_TAG, MPI_COMM_WORLD,
&send_request);
}
MPI_Wait(&send_request, &status);
.....
MPI_Finalize ()发布于 2011-05-18 04:41:11
它看起来像是从0级调用MPI_Wait(),即使你只在1级和3级进行非阻塞通信,所以0级没有有效的send_request,所以MPI_Wait是无效的。在上面的代码中,看起来你应该有
if ( (my_rank == 1) || (my_rank == 3))
MPI_Wait(&send_request, &status);https://stackoverflow.com/questions/6034943
复制相似问题