我有一个在群集的单个核心上运行的脚本。每个串行作业都是独立的。每次使用qsub时,我用来运行的集群都会分配一个核心,因此它假定ppn = 1,然后其他所有人都可以使用其他核心。我只是通过循环qsub提交我想运行的串行作业的数量。运行串行作业的HPC群集
然而,我们使用的另一个群集会自动为每个用户分配一个节点(他们已经设置了节点,使得节点是最小的单元而不是核心)。每个节点有16个核心。如果我然后提交我的脚本,它将被分配所有16个内核,但它只运行一个作业。我很奇怪,因此我如何运行脚本并使其全部使用16个内核?我想到的
一个想法是使用其他脚本循环我现在这样的脚本运行兼职:在
为I {} 1..16做 ./[my脚本] & DONE 等待
然后qsub这与nodes = 1,ppn = 16。然后,我认为这会产生16个进程,但我不知道它实际上是使用全部16个内核还是一个试图运行全部16个进程的内核。哪个是对的?这样做的速度也比我以往的做法要慢40%左右(两种方法都是在旧集群上测试的)。有没有更好的方法来做到这一点?
在此先感谢。
对于40%的减速,抱歉,这与在旧群集上使用ppn = 16发送我的脚本有关,因此它将16个内核分配给工作中的16个内核,然后产生16个进程,所以这就是它应该在新集群上的方式。我只想测试这两种方法的速度,但由于我的旧方法在新集群上无法运行,因此我在旧集群上使用了这两种方法。希望这是有道理的。你是正确的,这些工作需要可变的时间,我需要考虑一下如何优化。 – user2709136
好吗?你是在测量内核*运行时间作为度量标准吗?如果是这样,他们40%可能仅仅是由于上述时间差异,即16核心版本是16 * longest_run vs(总和(运行时间)= 16 * avg_run)。 – tolanj