CPU 的 INT8 × INT8 → INT32 计算
在 GPU 里你熟悉的 INT8 × INT8 → INT32 “乘-加+累加”单指令,其实在近几代 主流 CPU 上也早已存在,只是名字各异、颗粒度不同:有的还是传统 SIMD 指令(128/256/512 bit 向量),有的已经把矩阵乘法整合进片上“Tile” 或协处理器里。下面梳理几条主流路线,便于你横向比较。
Intel x86:从 VNNI 到 AMX
AVX-512 VNNI(Cascade Lake→)
指令族
VPDPBUSD
/VPDPBUSDS
/VPDPWSSD
等,将 8-bit 乘积 4 个一组累加进 32 bit 寄存器,显著减少 INT8 卷积的指令条数。(stackoverflow.com)VNNI 随 Intel DL Boost 一起进入 2-3 代 Xeon,可直接被 oneDNN、TensorFlow XLA 等库调用。(intel.com)
Intel AMX(Sapphire Rapids→)
在每个核心旁边挂 8 个 1 KiB Tile 寄存器 + TMUL 单元,一次就能做 64 × 64 INT8 Tile-GEMM;峰值 2 048 INT8 MAC/cycle,较 VNNI 提高 8×。(intel.com)
官方白皮书强调 AMX 支持 INT8 推理和 BF16 训练,不必换 GPU 就能在 CPU 内完成 LLM 推理。(intel.com)
AMD x86:Zen 4 的 AVX-512 VNNI
Zen 4 同样实现了 512-bit VNNI 数据通路,可在一条 VPDPBUSD
中完成 16 × 4 INT8 点积→INT32 累加;Hacker News 社区实测在量化 LLM 推理上加速明显。(news.ycombinator.com)
Arm 架构:NEON 与 SVE/SVE2 Dot-Product
NEON SDOT / UDOT(Armv8.4-A,首次出现在 Cortex-A55/A75):
以 4 × INT8 为一组做乘-加并累加到 32 bit,单指令即可完成小型点积。(community.arm.com)SVE / SVE2 DOT 把相同语义推广到可变长向量(128 ~ 2048 bit),对服务器级 Neoverse N2、Fujitsu A64FX 等都可用。
Apple Silicon:M-系列隐藏的 “AMX” 协处理器
逆向分析表明 M1/M2 内含一块被社区称作 AMX 的矩阵协处理器,能对 INT8 张量做 Tile-GEMM,加速 CoreML 推理(苹果并未公开完整指令集,但开发者能通过 Accelerate 框架间接调用)。(reddit.com)
RISC-V:向量 Dot-Product 扩展
SiFive 提交的 Xsfvqdotq 提案定义了 vqdot*
系列指令:对打包的 4 × INT8 做点积并累加到 32 bit 寄存器,与 VNNI/SDOT 语义完全对齐,为未来 RISC-V 服务器核提供 AI 推理捷径。(lists.riscv.org)
如何在代码里用
现代深度学习框架(oneDNN、XNNPACK、TVM、LLM.int8() 等)都会在运行时检测这些指令,自动选最快路径。你只需用对应的编译器开
-march=...+vnni
、-march=sapphirerapids
、-mcpu=native+sve2
等参数即可。
与 GPU Tensor Core 的差异
并行粒度:GPU IMMA 直接执行 16 × 16 甚至 64 × 64 Tile-GEMM;多数 CPU 指令只是 4-element 点积,得靠编译器自动拼装成大矩阵乘。Intel AMX 是个例外,它在核心内部新增了 GPU-式 Tile 阵列。
吞吐/带宽:CPU 时钟高但并行度低,典型 4 th Gen Xeon(56C)AMX 峰值约 55 TOPS INT8,仍低于 A100(312 TOPS);但胜在低延迟、易部署,不必把数据迁移到 GPU。
使用场景:CPU INT8 指令非常适合批量小、内存受限的在线推理或边缘部署;与权重量化(GPTQ、AWQ)组合,可在 CPU 上跑 7-13 B 量级模型而无需 GPU。
结论
是的,CPU 里早已有与 GPU IMMA 类似的 INT8→INT32 乘-加指令:Intel/AMD 的 VNNI、Intel AMX Tile、Arm (NEON/SVE) 的 SDOT/UDOT/DOT、Apple AMX 乃至 RISC-V V-dot 都能把低精度乘法与 32-bit 累加合到一条或一组指令中,专门面向量化/矩阵运算。正确开启编译选项或链接 oneDNN、XNNPACK 等库,就能在 CPU 上复用它们,实现和 GPU Tensor Core 类似的数据流与 INT8 性能增益。