c ++ PPL并行工作-归约类“可组合”中的函数max()
Posted
技术标签:
【中文标题】c ++ PPL并行工作-归约类“可组合”中的函数max()【英文标题】:c++ PPL parallel work - function max() in reduction class 'combinable' 【发布时间】:2012-04-28 15:40:19 【问题描述】:我正在使用并行模式库。类combinable 在openMP 中起到归约子句的作用,可以合并并行计算的结果。
.combine(max()) 是否存在(顺便说一句,您能否指向一些允许使用 combine 操作的 ref,没有找到)?
感谢和问候。
【问题讨论】:
【参考方案1】:是的,您可以将std::max
传递给combineable::combine
,在将模板函数作为谓词传递时必须考虑的一件事是您必须显式命名类型:
combineable<T> max;
// .. do processing
max.combine(std::max<T>);
您可以找到有关 combine
(以及所有其他 PPL 内容)here 的所有官方 MSDN 文档。
【讨论】:
但是,我不明白为什么这里的语法是max.combine(std::max<T>);
(它正在编译),而不是 max.combine(std::max<T>());
,而在文档中加号的语法是 .combine(plus<double>())
(它正在编译)?
@dlib std::max<T>
是一个函数谓词,因此您只需命名函数,不需要大括号。 std::plus<double>
是一个重载了operator()
的类,当你说std::plus<double>()
时,你正在做的是创建一个该类型的临时类,其operator()
被combine 使用。以上是关于c ++ PPL并行工作-归约类“可组合”中的函数max()的主要内容,如果未能解决你的问题,请参考以下文章