我有一个在集群的单个核心上运行的脚本。每个串行作业都是独立的。我用来运行的集群每次 qsub 时都会分配一个核心,因此它假定 ppn=1,然后其他人都可以使用其他核心。我只是通过循环 qsub 提交我想要运行的串行作业的数量。
然而,我们使用的另一个集群会自动为每个用户分配一个节点(他们已将其设置为节点是最小的单元而不是核心)。每个节点有 16 个核心。如果我然后提交我的脚本,它被分配了所有 16 个内核,但它只运行一项工作。因此,我想知道如何运行脚本并使其使用所有 16 个内核?
我想到的一个想法是使用另一个循环我当前脚本的脚本来运行并发作业,如下所示:
for i in {1..16} do ./[my script] & done wait
然后我用nodes=1,ppn=16 qsub 这个。然后我认为这会产生 16 个进程,但我不知道它实际上是在使用所有 16 个内核还是一个试图运行所有 16 个进程的内核。哪个是对的?这样做也比我的旧方法慢了大约 40%(两种方法都在旧集群上测试过)。有更好的方法吗?
提前致谢。