1

我有一个这样定义的脚本:

#!/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

4

0 回答 0