pragma omp并行与pragma omp并行

Fra*_*uiz 9 c++ openmp

在使用openMP的C++中,是否有任何区别

#pragma omp parallel for
for(int i=0; i<N; i++) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

#pragma omp parallel
for(int i=0; i<N; i++) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Rya*_*anP 6

#pragma omp parallel
for(int i=0; i<N; i++) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

此代码创建一个并行区域,每个单独的线程执行循环中的内容.换句话说,你完成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 )
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

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