什么是SIMD

发布时间:2026/7/17 12:19:58
什么是SIMD SIMD 的全称是 Single Instruction, Multiple Data是一种 CPU 的并行计算方式。它的核心思想是用一条指令同时对多个数据执行相同的操作。---非 SIMD vs SIMD模式 执行方式 比喻非 SIMD标量 一条指令处理一个数据循环多次 一个人一个一个地搬砖SIMD向量化 一条指令同时处理多个数据 一群人同时搬砖举个例子java// 非 SIMD循环 4 次每次加一个数for (int i 0; i 4; i) {c[i] a[i] b[i];}// SIMD一条指令4 个数同时加c[0..3] a[0..3] b[0..3]; // 一次性完成现代 CPU 有专门的 SIMD 寄存器如 AVX 支持 256 位AVX-512 支持 512 位一次能装下 4 个 float128 位或 8 个 float256 位然后用一条指令同时完成计算。在向量搜索里的作用向量搜索的核心操作就是算相似度比如计算两个 128 维 float 向量的点积。如果用非 SIMD 方式需要循环 128 次每次算一个乘法再累加。如果用 SIMD一次可以算 4 个或 8 个维度的乘加循环次数减少到原来的 1/4 或 1/8。Lucene 9.8 之后引入了 SIMD 加速直接把某些向量距离计算的速度提高了数倍。相关代码主要在 Lucene99HnswVectorsFormat 里用到了 Java 的 Vector APIjdk.incubator.vector。SIMD 是向量搜索里“同样逻辑跑得更快”的关键优化。