我在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通信。
任何想法都表示赞赏。
答案 0 :(得分:0)
我会这样做:
1)Proc 0构建了一个必须与之通信的每个进程的列表。
2)Proc 0将此列表广播到所有进程(或者只传递给他必须与之通信的进程,但这样会更复杂,一旦你有一个有效的版本就可以完成)
3)你执行你的通讯:
如果(秩== 0){...}
否则if(列表中的排名){...}