坦白講,筆者還真的很不想下這個明眼人一看就知道標準答案的標題。對於追求輸出率的伺服器應用來說,將執行緒層級平行化 (TLP, Thread-Level Parallelism) 轉換成指令層級平行化 (ILP, Instruction-Level Parallelism) 的同步多重執行緒 (SMT, Simultaneous Multi-Threading,或稱為同時多執行緒),儘管有一些昂貴的額外代價,像IBM Power5核心比Power4多出24%的功能電路,但SMT仍是提昇超純量處理器的輸出率 (Throughput),最有希望的方法,也是為何Intel、IBM和後來跟進的AMD,有志一同選擇SMT的主因。請各位科科務必莫忘「王者」IBM這個RISC處理器發展邏輯極限的存在。
硬科技:AMD同時多執行緒SMT4是什麼?圖解CPU各種核心與執行緒關係
硬科技:科科應該要知道的Apple M1盲點
硬科技:科科應該要知道的Apple M1盲點 續篇
有讀過當代2位RISC大師的計量方法第三版的科科,也一定會記得發展SMT的主要動機,來自於當今的多重指令派發處理器,通常在功能單元的平行化上,會比單一執行緒來得有效。此外,因為暫存器重新命名和動態排程的緣故,不同執行緒之間所派發的指令,可以不去考慮指令之間的相依性。畢竟動態排程處理器已經存在了很多「現成」的硬體機制,同步多重執行緒能夠利用這些機制,合併TLP的使用來完成多重執行緒,讓不同執行緒發出的指令,能夠在資料路徑中混合執行,激增處理器的整體輸出率。
如果看不懂以上的文字論述也沒關係。姑且不論SMT並不會提昇單一執行緒的效率這檔事,只要測試軟體沒有將SMT處理器「塞好塞滿」,就等於是少了很大一塊的效能輸出率,這實在沒什麼好爭辯的空間,只要想一想當年單核心的Pentium 4,開啟關閉HyperThreading的差距就知道了。
至於目標行動運算或嵌入式應用的省電處理器 (包含Intel近代的Atom體系小核),會普遍不採用SMT的原因,不外乎降低功耗與降低產品驗證複雜度的考量。假若Apple哪天想不開,打算為了資料中心量身訂做全新的處理器微架構,而非延續A系列的核心,他們還是很難抵抗SMT的誘惑,畢竟這是截然不同的需求。
今天如其「先射箭再畫靶」,以Apple M1的單執行緒表現,做為「SMT無用論」的理論基礎,還不如先想想,為何Intel和AMD都會優先以伺服器做為研發x86處理器微架構的最優先事項,況且還是跟桌機筆電一起共用,沒有額外另開戰線的餘力。這才是在批判「x86架構老舊 (雖然常講這句話的人大概連自己在講什麼「架構」都搞不清楚)」之餘,各位科科最該用力認真思考的大哉問:x86帶給計算機工業的傷害,到底是什麼。
行文至此,順便同場加映:M1的確有在硬體層面加持x86指令集的轉譯,其記憶體存取的高效率,奠基於M1也實做了貨真價實的x86-64記憶體管理單元 (MMU),讓人感到有點意外但也不會太奇怪就是了。
硬科技:Apple處理器脫離Intel然後呢?(上):到現在看起來還不像是真的
硬科技:Apple處理器脫離Intel然後呢?(中):任何事都有邏輯的極限
硬科技:Apple處理器脫離Intel然後呢?(下):天才造成的災害叫「天災」
前陣子筆者跟某位死黨喝酒時,酒酣耳熱之際,他就講了一句「如果Apple發神經去做伺服器CPU,我就賣掉手上所有的Apple股票」,就等著看他的鐵口直斷到底靈不靈了。科科。
7 則回應
你自己也在這篇文章承認了「只要測試軟體沒有將SMT處理器「塞好塞滿」,就等於是少了很大一塊的效能輸出率」,那你覺得該跑分發明的情境只測試單一實體核心的兩個線程會在任何現實狀況中發生嗎?真正會塞好賽滿SMT線程的情況就是Multi thread workload 而原本Cinebench就有這個項目了
而在處理器非滿載情況下測試SMT這種機乎不可能發生的事,只為了拿出來說嘴M1沒有SMT只不過是在降低閣下的公信力而已,尤其是在軟體執行效能的基本概念
以下引用你前一篇文章的內容
Multi threading benchmark 在 Cinebench 早就有了,而且 Cinebench 的 CPU 光追還是對多線程執行 scaling 最為友善的工作類型之一,以下轉載來自 AnandTech 主編 Andrei Frumusanu 在 Reddit 上打臉 Usman 的數據
4900HS: 10641 / 8 = 1330 per core MT versus 1260 ST score
1165G7: 4904 / 4 = 1226 per core MT versus 1532 ST score
M1: 5601 / 4 = 1400 per core MT versus 1522 ST score.
光是你提的數據問題就非常大了,根本忽略掉單核和全核頻率不同的問題
以1165g7舉例,單核最大4.7G,全核4.1G
跑single是4.7G,跑multi是4.1G
請問同一個核心4.1G跟4.7G的吞吐量會一樣嗎?跑分會一樣嗎?
如果是計算機組織科班的讀者,不可能會犯這種最基礎的錯誤
現代高效能的處理器並不能只靠堆高issue和decoder寬度,同時必須提高利用效率
而SMT的最大意義就是提高單一核心的利用效率,一個thread塞不滿管線,再多一個thread
這是目前最能有效將每個電晶體預算發揮到最大的方式
M1龐大的8個issue正是提高效率的SMT最好發揮的舞台
但卻沒有SMT,那cache miss之後issue就沒事做了
所以並不是蘋果M1的設計是未來潮流,而是功耗和發熱的考量不掛上SMT
不然把10900k分別鎖4G,5G,分別開關SMT下去測R23的single跟multi就知道SMT有沒有用了
不過大部份果粉連怎麼進BIOS關掉SMT都不知道
而且現在程式和遊戲都開始吃重單一核心的吞吐量了,沒SMT的9700k還幹輸8700k(就是那個2077)
如果沒有取代SMT的技術出現,那SMT肯定是未來高端處理器的趨勢