MPI消息在某些处理器上出现乱码

时间:2016-08-02 18:25:22

标签: c++ mpi

我的部分代码对最初完全存在于进程0的有限元网格进行分区,并将其中的一部分发送给其他处理器。这涉及将节点ID列表以及其他数据发送到其他处理器。我的代码看起来有点像这样:

std::vector<std::vector<unsigned int> > id_send_lists(nproc);
// Fill in the id lists with correct ids here...

if (rank==0){
    MPI_Request reqs[nproc-1];
    for (int p=1; p<nproc; ++p){
        MPI_Isend(node_id_lists[p].data(), node_id_lists[p].size(), MPI_UNSIGNED, p, 0, _communicator, &reqs[p-1]);
    }
    MPI_Waitall(nproc-1, reqs.data(), MPI_STATUSES_IGNORE);
}
else{
    MPI_Status status;
    int count;
    std::vector<unsigned int> id_recv_vec;
    MPI_Probe(0, 0, MPI_COMM_WORLD, &status);
    MPI_GetCount(&status, MPU_UNSIGNED, &count);
    id_recv_vec.resize(count);
    MPI_Recv(id_recv_vec.data(), count, MPI_UNSIGNED, 0, 0, MPI_COMM_WORLD, &status);
    // Parse the id vector and create nodes here...
}

然而,出于某种原因,我的消息有时会在路上出现乱码,这取决于我正在查看的接收处理器以及我正在运行的处理器数量。例如,在1到5个处理器上运行时,我的代码似乎工作得非常好但是当我在6个处理器上运行时,发送到处理器3的消息在路上的某个地方出现乱码,只收到随机整数。然而,处理器1,2,4和5上收到的消息很好。另外,我在处理器0发送它们之前检查了ID,它们看起来很好。

奇怪的是,它在7个处理器上再次正常运行,然后在8个或更多处理器上,总是至少有一个处理器收到乱码消息。

0 个答案:

没有答案