<< 30 >>
インテル® C/C++ コンパイラー OpenMP* 活用ガイド
デュアルコア・マルチコア対応アプリケーション開発A
6. OpenMP* の適用について
OpenMP* によるマルチスレッド化は、プログラマーから並列処理を行うための様々な作業を解放します。以下の図
に示すのは、簡単なプログラム開発、最適化、並列化の流れです。プログラムを自動並列化し性能評価ツールなど
を使い、必要なところに OpenMP* 宣言子による並列処理の適用を行うというのが実際の開発の流れになります。
図.21 OpenMP* プログラムの開発フロー
プログラムの開発には、多くの試行錯誤とプログラムの実と検証行>、デバッグといった作業が必要になります。ま
たプログラムについては、その実行性能の向上を図るためのソースコードの書き換えなどを行う作業を、プログラム
の開発中も開発後も行う必要があります。このような作業を効率良く、また短時間で行うには優れた開発環境が必
要です。インテルのソフトウェア製品は、マルチスレッド・プログラミングに対応したインテル®コンパイラーなど、プロ
グラミングを支援する豊富なツール群が用意されています。それらのツールを活用することで、プログラム開発サイク
ルはより充実したものになります。
OpenMP* 適用のためのステップは次のようになります。
1. インテル® VTune パフォーマンス・アナライザーを使いプログラムの動作の詳細な解析を行います。ホットスポット
を見つけることが並列処理では必要になります。
2. ホットスポットに対して OpenMP* 宣言子の適用などを検討します。データの依存関係などのために並列化できな
い部分などについては、依存関係の解消のために行うプログラムの変更を行います。この時、他のハイレベルの
最適化手法(ソフトウェア・パイプラインやベクトル化)などに影響を与えるときがあります。この並列化による他の
ハイレベルの最適化の阻害は避ける必要があります。そのためには、並列化の適用時と非適用時の性能を比較
検討する必要もあります。
3. 計算コアの部分について、もし可能であれば既にマルチスレッド向けに高度に最適化されているインテル®マス・
カーネル・ライブラリー (MKL などを積極的に利用することが並列処理の効率化を図る有効な手段です。これらの
ライブラリーのマルチスレッド化には、OpenMP* が使用されているので、容易に自動並列化に組み込むことが可
能です。
計算負荷の大きな関数やサブルーチンに対する
自動並列処理や >OpenMP* の適用の検討
マルチスレッドでの最適化と
プログラム性能の評価
自動並列化
コンパイル
オプション
OpenMP* 指示行の
挿入による並列化指示
プログラム
プログラム開発者
マルチスレッド
実行モジュール
インテル®
パフォーマンス
ツール
シングルスレッドでの最適化と
プログラム性能の評価
インテル®
コンパイラー
最適化オプション
性能解析ツールによる
パフォーマンス
チューニング
OpenMP*
プログラム
プログラム
関数・サブルーチン
マルチスレッド
実行モジュール
インテル®
コンパイラー
OpenMP*
コンパイル
オプション
性能解析ツールによる
パフォーマンス
チューニング
インテル®
パフォーマンス
ツール