【发布时间】:2018-09-11 00:53:28
【问题描述】:
我是 MPI 编程的新手,在我的项目中陷入困境。
我想为以下问题编写 MPI 代码。我不确定 MPI 中的哪些功能是合适的。 问题来了:
处理器 0 有一个二维向量或 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 语句。我可能有很多处理器,每个处理器都包含矩阵的某些部分。
需要指出我无法与通信器的子组通信,因为这完全取决于索引,基本上,我想要标签,例如需要与持有它的 P4 通信的索引 (0,4)。
任何想法都值得赞赏。
【问题讨论】:
-
自定义通讯器,也许?如果您不与 MPI_COMM_WORLD 通信,则必须查看子组。 mpitutorial.com/tutorials/…
-
@SeverinPappadeux 不,我不能,这完全取决于索引,基本上,我想要标签,例如需要与持有它的 P4 通信的索引 (0,4)。
-
我猜如果您不知道哪个节点将拥有数据,您将不得不围绕短(特定整数)消息和非阻塞 I/O(MPI_Isend () 和 MPI_Irecv() 加上 MPI_Wait)。也许stackoverflow.com/questions/10017301/…?
-
您能否在启动时将作业特定 (i,j) 链接到节点等级?
-
在我看来,您应该研究 MPI 的分布式图拓扑。
标签: c++ matrix mpi distributed-computing partitioning