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

什么更容易学习和调试OpenMP或MPI?,openmp,openmpi,Openmp,Openmpi,我有一个数字处理C/C++应用程序。它基本上是不同数据集的主循环。我们可以访问具有openmp和mpi的100节点群集。我想加速应用程序,但我绝对是mpi和openmp的新手。我只是想知道什么是最容易学习和调试的,即使性能不是最好的 我还想知道什么是最适合我的主循环应用程序的 如果您的程序只是一个大循环,那么感谢您使用OpenMP编写如下程序: #pragma omp parallel for OpenMP仅对共享内存编程有用,除非您的群集运行类似的程序,否则这意味着使用OpenMP的并行版本

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

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


如果您的程序只是一个大循环,那么感谢您使用OpenMP编写如下程序:

#pragma omp parallel for
OpenMP仅对共享内存编程有用,除非您的群集运行类似的程序,否则这意味着使用OpenMP的并行版本一次最多只能在一个节点上运行

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

考虑到您所说的“针对不同的数据集”,听起来您的问题实际上可能属于“令人尴尬的并行”类别,如果您有100多个数据集,您可以设置调度程序,使其在每个节点上运行一个数据集,直到它们全部完成,无需修改代码,只需使用一个节点,速度几乎可以提高100倍


例如,如果您的集群使用condor作为调度程序,那么您可以将每个数据项提交一个作业到“香草”宇宙,只改变作业描述的“Arguments=”行。(对于Condor,还有其他更合理的方法可以做到这一点,对于torque、sge等,也有类似的方法。)

OpenMP基本上适用于SMP机器,因此,如果您想扩展到数百个节点,您无论如何都需要MPI。但是,您可以同时使用这两种方法。MPI跨节点分配工作,OpenMP跨核心或每个节点多个CPU处理并行性。我想说OpenMP比处理pthreads容易得多。但由于它的粒度更粗,您从OpenMP获得的速度通常低于手动优化的pthreads实现。

谢谢。在mosix/openmosix死后的一段时间里,我在工作中玩得很开心!