首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >所有的广播实现和MPI

所有的广播实现和MPI
EN

Stack Overflow用户
提问于 2021-05-22 18:51:42
回答 1查看 212关注 0票数 0

我正在学习MPI,目前正在尝试使用发送和接收操作来实现对所有广播的所有操作。我知道处理器的数量将是2的力量,我想为这个问题实现一个有效的解决方案。我把我的想法安排得如下所示。

在一个由8个处理器组成的平衡二叉树中

首先,完成红色复制和交换操作。然后完成绿色操作,最后紫色操作完成所有消息共享。

假设:

  • 处理器0有消息A
  • 处理器1有消息B
  • 处理器2有消息C
  • 处理器3有消息D
  • 处理器4具有消息E
  • 处理器5有消息F
  • 处理器6有消息G
  • 处理器7有消息H

其中一些步骤:

  1. 处理器0与处理器7共享其消息,反之亦然。所以他们都有信息A和H。
  2. 处理器1与处理器6共享其消息,反之亦然。所以他们都有信息B和G。
  3. 处理器2与处理器5共享其消息,反之亦然。所以他们都有C和F信息。
  4. 处理器3与处理器4共享其消息,反之亦然。因此,它们都有消息D和E. (红色操作在这一步完成)
  5. 处理器0与处理器3共享其消息,反之亦然。所以他们都有and和E的信息。
  6. 处理器1与处理器2共享其消息,反之亦然。所以他们都有B和F的消息

..。

考虑到当前处理器的级别,我无法编写令人满意的代码来找出这对处理器。我想在开头递归地找到所有可能的对,就像要使用的查找表一样。但我想问一问是否有更好的方法可以继续下去?这一做法是否正确?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-29 00:09:23

基于吉尔斯·古艾拉代特的评论和我对这个问题进行的其他研究,我解决了我的问题,并想分享我在这个问题上所使用的方法。

首先,在实施全方位广播之前,我强烈建议您先看看这个页面。对于我的问题,我知道处理器的数目是2的幂,所以我用超立方体方法实现了这个算法。

代码语言:javascript
复制
procedure ALL_TO_ALL_BC_HCUBE(my_id, my_msg, d, result) 
begin 
   result := my_msg; 
   for i := 0 to d - 1 do 
       partner := my id XOR 2i; 
       send result to partner; 
       receive msg from partner; 
       result := result U msg; //U for union
   endfor; 
end ALL_TO_ALL_BC_HCUBE 

该算法是从上述页面中提取的。

我将我的结果与内置的MPI_Alltoall例程进行了比较。我的实现的运行时似乎比内置版本快1.5倍-2倍。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67653133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档