アットウィキロゴ

OpenMP

並列化処理のための拡張言語であるOpenMPについてのメモ。

  • OpenMPの使用方法、及び環境設定(Visual Studio)
  • 変数について
     1 private変数

  • threadの生成
  • memo


OpenMPの使用方法、及び環境設定(Visual Studio)

まず、「プロジェクトのプロパティー>C/C++>言語」で、OpenMPサポートを「はい」に変更する。これでRelease構成では問題なく使用できるようになる。(「omp.h」をインクルードする必要がある。)

ビルド時に何かしらのエラーが出た場合には、「Windows SDK for Windows Server 2008 and .NET Framework 3.5」をインストールしてあげればよい。
必要なのは、「Visual C compiler」にだけチェックを入れとけばいい。

Debag構成で使用したい場合、Standard_Edition以上のバージョンに含まれている(VS2008)
「Microsoft.VC90.DebugOpenMP.manifest」
「vcomp90d.dll」
の二つのファイルを
C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugOpenMP
から、実行ファイルがある場所にコピーしてくる事で、使用できるようになる。


threadの生成

下のような場合、これはコア数分だけスレッドが生成される。

 #pragma omp parallel
 {
 printf( "スレッド:%d\n", omp_get_thread_num());
 }

次に「parallel」の後に「sections num_threads(var)」をつけてあげると、指定した数分だけスレッドが生成される。

 #pragma omp parallel sections num_threads(3)
 {
 #pragma omp section
 printf("a, from %d of %d\n",
 omp_get_thread_num(), omp_get_num_threads());  
 #pragma omp section
 printf("b, from %d of %d\n", 
 omp_get_thread_num(), omp_get_num_threads());  
 #pragma omp section
 {
 printf("c,from %d of %d\n",
 omp_get_thread_num(), omp_get_num_threads());
 printf("d,from %d of %d\n",
 omp_get_thread_num(), omp_get_num_threads());
 }
 }

これはシングルコアでも可能であるが、効率が悪くなる。つまり、コア数以上のスレッドを作っても、効率が悪くなるということ。


memo
他の端末でOpenMPを使って作成したプログラムを動かす場合、再配布可能パッケージをインストールする必要がある。
ちなみに、visual studioがインストールされていなくても問題はない。
最終更新:2011年03月19日 00:38