使用迭代器进行 CUB 排序

CUB sort with iterator

我想一次性转换值并对它们进行排序,如下所示:

thrust::vector<int> dataIn  = ...
thrust::vector<int> dataOut = ...
auto iterIn = cub::TransformInputIterator<int, Ftor, int*>(dataIn.begin(), Ftor());
cub::DeviceRadixSort::SortKeys(dTemp, tempBytes, iterIn, dataOut.begin(), numElems);

但是,SortKeys 需要原始指针而不是迭代器。 尽管如此,是否有可能使用迭代器来完成这项工作? 我知道推力可以做到这一点,但我想使用 CUB。

感谢您的建议。

抱歉让您失望了,但 AFAIK CUB 不支持此功能。从理论上讲,它可以进行更深入的模板化,但事实并非如此。

您可以从 cub 中提取代码,或使用额外的模板参数修改代码。这会让人头疼,但如果您只想通过设备端函数进行某种转换来传递输入值,那么这是可行的。