有没有人有在CUDA设备上实现哈希映射的经验?具体来说,我想知道如何在设备上分配内存并将结果复制回主机,或者是否有任何有用的库可以促进此任务。
似乎我需要先验知哈希映射的最大大小才能分配设备内存。我以前的所有CUDA努力都使用了数组和memcpys,因此非常简单。
对此问题的任何见解表示赞赏。谢谢。
答案 0 :(得分:9)
Jason Sanders和Edward Kandrot在“CUDA by example”中提供了一个GPU Hash Table实现。
幸运的是,您可以在此页面上获取有关本书的信息并免费下载示例源代码:
http://developer.nvidia.com/object/cuda-by-example.html
在此实现中,表在CPU上预先分配,并且基于原子函数atomicCAS(比较和交换)的锁定函数确保安全的多线程访问。
此外,较新的硬件生成(从2.0开始)与CUDA> = 4.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),这可以为您的实现提供服务。我还没有测试过这些功能。
答案 1 :(得分:2)
答案 2 :(得分:1)
AFAIK,“Cuda by Example”中给出的哈希表表现不太好。 目前,我相信,CUDA上最快的哈希表在Dan Alcantara's PhD dissertation中给出。请看第6章。