ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: OpenMP API ユーザーガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
自動スコープ宣言を有効にするには、最適化レベルを -xO3 かそれ以上に設定してから -xopenmp でプログラムをコンパイルする必要があります。自動スコープ宣言は、プログラムが -xopenmp=noopt だけでコンパイルされている場合は有効になりません。
C および C++ の並列およびタスク構文の自動スコープ宣言では、基本的なデータ型、つまり整数型、浮動小数点型、およびポインタ型しか処理できません。
タスクの自動スコープ宣言では、配列は処理できません。
C および C++ でのタスクの自動スコープ宣言では、グローバル変数は処理できません。
タスクの自動スコープ宣言では、結合解除されたタスクは処理できません。
タスクの自動スコープ宣言では、ほかのタスクに字句的に包含されているタスクは処理できません。例:
#pragma omp task /* task1 */ { ... #pragma omp task /* task 2 */ { ... } ... }
この例では、コンパイラは、task1 に字句的に入れ子になった task2 の自動スコープ宣言は試行しません。コンパイラは task2 で参照されているすべての変数を SHARED とスコープ宣言し、task2 を IF(.FALSE.) または if(0) 節がタスクで指定されているかのように処理します。
解析では、OpenMP 指令のみ認識、使用されます。OpenMP 実行時ルーチンの呼び出しは認識されません。たとえばプログラムが omp_set_lock() および omp_unset_lock() を使用してクリティカル領域を実装している場合、コンパイラはそのクリティカル領域の存在を検出できません。可能な場合は、CRITICAL および END CRITICAL 指令を使用してください。
データ競合解析では、BARRIER や MASTER などの OpenMP 同期指令を使用して指定された同期のみ認識、使用されます。ビジー待ちなどのユーザー実装の同期は認識されません。