【发布时间】: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