parallel_reduce
提供2个接口,lambdas的接口可以像上一个链接中显示的那样使用
#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
放在里面,没什么发生),看起来就像没有任何理由一样。
这个Reduction
的目的是什么?
与0f
有关系吗?我得到的是0f
是一个用于检测可以跳过的值的谓词,但我仍然无法弄清楚lambda的作用......
答案 0 :(得分:5)
第一个lambda计算范围内的表达式,给出该范围的结果。
第二个lambda结合了两个范围计算的结果,给出了两个范围组合的结果。
如果parallel_reduce
将操作分解为多个范围,则只会调用第二个lambda。