IBM pSeries(TM) のマシンの中には、共用メモリーの並列処理ができるものがあります。
-qsmp でコンパイルすると、この機能の活用に必要なスレッド化されたコードを生成することができます。このオプションは、少なくとも -O2 の最適化レベルを暗黙指定します。
次の表は、最もよく使用されるサブオプションのリストです。すべてのサブオプションの説明と構文は、「XL C/C++ コンパイラー・リファレンス」に記載されています。
表 11. 一般に使用される -qsmp のサブオプション
サブオプション
| 振る舞い
|
auto
| コンパイラーに、可能ならユーザー支援なしに自動で並列コードを生成するように指示します。
-qsmp のサブオプションを指定しない場合は、これがデフォルト設定となり、このデフォルト設定で、
opt サブオプションも暗黙指定されます。
|
omp
| コンパイラーに、明示的並列処理を指定するための OpenMP 言語拡張に従うように指示します。
-qsmp=omp と -qsmp=auto は、現時点では互換性がありません。
|
opt
| コンパイラーに、最適化と同時に並行処理も行うように指示します。最適化は、他の最適化オプションがない場合は、
-O2 -qhot に相当します。
|
fine_tuning
| サブオプションの他の値は、スレッド・スケジューリング、ネストされた並列処理、ロックなどの制御に使用されます。
|
以下に、-qsmp オプションを使用する場合の提案事項を挙げます。
- 自動並行処理で -qsmp を使用する前に、最適化と -qhot を単一スレッド方式で使用して、プログラムをテストしてください。
- OpenMP プログラムをコンパイルするけれど、自動並行処理は必要ないという場合は、
-qsmp=omp:noauto を使用します。
- -qsmp を使用する場合は、必ず、再入可能コンパイラー呼び出し (_r 呼び出し) を使用してください。
- デフォルトでは、ランタイム環境で使用可能なプロセッサーがすべて使用されます。使用可能なプロセッサー数より少ないプロセッサーを使用するのでない限り、
XLSMPOPTS=PARTHDS または OMP_NUM_THREADS 環境変数は設定しないでください。実行スレッドの数を、小さい数または 1 に設定して、デバッグを容易にすることもできます。
- 専用マシンまたはノードを使用している場合は、
SPINS および YIELDS 環境変数 (XLSMPOPTS 環境変数のサブオプション) を 0 に設定することも検討してください。そうすることにより、オペレーティング・システムが、バリアなどの同期境界を越えてスレッドのスケジューリングに介入することを防ぎます。
- OpenMP プログラムをデバッグする場合は、-qsmp=noopt を使用して (-O は指定しない)、コンパイラーが作成するデバッグ情報をより正確にするよう努力してください。
