C言語で並列処理(OpenMP)
Windows(minGW), Mac, Linux のgcc(version 4.2以降)で動作確認済。 新しいライブラリ等をインストールすることなく、デフォルトのままのgccでコンパイルが通った。 こんなに手軽に並列計算できるなんてすごい。
ソースコード
// hoge.c // 並列処理のプログラム // Windows, Mac, Linux の全ての gcc (4.2以降) で本プログラム動作確認済 #include <stdio.h> #include <omp.h> int main(int argc, char const* argv[]) { int n; n = omp_get_max_threads(); // デフォルドのスレッド数を取得 printf("max threads (default): %d\n",n); omp_set_num_threads(16); // スレッド数を変更 n = omp_get_max_threads(); // スレッド数を再取得 printf("max threads (set): %d\n",n); // 並列処理 配列array[i]に i を入れる int a[10], i; #pragma omp parallel for for(i = 0; i < 10; i++) { a[i] = i; printf("parallel: %d\n", i); } // 配列に正しく入ったか表示 printf("a[0]:%d a[1]:%d a[2]:%d a[9]:%d\n", a[0],a[1],a[2],a[9]); return 0; }
コンパイル
bash-3.2$ gcc -fopenmp -O2 hoge.c
実行結果
bash-3.2$ ./a.out max threads (default): 4 max threads (set): 16 parallel: 1 parallel: 5 parallel: 7 parallel: 9 parallel: 3 parallel: 2 parallel: 4 parallel: 6 parallel: 8 parallel: 0 a[0]:0 a[1]:1 a[2]:2 a[9]:9
参考: OpenMP覚え書き