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"

クロスリファレンス

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_DYNAMICTRUE に設定されている場合、並列領域の実行に使用されるスレッド数は、システム リソースを最大限に活用するためにランタイム環境によって調整される場合があります。 OMP_DYNAMICFALSE に設定されている場合、動的調整は無効になります。 既定の条件は実装で定義されます。

例:

setenv OMP_DYNAMIC TRUE

クロスリファレンス

4.4 OMP_NESTED

OMP_NESTED 環境変数では、入れ子になった並列処理を有効または無効にします。ただし、omp_set_nested ライブラリ ルーチンを呼び出して、入れ子になった並列処理を有効または無効にした場合を除きます。 OMP_NESTEDTRUE に設定すると、入れ子になった並列処理が有効になります。 OMP_NESTEDFALSE に設定すると、入れ子になった並列処理が無効になります。 既定値は FALSE です。

例:

setenv OMP_NESTED TRUE

クロスリファレンス