Hash GPU哈希表的实现

Hash GPU哈希表的实现,hash,cuda,gpgpu,gpu,Hash,Cuda,Gpgpu,Gpu,我正在寻找一个哈希表实现,我可以使用CUDA编码。外面有好的吗。类似于Python字典的东西。我将使用字符串作为键已经演示了在GPU上构建哈希表的数据并行算法。我认为,实施是作为该计划的一部分提供的 也就是说,您可能需要重新考虑最初选择的哈希表。在大规模并行设置中,按键对数据进行排序,然后执行大量查询应该会产生更好的性能。你想解决什么问题?当我编写一个OpenCL内核为字符串创建一个简单的哈希表时,我使用了来自的哈希算法,然后对表中的行数进行修改,以获得行索引 散列函数 当然,我是手动处理碰撞的

我正在寻找一个哈希表实现,我可以使用CUDA编码。外面有好的吗。类似于Python字典的东西。我将使用字符串作为键

已经演示了在GPU上构建哈希表的数据并行算法。我认为,实施是作为该计划的一部分提供的


也就是说,您可能需要重新考虑最初选择的哈希表。在大规模并行设置中,按键对数据进行排序,然后执行大量查询应该会产生更好的性能。你想解决什么问题?

当我编写一个OpenCL内核为字符串创建一个简单的哈希表时,我使用了来自的哈希算法,然后对表中的行数进行修改,以获得行索引

散列函数
当然,我是手动处理碰撞的,当我提前知道字符串的数量时,这种方法效果很好

前几天,我在GPU上测试了md5哈希算法的实现。您可以使用它来计算数据的哈希值,然后将它们存储在map中。@karlphilip:GPUWhat上有map实现吗?您想在GPU上存储数据吗?不,不。。仅用于处理!映射本身(连接散列和原始数据的映射)应该存储在RAM中。因此,如果你在C++中编程,你可以使用类似于<代码> STD::MAP>代码>,其中代码> STD::String >是GPU计算的哈希和<代码> PototoTothe原始数据< /代码>…正是这样。@karlphillip有时处理意味着使用哈希映射,例如,目前我正在GPU上处理LZ77。在GPU上可以完成的操作比矩阵乘法和光线投射更多。“执行大量查询”意味着什么。我试图在哈希表中存储一个倒排索引,其中键是字符串,值是整数列表。给定一个查询词,我将在哈希表中找到它并检索te listdo您是否有一个使用cudpp哈希表的小代码段。这将非常有帮助。此外,你为什么不建议CUDPPI为OpenCL提供类似的功能?你所说的“按键排序数据,然后执行大量查询”是什么意思?在大规模并行设置中,应该会产生更好的性能?例如,我需要通过范围广泛的多个线程访问几百个密钥。当然,我可以对它们进行排序,但这并没有给我O(1)访问权限,这些数据并不经常更新。即使我有一个包含1k个条目的表,并且只有四分之一的条目被实际填充,这样的表也比试图通过一个列表的一小部分(8次内存访问vs 1*c)进行二进制搜索更有效。
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;