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

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


                                           表 5    向量搜索优化方法总览和对比展示          (续)

                     分类维度             核心思想              典型方法              优势               局限性
                  面向内存硬盘混       优化磁盘访问的I/O效率           DiskANN [36] 、  利用硬盘降低成本,    较慢的磁盘IO影响搜索性能
                  合场景的优化                               SPANN [107] 等  提升单机处理能力
                  面向数据访问的       重组数据结构提升局部性,           QG-LVQ [35] 、  提 升 缓 存 命 中 率,  对算法设计要求高, 空间换
                  优化            充分利用缓存               SymphonyQG [108] 等  减少传输带宽压力   时间带来额外的内存占用
                                                                                    网络通信成为瓶颈, 任务调
                                                            [109]
                  面向分布式场景       分布式并行处理与负载均            Pyramid  、    横 向 扩 展 能 力 强,  度复杂性高, 增加算法设计
                  的优化           衡                      Auncel [110] 等  处理超大规模数据
                                                                                    和维护的复杂性
                                                                [111]
                                                    Filtered-DiskANN  、  满足负载业务逻辑,  支持场景复杂性增加导致查
                  面向混合查询场       支持高效向量+结构化数据           ACORN [112] 、  为应用提供更多样      询优化器设计复杂, 高效索
                  景的优化          混合查询                        [113]
                                                        SeRF  等      支撑             引设计困难
                                                     最坏情况分析    [114] 、
                                用数学模型证明复杂度边              [115]       指导算法设计, 提      理论假设偏离系统数据实际
                     理论分析                             LID  、Steiner-
                                界和性能极限                       [116]   供性能保证          情况
                                                        hardness
                  3.1   面向硬件加速的优化
                  3.1.1    利用  SIMD  加速距离计算
                    单指令多数据流 (single instruction multiple data, SIMD) 技术通过一条指令同时处理多个数, 显著提升计算密
                 集型任务的性能. 现代      CPU  往往支持   SIMD  操作, 比如 x86 架构的   AVX/AVX2/AVX512  指令集  [117] 和  ARM  架构
                 的  NEON [118] .
                    利用  128  位  SIMD  寄存器加速计算向量     x 与向量  y 的欧氏距离的平方的一种方案如图            6  所示. 其中, 第①与
                 第②步分别将     4  个元素从内存加载到      SIMD  寄存器中. 第③步通过 sub     指令计算得到     z = x−y. 第④步利用   fmadd
                        res i = res i +z i ·z i . 第⑤步与第⑥步通过执行两次  hadd_ps 指令将  result 寄存器中的值求和并保存在首个
                 指令实现
                 元素中. 第  7 步通过   cvtss 指令提取寄存器中的首个元素, 得到计算结果.

                                       vec x    reg x    reg temp  reg result
                                                                   a
                                        x 1      x 1      z 1
                                                                          distance
                                        x 2 ① load  x 2  ③ sub  z 2 ④ fmadd  b
                                                                            dis
                                                                   c
                                        x 3      x 3      z 3
                                                                   d
                                        x 4      x 4      z 4
                                                                             ⑦ cvtss
                                                                    ⑤ hadd
                                       vec y    reg y
                                                                            a+b
                                                                  a+b
                                        y 1      y 1
                                                                           +c+d
                                        y 2 ② load  y 2           c+d ⑥ hadd  0
                                                                   0        0
                                        y 3      y 3
                                                                   0        0
                                        y 4      y 4
                                                                  reg result  reg result
                                                 图 6 SIMD  计算距离示例图

                                                                       [1]
                    通过  SIMD  来加速向量计算已经广泛地用于向量搜索中, Milvus 等向量数据库以及                     Faiss [29] 等算法库利用
                 了  SIMD  优化近似最近邻查询. Faiss 从    3  个层次利用了    SIMD: (1) 对于较为简单的操作 (比如对两个向量求和),
                 在代码实现时会通过较为紧凑的循环或使用某些关键字使得编译器能够自行实现向量化                                 (auto-vectorization);
                 (2) 利用通过  C++编译器扩展实现的        SIMD  变量和指令; (3) 通过优化数据布局与算法设计来更好地利用                 SIMD.
                 Milvus 针对  SIMD  主要做了两个工程优化: (1) 支持     AVX512  指令集; (2) 为不同架构的    CPU  自动识别并选择对应
                 的  SIMD  指令.
                    表  6  展示了进行   Top20  查询获得  96%  和  98%  召回率时, 在  Intel(R) Xeon(R) Silver 4210R CPU @ 2.40 GHz
   18   19   20   21   22   23   24   25   26   27   28