我正在学习MPI,目前正在尝试使用发送和接收操作来实现对所有广播的所有操作。我知道处理器的数量将是2的力量,我想为这个问题实现一个有效的解决方案。我把我的想法安排得如下所示。
首先,完成红色复制和交换操作。然后完成绿色操作,最后紫色操作完成所有消息共享。
假设:
其中一些步骤:
..。
考虑到当前处理器的级别,我无法编写令人满意的代码来找出这对处理器。我想在开头递归地找到所有可能的对,就像要使用的查找表一样。但我想问一问是否有更好的方法可以继续下去?这一做法是否正确?
发布于 2021-05-29 00:09:23
基于吉尔斯·古艾拉代特的评论和我对这个问题进行的其他研究,我解决了我的问题,并想分享我在这个问题上所使用的方法。
首先,在实施全方位广播之前,我强烈建议您先看看这个页面。对于我的问题,我知道处理器的数目是2的幂,所以我用超立方体方法实现了这个算法。
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倍。
https://stackoverflow.com/questions/67653133
复制相似问题