並列処理のための環境変数

XLSMPOPTS 環境変数はループの並列化を使用してプログラム・ランタイムのオプションを設定します。XLSMPOPTS 環境変数のサブオプションについては、並列処理のための XLSMPOPTS 環境変数のサブオプションを参照してください。

並列化に OpenMP 構成体を使用している場合は、並列処理のための OpenMP 環境変数に説明があるように、OMP 環境変数を使用してランタイム・オプションを指定することもできます。

OMP および XLSMPOPTS 環境変数によって指定されたランタイム・オプションが矛盾する場合は、OMP オプションが優先されます。

注:
並列化されたプログラム・コードをコンパイルする場合は、スレッド・セーフ・コンパイラー・モード呼び出しを使用する必要があります。

並列処理のための XLSMPOPTS 環境変数のサブオプション

並列処理に影響を及ぼすランタイム・オプションは、XLSMPOPTS 環境変数を使用して指定することができます。この環境変数はアプリケーションを実行する前に設定する必要があり、以下の形式の基本構文を使用します。

構文図を読む構文図をスキップする                   .-:-------------------.
                 V                     |
>>-XLSMPOPTS--=------option_and_args---+-----------------------><
 

例えば、プログラム・ランタイムで 4 つのスレッドを作成し、チャンク・サイズが 5 の動的スケジューリングを使用するには、XLSMPOPTS 環境変数を以下のように設定します。

XLSMPOPTS=PARTHDS=4:SCHEDULE=DYNAMIC=5

XLSMPOPTS 環境変数のランタイム・オプションの設定は下記の通りです。カテゴリー別にグループ化されています。

スケジューリング・アルゴリズム・オプション
XLSMPOPTS 環境変数オプション 説明
schedule=algorithm=[n] このオプションは、明示的にスケジューリング・アルゴリズムに割り当てられていないループに使用されるスケジューリング・アルゴリズムを指定します。

algorithm の有効なオプションは、以下の通りです。

  • guided
  • affinity
  • dynamic
  • static

指定する場合、チャンク・サイズ n は 1 以上の整数値でなければなりません。

デフォルトのスケジューリング・アルゴリズムは static です。

並列環境オプション
XLSMPOPTS 環境変数オプション 説明
parthds=num num は、必要な並列スレッドの数を示します。 この数は、システムで使用可能なプロセッサーの数と通常同じです。

アプリケーションによっては、 使用可能なプロセッサーの最大数を超えてスレッドを使用することはできません。 その他のアプリケーションでは、存在するプロセッサーの数より多くのスレッドを使用するとパフォーマンスが大幅に改善されます。このオプションにより、プログラムの実行に使用されるユーザー・スレッドの数を完全に制御することができます。

num のデフォルト値は、システムで使用可能なプロセッサーの数です。

usrthds=num num は、予期されるユーザー・スレッドの数を示します。

プログラム・コードによって明示的にスレッドが作成される場合は、このオプションを使用してください。その場合は、num を、作成するスレッドの数に設定してください。

num のデフォルト値は 0 です。

stack=num num は、スレッドのスタックに必要なスペースの最大量を指定します。

num のデフォルト値は 2097152 です。

glibc ライブラリーはデフォルトで 2 MB のスタック・サイズを許可するようにコンパイルされます。num を これより大きい値に設定すると、デフォルトのスタック・サイズが使用されます。 これより大きなスタック・サイズが必要な場合は、FLOATING_STACKS パラメーターをオンにしてコンパイルした glibc ライブラリーにプログラムをリンクする必要があります。

パフォーマンス・チューニング・オプション
XLSMPOPTS 環境変数オプション 説明
spins=num num は、譲歩するまでのループ・スピンまたは反復の数を示します。

スレッドは、作業を完了すると、 新しい作業を探して短いループの実行を続行します。各作業待ち状態中に、作業キューの完全スキャンが 1 回実行されます。 拡張作業待ち状態によって特定のアプリケーションの応答性を高くすることができますが、 定期的にスキャンして他のアプリケーションからの要求に譲歩するようにスレッドに指示しない限り、 システム全体としての応答が低下する場合もあります。

spins および yields の両方を 0 に設定することによって、 ベンチマークを目的として完全な作業待ち状態にすることができます。

num のデフォルト値は 100 です。

startproc=CPU ID スレッドのバインディングを使用可能にして、最初のスレッドがバインドする CPU ID を指定します。提供された値が使用可能プロセッサーの範囲外の場合、SMP ランタイムが警告メッセージを発行し、スレッドはバインドされません。
stride=Number 後続のスレッドがバインドされる CPU ID の判別に使用される増分を指定します。Number は 1 以上でなければなりません。提供された値によってスレッドが使用可能プロセッサーの範囲外の CPU にバインドされる場合は、警告メッセージが発行され、スレッドはバインドされません。
yields=num num は、 スリープするまでの譲歩の数を示します。

スレッドがスリープすると、 実行する処理があることが別のスレッドによって示されるまで完全に実行が中断されます。これによりシステムの使用効率は向上しますが、アプリケーションに余分なシステム・オーバーヘッドが加わります。

num のデフォルト値は 100 です。

delays=num num は、 作業キューの各スキャンの間の、処理なしの遅延時間の長さを示します。 遅延の各単位は、メモリーへのアクセスがない遅延ループを一度実行することによって行われます。

