XD2000において、OpenMP性能が十分ではないという問題が報告されていましたが、ジョブスクリプトを編集することで性能を向上させられることがわかりました。
具体的には以下を追記します。
(1)以下3つのうちどれかをジョブスクリプトに記載してハイパースレッディング・オフを指定します。
#SBATCH --hint=nomultithread
#SBATCH --threads-per-core=1
#SBATCH -B *:*:1
(2)以下のようにsrunの"-c"オプションでプロセス当りのスレッド数を明示的に指定します。
srun -c${SLURM_CPUS_PER_TASK} a.out
環境変数SLURM_CPUS_PER_TASKはジョブスクリプト中の "#SBATCH --cpus-per-task=" で指定可能です。
(3)コンパイラに応じた環境変数を設定します。
(3-1)Cray Programming Environment (CPE)/GNUコンパイラ (PrgEnv-gnu)の場合
export OMP_PROC_BIND=TRUE
export OMP_PLACES=cores
(3-2)Cray Programming Environment (CPE)/Intelコンパイラ (PrgEnv-intel) の場合
export KMP_AFFINITY=compact
(3-3)Intel oneAPI (PrgEnv-oneapi) の場合
export KMP_AFFINITY=compact
※CPE/crayコンパイラ (PrgEnv-cray)の場合は特にありません。
※以前、CfCA webページの「旧システム(XC50)からの主な変更点と注意事項」にて、「SLURM_CPU_BIND=no」をジョブスクリプトに追記するとOpenMPの性能が向上すると記載していましたが、今回の方法では必要ありません。