さきほどのソースコードで見知らぬものが出てきたと思います。
#include<omp.h>
これはいわゆるヘッダーファイル定義です。OpenMPをC言語で使う場合はこれが必要となります。
#pragma omp parallel
これは、「ここから並列化してください」という指示です。
そして、”{}”で囲まれいているところを並列リージョンと呼びます。
この並列リージョンを終えると逐次のプログラムに戻ります。
「#pragma omp」 は OpenMP指示子とも呼ばれます。
指示子の特徴は、「コンパイラが認識できないときは無視する」ということです。ですので、OpenMPのコードの大半は
- 逐次コード
- OpenMPの並列化コード
をひとつのソースコードで管理できるようになります。
my = omp_get_thread_num();
これは、OpenMP独自の関数で「各スレッドについた番号」を取得するための関数で、その結果をmyに代入しています。
MPIを知っているかたは
MPI_Comm_rank();
と同じ働きだと思えばわかるはずです。
さきほどOpenMPコードは逐次と並列のコードを一緒に管理できるといっておきながら、実はこの関数をただ埋めただけでは逐次プログラムとしてコンパイルできなくなります。どうすれば良いかはまた今度解説します。