インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
インテル® コンパイラーでは、OpenMP* ランタイム・ライブラリーへの拡張機能として、次のルーチングループをサポートしています。
実行環境の取得と設定
並列スレッドのスタックサイズの取得と設定
メモリー割り当て
スループット実行モードにおけるスレッドのスリープ時間の取得と設定
ここで説明するインテル拡張ルーチンは、ライブラリー・コードとアプリケーションが目的どおりに機能することを確認する低レベルのチューニングに使用できます。これらのルーチンは、一般にその他の OpenMP* 互換コンパイラーで認識されず、別のコンパイラーではリンクの段階で失敗することがあります。これらの OpenMP* ルーチンを使用するには、[Q]openmp-stubs オプションを指定します。
多くの場合、環境変数は拡張ライブラリー・ルーチンの代わりに使用されます。例えば、並列スレッドのスタックサイズは、kmp_set_stacksize_s() ライブラリー・ルーチンではなく、OMP_STACKSIZE 環境変数を使用して設定できます。
インテル拡張ルーチンへのランタイムの呼び出しは、対応する環境変数の設定よりも優先します。
関数 |
説明 |
---|---|
void kmp_set_defaults(char const *) |
引数が "|" で区切られた変数のリストとして定義される OpenMP* 環境変数を設定します。 |
void kmp_set_library_throughput() |
実行モードをスループットに設定します (デフォルト)。アプリケーションによりランタイム環境を特定できます。マルチユーザー環境で使用します。 |
void kmp_set_library_turnaround() |
実行モードをターンアラウンドに設定します。専用並列 (シングルユーザー) 環境で使用します。 |
void kmp_set_library_serial() |
実行モードをシリアルに設定します。 |
void kmp_set_library(int) |
関数に渡された値による実行モードに設定します。有効な値は以下のとおりです。
最初の並列領域が実行される前にこのルーチンを呼び出します。 |
int kmp_get_library() |
現在の実行モードに対応する値を返します。
|
関数 |
説明 |
---|---|
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* チームのスレッドのブロック時間の設定に影響します。その他のスレッドのブロック時間には影響しません。 |