CUDA - 实现设备哈希映射?

时间:2011-04-03 22:57:38

标签: cuda parallel-processing hashmap

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

似乎我需要先验知哈希映射的最大大小才能分配设备内存。我以前的所有CUDA努力都使用了数组和memcpys,因此非常简单。

对此问题的任何见解表示赞赏。谢谢。

3 个答案:

答案 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)

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

答案 2 :(得分:1)

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