Boost::compute向量部分和最快的方法是什么
What is the fastest way of Boost::compute vector partial sum
我有一个 10M 浮点数的矢量。
我想知道每 100 个元素的总和,所以总共 10000 个总和。
最快的方法是什么?
我建议使用 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
);
我有一个 10M 浮点数的矢量。 我想知道每 100 个元素的总和,所以总共 10000 个总和。 最快的方法是什么?
我建议使用 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
);