ISA 并非无关紧要 。 x86 ISA 非常复杂 , 因为长期以来人们一直在进行小的更改和补丁 , 以向 ISA 中添加更多功能 , 而 ISA 确实已没有空间容纳此类新功能 。
复杂的 x86 ISA 使解码成为瓶颈 。 x86 指令的长度在 1 到 15 个字节之间 , 计算长度非常复杂 。 在开始解码下一条指令之前需要知道指令的长度 。 如果您想每个时钟周期解码 4 或 6 条指令 , 这肯定是个问题!英特尔和 AMD 现在都在不断增加微操作缓存来克服这个瓶颈 。 而 ARM 有固定大小的指令 , 所以这个瓶颈不存在 , 也不需要微操作缓存 。
x86 的另一个问题是它需要很长的管道来处理复杂性 。 分支误预测惩罚等于 pipeline 的长度 。 因此 , 他们正在添加越来越复杂的分支预测机制 , 其中包含大型分支历史信息表和分支目标缓冲区 。 当然 , 所有这些都需要更多的芯片空间和更多的功耗 。
尽管有这些负担 , x86 ISA 还是相当成功的 。 这是因为它可以为每条指令做更多的工作 。Agner 还在他的微架构手册中写道:AMD 和英特尔 CPU 设计的最新趋势已经回归到 CISC 原则 , 以更好地利用有限的代码缓存 , 增加管道带宽 , 并通过在 pipeline 中维持较少的微操作数量来降低功耗 。 这些改进代表了提高 x86 整体性能和功耗效率的微架构变迁 。
那么就存在一个重要的问题:现代 AMD 和英特尔 CPU 为 x86 兼容性付出了多大的代价?
Agner 提到的解码瓶颈、分支预测和 pipeline 复杂性是 ARM 认为 x86 产生的「CISC tax」的一部分 。 过去 , 英特尔和 AMD 告诉我们解码功耗只是芯片总功耗的极小一部分 。 但是 , 如果 CPU 正在为微操作缓存或复杂的分支预测器消耗能量以弥补解码带宽的不足 , 那么意义就不一样了 。 微操作缓存功耗和分支预测功耗均由 CPU 的微架构及其制造制程节点决定 。 「RISC 与 CISC」并没有充分体现这三个变量之间关系的复杂性 。
也许我们还需要几年的时间才能知道苹果的 M1 和高通未来的 CPU 是否代表了市场翻天覆地的变化 , AMD 和英特尔是否将面临下一个挑战 。 保持 x86 兼容性是否是现代 CPU 的负担 , 这既是一个新问题 , 也是一个非常古老的问题 。 之所以说它是一个新问题是因为在 M1 推出之前 , 无法进行有意义的比较;说它是一个旧问题是因为当初 x86 CPU 诞生时 , 一些个人计算机延续使用非 x86 CPU 就让这个主题引起过相当多的讨论 。
AMD 仍在以每年 1.15 至 1.2 倍的速度改进 Zen , 英特尔的 Alder Lake 也将使用低功耗 x86 CPU 内核来改进功耗 , 两家 x86 制造商都在不断改进他们的方法 。 需要一些时间来观察这些内核及其后继者如何与未来的苹果产品竞争 , 但 x86 一直未脱离这场竞争 。
回到最初那个问题:为什么用 RISC 与 CISC 比较 x86 和 ARM CPU 是错误的?
当 Patterson 和 Ditzel 创造 RISC 和 CISC 时 , 他们打算阐明 CPU 设计的两种不同策略 。 四十年过去了 , 这些术语既模糊又清晰 。 RISC 和 CISC 并非毫无意义 , 但这两个术语的含义和适用性已变得高度语境化 。
使用 RISC 与 CISC 来比较现代 x86 和 ARM CPU , 其问题在于:它需要 3 个对 x86 和 ARM 比较重要的特定属性——制程节点、微架构和 ISA——将 3 个属性结婚在一起 , 然后才能声明 ARM 在 ISA 的基础上更胜一筹 。 「以 ISA 为中心」与「以实现为中心」是一种更好的理解方式 , 但前提是人们需要记得两者之间的关系 。 具体来说:
以 ISA 为中心的观点认为制造几何(manufacturing geometry)和微架构非常重要 , 并且促成了 x86 在 PC、服务器和 HPC 市场曾经的主导地位 。 这种观点认为 , 当制造能力和安装基础的优势被控制或取消时 , RISC(以及 ARM CPU)通常会优于 x86 CPU 。
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
