Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran MPI_Waitall中出现致命错误:无效的MPI_请求_Fortran_Runtime Error_Mpi - Fatal编程技术网

Fortran MPI_Waitall中出现致命错误:无效的MPI_请求

Fortran MPI_Waitall中出现致命错误:无效的MPI_请求,fortran,runtime-error,mpi,Fortran,Runtime Error,Mpi,我将代码放在下面,但在运行时遇到以下错误: aborting job: Fatal error in MPI_Waitall: Invalid MPI_Request, error stack: MPI_Wait(171): MPI_Waitall(count=4, req_array=0x000001400E0DE0,status_array = 0x0000000000012FD8C) failed MPI_Waitall(96). : Invalid MPI_Request MPI

我将代码放在下面,但在运行时遇到以下错误:

aborting job:
 Fatal error in MPI_Waitall: Invalid MPI_Request, error stack:
 MPI_Wait(171): MPI_Waitall(count=4, req_array=0x000001400E0DE0,status_array = 0x0000000000012FD8C) failed
 MPI_Waitall(96). : Invalid MPI_Request
 MPI_Waitall(96). : Invalid MPI_Request
当我使用阻塞发送和接收时,我的代码会给我一个正确的答案,但当我使用非阻塞发送和接收时,我会得到一个错误

这是我的代码:

   integer reqs(4)   ! required variable for non-blocking calls 
   integer stats(MPI_status_SIZE,4)   ! required variable for WAITALL routine 


      call MPI_INIT( ierr )
      call MPI_COMM_RANK( MPI_COMM_WORLD, taskid, ierr )
      call MPI_COMM_SIZE( MPI_COMM_WORLD, numtasks, ierr )

! Send data to the left neighbor
if ((taskid > 0) ) then
call MPI_ISEND(phi0(1,1),N_z,MPI_DOUBLE_PRECISION,taskid-1,11,MPI_COMM_WORLD,&
 reqs(1),ierr)
end if

!  Send data to the right neighbor
if (taskid < numtasks-1) then
call MPI_ISEND(phi0(1,cols),N_z,MPI_DOUBLE_PRECISION,taskid+1,10,MPI_COMM_WORLD,&
 reqs(2),ierr)
end if

    ! Receives data from the neighbor on the left
if (taskid > 0) then
call MPI_IRECV(phi0(1,0),N_z,MPI_DOUBLE_PRECISION,taskid-1,10,MPI_COMM_WORLD,&
 reqs(3),ierr)
end if 

    ! From the right side of the neighbors to get the data
if (taskid < numtasks-1) then
call MPI_IRECV(phi0(1,cols+1),N_z,MPI_DOUBLE_PRECISION,taskid+1,11,MPI_COMM_WORLD,&
 reqs(4),ierr)
end if

call MPI_WAITALL(4, reqs, status_array, ierr)
整数要求(4)!非阻塞调用所需的变量
整数统计(MPI\U状态\U大小,4)!WAITALL例程所需的变量
调用MPI_INIT(ierr)
调用MPI_COMM_RANK(MPI_COMM_WORLD、taskid、ierr)
调用MPI_COMM_大小(MPI_COMM_WORLD、numtasks、ierr)
! 将数据发送到左邻居
如果((taskid>0))那么
调用MPI_ISEND(phi0(1,1)、N_z、MPI_DOUBLE_PRECISION、taskid-1,11、MPI_COMM_WORLD、&
要求(1),ierr)
如果结束
!  将数据发送到正确的邻居
如果(taskid0),则
调用MPI_IRECV(phi0(1,0)、N_z、MPI_双精度、taskid-1,10、MPI_通信世界、&
要求(3),ierr)
如果结束
! 从邻居的右侧获取数据
如果(taskid
并非所有列组都有左邻域或右邻域,因此在某些列组中,
reqs
的四个元素都没有正确设置。将
reqs=MPI_REQUEST\u NULL
放在条件之前的某个位置,以便使用不会使
MPI_WAITALL
不满意的值初始化所有请求句柄。感谢您的回复@hristoilev。。。但我为每个发送和接收定义了边界,我不涉及从右侧或左侧发送或接收的所有级别。。。有可能在我的代码中显示我以使我理解吗?只需在程序/子程序的开头添加
reqs=MPI\u REQUEST\u NULL
。谢谢回复@hristoilev。。。我这样做了,错误就消失了。。。但当我运行我的代码时,我的cpu使用率起初是100%,但过了一秒钟就变成了零。。。我认为当它遇到waitall时,将完全停止并等待数据和数据不传输。。。如果您能告诉我我的问题到底出在哪里,我将不胜感激。有人能告诉我吗?并非所有级别都有左邻域或右邻域,因此在某些级别中,
reqs
的四个元素都没有正确设置。将
reqs=MPI_REQUEST\u NULL
放在条件之前的某个位置,以便使用不会使
MPI_WAITALL
不满意的值初始化所有请求句柄。感谢您的回复@hristoilev。。。但我为每个发送和接收定义了边界,我不涉及从右侧或左侧发送或接收的所有级别。。。有可能在我的代码中显示我以使我理解吗?只需在程序/子程序的开头添加
reqs=MPI\u REQUEST\u NULL
。谢谢回复@hristoilev。。。我这样做了,错误就消失了。。。但当我运行我的代码时,我的cpu使用率起初是100%,但过了一秒钟就变成了零。。。我认为当它遇到waitall时,将完全停止并等待数据和数据不传输。。。如果你能告诉我我的问题到底出在哪里,我将不胜感激。有人能告诉我吗?