【问题标题】:What are the differences between ways of writing OpenMP sections?编写 OpenMP 部分的方式之间有什么区别?
【发布时间】:2018-11-09 01:47:50
【问题描述】:

使用之间有什么(如果有的话)区别:

#pragma omp parallel
    {
#pragma omp for simd
        for (int i = 0; i < 100; ++i)
        {
            c[i] = a[i] ^ b[i];
        }
    }

和:

#pragma omp parallel for simd
    for (int i = 0; i < 100; ++i)
    {
        c[i] = a[i] ^ b[i];
    }

或者编译器(ICC)在乎吗?

我知道第一个定义了一个并行部分,而不是一个要划分的 for 循环,您可以在循环之后执行多个操作。如果我错了,请纠正我,还在学习openmp的方式..

但是你什么时候会使用其中一种方式呢?

【问题讨论】:

    标签: c++ openmp icc


    【解决方案1】:

    简单地说,如果您只有 1 个要并行化的 for 循环,请使用 #pragma omp parallel for simd

    如果您想并行化多个 for 循环或在当前 for 循环之前或之后添加任何其他并行例程,请使用:

    #pragma omp parallel
    {
        // Other parallel code
    
        #pragma omp for simd
            for (int i = 0; i < 100; ++i)
            {
                c[i] = a[i] ^ b[i];
            }
    
        // Other parallel code
    }
    

    这样您在添加更多并行例程时不必重新打开并行部分,从而减少开销时间。

    【讨论】:

      猜你喜欢
      • 2012-11-27
      • 2021-09-20
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 2016-03-31
      • 2021-06-11
      • 1970-01-01
      相关资源
      最近更新 更多