二叉树求和与蝶式求和的并行算法实现
作者:刘庆涛 1842857470@qq.com
二叉树求和
PCAM分析
-
划分:将一组数据(arr)划分,数组中单个数据为一组。
-
通信:各组需要传递自己的数据,在求和过程中,上图中arr[1]与arr[0]求和时,需要将arr[1]传递给arr[0],更新arr[0]=arr[0]+arr[1];arr[2]与arr[3]求和时,需要将arr[3]传递给arr[2],更新arr[2]=arr[2]+arr[3],以此类推。和保存在arr[0]中,然后要将arr[0]值按相反的路径,传递给其他各组。
-
组合:各组不需要组合。
-
映射:将各组映射到不同的处理器或进程,利用MPI库实现各组的通信。
源码
见文章末尾
运行
编译之后,打开命令行,输入
cd C:\Code\C++\test\x64\Debug
mpiexec -n 对 前 x 个 数 求 和 {对前x个数求和} 对前x个数求和 test.exe
下图是x=8和x=4的运行情况
蝶式求和
PCAM分析
-
划分:将一组数据(arr)划分,数组中单个数据为一组。
-
通信:各组需要传递自己的数据,在求和过程中,上图中arr[1]与arr[0]求和时, 相互传递本组的值,同时更新arr[0]=arr[0]+arr[1] arr[1]=arr[0]+arr[1];第二轮求和时,arr[0]组与arr[2]组相互交换数据求和;第三轮以此类推。最终,各组都保持了全和。
-
组合:各组不需要组合。
-
映射:将各组映射到不同的处理器或进程,利用MPI库实现各组的通信。
源码
源码见文章末尾
运行
cd C:\Code\C++\test\x64\Debug
mpiexec -n 8 test.exe
运行效果如下:
源码资源:
https://download.csdn.net/download/GooTal/76969609