インテル拡張機能

インテル® C++ コンパイラは、OpenMP* ランタイム・ライブラリへの拡張機能として、次の関数グループをサポートします:

ここで説明するインテル拡張機能は、ライブラリ・コードとアプリケーションが目的どおりに機能することを確認する低レベルのデバッグに使用できます。これらの関数を使用するには、プログラムをシーケンシャルに実行する -openmp_stubs コマンドライン・オプションを使用しなければならないため、充分注意して使用してください。これらの関数はまた、一般的に他のベンダの OpenMP 互換コンパイラには認識されません。これらのコンパイラでは、リンクの段階で失敗します。

以下の関数は、プリプロセッサ・ディレクティブ #include <omp.h> を必要とします。

スタックサイズ

多くの場合、ディレクティブは拡張命令の代わりに使用されます。たとえば、並列スレッドのスタックサイズは、kmp_set_stacksize_s() 関数ではなく、KMP_STACKSIZE 環境変数を使用して設定します。

インテル拡張機能へのランタイムの呼び出しは、対応する環境変数の設定よりも優先します。下の「スタックサイズ」表でスタックサイズ関数の定義を参照してください。

メモリの割り当て

インテル C++ コンパイラは、OpenMP ランタイム・ライブラリに対する拡張機能として、メモリ割り当て関数を実装しています。そのため、スレッドは各スレッドにローカルなヒープからメモリを割り当てることが可能です。これらの関数は、kmp_malloc()kmp_calloc() および kmp_realloc() です。これらの関数によって割り当てられたメモリは、kmp_free() 関数によって解放する必要があります。あるスレッドによってメモリを割り当て、別のスレッドでメモリを kmp_free() を呼び出しても不正な処理ではありませんが、このような処理によってパフォーマンスが多少低下します。下の「メモリの割り当て」表でこれらの関数の定義を参照してください。

スタックサイズ

関数 説明
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() を使用します。

メモリの割り当て

関数 説明
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() に割り当てられている必要があります。