「OpenMP」の版間の差分
提供: C言語入門
(ページの作成:「OpenMP (Open Multi-Processing)とは、共有メモリ型マシンで並列プログラミングを可能にするAPIで、C言語, C++, Fortran などで使用でき...」) |
(相違点なし)
|
2014年5月11日 (日) 18:42時点における版
OpenMP (Open Multi-Processing)とは、共有メモリ型マシンで並列プログラミングを可能にするAPIで、C言語, C++, Fortran などで使用できます。プラグマディレクティブ(#pragma)を用いて、コンパイラに命令文を与えます。OpenMPを使用するには、対応したコンパイラが必要です。例えば、gccコンパイラが対応しています。
読み方
- OpenMP
- おーぷん えむぴー
- Open Multi-Processing
- おーぷん まるちぷろせっしんぐ
目次
概要
OpenMPは、プラグマディレクティブでコンパイラに命令を出します。OpenMPをサポートしないコンパイラでは、無視されます。OpenMPは、複数のノードにまたがった並列プログラムは記述できません。
OpenMPの特徴
- 並列プログラムが簡単に記述できます。
- 並列環境と非並列環境で同じソースコードが利用できます。
OpenMPが使えるコンパイラ
OpenMPが使えるコンパイラをいくつか列挙します。
- gcc
- icc (Intelコンパイラ)
- Visual Studio
インストール
- gcc 4.9をインストールします。
ヘッダファイル
#include <omp.h>
C言語でのOpenMPの利用例
openmp_hello.c
#include <stdio.h> #include <stdlib.h> #include <omp.h> int main(int argc, char *argv[]) { #pragma omp parallel { // ここがコア数分並列に実行される。1コアだと1つです。 printf("hello world\n"); } exit(EXIT_SUCCESS); }
openmp_for.c
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <omp.h> int main(int argc, char *argv[]) { size_t i; #pragma omp parallel for for(i = 0; i < 10; ++i) { // ここが並列に処理されます。並列数は、コア数分です。 sleep (1); printf("hello world: %lu\n", i); } exit(EXIT_SUCCESS); }
コンパイル
FreeBSDでgcc 4.9の場合は、以下のコマンドラインでコンパイルします。
gcc49 -Wl,-rpath=/usr/local/lib/gcc49/ -fopenmp openmp_hello.c
実行方法
通常は、以下のコマンドで実行してください。
$ ./a.out
並列スレッド数を環境変数で設定することもできます。コアが1つしかない場合は、OpenMPを体験するために、明示的に設定してみてください。
$ env OMP_NUM_THREADS=16 ./a.out
関連項目
- OpenMPとは
- OpenMP ブロックを並列実行する
- OpenMP for文を並列実行する