如何在并行实现中减少用C ++和MPI编码的Barnes-Hut N-Body的IPC时间

时间:2018-06-14 20:12:37

标签: c++ parallel-processing ipc

使用Barnes-Hut算法并行实现模拟N体问题,如何减少进程间通信(IPC)时间以构建高效代码?

目前,对于我的C ++和MPI实现,使用的处理器/内核越多,使用的进程间通信时间就越多,这大大减慢了并行实现的执行时间。

1 个答案:

答案 0 :(得分:0)

  

我可以减少进程间通信(IPC)构建高效代码的时间吗?

简短回答:是的,但它不会使代码更好,如果已经优化了任何其他部分

为了更清楚地了解这个结论,让我们再添加一些细节,让我们重新使用Barne-Hut算法运行时分析,就像TU Delft发布的那样:

  

通过发送消息来访问哈希表的远程部分来遍历Barnes-Hut树。有许多标准技术可以降低所需的通信,包括重叠通信和计算,预取树的各个部分,按照它们变得可用的顺序处理树节点而不是它们在树中出现的顺序,以及缓存。
  
  以下是从文献中获取的天体物理学计算的一些性能结果,再次在512处理器Intel Delta上。模拟中涉及880万个粒子,这些粒子最初是均匀分布的。 Barnes-Hut一步的时间是114秒,即5.8 Gflops。时间的细分是

   Decomposing the domain           7 seconds
   Building the tree                7 seconds
   Tree traversal                  33 seconds
   Communication during traversal   6 seconds <------- 6 / 114 ~ < 5 %
   Force evaluation                54 seconds
   Load Imbalance                   7 seconds
   Total                          114 seconds
     

因此,力评估的浮点工作几乎花费了一半的时间,因此实现效率相当高。在计算的后期阶段,粒子变得高度聚集,时间增加到160秒,但与上面的时序分解大致相同。

看过这个,有95%的时间,每次迭代需要大约108秒,这比运行时间的某些部分削减的机会要高得多,因为IPC保留了N体算法“在一起”正确“跨越” - 分布式计算基础架构的足迹。

相对改进速度提高100%的IPC模块(涉及不存在或不可用的IPC技术技巧)可以节省不超过3秒的费用(但是,未知的附加副作用成本)。

相反,相比非快速增加10%的非IPC处理块的相对改进将带来一个 ~10.6秒的账单,附加的副作用成本为零,甚至在IPC实现(驱动程序,堆栈等)部分略有改进。

这更像是一个专业的管理现实成本/收益(和副作用)而非算法问题。