C++ 编写OpenMP节的方法之间有什么区别?

C++ 编写OpenMP节的方法之间有什么区别?,c++,openmp,icc,C++,Openmp,Icc,使用以下各项之间有什么区别(如果有): #pragma omp parallel { #pragma omp for simd for (int i = 0; i < 100; ++i) { c[i] = a[i] ^ b[i]; } } #pragma omp并行 { #用于simd的pragma omp 对于(int i=0;i

使用以下各项之间有什么区别(如果有):

#pragma omp parallel
    {
#pragma omp for simd
        for (int i = 0; i < 100; ++i)
        {
            c[i] = a[i] ^ b[i];
        }
    }
#pragma omp并行
{
#用于simd的pragma omp
对于(int i=0;i<100;++i)
{
c[i]=a[i]^b[i];
}
}
以及:

用于simd的pragma omp并行 对于(int i=0;i<100;++i) { c[i]=a[i]^b[i]; } 或者编译器(ICC)关心吗

我知道第一个定义了一个平行的部分,而不是一个for循环被划分,你可以在循环之后进行多个操作。如果我错了,请纠正我,我还在学习openmp的方法


但是什么时候使用一种方法或另一种方法?

简单地说,如果只有一个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
}
#pragma omp并行
{
//其他并行代码
#用于simd的pragma omp
对于(int i=0;i<100;++i)
{
c[i]=a[i]^b[i];
}
//其他并行代码
}
这样,在添加更多并行例程时,就不必重新打开并行部分,从而减少开销时间

#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
}