关于在cuda中使用哈希表的一些经验总结
cuda中哈希方法
目前已知的在cuda中使用哈希的方法:
数组
适用于较小的数据规模,如键的范围是int,或者能转化为整型,值类型最长为long等
cudpp...可接受的键值范围均为32bit,相比数组好处是占用内存小,不用存储无用数据
其内部使用布谷鸟过滤,核心思想是多个hash算法生成多个映射值,如果有一个位置是空的,就将元素放入,否则踢走其中一个,被踢走的再去踢别人...数组, 分别存放keys和values
也可以从一个std::unordered_map获取数据
将keys和values从host拷贝到device
创建CUDPPHandle
插入数据
使用哈希表查询数据...compute_60;compute_70即可解决问题
详见cudpp_issues_187
扩展cudpp哈希表
修改CUDPP库中哈希功能支持更长的键类型....只能用哈希,因此将键类型从32bit扩展到48bit,可以支持5^20的键,剩下16bit存储值,依然编码到64bit的long long类型,达到最小改动满足需求的目的.