<分区>
这将是将值均匀分配到桶中的最佳方法。这些值是使用高斯分布生成的,因此大多数值都接近中位数。
我正在 CUDA 中实现桶排序。由于大多数值是在中值附近生成的,因此它们被插入到 4-5 个桶中。我可以制作大量的桶,并希望将值均匀分布在所有/大多数桶中,而不仅仅是 3-4 个桶。
标签 c hash cuda gaussian bucket-sort
<分区>
这将是将值均匀分配到桶中的最佳方法。这些值是使用高斯分布生成的,因此大多数值都接近中位数。
我正在 CUDA 中实现桶排序。由于大多数值是在中值附近生成的,因此它们被插入到 4-5 个桶中。我可以制作大量的桶,并希望将值均匀分布在所有/大多数桶中,而不仅仅是 3-4 个桶。
最佳答案
您似乎在寻找 histogram .
如果您正在寻找性能,请进入 CUB或 Thrust两个评论指出的库,否则你最终会花费大量时间并且仍然无法达到这些性能水平。
如果您决定实现直方图,我建议您从最简单的实现开始;一个两步走的方法。在第一步中,您计算落入每个桶中的元素数量,以便您可以创建具有正确数组大小的容器结构。第二步简单地将元素复制到相应的数组结构中。
从这里开始,您可以发展到更复杂的版本,例如使用 prefix sum计算桶在大型阵列上的初始位置。
应用程序受内存流量限制(您根本没有算术工作量),因此请尽可能改善局部性和访问模式。
当然,查看开源代码以获得一些想法。
关于c - 这将是均匀分布正态分布的最佳方法。将值放入桶中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26857308/