我正在试着写一个PBS脚本。
我必须在集群中使用4个节点,并运行4次可执行程序。困难在于,这4个执行必须逐个节点并行运行。
目前,我刚刚分配了节点
#PBS -l nodes=4:ppn=1问题是我不知道如何确保程序是并行运行的。我该怎么做呢?
发布于 2013-10-08 01:34:28
如果你不需要你的程序与其自身的其他副本进行通信,你就不需要MPI。MPI代表消息传递接口(MPI Forum Website),是编写并行程序最流行的方法。网上有很多教程,你可以通过快速搜索找到。我建议你看一看。您可以通过自己安装MPI库在自己的机器上进行测试。它们在大多数包管理器中都可用。最流行的开源实现是MPICH和Open MPI。如果你是从头开始,试着获得最新的版本,因为你会从不同的社区获得更多的帮助。
您可以使用mpiexec执行非MPI程序,它将跨多个节点启动(假设设置正确),但它不会执行任何操作来使它们进行通信。这必须显式地完成(同样,请参阅MPI教程)。
如果您不打算在进程之间进行通信(并行计算),那么我想知道为什么您一开始就想要在集群中运行同一程序的多个副本。我唯一想到的是简单的集群维护实用程序,但是有比PBS/MPI设置更好的方法来做这件事,我想如果你正在做集群维护,你应该已经知道要使用什么了。
发布于 2013-10-08 04:51:39
pbsdsh是实现您正在讨论的内容的一种非常简单的方法。
# this will launch one copy of <executable> on each execution slot. For -l nodes=4:ppn=1
# it will launch it once per node.
pbsdsh <executable> 有时,您必须根据您的环境提供pbsdsh的完整路径。缺省为/usr/local/bin/pbsdsh。
发布于 2013-10-07 04:58:15
如果不确定进程是否会在多个节点上同时启动,可以在代码中使用MPI_BARRIER函数。这将阻止所有节点执行,直到它们都执行完此函数。
https://stackoverflow.com/questions/19213496
复制相似问题