Parallel processing MPI_测试:无效的MPI_请求

Parallel processing MPI_测试:无效的MPI_请求,parallel-processing,mpi,Parallel Processing,Mpi,我想测试mpi_iSend和mpi_iRecv是否运行良好 我有两个requestargument向量:一个用于所有mpi_iSend的向量,另一个用于所有mpi_iRecv 关键是程序在开始运行MPI_测试周期之前运行良好。我试过用2个数字做I=1,2,仍然是相同的错误 PMPI_测试中出现致命错误:无效的MPI_请求,错误堆栈: PMPI_Test166:MPI_Testrequest=0x7fff93fd2220,flag=0x7fff93fd1ffc, 状态=0x7fff93fd2890

我想测试mpi_iSend和mpi_iRecv是否运行良好

我有两个requestargument向量:一个用于所有mpi_iSend的向量,另一个用于所有mpi_iRecv

关键是程序在开始运行MPI_测试周期之前运行良好。我试过用2个数字做I=1,2,仍然是相同的错误

PMPI_测试中出现致命错误:无效的MPI_请求,错误堆栈: PMPI_Test166:MPI_Testrequest=0x7fff93fd2220,flag=0x7fff93fd1ffc, 状态=0x7fff93fd2890失败的PMPI_测试121:无效的MPI_请求


istatus是如何声明的?好的,用var声明更新了它。您有匹配的发送和接收吗?现在,在主/从模式中,您似乎只在从节点上,因为您正在向节点1发送/接收数据。节点1有匹配的发送/接收吗?是的,我已经更新了。
INTEGER :: ierr, myid, istatus(MPI_STATUS_SIZE), num, i, n
INTEGER,parameter :: seed = 86456, numbers=200 
INTEGER :: req1(numbers), req2(numbers)
LOGICAL :: flag

CALL MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierr)
IF (myid==0) THEN

    DO n=1, numbers

        req1(n)=0
        req2(n)=0
        num=IRAND()

        CALL MPI_ISEND(num,1,MPI_INTEGER,1,1,MPI_COMM_WORLD,req1(n),ierr)
        CALL MPI_IRECV(best_prime,1,MPI_INTEGER,1,0,MPI_COMM_WORLD,req2(n),ierr)

    END DO

ELSE IF (myid==1) THEN

    DO i=1, numbers
        CALL MPI_TEST(req2(i),flag,istatus,ierr)
        IF (flag .eqv. .false.) THEN
            WRITE(*,*)'RECV',i,'non-blocking FAIL'
        ELSE IF (flag .eqv. .true.) THEN
            WRITE(*,*)'RECV',i,'non-blocking SUCCESS'
        END IF
    END DO

END IF