OpenMP覚え書き

特徴

  • OpenMPとは共有メモリ環境における並列処理API。本家はここ
  • マルチプロセッサやマルチコア環境で実行
  • 現在は幅広く利用可能
    • gcc 4.2から対応
    • Visual Studio 2005あたりから対応
  • ソースコードにコンパイラ指示子を挿入することで並列動作等を記述。これを無視することで、シーケンシャル処理も可能。

記述方法

  • 下記ヘッダをインクルード
#include<omp.h>
  • 残りはそのうち。。。

コンパイル方法(gcc)

コンパイラオプションに-fopenmpを追加

  • コンパイルコマンド例
$ gcc -fopenmp -O2 -o test test.c

コンパイル方法(Visual C++)

コンパイラオプションに/openmpを追加

  • コンパイルコマンド例
> cl /openmp /O2 test.c

メモ

  • 実行するスレッド数を指定
 omp_set_num_threads(16); // 実行するスレッド数を16に設定
  • 実行可能なスレッドの最大数を取得。ただし、omp_set_num_threads関数で指定した場合は、その数を返す。
 int n = omp_get_max_threads();
  • 現在実行しているスレッド数を取得。
 int n = omp_get_num_threads();
  • 実行しているスレッド番号を取得。スレッド番号は0~omp_get_num_threads()-1まで割り当てられている。
 int n = omp_get_thread_num();