2010-12-15 47 views
4

我想并行化一个100个节点的分布式内存集群中的C串行代码。该集群由25个刀片组成,每个刀片有四个核心,每个都由infiniband组成。在我使用PBS在不同节点之间传播程序的几个串行运行之前。现在我想知道:分布式内存集群的OpenMP或MPI或OpenMPI?

  1. 什么是在这种情况下OpenMP或MPI或OpenMPI的最佳选择(目前我不想尝试混合的方法,因为我开始学习)?
  2. 我在哪里可以找到示例/教程?
  3. 对于一个简单的带有for循环的串行代码,OpenMP/MPI/OpemMPI总是比像PBS这样的排队方法执行得更好吗?

回答

13

分布式存储器种规则出的OpenMP其是用于共享内存计算。 MPI是一个标准,OpenMPI是该标准的实现(还有其他的如MPICH或LAM-MPI)。所以

  1. MPI和OpenMPI是一个非常可观的实现。然而,我认为找到这样的没有MPI安装的群集是相对不寻常的,因此更好的选择可能是您已经拥有的MPI安装。你当然应该向系统管理人员说明这一点。而且你不应该在不知道你在做什么的情况下尝试在群集上安装OpenMPI。

  2. 到处都是。这里有一个good place开始。

  3. PBS是一个作业调度系统。在像你这样的集群上,你通常会同时安装MPI和安装作业调度程序,如果不是PBS,那么最有可能的就是Grid Engine。

正如你已经发现你可以使用PBS(或Grid Engine)来分派多个串行作业到一个集群。您也可以使用它将单个并行作业分派到集群,以便在您请求的许多处理器上执行。然而,你的问题提出了这种可能性,但你的问题是:不好意思平行,并且MPI可能会让你过度。谷歌周围的斜体字在你承诺平行你的程序之前 - 除非你想享受纯粹的享受,这将毫无疑问的结果。

2

OpenMP是用于共享内存计算机,我相信你不能在分布式内存中使用它。所以你将不得不使用MPI。

良好MPI教程: https://computing.llnl.gov/tutorials/mpi/

+0

英特尔将OpenMP移植到其“Cluster OpenMP”项目中的分布式内存中(现在已放弃)。主页:https://software.intel.com/en-us/articles/cluster-openmp-for-intel-compilers,论文“将OpenMP扩展到群集”:http://assets.devx.com/goparallel/19403 .pdf HPCWire:http://www.hpcwire.com/2006/05/19/openmp_on_clusters-1/和基准测试[“英特尔集群OpenMP的最初经验”](http://citeseerx.ist.psu.edu/viewdoc /download?doi=10.1.1.87.8887&rep=rep1&type=pdf#page=61) – osgx 2014-05-01 02:49:49