インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
インテル® コンパイラーでは、OpenMP* のサポート・ライブラリーが提供されています。ライブラリーには次のような種類があります。
パフォーマンス・ライブラリー: OpenMP* 並列実行をサポートします。
スタブ・ライブラリー: OpenMP* アプリケーションのシリアル実行をサポートします。
Linux* および macOS* システムでは、各ライブラリーでダイナミック・リンクとスタティック・リンクの両方が利用できます。Windows* システムでは、ダイナミック・リンクのみ利用できます。
このライブラリーを使用するには、[Q]openmp コンパイラー・オプションを指定します。
OpenMP* を使用するオプションは、インテル製マイクロプロセッサーおよび互換マイクロプロセッサーの両方で利用可能ですが、両者では結果が異なります。両者の結果が異なる可能性のある OpenMP* 構造および機能の主なリストは次のとおりです: ロック (内部的なものおよびユーザーが利用可能なもの)、SINGLE 構造、バリア (暗黙的および明示的)、並列ループ・スケジュール、リダクション、メモリーの割り当て、スレッド・アフィニティー、バインド。
オペレーティング・システム |
ダイナミック・リンク |
スタティック・リンク |
---|---|---|
Linux* |
libiomp5.so |
libiomp5.a |
macOS* |
libiomp5.dylib |
libiomp5.a |
Windows* |
libiomp5md.lib |
なし |
OpenMP* サポート・ライブラリーの多くのルーチンは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーでより高度に最適化されます。
このライブラリーを使用するには、[Q]openmp-stubs コンパイラー・オプションを指定します。これにより、OpenMP* アプリケーションをシリアルモードでコンパイルし、OpenMP* ルーチンとインテル固有の拡張ルーチンのスタブを提供することができます。
オペレーティング・システム |
ダイナミック・リンク |
スタティック・リンク |
---|---|---|
Linux* |
libiompstubs5.so |
libiompstubs5.a |
macOS* |
libiompstubs5.dylib |
libiompstubs5.a |
Windows* |
libiompstubs5md.lib |
なし |
インテル® コンパイラーは、ランタイム時に指定した実行モードでアプリケーションを実行することができます。ライブラリーは、ターンアラウンド・モード (turnaround)、スループット・モード (throughput)、シリアルモード (serial) をサポートしています。KMP_LIBRARY環境変数を使用して、ランタイム時にモードを選択します。
モード |
説明 |
---|---|
throughput (デフォルト) |
スループット・モードでは、プログラムは他の実行プログラムへ作業を渡し、リソースの使用を調整することで、動的環境において効率良く実行することができます。 並列マシン上の負荷が一定ではない、またはジョブストリームが予測できないマルチユーザー環境下では、スループット用に設計しチューニングするほうが良い場合もあります。これにより、複数のジョブを同時に実行した際の合計時間を最小限に抑えることができます。このモードでは、ワーカースレッドは追加の並行作業の待機中、他のスレッドへ作業を渡します。 1 つの並列領域の実行が完了すると、スレッドは新しい並列作業が使用可能になるまで待機します。その後一定期間が経過すると、スレッドが待機状態からスリープ状態に移行します。スリープ状態では、次の並列作業が使用できるようになるまでの間、プロセッサーとリソースは、並列領域間で実行される非 OpenMP* のスレッドコードや他のアプリケーションによる別の作業に使用することができます。 スリープ状態に移行するまでの待機時間を設定するには、KMP_BLOCKTIME 環境変数または kmp_set_blocktime() 関数を使用します。ブロック時間の値を小さくすると、並列領域間で実行される非 OpenMP* スレッドコードを含むアプリケーションの場合には、全体的なパフォーマンスが向上します。ブロック時間の値を大きくすると、スレッドが OpenMP* 実行専用に予約されている場合には適していますが、他の同時実行 OpenMP* やスレッド・アプリケーションに悪影響を与える可能性があります。 |
turnaround |
ターンアラウンド・モードは、並列計算を行うすべてのプロセッサーをアクティブな状態で維持して、単一ジョブの実行時間を最小限に抑えるよう設計されています。ワーカースレッドは、追加の並列作業を他のスレッドに渡すことなく、アクティブな状態で待機します (ただし、ワーカースレッドはまだ KMP_BLOCKTIME に制御されます)。すべてのプロセッサーが、プログラムの全実行に対し排他的に割り当てられる専用 (バッチまたはシングルユーザー) 並列環境では、常にすべてのプロセッサーを効果的に使用することが最も重要です。 注過剰なシステムリソースの割り当てを避けてください。過剰なシステムリソースの割り当ては、スレッドが多すぎるか、または実行時に利用可能なプロセッサーが少なすぎる場合に発生します。システムリソースが過剰に割り当てられると、このモードはパフォーマンスの低下を起こします。この問題が発生した場合、スループット・モードを使用してください。 |
serial |
シリアルモードは、並列アプリケーションをシングルスレッドとして強制的に実行します。 |