インテル®コンパイラー OpenMP*入門
デュアルコア・マルチコア対応アプリケーション開発@
<< 13 >>
5 . 2 OpenMP*:共有メモリー並列プログラミングAPI
OpenMP* は、マルチスレッド並列プログラミングのための API ( Application Programming Interfaceです。
OpenMP* は 1997 年に発表された業界標準規格であり、 多くのハードウェアおよびソフトウェア・ベンダーが参加する
非営利団体「OpenMP Architecture Review Board によって管理されています。OpenMP* APIは、Linux*お
よび Windows* システムで利用可能です。OpenMP* は、C/C++ や Fortran* のようなコンパイラー言語ではなく、コン
パイラーに対する並列処理の機能拡張を規定したものです。したがって、OpenMP* を利用するためには、「インテル®
コンパイラー バージョン 9.0」のような OpenMP* をサポートするコンパイラーが必要になります。OpenMP*の詳細に
ついては、OpenMP*のホームページ http://www.openmp.org/ に詳細な情報があります。 最新の OpenMP* のリリー
スは、2005 年 5 月に発表された OpenMP* 2.5 であり、この仕様で初めて C/C++ と Fortran* の双方の規格が 統合
されました。
OpenMP* 開発とリリースの歴史
C/C++ や Fortran* には並列処理のための API が 無かったために、それを補うものとして規定されたのが OpenMP*
であるとも言えます。OpenMP* は C/C++ や Fortran* の言語規格に準拠しているため、OpenMP* を利用してもプログ
ラムの移植性や互換性を損なうことなく、 並列処理を容易に適用することができます。
プログラムの開発者は、コードの設計時から OpenMP* を利用した並列処理を実装することも、すでに開発された
プログラムを、OpenMP* を利用して段階的に並列化することも可能です。実際に OpenMP* での並列化を適用して
いて計算などが不正になった場合、簡単にその部分だけを逐次実行に切り替えることができますから、プログラムの
デバッグが非常に容易です。さらに、 先に説明した自動並列化と OpenMP* を併用したり、プログラムの一部だけを
OpenMP* で並列化したりして、 他の部分を自動並列化することもできます。
OpenMP* のアーキテクチャーは以下に示します。
OpenMP* アーキテクチャー
1997
1998
OpenMP*
C/C++ 1.0
1999
OpenMP*
Fortran 1.1
2000
2002
OpenMP*
C/C++ 2.0
2005
OpenMP*
Fortran
C/C++ 2.5
OpenMP*
Fortran 1.0
OpenMP*
Fortran 2.0
エンドユーザー
アプリケーション
宣言子
OpenMP*ライブラリー
環境変数
実行時ライブラリー
スレッドライブラリー/オペレーティング・システム
ユーザー層
プログラミング層
(OpenMP* API)
システム層
API はソフトウェアを開発する際に使用できる命令や関数群、あるいは、それらを利用するプログラム上の規約を総称したものです。 OpenMP* API では、コン
パイラー宣言子の規定と OpenMP* ライブラリー、および環境変数が API として規定されています。