空间哈希:高效并行算法的优化与应用
在处理空间数据时,哈希算法发挥着重要作用。传统的完美哈希算法在处理自适应网格细化(AMR)网格时,对于少量的网格细化级别表现良好,但当细化级别达到六个或更多时,会出现负载不平衡和线程发散的问题。为了解决这些问题,我们可以采用紧凑哈希算法进行优化。
1. 邻居查找的优化与紧凑哈希
在AMR网格中,当有六个或更多的细化级别时,简单的完美哈希算法会出现负载不平衡和线程发散问题。线程发散是指每个线程的工作量不同,导致线程最终等待最慢的线程。为了改善这种情况,我们可以进行以下优化:
- 减少写入次数 :邻居查询只需要对单元格的外部哈希桶进行采样,因此无需写入内部桶。进一步分析表明,只有单元格在哈希表中表示的角点或中点会被查询,这进一步减少了写入需求。
- 多次读取 :优化写入操作,使每个单元格只写一次,并在存在更细、相同大小或更粗的邻居单元格条目时进行多次读取。此技术需要将哈希表初始化为哨兵值(如 -1),以表示无条目。
通过这些优化,哈希表中会出现大量的空空间,即稀疏性。我们可以将哈希表压缩至低至条目数量的1.25倍,大大降低算法的内存需求。哈希负载因子是填充的哈希表条目数除以哈希表大小的比值,对于1.25的大小乘数,哈希负载因子为0.8。在并行处理中,我们通常使用较小的负载因子,约为0.333或大小乘数为3,以避免某个处理器比其他处理器慢。
创建紧凑哈希的过程中,可能会出现冲突。当两个条目试图将其值存储在同一个桶中时,我们使用开放寻址技术来解决冲突。开放寻址有以下几种选择:
- 线性探测
超级会员免费看
订阅专栏 解锁全文
3866

被折叠的 条评论
为什么被折叠?



