OpenMP 入門

ナビゲーション:前へ   上へ   次へ

1 初めてのOpenMPプログラム - Hello World in OpenMP

本セクションではOpenMPを用いたプログラミングの大枠をつかむために、初めてのOpenMPプログラムを作成します。 このプログラムはOpenMPを用いた非常に簡単なプログラムで、 複数のスレッドによりメッセージを画面に出力するプログラムです。 実行すると例えば以下のような出力が得られます。

HelloOpenMPの出力例

1.1 OpenMPプログラムコードの作成

それではまず以下のプログラムコードをhello.f90というファイル名で保存して下さい。
program helloOpenMP
  !$ use omp_lib
  implicit none
  print *, "START"
!$omp parallel
  print *, "Hello! N =", omp_get_num_threads(), " and I am ", omp_get_thread_num()
!$omp end parallel
  print *, "END"
end
hello.f90

OpenMPを用いたプログラムコードは見ての通り、通常のFortranプログラムとほとんど変わりありませんが、 !$omp!$ ではじまる特別なコメントが含まれています。(詳細は後述のセクションで説明します)

1.2 OpenMPプログラムのコンパイル

次に上記プログラムコードをコンパイルしますが、 その際にOpenMPを有効にするためのコンパイラオプションを指定する必要があります。 OpenMPを有効にするためのオプションはコンパイラ(メーカー)毎に異なりますが下記にいくつかの代表的な例を示します。
nAGの場合
  nagfor -openmp hello.f90 -o hello.exe
GNUの場合
  gfortran -fopenmp hello.f90 -o hello.exe
Intelの場合
  ifort -openmp hello.f90 -o hello.exe
これにより実行形式プログラム hello.exe が作成されます。

1.3 OpenMPプログラムの実行

出来上がったOpenMPプログラムは複数のスレッドで実行可能なものですが、 いくつのスレッドで実行するかを指定する必要があります。

この指定は環境変数 OMP_NUM_THREADS に並列に動かしたいスレッド数を設定することにより行います。

以下にコマンドウィンドウからスレッド数を4に設定してプログラム(hello.exe)を実行する場合の例を示します。

UNIX系のcsh等を利用している場合の例)
  setenv OMP_NUM_THREADS 4
  ./hello.exe

Windowsのコマンドプロンプトから利用する場合の例)
  set OMP_NUM_THREADS=4
  hello.exe
おおよそ以下のような結果が得られるはずです。
(※Helloで始まる行の末尾の番号は順番が不定ですので、下記とは異なる順番で出力されても正常です。)
 START
 Hello! N = 4  and I am  1
 Hello! N = 4  and I am  0
 Hello! N = 4  and I am  2
 Hello! N = 4  and I am  3
 END
ここまでで簡単なOpenMPプログラムの作成、コンパイル、 実行方法の流れを示しましたが、次章以降ではもう少し詳しく見ていきます。


ナビゲーション:前へ   上へ   次へ
関連情報
ご案内
© 日本ニューメリカルアルゴリズムズグループ株式会社 2025
Privacy Policy  /  Trademarks