使用lambda表达式并行约简

Parallel reduce using lambda expressions

本文关键字:并行 表达式 lambda 使用      更新时间:2023-10-16

我目前正在研究一个函数,该函数接受数组,大小,低和高作为参数

parllelCount(int *src, int size, int low, int high)

函数返回源数组中落在low和high范围内的值的个数。

我有以下函数,使用lambda表达式使用并行减少,但我无法弄清楚paralle_reduce中的组合参数应该如何实现(在代码片段中注释)

int parallelCount(int *src, int size, int low, int high)
{
    int counter = parallel_reduce(blocked_range<int>(0, size),
                                  int(0),
                                  [&](blocked_range<int> r, int counter)->int{
                                      for(int i = r.begin(); i < r.end(); i++){
                                          if(low <= src[i] && src[i] <= high){
                                              counter++;
                                          }
                                      }
                                      return counter;
                                  },
                                  //[](){}
    );
    return counter;
}

combine应该只是将工作人员计算的结果加起来,所以沿着

一行的东西
[](int a, int b) { return a + b; }

应该