多个处理器C 的MPI_SEND和MPI_RECV功能

MPI_send and MPI_recv functions for multiple processors C++

本文关键字:MPI RECV 功能 SEND 处理器      更新时间:2023-10-16

我在MPI编程中是非常新的,并陷入了项目的中间。

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

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

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做,我应该在循环中做吗?请注意,由于我不知道哪个处理器是,因此我无法在IF语句中这样做,因此,根据处理器的数量,我需要一个IF语句,而我认为这是正确的方法。我可能有太多的处理器,每个处理器都有矩阵的某些部分。

需要指出我不能与通信子的子组进行通信,因为这一切都取决于索引,基本上,我希望标签(例如索引(0,4((需要与持有它的P4进行通信。

任何想法都将受到赞赏。

我会如下:

1(proc 0构建了必须与之交往的每个过程的列表。

2(proc 0将此列表广播到所有过程(或仅与他必须与之交流的过程,但这会更复杂,一旦获得有效的版本就可以完成(

3(您执行您的通讯:

if(rank == 0({...}

else if(排名在列表中({...}