並列処理に影響を及ぼすランタイム・オプションは、 XLSMPOPTS 環境変数を使用して指定できます。この環境変数は、アプリケーションを実行する前に設定しなければならず、以下の形式の基本構文を使用します。
並列化ランタイム・オプションは、OMP 環境変数を使用して指定することもできます。 OMP および XLSMPOPTS に固有の環境変数で指定されるランタイム・オプションが競合する場合は、 OMP オプションが優先されます。
XLSMPOPTS 環境変数に応じた実行時オプション設定を、カテゴリー別に分類して以下に示します。
XLSMPOPTS 環境変数オプション | 説明 |
---|---|
schedule=algorithm=[n] | このオプションは、スケジューリング・アルゴリズムを明示的に割り当てられていないループ用に使用するスケジューリング・アルゴリズムを指定します。
algorithm の有効なオプションは、以下のとおりです。
指定する場合、チャンク・サイズ 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 です。 |
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 です。32 を超える num の値は 32 に変更されます。 |
parthreshold=mSec | mSec は、ループを順次実行しなければならないとする実行時間の上限をミリ秒単位で指定します。
mSec は、小数部を使用して指定することができます。
parthreshold を 0 に設定すると、並列化されたループは動的プロファイラーによって直列化されなくなります。 mSec のデフォルト値は 0.2 ミリ秒です。 |
seqthreshold=mSec | mSec は、動的プロファイラーによって直列化されたループを再び並列モードで実行するように戻す実行時間の下限をミリ秒単位で指定します。
mSec は、小数部を使用して指定することができます。
mSec のデフォルト値は 5 ミリ秒です。 |
並列処理のための OpenMP ランタイム・オプション
並列処理に使用する組み込み関数
OpenMP 仕様の完全な情報については、以下を参照してください。
OpenMP Web サイト www.openmp.org
OpenMP Specification www.openmp.org/specs