【发布时间】:2022-04-16 22:29:02
【问题描述】:
有没有人有在 CUDA 设备上实现哈希映射的经验?具体来说,我想知道如何在设备上分配内存并将结果复制回主机,或者是否有任何有用的库可以促进这项任务。
似乎我需要先验知道哈希映射的最大大小才能分配设备内存。我之前的所有 CUDA 尝试都使用了数组和 memcpys,因此相当简单。
感谢您对此问题的任何见解。谢谢。
【问题讨论】:
标签: cuda parallel-processing hashmap
有没有人有在 CUDA 设备上实现哈希映射的经验?具体来说,我想知道如何在设备上分配内存并将结果复制回主机,或者是否有任何有用的库可以促进这项任务。
似乎我需要先验知道哈希映射的最大大小才能分配设备内存。我之前的所有 CUDA 尝试都使用了数组和 memcpys,因此相当简单。
感谢您对此问题的任何见解。谢谢。
【问题讨论】:
标签: cuda parallel-processing hashmap
Jason Sanders 和 Edward Kandrot 在“CUDA 示例”中介绍了一个 GPU 哈希表实现。
幸运的是,您可以在此页面上获取本书的信息并免费下载示例源代码:
http://developer.nvidia.com/object/cuda-by-example.html
在这个实现中,表在 CPU 上预先分配,安全的多线程访问由基于原子函数 atomicCAS(比较和交换)的锁定函数确保。
此外,与 CUDA >= 4.0 相结合的新一代硬件(从 2.0 开始)应该能够在 GPU (http://developer.nvidia.com/object/cuda_4_0_RC_downloads.html?utm_source=http://forums.nvidia.com&utm_medium=http://forums.nvidia.com&utm_term=Developers&utm_content=Developers&utm_campaign=CUDA4) 上直接使用新/删除运算符,这可以为您的实现服务。我还没有测试过这些功能。
【讨论】:
【讨论】:
顺便说一句,warpcore 是一个框架,用于在 CUDA 加速器上创建高吞吐量、专门构建的散列数据结构。在现代 CUDA 加速器上以光速散列。你可以在这里找到它:
【讨论】:
AFAIK,“Cuda by Example”中给出的哈希表表现不佳。 目前,我相信,CUDA 上最快的哈希表在Dan Alcantara's PhD dissertation 中给出。请看第 6 章。
【讨论】:
cuCollections 是一个相对较新的开源库,由 NVIDIA 工程师发起,旨在在 GPU 上实现高效容器。
cuCollections (cuco) 是一个开源的、仅包含标头的 GPU 加速并发数据结构库。
与 Thrust 和 CUB 如何提供类似 STL 的 GPU 加速算法和原语类似,cuCollections 提供类似 STL 的并发数据结构。 cuCollections 不是像 std::unordered_map 这样的 STL 数据结构的一对一的直接替代品。相反,它提供了为高效使用 GPU 而量身定制的功能相似的数据结构。
cuCollections 仍在大力开发中。用户应该期望重大更改和重构很常见。
目前它提供了一个固定大小的哈希表cuco::static_map 和一个可以增长的cuco::dynamic_map。
【讨论】: