首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >omp并行与omp并行

omp并行与omp并行
EN

Stack Overflow用户
提问于 2009-09-19 18:52:19
回答 7查看 198.5K关注 0票数 125

这两者之间的区别是什么?

一个

代码语言:javascript
复制
#pragma omp parallel
{ 
    #pragma omp for
    for(int i = 1; i < 100; ++i)
    {
        ...
    }
}

B

代码语言:javascript
复制
#pragma omp parallel for
for(int i = 1; i < 100; ++i)
{
   ...
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-09-30 20:20:22

我不认为有什么区别,一个是另一个的捷径。尽管您的具体实现可能会以不同的方式处理它们。

组合的并行工作共享构件是指定包含一个工作共享构件而不包含其他语句的并行构件的快捷方式。允许的子句是并行和工作共享结构所允许的子句的并集。

摘自http://www.openmp.org/mp-documents/OpenMP3.0-SummarySpec.pdf

OpenMP的规格如下:

https://openmp.org/specifications/

票数 76
EN

Stack Overflow用户

发布于 2011-09-26 11:08:48

它们是等效的。

#pragma omp parallel产生一组线程,而#pragma omp for在产生的线程之间划分循环迭代。您可以使用fused #pragma omp parallel for指令同时完成这两项工作。

票数 86
EN

Stack Overflow用户

发布于 2013-08-25 03:01:56

下面是使用分离的parallelfor here的示例。简而言之,它可以用于在多个线程中执行OpenMP周期之前动态分配for线程私有数组。在parallel for的情况下,不可能进行同样的初始化。

更新:在问题示例中,单个编译指示和两个编译指示没有区别。但在实践中,您可以使用单独的并行和for指令来实现更多的线程感知行为。一些代码,例如:

代码语言:javascript
复制
#pragma omp parallel
{ 
    double *data = (double*)malloc(...); // this data is thread private

    #pragma omp for
    for(1...100) // first parallelized cycle
    {
    }

    #pragma omp single 
    {} // make some single thread processing

    #pragma omp for // second parallelized cycle
    for(1...100)
    {
    }

    #pragma omp single 
    {} // make some single thread processing again

    free(data); // free thread private data
}
票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1448318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档