MPI相关 我用MPI中的MPI_Isend发送很多数据,然后再接受发现只有256个数据收到了,请问有人知道原因吗?

在MPI程序中,使用MPI_Isend发送多个数据到邻居进程,但只接收到256个数据。代码展示了如何遍历接口并发送数据,然后通过MPI_Irecv接收并检查停止标志。问题可能是由于缓冲区大小限制或通信同步问题导致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MPI问题

for(interfaceMCiter = interfaceMCs.begin () ; interfaceMCiter != interfaceMCs.end () ; interfaceMCiter++)
    {    
        MathCover* nd = (*interfaceMCiter) ;
     

   
         double *coord = nd->getCentrixCoord ();
        sbuf[0] =static_cast<double> (nd->_boundary .size ());
        sbuf[1] = coord[0];
        sbuf[2] = coord[1];
        sbuf[3] = coord[2];
        delete[] coord;
    
        for(i=0;i<_numOfNeighborSubdm ;i++)
        {
            p2 = (*_neigborsubdms)(i);
      
            ierr = MPI_Isend(sbuf, nn, MPI_DOUBLE, p2, _myRank ,MPI_COMM_WORLD, &reqs);                     
        }


    }
     
    //terminate signal
    sbuf[0] =-11;
    for(i=0;i<_numOfNeighborSubdm ;i++)
    {
        p2 = (*_neigborsubdms)(i);
    
        ierr = MPI_Isend(sbuf, nn, MPI_DOUBLE, p2, _myRank ,MPI_COMM_WORLD, &reqs);            
        printf("%d send to %d\n",_myRank,p2);
     
    }

    int stop=0;
    do {
        ierr = MPI_Irecv(rbuf, nn, MPI_DOUBLE, MPI_ANY_SOURCE, MPI_ANY_TAG,MPI_COMM_WORLD, &reqr);
        ierr=MPI_Wait(&reqr,&status);
        nVtxLoop = static_cast<int> (rbuf[0]) ;
        if(nVtxLoop==-11)
        {
    
            stop++;
        }
    
        MathCover* nd=0;
        for(interfaceMCiter = interfaceMCs.begin () ; interfaceMCiter != interfaceMCs.end () ; interfaceMCiter++)
        {    
            if(nVtxLoop == (*interfaceMCiter)->_boundary.size ())
            {
                double * coord = (*interfaceMCiter)->getCentrixCoord ();
                if( fabs(rbuf[1] - coord[0])<1.0e-5 && 
                    fabs(rbuf[2] - coord[1])<1.0e-5 && 
                     fabs(rbuf[3] - coord[2])<1.0e-5 )
                {
                    nd = (*interfaceMCiter);
                    delete[] coord ;
                    break;
                }
                delete[] coord ;
            }
           
        }
        if(nd) 
        {
            nd->set_parallelType (INTERFACE_Node);
        }

    }while (stop!=_numOfNeighborSubdm);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值