<<  4  >> インテル® C/C++ コンパイラー OpenMP* 活用ガイド デュアルコア・マルチコア対応アプリケーション開発A 3. OpenMP* マルチスレッド並列プログラミング OpenMP* は、マルチスレッド並列プログラミングのための API(Application Programming Interface) です。 OpenMP* API は 1997年に発表され、その後継続的にバージョンアップされている業界標準規格で、多くのハード ウェアおよびソフトウェア・ベンダーが参加する非営利団体 (Open MP Architecture Review Board) によって管理され ており、Linux*、UNIX*そして Windows* システムで利用可能です。OpenMP* は、C/C++ や Fortran と言ったコン パイラー言語ではありません。また、OpenMP* 自身はコンパイラーではなく、コンパイラーに対する並列処理の機 能拡張を規定したものです。したがって、OpenMP* を利用するには、インテル® コンパイラーバージョン 9.0 のよ うな OpenMP* をサポートするコンパイラーが必要です。OpenMP* の詳細については、OpenMP* のホームページ http://www.openmp.org/ にその歴史も含めて、詳細な情報があります。最新の OpenMP* のリリースは、2005年 5月の OpenMP* 2.5 であり、この仕様では初めて、C/C++ と Fortran の双方の規格の統合がなされました。 図.3 OpenMP* リリースの歴史 3.1 プログラミングの特長 C/C++ や Fortran には並列処理のための API が無かったために、それを補うものとして規定されたのが OpenMP* であるとも言えます。OpenMP* は、C/C++ や Fortran の言語規格に準拠しているため、OpenMP*を利用してもプロ グラムの移植性や互換性を損なうことなく、並列処理を容易に適用することができます。 コンパイラーのサポート OpenMP* を利用した並列プログラミングは、プログラムに対して OpenMP* で規定された宣言子を挿入し、コンパ イル時にコンパイルオプションとして /Qopenmp スイッチ(Windows*)、-openmp スイッチ(Linux*) を指定することで 可能となります。コンパイラーは、ソースコード中の 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