在 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(使用前将#替换为@)