所以我有一个 sbatch(slurm 作业调度程序)脚本,我在其中通过 3 个脚本处理大量数据:foo1.sh、foo2.sh 和 foo3.sh。
foo1.sh 和 foo2.sh 是独立的,我想同时运行它们。foo3.sh 需要 foo1.sh 和 foo2.sh 的输出,所以我正在构建一个依赖项。然后我必须重复 30 次。
让我们说:
## Resources config
#SBATCH --ntasks=30
#SBATCH --task-per-core=1
for i in {1..30};
do
srun -n 1 --jobid=foo1_$i ./foo1.sh &
srun -n 1 --jobid=foo2_$i ./foo2.sh &
srun -n 1 --jobid=foo3_$i --dependency=afterok:foo1_$1:foo2_$i ./foo3.sh &
done;
wait
这个想法是您启动 foo1_1 和 foo2_1 但由于 foo3_1 必须等待其他两个作业完成,我想进行下一次迭代。下一次迭代将启动 foo1_2 foo2_2 并且 foo3_2 将等待等等。
在某个时候,使用 srun 启动的子作业的数量将高于 --ntasks=30。会发生什么?它会等待之前的工作完成(我正在寻找的行为)吗?
谢谢