我有一个这样定义的脚本:
#!/bin/sh
#SBATCH --nodes=1
#SBATCH --cpus-per-task=16
#SBATCH --mem 180000
./program1 --threads 16
./program2 --threads 16
然后我提交我的工作sbatch job.sh
问题是 program1 使用所有 16 个内核/cpu,但 program2 只使用 1 个(据说都是多线程的)。但是,如果我将脚本修改为:
#!/bin/sh
#SBATCH --nodes=1
#SBATCH --cpus-per-task=16
#SBATCH --mem 180000
./program1 --threads 16
srun --mpi=openmpi ./program2 --threads 16
那么 program2 也确实使用了所有 16 个内核。为什么有必要添加那个“srun”?
作为额外信息,program2 多线程的实现是使用std::async