4. 環境変数
この章では、並列コードの実行を制御する OpenMP C および C++ API の環境変数 (または同様のプラットフォーム固有の機構) について説明します。 環境変数の名前は大文字である必要があります。 割り当てる値は大文字と小文字が区別されず、先頭と末尾に空白があってもかまいません。 プログラムの開始後に値を変更しても無視されます。
環境変数は次のとおりです。
- OMP_SCHEDULE では、実行時のスケジュールの型とチャンク サイズを設定します。
- OMP_NUM_THREADS では、実行中に使用するスレッド数を設定します。
- OMP_DYNAMIC では、スレッド数の動的調整を有効または無効にします。
- OMP_NESTED では、入れ子になった並列処理を有効または無効にします。
この章の例では、これらの変数を Unix C シェル (csh) 環境で設定する方法のみを示しています。 Korn シェルおよび DOS 環境では、アクションは次のようになります。
csh:
setenv OMP_SCHEDULE "dynamic"
ksh:
export OMP_SCHEDULE="dynamic"
DOS:
set OMP_SCHEDULE="dynamic"
4.1 OMP_SCHEDULE
OMP_SCHEDULE
は、スケジュールの型が runtime
である for
および parallel for
ディレクティブにのみ適用されます。 このようなすべてのループのスケジュールの型とチャンク サイズは実行時に設定できます。 この環境変数を、認識されている任意のスケジュールの型と chunk_size (省略可能) に設定します。
スケジュールの型が runtime
以外である for
および parallel for
ディレクティブでは、OMP_SCHEDULE
は無視されます。 この環境変数の既定値は実装で定義されます。 省略可能な chunk_size を設定する場合、値は正である必要があります。 chunk_size が設定されていない場合、スケジュールが static
でない限り、値は 1 と見なされます。 static
スケジュールの場合、既定のチャンク サイズは、ループ反復空間をループに適用されるスレッド数で割った値に設定されます。
例:
setenv OMP_SCHEDULE "guided,4"
setenv OMP_SCHEDULE "dynamic"
クロスリファレンス
- for ディレクティブ
- parallel for ディレクティブ
4.2 OMP_NUM_THREADS
OMP_NUM_THREADS
環境変数では、実行中に使用する既定のスレッド数を設定します。 OMP_NUM_THREADS
は、omp_set_num_threads
ライブラリ ルーチンを呼び出してその数を明示的に変更した場合は無視されます。 また、parallel
ディレクティブに明示的な num_threads
句がある場合にも無視されます。
OMP_NUM_THREADS
環境変数の値は正の整数である必要があります。 その効果は、スレッド数の動的調整が有効になっているかどうかによって異なります。 OMP_NUM_THREADS
環境変数とスレッドの動的調整の間の相互作用に関する包括的な規則セットについては、セクション 2.3 を参照してください。
次の場合、使用するスレッド数は実装で定義されます。
OMP_NUM_THREADS
環境変数が指定されていない。- 指定された値が正の整数ではない。
- 値が、システムがサポートできるスレッドの最大数を超えている。
例:
setenv OMP_NUM_THREADS 16
クロスリファレンス
4.3 OMP_DYNAMIC
OMP_DYNAMIC
環境変数では、並列領域の実行に使用できるスレッド数の動的調整を有効または無効にします。 OMP_DYNAMIC
は、omp_set_dynamic
ライブラリ ルーチンを呼び出して動的調整を明示的に有効または無効にした場合は無視されます。 値には TRUE
または FALSE
を指定する必要があります。
OMP_DYNAMIC
が TRUE
に設定されている場合、並列領域の実行に使用されるスレッド数は、システム リソースを最大限に活用するためにランタイム環境によって調整される場合があります。 OMP_DYNAMIC
が FALSE
に設定されている場合、動的調整は無効になります。 既定の条件は実装で定義されます。
例:
setenv OMP_DYNAMIC TRUE
クロスリファレンス
4.4 OMP_NESTED
OMP_NESTED
環境変数では、入れ子になった並列処理を有効または無効にします。ただし、omp_set_nested
ライブラリ ルーチンを呼び出して、入れ子になった並列処理を有効または無効にした場合を除きます。 OMP_NESTED
を TRUE
に設定すると、入れ子になった並列処理が有効になります。 OMP_NESTED
を FALSE
に設定すると、入れ子になった並列処理が無効になります。 既定値は FALSE
です。
例:
setenv OMP_NESTED TRUE