我正在开发一个应用程序(在C++中),它涉及对数据数组的几个独立操作(FFTW +信号处理)。数组大小可以是512或1024 (尚未决定),数据类型为double。
我希望将这些独立的操作并行化,以充分发挥Pi的优势。很明显,我在过去会做的事情是使用pthread。
然而,(不幸的是:)我最近了解了MPI,我想知道我是否应该在这里使用它而不是好的旧线程。显然,如果我有一个设备集群(这就是我在互联网上搜索到的结果),MPI就是最佳选择。
但在我这种只有一台设备的情况下,MPI仍然是一个好的选择吗?(特别是当该设备是Raspberry-Pi时)。
(如果上面的答案是“否”,这是否意味着当只有一台计算机时,MPI通常是一个糟糕的选择?)
发布于 2018-06-06 18:36:28
MPI可能是一个很棒的选择,这取决于每个单元通信可以完成多少工作。这就是我是否会考虑MPI的方式。
我是一个MRI模拟框架的合著者。在这里,我们处理的是单独的“宏观”自旋,通常可以将其视为空间上不相互作用的。这使得人们可以在每一次旋转和局部bloch方程上进行穷人的并行化。所以只有很少的交流需要大量的物理知识。即使在单个设备上,它也可以像pthread一样执行。
然而,在光谱的另一边,我看到了大量的并行矩阵求逆,就像SCALAPACK所做的那样。在那里,你会发现每个单位的计算都有大量的交流。这就是世界上没有机会与pthread竞争的地方。
即使您打算使用pi集群,在这种情况下,您也会同时使用MPI和pthread,并且可能无法实现收支平衡,因为100Mbit网络存在严重的延迟问题。
有单板机器有1 1Gb/s的网络和更强的fp性能,如覆盆子pi,那里的通信成本可能是值得的。
tldr:为了让MPI变得有意义,我们需要computation/communication >> 1。
https://stackoverflow.com/questions/50611597
复制相似问题