0
parallel_reduce
提供2個接口,可以使用一個用於Lambda表達式像顯示,在上一個鏈接什麼是tbb中的parallel_reduce的減少?
#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;
}
);
}
第二拉姆達在const Reduction& reduction
簽名適合,我學習這個拉姆達試圖改變身體或值,但它沒有任何作用(即使我把cout
放在裏面,也沒有任何反應),看起來好像沒有任何理由。
這個Reduction
的目的是什麼? 跟0f
有什麼關係?對於我得到的那個0f
是一個謂詞,用於檢測可以跳過的值是什麼,但我仍然無法弄清楚lambda是什麼...
這件事在其他條款的頁面上解釋,或者我是盲人,我無法在頁面上看到? – user2485710
它全部壓縮成這句話:「函數形式parallel_reduce(範圍,標識,函數,簡化)通過將func應用於範圍中的子範圍並使用二元運算符簡化來減少結果,從而執行並行簡化。」 –
那麼,以及剛纔的表格,它表示Func「累積結果的子範圍,從初始值x開始」和減少「結合結果x和y」。 –