Linus Torvalds 對 AVX-512 的批評是否公道

作者 | 發布日期 2020 年 07 月 16 日 8:45 | 分類 處理器 , 零組件 Telegram share ! follow us in feedly


身為電腦的基礎語言,一套在市場活躍的指令集架構,也會隨著應用需求而持續擴充,支配伺服器和個人電腦的 80×86,其 SIMD(單一指令,多重資料)指令集延伸也從 MMX 一路疊床架屋到 AVX-512

最近英特爾向 GNU 編譯器套件 GCC 提交關於新一代 Xeon 處理器 Sapphire Rapids 和桌上型處理器 Alder Lake 的最佳化代碼,其中由大核 Golden Cove 與小核 Gracemont 組成的 Alder Lake,取消支援 AVX-512 指令集。無獨有偶,英特爾近期正式發表的 3D 封裝混合架構處理器 LakefieldSunny Cove 大核也封印 AVX-512。原因也很簡單,因為小核並未支援 AVX-512,為了避免應用程式執行錯誤,所以就「維持一致性」。

然後 Linux 之父 Linus Torvalds 開砲了:他希望 AVX-512 痛苦的死去(AVX-512 Dies A Painful Death),AVX2 已經夠用,英特爾不該為了高效能運算(HPC)這種特殊的應用和讓效能測試數據看起來更厲害「創造魔法指令集」而浪費大量電晶體,應更重視常規代碼,像 AMD 這樣給他更多核心與良好的單執行緒性能(程式使用 AVX-512 會激增耗電,強迫處理器降頻)。就算追求更強的浮點運算,GPU 的理論運算效能,還是比擁有 AVX-512 的 x86 處理器強大。

▲ Linus Torvalds。(Source:Krd / CC BY-SA

接著網路對此議論紛紛。有挺身支持,也有嗤之以鼻者,更多是路過看熱鬧的。在這之前,筆者必須先替各位複習一下 AVX-512 的現況,再瞧瞧 Linus 大神的情緒性批判是否公允。

AVXAdvanced Vector Extensions)是什麼?

x86 指令集史上最重要的擴張,沒有之一。除了定義 256 位元寬的 YMM 資料暫存器,更藉由新增的 VEXVector Extension)指令編碼欄位,「集縮」所有可能影響指令編碼長度的資訊,處理器不需讀取大半個指令,就可知道「這個指令大概想幹什麼」,不僅可簡化指令擷取單元和指令解碼器的設計,並達成三運算元指令與保留四運算元的擴充彈性。

講白話點,AVX 是「經由改良指令集架構,更好實做高效能處理器微架構」的案例,近年來另一個知名例子,則是邁向 64 位元的 ARMv8 取消引述執行(Predication)以便實做更強大的非循序指令預測執行。

也因此,英特爾也使用 VEX 編碼「再創造」舊指令,包含用來取代老舊 SSE 的 AVX-128,也鼓勵軟體開發者儘快轉移。如此一來,英特爾就更能放手一搏,研發處理器時專心對 AVX 最佳化,將電晶體預算集中在最常用指令的刀口上,舊指令跑得慢沒關係,維持相容性即可。

AVX-512 是什麼?

AVX-512 在 2013 年 月由英特爾發布,是繼 2011 年 Sandy Bridge 的 AVX 與 2013 年 Haswell 的 AVX2 後的再延伸,首度出現在 2016 年 月上市的 Xeon Phi 7200 系列(代號 Knights Landing),在 2017 年才登陸「正常」的高階 x86 處理器(Skylake-SPSkylake-S)。

不難理解,AVX-512 打從一開始就不是給一般人使用的東西。

AVX-512 改善了什麼?

  • SIMD暫存器(ZMM)的長度和數量都倍增。
  • 追加四運算元指令(A=B×C+D)。
  • 向量指令集必備的遮罩(Mask)暫存器。
  • 向量指令集所需的運算元聚集(Gather)與分散(Scatter)指令。

那 AMD 的處理器目前有支援 AVX-512 嗎?

沒有,等 Zen 3 再看看。有趣的是,VIA 的 Centaur CHA,搶先在 AMD 之前相容 AVX-512

為何連英特爾自家 x86 處理器都沒有全面性支援 AVX-512

因為 AVX-512 的相關硬體很吃電晶體空間和耗電量,英特爾也是從 10 奈米製程的 Cannon Lake 開始,才逐漸「下放」AVX-512 到一般個人電腦產品線,在這之前也僅限於伺服器(Xeon)與高效能運算(Xeon Phi)。

Linus Torvalds 說到「單執行緒」效能是怎麼回事?

不必講到 AVX-512,執行 AVX 指令會降低處理器時脈這件事,更早就發生了,這會讓性能不升反降,像知名 CDN 業者 Cloudflare,維護人員早在兩年前就做過詳細分析。

那麼「市場零碎化」?

即使「支援 AVX-512」,每個處理器系列對應的版本細節也不一樣,原因跟英特爾幾年來汲汲營營於「人工智慧」息息相關,這讓 x86 處理器的相容性更零碎化,也提高了程式最佳化的困難度。過去一講到「x86 指令集缺乏業界標準」只會想到英特爾的競爭對手自行定義專用指令,如 Cyrix 的 EMMI / MMX-FPAMD 的 3DNow! 和未成真的 SSE5,結果現在反而是英特爾自己家裡先亂起來。

像英特爾在 Xeon Phi 7205 系列(代號 Knights Mill)為了強化深度學習的 QVNNIQFMA+VNNI)、Cascade Lake 為了強化推論效能而增加的 VNNI16 位元短整數)、Cooper Lake 因應 Facebook 等大客戶的深度學習需求補上 BF16 浮點數格式,都讓 AVX-512 版本混亂不堪,還發生新型處理器的支援度不見得比舊產品完整的糟糕狀況。

Linus Torvalds 的情緒性批評公道嗎?

筆者在此不下結論,但各位可想想幾個問題:

  • 假如英特爾製程技術維持領先地位,今天會有這樣的「雜音」嗎?
  • 如果 AMD 日後也支援 AVX-512,也沒碰到英特爾的降低時脈麻煩,Linus Torvalds 的反應會不會不一樣?
  • 英特爾在主流桌上型處理器開了取消 AVX-512 第一槍,是否意味 AVX-512 將淡出個人電腦舞台?

最後,唯一可以確定的是,人有才氣,必有脾氣,看來 Linus Torvalds 這個人的脾氣真的很暴躁(Grumpy)。

延伸閱讀: