pragma ompparallel for 与 pragma ompparallel

2023-11-23

在 C++ 和 openMP 中,有什么区别

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

and

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

?

Thanks!


#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 个以上的线程来执行循环。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pragma ompparallel for 与 pragma ompparallel 的相关文章

随机推荐