• 製品案内
  • 受託解析・開発
  • 実績・事例
  • セミナー
  • サポート
  • 資料ダウンロード
  • お問い合わせ

OpenMPとは

OpenMPとは

OpenMP(Open Multi-Processing)とは共有メモリ型マシンで並列プログラミングを可能にする API(Application Programming Interface) で、FORTRAN、C/C++から利用できます。
OpenMPの特徴は次の通りです。

  • ディレクティブを挿入するだけで並列化できる
  • 同じソースからシリアル、並列の実行ファイルが作成できる
  • コアごとのロードバランスをとり易い
  • 比較的粒度が小さい計算でも並列の効果が得られる
  • 自動並列化できる(単純なプログラムでないとなかなか効果は出ない)
何よりも、MPI や GPGPU と異なり、プログラムの一部ずつ、
デバッグしながらの並列化作業が可能ですので、
導入への敷居が低いものとなっています。

openmp


OpenMPの並列処理

OpenMPでは、マルチコアCPUの複数コアを利用し、複数のスレッドを処理します。
各スレッドは並列領域を開始時に生成され(fork)、並列領域が終了すると マスタースレッドのみの逐次処理となります(join)。
openmp
並列領域の開始、終了はディレクティブで記述します。
FORTRAN では !$omp parallel で開始し、 !$omp end parallel で終了します。
C/C++ では #pragma omp parallel { } で囲んだ部分が並列領域となります。
また、OpenMP は共有メモリ型ですので、MPI のようにプロセス間でデータをコピーする必要はありません。

例えば、Hello! を出力するプログラムをOpenmpで並列化するには、次のようにディレクティブを追加します。
FORTRAN
program main
!$omp parallel
   print *, "Hello!"
!$omp end parallel
stop
end

C/C++
#include <stdio.h>
#include <omp.h>
int main
{
   #pragma omp parallel
   {
     printf( "Hello! ¥n" );
   }
}
このプログラムを実行すると、デフォルトではコア数分スレッドが並列され、 コア数分 Hello! が出力されます。

ループの並列計算

OpenMPでプログラムを高速化するには、ループを並列処理することがほとんどになると思います。
例として、次のように、配列 b と配列 c の和を配列 a に書き込む計算を考えます。
FORTRAN
do i = 1, 100
   a(i) = b(i) + c(i)
enddo
C/C++
for( i=0; i<100; i++)
{
   a[i] = b[i] + c[i]
}
ループを並列処理するには、FORTRANでは並列領域内でループを !$omp do!$omp enddo で挟みます。
C/C++ではforループの前に #pragma omp for を記述します。
FORTRAN
!$omp parallel
!$omp do
  do i = 1, 100
     a(i) = b(i) + c(i)
  enddo
!$omp enddo
!$omp end parallel
C/C++
#pragma omp parallel
{
   #pragma omp for
   for( i=0; i<100; i++)
   {
     a[i] = b[i] + c[i]
   }
}
OpenMPではこのようにディレクティブを加えるだけで、 スレッドがループを分割して並列計算を行ってくれます。
(上の例では、4コアの場合、各スレッドが i を25ずつ担当)
そのため、プログラムによっては、数行のディレクティブを挿入するだけで、 最大コア数倍までの高速化が期待できます。
高速化・並列化事例ページで紹介しているものも、プログラムの大きな変更はなしに高速化できています。

ただ、実際のプログラムでは、うまく並列化できない、性能がなかなか上がらない、といったこともあるかと思います。
その場合は、お気軽にご相談ください。お客様のプログラムに合った並列化方法をご提案いたします。

弊社ではOpenMPの入門セミナーを開催しています。
並列化、OpenMPの説明を始め、円周率の計算やマンデル・ブロの計算を例に主なディレクティブを紹介しています。
本セミナーの知識で大抵のプログラムはOpenMPで並列化できますので、 ご興味ある方は是非ご参加ください。
セミナー開催予定が無い場合でも、セミナー資料、デモプログラムはいつでも配布しておりますので、ご希望の方はお問い合わせください

openmp

関連資料ダウンロード

お問い合わせ