並列化処理のための拡張言語であるOpenMPについてのメモ。
- OpenMPの使用方法、及び環境設定(Visual Studio)
- 変数について
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