Thrust 的算法thrust::reduce_by_key
对我的一个问题很有效。我想尝试使用 CUB 来更精细地控制内存和流以及与我自己的内核进行交互,但reduce_by_key
CUB 中似乎没有等效的算法。有,cub::DeviceSegmentedReduce
但它似乎没有输出密钥顺序,我需要事先找到每个连续密钥段的开头,这是它自己的问题。
问题是将一个键值对数组缩减为一个数组,其中所有键都是唯一的,并且每个值都有所有相同键值的缩减。
有没有一种使用 CUB 的简单方法可以做到这一点,而我没有看到?
是的,你正在寻找的算法称为
cub::DeviceReduce::ReduceByKey
。出于某种原因*它被归类为归约而不是分段归约,这肯定令人困惑。*:也许
cub::DeviceSegmentedReduce
是最近添加的,他们不想通过退出来破坏向后ReduceByKey
兼容性DeviceReduce
。