这是将值均匀分配到存储桶的最佳方法。这些值是使用高斯分布生成的,因此大多数值都接近中位数。
我正在CUDA中实现桶排序。由于大多数值是在中位数附近生成的,因此它们被插入4-5个桶中。我可以制作大量的桶,并希望在所有/大多数桶中均匀分配值,而不是仅仅3-4个桶。
答案 0 :(得分:2)
您似乎正在寻找histogram。
如果您正在寻找效果,请按照两条评论指出的方式进入CUB或Thrust图书馆,否则您最终会花费大量时间而仍未达到表现水平。
如果您决定实施直方图,我建议您从最简单的实施开始;两步法。在第一步中,您将计算落入每个存储桶的元素数,因此您可以使用正确的数组大小创建容器结构。第二步只是将元素复制到结构的相应数组中。
从这里开始,您可以演变为更复杂的版本,例如使用prefix sum来计算大型阵列上的存储桶的初始位置。
应用程序受内存流量限制(你根本没有算术工作负载),所以尽可能多地改进局部性和访问模式。
当然,请查看开源代码以获得一些想法。