KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

KMP_AFFINITY について

登録日 :2024/05/23 04:18
カテゴリ :SLURM

環境変数 KMP_AFFINITY は、IntelのOpenMPライブラリによって使用されるスレッドアフィニティを設定するために使用されます。KMP_AFFINITY の設定は、スレッドが物理的にどのプロセッサコアにバインドされるかを制御します。

KMP_AFFINITY=granularity=fine,compact,1,0 の具体的な意味を分解して説明します。

KMP_AFFINITY の構文

KMP_AFFINITY=[type,][modifier,]...[,verbose]
  • type: アフィニティのタイプ(例: granularity=fine)。
  • modifier: 修飾子(例: compact)。
  • verbose: 設定の詳細を表示するオプション。

設定の詳細

1. granularity=fine:

  • 説明: アフィニティ設定の粒度を設定します。fine は、スレッドを物理コアまたはスレッドレベルで細かく制御することを意味します。これにより、キャッシュのローカリティを最大化します。

2.compact:

  • 説明: スレッドをできるだけ近くのコアに配置します。例えば、最初のスレッドが最初のコアに割り当てられ、次のスレッドが同じプロセッサの次のコアに割り当てられます。これにより、メモリのローカリティが改善され、キャッシュの効率が向上します。

3. 1,0:

  • 説明: compact の設定で使用されるパラメータです。1 はスレッドを各プロセッサごとにまとめて配置することを示し、0 はオフセットを示します。この場合、最初のスレッドから順に連続的に配置されます。

設定の効果

この設定は、OpenMPスレッドが物理的に近いコアに配置され、キャッシュの効率とメモリのローカリティを最大化することを目的としています。これにより、計算性能が向上し、特にNUMAアーキテクチャのシステムで効果的に動作します。

使用例

SLURMジョブスクリプトにおいて、この設定を適用する場合の例を示します。

#!/bin/bash
#SBATCH --job-name=fluent_job
#SBATCH --output=fluent_output.txt
#SBATCH --error=fluent_error.txt
#SBATCH --ntasks=8
#SBATCH --cpus-per-task=4
#SBATCH --mem=32G

# NUMAアフィニティの設定
export OMP_NUM_THREADS=4
export KMP_AFFINITY=granularity=fine,compact,1,0

# Fluentの実行
/path/to/fluent -g -i inputfile.jou

このスクリプトでは、各タスクが4つのスレッドを使用し、スレッドはNUMAアーキテクチャに最適化された形で配置されます。

まとめ

  • granularity=fine: スレッドを細かく制御。
  • compact: スレッドを近くのコアに配置。
  • 1,0: スレッドを連続的に配置。

これにより、スレッドのキャッシュ効率とメモリのローカリティが最大化され、計算性能が向上します。