局部完美空间哈希

主要观点:提出一种新的用于 GPU 上邻域查询的空间哈希方法,现有算法在 GPU 上效果不佳,新方法通过构建能保留模拟域中位置与哈希表中桶之间对应等价类的空间哈希函数,消除粒子附近的哈希冲突,使哈希表易于在 GPU 上实现。
关键信息

  • 很多算法需知道集合中任意点的邻域,即固定影响半径内的点,此为固定半径近邻问题(FRNN),其算法应用广泛。
  • 现有算法不适应 GPU 或对模拟域有限制,基于空间哈希的方法虽无此限制,但哈希冲突导致哈希表难以高效实现。
  • 新算法基于索引排序和朴素空间哈希两种现有方法,通过对粒子按单元格索引排序并利用空间哈希,同时避免粒子附近的哈希冲突来实现邻域查询。
  • 定义了一种能保留类信息的哈希函数,通过选择合适的质数和位运算来确定哈希值,可自由调整哈希表大小以平衡性能和内存约束。
    重要细节
  • 用有限网格和间距限制搜索范围,通过向下取整坐标确定粒子所在单元格,仅搜索相邻单元格中的点作为邻域候选。
  • 索引排序通过并行计数排序按单元格索引对粒子排序,将粒子缓冲区重新用作动态大小的单元格数组,但受限于有限数量的单元格。
  • 朴素空间哈希通过对粒子按空间哈希排序,理论上可获得索引排序和哈希的好处,但会出现哈希冲突,需额外处理以避免重复计数。
  • 新方法通过在模拟域的单元格上施加有限数量的等价类,使粒子邻域中的单元格在不同等价类中,从而避免哈希冲突,无需在哈希表实现中进行额外的记录工作。
  • 哈希函数的选择应考虑 GPU 内核的内存访问模式,以最小化未合并的读写操作,文中的哈希函数只是为了演示而选择,优化其与内核结构的交互是值得研究的方向。
  • 作者在撰写论文时用CUDA.jl实现了该算法,但因 CUDA 代码不便携且为专有,未发布代码,打算后续调查 Julia 中可移植的 GPU 编程领域并发布后续帖子。
阅读 13
0 条评论