gpt4 book ai didi

c++ - C++ 中复杂变量的 OpenMP 减少的优雅(和典型)解决方法?

转载 作者:IT老高 更新时间:2023-10-28 22:21:25 25 4
gpt4 key购买 nike

我意识到缩减仅适用于 C++ 中的 POD 类型。您将如何实现复杂类型累加器的归约?

complex<double> x(0.0,0.0), y(1.0,1.0);
#pragma omp parallel for reduction(+:x)
for(int i=0; i<5; i++)
{
x += y;
}

(注意我可能遗漏了一些语法)。似乎一个明显的解决方案是将实部和虚部分成临时 double ,然后在这些上累加。我想我正在寻找优雅,这似乎......不太漂亮。这会是这里的典型方法吗?

最佳答案

在 OpenMP 中没有用户定义的缩减的典型解决方法比您建议的更难看。通常,在并行区域之前,人们创建一个(至少)与该区域中的线程一样多的元素的数组,使用 omp_get_thread_num() 作为索引为每个线程分别累积部分结果数组,并在并行区域之后的循环中对累积结果进行最终归约。

据我所知,OpenMP 语言委员会致力于在规范中添加用户定义的缩减,所以可能会在几年后最终解决。

关于c++ - C++ 中复杂变量的 OpenMP 减少的优雅(和典型)解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7163562/

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