Você pode fazer isso com um round robin srun
(algo como):
jobs=({1..4})
nodes=($(scontrol show hostname $SLURM_NODELIST))
for ((n = 0; n < ${#jobs[@]}; n++)); do
index=$(expr $n % ${#nodes[@]})
srun --nodes=1 --ntasks=1 --nodelist=${nodes[$index]} \
--exclusive ./myscript --input infile.txt \
--setting $n --output out$n &
done
wait
Presumo que --cpus-per-task=2
será dado a srun
. Deixe-me saber se você tem algum problema. Eu estava brincando com o paralelo esta manhã, mas não vejo como corrigir esse problema diretamente. Além disso, descobri que, se você scancel
de um trabalho que contém tarefas paralelas do GNU, os processos em execução não morrem, a menos que você use srun
.