硬科技:回顧消失在歷史洪流的Intel旗艦處理器Itanium(中)

2018.07.26 09:21PM
Microcontroller, Hewlett-Packard, Itanium, Central processing unit, Computer hardware, Intel, , , , Xerox, Itanium, electronics, microcontroller, computer component, technology, electronic device, circuit prototyping, display device, personal computer hardware, electronics accessory, computer hardware

前情提要:「硬科技:回顧消失在歷史洪流的Intel旗艦處理器Itanium(上)」。俗語說的好:過猶不及,物極必反。為了擺脫昔日x86包袱而過度反動的IA-64,早在Intel公佈指令集架構之際,就不乏來自外界的質疑,尤其同時擁有CISC大型主機(S/360體系,zSeries, System Z)和RISC效能王者(Power體系,pSeries, System P)的藍色巨人IBM,對IA-64的專業批評,事隔多年,通通一語成讖。

2000年的Microprocessor Forum,就上演了IBM與宣稱「非循序執行超純量處理器已經過時」的Intel/HP陣營,針鋒相對的強碰戲碼。IBM提出了2個重點,細節就在此不贅述了。

首先,程式碼體積過大:根據IBM內部的評估,VLIW的IA-64因編譯器不見得可以指令塞好塞滿、先天較長的指令編碼(3個指令128位元,一般RISC都固定為32位元)、引述執行、預測載入、缺乏基底偏移載入定址模式([base + disp],少了會增加多餘的位址計算,蠻蠢的),以及整數乘除法無法直接使用通用暫存器作運算元(這非常的愚蠢,後面會提)等諸多因素,IA-64的程式碼體積將是x86的4.8倍,經過最佳化後也高達3.7倍,筆者當年還聽過「8倍」的版本。

Line, Point, Angle, Font, Engineering, Product, software, text, structure, line, area, product, font, software, angle, engineering, parallel

程式碼過肥的直接影響就是:IA-64指令集相容處理器需要更充裕的記憶體頻寬和更大型化的快取記憶體,導致Itanium發展歷程屢創快取容量的世界紀錄。當然,這奠定了Intel日後在快取記憶體領域的技術優勢,但這也是事後諸葛的馬後砲了。

Line, Angle, Font, angle, text, line, area, angle, font

其次,為了追求最高指令平行化而生的大型化資料暫存器群,與伴隨而來的龐大執行運算單元,也不利於提昇處理器時脈。也許科科會反問:時下超純量動態指令排程處理器的實體暫存器數量也沒比較少啊?近代GPU更是成千上萬,但「結構上可見」讓軟體直接存取的資料暫存器,和用來「默默墊檔」的實體暫存器,複雜度完全是兩碼子事。

即使IBM也許基於身為潛在競爭對手的立場「酸」個幾句,但這也證明了藍色巨人對於指令集設計和高階處理器的認知,遠非當時的Intel和HP所能望其項背。最近因榮獲計算機工業最高榮譽圖靈獎(Turing Award)2位創造RISC一詞的計算機結構大師,在資訊科班學生爾孰能詳非讀不可的教科書中,就毫不留情的做出和IBM同樣的批判:Itanium只是時脈上不去的平庸整數運算處理器。

接著就是Intel自己那令人感到匪夷所思的蠢事了。按照常識,由大到小,「指令集架構(電腦的語言)」是戰略,「處理器微架構(執行語言的載具)」是作戰,「設計實作與製造」則是戰術,但Intel卻反過來,往往以「利於製造」作為思考的出發點,套句普魯士名將老毛奇的名言:「只要戰術成功,戰略可以讓步」,這也許就是Intel設計指令集的信念,所以x86指令集會如此的毫無道理可循,事後想想,好像也不會讓人感到驚訝。

Intel設計IA-64指令集幹下的蠢事,保證讓各位科科看到瞠目結舌,事後有沒有亡羊補牢就不重要了。

  • IA-64的整數除法指令,竟然無法直接使用通用暫存器,而是必須先把數值傳遞到浮點暫存器,才能執行。誰能告訴我這是想幹嘛?
  • IA-64的浮點除法指令,是透過乘積和指令(Multiply-Add,如A x B + C)進行倒數運算,為維持和x87 80位元浮點相同的精確度,浮點暫存器寬度增加到82位元。有沒有聽過因小失大這個成語?
  • IA-64沒有自動加長資料長度的Sign-Extended載入指令,無法直接將32位元值載入至64位元的通用暫存器。但在x86的世界,早從「8086」就有這樣的指令了,拜託,相隔30年耶。
  • 最後,就是前面提到的,IA-64欠缺基底偏移定址模式([base + disp]),進行資料載入與回存,需額外執行位址計算的指令,相對於定址模式太多太亂的x86,IA-64卻是極度精簡到連最該有的東西都不見,蠻納悶Intel研發團隊的決策動機是什麼,難道是用研究案的心態去做事嗎?

回過頭來,就算IA-64存在這些讓人滿臉黑直線的低級缺陷,爛到爆炸的x86指令集都可以存活下來了,那整體來說只會更好不會更壞的IA-64為何就不行?ㄨ

提醒各位科科,天底下任何史詩級的慘劇,都是天時地利人和交互核子反應的總和,而「人和」:Intel自身的內部管理和行銷策略,更是「功不可沒」,值得大書特書,成為計算機工業史上被撕掉的一頁。

看不過癮?還想繼續看說書的說下去?接著看下集吧!「硬科技:回顧消失在歷史洪流的Intel旗艦處理器Itanium(下)

資料來源