Page 25 - 《软件学报》2026年第3期
P. 25

988                                                        软件学报  2026  年第  37  卷第  3  期


                 (bulk distance computation) 和数据结构维护 (data structure maintenance). 候选定位阶段从图索引中提取当前节点的
                 邻居顶点; 批量距离计算阶段利用          GPU  的并行计算能力高效完成高维向量的距离计算; 数据结构维护阶段则更新
                 优先级队列和哈希表以准备下一轮迭代. 通过这一解耦设计, SONG                   将原本串行的距离计算转化为批量并行任务,
                 显著提升了    GPU  计算资源的利用率. 此外, SONG       针对  GPU  内存特性设计了多项优化, 包括采用固定度图 (fixed
                 degree graph) 存储, 通过全局内存的连续布局减少索引访问开销; 利用共享内存等方案; 使用布隆过滤器 (bloom
                 filter) 或  Cuckoo  过滤器替代传统哈希表, 在允许可控误报率的前提下减少显存占用; 提出选择性插入 (selected
                 insertion) 和访问删除 (visited deletion) 策略, 仅保留与当前最优候选相关的节点信息, 将哈希表内存消耗限制为
                 2K (K  为搜索参数). 为了进一步应对       GPU  的显存限制, 引入了随机投影来降维数据. 实验结果表明, SONG                  在
                 GPU  上实现了基于图     ANNS  的突破性加速, 相比于单线程       HNSW  和  Faiss 分别提升  50–180 倍和  4.8–20.2 倍吞吐量.
                    GANNS  [122] 是一个基于  GPU  加速的邻近图近似最近邻搜索与构建的框架. 该框架针对现有                  GPU  图搜索方法
                 (如  SONG) 在数据结构操作上的瓶颈, 设计了惰性更新 (lazy update) 与惰性检查 (lazy check) 策略, 以充分释放
                 GPU  的并行计算潜力. GANNS      将传统串行搜索流程重构为如图            7  所示的  6  个并行化阶段: 候选定位 (candidate
                 locating)、邻域扩展 (neighborhood exploration)、批量距离计算 (bulk distance computation)、惰性检查 (lazy check)、
                 排序 (sorting) 和候选更新 (candidate update). 其中, 候选定位阶段通过线程束 (warp) 级别的位掩码操作快速定位
                 待探索节点; 邻域扩展阶段将当前节点的邻居批量加载至共享内存; 惰性检查阶段则通过并行二分搜索过滤已处
                 理节点, 避免冗余计算. 与传统方法不同, GANNS            采用固定长度数组 (而非动态优先级队列) 维护候选集, 并利用
                 GPU  友好的排序算法 (如     Bitonic Sort) 批量更新候选节点顺序. 这一设计不仅消除了动态内存分配的同步开销, 还
                 通过线程块 (thread block) 内的协作机制实现数据结构操作的并行化. 此外, 文献              [122] 中提出分治策略    GGraphCon,
                 将数据点划分为多个子集, 并行构建局部             NSW  图后逐步合并, 首次实现      GPU  端高效的   NSW  图与  HNSW  图构建.
                 实验结果表明, GGraphCon    在构建   NSW  图时相比于单线程      CPU  方法加速  40–50  倍.


                    ① 候选定位         ② 邻域扩展       ③ 批量距离计算         ④ 惰性检查           ⑤ 排序        ⑥ 候选更新
                    定位首个未被      根据邻接表扩展节点       计算扩展出的节点         避免重复扩展         GPU双调排序
                    访问过的节点                     与查询向量q的距离
                                                  图 7 GANNS   的工作流程

                    根据   GANNS  的实验结果     [122] , 其性能与  SONG  相比, 主要结论如下. (1) 在查询性能上, 相同召回率下,
                 GANNS  的  QPS  比  SONG  高  1.5–5 倍. 例如, 在  SIFT1M  数据集上, 当召回率为  0.795 时, GANNS  达到  458.5k QPS,
                 而  SONG  仅为  88.5k QPS. (2) 在召回率上, 两者在相同数据集上达到相似的召回范围, 表明              GANNS  的并行化未
                 牺牲结果精度. (3) 在性能瓶颈上, SONG       的瓶颈是数据操作 (占       50%–90%  时间), 因其依赖单线程处理优先级队列
                 和哈希表; GANNS    通过懒策略 (lazy update 和  lazy check) 减少数据操作开销, 使距离计算主导时间, 优化了           GPU
                 利用率. (4) 在查询性能鲁棒性上, 当返回邻居数           k 从  1  增至  100  时, GANNS  的速度提升稳定 (在  SIFT1M  上提升
                 5–5.3  倍, 在  GIST  上提升  1.5–2  倍), 而  SONG  因数据操作瓶颈在高  k 值时效率下降更明显. (5) 数据维度的影响:
                 GANNS  在低维数据集上性能提升更明显, 如将            GIST  从  960  维降到  60  维时, 相较于  SONG  的性能提升从  1.5  倍
                 提升至   6  倍, 因其能充分利用线程并行处理.
                    此外还有很多工作利用         GPU  优化性能. GENIE  [123] 通过倒排索引将查询分解成子任务以充分利用              GPU  的并
                 行计算能力, 并提出了一种基于          GPU  实现的哈希表    c-PQ, 用于从候选集中选出      TopK  作为结果. PQT  [124] 对乘积量
                 化进行拓展, 提出了一种双层次的乘积量化树以减少精确距离测试的次数, 通过设计遍历顺序与重排序算法提升
                 搜索性能, 并给出了基于       GPU  的实现. 文献   [125] 提出了在  GPU  上实现  IVFADC  的方法. RobustiQ [126] 提出了结合
                 基于量化的层次化倒排索引提升搜索效率与系统的鲁棒性的                      GPU  上的搜索方法. GGNN    [127] 设计了一种  GPU  友
                 好的线程块级别的搜索方式, 通过全并行多用途缓存与对节点近邻数量的固定提升了片上的资源利用率. GGNN
                 还设计了一种自下而上的图索引构建方法, 提升了索引构建的速度. GTS                     [128] 提出了一种基于  GPU  的索引. 该索引
   20   21   22   23   24   25   26   27   28   29   30