インテル(R) コンパイラーは、OpenMP* 2.5 API と自動並列化機能をサポートします。OpenMP は、次の主な機能を持った対称型マルチプロセッシング (SMP) を提供します。
反復のパーティショニング、データの共用、スレッドのスケジューリング、および同期化に関する下位の詳細レベルを処理して、ユーザーの負担を軽減します。
共有メモリー、マルチプロセッサー・システム、デュアルコア・プロセッサー・システムおよびハイパースレッディング・テクノロジー (HT テクノロジー) 対応 IA-32 プロセッサーから優れたパフォーマンスを引き出します。
ハイパースレッディング・テクノロジーに関する詳細は、『IA-32 インテル(R) アーキテクチャ最適化リファレンス・マニュアル』 (http://www.intel.com/jp/developer/download/) を参照してください。
コンパイラーは、ソースプログラムのユーザーの OpenMP 宣言子の指定に従って、コード変換を実行し、マルチスレッド・コードを生成して、既存のソフトウェアへスレッドを追加しやすくします。インテル・コンパイラーは、現在の業界標準の OpenMP 宣言子のすべてに対応しています。ただし、workshare および OpenMP 宣言子の注釈のある並列実行プログラムのコンパイラーは除きます。
コンパイラーの他の高度な機能と同じように、OpenMP 宣言子を効果的に使用し、プログラムの予期しない動作を避けるためには、OpenMP 宣言子の機能を正しく理解する必要があります。インテル C++ コンパイラーの OpenMP 機能の全オプションについては、「並列処理の概要」を参照してください。
さらに、コンパイラーは、ランタイム・ライブラリー・ルーチンおよび環境変数を含む OpenMP C/C++ バージョン 2.5 仕様にインテル独自の拡張機能を提供します。
OpenMP 標準の詳細は、OpenMP Web サイト (http://www.openmp.org) を参照してください。C++ 言語の詳細な仕様は、OpenMP C/C++ バージョン 2.5 仕様 (http://www.openmp.org/specs) を参照してください。
OpenMP でコンパイルするには、 OpenMP 宣言子でコードを注釈するプログラムを準備する必要があります。インテル・コンパイラーは、はじめにアプリケーションを処理して、コードのマルチスレッド・バージョンを生成してからコードをコンパイルします。 その出力は、並列領域または構造を実行するスレッドによって実装される並列処理の実行プログラムです。
OpenMP 仕様は複数の実装の相互運用性について定義していません。このため、他のコンパイラーでサポートされている OpenMP 実装とインテル・コンパイラー Windows 版でサポートされている OpenMP 実装は相互運用できないことがあります。リンク時または実行時の問題を回避するには、次のガイドラインに従うようにしてください。
異なるコンパイラーから OpenMP ランタイム・ライブラリーの複数のコピーを使用しない。
すべての OpenMP ソースを 1 つのコンパイラーでコンパイルする。または、並列領域とその下のコールツリー全体を同じコンパイラーを使用してコンパイルする。
OpenMP 用ダイナミック・ライブラリーを使用する。
プログラムのパフォーマンス解析には、パフォーマンス情報を表示するインテル(R) VTune(TM) パフォーマンス・アナライザーや、インテル(R) スレッド化ツールを使用できます。コードのどの部分が最も多く実行時間を必要としているか、また並列パフォーマンスの問題箇所の特定に関する詳細情報が得られます。
ループを並列化するとき、インテル・コンパイラーのループ・パラレライザー、OpenMP は指定されたプロセッサー向けの最適なセットの構成を決定しようとします。実行時に、どのプロセッサーの OpenMP がループを最適化すべきかを決定するチェックが行われます。詳細は、「プロセッサー固有のランタイムチェック (IA-32 システム)」を参照してください。