У меня есть скрипт, определенный следующим образом:
#!/bin/sh
#SBATCH --nodes=1
#SBATCH --cpus-per-task=16
#SBATCH --mem 180000
./program1 --threads 16
./program2 --threads 16
Затем я отправляю свою работу с sbatch job.sh
Дело в том, что program1 использует все 16 ядер / процессор, но program2 делает используйте только 1 (оба предположительно являются многопоточными). Однако если я изменю сценарий так:
#!/bin/sh
#SBATCH --nodes=1
#SBATCH --cpus-per-task=16
#SBATCH --mem 180000
./program1 --threads 16
srun --mpi=openmpi ./program2 --threads 16
, то программа2 также использует все 16 ядер. Почему необходимо добавить этот «srun»?
В качестве дополнительной информации реализация многопоточности program2 выполняется с использованием std::async