Skip to content
oraccha edited this page Jan 14, 2013 · 1 revision

共有メモリ向け並列プログラミング API

  • [http://www.openmp.org/ 本家]

  • [http://www.coyotegulch.com/gomp/ GOMP] . gcc 4.2でマージされるらしい.

  • [http://www.xlsoft.com/jp/products/intel/docs/Cpp_OpenMP/ インテルC/C++コンパイラー OpenMP 活用ガイド]

  • [http://pc.watch.impress.co.jp/docs/2007/0925/idf10.htm テラスケールコンピューティングのための言語「Ct」] (PCWatch 2007-09-25) . IDT Fall 2007レポート。メニイコアやGPGPUを対象にしたC++ベースの言語。ソースコードをOpenMP準拠のC++コードへトランスレートする。

1997年にFORTRAN用の仕様が公開.C/C++版も追加される.現在の最新バージョンは2.5.

コンパイラに対して並列化のディレクティブを埋め込む.

MPI + OpenMP のような実装もあり得る.

  • その際は MPI 実装がスレッドセーフになっている必要がある.

マルチコア,メニーコア化が進むと,HPCプログラマ以外も使うかな? gccも標準対応することだし.


OpenMP のプログラム例 . マルチスレッド化する部分をプログラマがプラグマによって明示的に指定する. {{{ #include <stdio.h> #define INTERVALS 100000 int main() { int i; float n_1, x, pi = 0.0f; n_1 = 1.0f / INTERVALS; #pragma omp parallel for private(x) reduction(+:pi) for (i = 0; i < INTERVALS; i++) { x = n_1 * ((float) i - 0.5f); pi += 4.0f / (1.0f + x * x); } pi *= n_1; printf("pi = %f\n", pi); return 0; } }}}

環境変数OMP_NUM_THREADSで並列度(スレッド数)を指定する.

Clone this wiki locally