num のデフォルト値は 500 です。

動的プロファイル・オプション
XLSMPOPTS 環境変数オプション 説明
profilefreq=num num は、 並列処理が適正であるかどうかを判別するために各ループを再調査するサンプリング率を示します。

ランタイム・ライブラリーは動的プロファイルを使用して、自動的に並列化されるループのパフォーマンスを動的に調整します。 動的プロファイルはループの実行時間に関する情報を収集して、 次回ループを実行するときに順次実行すべきか並列に実行すべきかを判別します。 実行時間のしきい値は、 以下で説明する parthreshold および seqthreshold 動的プロファイル・オプションによって設定します。

num が 0 の場合は、 プロファイルはすべてオフになり、プロファイルのために起こるオーバーヘッドはなくなります。 num が 0 より大きい場合は、 ループを num 回実行するごとに 1 回、ループの実行時間がモニターされます。

num のデフォルトは 16 です。最大のサンプリング率は 32 です。 num の値が 32 を超えている場合は、32 に変更されます。

parthreshold=mSec mSec は、予期される実行時間をミリ秒で指定します。この時間に満たない場合、ループは順次実行しなければなりません。 mSec は、小数点以下の桁を使用して指定することができます。

parthreshold を 0 に設定すると、 並列化されたループは動的プロファイラーによって直列化されなくなります。

mSec のデフォルト値は 0.2 ミリ秒です。

seqthreshold=mSec mSec は、 動的プロファイラーによって直列化されたループを再び並列モードで実行するように戻す実行時間の下限をミリ秒単位で指定します。 mSec は、小数点以下の桁を使用して指定することができます。

mSec のデフォルト値は 5 ミリ秒です。

関連情報

並列処理のための OpenMP 環境変数

並列処理に影響を与える OpenMP ランタイム・オプションは OMP 環境変数を指定することにより設定されます。これらの環境変数は以下の形式の構文を使用します。

構文図を読む構文図をスキップする>>-env_variable--=--option_and_args----------------------------><
 

OMP 環境変数が明示的に設定されていない場合は、そのデフォルト設定が使用されます。

OpenMP ランタイム・オプションは、下記の各種カテゴリーに分類されます。

スケジューリング・アルゴリズム環境変数
OMP_SCHEDULE=algorithm このオプションは、omp schedule ディレクティブによって明示的にスケジューリング・アルゴリズムを割り当てられていないループに対して使用されるスケジューリング・アルゴリズムを指定します。例えば、以下のように指定します。
OMP_SCHEDULE="guided, 4"

algorithm の有効なオプションは、以下の通りです。

  • dynamic[, n]
  • guided[, n]
  • runtime
  • static[, n]

n を使用してチャンク・サイズを指定する場合、n の値は 1 以上の整数の値でなければなりません。

デフォルトのスケジューリング・アルゴリズムは static です。

並列環境変数
OMP_NUM_THREADS=num num は、必要な並列スレッドの数を示します。 この数は、システムで使用可能なプロセッサーの数と通常同じです。

この数は、omp_set_num_threads( ) ランタイム・ライブラリー関数を呼び出すことによって、 プログラム実行中にオーバーライドすることができます。

アプリケーションによっては、使用可能なプロセッサーの最大数を超えてスレッドを使用することはできません。その他のアプリケーションでは、存在するプロセッサーの数より多くのスレッドを使用するとパフォーマンスが大幅に改善されます。このオプションにより、プログラムの実行に使用されるユーザー・スレッドの数を完全に制御することができます。

num のデフォルト値は、システムで使用可能なプロセッサーの数です。

特定の並列セクションの OMP_NUM_THREADS の設定は、いくつかの #pragma omp ディレクティブで使用可能な num_threads 節を使用することによりオーバーライドすることができます。

OMP_NESTED=TRUE|FALSE この環境変数は、ネストされた並列性を使用可能または使用不可にします。 この環境変数の設定は、omp_set_nested( ) ランタイム・ライブラリー関数を呼び出してオーバーライドすることができます。

ネストされた並列性が使用不可になっている場合は、ネストされた並列領域は直列化されて、現行スレッドで実行されます。

現在のインプリメンテーションでは、ネストされた並列領域は、常に直列化されています。 その結果、OMP_SET_NESTED は何の効果も持たず、omp_get_nested() は常に 0 を戻します。 -qsmp=nested_par オプションがオンの場合 (厳密な OMP モードでない場合のみ) は、ネストされた並列領域は、追加スレッドを使用可能として使用する場合があります。 ただし、ネストされた並列領域を実行するために、新規のチームが作成されることはありません。

OMP_NESTED のデフォルト値は FALSE です。

動的プロファイル環境変数
OMP_DYNAMIC=TRUE|FALSE この環境変数は、 並列領域の実行に使用可能なスレッドの数の動的調整を使用可能または使用不可にします。

TRUE に設定されている場合、並列領域の実行に使用可能なスレッドの数は、 システム・リソースを最も有効に使用するために実行時に調整されます。 詳しくは、動的プロファイル・オプションprofilefreq=num の説明を参照してください。

FALSE に設定されている場合、動的調整は使用不可になります。

デフォルト設定は TRUE です。