use*_*710 0 c++ lambda multithreading tbb c++11
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;
}
);
}
Run Code Online (Sandbox Code Playgroud)
第二个lambda符合const Reduction& reduction签名,我正在研究这个lambda试图改变身体或价值观,但它确实没有做任何事情(即使我把一个cout内部,没有任何事情发生),看起来它完全没有任何理由.
这是什么目的Reduction?与此有关0f?我得到的0f是一个用于检测可以跳过的值的谓词,但我仍然无法弄清楚lambda的作用...
第一个lambda计算范围内的表达式,给出该范围的结果.
第二个lambda组合了两个范围计算的结果,给出了两个范围组合的结果.
只有在parallel_reduce将操作分解为多个范围时,才会调用第二个lambda .
| 归档时间: |
|
| 查看次数: |
1722 次 |
| 最近记录: |