<<  5  >> インテル® C/C++ コンパイラー OpenMP* 活用ガイド デュアルコア・マルチコア対応アプリケーション開発A プログラムの段階的な並列化が可能 プログラムの開発者は、コードの設計時から OpenMP* を利用した並列処理を実装することも可能です。また、既 に開発されたプログラムを、OpenMP* を利用して段階的に並列化することも可能です。OpenMP* での並列化を適用 していて計算などが不正になった場合、簡単にその部分だけを逐次実行に切り替えることができるので、プログラム のデバッグが非常に容易です。 自動並列化との併用 自動並列化と OpenMP*を併用することも可能であり、プログラムの一部だけを OpenMP* で並列化し、他の部分 を自動並列化することも可能です。OpenMP* と自動並列化は、ハイレベルのマルチスレッド・ライブラリーを共有す ることで混在が可能となっています。また、オペレーティング・システム (32 bit と 64 bit Linux* 及び 32 bit と 64 bit Windows*) に関係なく並列処理の適用が可能となっています。 疎粒度での並列化の適用 OpenMP* での並列化では、自動並列化が難しい関数やサブルーチンの呼び出しを含むタスクでの並列化(疎粒度 での並列化)も可能になります。コンパイラーの自動並列化では認識できないこのような粒度の大きな並列化では、 よりオーバーヘッドの小さな並列化処理が可能となります。 3.OpenMP* アーキテクチャー OpenMP* のアーキテクチャーは以下のようなものになります。 図.4 OpenMP* のアーキテクチャー OpenMP* API は、プログラムの並列化領域やデータ属性などを指示する宣言子と並列処理を補助するための OpenMP* ライブラリー、そして、並列処理を行う場合の実行環境を指定する環境変数から構成されます。これらは、 デスクトップからスーパーコンピューターまで、統一されたひとつの API となっています。従って、OpenMP* API でプ ログラムの並列化を行うことで、システムのスケールアップに合わせてプログラムを書き直す必要はありません。また、 OpenMP* API をサポートしているプラットフォームであれば、現在及び将来のプラットフォーム間でのプログラムの移 行は非常に容易です。 エンドユーザー アプリケーション 宣言子 OpenMP* ライブラリー 環境変数 実行時ライブラリー スレッドライブラリー/オペレーティング・システム ユーザー層 プログラミング層 (OpenMP* API) システム層