代码之家  ›  专栏  ›  技术社区  ›  user2002000

C++中断omp并行

  •  1
  • user2002000  · 技术社区  · 13 年前

    这是我的主要猎人的一部分。在条件满足并且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*}
    }
    

    我试图通过循环来实现这一点,但我没能实现。有人能帮我修改一下吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Community Mohan Dere    8 年前

    我认为唯一的方法是添加一个故障变量,但它不会给您带来任何性能提升;

    #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 ing),请参见此答案: https://stackoverflow.com/a/9813239/1180785