前提・実現したいこと
C++でOpenMPを利用したプログラムを書いているのですが、parallel forを入れ子にした状態でスレッドの番号を重複せずに取得したいです。
入れ子にした状態だと、番号が重複してしまいます。
期待するスレッドの番号を重複せずに連番で得られるようにしたいです。
仕様的にomp_get_thread_num()は最後のスレッド分割した際の番号を取得するものなのでしょうか?
前段と後段の間でスレッドの番号の数を取得し、その数*後段のスレッド分割数をすれば計算することができるのはわかります。
発生している問題・エラーメッセージ
前段と後段でそれぞれスレッド分割をしているので、期待するスレッドの番号は011なのですが、実際は05がそれぞれ重複して表示されます。
内部の動作的には実際のスレッド番号が後段のスレッド分割の部分だけのスレッド番号だけになってしまい、それが前段で2回分割されていると思われます。
該当のソースコード
C++
1#include <omp.h> 2#include <iostream> 3 4int main() 5{ 6 omp_set_dynamic(1); 7 omp_set_nested(1); 8#pragma omp parallel for 9 for (int i = 0; i < 2; i++) 10 { 11#pragma omp parallel for 12 for (int j = 0; j < 6; j++) 13 { 14#pragma omp critical 15 { 16 std::cout << omp_get_thread_num() << std::endl; 17 } 18 } 19 } 20 return 0; 21}
補足情報(FW/ツールのバージョンなど)
VS2017

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/07 09:28