c - 这将是均匀分布正态分布的最佳方法。将值放入桶中?

标签 c hash cuda gaussian bucket-sort

<分区>

这将是将值均匀分配到桶中的最佳方法。这些值是使用高斯分布生成的,因此大多数值都接近中位数。

我正在 CUDA 中实现桶排序。由于大多数值是在中值附近生成的,因此它们被插入到 4-5 个桶中。我可以制作大量的桶,并希望将值均匀分布在所有/大多数桶中,而不仅仅是 3-4 个桶。

最佳答案

您似乎在寻找 histogram .

如果您正在寻找性能,请进入 CUBThrust两个评论指出的库,否则你最终会花费大量时间并且仍然无法达到这些性能水平。

如果您决定实现直方图,我建议您从最简单的实现开始;一个两步走的方法。在第一步中,您计算​​落入每个桶中的元素数量,以便您可以创建具有正确数组大小的容器结构。第二步简单地将元素复制到相应的数组结构中。

从这里开始,您可以发展到更复杂的版本,例如使用 prefix sum计算桶在大型阵列上的初始位置。

应用程序受内存流量限制(您根本没有算术工作量),因此请尽可能改善局部性和访问模式。

当然,查看开源代码以获得一些想法。

关于c - 这将是均匀分布正态分布的最佳方法。将值放入桶中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26857308/

相关文章:

c++ - 如何使用 C++ Cuda 高效地实现并行笛卡尔积

ubuntu - 使用 Cuda 编译 OpenCV 失败

c - 需要接受用户输入并在最后全部输出

C Win32 API : Set state of check box

C++ 使用 std::bitset 组合哈希函数

c# - 是否可以创建具有给定大小和 MD5 哈希值的文件?

cuda - 监控线程 block 在执行时间内如何分配给 SM?

c - 用 C 写一个 lua_Reader 函数

c - 替换纯 C 中的链接器部分

security - 如何在 Haskell 中对字符串的 SHA256 哈希进行 Base64 UrlEncode?