sách gpt4 ai đã đi

openmp - 使用 OpenMP 进行缩减

In lại 作者:行者123 更新时间:2023-12-03 23:23:26 28 4
mua khóa gpt4 Nike

我正在尝试使用 openmp 计算二维矩阵的平均值。这个二维矩阵实际上是一个图像。

我正在对数据进行线程分割。例如,如果我有 N线程比我处理行/N thread0 的行数, 等等。

我的问题是:我可以使用带有“#pragma omp parallel”的 openmp 缩减子句吗?

#pragma omp parallel reduction( + : sum )
{
if( thread == 0 )
bla bla code
sum = sum + val;

else if( thread == 1 )
bla bla code
sum = sum + val;
}

1 Câu trả lời

是的,您可以 - 减少条款适用于整个平行区域以及单个 工作共享结构。这允许例如减少在不同并行部分中完成的计算(重构代码的首选方式):

#pragma omp parallel sections private(val) reduction(+:sum)
{
#pragma omp section
{
bla bla code
sum += val;
}
#pragma omp section
{
bla bla code
sum += val;
}
}

您还可以使用 OpenMP 工作共享构造自动在团队中的线程之间分配循环迭代,而不是使用部分重新实现它:

#pragma omp parallel for private(val) reduction(+:sum)
for (row = 0; row < Rows; row++)
{
bla bla code
sum += val;
}

请注意,归约变量是私有(private)的,它们的中间值(即它们在 song song 区域末尾归约之前持有的值)只是部分的,不是很有用。例如,下面的串行循环不能(很容易?)通过归约操作转换为并行循环:

for (row = 0; row < Rows; row++)
{
bla bla code
sum += val;
if (sum > threshold)
yada yada code
}

这里 yada yada code应在每次迭代中执行一次 tổng hợp 的累积值已通过 threshold 的值.当循环并行运行时, tổng hợp 的私有(private)值可能永远达不到 threshold ,即使他们的总和确实如此。

关于openmp - 使用 OpenMP 进行缩减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13290245/

28 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