这是我的主要猎人的一部分。我想在条件满足并且b设置为false之后尽快打破omp并行:
#pragma omp parallel for
for( long l = 1; l <= n; l++ ) {
if (m % p[l] == 0) {
b = false;
*// Break omp parallel for*}
}
我试图通过do循环实现这一点,但我无法理解。请问有人可以为我修改吗?
答案 0 :(得分:1)
我认为唯一的方法是添加一个失败变量,但它不会给你任何性能提升;
#pragma omp parallel for
for( long l = 1; l <= n; l++ ) {
if (b) {
if (m % p[l] == 0) {
b = false;
}
}
}
最好将循环拆分成段,如果它确实会那么长;
#pragma omp parallel for
for( long l = 1; l < n / 2; l++ ) {
if (m % p[l] == 0) {
b = false;
}
}
if (b) {
#pragma omp parallel for
for( long l = n / 2; l <= n; l++ ) {
if (m % p[l] == 0) {
b = false;
}
}
}
简单地将其拆分为您认为最好的数量。
对于使用手动线程的更复杂的答案(但允许break
),请参阅以下答案:https://stackoverflow.com/a/9813239/1180785