pragma omp parallel for vs. pragma omp parallel [英] pragma omp parallel for vs. pragma omp parallel
问题描述
在带有openMP的C ++中,两者之间有什么区别
In C++ with openMP, is there any difference between
#pragma omp parallel for
for(int i=0; i<N; i++) {
...
}
和
#pragma omp parallel
for(int i=0; i<N; i++) {
...
}
?
谢谢!
推荐答案
#pragma omp parallel
for(int i=0; i<N; i++) {
...
}
此代码创建一个并行区域,每个单独的线程执行循环中的内容.换句话说,您完成N次完整循环,而不是N个线程将循环拆分并仅完成一次迭代.
This code creates a parallel region, and each individual thread executes what is in your loop. In other words, you do the complete loop N times, instead of N threads splitting up the loop and completing all iterations just once.
您可以这样做:
#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个以上的线程来进行循环.
This will create one parallel region (aka one fork/join, which is expensive and therefore you don't want to do it for every loop) and run multiple loops in parallel within that region. Just make sure if you already have a parallel region you use #pragma omp for
as opposed to #pragma omp parrallel for
as the latter will mean that each of your N threads spawns N more threads to do the loop.
这篇关于pragma omp parallel for vs. pragma omp parallel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!