指令集架构(Instruction Set Architecture)
指令集架构(ISA)是软件与硬件之间的契约,定义了两者通信的规则。Intel x86-641、Armv8-A 和 RISC-V 是当今广泛部署的 ISA 示例。这些都是 64 位架构,即所有地址计算均使用 64 位。ISA 开发人员和 CPU 架构师通常确保符合规范的软件或固件可以在使用该规范构建的任何处理器上执行。广泛部署的 ISA 还通常保证向后兼容性,使为 GenX 版本处理器编写的代码能够继续在 GenX+i 上执行。
大多数现代架构可以分类为通用寄存器(general-purpose register)型加载-存储(load-store)架构,例如 RISC-V 和 ARM,其操作数被显式指定,内存仅通过加载和存储指令访问。x86 ISA 是寄存器-内存(register-memory)架构,操作既可以在寄存器上执行,也可以在内存操作数上执行。除了在 ISA 中提供基本功能(如加载、存储、控制以及使用整数和浮点数的标量算术运算)之外,广泛部署的架构还持续扩充其 ISA 以支持新的计算范式。这些扩充包括增强的向量处理指令(例如 Intel AVX2、AVX512、ARM SVE、RISC-V "V" 向量扩展)以及矩阵/张量指令(Intel AMX、ARM SME)。大量使用这些高级指令的应用程序通常能获得显著的性能提升。
现代 CPU 支持 32 位和 64 位精度的浮点和整数算术运算。随着机器学习和 AI 领域的快速发展,业界对替代数值格式重新产生了浓厚兴趣,以推动显著的性能提升。研究表明,机器学习模型在使用更少的位数表示变量时,性能同样出色,从而节省计算量和内存带宽。因此,大多数主流 ISA 最近都添加了对低精度数据类型的支持,例如 8 位和 16 位整数及浮点类型(int8、fp8、fp16、bf16),以补充传统的 32 位和 64 位算术运算格式。
1. 本书中为简洁起见,经常写作 x86,但我所指的是 x86-64,即 1999 年首次发布的 64 位版本的 x86 指令集。此外,我使用 ARM 指代 ISA,用 Arm 指代该公司。 ↩