OpenMP (Open Multi-Processing)は並列計算環境での並列プログラミングをサポートするために標準化されたAPI.C/C++,Fortranで利用可能.

OpenMP自身はコンパイラではなく,コンパイラに対する 並列処理の機能拡張を規定したものであり,コンパイラから 呼び出されるライブラリによって構成される

指示文構成

#pragma omp 指示句 [指示節] [指示節]

使用例

#include <stdio.h>
int main() {
	#pragma omp parallel private(i)
	{ 
	//--並列実行部分--
		#pragma omp for
		for (int i=0; i<8; i++)
			printf (“[i=%d] Hello ! ¥n, i);
	//--並列実行部分--
	}
	return 0;
}

gcc/g++でのOpenMPの使用

コンパイル時に-fopenmpをつけることでOpenMPを使用できる

g++ -Wall -fopenmp main.cpp

parallel構文

複数スレッドによる並列処理

並列領域は構造ブロック(構造ブロック:入り口が1つで,出口が1つの実行コードのブロック)

並列実行領域外からのブロック内への分岐や,ブロック内から領域外への分岐はあってはならない(return文もダメ.exit文は良い)

構造ブロックが1行のシングルステートメントやC/C++言語上のブロック構造であれば,中括弧は省略できる

#pragma omp parallel [指示節..]
{
並列実行領域
}

ワークシェアリング(分業)構文

for構文