程式設計師大神Linus轉投AMD:我希望英特爾的AVX 512指令集「去死」
机器之心發表於2020-07-15
Linux 首席架構師,當今全球最著名程式設計師之一 Linus Torvalds 最近在郵件列表中的言論再次引起一片譁然。在上週被披露的郵件列表中,有關英特爾將為下一代 CPU 架構 Alder Lake(和 Sapphire Rapids)啟用的編譯器指令引發了討論,Linus Torvalds 參與其中。英特爾的下一代處理器架構 Alder Lake x86 平臺或將於 2021 年與人們見面,與突出效能的 AMD 相比,英特爾希望透過和目前手機晶片理念類似的「大小核設計」帶來能效上的大幅改進。文件披露了三種 CPU 設計,其中最高的是 125W 的 8 + 8 + 1 配置(8 大核 + 8 低功耗核心 + 核顯),其次是 80W 的 8 + 8 + 1 配置,此外有一個 80W 的無小核配置(6 + 0 + 1)。此前有訊息說 Alder Lake 將不支援 AVX512 指令集,只有 AVX2 和其他版本,這可能是因為英特爾在新設計中需要考慮小核的承載能力。不過最近英特爾的內部檔案顯示,AVX512 等指令將僅限在大核中執行。有關 AVX512 指令集,Linus 發表了這樣的一段言論:我希望 AVX512 去死,然後英特爾就可以開始去解決實際問題了——而不是試圖去創造神奇的指令,然後圍繞它尋找基準測試結果讓它看起來很好。我希望英特爾能夠迴歸本源:讓他們的程式再次發揮作用,更專注於常規程式碼,而不是 HPC(高效能運算)或其他意義不大的特例。
在那個時候,除了基準測試,幾乎沒有人會關心這個問題。但同樣的事發生在 AVX512 上就變得不同了。是的,你可以在這裡找到有用的東西,但它們並不符合廠商繪製的宏偉藍圖。AVX512 有很明顯的缺點。我寧願看到那些電晶體被用於其他更相關的事情。即使同樣是用於進行浮點數學運算(透過 GPU 來做,而不是透過 AVX512 在 CPU 上),或者直接給我更多的核心(有著更多單執行緒效能,而且沒有 AVX512 這樣的垃圾),就像 AMD 所做的一樣。
我希望透過常規的整數程式碼來達到自己能力的極限,而不是透過 AVX512 這樣的功率病毒來達到最高頻率(因為人們最終還是會拿它來做 memory-to-memory copy),還佔據了核心的很大面積。沒錯,我當然有偏見。我非常討厭浮點數基準測試,而且我意識到現在人們都非常關心這個資料。我只是認為 AVX512 是一個徹頭徹尾的錯誤。這東西讓我如鯁在喉。這是英特爾方向搞錯的一個很好的例子,可能只會讓市場碎片化。
停止這種只適用於特例的垃圾,讓所有核心都能實現人們最關心任務的最大效能,然後製造一個足夠好的「浮點數核心」來解決特殊問題才是最好的。(在 CPU 上)AVX2 已經足夠了。
Linus 為什麼突然對 AVX512 一頓吐槽?一切還得從指令集的作用開始說起。在計算機中,程式需要編譯成指令才能讓 CPU 識別並執行運算,指令集是指 CPU 能執行的所有指令的集合,每個指令對應一種操作。指令執行能力是衡量 CPU 效能的重要指標,指令集也與 CPU 效率有密切關係。每種 CPU 都需要一個基本指令集,如英特爾和 AMD 的絕大部分處理器都使用 X86 指令集。為了提高 CPU 在某些方面的效能,我們必須增加一些特殊的指令滿足需求,這些新增的指令就構成了擴充套件指令集。2008 年,英特爾在 Sandy Bridge 酷睿 CPU 架構推出的同時釋出了 AVX 指令集(Advanced Vector Extension,高階向量擴充套件指令集),聚焦向量運算,AVX 很快形成了一套完整的單指令多資料指令集規範,一些版本也得到了 AMD 的支援。2013 年,英特爾釋出了 AVX-512 指令集,其指令寬度擴充套件為 512bit,每個時鐘週期內可打包 32 次雙精度或 64 次單精度浮點運算,因此在影像 / 音影片處理、資料分析、科學計算、資料加密和壓縮和深度學習等應用場景中,會帶來更強大的效能表現,理論上浮點效能翻倍,整數計算則增加約 33% 的效能。AVX 所代表的單指令多資料(Single Instruction Multi Data,SIMD)指令集,是近年來 CPU 提升 IPC(每時鐘週期指令數)上為數不多的重要革新。隨著每次資料寬度的提升,CPU 的效能都會大幅提升,但同時電晶體數量和能耗也會有相應的提升。因此在對功耗有較高要求的場景,如膝上型電腦或伺服器中,CPU 執行 AVX 應用時需要降低頻率從而降低功耗。隨著人工智慧應用的興起,新的 AVX512 指令對於加速 AI 模型的推斷顯得非常有效,但即使是對於 AI 的推斷過程來說,使用 GPU 效率還是比 CPU 高的,不過 GPU 的成本也很高。所以,在技術的發展過程中,消費者和英特爾這樣的處理器生產廠商同樣面臨著道路的選擇:是發展 CPU 的 AI 計算能力,還是尋求其他專用晶片,讓 CPU 做它「該做」的事?我們知道,程式設計師大神 Linus 一生噴人無數,C++、Java、英偉達都沒少被他指責過。不過這次,Linus Torvalds 的言論得到了不少人的支援。「其實這次,Linus 說得對,Intel 當然也知道他說得對,但明知他說得對,(暫時)只能硬著頭皮搞下去。」在知乎上,@Pansz 這樣評價道。不僅是說說就算了,Linus 還有自己的實踐。早在今年 5 月,Linus 就在一次公開活動中表示自己已改變了十五年來的習慣,轉投 AMD 了,他把自己的個人電腦換成了目前的最高配置,32 核心的 Threadripper 3970x。在一些第三方測試中,這款採用 7 奈米制程的 CPU 效能超過了英特爾本世代旗艦產品 Core i9 10980XE。AMD Zen2 架構的「執行緒撕裂者」CPU,代表了 AMD 目前消費級處理器的最高水平。Linus 表示自己用 AMD 晶片替換了原來的英特爾 Core i9 9900K,不得不說這個換裝速度有點勤快。「我通常會 DIY 自己的機器,繼續用上一臺配置的固態硬碟等元件,不過這一次(因為要換主機板)我使用了全新的配置,」Linus 說道。不知幾年之後,是 AMD 宣佈支援 AVX512,還是英特爾放棄這套指令集?https://www.phoronix.com/scan.php?page=news_item&px=Linus-Torvalds-On-AVX-512https://www.zhihu.com/question/406517759