我得到了一点运动,我必须通过使用MPI来估算n个球体的总体积来实现蒙特卡罗算法,其中心和半径的坐标为3维。即使我们必须使用MPI,我们也可以在本地机器上启动所有进程,因此没有网络开销。我实现了这个版本的两个版本:
一,使用MPI_Send和MPI_Recv(其中等级0的过程仅等待其他人的部分结果执行最终总和) http://pastebin.com/AV41hJqn
另一方面,使用MPI_Reduce,此处等级0的过程也等待部分结果。 http://pastebin.com/8b0czv6a
我预计两个程序都会花费相同的时间来完成,但我发现使用MPI_Reduce的程序更快。为什么这个?差异在哪里?
答案 0 :(得分:4)
可能有很多原因取决于您正在使用的MPI实现,您正在运行的硬件类型以及如何优化实施以利用它。 This Google Scholar search给出了关于此的各种工作的一些想法。为了给你一些可能的想法:
这不是一个全面的列表,但希望它可以帮助您入门,并提供一些想法,以便在您感兴趣时搜索更多详细信息。