什么更容易学习和调试 OpenMP 或 MPI?

Posted

技术标签:

【中文标题】什么更容易学习和调试 OpenMP 或 MPI?【英文标题】:What is easier to learn and debug OpenMP or MPI? 【发布时间】:2011-05-02 18:12:48 【问题描述】:

我有一个处理数字的 C/C++ 应用程序。它基本上是不同数据集的主循环。我们可以访问具有可用 openmp 和 mpi 的 100 节点集群。我想加快应用程序的速度,但我是 mpi 和 openmp 的绝对新手。我只是想知道即使性能不是最好的,什么是最容易学习和调试的。

我还想知道什么是最适合我的主循环应用程序的。

谢谢

【问题讨论】:

【参考方案1】:

OpenMP 本质上是为 SMP 机器设计的,所以如果你想扩展到数百个节点,无论如何你都需要 MPI。但是,您可以同时使用两者。 MPI 用于跨节点分配工作,OpenMP 用于处理跨内核或每个节点的多个 CPU 的并行性。我会说 OpenMP 比使用 pthread 容易得多。但它的粒度较粗,您从 OpenMP 获得的速度通常低于手动优化的 pthreads 实现。

【讨论】:

【参考方案2】:

如果您的程序只是一个大循环,使用 OpenMP 可以像编写一样简单:

#pragma omp parallel for

OpenMP 仅对共享内存编程有用,除非您的集群运行类似kerrighed 的程序,否则使用 OpenMP 的并行版本一次最多只能在一个节点上运行。

MPI 基于消息传递,入门稍微复杂一些。优点是您的程序可以同时在多个节点上运行,并在需要时在它们之间传递消息。

鉴于您说“针对不同的数据集”,听起来您的问题实际上可能属于“令人尴尬的并行”类别,如果您有超过 100 个数据集,您可以设置调度程序来运行一个数据设置每个节点,直到它们全部完成,无需修改代码,并且比仅使用单个节点的速度快近 100 倍。

例如,如果您的集群使用 condor 作为调度程序,那么您可以将每个数据项 1 个作业提交到“vanilla”宇宙,仅更改作业描述的“Arguments =" 行。 (Condor 有其他方法可以做到这一点,这可能更明智,扭矩、sge 等也有类似的东西。)

【讨论】:

谢谢。在 mosix/openmosix 死后不久,我在工作中玩它很开心!

以上是关于什么更容易学习和调试 OpenMP 或 MPI?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 OpenMP 减少在共享内存结构上比 MPI 慢?

什么是 HPC 内核 (MPI-OpenMP)?

OpenMP 和 MPI 混合程序

在混合 MPI/OpenMP 中进行 MPI 调用的线程

OpenMP 和 MPI 交互

谐波级数和 c++ MPI 和 OpenMP