【问题标题】:Summing the elements with even or odd indices by CUDA Thrust通过 CUDA Thrust 对具有偶数或奇数索引的元素求和
【发布时间】:2014-05-02 15:27:58
【问题描述】:

如果我使用

 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]、..... 的元素求和吗?

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

我能做些什么呢?

【问题讨论】:

  • 如果您愿意的话,在推力示例中有一个准备就绪的“跨步迭代器”。
  • @talonmies 如果你能发表一个简短的回答,指出你在评论中提到的内容,我会赞成。

标签: cuda sum thrust


【解决方案1】:

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

  1. 使用thrust zip 运算符将计数迭代器与输入数据结合起来,并修改现有函子以接受(索引、数据)的元组。当索引与您的条件匹配时,您可以让函子返回数据,否则返回零。这将与扫描和缩减算法一起正常工作
  2. 使用推力置换迭代器收集要求和的数据并将其传递给标准归约算法。推力开发人员有一个示例 strided iterator,您可以使用它来解决仅处理输入迭代器中每 n 个条目的问题。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-15
    • 2018-05-09
    • 2020-10-28
    • 2021-12-18
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多