インテル(R) コンパイラーでは、OpenMP のサポート・ライブラリーが提供されています。ライブラリーには、パフォーマンス、スタブ、プロファイルなどの種類があります。各ライブラリーでダイナミック・リンクとスタティック・リンクの両方が利用できます。
アプリケーションで複数のライブラリーがリンクされてしまう可能性があるため、スタティック・リンクの使用は避けてください。条件付きの使用はサポートされていないため、予測できない結果を引き起こすことがあります。
-openmp (Linux* および Mac OS* X) や /Qopenmp (Windows*) コンパイラー・オプションとともにライブラリーを使用します。
プラットフォーム |
スタティック・ライブラリー |
ダイナミック・ライブラリー |
---|---|---|
Linux |
libguide.so |
libguide.a |
Mac OS X |
libguide.dylib |
libguide.a |
Windows |
libguide40.lib |
libguide.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 |
libompstub.lib |
-openmp-profile (Linux および Mac OS X) や /Qopenmp-profile (Windows) コンパイラー・オプションとともにライブラリーを使用します。これにより、インテル(R) スレッド・プロファイラーで OpenMP アプリケーションを解析することができます。
プラットフォーム |
スタティック・ライブラリー |
ダイナミック・ライブラリー |
---|---|---|
Linux |
libguide_stats.so |
libguide_stats.a |
Mac OS X |
libguide_stats.dylib |
libguide_stats.a |
Windows |
libguide40_stats.lib |
libguide_stats.lib |
インテル・コンパイラーは、ランタイム時に指定した実行モードでアプリケーションを実行することができます。ライブラリーは、ターンアラウンド・モード (turnaround)、スループット・モード (throughput)、シリアルモード (serial) をサポートしています。KMP_LIBRARY 環境変数を使用して、ランタイム時にモードを選択します。
モード |
説明 |
---|---|
throughput (デフォルト) |
スループット・モードは、プログラムにその実行環境を認知させ (つまりシステムの読み込み)、リソースの使用を調整することで、動的環境における効率の良い実行を行うことができます。 並列マシン上のロードが一定ではない、またはジョブストリームが予測できないマルチユーザー環境下では、スループット用にデザインおよびチューニングする方が良い場合もあります。これにより、複数のジョブを同時に実行した際の合計時間を最小限に抑えることができます。このモードでは、作業スレッドは追加の並行作業の待機中、他のスレッドへ作業を渡します。 1 つの並列領域の実行が完了すると、スレッドは新しい並列作業が使用可能になるまで待機します。その後一定期間が経過すると、スレッドが待機状態からスリープ状態に移行します。スリープ状態のスレッドは、追加の並列作業が使用可能になるまでの間、並列領域間で実行される非 OpenMP のスレッドコードか、他のアプリケーションによってのみ使用されることができます。 スリープ状態に移行するまでの待機時間を設定するには、KMP_BLOCKTIME 環境変数または kmp_set_blocktime() 関数を使用します。ブロック時間の値を小さくすると、並列領域間で実行される非 OpenMP スレッドコードを含むアプリケーションの場合には、全体的なパフォーマンスが向上します。ブロック時間の値を大きくすると、スレッドが OpenMP 実行専用に予約されている場合には適していますが、他の同時実行 OpenMP やスレッド・アプリケーションに悪影響を与える可能性があります。 |
turnaround |
ターンアラウンド・モードは、並列計算を行うすべてのプロセッサーをアクティブな状態で維持して、単一ジョブの実行時間を最小限に抑えるよう設計されています。作業スレッドは、追加の並列作業を他のスレッドにわたすことなく、アクティブな状態で待機します。すべてのプロセッサーが、プログラムの全実行に対し排他的に割り当てられる専用 (バッチまたはシングルユーザー) 並列環境では、常にすべてのプロセッサーを効果的に使用することが最も重要です。
|
serial |
シリアルモードは、並列アプリケーションをシングルスレッドとして強制的に実行します。 |