C++ Break omp parallel for

C++ Break omp parallel for

本文关键字:for parallel omp Break C++      更新时间:2023-10-16

这是我的主要猎人的一部分。我想在满足条件并将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循环来实现这一点,但我无法弄清楚。有人能帮我修改一下吗?

我认为唯一的方法是添加一个失败变量,但它不会给你任何性能提升;

#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