Seguindo nossa discussão sobre o SO I Tenho tentado usar o argumento --exclusive
para conseguir isso. Minha arquitetura é diferente da sua (eu tenho 7 processadores disponíveis para slurm), mas aqui está o que eu fiz:
#!/bin/sh
#SBATCH --ntasks=2
srun -n 2 --exclusive stress -c 1
e depois executando
sbatch test.sh ; sbatch test.sh ; sbatch test.sh ; sbatch test.sh
me dá 6% de processosstress
:
15050 tom 20 0 7308 212 108 R 100.0 0.0 1:47.46 stress
15054 tom 20 0 7308 208 108 R 100.0 0.0 1:47.47 stress
15063 tom 20 0 7308 208 108 R 100.0 0.0 1:47.47 stress
15064 tom 20 0 7308 212 108 R 100.0 0.0 1:47.47 stress
15080 tom 20 0 7308 208 108 R 100.0 0.0 1:47.46 stress
15076 tom 20 0 7308 212 108 R 99.7 0.0 1:47.45 stress
com o último esperando na fila:
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
2368 Tom test.sh tom PD 0:00 1 (Resources)
2365 Tom test.sh tom R 5:03 1 Tom
2366 Tom test.sh tom R 5:03 1 Tom
2367 Tom test.sh tom R 5:03 1 Tom
Portanto, neste caso, usar srun -n 2
faz com que o mesmo processo seja iniciado duas vezes. A mesma coisa acontece se eu usar
#!/bin/sh
#SBATCH --ntasks=2
srun -n 1 --exclusive stress -c 1 &
srun -n 1 --exclusive stress -c 1 &
srun -n 1 --exclusive stress -c 1 &
wait
i.e. O SLURM sabe que esse script em lote tem duas tarefas, então ele permitirá que duas sejam executadas simultaneamente; o terceiro tem que 'esperar a sua vez'.
Por outro lado
#!/bin/sh
#SBATCH --ntasks=1
srun -n 1 --exclusive stress -c 2
me dá o comportamento que você descreve em sua pergunta.
Não tenho certeza se isso responde 100%, mas talvez ajude um pouco.