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

标签 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] ,……?

我想过更改条件运算符,但它适用于数组中的元素,而无需任何索引引用。

我能为此做什么?

最佳答案

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

  • 使用推力 zip 运算符将计数迭代器与输入数据结合起来,并修改现有的仿函数以接受 (index, data) 的元组。当索引符合您的条件时,您可以让仿函数返回数据,否则为零。这将适用于扫描和减少算法
  • 使用推力置换迭代器来收集要求和的数据并将其传递给标准的归约算法。推力开发者有一个例子 strided iterator您可以使用它来解决仅处理输入迭代器中的每第 n 个条目的问题。

  • 可能值得同时实现并对其进行基准测试以查看哪种方法更快。

    关于cuda - 通过 CUDA Thrust 对具有偶数或奇数索引的元素求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23379697/

    相关文章:

    sorting - Thrust::sort_by_key:如何将结果存储在单独的数组中?

    c++ - 错误 : expected an identifier while compiling a program of cusp which is opensource library of CUDA

    jQuery 求和数组

    c++ - 如何将附加数组传递给 Thrust 的 min_element 谓词

    cuda - cufftSetStream 导致垃圾输出。难道我做错了什么?

    c++ - Cuda 如何从全局函数运行多个线程?一个运行多个线程的内核

    MYSQL求和错误

    ruby-on-rails - Rails 5.1.4 中空数组的 sum 函数

    c++ - CUB 选择是否有返回的索引

    cuda - thrust::device_reference 不能和 printf 一起使用?