|
OpenMPは、並列コンピューティング環境を利用するために用いられる標準化された基盤。OpenMPは主に共有メモリ型並列計算機で用いられる。 MPIでは明示的にメッセージの交換をプログラム中に記述しなければならないが、OpenMPはOpenMPが使用できない環境では無視されるディレクティブを挿入することによって並列化を行う。このため並列環境と非並列環境でほぼ同一のソースコードを使用できるという利点がある。 また、プラットフォーム固有のスレッドAPIを使わず、コンパイラによって暗黙的に生成されたスレッドプールを利用してタスクを振り分けることになるため、並列プログラムを簡潔に記述できるだけでなく、複数の環境に移植しやすくなる。 MPIとの比較では、OpenMPは異なるスレッドが同一のデータを同じアドレスで参照できるのに対して、MPIでは明示的にメッセージ交換を行わなければならない。そのためSMP環境においては大きなデータの移動を行なわずにすむので高い効率が期待できる。ただし並列化の効率はコンパイラに依存するのでチューニングによる性能改善がMPIほど高くならないという問題がある。また、。 現在FORTRANとC/C++について標準化が行われている。 == OpenMPを用いたコード例 == 以下はC言語における for ループを並列処理させる例である。 int main(int argc, char *argv, 7499 , 9999 の各範囲をそれぞれのスレッドに分担させる、といった具合である。実際にいくつのスレッドを起動するのか、また各スレッドに対してどのように処理を振り分けるのかはOpenMP処理系およびプログラム実行環境などの条件に依存する〔OpenMP * 入門 | iSUS 〕。 以下は区分求積法を用いた円周率πの数値計算を、OpenMP並列リダクションによって行なうC++のコード例である。 #include #include #include #include #include const double D_PI = 3.1415926535897932384626433832795; // 区分求積法で π の近似値を求める。 // 1 / (x^2 + 1) を区間 1 で積分すると π/4 になるという定積分を利用する。 int main() OpenMPコンパイルオプションの有無を切り替えるか、OpenMPディレクティブをコメントアウト/コメント解除してからコンパイル・実行することで、マルチスレッド版およびシングルスレッド版の速度性能比較を簡単に行なうことができるのがOpenMPプログラムの特徴である。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「OpenMP」の詳細全文を読む スポンサード リンク
|