Linux 之父 Linus Torvalds 可能是最善于表达的技术大牛之一,无论您是否同意,他的观点几乎总是非常有趣。在讨论新的 Linux KConfig(内核配置)构建的更改和添加时,Torvalds表达了他对 AMD64 或 x86_64 架构功能级别的恼怒和不赞成。 他写道:
转念一想,我们还是不要进入 x86-64 微体系结构级别了。 这是个愚蠢的地方"。
整个"v2"、"v3"、"v4"等命名似乎都是一些疯狂的 glibc 人工制品,非常愚蠢,应该消亡。
它与任何事情都没有关系。 请不要在内核源代码中引入这种想法。
我不知道是谁想出了"微架构级别"这个垃圾,但就我所知,这完全是非官方的,而且是一个完全错误的模型。
微架构特性有一个非常真实的模型,那就是 CPUID 位。 试图将这些位线性化在技术上是错误的,因为这些东西根本不是某种线性发展。
更糟糕的是,这种"简化"实际上增加了复杂性。 现在,问题不再是"这个 CPU 支持 cmpxchgb16 指令吗?",而是"'v3'到底是什么意思?"
所以没有。 我们*不会*在内核中引入这种愚蠢的做法。
Linus
x86-64 微体系结构级别最早由 Red Hat 的 Florian Weimer 在 2020 年提出了,最初提出的是"A、B 和 C 级",后来又增加了"D 级"。
Linus Torvalds 对 NVIDIA 做出的著名手势(图片来自阿尔托大学)
这些级别的主要作用是以时间/同步的方式对 CPU 功能进行分类,以简化硬件和操作系统/软件的兼容性和协同性,从而实现更好的编译优化:
x86-64-v2(除其他外)支持流 SIMD 扩展 4.2 (SSE4.2) 和补充流 SIMD 扩展 3 (SSSE3)、POPCNT 指令(适用于某些数据结构中的数据分析和位操作)以及 CMPXCHG16B(适用于并发算法的双字比较和交换指令)。
x86-64-v3增加了高达 AVX2 的向量指令、MOVBE(用于大端数据访问)和其他位操作指令。
x86-64-v4包含了部分 AVX-512 变体的矢量指令。
Linus Torvalds 认为这些架构级别不是简化了问题,反而使事情变得更加复杂,因为将硬件指令和功能的发展线性化并不是一种现实的方法。
Torvalds 说得很有道理,因为我们经常会发现,某些 CPU 指令,比如 AVX,可能会出现在某些处理器系列中,但后来又消失了。 最近的一个例子是,英特尔在第 11 代 Rocket Lake 中引入了 AVX-512,随后又在后几代处理器中取消了该指令。
值得注意的是,Linus Torvalds 现在是最近成立的x86 生态系统顾问小组的重要成员,因此他的意见肯定具有一定的影响力。