多个处理器的MPI_send和MPI_recv函数C ++

时间:2018-04-01 17:08:55

标签: c++ matrix mpi distributed-computing partitioning

我在MPI编程方面很新,并且陷入了我的项目中。

我想为以下问题编写MPI代码。我不确定MPI的哪些功能是合适的。 这是问题所在:

处理器0具有2D矢量或Edges = {(0,4),(1,5)}的数组。它需要从其他处理器获取一些信息,这些处理器并不总是一个固定的处理器,它取决于设置的边缘。因此,我需要一个for循环如下:

if(my_rank==0)
{
    for(all pairs (i,j) in Edges)
    {
        send i (or j) to Processor r (r depends on the index i)
        recieve L_r from Processor r
        create (L_i, L_j, min(L_i,L_j)) // want to broadcast to all later.
    }
}

现在,我不知道如何处理处理器r,我应该在for循环中做什么? 请注意,我不能在if语句中执行它,因为我不知道哪个处理器会是这样的,因此根据处理器的数量,我需要一个if语句,我认为这是正确的方法。我可能有很多处理器,每个处理器都包含矩阵的某些部分。

需要指出我无法与传播者的子群进行通信,因为它完全取决于索引,基本上,我希望标签例如索引(0,4)需要与持有它的P4通信。

任何想法都表示赞赏。

1 个答案:

答案 0 :(得分:0)

我会这样做:

1)Proc 0构建了一个必须与之通信的每个进程的列表。

2)Proc 0将此列表广播到所有进程(或者只传递给他必须与之通信的进程,但这样会更复杂,一旦你有一个有效的版本就可以完成)

3)你执行你的通讯:

如果(秩== 0){...}

否则if(列表中的排名){...}