Какой самый быстрый способ Boost::compute vector частичная сумма

У меня вектор 10М поплавок. Я хочу знать сумму на каждые 100 элементов, итого 10000 сумм. Какой самый быстрый способ сделать это?

1 ответ

Решение

Я бы порекомендовал использовать reduce_by_key алгоритм, причудливые итераторы и Boost.Compute лямбда-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
 );
Другие вопросы по тегам