從Power Mac G5回顧RISC與CISC處理器的戰爭/Allen Tu
話說大約2009年的時候,筆者在eBay上買了一台大約在2005年末所推出的Power Mac G5;這也是Apple的G5系列中,第一款、也是最後一款採用雙核心IBM PowerPC 970MP處理器的桌上型電腦。
同時,由於隔年Apple宣布全面改採用Intel處理器,作為該公司日後(也是至今為止)生產的電腦核心組件。導致該年的Late 2005 Power Mac G5大概可以被視為最短命的桌上系列PowerPC Mac。
說起來,筆者接觸Mac電腦不算晚,從最早的Motorola 680X0時代,後來的PowerPC 601/604,還有比較近代一點的PowerPC G3/G4/G5;這個時期關於CPU的筆戰,總環繞著CISC(複雜指令集)跟RISC(精簡指令集)孰優孰劣的討論。
那時候,筆者對於RISC架構的理解(也就是當時Apple所屬PowerPC陣營所採用CPU的架構),因為硬體指令數目少、指令長度對齊、執行時間短等特性,所以有利於電腦程式碼在編譯器編譯上的排程與優化;另一項優勢,也是同樣來自精簡指令集本身的特性:採用RISC架構的CPU相對於CISC,能夠透過二級快取記憶體容量的加大,更有效率的換得CPU運算能力的提升。
多媒體(處理器)大戰開打
後來在多媒體指令概念問世之後,PowerPC跟x86也都各自發展出對應多媒體影音應用的強化架構,分別是PowerPC的「AltiVec」 (Apple稱為「Velocity Engine」)、以及Intel x86處理器的「MMX」。
基本上,雖然同樣是強調針對多媒體影音世代來臨所加入的CPU指令集,但是兩者的設計哲學仍然有所不同。AltiVec強調的是浮點「運算」的加強,因此可視為浮點運算的擴充或延伸;而MMX是針對特定反覆高頻率多媒體運算的應用優化,甚至該稱為特化。
因為MMX強調的多媒體運算能力,是在CPU既有的整數或浮點運算能力之外,增加一種不同於前面兩者的功能,可以透過程式撰寫編譯,直接提高CPU對於多媒體資料的處理能力。
Power Mac G4 MDD上的PowerPC 7455處理器。G4處理器之後開始加入了AltiVec運算單元至CPU中,此時PowerPC處理器的時脈也已經過了GHz大關,二級快取配置最大有到2MB之多。
「攪局」的AMD
然而,在兩大CPU陣營為各自的處理器設計哲學卯足全力同時,另一家大廠AMD公司對於CPU市場的參與,可以說讓本來已經精彩非常的處理器戰局,產生了更加奇妙的漣漪。
AMD的處理器設計用比較簡單的方式,或許可以這樣理解:它極盡可能的採用RISC上的效能強化理論,來達到x86指令相容的目的。因此AMD處理器的暫存器使用非常具有彈性,甚至在後來「3DNow!」技術導入之後,AMD處理器在遊戲上的浮點運算能力,超越了同期時脈相當的Intel的處理器。
由此可以看出,AMD當時在CPU設計上的成功;他們有效透過處理器架構的優勢,縮短了本身與Intel工業製程上時脈的差距。因為高頻穩定運作的CPU,需要優異的工業製程和材料科技來生產,所以有相當長的一段時期,消費者是以處理器運作時脈來鑒別運算能力高低。
時至今日,這樣的印象仍然根深蒂固地深植在許多使用者的心中。
以管線超深著名的Pentium 4 Prescott處理器。Intel這個時期推出的高階Pentium 4,隨便一顆的時脈都落在3至4GHz之間。圖片來源:Wikipedia。
高時脈的問題
事實上,PowerPC G5 970FX/970MP和Intel Pentium 4 Northwood/Prescott這兩款處理器,都在高時脈時的高熱問題上嘗到了苦頭。
為了因應G5的高熱,Apple在每一代Power Mac G5的頂級款配置上,皆採用了LCS(Liquid Cooling System)液冷系統作為冷卻CPU的手段;但沒想到卻因此為日後冷卻液外滲,導致電源供應器、主機板短路燒毀,而種下設計不良的惡名。
即使是最末代的四核心(兩顆雙核心配置的PowerPC G5 970MP)冷卻液外滲的情形已經大為減少(跟前代2004年6月版Dual G5相比,可以說是寥寥無幾),但使用者已經對於配置液冷系統的高價位Mac信心大失。
至於Pentium 4,也由於時脈的提升與SSE/SSE2/SSE3指令集的導入,卻無法比起前代自家處理器有明顯的效能提升,而空放著江山讓AMD有了大鳴大放的機會。
而隨著運算能力的長足發展,另一個效能瓶頸逐漸浮現:前端匯流排。前端匯流排扮演的作用,相當於餵資料給CPU運算的入口;由此可以想見,提供資料給CPU運算的能力,必須要能跟上CPU消化資料的速度。
以PowerPC 970MP處理器來說,Power Mac G5的設計是以雙向、高時脈的前端匯流排運作。Apple在自己的技術資料上註明,這是一個採用雙向、相對於CPU時脈為2:1(匯流排時脈是處理器的一半)的64位元的前端匯流排。
以筆者的2.3GHz Power Mac G5而言,前端匯流排是以1.15GHz的時脈來運作;而在同期的Pentium 4 Prescott處理器上,前端匯流排則是較低的800MHz或533MHz時脈。
道理和「處理器時脈不完全代表效能」一樣,AMD也在同樣傳輸瓶頸的問題上攻下一城,提出了「HyperTransport架構」作為解決方案。
HyperTransport是一種可序列也可並列、高頻率、雙向、低延遲的匯流排技術;相對於原先並列傳輸的匯流排技術,HyperTransport以序列傳輸簡化前端匯流排的複雜性,輕易地提供比過去技術高上許多的頻寬;之後則更直接把記憶體控制器內建到CPU中,將記憶體與處理器間的延遲盡可能降到最低。
指令集解決方案
當然,好的概念與技術,很快就會被競爭對手採用到自家的產品上。AMD 3DNow!獲得成功後不久,Intel很快的也發表了自家的SIMD(Single Instruction Multiple Data)指令架構,稱為「SSE」(Streaming SIMD Extensions)。
在概念上,SSE算是有點向AltiVec和3DNow!的設計哲學靠攏。雖然SSE一開始似乎沒有如3DNow!一般獲得如雷貫耳的掌聲,但Intel藉由為x86 CISC加開外掛、導入RISC架構設計的作法,其實深知針對處理器將編譯器最佳化,對於軟體表現效能上的重要。
所以從SSE問世之後一代接一代,到如今最新的SSE4.2,都花了相當長的時間耕耘編譯器領域,讓程式開發者熟悉、接受、甚至深諳SSE指令的運作。
強者如Maxxuse,甚至曾經直接以SSE2指令,利用組合語言實作出SSE3指令集的模擬器(可以想見有諸多高手在這上面鑽研甚深)。另外在影音轉檔上,也有眾多高手極盡所能地將程式碼針對SSE改寫;因此在影音轉檔的應用上,筆者以自己的經驗還是覺得,Intel架構仍然是目前市場上相關應用的首選。
藉由編譯器深耕的策略,延伸至應用軟體在單機桌上電腦的表現,相當有效的解決了CISC承襲的包袱和效能瓶頸;而在前端匯流排的部份,Intel也在先前剛發表的i7家族上,使用了與HyperTransport類似的「Quick Path Interconnect」傳輸技術。此外,也在i7 CPU家族中整合了支援三通道DDR3的記憶體控制器。
時脈的瓶頸
說了這麼多編譯器針對CPU指令集最佳化帶來的效能提升;那如果是沒有最佳化的情況呢?或是換個角度來想,雖然多媒體指令的強化可以大幅改善相關應用的效能,但是並非每個使用者都高度依賴這類程式;甚至我們每天使用電腦的型態,可能有泰半也都非多媒體方面的應用。
在處理器時脈尚未進入GHz大關之前,直接提升CPU工作時脈所換來的效能增長,是非常直接、而且容易理解的;然而當時脈進展到2GHz之後,一方面是工業技術上的困難、再則是處理器本身材質的物理限制(像是高頻帶來的高熱與耗電),時脈增加所換來的性能增益逐漸平緩,甚至造成冷卻系統設計上的困難(Power Mac G5液冷系統血淋淋的例子)。
因此,既然火力無法繼續增強,改採人海戰術就是可行的另一項作法;也就是在時脈沒有增加的情形下,在同一顆CPU內放入多個處理核心。
雖然說起來很容易,但是在實行上有很大的問題需要克服;最直接面臨的問題,就是指令的排程、和快取資料的一致,才能確保運算結果的正確性。
說起來似乎又回到了處理器指令管線化(Instruction Pipeline)、超純量執行(Superscalar)、分支預測(Branch Prediction)的老路。
實體和虛擬的多核心架構
確實,透過實質上應用程式撰寫手法的改變、還有搭配編譯器針對多核心處理器最佳化,才能真正百分百發揮多核心的好處;然而,實際上即使拿既有針對單核心/單處理器撰寫的軟體,在雙核心/單處理器上運作,也多少能獲得20–30%不等的效能增進。
例如採用PowerPC 970MP處理器的Power Mac G5問世時,Apple同樣也聲稱雙核/單處理器的2.3GHz Power Mac G5,比上一代單核/雙處理器的2.5GHz款式有更好的效能。或許,這裡面有一部分要歸功於作業系統適合單處理器/多核心的架構。
如今,作業系統本身的執行緒(Thread),在某種程度上可以視作一種軟體的即時排程;一個應用程式對應一個執行緒,應用程式透過作業系統的記憶體保護規範,來確保彼此運作互不干擾。
換個角度來看,作業系統扮演的是一個將硬體抽象化的角色。前端應用程式對硬體的要求由作業系統接單,而後端的處理器只要負責應付由作業系統丟過來的執行緒就好;硬體則盡可能的將所有的快取、暫存器、運算核心派上用場,把作業系統送過來的執行緒一一消化掉。
簡單來說,儘管處理器變成多核心,但整體來看仍然是一顆單一處理器;因此在作業系統核心沒有全面改寫的情況下,僅僅作業系統層級排程的優化,也可以因為多核心處理器而帶來立即的效能改善。
雖然這樣的效能提升,並不如編譯器針對個別運算方式(如整數或浮點運算)一一排程優化的那麼明顯,但相對於原先單核心/多處理器的硬體架構來說,單處理器/多核心已經是很大的突破。不像更早前如Power Mac G4 MDD,雖然具備配置雙處理器的架構,但第二顆CPU泰半時候還是閒置的。
所以說,筆者自己喜歡這樣去理解(其實不確定正不正確):多核心的實質進步,就是從處理器內部的指令管線化,擴大進展到作業系統執行緒的類管線化。
談到這裡,或許有些朋友會想到Intel多核心處理器的前身Pentium 4上,曾經出現過如今又在i7系列處理器上捲土重來的「超執行緒」(Hyperthreading),到底與雙核心有什麼不同?
簡單來講,Hypethreading是一種邏輯上的雙核心,其目的是在既有的處理器管線中,盡可能的把CPU指令給塞滿,而且超執行緒的運作至少需要作業系統核心的配合。
然而,因為實體核心並沒有實質增加,因此當發生資源互搶的情形時,超執行緒反而有可能造成效能低落。以筆者自己的經驗,超執行緒對於影音轉檔這種大量重複、而且固定的演算式運算,帶來的效能好處最為直接明顯。
哪個架構才是王道?
拉拉雜雜的扯了這麼多,大家可能會有個疑問:到底那一系列的CPU才是效能的王道?
Apple捨PowerPC家族改採Intel x86,是正確的抉擇嗎?尤其Pentium 4的NetBurst架構曾經得來「Engineering Failure」(工程上的悲劇)的評價,不會令人有所疑慮嗎?
事實上筆者想說的是,若談到效能時,從未覺得有那顆處理器曾經終極地主宰過去數十年桌上「個人電腦處理器」效能霸主的地位。套句蕪園樓主香讀秀的名言:「虛名~虛名~浮雲而已」。
由於桌上個人電腦使用者的特性使然,如果不需要高階動畫或科學運算,處理器的效能增進往往無法輕易察覺;甚至對於多數使用者來說,換上SSD固態硬碟、或是遊戲玩家直接更換3D顯示卡所帶來的效能體驗,可能還比較直接有感。
不同處理器之間的考量
數位應用的繁複多元,讓處理器無法再片面決定電腦的性能價值;此外,處理器、應用程式、還有作業系統之間彼此的緊密合作,也同樣缺一不可。Apple捨PowerPC家族改採Intel x86處理器,曾經傷了一些老玩家的心;之後問世的Mac OS X 10.6「Snow Leopard」捨棄了對PowerPC的支援,再一次傷了許多G5用戶的情感(但這也讓筆者有低價入手Power Mac G5的機會)。
然而,效能極有可能並不是Steve Job腦袋裡的最大考量。Apple賣的是科技產品的新奇體驗,而非高科技硬體本身;Mac OS X已經證明了可以輕易移植到不同的CPU家族,像是iPhone/iPod/iPad所採用的,就是又不同於Intel的ARM架構處理器。
透過作業系統核心的替換,AMD家族的處理器也同樣可以順暢地執行Mac OS X;甚至目前的作業系統,大家也可以透過lipo -info指令,看出10.6之後的核心mach_kernel仍然跟PowerPC是以「Fat Binary」(通用二進位)的形式相容的。
所以最大的考量在哪裡?筆者自己的揣測,是多元、而且價格充滿彈性的處理器供應鏈。原先PowerPC家族是由IBM所獨家提供,加上IBM本身針對的是企業用戶市場,因此處理器生產的配合度到了2004–2005年時,似乎漸漸無法快速回應滿足Apple的期待與要求。
而在x86家族相容的處理器市場上,則有很大的不同;AMD處理器如芒刺在背地牽制著Intel,因此讓處理器供應價格與量的需求上,讓Apple有更多的談判空間。從另外一方面來看,Apple對於零組件的供應,在態度上有相當程度的自主強烈意識;像是入主LG面板的投資、或是跨足半導體IC(如iPad的A4晶片)設計等等。
甚至之前市場曾經傳出Apple想以80億美元買下ARM公司,因此IBM遲遲無法推出G5處理器的行動版本,很可能真的是壓垮導致Apple與PowerPC家族分道揚標的最後一根稻草。
(編按:Apple原本就是ARM公司的大股東之一;後來Apple在2008年之後以授權ARM技術的方式,開始設計生產自己的處理器,供iPhone 5之後的iOS行動設備使用。)
結語
讓我們來看看2005年應用在Apple桌上電腦的PowerPC 970MP處理器,可以看到雙核心、虛擬化技術、LPAR Micro-Partitioning(一種源自於Power5家族的處理器層級硬體資源邏輯分割技術);即使跟現今的處理器設計相比,也並非遙遙落後。
而實際上,IBM的Power家族處理器也持續藉由Power6、Power7等產品,一代接一代地往伺服器的高效能平行運算領域發展之中。就筆者自己而言,一直很喜歡PowerPC 970MP在個人桌上電腦上曾扮演過的獨特角色,但也同時欣喜Mac OS X轉進x86家族所獲得的市場策略成功。
Intel和AMD的較勁,讓使用者對於未來的電腦科技有更多想像;而撰寫本文的目的,則是回顧電腦處理器發展史上,曾經有過一個採用PowerPC家族、但已經逐漸被遺忘的桌上電腦世代。