sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-02 05:44:57 25 4
mua khóa gpt4 Nike

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

#pragma omp parallel sections 
{

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

}

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

1 Câu trả lời

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

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

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

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

25 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com