インテル® C++ コンパイラー XE 13.1 ユーザー・リファレンス・ガイド
インテル® コンパイラーでは、OpenMP* ランタイム・ライブラリーへの拡張機能として、次のルーチングループをサポートしています。
実行環境の取得と設定
並列スレッドのスタックサイズの取得と設定
メモリーの割り当て
スループット実行モードにおけるスレッドのスリープ時間の取得と設定
ここで説明するインテル拡張ルーチンは、ライブラリー・コードとアプリケーションが目的どおりに機能することを確認する低レベルのチューニングに使用できます。これらのルーチンは、一般にその他の OpenMP* 互換コンパイラーで認識されず、別のコンパイラーではリンクの段階で失敗することがあります。これらの OpenMP* ルーチンでは、-openmp-stubs (Linux* および OS X*) または /Qopenmp-stubs (Windows*) コマンドライン・オプションを使用して実行する必要があります。
宣言を含む詳細については、「OpenMP* ランタイム・ライブラリー・ルーチン」、実行環境 (モード) の詳細については、「OpenMP* のサポート・ライブラリー」を参照してください。
多くの場合、環境変数は拡張ライブラリー・ルーチンの代わりに使用されます。例えば、並列スレッドのスタックサイズは、kmp_set_stacksize_s() ライブラリー・ルーチンではなく、OMP_STACKSIZE 環境変数を使用して設定できます。
インテル拡張ルーチンへのランタイムの呼び出しは、対応する環境変数の設定よりも優先します。
関数 |
説明 |
---|---|
size_t kmp_get_stacksize_s() |
各並列スレッドがプライベート・スタックとして使用するバイト数を返します。この値は、最初の並列領域の前に kmp_set_stacksize_s() ルーチンで変更するか、または KMP_STACKSIZE 環境変数で変更できます。 |
int kmp_get_stacksize() |
下位互換性のみ提供します。異なるインテル® プロセッサーとの互換性には kmp_get_stacksize_s() ルーチンを使用します。 |
void kmp_set_stacksize_s(size_tsize) |
各並列スレッドがプライベート・スタックとして使用するバイト数を size に設定します。 この値は、KMP_STACKSIZE 環境変数で設定することもできます。 kmp_set_stacksize_s() 有効にするには、プログラムの最初の (動的に実行された) 並列領域の先頭の前に呼び出す必要があります。 |
void kmp_set_stacksize(int size) |
下位互換性のみ提供します。異なるインテル® プロセッサーとの互換性には kmp_set_stacksize_s() を使用します。 |
インテル® コンパイラーでは、OpenMP* ランタイム・ライブラリーに対する拡張機能として、メモリー割り当てルーチンを実装しています。そのため、スレッドは各スレッドにローカルなヒープからメモリーを割り当てることが可能です。これらのルーチンは、kmp_malloc()、kmp_calloc()、および kmp_realloc() です。
これらのルーチンによって割り当てられたメモリーは、kmp_free() ルーチンによって解放しなければなりません。 あるスレッドによってメモリーを割り当て、別のスレッドでメモリーを解放しても不正な処理ではありませんが、このような処理によってパフォーマンスが多少低下します。
関数 |
説明 |
---|---|
void* kmp_malloc(size_tsize) |
スレッド・ローカル・ヒープから size バイトのメモリーブロックを割り当てます。 |
void* kmp_calloc(size_t nelem, size_t elsize) |
スレッド・ローカル・ヒープからサイズ elsize の nelem 要素の配列を割り当てます。 |
void* kmp_realloc(void*ptr, size_t size) |
スレッド・ローカル・ヒープからアドレス ptr および size バイトにメモリーブロックを再割り当てします。 |
void* kmp_free(void*ptr) |
スレッド・ローカル・ヒープからアドレス ptr のメモリーブロックを解放します。 メモリーは、以前に kmp_malloc()、kmp_calloc()、または kmp_realloc() で割り当てられている必要があります。 |
スループット実行モードでは、スレッドは、新しい並列作業を並列領域の終わりで待機し、一定期間が経過するとスリープ状態に移行します。 この待機期間を設定するには、KMP_BLOCKTIME 環境変数または kmp_set_blocktime() 関数を使用します。
関数 |
説明 |
---|---|
int kmp_get_blocktime(void) |
並列領域の実行が終了した後、スレッドがスリープ状態になるまで待機する時間 (ミリ秒単位) を返します。この時間は、KMP_BLOCKTIME 環境変数または kmp_set_blocktime() 関数によって設定された値です。 |
void kmp_set_blocktime(int msec) |
並列領域の実行が終了した後、スレッドがスリープ状態になるまで待機する時間 (ミリ秒単位) を設定します。このルーチンは、呼び出し側のスレッドおよび呼び出し側のスレッドにより形成される OpenMP* チームのスレッドのブロック時間の設定に影響します。その他のスレッドのブロック時間には影響しません。 |