【问题标题】:Using MPI on a single Raspberry-Pi在单个 Raspberry-Pi 上使用 MPI
【发布时间】:2018-11-09 17:12:33
【问题描述】:

我正在开发一个应用程序(在 C++ 中),它涉及数据数组上的几个独立操作(FFTW + 信号处理)。 数组大小可以是 512 也可以是 1024(尚未决定),数据类型是 double。

我希望使这些独立操作并行化,以充分利用 Pi。 很明显,我过去会使用 pthreads。

但是,(不幸的是:))我最近了解了 MPI,我想知道是否应该在这里使用它而不是旧线程。 显然,如果我有一个设备集群(这就是我搜索互联网时得到的),那么 MPI 将是可行的方法。

但是在我只有一个设备的情况下,MPI 仍然是一个不错的选择吗? (特别是当该设备是 Raspberry-Pi 时)。

(如果上面的答案是“否”,这是否意味着当只有一台计算机时,MPI 通常是一个不好的选择?)

【问题讨论】:

  • 如果您知道 pthreads 并且不打算使用多树莓集群,我不确定我个人是否看到使用 MPI 的任何好处,但这只是我的 2 便士价值!
  • 是的,我想说如果您正在运行 (a) 完全独立的任务,(b) 在单个节点上,有更简单的方法来做您想做的事情 - 您可以运行一次复制多个程序,手动或使用GNU Parallel之类的工具
  • MPI 有效执行的一件事是数据本地化。这在具有多个套接字的单节点系统上可能很重要(不是 Pi 的情况)。默认情况下,MPI 程序中的数据不共享,而线程则共享。不过,使用 FFTW 可能需要注意的一件事是,您必须跳过一两圈以确保它是线程安全的。如果您使用 MPI 进行并行化,则不必担心线程安全。我也支持查看 GNU Parallel 的评论。

标签: c++ multithreading mpi raspberry-pi3 fftw


【解决方案1】:

MPI 可能是一个很棒的选择,具体取决于每个单元通信可以完成多少工作。这就是我是否会考虑 MPI 的方式。

我是 MRI 模拟框架的合著者。在那里,我们处理单个“宏观”旋转,通常可以将其处理为空间非交互。这允许人们对每一个自旋和局部布洛赫方程进行穷人的并行化。所以很多物理很少交流。即使在单个设备上,它也可以像 pthreads 一样执行。

然而,另一方面,我看到了大规模的并行矩阵求逆,就像使用 SCALAPACK 完成的那样。在那里你会发现每个单位计算的大量通信。这就是世界上没有机会与 pthread 竞争的地方。

即使您打算使用 pi 集群,在这种情况下您也会同时使用 MPI 和 pthreads,并且可能无法收支平衡,因为 100Mbit 网络存在严重的延迟问题。
有1Gb/s网络的单板机,和树莓派一样fp性能更强,通信成本可能是值得的。

tldr:为了让 MPI 有意义,需要computation/communication >> 1

【讨论】:

    猜你喜欢
    • 2013-09-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2017-12-10
    • 2015-01-26
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多