ナビゲーション:前へ 上へ 次へ
(※Helloで始まる行の末尾の番号は順番が不定ですので、下記とは異なる順番で出力されても正常です。)
ナビゲーション:前へ 上へ 次へ
1 初めてのOpenMPプログラム - Hello World in OpenMP
本セクションではOpenMPを用いたプログラミングの大枠をつかむために、初めてのOpenMPプログラムを作成します。 このプログラムはOpenMPを用いた非常に簡単なプログラムで、 複数のスレッドによりメッセージを画面に出力するプログラムです。 実行すると例えば以下のような出力が得られます。
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" endhello.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プログラムの作成、コンパイル、 実行方法の流れを示しましたが、次章以降ではもう少し詳しく見ていきます。
ナビゲーション:前へ 上へ 次へ