C ++ Break omp parallel for

时间:2013-03-17 22:34:15

标签: parallel-processing openmp

这是我的主要猎人的一部分。我想在条件满足并且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循环实现这一点,但我无法理解。请问有人可以为我修改吗?

1 个答案:

答案 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