pragma omp parallel for vs. pragma omp parallel [英] pragma omp parallel for vs. pragma omp parallel

查看:1384
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