有没有人有在CUDA设备上实现哈希映射的经验?具体来说,我想知道如何在设备上分配内存并将结果复制回主机,或者是否有任何有用的库可以促进此任务 .
好像我需要先了解哈希映射的最大大小才能分配设备内存 . 我以前的所有CUDA努力都使用了数组和memcpys,因此非常简单 .
任何洞察这个问题的人都表示赞赏 . 谢谢 .
Jason Sanders和Edward Kandrot在“CUDA by example”中提供了一个GPU Hash Table实现 .
幸运的是,您可以在此页面上获得有关本书和 download the examples source code freely 的信息: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),这可以为您的实现提供服务 . 我还没有测试过这些功能 .
AFAIK,"Cuda by Example"中给出的哈希表表现不佳 . 目前,我相信,CUDA上最快的哈希表在_394049中给出 . 看第6章 .
我记得有人在thrust之上开发了一个简单的哈希映射实现 . 它有一些代码here,虽然它是否适用于当前的推力释放是我不知道的 . 它至少可以给你一些想法 .
3 回答
Jason Sanders和Edward Kandrot在“CUDA by example”中提供了一个GPU Hash Table实现 .
幸运的是,您可以在此页面上获得有关本书和 download the examples source code freely 的信息:
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),这可以为您的实现提供服务 . 我还没有测试过这些功能 .
AFAIK,"Cuda by Example"中给出的哈希表表现不佳 . 目前,我相信,CUDA上最快的哈希表在_394049中给出 . 看第6章 .
我记得有人在thrust之上开发了一个简单的哈希映射实现 . 它有一些代码here,虽然它是否适用于当前的推力释放是我不知道的 . 它至少可以给你一些想法 .