我必须使用许多不同的键进行键控缩减,这些键只能偶尔重复一次:
keys = {1,2,3,3,4,5,6,7,7, 8, 9, 9,10,11,...}
array = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,...}
// after reduction
result = {1,2,7,5,6,7,17,10,23,13,14}
使用thrust::reduce_by_key
(或任何其他分段缩减方法)并不是最快的选择,因为大多数操作实际上只是从一个数组复制到另一个数组。
对这个问题有什么更好的解决方法?
答案 0 :(得分:3)
实际上,reduce_by_key
是在此使用的合适算法。只是Thrust当前的实现并不像它可能的那么快。详细说明,没有什么可以阻止reduce_by_key
以memcpy速度执行,我相信other implementations已经达到了这个速度。我们针对Thrust v1.7的暂定计划包括使用相关back40computing项目中的代码对reduce_by_key
和其他基于扫描的算法进行性能改进。
请注意,当段(1)长或(2)长度均匀时,可能比reduce_by_key
做得更好。例如,在某些时候,使用基于偏移的段描述符比使用键或头标志更经济。但是,当段很短(如您的情况)或长度变化很大时,最佳reduce_by_key
实现确实是该工作的最佳工具。