5

我想在 100 节点分布式内存集群中并行化 C 串行代码。该集群由 25 个刀片组成,每个刀片由 infiniband 提供 4 个内核。在我刚刚使用 PBS 在不同节点之间传播程序的几个串行运行之前。现在我想知道:

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

2 回答 2

15

分布式内存排除了用于共享内存计算的 OpenMP。MPI 是一个标准,OpenMPI 是该标准的实现(还有其他标准,例如 MPICH 或 LAM-MPI)。所以

  1. MPI 和 OpenMPI 是其完美的实现。但是,我认为在没有安装 MPI 的情况下找到像您这样的集群是相对不寻常的,因此更好的选择可能是您已经安装的 MPI。您当然应该就此与系统管理人员交谈。而且您当然不应该在不知道自己在做什么的情况下尝试在集群上安装 OpenMPI。

  2. 到处都是。这是一个 很好的起点。

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

正如您已经发现的那样,您可以使用 PBS(或 Grid Engine)将多个串行作业分派到一个集群。您还可以使用它将单个并行作业分派到集群,以便在您要求的任意数量的处理器上执行。但是,您的问题提出了一种可能性,即您的问题是令人尴尬的并行,并且 MPI 可能对您来说太过分了。在你承诺并行化你的程序之前,用斜体字搜索一下这个术语——除非你想纯粹地享受这无疑会带来的乐趣。

于 2010-12-15T11:01:25.687 回答
2

OpenMP 适用于共享内存计算机,我相信您不能将它与分布式内存一起使用。所以你将不得不使用 MPI。

一个好的 MPI 教程是: https ://computing.llnl.gov/tutorials/mpi/

于 2010-12-15T10:55:20.520 回答