テンプレートパラメータまたは実行時変数を使用してopenmpディレクティブを選択的に有効にすることはできますか?並列領域内でOpenMP forループを選択的に有効にする
this (all threads work on the same for loop).
#pragma omp parallel
{
#pragma omp for
for (int i = 0; i < 10; ++i) { /*...*/ }
}
versus this (each thread works on its own for loop)
#pragma omp parallel
{
for (int i = 0; i < 10; ++i) { /*...*/ }
}
更新(テスト句場合)
TEST.CPP:(G ++ TEST.CPP -fopenmpでコンパイルG ++ 6)
#include <iostream>
#include <omp.h>
int main() {
bool var = true;
#pragma omp parallel
{
#pragma omp for if (var)
for (int i = 0; i < 4; ++i) {
std::cout << omp_get_thread_num() << "\n";
}
}
}
エラーメッセージ
test.cpp: In function ‘int main()’:
test.cpp:8:25: error: ‘if’ is not valid for ‘#pragma omp for’
#pragma omp for if (var)
^~
'#pragma omp parallel if(variable)' –
どちらのバージョンも並列ですが、ほとんどの場合、 '#pragma omp for line'を選択的に有効にします。 if節がfor節で動作できるかどうか調べるつもりです。ありがとう。 –
です。うまくいけば、これはすべてのコンパイラに当てはまります。 –