parallel_reduce
提供 2 个接口(interface),一个用于 lambda 可以像上一个链接中显示的那样使用
#include "tbb/parallel_reduce.h"
#include "tbb/blocked_range.h"
using namespace tbb;
float ParallelSum( float array[], size_t n ) {
return parallel_reduce(
blocked_range<float*>( array, array+n ),
0.f,
[](const blocked_range<float*>& r, float init)->float {
for( float* a=r.begin(); a!=r.end(); ++a )
init += *a;
return init;
},
[]( float x, float y )->float { // what this lambda does ?
return x+y;
}
);
}
第二个 lambda 符合 const Reduction& reduction
签名,我正在研究这个 lambda 试图改变主体或值,但它什么也没做(即使我放了一个 cout
inside, nothing happens ), 看起来它毫无理由地在那里。
此Reduction
的目的是什么?
与 0f
有关系吗?据我所知,0f
是一个谓词,用于检测哪些值可以跳过,但我仍然无法弄清楚 lambda 的作用...
最佳答案
第一个 lambda 计算范围内的表达式,给出该范围的结果。
第二个 lambda 结合了两个范围计算的结果,给出了两个范围组合的结果。
仅当 parallel_reduce
将操作分解为多个范围时,才会调用第二个 lambda。
关于c++ - tbb 中 parallel_reduce 的 Reduce 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20591561/