通过CUDA Thrust对具有偶数或奇数索引的元素求和

时间:2014-04-30 04:27:17

标签: cuda sum thrust

如果我使用

 float sum = thrust::transform_reduce(d_a.begin(), d_a.end(), conditional_operator(), 0.f, thrust::plus<float>());

我得到满足conditional_operator()提供的条件的所有元素的总和,如Conditional reduction in CUDA

但是,我可以只对元素d_a[0]d_a[2]d_a[4]d_a[6],.....?

进行总结

我想过更改条件运算符,但它可以处理数组中的元素,而不会引用索引。

我能为此做些什么?

1 个答案:

答案 0 :(得分:5)

我可以想到两种方法来解决这类问题:

  1. 使用推力zip运算符将计数迭代器与输入数据组合,并修改现有的仿函数以接受(索引,数据)元组。当索引符合您的条件时,您可以让仿函数返回数据,否则返回零。这将适用于扫描和缩小算法
  2. 使用推力置换迭代器收集要求和的数据并将其传递给标准reduce算法。推力开发人员有一个示例strided iterator,您可以使用它来解决仅处理输入迭代器中每个第n个条目的问题。
  3. 可能值得同时实施并对它们进行基准测试,以确定哪种方法更快。