pragma omp并行与pragma omp并行

时间:2016-06-28 15:49:09

标签: c++ openmp

在使用openMP的C ++中,

之间有什么区别
#pragma omp parallel for
for(int i=0; i<N; i++) {
   ...
}

#pragma omp parallel
for(int i=0; i<N; i++) {
   ...
}

谢谢!

1 个答案:

答案 0 :(得分:5)

#pragma omp parallel
for(int i=0; i<N; i++) {
   ...
}

此代码创建一个并行区域,每个单独的线程执行循环中的内容。换句话说,你完成循环N次,而不是N个线程分割循环并完成所有迭代一次。

你可以这样做:

#pragma omp parallel
{
    #pragma omp for
    for( int i=0; i < N; ++i )
    {
    }

    #pragma omp for
    for( int i=0; i < N; ++i )
    {
    }
}

这将创建一个并行区域(也就是一个fork / join,这是昂贵的,因此您不希望为每个循环执行此操作)并在该区域内并行运行多个循环。只要确保你已经有一个并行区域使用#pragma omp for而不是#pragma omp parrallel for,因为后者将意味着你的每个N个线程产生N个更多的线程来进行循环。