Boost :: compute向量部分和的最快方法是什么?

时间:2017-12-01 02:24:03

标签: boost opencl boost-compute

我有一个10M浮动的向量。 我想知道每100个元素的总和,总共10000个。 最快的方法是什么?

1 个答案:

答案 0 :(得分:1)

我建议使用reduce_by_key算法,花式迭代器和Boost.Compute lambda expr。每100个元素都标有相同的键并减少。我不确定您是否可以使用keys_output替换discard_iterator以节省一些性能。

boost::compute::vector<int> keys_output(values_input.size()/100, context);
boost::compute::vector<int> values_output(values_input.size()/100, context);

boost::compute::reduce_by_key(
    boost::compute::make_transform_iterator(
      boost::compute::make_counting_iterator<int>(0),
      boost::compute::_1 / 100
    ),
    boost::compute::make_transform_iterator(
      boost::compute::make_counting_iterator<int>(values_input.size()),
      boost::compute::_1 / 100
    ),
    values_input.begin(),
    keys_output.begin(), 
    values_output.begin(),
    queue
 );