在使用openMP的C ++中,
之间有什么区别#pragma omp parallel for
for(int i=0; i<N; i++) {
...
}
和
#pragma omp parallel
for(int i=0; i<N; i++) {
...
}
谢谢!
答案 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个更多的线程来进行循环。