概要: OpenMP* による並列化

インテル® C++ コンパイラは、OpenMP* C++ バージョン 2.0 API 仕様をサポートします。OpenMP は、次の主な機能を持った対称型マルチプロセッシング (SMP) を提供します:

インテル C++ コンパイラは、ソース・プログラムのユーザの OpenMP ディレクティブの指定に従って、コード変換を実行し、マルチ・スレッド・コードを生成して、既存のソフトウェアへスレッドを追加しやすくします。インテル・コンパイラは、現在の業界標準の OpenMP ディレクティブのすべてに対応しています。ただし、WORKSHARE および OpenMP ディレクティブの注釈のある並列実行プログラムのコンパイラは除きます。さらに、インテル C++ コンパイラは、ランタイム・ライブラリ・ルーチンおよび環境変数を含む OpenMP C++ バージョン 2.0 仕様にインテル独自の拡張機能を提供します。

コンパイラの他の高度機能と同じように、OpenMP ディレクティブを効果的に使用し、プログラムの予期しない動作を避けるためには、OpenMP ディレクティブの機能を正しく理解する必要があります。

インテル C++ コンパイラの OpenMP 機能の全オプションについては、「概要: 並列プログラミング」を参照してください。

OpenMP 標準の詳細については、Web サイト http://www.openmp.org をご覧ください。OpenMP* C++ バージョン 2.0 API 仕様については、http://www.openmp.org/specs/ を参照してください。

OpenMP による並列処理

OpenMP でコンパイルするには、OpenMP ディレクティブでコードを注釈するプログラムを準備する必要があります。インテル C++ コンパイラは、はじめにアプリケーションを処理して、コードのマルチスレッド・バージョンを生成してからコードをコンパイルします。 その出力は、並列領域または構造を実行するスレッドによって実装される並列処理の実行プログラムです。

プロセッサのランタイム・チェック

ループを並列化するとき、インテル・コンパイラのループ・パラレライザ、OpenMP は指定されたプロセッサ向けの最適なセットの構成を決定しようとします。プログラムの実行時に、どの IA32 プロセッサの OpenMP がループを最適化するべきかを決定するチェックが行われます。詳細は、「プロセッサ固有のランタイム・チェック、IA-32 システム」を参照してください。

パフォーマンス分析

プログラムのパフォーマンス分析には、パフォーマンス情報を表示する「インテル® VTune™ パフォーマンス・アナライザ」を使用してください。コードのどの部分が最も多く実行時間を必要としているか、また並列パフォーマンスの問題個所の特定に関する詳細情報が得られます。