2013-08-22 73 views
0

我有一个在群集的单个核心上运行的脚本。每个串行作业都是独立的。每次使用qsub时,我用来运行的集群都会分配一个核心,因此它假定ppn = 1,然后其他所有人都可以使用其他核心。我只是通过循环qsub提交我想运行的串行作业的数量。运行串行作业的HPC群集

然而,我们使用的另一个群集会自动为每个用户分配一个节点(他们已经设置了节点,使得节点是最小的单元而不是核心)。每个节点有16个核心。如果我然后提交我的脚本,它将被分配所有16个内核,但它只运行一个作业。我很奇怪,因此我如何运行脚本并使其全部使用16个内核?我想到的

一个想法是使用其他脚本循环我现在这样的脚本运行兼职:在

为I {} 1..16做 ./[my脚本] & DONE 等待

然后qsub这与nodes = 1,ppn = 16。然后,我认为这会产生16个进程,但我不知道它实际上是使用全部16个内核还是一个试图运行全部16个进程的内核。哪个是对的?这样做的速度也比我以往的做法要慢40%左右(两种方法都是在旧集群上测试的)。有没有更好的方法来做到这一点?

在此先感谢。

回答

0

当你说'16 copies'方法运行速度慢40%时,你正在讨论从旧集群取得的时间,即在一个内核上运行16个副本。它并不直接暗示在16个内核上运行16个副本会更慢。

你建议该脚本看起来不错,并应该利用过程的所有16个内核,如果你的工作是可变的运行时间(即16的15可能在5分钟但1次小时完成运行),那么你的仍然会有大量未使用的周期。如果这可能会影响你,你需要更复杂,并有更多的循环和产卵过程,直到更大的工作集完成。或者你可以启动全部你想从1个脚本中获得的进程(所以你可能有60个或者16个处理器上同时运行的任何批处理)并且让它们调度它们,这会减慢速度,也许不是很多,你的数字以上从1核心16只提供了40%的减速建议这仍然会让你60%+利用率高达256个工作。

无论您做什么,都可以确保您使用集群监控软件确保实际达到的cpu利用率与您的预期一致。

+0

对于40%的减速,抱歉,这与在旧群集上使用ppn = 16发送我的脚本有关,因此它将16个内核分配给工作中的16个内核,然后产生16个进程,所以这就是它应该在新集群上的方式。我只想测试这两种方法的速度,但由于我的旧方法在新集群上无法运行,因此我在旧集群上使用了这两种方法。希望这是有道理的。你是正确的,这些工作需要可变的时间,我需要考虑一下如何优化。 – user2709136

+0

好吗?你是在测量内核*运行时间作为度量标准吗?如果是这样,他们40%可能仅仅是由于上述时间差异,即16核心版本是16 * longest_run vs(总和(运行时间)= 16 * avg_run)。 – tolanj

相关问题