「OpenMP」の版間の差分
提供: C言語入門
行1: | 行1: | ||
− | [[OpenMP]] (Open Multi-Processing) | + | [[OpenMP]] (Open Multi-Processing)とは、共有メモリ型マシンで並列プログラミングを可能にするAPIで、'''C言語''', '''C++''' , Fortran などで使用できます。プラグマディレクティブ(#pragma)を用いて、コンパイラに命令文を与えます。[[OpenMP]]を使用するには、対応したコンパイラが必要です。例えば、[[gcc]]コンパイラが対応しています。 |
'''読み方''' | '''読み方''' |
2016年1月21日 (木) 00:58時点における版
OpenMP (Open Multi-Processing)とは、共有メモリ型マシンで並列プログラミングを可能にするAPIで、C言語, C++ , Fortran などで使用できます。プラグマディレクティブ(#pragma)を用いて、コンパイラに命令文を与えます。OpenMPを使用するには、対応したコンパイラが必要です。例えば、gccコンパイラが対応しています。
読み方
- OpenMP
- おーぷん えむぴー
- Open Multi-Processing
- おーぷん まるちぷろせっしんぐ
目次
概要
OpenMPは、プラグマディレクティブでコンパイラに命令を出します。OpenMPをサポートしないコンパイラでは、無視されます。OpenMPは、複数のノードにまたがった並列プログラムは記述できません。 OpenMPは、非常にループ指向で、アルゴリズムやデータ構造レベルのパラレリズムを扱えません。OpenMPは、Fortranやループ指向のC言語のコードに非常にマッチします。
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