是否可以选择性地启用带有模板参数或运行时变量的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:
#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";
}
}
}
错误消息(G ++ 6,使用g ++ TEST.CPP -fopenmp编译)
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子句一起工作,我会尝试查找。谢谢。 –
它确实。 https://msdn.microsoft.com/en-us/library/5187hzke.aspx希望对所有编译器都是如此。 –