インテル(R) コンパイラーでは、OpenMP* ランタイム・ライブラリーへの拡張機能として、次のルーチングループをサポートしています。
並列スレッドのスタックサイズの取得と設定
メモリーの割り当て
ここで説明するインテル拡張ルーチンは、ライブラリー・コードとアプリケーションが目的どおりに機能することを確認する低レベルのデバッグに使用できます。これらのルーチンを使用するには、プログラムをシーケンシャルに実行する -openmp-stubs コマンドライン・オプション (Linux*) または /Qopenmp-stubs コマンドライン・オプション (Windows*) を使用しなければならないため、充分注意して使用してください。これらのルーチンはまた、一般的に他のベンダーの OpenMP 互換コンパイラーには認識されません。これらのコンパイラーでは、リンクの段階で失敗します。
以下の関数は、プリプロセッサー宣言子 #include <omp.h> を必要とします。
多くの場合、環境変数は拡張ライブラリー・ルーチンの代わりに使用されます。例えば、並列スレッドのスタックサイズは、KMP_SET_STACKSIZE() または KMP_SET_STACKSIZE_S() ライブラリー・ルーチンではなく、KMP_STACKSIZE 環境変数を使用して設定できます。
インテル拡張ルーチンへのランタイムの呼び出しは、対応する環境変数の設定よりも優先します。
KMP_SET_STACKSIZE() と KMP_GET_STACKSIZE() の各ルーチンは 32 ビットの引数のみを受け付けます。KMP_SET_STACKSIZE_S() と KMP_GET_STACKSIZE_S() の各ルーチンは、64 ビット整数を保持できる SIZE_T 引数を受け付けます。
Itanium(R) ベース・システムでは、常に KMP_SET_STACKSIZE_S() および KMP_GET_STACKSIZE_S() を使用することをお勧めします。スタックサイズを ≥ 2**32 バイト (4GB) に設定するには、_S() の付くバージョンのルーチンを使用する必要があります。
関数 |
説明 |
---|---|
kmp_get_stacksize_s() |
各並列スレッドがプライベート・スタックとして使用するバイト数を返します。この値は、最初の並列領域の前に kmp_set_stacksize_s() で変更するか、または KMP_STACKSIZE 環境変数で変更できます。 |
kmp_get_stacksize() |
この関数は、下位互換性のみ提供します。異なるインテル・プロセッサーとの互換性には kmp_get_stacksize_s() を使用します。 |
kmp_set_stacksize_s(size) |
各並列スレッドがプライベート・スタックとして使用するバイト数を size に設定します。この値は、KMP_STACKSIZE 環境変数で設定することもできます。kmp_set_stacksize_s() を有効にするには、プログラムの最初の (動的に実行された) 並列領域の先頭の前に呼び出す必要があります。 |
kmp_set_stacksize(size) |
この関数は、下位互換性のみ提供します。異なるインテル・プロセッサーとの互換性には kmp_set_stacksize_s() を使用します。 |
インテル・コンパイラーでは、OpenMP ランタイム・ライブラリーに対する拡張機能として、メモリー割り当てルーチンを実装しています。そのため、スレッドは各スレッドにローカルなヒープからメモリーを割り当てることが可能です。これらのルーチンは、KMP_MALLOC、KMP_CALLOC および KMP_REALLOC です。
これらのルーチンによって割り当てられたメモリーは、KMP_FREE ルーチンによって解放しなければなりません。あるスレッドによってメモリーを割り当て、別のスレッドで (KMP_FREE を呼び出して) メモリーを解放しても不正な処理ではありませんが、このような処理によってパフォーマンスが多少低下します。
関数 |
説明 |
---|---|
kmp_malloc(size) |
スレッド・ローカル・ヒープから size バイトのメモリーブロックを割り当てます。 |
kmp_calloc(nelem, elsize) |
スレッド・ローカル・ヒープからサイズ elsize の nelem 要素の配列を割り当てます。 |
kmp_realloc(ptr, size) |
スレッド・ローカル・ヒープからアドレス ptr および size バイトにメモリーブロックを再割り当てします。 |
kmp_free(ptr) |
スレッド・ローカル・ヒープからアドレス ptr のメモリーブロックを解放します。メモリーは、以前に kmp_malloc()、kmp_calloc()、または kmp_realloc() で割り当てられている必要があります。 |