【问题标题】:CUDA - Implementing Device Hash Map?CUDA - 实现设备哈希映射?
【发布时间】:2022-04-16 22:29:02
【问题描述】:

有没有人有在 CUDA 设备上实现哈希映射的经验?具体来说,我想知道如何在设备上分配内存并将结果复制回主机,或者是否有任何有用的库可以促进这项任务。

似乎我需要先验知道哈希映射的最大大小才能分配设备内存。我之前的所有 CUDA 尝试都使用了数组和 memcpys,因此相当简单。

感谢您对此问题的任何见解。谢谢。

【问题讨论】:

    标签: cuda parallel-processing hashmap


    【解决方案1】:

    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) 上直接使用新/删除运算符,这可以为您的实现服务。我还没有测试过这些功能。

    【讨论】:

      【解决方案2】:

      我记得有人在thrust 之上开发了一个简单的哈希映射实现。它有一些代码here,尽管我不知道它是否适用于当前的推力释放。它至少可以给你一些想法。

      【讨论】:

      【解决方案3】:

      顺便说一句,warpcore 是一个框架,用于在 CUDA 加速器上创建高吞吐量、专门构建的散列数据结构。在现代 CUDA 加速器上以光速散列。你可以在这里找到它:

      https://github.com/sleeepyjack/warpcore

      【讨论】:

        【解决方案4】:

        AFAIK,“Cuda by Example”中给出的哈希表表现不佳。 目前,我相信,CUDA 上最快的哈希表在Dan Alcantara's PhD dissertation 中给出。请看第 6 章。

        【讨论】:

        • 很遗憾,您的链接无效。
        【解决方案5】:

        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

        【讨论】:

          猜你喜欢
          • 2021-07-22
          • 2023-01-18
          • 1970-01-01
          • 1970-01-01
          • 2017-10-04
          • 2012-02-11
          • 2013-11-22
          • 2013-08-05
          • 2016-01-25
          相关资源
          最近更新 更多