gpt4 book ai didi

openmp - 为什么 OpenMP 不能在 for 循环内有部分?

转载 作者:行者123 更新时间:2023-12-02 05:44:57 24 4
gpt4 key购买 nike

我正在尝试通过将循环的每次迭代作为 OpenMP 部分来并行化 OpenMP 中基于范围的 for 循环。我想这样做:

#pragma omp parallel sections 
{

for ( auto x : range ) {
#pragma omp section
// LOTS OF CODE HERE
}

}

但是,这不起作用 - 编译器提示该节必须位于 #pragma ompsections 构造内。我是否做错了什么,或者 OpenMP 不够聪明,无法理解此部分位于 for 循环内?

最佳答案

OpenMP 部分用于可以并行执行的一些不相关的代码位。这个想法是,在你的算法中,有一些不同的部分不是 super 组织的,但可以按任何顺序甚至并行执行。这是一种非常特殊的并行化方式,您不希望在代码中看到太多这种方式。

无论如何,您的代码不符合标准,因为 sections 构造中的所有 block 都必须包含在 section block 内(但第一个 block 是可选的,因为它隐式包含在第一个 block 中)。在这里,如果您在 for 循环之前添加这个隐式 #pragma omp 部分,您会发现代码的意义有多大:循环位于部分和主体进入另一个...

这里,由于您有一个 for 循环,因此它可以很好地构造您的代码,并且应该允许您使用 omp parallel for 指令。您只需要重写一点 for 即可更好地明确循环边界。

关于openmp - 为什么 OpenMP 不能在 for 循环内有部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47916304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com