インテル拡張ルーチン/関数

インテル(R) コンパイラーでは、OpenMP* ランタイム・ライブラリーへの拡張機能として、次のルーチングループをサポートしています。

ここで説明するインテル拡張ルーチンは、ライブラリー・コードとアプリケーションが目的どおりに機能することを確認する低レベルのチューニングに使用できます。これらのルーチンを使用するには、プログラムをシーケンシャルに実行する -openmp-stubs コマンドライン・オプション (Linux* および Mac OS*) または /Qopenmp-stubs コマンドライン・オプション (Windows*) を使用しなければならないため、十分注意して使用してください。これらのルーチンはまた、その他の OpenMP 互換コンパイラーには認識されません。これらのコンパイラーでは、リンクの段階で失敗します。

以下の関数は、プリプロセッサー宣言子 #include <omp.h> を必要とします。

スタックサイズ

多くの場合、環境変数は拡張ライブラリー・ルーチンの代わりに使用されます。例えば、並列スレッドのスタックサイズは、kmp_set_stacksize または kmp_set_stacksize_s ライブラリー・ルーチンではなく、kmp_stacksize 環境変数を使用して設定できます。

インテル拡張ルーチンへのランタイムの呼び出しは、対応する環境変数の設定よりも優先します。

kmp_set_stacksizekmp_get_stacksize は 32 ビットの引数のみを受け付けます。kmp_set_stacksize_skmp_get_stacksize_s は、64 ビット整数を保持できる SIZE_T 引数を受け付けます。

IA-64 アーキテクチャー・ベース・システムでは、常に kmp_set_stacksize_skmp_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_mallockmp_callockmp_realloc です。

これらのルーチンによって割り当てられたメモリーは、kmp_free ルーチンによって解放しなければなりません。あるスレッドによってメモリーを割り当て、別のスレッドでメモリーを解放しても不正な処理ではありませんが、このような処理によってパフォーマンスが多少低下します。

メモリーの割り当て関数

関数

説明

kmp_malloc(size)

スレッド・ローカル・ヒープから size バイトのメモリーブロックを割り当てます。

kmp_calloc(nelem, elsize)

スレッド・ローカル・ヒープからサイズ elsizenelem 要素の配列を割り当てます。

kmp_realloc(ptr, size)

スレッド・ローカル・ヒープからアドレス ptr および size バイトにメモリーブロックを再割り当てします。

kmp_free(ptr)

スレッド・ローカル・ヒープからアドレス ptr のメモリーブロックを解放します。メモリーは、以前に kmp_malloc()kmp_calloc()、または kmp_realloc() で割り当てられている必要があります。