我编写的代码只需1-4 cpus。但是当我在集群上提交作业时,我必须至少有一个节点,每个作业有16个核心。所以我想在每个节点上运行几个模拟我提交的每个作业。 我想知道是否有办法在一项工作中并行提交模拟。
这是一个例子: 我的代码需要4个cpus。我为一个节点提交作业,我希望节点运行我的代码的4个实例(每个实例都有不同的参数)来占用所有16个核心。
答案 0 :(得分:5)
是的,当然;通常这样的系统会有如何执行此操作的说明,like these。
如果您有(比方说)4x 4-cpu作业,您知道每个作业需要相同的时间,并且(比方说)您希望它们在4个不同的目录中运行(因此输出文件更容易跟踪),使用shell&符号在后台运行它们,然后等待所有后台任务完成:
(cd jobdir1; myexecutable argument1 argument2) &
(cd jobdir2; myexecutable argument1 argument2) &
(cd jobdir3; myexecutable argument1 argument2) &
(cd jobdir4; myexecutable argument1 argument2) &
wait
(其中myexecutable argument1 argument2
只是一个占位符,但是你通常运行你的程序;如果你使用mpiexec
或类似的东西,就像你通常使用它一样。如果你使用OpenMP,您可以在上面第一行之前导出环境变量OMP_NUM_THREADS
。
如果你有许多任务都不会花费相同的时间长度,那么最好分配比上述(比如说)4个工作更多的工作,让像gnu parallel这样的工具启动工作必要的,如this answer中所述。