3

我必须使用许多不同的键对数组进行键控减少,这些键只在一段时间内重复一次:

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(或任何其他分段缩减方法)在这里并不是最快的选择,因为大多数操作实际上只是从一个数组复制到另一个数组。

解决这个问题的更好方法是什么?

4

1 回答 1

3

实际上,reduce_by_key 在这里使用的适当算法。只是目前在 Thrust 中的实现并没有它可能的那么快。详细地说,没有什么可以阻止reduce_by_key以 memcpy 速度执行,我相信其他实现已经达到了这个速度。我们对 Thrust v1.7 的初步计划包括reduce_by_key使用相关back40computing项目中的代码对其他基于扫描的算法进行性能改进。

请注意,当段为 (1) 长或 (2) 长度一致时,可能会比reduce_by_key. 例如,在某些时候,使用基于偏移量的段描述符比使用键或头标志更经济。但是,当段很短(如您的情况)或长度变化很大时,最佳reduce_by_key实施确实是这项工作的最佳工具。

于 2012-02-23T19:55:52.190 回答