【发布时间】:2013-12-15 05:38:46
【问题描述】:
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 做了什么......
【问题讨论】:
标签: c++ multithreading c++11 lambda tbb