この記事は、インテル® ソフトウェア・ネットワークに掲載されている「OpenMP* Support Libraries」 (http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/optaps/common/optaps_par_libs.htm) の日本語参考訳です。
編集部注: 本記事には旧製品(インテル® コンパイラー・バージョン 11.1 以前)向けの情報が含まれます。バージョン 12.0 以降では「互換ライブラリー」のみが提供されています。また、インテル® VTune Amplifier XE を使用する場合は「プロファイル・ライブラリー」をリンクする必要はありません。
インテル® コンパイラーでは、OpenMP* のサポート・ライブラリーが提供されています。ライブラリーには次のような種類があります。
- パフォーマンス・ライブラリー: OpenMP 並列実行をサポートします。
- プロファイル・ライブラリー: OpenMP 並列実行をサポートし、インテル® スレッド・プロファイラーを使用できるようにします。
- スタブ・ライブラリー: OpenMP アプリケーションのシリアル実スレッド・プロファイラー向けのオプションであり行をサポートします。
各ライブラリーは、ダイナミック・リンクとスタティック・リンクの両方が利用できます。
注
アプリケーションで複数のライブラリーがリンクされる可能性があるため、OpenMP スタティック・ライブラリーの使用は推奨しません。条件付きの使用はサポートされていないため、予測できない結果を引き起こすことがあります。
このセクションでは、インテル® コンパイラーで提供されている互換ライブラリーとレガシー・ライブラリーについて説明します。またランタイム実行モードの選択についても説明します。
互換ライブラリー
OpenMP 互換ライブラリーを使用するには、/Qopenmp-lib:compat (Windows* OS) (デフォルト) または -openmp-lib compat (Linux* OS および Mac OS* X) (デフォルト) コンパイラー・オプションをリンク時に指定します。互換 OpenMP ランタイム・ライブラリーは、インテル® コンパイラー 10.0 よりも前のバージョンを使用して作成されたオブジェクト・ファイルと互換性がありません。
Linux および Mac OS X システムの場合、リンク時に動的にリンクされたライブラリーを使用するには、-openmp-link=dynamic オプションを指定します。スタティック・リンクを使用するには、-openmp-link=static オプションを指定します。
Windows システムの場合、リンク時に動的にリンクされたライブラリーを使用するには、/MD オプションと /Qopenmp-link:dynamic オプションを指定します。スタティック・リンクを使用するには、/MT オプションと /Qopenmp-link:static オプションを指定します。
動的にリンクされたアプリケーションは、提供された DLL (Windows OS) または共有ライブラリー (Linux OS および Mac OS X) が実行時に利用できなければなりません。インテル® Composer 12.0 以降では、openmp-link オプションの利用は推奨されません。
パフォーマンス・ライブラリー
パフォーマンス・ライブラリーを使用するには、-openmp (Linux および Mac OS X) または /Qopenmp (Windows) コンパイラー・オプションを指定します。
オペレーティング・システム | ダイナミック・リンク | スタティック・リンク |
---|---|---|
Linux | libiomp5.so | libiomp5.a |
Mac OS X | libiomp5.dylib | libiomp5.a |
Windows | libiomp5md.lib libiomp5md.dll |
libiomp5mt.lib |
プロファイル・ライブラリー
これは、旧インテル® スレッド・プロファイラー向けのオプションであり、インテル® Composer バージョン 12.0 以降ではサポートされません。以前のコンパイラーでプロファイル・ライブラリーを使用するには、-openmp-profile (Linux および Mac OS X) または /Qopenmp-profile (Windows) コンパイラー・オプションを指定します。これにより、インテル® スレッド・プロファイラーで OpenMP アプリケーションを解析することができます。
オペレーティング・システム | ダイナミック・リンク | スタティック・リンク |
---|---|---|
Linux | libiompprof5.so | libiompprof5.a |
Mac OS X | libiompprof5.dylib | libiompprof5.a |
Windows | libiompprof5md.lib libiompprof5md.dll |
libiompprof5mt.lib |
スタブ・ライブラリー
スタブ・ライブラリーを使用するには、-openmp-stubs (Linux および Mac OS X) または /Qopenmp-stubs (Windows) コンパイラー・オプションを指定します。これにより、OpenMP アプリケーションをシリアルモードでコンパイルし、OpenMP ルーチンとインテル固有の拡張ルーチンのスタブを提供することができます。
オペレーティング・システム | ダイナミック・リンク | スタティック・リンク |
---|---|---|
Linux | libiompstubs5.so | libiompstubs5.a |
Mac OS X | libiompstubs5.dylib | libiompstubs5.a |
Windows | libiompstubs5md.lib libiompstubs5md.dll |
libiompstubs5mt.lib |
レガシー・ライブラリー
これは、インテル® Composer バージョン 12.0 以降ではサポートされません。以前のコンパイラーで OpenMP レガシー・ライブラリーを使用するには、/Qopenmp-lib:legacy (Windows OS) または -openmp-lib legacy (Linux OS および Mac OS X) コンパイラー・オプションをリンク時に指定します。レガシー・ライブラリーは廃止される予定です。
Linux および Mac OS X システムの場合、リンク時に動的にリンクされたライブラリーを使用するには、-openmp-link:dynamic オプションを指定します。スタティック・リンクを使用するには、-openmp-link:static オプションを指定します。
Windows システムの場合、リンク時に動的にリンクされたライブラリーを使用するには、/MD オプションと /Qopenmp-link=dynamic オプションを指定します。スタティック・リンクを使用するには、/MT オプションと /Qopenmp-link=static オプションを指定します。
動的にリンクされたアプリケーションは、提供された DLL (Windows OS) または共有ライブラリー (Linux OS および Mac OS X) が実行時に利用できなければなりません。
パフォーマンス・ライブラリー
パフォーマンス・ライブラリーを使用するには、-openmp (Linux および Mac OS X) または /Qopenmp (Windows) コンパイラー・オプションを指定します。
オペレーティング・システム | ダイナミック・リンク | スタティック・リンク |
---|---|---|
Linux | libguide.so | libguide.a |
Mac OS X | libguide.dylib | libguide.a |
Windows | libguide40.lib libguide40.dll |
libguide.lib |
プロファイル・ライブラリー
これは、旧インテル® スレッド・プロファイラー向けのオプションであり、インテル® Composer バージョン 12.0 以降ではサポートされません。以前のコンパイラーでプロファイル・ライブラリーを使用するには、-openmp-profile (Linux および Mac OS X) または /Qopenmp-profile (Windows) コンパイラー・オプションを指定します。これにより、インテル® スレッド・プロファイラーで OpenMP アプリケーションを解析することができます。
オペレーティング・システム | ダイナミック・リンク | スタティック・リンク |
---|---|---|
Linux | libguide_stats.so | libguide_stats.a |
Mac OS X | libguide_stats.dylib | libguide_stats.a |
Windows | libguide40_stats.lib libguide40_stats.dll |
libguide_stats.lib |
スタブ・ライブラリー
スタブ・ライブラリーを使用するには、-openmp-stubs (Linux および Mac OS X) または /Qopenmp-stubs (Windows) コンパイラー・オプションを指定します。これにより、OpenMP アプリケーションをシリアルモードでコンパイルし、OpenMP ルーチンとインテル固有の拡張ルーチンのスタブを提供することができます。
オペレーティング・システム | ダイナミック・リンク | スタティック・リンク |
---|---|---|
Linux | libompstub.so | libompstub.a |
Mac OS X | libompstub.dylib | libompstub.a |
Windows | libompstub40.lib libompstub40.dll |
libompstub.lib |
実行モード
インテル® コンパイラーは、ランタイム時に指定した実行モードでアプリケーションを実行することができます。ライブラリーは、ターンアラウンド・モード (turnaround)、スループット・モード (throughput)、シリアルモード (serial) をサポートしています。KMP_LIBRARY 環境変数を使用して、ランタイム時にモードを選択します。
モード | 説明 |
---|---|
throughput
(デフォルト) |
スループット・モードでは、プログラムは環境状態 (システムの負荷) を検出し、リソースの使用を調整することで、動的環境において効率良く実行することができます。
並列マシン上の負荷が一定ではない、またはジョブストリームが予測できないマルチユーザー環境下では、スループット用に設計しチューニングするほうが良い場合もあります。これにより、複数のジョブを同時に実行した際の合計時間を最小限に抑えることができます。このモードでは、ワーカースレッドは追加の並列作業の待機中、他のスレッドへ作業を渡します。 1 つの並列領域の実行が完了すると、スレッドは新しい並列作業が使用可能になるまで待機します。その後一定期間が経過すると、スレッドが待機状態からスリープ状態に移行します。スリープ状態では、次の並列作業が使用できるようになるまでの間、プロセッサーとリソースは、並列領域間で実行される非 OpenMP のスレッドコードや他のアプリケーションによる別の作業に使用することができます。 スリープ状態に移行するまでの待機時間を設定するには、KMP_BLOCKTIME 環境変数または kmp_set_blocktime() 関数を使用します。ブロック時間の値を小さくすると、並列領域間で実行される非 OpenMP スレッドコードを含むアプリケーションの場合には、全体的なパフォーマンスが向上します。ブロック時間の値を大きくすると、スレッドが OpenMP 実行専用に予約されている場合には適していますが、他の同時実行 OpenMP やスレッド・アプリケーションに悪影響を与える可能性があります。 |
turnaround | ターンアラウンド・モードは、並列計算を行うすべてのプロセッサーをアクティブな状態で維持して、単一ジョブの実行時間を最小限に抑えるよう設計されています。ワーカースレッドは、追加の並列作業を他のスレッドに渡すことなく、アクティブな状態で待機します。すべてのプロセッサーが、プログラムの全実行に対し排他的に割り当てられる専用 (バッチまたはシングルユーザー) 並列環境では、常にすべてのプロセッサーを効果的に使用することが最も重要です。
注過剰なシステムリソースの割り当てを避けてください。過剰なシステムリソースの割り当ては、スレッドが多すぎるか、または実行時に利用可能なプロセッサーが少なすぎる場合に発生します。システムリソースが過剰に割り当てられると、このモードはパフォーマンスの低下を起こします。この問題が発生した場合、スループット・モードを使用してください。 |
serial | シリアルモードは、並列アプリケーションをシングルスレッドとして強制的に実行します。 |