我正在寻找一种哈希表实现,可以用于CUDA编程。是否有任何好的选择,比如 Python 字典?我将使用字符串作为我的键。
Alcantara et al展示了一种在GPU上构建哈希表的数据并行算法。我相信该实现作为CUDPP的一部分已经提供。
话虽如此,您可能需要重新考虑您最初选择使用哈希表的原因。在按键排序后,批量执行大量查询应该可以在大规模并行设置中获得更好的性能。您试图解决什么问题?
warpcore
是一个框架,用于在 CUDA 加速器上创建高吞吐量的、专为哈希数据结构设计的算法。在现代 CUDA 加速器上以光速进行哈希操作。你可以在这里找到它:https://github.com/sleeepyjack/warpcore - Mojtaba Valizadeh当我编写一个用于创建字符串简单哈希表的OpenCL内核时,我使用了Java的String.hashCode()中的哈希算法,然后将其模数运算到表中行的数量,以获取行索引。
uint getWordHash(__global char* str, uint len) {
uint hash = 0, multiplier = 1;
for(int i = len - 1; i >= 0; i--) {
hash += str[i] * multiplier;
int shifted = multiplier << 5;
multiplier = shifted - multiplier;
}
return hash;
}
uint hash = getWordHash(word, len);
uint row = hash % nRows;
当然,我手动处理冲突,并且在我预先知道字符串数量时,这种方法效果很好。
std :: map <std :: string,SomePointerToTheData>
的东西,其中std :: string
是由GPU计算出的哈希,而pointerToTheOriginalData
就是...确切的数据指针。 - karlphillip