余白の書きなぐり

aueweのブログ

C言語で並列処理(OpenMP)

Windows(minGW), Mac, Linuxgcc(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覚え書き