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 生態系統顧問小組的重要成員,因此他的意見肯定具有一定的影響力。