本篇文章来自于ICDE2022,主要工作是提供了 GPU 加速图索引构建和搜索,相比 CPU 以及 GPU 方案 SONG 性能有了更大的提升,更加的充分的利用了线程块内部线程的并行和线程块之间的并行。
今天分享的内容对上次分享的 GPU 加速进行一些补充,还没看过上篇文章的小伙伴可以点击下方链接先看看。
研究背景
SONG 虽然提出了 GPU 在图索引方面构建和搜索的方案,但仍然遵循基于 CPU 的解决方案的搜索范式。例如优先级队列和哈希表的搜索和更新都是可以在 CPU 有效地实现。
然而, GPU 难以动态地维护具有高不规则依赖性的数据结构。虽然已经提出了一组特定于 ANN 的优化技术来消除动态 GPU 内存分配并以更少的 GPU 内存消耗来交换计算,但 SONG 在其实现中依赖于每个线程块中的单个线程进行数据结构操作以获得良好的整体性能。
本文设计了一个 GPU 友好的邻近图搜索算法,使得所有关键步骤都能高效、充分地利用GPU的巨大并行性。其核心思想是使用两种惰性策略:惰性更新和惰性检查,使得数据结构的维护可以并行进行。
GPU 加速图索引构建
图索引的构建依赖于所有待插入节点会排队按顺序插入,从而导致这一步骤对于 GPU 及其不友好。在本篇文章中提出了基于 GPU 的图索引构建方案,在不牺牲图质量的情况下充分利用 GPU 大规模并行的优势。
简单来说,构图阶段可以采用分而治之的思想。将所有点划分为相同大小的不同社群。
在第一阶段中,采用每个线程块处理不同社群。并且每张局部图 Gi 的构造都