我想在一个100节点的分布式内存集群中并行化一个C串行代码。集群由25个刀片组成,每个刀片由infiniband提供4个核心。在我使用pbs在不同的节点之间传播程序的几个串行运行之前。现在我想知道:
在这种情况下,openmp、mpi或openmp i(在我开始学习的时候,我不想尝试混合方法)的最佳选择是什么?
在哪里可以找到示例/教程?
对于带有main for循环的简单串行代码,openmp/mpi/opemmpi是否总是比pbs这样的排队方法执行得更好?
最佳答案
分布式内存在某种程度上排除了用于共享内存计算的openmp。MPI是一个标准,OpenMPI是该标准的实现(还有其他一些标准,如MPICH或LAM-MPI)。所以
mpi和openmpi是一个非常值得尊敬的实现。但是,我认为在没有mpi安装的情况下找到像您这样的集群是相对不寻常的,所以更好的选择可能是您已经安装了mpi。你当然应该和系统的经理谈谈这个问题。当然,在不知道自己在做什么的情况下,不应该尝试在集群上安装openmpi。
到处都是。这里有一个good place要开始。
pbs是一个作业调度系统。在像您这样的集群上,您通常会同时安装mpi和作业调度程序,如果不是pbs,那么网格引擎是最有可能的。
正如您已经发现的,您可以使用pbs(或网格引擎)将多个串行作业分派到集群。您还可以使用它将单个并行作业分派到集群,以便在您要求的任意多个处理器上执行。不过,您的问题可能会使您的问题令人尴尬地并行化,而且MPI可能会对您造成过度破坏。在你承诺将你的程序并行化之前,先用斜体搜索这个词,除非你想获得纯粹的享受,这无疑会带来结果。