次のように定義されたスクリプトがあります。
#!/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