三星年底推出自主架構,「貓鼬」大戰金環蛇 誰會贏? 還有S6閃存測試

a72有可能吧,有架構有製程試產應該很容易,7420 1月就有跑分成績了,7430如果趕在8月底亮相我覺得有可能
首先是基礎架構,Cortex-A72強調的不再是堆執行單元數量,而是全面增強。從指令拾取開始,到仲裁機構、分支預測,乃至緩存和Load/Store單元,Cortex-A72的各個部件都被大大增強,提升最多的是內存子系統,幅度達50%。

ARM表示,在同頻率下,Cortex-A72單個週期指令吞吐能力比Cortex-A52提升20%-60%;而如果是相同性能,則電力消費可以減少40%-60%。另外,Cortex-A72同樣可以和Cortex-A53搭配,組成big.little大小核結構

當然a57在10核架構20nm聯發科都敢2.5ghz了,我相信3星14nm應該會大膽一點,聽說蘋果a9會續用台積電?
可是瑞凡
高通S820 核心名稱好像已經不再是Krait了
取名人家前代核心產品名的天敵好像有點…

sw969239 wrote:
首先是基礎架構,Cortex...(恕刪)


3星14nm 良率會好 ?

就不會 被台積電打趴在地上了...

目前台積電的 20nm 對上 3星14nm 3星的也沒好到多少去...

要是台積電 16nm 順利量產 3星要是沒再突破 會被巴假的....
gw2isgood00 wrote:
說x86末日快到會...(恕刪)


那你要拿出統計數據看看X86 5~10年來進步了多少%效能 平均每年不到10%

ARM又進步了多少%? 大約是50倍效能

當ARM長大 X86也會長?

但是這個生長速度就像是恐龍寶寶對上 人類青年

兩者都以指數增長 人類青年一開始比較高大(X86) 恐龍蛋比較小(ARM)最後差距會很快拉開來


ARM將在2017年左右超過高階的桌上型電腦I7 4790K系列 將在2019年超過XEON伺服器CPU



想認真討論這個問題

不過怕聽不懂我在什麼 或是在這裡說不合適

X86 CPU電腦性能沒有依造摩爾定率增長 長時間都維持指數增長

電晶體密度提升2倍 性能可能只增加10%

從1974年開始到2011年CPU性能增長約40萬倍 intel 8080 只有0.33MIPS 每秒處理的指令

現在I7 2600K CPU有120000MIPS
I7 3770K 增加5%
I7 4770K 增加15%

那現在ARM是多少呢 已經達到X86 1/3了

1951年至今計算機性能增長列表
1951年至今計算機性能增長列表
<----------------你去們去看看這張表 在看看摩爾定律

ARM內核的效率演進 WIKI
Cortex-A72 At least 6.3 DMIPS/MHz per core (up to 7.35 DMIPS/MHz depending on implementation)



會發現從2005年到現在X86電腦性能增長速度降低了 尤其是單線程性能

因為時脈無法提高 DMIPS/MHz每時脈週期處理的指令數 同頻性能10年來只提高3倍左右

高通A57+A53八核 S810效能也追到X86性能的1/3左右

但是ARM架構效能還差X86一大段距離

盲目追求多核心並沒有辦法增加太多電腦硬體效能

主要是看單核心的同頻效能決定這個CPU架構好不好

怕別人看不懂我在說什麼,我特地做了一張圖 或是以上兩條數遽連結能夠表達的意思

ARM VS X86效能增長曲線就如同以下這幅圖




---------------


深入研究

很可能是X86的分支預測單元和流水線(指令管線化)出了問題

而且X86為了指令向下相容導致佔用很多晶圓面積 至造成本先天就比ARM更高




dohan8850 wrote:
arm 處理器什麼...(恕刪)


有一種叫做虛擬機器的技術

可以在硬體底層 和作業系統底層加入一層 轉換底層硬體指令和攔截特權指令

也就是可以在不同的硬體上執行相同的軟體和作業系統的技術

講白話一點就是模擬器


WINDOWS上有虛擬機器 也就是大家PC上常常用的安卓模擬器

Android之上也有虛擬機器軟體 但是我不是要說OS本身的中介層的DVM或是JVM

而是能直接執行安卓上執行X86和WINDOWS軟體.EXE開頭的副檔名的檔案

之所以很少人這樣做只是因為跑模擬器會有性能損失 至少原來打對折或是只剩原來的20~30%

目前X86性能比較強大所以在X86的WINDOWS平台上跑安卓模擬器比較快

但是反過來在Android 和ARM硬體上跑X86的模擬器就會非常慢

但是只要ARM追上X86以後這就不是問題了

在手錶上跑WIN95 -----------


在Android和ARM硬體手機上執行WIN7
X86的發展如下文所說 我為什麼說X86沒希望了

Atom 手機的第一代、第二代32nm Saltwell是順序執行架構 並增加HT技術

到了BT+ 也就是現在的第三代ATOM Z3000系列 Silvermont增加了亂序執行架構

核心數量增加到4個 把HT技術拿掉了 因為Atom記憶體頻寬也不太夠

而桌面級的X86 是在奔騰Pro時代就有了亂序執行架構

至於ARM架構是在Cortex-A9時代才具備有亂序執行的功能

ATOM目前是16級流水線 4發射端口 22nm製程 亂序執行架構

這樣的條件下距然還比不上ARM同時代的DMIPS/MHz


--------------------
本文所關注的就是專門針對X86處理器流水線的工作原理。

你需要掌握的預備知識


首先,閱讀本文你需要瞭解編程,最好瞭解一點彙編語言。如果你還不知道指令指針(instruction pointer)是什麼,那麼本文對你來說可能有些難。你需要知道什麼是寄存器,指令和緩存,如果不明白它們是什麼,你需要盡快查找資料瞭解一下。

第二,CPU的工作原理是一個非常龐大和複雜的話題,本文僅僅是匆匆一瞥,很難以用一篇文章詳盡敘述。如果我有什麼疏漏,請通過評論告訴我。

第三,我僅僅關注英特爾處理器及其X86架構。當然除了X86,還有很多其他架構的處理器。雖然AMD公司引入了很多新特性到X86架構,但是X86架構是Intel公司發明,並且創造了X86指令集,其中絕大多數特性是由Intel引入的。所以為了保持敘述的簡單和一致性,我僅關注Intel的處理器。

最後,當你讀到這篇文章時,它已經是「過時」的了。更新款的處理器已經設計出來,其中一些會在未來幾個月之內發佈。我很高興技術能如此快速的發展,我希望有一天所有這些技術都會過時,創造出擁有更驚人計算能力的CPU。


處理器流水線基礎

從一個非常廣的角度來說,X86處理器架構在近35年來並沒有變化太多。雖然X86架構被附加了很多新功能,但是最初的設計(包括幾乎所有最初的指令集)仍然基本上是完整保留的,即使在最新的處理器上仍然被支持。

最初的8086處理器支持14個寄存器,這些寄存器在如今最新的處理器中仍然存在。這14個寄存器中,有4個是通用寄存器:AX,BX,CX和DX;有4個是段寄存器,段寄存器用來輔助指針的實現:代碼段(CS),數據段(DS),擴展段(ES)和堆棧段(SS);有4個是索引寄存器,用來指向內存地址:源引用(SI),目的引用(DI),基指針(BP),棧指針(SP);有1個寄存器包含狀態位;最後是最重要的寄存器:指令指針(IP)。

指令指針寄存器是一個擁有特殊功能的指針。指令指針的功能是指向將要運行的下一條指令。

所有的X86處理器都按照相同的模式運行。首先,根據指令指針指向的地址取得下一條即將運行的指令並解析該指令(譯碼)。在譯碼完成後,會有一個指令的執行階段。有些指令用來從內存讀取數據或者向內存寫數據,有些指令用來執行計算或者比較等工作。當指令執行完成後,這條指令會通過退出(retire)階段並將指令指針修改為下一條指令。

譯碼,執行和退出三級流水線組成了X86處理器指令執行的基本模式。從最初的8086處理器到最新的酷睿i7處理器都基本遵循了這樣的過程。雖然更新的處理器增加了更多的流水級,但基本的模式沒有改變。


35年來發生了什麼改變


相較於現今的標準,最初的處理器設計顯得太過簡單。最初的8086處理器的執行過程可以簡述為從當前指令指針取得指令,通過譯碼,執行最後退出,然後繼續從指令指針指向的下一條指令處取得指令。

新的處理器增加了新的功能,有些增加了新的指令,有些增加了新的寄存器。我將主要關注和本文主題有關係的改變,這些改變影響了CPU指令執行的流程。其他的一些變化比如虛擬內存或者並行處理雖然都很有意義而且有趣,但是並不在本文主題的範圍內。

指令緩存在1982年被加入到處理器中。通過指令緩存,處理器可以一次性從內存讀取更多指令並放在指令緩存中,而不用每條指令都從內存中取。指令緩存僅有幾個字節大小,只能容納數條指令,但是因為消除了之後每次取指往返內存和處理器的時間,極大的提高的效率

1985年的386處理器引入了數據緩存,而且擴展了指令緩存的設計。數據訪存請求通過一次性讀取更多的數據放在數據緩存中,從而提升了性能。而且,數據緩存和指令緩存都從幾個字節擴大到幾千字節。

1989年推出的i486處理器引入了五級流水線。這時,在CPU中不再僅運行一條指令,每一級流水線在同一時刻都運行著不同的指令。這個設計使得i486比同頻率的386處理器性能提升了不止一倍。五級流水線中的取指階段將指令從指令緩存中取出(i486中的指令緩存為8KB);第二級為譯碼階段,將取出的指令翻譯為具體的功能操作;第三級為轉址階段,用來將內存地址和偏移進行轉換;第四級為執行階段,指令在該階段真正執行運算;第五級為退出階段,運算的結果被寫回寄存器或者內存。由於處理器同時運行了多條指令,大大提升了程序運行的性能。

1993年Intel推出了奔騰(Pentium)處理器。由於訴訟問題,Intel無法繼續沿用原來的數字編號。因此,用奔騰替代了586作為新款處理器的代號。奔騰處理器相對i486處理器對流水線做出了更多修改。奔騰處理器架構增加了第二條獨立的超標量流水線。主流水線工作方式類似於i486,第二條流水線則並行的運行一些較簡單的指令,比如說定點算術,而且該流水線能更快的進行該運算。

1995年Intel推出了奔騰Pro(Pentium Pro)處理器。和之前的處理器相比,奔騰Pro採用了完全不同的設計。該處理器採用了諸多新特性以提高性能,包括亂序(Out-of-Order, OOO)執行的部件以及猜測執行。流水線擴展到了12級,而且引入了「超標量流水線」的概念,使得許多指令可以被同時處理。我們稍後將詳盡的介紹亂序執行的部件。

在1995-2002年之間,亂序執行部件經過了數次重大改進。處理器中加入了更多的寄存器;單指令多數據(Single Instruction Multiple Data, or SIMD)的引入使得一條指令可以進行多組數據運算;現有的緩存變得更大而且引入了新的緩存;有些流水級被拆分成更多流水級,有些流水級被合併,使得更加適合實際的應用。這些改變對整體性能的提升有重要作用,但它們都沒有從根本影響數據在處理器中的流動方式。

2002年發佈的奔騰4處理器引入了超線程技術。亂序執行部件的設計使得指令被執行的速度比處理器能夠提供指令的速度更快。因此對於大部分應用,CPU的亂序執行部件在大部分時間處於空閒狀態,甚至在高負載的情況下也不能充分利用。為了讓指令流能充分的流入亂序執行部件,Intel加入了第二套前端部件(譯註:在處理器結構中,前端是指取指,譯碼,寄存器重命名等模塊,經過前端部件的處理後,指令等待發射進入亂序執行部件)。雖然實際上只有一個亂序執行部件,但對於操作系統來說,它能看到兩個處理器。前端部件包含兩組同樣功能的X86寄存器,兩個指令譯碼器根據兩個指令指針指向的地址分別處理。所有的指令被一個共享的亂序執行部件執行,但對應用程序來說並不知情。當亂序執行部件執行完成,像之前一樣退出流水線後,最終結果返回虛擬的兩個處理器。

2006年Intel發佈了酷睿(Core)微架構。為了品牌效應,它被稱做酷睿2(二總比一好)。令人驚訝的是,處理器頻率不升反降,而且超線程也被去掉了。通過降低時鐘頻率,每一級流水線可以做更多工作。亂序執行部件也被擴展的更寬。各種不同的緩存和隊列都相應做的更大。而且處理器被重新設計,以適應雙核和四核的共享緩存結構。

2008年,Intel開始用酷睿i3, i5, i7的方式來命名新的處理器。新處理器重新引入了超線程。這三個系列的處理器主要區別在於內部緩存大小不同。

未來的處理器:Intel的下一代微結構被稱為Haswell。Haswell據稱將於2013年發佈。目前已知的文檔說明它將擁有14級流水級的亂序執行部件,所以它仍然遵循從奔騰Pro以來的基本設計思路。

那麼,流水線到底是什麼?亂序執行部件是什麼?他們如何提升了處理器的性能呢?



CPU指令流水線

根據之前描述的基礎,指令進入流水線,通過流水線處理,從流水線出來的過程,對於我們程序員來說,是比較直觀的。

I486擁有五級流水線。分別是:取指(Fetch),譯碼(D1, main decode),轉址(D2, translate),執行(EX, execute),寫回(WB)。某個指令可以在流水線的任何一級。


但是這樣的流水線有一個明顯的缺陷。對於下面的指令代碼,它們的功能是將兩個變量的內容進行交換。
1 XOR a, b
2 XOR b, a
3 XOR a, b



從8086直到386處理器都沒有流水線。處理器一次只能執行一條指令。再這樣的架構下,上面的代碼執行並不會存在問題。

但是i486處理器是首個擁有流水線的x86處理器,它執行上面的代碼會發生什麼呢?當你一下去觀察很多指令在流水線中運行,你會覺得混亂,所以你需要回頭參考上面的圖。

第一步是第一條指令進入取指階段;然後在第二步第一條指令進入譯碼階段,同時第二條指令進入取指階段;第三步第一條指令進入轉址階段,第二條指令進入譯碼階段,第三條指令進入取指階段。但是在第四步會出現問題,第一條指令會進入執行階段,而其他指令卻不能繼續向前移動。第二條xor指令需要第一條xor指令計算的結果a,但是直到第一條指令執行完成才會寫回。所以流水線的其他指令就會在當前流水級等待直到第一條指令的執行和寫回階段完成。第二條指令會等待第一條指令完成才能進入流水線下一級,同樣第三條指令也要等待第二條指令完成。

這個現象被稱為流水線阻塞或者流水線氣泡。

另外一個關於流水線的問題是有些指令執行速度快,有些指令執行速度慢。這個問題在奔騰處理器的雙流水線架構下顯得更加明顯。

奔騰Pro擁有12級流水線。當這個數字被首次宣佈後,所有的程序員都倒抽了一口氣,因為他們知道超標量流水線是如何工作的。如果Intel仍然按照以前的思路設計超標量流水線的話,流水線的阻塞和執行速度慢的指令會嚴重影響執行速度。但同時,Intel宣佈了完全不同的流水線設計,叫做亂序執行部件(Out-of-Order core)。單從敘述上很難理解這些改變帶來的好處,但Intel確信這些改進是令人激動的。

讓我們來更深入的看看這個亂序執行的部件吧!


亂序執行流水線

在描述亂序執行流水線時,往往是一圖勝千言。所以我們主要以圖例進行介紹。
CPU流水線圖例


I486處理器擁有5級流水線。這種設計在現實世界中的其他處理器中很常見,而且效率不錯。

而奔騰處理器的流水線比i486更好。兩條流水線可以並行運行,而且每條流水線可以同時有多條指令在不同流水級執行。它幾乎可以同時執行比i486多一倍的指令。


能夠快速完成的指令需要等待前面執行慢的指令即使在並行流水線中也仍然是一個問題。流水線仍然是線性的,導致處理器面臨性能瓶頸難以踰越。

亂序執行部件和之前處理器設計中的線性通路有很大不同,它增加了一些複雜度,引入了非線性的通路。


第一個改變是指令從內存中取到處理器的指令緩存的過程。現代處理器能夠檢測何時會產生一個大的分支跳轉(比如函數調用),然後提前將跳轉目的地的指令加載到指令緩存中。

譯碼級有一些略微的修改。不同於以往處理器僅僅譯碼指令指針指向的指令,奔騰Pro處理器每一個始終週期最多能譯碼3條指令。現今的處理器(2008-2013年)每個時鐘週期最多可以譯碼4條指令。譯碼過程產生很多小片的操作,被稱作微指令(micro-ops, µ-ops)。

下一級(或者好幾級)被稱為微指令翻譯,接著是寄存器重命名(register aliasing)。許多操作同時執行,並且執行的順序是亂序的,所以有可能出現一條指令讀一個寄存器的同時,另外一條指令正在對這個寄存器進行寫操作。在處理器內部,這些原始的寄存器(如AX,BX,CX,DX等)被翻譯(或者重命名)成為內部的寄存器,而這些寄存器對程序員是不可見的。寄存器和內存地址需要被映射到一個臨時的地方用於指令執行。當前每個始終週期可以翻譯4條微指令。

當微指令翻譯完成後,它們會進入一個重排序緩存(Reorder Buffer, ROB),ROB可以存儲最多128條微指令。在支持超線程的處理器上,ROB同樣可以重排來自兩個虛擬處理器的指令。兩個虛擬處理器在ROB中將微指令彙集到一個共享的亂序執行部件中。

這些微指令已經準備好可以執行了。它們被放在保留站中(Reservation Station, RS)。RS最多可以同時存儲36條微指令。

現在才開始亂序執行部件神奇的部分。不同的微指令在不同的執行單元中同時執行,而且每個執行單元都全速運行。只要當前微指令所需要的數據就緒,而且有空閒的執行單元,微指令就可以立即執行,有時甚至可以跳過前面還未就緒的微指令。通過這種方式,需要長時間運行的操作不會阻塞後面的操作,流水線阻塞帶來的損失被極大的減小了。

奔騰Pro的亂序執行部件擁有6個執行單元:兩個定點處理單元,一個浮點處理單元,一個取數單元,一個存地址單元,一個存數單元。這兩個定點處理單元有所不同,一個能夠處理複雜定點操作,一個能同時處理兩個簡單操作。在理想狀況下,奔騰Pro的亂序執行部件可以在一個時鐘週期內執行7條微指令。

現今的亂序執行部件仍然擁有6個執行單元。其中取數單元,存地址單元,存數單元沒有變,另外3個多少發生了變化。這三個執行單元都可以執行基本算術運算,或者執行更複雜的微指令。但每個執行單元擅長執行不同種類的微指令,使得它們能更高效的執行運算。在理想狀況下,現今的亂序執行部件可以在一個時鐘週期內執行11條微指令。

最終微指令會得到執行,在經過數個流水級之後,最終會退出流水線。這時,這條指令完成並且遞增指令指針。但從程序員的角度來說,指令僅僅是從一端進入CPU,從另一端退出,就像老的8086一樣。

如果你仔細看過上面的內容,你會注意到上面提到過很重要的一個問題:如果執行指令的位置發生了跳轉會發生什麼?例如,當指令運行到」if」或者是」switch」時,會發生什麼呢?在較老的處理器中這意味著清空流水線,等待新的跳轉目的指令的取指執行。

當CPU指令隊列中存儲了超過100條指令時,發生流水線阻塞帶來的性能損失是極其嚴重的。所有的指令都需要等待跳轉目的的指令取回並且重啟流水線。在這種情況下,亂序執行部件需要將跳轉指令之後但是已經執行的微指令全部取消掉,返回到執行前的狀態。當所有亂序執行的微指令都退出亂序執行部件之後,將它們丟棄掉,然後從新的地址開始執行。這對於處理器來說是相當困難的,而且發生的頻率很高,因此對性能的影響很大。這時,引入了亂序執行部件的另外一個重要功能。

答案就是猜測執行。猜測執行意味著當遇到一個分支指令後,亂序執行部件會將所有分支的指令都執行一遍。一旦分支指令的跳轉方向確定後,錯誤跳轉方向的指令都將被丟棄。通過同時執行兩個跳轉方向的指令,避免了由於分支跳轉導致的阻塞。處理器設計者還發明了分支預測緩存,當面臨多個分支時進行預測,進一步提高了性能。雖然CPU阻塞仍然會發生,但是這個解決方案將CPU發生阻塞的概率降到了一個可以接受的範圍。

最後,擁有超線程的處理器將兩個虛擬的處理器暴露給共享的亂序執行部件。它們共享一個重排序緩存和亂序執行部件,讓操作系統認為它們是兩個獨立的處理器,看上去就像這樣:


超線程的處理器擁有兩個虛擬的處理器,從而可以給亂序執行部件提供更多的數據。超線程對一般的應用程序都有性能提升,但是對一些計算密集型的應用,則會迅速使得亂序執行部件飽和。在這種情況下,超線程反而會略微降低性能。但這種情況畢竟是少數,超線程對於日常應用來講通常都能夠提供大約一倍的性能。


一個示例

這一切看上去有點令人感到困惑,那麼我們舉一個例子來讓這一切變得清晰起來。

從應用程序的角度來看,我們仍然是運行在指令流水線上,就想老的8086處理器那樣。處理器就是一個黑盒子。黑盒子會處理指令指針指向的指令,當處理完之後,會在內存裡找到處理的結果。

但是從指令本身的角度來講,這個過程可謂歷經滄桑。我們下面介紹對於現今的處理器(大約在2008-2013年之間),一條指令在其內部的過程。

首先,你是一條指令,你所屬的程序正在運行。

你一直在耐心的等待指令指針會指向自己,等待被CPU運行。當指令指針距離你還有4KB遠的時候(這大約是1500條指令),你被CPU從內存取到指令緩存中。雖然從內存加載進入指令緩存需要一段時間,但是現在距離你被執行的時刻還很遠,你有足夠的時間。這個預取的過程屬於流水線的第一級。

當指令指針離你越來越近,距離你還有24條指令的時候,你和你旁邊的5個指令會被放到指令隊列裡面。

這個處理器有4個譯碼器,可以容納一個複雜指令和最多三個簡單指令。你碰巧是一條複雜指令,通過譯碼,你被翻譯成4個微指令。

譯碼的過程可以劃分為多步。譯碼過程中的一步是檢查你需要的數據和猜測你可能會產生一個地址跳轉。譯碼器一旦檢測到需要的額外數據,不需要讓你知道,這個數據就開始從內存加載到數據緩存中了。

你的四個微指令到達寄存器重命名表。你告訴它你需要讀哪個內存地址(比如說fs:[eax+18h]),然後寄存器重命名表將這個地址轉換為臨時地址供微指令使用。地址轉化完成後,你的微指令將進入重排序緩存(Reorder Buffer, ROB)並記錄指令次序。接著第一時間進入保留站(Reservation Station, RS)。

保留站用於存儲已經準備就緒可以執行的指令。你的第三條微指令被立即選中並送往端口5,這個端口直接執行運算。但是你並不知道為什麼它會被首先選中,無論如何,它確實被執行了。幾個時鐘週期之後你的第一條微指令前往端口2,該端口是讀單元(Load Address execution unit)。剩餘的微指令一直等待,同時各個端口正在收集不同的微指令。他們都在等待端口2將數據從緩存和內存中加載進來並放在臨時存儲空間內。

他們等了很久……

相當久的時間……

不過在他們等待第一條微指令返回數據的時候,又有其他的新指令又進來。好在處理器知道如何讓這些指令亂序執行(即後到達保留站的微指令被優先執行)。

當第一條微指令返回了數據,剩餘的兩條微指令被立即送往執行端口0和1。現在這4條微指令都已經運行,最終它們會返回保留站。

這些微指令返回後交出他們的「票」並給出各自的臨時地址。通過這些地址,你作為一個完整的指令,將他們合併。最後CPU將結果交給你並使你退出

當你到達標有「退出」的門的時候,你會發現這裡要排一個隊列。你進入後發現你剛好站在你前面進來指令的後面,即使執行中的順序可能已經不同,但你們退出的順序繼續保持一致。看來亂序執行部件真正知道自己做了什麼。

每條指令最終離開CPU,每次一條指令,就和指令指針指向的順序一樣!


結論

希望這篇小文能夠給讀者展示一些處理器工作的奧秘,要知道,這並不是魔術。

讓我們回到最初的問題,現在我們應該可以給出一些較好的答案了。

處理器內部是如何工作的呢?在這個複雜的過程中,指令首先被分解為更小的微指令命令,這些微指令以亂序的方式儘可能快的被執行,然後按照原始的順序提交執行結果。因此,從外部看來,所有的指令都是按照順序的方式執行的。但是現在我們知道,處理器內部是以亂序的方式處理指令的,有時甚至以猜測的方式來運行分支代碼。

運行一條指令究竟需要多長時間呢?對於沒有使用流水線技術的處理器來說,這是一個容易回答的問題,但對於現代的處理器來說,一條指令的執行時間與它周圍指令的內容以及臨近cache的大小和內容都有關。一條指令通過處理器有一個最小的時間,但只能粗略的說這個時間是恆定的。一個好的程序員和編譯器可以讓很多條指令同時運行,從而使每條指令的分攤時間幾乎為零。這裡說的幾乎為零的執行時間並不是指一條指令的總的執行時間很短,相反,通過整個亂序部件和等待內存讀寫數據是需要花費很多時間的。

一個新的處理器擁有12級或者18級、甚至更深的31級流水線意味著什麼呢?這意味著更多的指令可以被同時送進加工廠。一個非常深的流水線可以讓幾百條指令同時被處理。當一切順利時,一個亂序部件可以保持高速運轉,從而獲得驚人的吞吐量。不幸的是,深的流水線同時意味著流水線停頓會從一個相對可以容忍的性能損失變成一個可怕的性能噩夢。因為幾百條指令都不得不停頓下來,等待流水線恢復運轉。

我怎麼根據這些信息來優化程序呢?幸運的是,CPU可以在大部分常見情況下工作良好,並且編譯器已經為亂序處理器優化了近20年。當指令和數據按照順序(沒有煩人的跳轉)執行時,CPU可以獲得最好的性能。因此,首先,使用簡單的代碼。簡單直接的代碼會幫助編譯器的優化引擎識別並優化代碼。儘量不使用跳轉指令,當你不得不跳轉時,儘量每次跳轉到同樣的方向。複雜的設計,例如動態跳轉表,雖然看起來很酷並且的確可以完成非常強大的功能,但不管是處理器還是編譯器,都無法進行很好的預測處理,因此複雜的代碼很可能導致流水線停頓和猜測錯誤,從而極大的損害處理器性能。其次,使用簡單的數據結構。保持數據順序、相鄰和連續可以阻止數據停頓。使用正確的數據結構和數據分佈可以獲得很大的性能提升。只要保持代碼和數據結構儘量簡單,剩下的工作就可以放心地交給編譯器的優化引擎來完成了。

感謝與我一起參與這次旅行!補充名詞解釋 幫助你看懂以下文章

OoO =亂序執行架構 性能進一步的提高可以通過指令的執行順序與在程序代碼中出現的順序不同來提高,這就是亂序執行。
流水線技術 性能可以通過同時執行一系列指令中的不同子步驟來提高(這就是流水線) WLIW =超長指令字
安騰就是採用WLIW把流水線做得很長 可惜後來英特爾失敗了

超純量處理器 = 文中常常說的幾發射指的是,完全的並行執行多個處理器指令。只就是說有好幾條管線

現代的處理器都同時使用到3種方法來提升處理器性能

----------------
溯源Tegra K1的變革 從全美達到安騰再到丹佛

溯源Tegra K1的變革 從全美達到安騰再到丹佛

分類: 新型微結構評估
【本文已刊登於《微型計算機》2014年10月上期】

導語:一年一度的半導體工業界盛會Hotchips於近日召開,備受關注的NVIDIA-丹佛計划拳頭產品Tegra K1 64位版本在大會上首次披露其微結構設計的信息,相當激進的七路超標量設計,以往的主流處理器上從未出現過的動態二進制翻譯+動態剖析器,不同尋常的指令緩存結構,這一切將Tegra K1推上浪潮之巔 —— 它的變革跨越之大,幾乎完全拋棄了在微處理器市場上早已佔據統治地位的硬件主導亂序執行機制,令十餘年時間以來主流處理器微結構框架以內所做的種種小幅調優都黯然失色。如此銳意進取的新結構到底從何而來,我們又該如何期待它的表現?本文將從梳理Tegra K1的歷史背景入手,帶領讀者們一探究竟。

二進制翻譯:打破指令集兼容屏障

2006年,NVIDIA低調收購了一家名為Stexar的創業公司[1],這家公司截止被收購時創立尚僅一年,可以說是立足未穩,但是NVIDIA看中的並非是Stexar尚未顯山露水的經營業績,而是這家公司的核心團隊:Stexar的CEO是曾為Intel工作22年之久,從Pentium Pro直至Pentium 4時代長期管理開發工作的Randy Steck,工程團隊中據傳還有一批來自Intel的好手,其中包括Pentium 4的主要設計者之一Darrell Boggs。

溯源Tegra K1的变革 从全美达到安腾再到丹佛
圖 1 NVIDIA CEO黃仁勳與他招入麾下的兩位前Intel工程師Gary Brown(左),Darrell Boggs(右),這兩位工程師是Tegra K1芯片的兩位主要貢獻人。圖片來自這裡。

這一批有生力量加盟NVIDIA不免讓人浮想聯翩,儘管NVIDIA在這次收購上保持了低調,但是被激起好奇心的國內外媒體都對這次收購給予了許多關注,有許多人推測,長期以來倚重圖形處理業務的NVIDIA這次將一眾處理器設計人才收入麾下,是發出了準備自行開發處理器的信號。加之NVIDIA挑中的這批人身上有難以磨滅的Intel烙印,因此坊間關於NVIDIA打算入主x86的消息不脛而走[2]。

新處理器的開發,必將面臨指令集的選擇問題。06年的移動手持設備還沒有享受到今天這般的全民狂熱,當時的處理器市場上ARM與x86劃江而治的格局也沒有今天這麼明晰,從高性能計算到個人電腦,x86都是鐵桶一般的事實標準,如果採用x86之外的其他指令集或者基於自己定義的指令集設計全新處理器,就意味著從操作系統到編譯器以及開發工具鏈,都需要重新構建,更麻煩的是還得說服公司外的廣大軟件開發者跟進,這就幾乎變成了一項不可能完成的任務。當年Intel和HP兩大巨頭聯手主推基於新指令集的安騰遭遇慘敗,其中一部分原因就在於此。設計新的處理器難,在新的處理器上培養起一套生態系統則是難上加難。所以擺在NVIDIA面前的可供選擇的指令集確實不多,從這點上來說,當NVIDIA收購Stexar前後時爆出的種種入主x86的傳聞也不算是完全無根無據。

而嘗試進入x86陣營則必然遭遇Intel和AMD聯手經營多年的專利壁壘的阻擊,如果沒有x86指令集授權又硬要兼容x86的話,擺在NVIDIA面前的最可行選項,就是二進制翻譯。所謂二進制翻譯,就是將一種指令集下的代碼用另外一種指令集表示出來,例如x86指令集中的MOV指令允許訪問內存,在ARM指令集上就要翻譯成對應的LDR類指令等。二進制翻譯技術的存在使得指令集之間的天塹被打破,用MIPS這種較為開放的指令集來翻譯執行x86也成為可能,這意味著NVIDIA這樣位於x86壁壘之外的公司理論上也可以設計自己的處理器進入覆蓋面廣闊的x86市場與Intel和AMD競爭,如果二進制翻譯的封裝足夠好,還可以做到對上層軟件開發者透明,只需要極小的改動或者完全不需要改動就能把應用程序遷移到新的生態系統中。

逝去的先驅:全美達「漂流者」

使用二進制翻譯兼容其他指令集這一做法,早在NVIDIA收購Stexar之前,就有一些企業和學術研究機構分別做出了嘗試,其中有多少人曾經嘗試過針對x86的二進制翻譯已不可考,但幸運的是,直到今天,這些試圖另闢蹊徑的項目中仍有一個被後人反覆提及:一家勇敢無畏,值得後世銘記的創業公司曾將x86的全系統級二進制翻譯付諸現實,在缺乏資金支持又受到Intel持續訴訟重壓的情況下推廣了安騰以外的一支截然不同的VLIW微結構派系。這家公司的名字叫做全美達(Transmeta),第一代芯片產品被它的締造者們命名為「漂流者」(Crusoe),也就是英國著名作家丹尼爾·笛福的不朽名著《魯濱遜漂流記》英文原名」Robinson Crusoe」的第二個單詞。

溯源Tegra K1的变革 从全美达到安腾再到丹佛

圖 2 全美達「漂流者」核心

為x86這樣一個定義混亂滿是補丁的指令集做一個維持精確異常的全系統級二進制翻譯,光是保證功能正確性就已經殊為不易,而全美達還要回應一些針對二進制翻譯天生性能劣勢的質疑,處境之艱險與荒島求生的魯濱遜確實有幾分相似。

二進制翻譯從實現方式上來說主要分為兩大派系,一派是靜態二進制翻譯,也就是在程序執行前一次性將所有指令全部翻譯好,再開始執行,另一派是動態二進制翻譯,主張執行一條翻譯一條,翻譯過程與執行過程穿插進行。顯然,翻譯指令的過程是永遠無法完全避免的一層性能開銷,是永遠烙在二進制翻譯技術身上的原罪。兩害相權取其輕,乍看之下似乎是靜態二進制翻譯性能更好,一次翻譯便可終生無憂,處理器不必在代碼執行過程中反覆喚起翻譯器來解釋自己看不懂的指令,而動態二進制翻譯則不然,反覆喚起翻譯器引入的切換開銷暫且不提,每一次碰到重複指令都得重複翻譯,這是動態二進制翻譯的一大硬傷,為了讓動態二進制翻譯的性能逼近靜態二進制翻譯,一種通行的做法是引入代碼緩存(code cache),將經常使用到的翻譯後指令保存在緩存當中,以後再碰到的時候就不用喚起翻譯器來重新進行翻譯了。代碼緩存的加入與其他優化一起,令動態二進制翻譯的翻譯性能可以與靜態二進制翻譯有一拼之力,到1995年前後,動態二進制翻譯執行的速度已經可以達到原生代碼執行速度的三分之一,靜態二進制翻譯則可以達到原生代碼執行速度的二分之一[3],而全美達「漂流者」以及後繼產品的出現,讓二進制翻譯兩大派系的傳統站位徹底掉了個個兒,動態二進制翻譯的性能開始反超傳統上被認為性能更優的靜態二進制翻譯,這其中的兩大關鍵技術,就是動態剖析(Profiling)與多層次優化。

反超籌碼:動態剖析 + 多層次優化

動態二進制翻譯器扮演的角色本質上是一個編譯器,不僅要把指令翻譯成底層機器能識別的形式,還得做傳統的編譯器必做的一些編譯優化,而有的編譯優化流程相當複雜,導致翻譯器跑了幾千條指令才能向後輸出一條翻譯指令,這個開銷大得完全無法接受。因此全美達「漂流者」的二進制翻譯器引入了多層次優化,根據代碼運行頻度的高低,可以選擇優化較淺但是翻譯速度較快的流程,亦或者選擇優化較深但是翻譯速度較慢的流程,這是在代碼緩存以外的另一項幫助大幅降低翻譯開銷的技術[3]。但是無論翻譯優化如何分層,都只是相當於節流而無法開源,分層再細緻也只是能夠逐漸逼近靜態翻譯的性能,助力動態二進制翻譯徹底完成反超的,更應該歸功於動態剖析。

傳統的編譯器優化,需要編譯器在代碼運行前就提前猜測一些代碼中可能出現的特徵信息,例如分支的走向,代碼塊會不會觸發異常等等,但是巧婦難為無米之炊,這些特徵信息往往需要把代碼實地跑過一遍才能知道,提前猜測在很多時候只能是盲人摸象。在90年代中期,編譯器在SPECint測試集上提前猜測分支走向的準確率僅有75%左右,落後同期的硬件運行時預測器20%上下。為了讓編譯器獲取到這些信息,一個直觀的做法是,讓程序實地試跑,編譯器在一旁觀察它的行為特徵,等到試跑結束,編譯器已然胸有成竹。最激進的一些編譯器優化往往需要試跑的介入才能有效完成,這個過程被通稱為剖析。儘管剖析具備更好的性能優化潛力,但是這項技術長期被束之高閣,因為程序的運行也需要人來給定運行所需的輸入數據,而大部分開發者並不願意接受這麼麻煩的編譯流程,大家想要的只是一次無需干涉的自動化編譯,然後上線部署。退一步來說,就算程序員們願意給一次輸入,編譯器也不會滿足,因為代碼的運行時特徵與輸入數據相關,不同的輸入數據可以導致代碼表露出不同特徵,為了實現較高覆蓋率,程序員們需要給定多次輸入進行多次試跑才能達到比較好的效果,這一下可就讓軟件開發者社區徹底撂挑子了,而編譯器又不能自己推斷出每個程序需要的數據輸入是什麼樣子,於是剖析在開發實踐中被冷落也就情有可原了。除此之外,剖析作為編譯優化的一種,也有著每一項編譯優化技術都有的難言之隱:編譯一般只進行一次,於是優化機會只有一次。寶貴的唯一一次。

如同人在少年青年壯年老年時的身體狀況,程序執行的整個生命週期中出現多個特徵明顯不同的階段是常有的事,為每一個階段選擇最優的優化策略是最好不過的,但尷尬的是,編譯只能進行一次,經過編譯以後,二進制代碼就完全固定無法再更改[4],即便編譯器在試跑中觀察到了同一段代碼上有多種不同的特徵交替出現,也只能為其中一種情況做優化,若要動態地調優,編譯器就必須獲取這樣一種能力,在程序出現一種特徵時,收回已經編譯好的這段代碼塊,替換成功能相同但是為這種特徵專門優化過的代碼塊,然後繼續執行。這種能力在靜態翻譯和靜態編譯的框架下和痴人說夢沒有多大差別,而動態二進制翻譯則不然,執行一段代碼翻譯一段代碼的基本法則本來是它的阿喀琉斯之踵,此時卻轉變成了斬殺靜態二進制翻譯的伊蘭迪爾之劍。每一次執行代碼時動態二進制翻譯都有機會重新調起翻譯器,因此優化策略可以隨著代碼特徵不同隨意切換,這令它與一眾編譯剖析優化技術形成天作之合,靜態二進制翻譯下受限於運行時信息的缺乏而無法有效完成的優化,在動態二進制翻譯的框架下全部成為可能,而動態二進制翻譯與剖析的結合所形成的動態剖析技術還自然而然地順手解決了剖析優化需要程序輸入的難題!

溯源Tegra K1的变革 从全美达到安腾再到丹佛
圖 3 全美達「漂流者」的第二代Efficeon的表現,超越定位區間相同的Intel移動處理器。

這個一箭雙鵰令人拍案叫絕的idea的成形是否出自全美達「漂流者」的獨立工作,現在已經難以驗證,全美達公司掙扎幾年之後終究未能達到外界預期,被Novafora公司收購。回顧這段歷史時我們唯一確信的,是這個idea的力量與其他設計考量一起,令全美達這位先驅者走向了一條獨一無二的軟硬件協同設計道路。為了進一步掙脫編譯時優化的桎梏並提高二進制翻譯性能,全美達從一開始就為「漂流者」選擇了超長指令字(VLIW)結構。這是一條與主流微結構平行,經歷了多年的研究和工業實踐之後在通用處理器市場上仍未收穫廣泛認可的結構,為什麼全美達會青睞VLIW,VLIW又為何在通用處理器市場上缺乏建樹?

失敗的挑戰者 : VLIW

縱觀Intel,IBM,AMD,ARM,以及曾經的DEC Alpha,MIPS等各大芯片巨頭,他們所推出的現代高性能處理器,幾乎全部是基於上世紀60年代CDC 6600的記分板算法與IBM 360/91的Tomasulo算法發展起來的框架所搭建,硬件控制下的分支預測—取指令—解碼指令—寄存器重命名—指令分派/亂序發射—重排序緩衝區—順序回退,這一套框架儼然鐵通江山,在長達近三十年的時間裡面竟然沒有發生一次顛覆性的變革,這從側面說明了硬件主導的多發射亂序執行框架的性能優勢已經相當穩固,同時也說明其他派系的微結構例如數據流結構等,在兼容性、開發/遷移難度、絕對性能,絕對功耗乃至性能功耗比等指標中存在至少一個的短板,使得現今的硬件亂序多發射框架得以逐步發展直至完全定形。

溯源Tegra K1的变革 从全美达到安腾再到丹佛
圖 4 Itanium 2 徽標。這顆CPU曾被寄望為未來之星。

但在這三十年時間裡,硬件亂序多發射框架的發展也並非一帆風順,迄今為止聲勢最大的挑戰者大概是Intel和HP聯手推出的Itanium。
Itanium的主要設計出發點之一是,硬件控制下的亂序多發射指令調度非常複雜而且功耗較高,如果能把主要調度工作交給軟件在編譯時解決,依靠編譯器來發掘出同樣多的指令級並行度,硬件的設計上就能簡化許多,甚至完全卸下調度負擔,從而降低設計複雜度和功耗。與它基本同期誕生的全美達「漂流者」採用VLIW的原因也大致如此,只是全美達在軟硬件協同設計,特別是動態剖析上考慮得比Intel更遠一層。由於概念相對新穎,而且背後站著Intel與HP兩大靠山,Itanium的首輪進攻聲勢浩大,Intel直接為Itanium所使用的指令集起名IA64,寄望於用這個全新的芯片擊敗AMD等競爭對手,確立64位指令集的事實標準,業界著名市場調研機構IDC也對Itanium期望甚高,豪言Itanium服務器將有380億美元的銷售額。

溯源Tegra K1的变革 从全美达到安腾再到丹佛
圖 5 Itanium服務器實際銷售額(紅線)與歷年的銷售預期對比,圖片來自維基百科

然而第一代Itanium問世後,其實際表現令業界大跌眼鏡,性能相比同時期的Pentium 4落後幅度之大已經到了令人瞠目結舌的地步,由於Itanium的指令集與x86不兼容,只能依靠二進制翻譯執行,在某些benchmark上,二進制翻譯之後的代碼執行速度居然被石器時代的486擊敗[5]。儘管Itanium 2的性能相比前代一口氣翻了四倍,但是浮點性能仍然落後於同時期的Power5,整數性能也落後於同時期的Pentium 4,雪上加霜的是,Itanium的設計複雜度和功耗卻不降反升,隨著VLIW理念所期許的設計複雜度與功耗優勢化為泡影,IDC也越來越心虛,不得不一次又一次地調低銷售預期,最後Itanium服務器的實際銷售額尚不足初始預期值的二十分之一,幾成業界笑談。由於Itanium的孱弱,AMD用自己的64位指令集牢牢掌握了64位時代的指令集先機,Intel不得不罕有地向AMD低頭,AMD64這個名字被許多開發者採用,寫進了他們的軟件項目當中作為64位指令集的民間非正式名稱,而Intel的Itanium也寫進了鼎鼎大名的《量化研究方法》作為典型失敗案例分析。


回天乏術,「基本不可能寫出那樣的編譯器!」

公平地說,Itanium所代表的VLIW流派並非一無是處,在研究VLIW的過程中催生的一些優化策略,特別是編譯器優化方面,得到了後繼者的傳承,如果沒有Itanium和其他VLIW結構上的研究與工業實踐,人類對編譯器與軟硬件協同設計的認識和理解就不會有今天的高度。但是,Itanium的一敗塗地極大地損害了二進制翻譯與VLIW的形象,更加鞏固了硬件亂序執行的主導地位。計算機科學界的泰山北斗Donald Knuth在08年接受採訪時炮轟體系結構研究錯誤走向了多核心方向,順帶地就把Itanium踩了一腳:「基本不可能寫出那樣的編譯器!」

Donald Knuth的擔憂不無道理。Itanium微結構的設計與全美達」漂流者」一樣,受到編譯器能力的極大影響和制約,幾乎整個微結構上的細節信息都開放給了編譯器,許多地方還加上了推測性標記來幫助編譯器實現激進的推測執行來縮短與硬件亂序調度的性能差距,但饒是如此,編譯器的能力仍然不足以完全信賴,Itanium不得不加入了硬件負責控制的分支預測和寄存器重命名、記分板等部件。嚴格來說,從這一時刻開始,Itanium就不再是純VLIW結構了,而是一個糅合了VLIW與硬件亂序調度二者特徵的怪胎,在編譯調度能力跟不上的情況下強行將主要調度工作轉移給編譯器,同時不顧主頻和功耗上的倒退強行將後端執行寬度提升,最後又引入硬件調度作為補救,設計複雜度不降反升也就可以理解了。Donald Knuth的話實際上也代表著體系結構研究社區內相當一部分人的看法,相比硬件亂序調度來說,編譯調度的孱弱已經回天乏術,隨著指令級並行度研究熱潮的冷卻,這一話題關心的人越來越少,對VLIW這種由編譯主導的微結構的懷疑也就隨著時間的積澱而固化下來。在Itanium之後十年,儘管一些有關VLIW的研究項目仍在進行,但是市場上沒有任何一種主流處理器採用VLIW結構,硬件亂序多發射的執行框架已經是事實上的唯一選擇。

NVIDIA: 「微結構的未來在於動態剖析」

Itanium在主流市場上失聲之後十年,VLIW派系的微結構再也沒有向主流市場發起成建制的進攻,直到2014年初,NVIDIA在CES大展上第一次向外界透露丹佛計劃主角——Tegra K1的技術細節,業界才再次震動。PPT上的「7-way superscalar」(七路超標量)關鍵字曝光以後,一些IT評論家敏銳地意識到NVIDIA很可能使用了VLIW來實現這樣的執行寬度,隨後關於動態二進制翻譯、前全美達團隊成員介入開發的猜測也塵囂日上。

溯源Tegra K1的变革 从全美达到安腾再到丹佛
圖 6 丹佛計劃,引發許多討論的7路超標量執行

到了今年8月,從Stexar入職NVIDIA的前Intel架構師Darrell Boggs現身Hotchips大會向業界介紹Tegra K1的微結構,這些猜想才得以最終確定,只是二進制翻譯的目標指令集從x86變成了ARM。儘管PPT和宣傳文稿上並沒有明確出現VLIW的字樣,但是整體微結構框架中所使用的理念實際與我們在上文中介紹的如出一轍:動態二進制翻譯,動態剖析,編譯控制的亂序執行(VLIW),並且其核心創新動態代碼調優技術身上能看見一些當年全美達「漂流者」的影子。由於軟件調度的優勢,在VLIW上做到七路超標量根本不稀奇(Itanium曾做到12路),對於Tegra K1來說,意義最大的並不在於執行寬度。Itanium在主流市場上失聲十年之後,NVIDIA選擇讓Tegra K1再度以VLIW + 動態二進制翻譯的面貌重回主舞台,拋棄了成熟的硬件亂序執行框架,這一選擇背後的意味才是最耐人尋味的地方。

如果不出意外,Tegra K1將會是此後NVIDIA在移動SoC上的拳頭產品,有了這個背景,Tegra K1應該會是繼Itanium之後另一個出貨量級相對較大的VLIW芯片。對於NVIDIA來說,推出這個芯片伊始,就是一場賭博,背離主流微結構已經鋪好了三十年的硬件調度路線,再度選擇了通用處理器市場上不被看好的VLIW,是不是有什麼特別的考慮?儘管通用處理器市場上VLIW遭遇慘敗,但是VLIW的設計理念在嵌入式低功耗市場上卻受到青睞,簡化硬件設計降低功耗,由軟件來發掘指令級並行度,剛好與嵌入式低功耗市場的需求不謀而合。加上動態二進制翻譯層的介入,傳統VLIW所面臨的編譯尷尬也得到瞭解決,底層硬件結構更新以後,只需要更新翻譯器這一層軟件即可,可以通過打補丁之類的方式實現,不再需要對所有程序全部重新編譯,就能享受到新結構帶來的好處。

溯源Tegra K1的变革 从全美达到安腾再到丹佛圖 7 動態翻譯與動態剖析在剛開始執行時帶來了較大開銷(非淺綠色部分),但是隨著編譯動態調優的逐步深入,性能開始逐漸逼近理想值。

截止目前基於這種全新結構Tegra K1的機型還未量產上市,因此性能方面的測評還為時尚早,新的動態二進制翻譯器會引入多大的性能開銷,Tegra K1的底層硬件如何與動態剖析器進行軟硬件協同設計,動態剖析器收集了哪些程序特徵信息,做出了哪些優化,實際表現是否會如NVIDIA在PPT上宣稱的那麼好,仍是未知數。但就NVIDIA脫離成熟道路而勇敢選擇VLIW+動態二進制翻譯,將動態剖析大膽引入主流微結構這一做法來說,是非常值得讚揚和鼓勵的。如果Tegra K1表現給力,它將有機會重新改寫教科書上對VLIW派系的評價,重新定義一種新的微結構發展方向,從這個角度上來說,Tegra K1芯片的設計決策所關係到東西遠不止NVIDIA在移動SoC市場上的盈利與勝敗,從更長遠的部分來說,它也代表著沉寂已久的VLIW派系再次對硬件亂序執行的傳統框架發起一輪新的衝擊。

希望幸運女神這一回站在Tegra K1一邊。


有人問既然 VLIW 的安騰和全美達都失敗了,那為什麼還要再次挑戰這個看似毫無優勢的設計方向呢?我的看法如下:

相較於 OoO,VLIW 的硬件更為簡單,更多的面積可以用來設計更寬的架構和更大的緩存,或者索性為 SoC 中的 GPU (對 NVIDIA 來說尤為重要)、Accelerator 換取更大的空間。
相較於 OoO,VLIW 在 Perf/Watt 上更有優勢。(見表4:http://www.lanl.gov/radiant/pubs/sss/sc2002-sss.pdf)

換句話說, Denver 的架構幾乎就是為了移動設備而生的。




10年前連英特爾自己都不相信X86 因此誕生了安藤

就是迫於市場因素無奈接受了他

注意看底下藍字



_------------------—---
2006-07-24發表


逐漸迎向曙光的Itanium
5年來,Itanium未達成外界所賦予不切實際的期望,但再長的隧道終究有其盡頭,事實上,歷代Itanium處理器與伺服器並非一團糟,雖然飽受缺乏應用程式與延期之苦,其效能表現、低耗電、可靠性和延展性卻遠超過英特爾原先的保證。

Itanium的危機與轉機
回顧Itanium的危機與轉機,五年來的荊棘之路,我們將進一步瞭解進入高階伺服器市場的高門檻,與推動新架構的高風險

x86真能無所不在?
AMD負責K5處理器設計的總工程師Mike Johnson,曾在1994年講過一句被後人經常引用的名言:「x86不只複雜,它根本毫無道理可尋。X86的複雜性並非不可克服......x86最大的弱點是缺乏足夠的暫存器與難以處理的複雜定址模式」,一語道破最普及的指令集架構,實際上卻充滿缺陷的設計。

回顧Itanium發展史
環顧處理器發展史,很難找到像IA-64指令集和Itanium處理器一樣,被無數人前仆後繼唱衰,還視為「政治正確」,有人稍微提出正面的看法,就被抹黑成「英特爾100億美元行銷經費的成果」。

英特爾前院士驚爆Itanium開發內幕
英特爾前院士Robert Colwell,今年初發表回憶錄,我們就從最後一章的附錄中,以同處於英特爾Oregon研發部門與P6計畫領導人的角度,檢視Itanium的開發過程、英特爾高層的樂觀期待、英特爾與HP不盡理想的合作關係,以及造成的後遺症。

簡介IA-64指令集架構
毫無疑問的,Itanium最重要的特色,就是其「語言」:IA-64指令集,源自1980年代末期HP因併購Cydrome而進行的VLIW PA-RISC計畫,也是Itanium技術優勢的根源。現在我們就來看看,IA-64指令集究竟有何過人之處。逐漸迎向曙光的Itanium

2001年5月31號,半導體巨人英特爾寄以厚望、預料即將征服RISC與大型主機市場的首款IA-64處理器-Itanium-終於站上高階伺服器的舞臺。英特爾也一口氣公布氣勢磅礡、延續至2005年與90nm製程的巨大未來時程表,企圖心之強,不言可喻。


在進軍高階伺服器的背後,更隱藏了一個更大的雄圖:毀滅英特爾一手創造的歷史包袱80x86,一統伺服器與個人電腦的指令集架構。
當時就有不少人感覺到,有如納粹德國入侵蘇聯宣稱「拯救西方文明免於共產主義侵略,實乃德國人民的歷史使命」,要消滅x86勢必付出重大犧牲,只是沒人預料到,災情竟然慘重到空前絕後的程度。

RISC的凋零激發英特爾的野心
毫無疑問的,從1960年代的CDC6600萌芽,1975年John Cocke領導的IBM 801計畫逐漸成型,繼David Patterson(Berkeley的RISC I)和John Hennessy(Stanford的MIPS)兩位RISC(Reduced Instruction Set Computer,精簡指令集架構)先驅,在1980年代以雨後春筍之勢蓬勃發展的RISC處理器,是執行Unix作業系統的高階伺服器,不可或缺的心臟。RISC一詞,也有別於CISC的x86,等同於「高階」、「高效能」、「高延展性」與「高可靠度」的代名詞。


綜觀1980中期至1990年代初期,大型伺服器及工作站廠商都專注於專屬系統的研發,從指令集架構、處理器、Unix作業系統、編譯器,甚至應用軟體均一以貫之,系統平臺高度垂直整合,統統綁死在一起,例如SGI的MIPS/Irix、DEC的Alpha/OpenVMS、Sun的SPARC/Solaris、HP的PA-RISC/HP-UX和IBM的Power/AIX等。高階RISC/Unix伺服器的市場生態,與CISC大型主機幾無二致,極為封閉。

1990年代以降,持續上升的半導體製程、研發及產能建置成本,製程技術與產品設計的相依性越來越大,導致開發高階處理器所費不貲,市場基礎不大的廠商紛紛撐不下去,陸續退出了RISC處理器的生產及研發工作。另外,高階動態程式語言的普及,促成了大量獨立於指令集架構之外的作業系統及應用程式,降低了更換平臺的門檻,Linux與Java就是最好的例子。

伺服器廠商自己做不了,自然留下讓「專業處理器大廠」填補市場空隙的機會。1987年,HP評估PA-RISC處理器在1992年,將會面臨難以實作四指令發出架構的瓶頸,所以決定發展超長指令集(VLIW)化的PA-RISC指令集。剛好英特爾正替HP代工PA-RISC處理器,急於尋求進軍高階伺服器市場的契機(那時替英特爾打下低階伺服器市場的P6微架構都還沒誕生),加上英特爾自己並不看好x86指令集的未來發展空間,打算另起爐灶,是最適當的合作夥伴,兩家廠商一拍即合,在1994年進行IA-64指令集與處理器研發計畫,1996年公布「Itanium」商標,經歷諸多的技術困難與數次延宕,在2001年推出代號「Merced」的第一代Itanium處理器,半導體巨人終於一嘗宿願,站上高階伺服器的舞臺。

浮載浮沈的「Itanic」號觀光郵輪
Itanium誕生之後,除了死守SPARC的Sun與後來退出市場的IBM與Dell外,其餘伺服器大廠幾乎全面採用Itanium打造高階RISC伺服器。此外,先後併購Compaq與Tandem而同時擁有PA-RISC、Alpha和MIPS伺服器的HP,為了簡化產品線,逐步將作業系統與應用程式轉移至Itanium平臺,在未來全面取而代之,從此停止自行研發生產處理器,都向英特爾購買。

既然有了英特爾產能與研發能量的背書,一群不得不被迫升級的「肉票用戶」,以及眾多伺服器廠商的投靠,Itanium理應會是非常成功的產品,以秋風掃落葉之勢鯨吞市場,坐穩高階伺服器的「產業標準」。事與願違,初代Itanium歷經數次延宕(主因是x86相容性)、晚了近3年才上市,而且相較於市場上的RISC系統,不但效能、價格與系統可靠性都沒有明顯優勢,缺乏應用程式更是這艘大郵輪一頭撞上的大冰山,造就5年來在各媒體隨處可見的「Itanic」號傳奇故事。

理想和現實的差距有多大?IDC曾在1997年樂觀的預估,Itanium將完全征服高階伺服器市場,在2002年銷售規模可達「300億美元」-事後,2003年的高階伺服器市場總額也只不過280億美元,Itanium的實際營收僅10億美元,最初預測的「3%」。佔有近七成Itanium伺服器營收的HP,根據Gartner的報告,2005年第二季的Itanium銷售額1.08億美元,「應該被Itanium取代的」RA-RISC系統高達11億美元,相差十倍,極為諷刺。

挾著壓倒性製程技術優勢的英特爾,理論上應可比其他廠商更穩定的推出新產品,有著更大的出貨量,結果Itanium只有一張非常不穩定的時程表,預計2004出貨20萬顆處理器的目標也跳票了。去年底閃電宣布首款雙核心Itanium處理器「Montecito」延期半年,更讓廠商及客戶抓狂,促使老牌Unix廠商SGI破產的最後一根稻草。



經過半年延宕,英特爾在7/19日正式發表雙核心Itanium 2「Montecito」。

倒吃甘蔗,苦盡甘來
5年來,Itanic觀光郵輪的航程一路顛簸,未達成外界所賦予不切實際的期望,但再長的隧道終究有其盡頭,事實上,歷代Itanium處理器與伺服器並非一團糟,雖然飽受缺乏應用程式與延期之苦,其效能表現、低耗電、可靠性和延展性卻遠遠超過英特爾原先的保證。
以去年部分客戶先期導入、4月出貨的雙核心Itanium 2「Montecito」為例,其電晶體數量超過17億,數倍於現有的RISC高階處理器,標準耗電量介於104W至72W,遠低於主流的x86處理器,僅IBM Power5+的一半強,但效能反而更好。換言之,在高密度運算環境風行,追求節能蔚為風潮之際,Itanium處理器的IA-64指令集,毋需複雜的核心設計即可實作高效能的處理器,更適合打造緊緻省電的高階與高密度伺服器,IA-64這個先進指令集架構展現真正的潛力。先前HP發表新款刀鋒伺服器機箱c-Class時即表示,他們正在開發SuperDome與NonStop的刀鋒伺服器版本,理所當然的,這些都是雙核心Itanium處理器。

當初極不穩定、一再延期、讓企業用戶看不到未來的處理器時程表,在英特爾相繼承接DEC Alpha研發團隊與整個HP Itanium處理器部門後,投入更多資源推動Itanium的開發工作,效果立竿見影,時程更加穩定。由Alpha研發團隊操刀、將與Xeon共通系統架構、預定2008年上市的四核心Itanium「Tukwila」處理器,去年夏天已經首度試產晶粒(Tape Out),英特爾也著手開發下一世代的「Poulson」,兩年就推出一款新產品。從Tukwila開始,英特爾更將進一步透過CSI(Common Socket Interface)連結架構,統一Itanium與Xeon MP平臺,壓低Itanium系統的成本。



在2008年,由前DEC Alpha研發團隊操刀的4核心Itanium「Tukwila」將採用全新的系統架構,整合記憶體控制器,與Xeon MP共通平臺化。資料來源:英特爾。

微軟與Oracle加持Itanium
Itanium平臺最大的罩門-應用軟體,也獲得改善。姑且不論英特爾宣稱「超過8000個應用程式」究竟是不是有意義的數字,老早就該在五年前成立的Itanium解決方案聯盟(Itanium Solutions Alliance)能否發揮群策群力的效益,光軟體市場前兩大廠商,微軟與Oracle對Itanium採取日趨積極的態度,是最有力的強心針。尤其近來微軟展現進入高階伺服器市場的強烈企圖心,從更先進的伺服器作業系統、「企業級」應用軟體到大型主機換機潮所帶來的商機,無役不與。

更重要的是,對於企業來說,採用Windows伺服器最大的好處,莫過於相關人才遠比Unix平臺易尋,擁有極為完備的應用程式資源,而Itanium是唯一擁有微軟加持的RISC平臺,僅此一家,別無分號。HP也認為越來越多企業認真考慮微軟的發展性,Windows將會攻下起碼20%的Itanium市場。

熬過慘淡經營的4年後,Itanium終於在2005年第三季開花結果,根據IDC的統計,Itanium系統的全球整體營收大幅成長,分別是兩大RISC系統IBM Power與Sun SPARC的近一半。在臺灣,Itanium系統衝上Sun SPARC的1.55倍,市場龍頭IBM Power的九成,今年第一季也達到Sun的1.09倍。因長期承受泡沫經濟破滅之苦,企業普遍節約IT支出的日本,Itanium更一口氣甩開IBM和Sun,成為全球最歡迎Itanium的市場,逼著SPARC陣營的Fujitsu,也得推出Itanium伺服器PrimeQuest。

五年來爭議不斷,但已成為高階伺服器市場的要角
樹大招風的半導體巨人、過度樂觀的營收目標、企業界對RISC的迷信與偏見,結合英特爾與HP之間不盡理想的合作模式所衍生的諸多後遺症,使得Itanium一直都扮演著「北港香爐」般的角色-眾人揶揄嘲笑外加蓄意看衰的對象。英特爾也「不負眾望」,不缺給人借題發揮的材料。

但不可否認的,5年下來,事實證明Itanium的確被市場所接受,而且日漸成長,不再是昔日那個軟硬體環境五窮六絕、除指令集架構看似前瞻,其餘均一無可取的吳下阿蒙。如果企業在採購高階伺服器時,希望有多樣化的選擇,不願意被特定軟硬體廠商綁死,保留日後投奔Windows的彈性,請放下既有的成見,重新回頭檢視Itanium的歷史背景、技術特色、潛在優勢與發展軌跡,也許你將從此改變對高階伺服器的觀點及看法。文⊙劉人豪Itanium的危機與轉機

事出必有因,無風不起浪。回顧Itanium的危機與轉機,五年來的荊棘之路,我們將進一步瞭解進入高階伺服器市場的高門檻,與推動新架構的高風險。

危機1:企業對Itanium的不信任感
「很多企業與政府機關的IT部門主管過度迷信RISC這名詞,相信RISC代表最頂級的效能,因對英特爾的刻板印象,認定Itanium不是RISC,所以誤以為Itanium效能不好。」某系統整合商專案經理一語道破無數人對Itanium的誤解,從技術角度來看,IA-64是一個如假包換的RISC指令集,但英特爾與CISC一詞畫上等號,早已行之有年,至今仍難破除。

迷不迷信倒還不是重點
,他表示,對系統整合商來說,「不管黑貓白貓,客戶要的就是好貓」,採購過程中還會有種種因素,例如成本、與原廠的關係,以及解決方案,而就他的經驗和觀察,用戶普遍比較信賴RISC伺服器與Unix作業系統,畢竟更換高階系統風險太大,「沒人想當第一個白老鼠」,像HP的PA-RISC系統的營收仍高於Itanium,其因在此。更有人一針見血的表示,IBM的用戶會拒絕Itanium,原因很簡單,「IBM沒有Itanium產品」。

轉機1:選擇性最佳的RISC平臺
這世上沒有真正的「完全開放平臺」,使用相同處理器也不代表就可以輕易轉換系統到其他廠商的產品上,宣揚「開放 vs. 封閉」十字軍東征般的激情口號更是毫無營養的口水,不過Itanium仍是廠商最多、選擇性最佳的RISC平臺,這點倒是毋庸置疑。

危機2 :對英特爾的偏見
外界對英特爾「僅生產個人電腦與低階伺服器處理器」的刻板印象讓企業裹足不前。「客戶問:用英特爾處理器打造出來的伺服器,憑什麼賣這麼貴?」臺灣Fujitsu產品經理張仲秋分析企業面對「Intel Inside」伺服器時,抱持的成見與心態,這也是英特爾進軍高階伺服器市場的心理障礙。

偏見是一回事,在多核心處理器確為趨勢,軟體授權走向按實體處理器數目計價之後,英特爾遲遲無法推出雙核心Itanium處理器,就成為成本上的大弱點,尤其當遭遇像IBM這種技術實力雄厚、不惜血本都要維持效能領先的競爭對手,因為需要安裝兩倍以上的處理器才能抗衡IBM的Power系統,代表兩倍以上的軟體價格,在「效能過剩」的呼聲背後,經常被忽略的成本。

不需要頂級效能與高可靠性,又長期使用x86應用程式的企業,直接採用雙核心Xeon與Opteron,還省事許多。英特爾千呼萬喚始出來的雙核心Itanium 2「Montecito」暫時紓解燃眉之急,只是競爭對手並不因此停下腳步。IBM預定今年內將發表的Power6處理器,採取5GHz以上的超高時脈架構,號稱將有「Power5的四倍效能」-Power5目前還是地球上最強的伺服器處理器,而四核心Itanium上市卻是2008年的事情,這場爭奪效能王者的戰爭還有得打。

轉機2 :英特爾研發能量的後盾
也許「僅生產個人電腦與低階伺服器處理器」是一種偏見,但反過來說,身為最大的半導體與處理器廠商,英特爾享有壓倒性的研發能量,而且製程與產能的投資早已被龐大的個人電腦處理器出貨量吸收了。

此外,優異的效能應該是選擇Itanium的理由中,最著無庸議者,Montecito正式推出後(過去一年已經不少用戶導入),Itanium單一核心效能優異、卻無雙核心版本的弱點,也從此煙消雲散。基本上,從Power4和Itanium 2出現後,僅剩IBM和英特爾兩家公司具備爭奪高階處理器效能桂冠的資格,從SPEC CPU 2000到TPC-C之類的效能指標,都可以看到極為激烈的軍備競賽。我們有充分的理由相信,挾著製程與指令集架構的雙重優勢,Itanium依舊將是效能頂尖的產品。

危機3 :缺乏明確的未來
企業要評估全新的伺服器架構,首要考量莫過於「這架構能穩定發展」,以防未來不會變成孤兒。Itanium不穩定的產品時程表,勢必打擊企業的信心。「衰話說了一千遍,也會變成真的」,多年來無數媒體與分析師組成合唱團,前仆後繼的唱衰Itanium,更是功不可沒。近期英特爾為了提振獲利,進行組織改造,出售營運表現不佳的部門,按照「慣例」,Itanium再度被預期是首波開刀的對象(英特爾近期以6億美元售出網路處理器部門)。

但就算傳言都是空穴來風,Itanium仍註定是一個燒錢的部門,難有獲利挹注。數年來,IBM就一再表示,Power處理器的應用遍及各領域,有穩定的發展基礎,而Itanium除了規模有限的高階伺服器市場外,沒有業外收入。英特爾願意當散財童子到何時,沒人敢打包票,雖然當初Itanium解決方案聯盟成立看來是「1400億美元的商機,先燒個100億美元都划算」。

轉機3 :Itanium能賣給誰?
假設英特爾希望自己在企業用戶與伺服器廠商的信用徹底破產,不打伺服器市場的腦筋,大可以把Itanium賣掉。問題是:要賣給誰?哪家廠商有能力養活一條高階處理器產品線?更罔論門檻極高的製程技術。臺灣Fujitsu產品經理張仲秋就直言,英特爾真的賣掉Itanium部門,Itanium解決方案聯盟就等於宣布解體了,怎麼想,機率都不高,他也不認為有任何廠商有能力承接,起碼不包括Fujitsu。

危機4 :最佳化應用程式不足
Itanium平臺上的「8000個應用程式」,到底有多少是真正跑得快又跑得好,可充分發揮IA-64指令集特長者,絕對是一個問號,這是全新指令集都會面對的問題。如果企業自行撰寫應用程式,重新最佳化恐怕免不了。菱光電子資訊室副理洪良宏回憶起當年評估時,英特爾還勞師動眾推銷自己的編譯器。

此外,英特爾總是宣稱相較於「封閉」的RISC與大型主機,Itanium是「開放」平臺,企業不再是單一廠商的肉票,真是如此嗎?基於歷史因素,HP佔了近70%的Itanium營收,超過80%的Itanium伺服器使用HP-UX,處理器架構統一了,但Linux與Windows以外的專屬Unix,多半因系統架構相異,無法相容其他廠牌的產品,只要企業被特定應用程式綁死,「開放平臺」根本毫無意義。

轉機4 :唯一支援Windows的RISC
可能很少人注意到一則新聞:根據IDC的報告,去年Windows伺服器的銷售總額首度超過Unix,成為市場上第一大的伺服器作業系統,同時越來越多的Itanium伺服器安裝Windows,甚至某些企業之所以導入Itanium,就著眼未來的Windows。

有別於一般人的刻板印象:Windows就只能作低階伺服器之用,Windows已非昔日吳下阿蒙,展現往高階應用發展的潛力,支援更強大高階功能(如系統不停機熱更新、更嚴密的系統核心保護機制、記憶體/處理器熱抽換與更大型的NUMA系統等)的Longhorn Server登場後,將大幅提昇Windows Server的競爭力。

無論你喜不喜歡微軟這家公司,對於企業來說,Windows伺服器最重要的好處,莫過於相關人才遠比Unix平臺易尋,擁有極為完備的應用程式開發平臺。此外,從SQL Server 2005開始,微軟的企業端應用程式終於真正到達了「企業級」的水準,這些都強化了Windows進軍高階伺服器的本錢。

一言以蔽之,應用皇帝大,如日後打算轉移至Windows者,Itanium是所有RISC中唯一的選擇。「夜奔敵營」的Fujitsu即表示,他們的Itanium伺服器就鎖定Windows與Linux用戶,而非Unix市場。

革命尚未成功,同志仍需努力
樹大招風的英特爾、惟恐天下不亂的唱衰媒體,企業對Itanium的陌生感,以及外界不切實際的過度期待,使得Itanium一直成為備受爭議的焦點,少人真正能放下偏見,以中立客觀的角度,檢視Itanium的真正價值。

不可否認,Itanium歷經五年一路走來,跌跌撞撞,最後走出隧道,重見曙光。很遺憾的,事實證明Itanium平臺的現況其實並不差,但很明顯的距離廠商的宣傳還有一段不小的距離。

最起碼,英特爾標榜的「開放性」與「低成本」,幾乎都被Itanium強烈的HP色彩給抵銷大半。

企業又該如何看待Itanium的未來?據了解,有些企業從不考慮Itanium,只因公司的IT主管「完全不知道有這玩意,腦袋裡只有IBM和Sun」。姑且不論毀譽參半的評價,Itanium的確替企業帶來更多樣化的產品選擇。導入與否,多了解這個已在市場站穩腳步的新興產品,有益無害。文⊙劉人豪x86真能無所不在?

所謂的「計算機結構(Computer Architecture)」,是由IBM在1964年創造給S/360大型主機用的名詞,用來表示「程式設計者可以看到的指令集(Instruction Set)」,指令集如同「電腦的語言」,指令集架構相同的不同電腦可以執行相同的軟體,像英特爾和AMD的x86處理器都可以執行由x86指令集所撰寫出來的程式碼。
因回朔相容之故,指令集架構的良窳和新增指令的方式,深深影響著處理器與電腦整體系統架構的後繼發展。如何針對不同的需求,設計出可長可久,利於實作產品,又兼備導入新技術彈性的指令集,是計算機結構教科書的作者念茲在茲的議題。但是,十多年來這些計算機組織結構教科書中的標準錯誤示範-x86指令集,卻長期支配個人電腦與低階伺服器市場。

x86先天不良,後天失調的原罪
AMD負責K5處理器設計的總工程師Mike Johnson,曾在1994年講過一句被後人經常引用的名言:「x86不只複雜,它根本毫無道理可尋。X86的複雜性並非不可克服......x86最大的弱點是缺乏足夠的暫存器與難以處理的複雜定址模式」,一語道破最普及的指令集架構,實際上卻充滿缺陷的設計。

為了彌補缺陷,新型x86處理器都普遍導入了大量加速機制,暫存器更名(Register Renaming)減輕了暫存器不足的影響,大型化快取記憶體彌補了x86指令集記憶體存取密集(Memory Intensive)的行為模式,而所謂「將複雜的CISC指令轉譯為數個簡單的RISC微指令」更被視為拯救x86的「仙丹良藥」。

但這些解決問題了嗎?其實不然。指令集編碼長度不一、格式混亂與定址模式複雜,影響的並非僅限於指令解碼器及指令擷取單元。設計一顆處理器,最困難的部分是產生控制訊號的控制單元,特別是中斷(Interrupt)與例外(Exception)處理機制,例如系統外部周邊單元,藉由產生中斷讓處理器先執行輸出入動作,或者是發生算術溢位時,讓處理器產生例外,再讓作業系統的設陷(Trap)機制取得處理器控制權。發生中斷或例外之類的事件,處理器都必須事先儲存執行狀態,以確保結束後可以恢復正常的程式流程。

換言之,假如今天一個指令集架構,指令編碼長度從1到17位元組不等,定址模式極為複雜,運算元同時包含記憶體與暫存器,該指令集的控制單元就非常難設計,更罔論「追求高效能」。歷史上成功的x86處理器,清一色皆有漫長的開發時程與天文數字般的研發成本,其因在此。

指令集架構的複雜性直接影響可靠性技術的導入度
所謂的「高階伺服器」並不是處理器數量多就可了事,處理器與系統架構所需的可靠性功能(RAS,Reliability/Availability/Serviceability)才是重點,如此才能確保系統的穩定度,越高階的伺服器越沒有停止服務的本錢,這時指令集架構越單純、越易於設計製造,就有更多的空間去實作RAS機制,反之亦同。



RISC指令集對高階伺服器最重要的價值,就是利於設計與製造,便於導入更完整的系統RAS功能。資料來源:Fujitsu。

像標榜「和大型主機同等級RAS」的Fujitsu SPARC64系列處理器,整顆處理器的所有電路均受到ECC/Parity保護,超過90%的面積可承受單位元錯誤,兼具指令執行錯誤重試功能,這都是任何一顆x86處理器所遠遠不及的能力。臺灣Fujitsu系統工程師吳明宗即表示,「指令集換成x86,幾乎不可能做到」,IBM和Sun也保持相同的觀點。值得一提的是,Fujitsu內負責研發SPARC64的人數,僅有三百人,隨便一顆x86處理器都遠超過這個數字,以Pentium 4為例,英特爾就動員了5000人以上。

臺灣Sun技術副總戴碧勳表示,RISC處理器因設計簡單,自然有較大的餘裕去改進可靠度,SPARC這點凌駕Opteron,後者其實並未達到「Service Grade」的等級。「曾經有某晶圓廠用x86伺服器計算光罩模擬,算出來導線竟然少兩根,最後只好購置四套來自不同廠商的同規格伺服器,用來比對執行結果」。關於Sun剛發表的8路Opteron伺服器X4600,他也表示,其產品定位仍僅限中小企業,而一年之內Sun並沒有開發更大型Opteron伺服器的計畫,高階系統仍以SPARC處理器為主力。

市場需求更是關鍵性的因素。x86處理器之所以給人「便宜」的印象,不外乎市場規模夠大,攤平天文數字般的研發成本,這是x86藉由成本優勢站穩低階伺服器市場的基礎:個人電腦所使用的桌上型處理器和伺服器處理器採用相同的核心。但這也是一把雙面刃:x86伺服器處理器就從此受制於個人電腦,不能充分滿足高階伺服器的需要。


RISC享有經過歷史驗證的大型多路處理器架構
目前市面上唯二可以見到的大型多路x86伺服器,僅有IBM X3與Unisys ES7000,數量及歷史均無法與RISC相提並論。除了x86處理器限於市場定位,遲遲未有廠商發展大型多路x86架構外,指令集的缺陷也是一個主因。在十幾年前,當時的製程技術與設計能力都無法實作大型化快取記憶體及高效率的系統連結架構,x86特別記憶體存取密集的特性,就成為一大瓶頸。

會有人這樣想:那廠商大可以重新開始研發新的多路x86處理器架構,不就得了?問題是,高階伺服器的系統架構都需要漫長的時間來驗證改進,今天站上檯面的高階RISC伺服器,其系統架構無一不是擁有十多年的累積經驗,才證明是極為可靠的產品。IBM X3和Unisys ES7000也都奠基於大型主機的基礎,而且因市場規模不大,所費不貲,相較於高階RISC系統,並無價格優勢。

x86指令集甩不掉的歷史包袱
很多人應該還記得,多年前英特爾曾爆發震驚全球的Pentium處理器浮點臭蟲事件,讓不少人首度意識到,原來看似高深莫測的「高科技結晶」,也是有可能因設計上的失誤,導致程式執行錯誤。事實上,不分指令集,在處理器的電晶體數目動輒以上億為基本單位的今天,處理器技術規格資料中的勘誤表,發布數十、甚至上百個臭蟲,早已司空見慣。Itanium 2也累積了111個臭蟲,AMD K8家族則達155個。

有臭蟲倒還不是大問題,修正就可以了(多數處理器都提供微碼修補能力)。問題是:為了相容「利用」這些處理器臭蟲的應用程式,無法修正,那該怎麼辦?偏偏x86累積下來的應用程式又如此之多,所以才曾有人這樣開玩笑,開發一顆x86處理器,最大的挑戰是:你要如何確定它可以相容所有的舊程式?特別是早期的x86處理器,很多未定義的運算碼並沒有遮蔽掉,假設被人發現,又拿來用了,以後的處理器就只好乖乖的作進去。由此可知,對一個指令集來說,缺乏應用程式是個問題,但應用程式太多,更是一種負擔。
最有名的案例,莫過於「Bubble Bobble(泡泡龍)」這個遊戲,在486上會因計時迴圈溢出(Timing Loop Overflow)無法執行,但又在Pentium 4「復活」了。在x86的歷史上,此類看似不可思議的案例可謂不勝枚舉。尤其x86處理器經歷過太多世代,指令集從16位元、24位元、32位元疊床架屋至64位元,連帶混亂的記憶體定址模式。

另一個隨處可見的例子,很多人可以在電腦的BIOS中看到,為了相容過去8086應用程式的「A20 Gate」選項。8086處理器的定址模式,是藉由16位元的節區(Segment)位址與另一個16位元的節區內(Offset)位址,組成20位元和1MB的定址空間。在1986年,Quarterdeck與微軟的程式設計師發現,一旦打開80286/386/486的A20(第21條定址線)邏輯閘,假使將程式碼放在960kB與1024kB之間,就多出1024kB之後的一個64kB空間。簡而言之,DOS可透過特殊的設計來使用這塊多餘的64kB記憶體,就是微軟HMA(高記憶體區)與HIMEM.SYS驅動程式的由來,源自80286與更高階x86處理器的臭蟲。

問題來了,80286以後的處理器就算是8086真實模式,A20邏輯閘可能因節區和節內組成位址超過1MB而啟動,無法正常相容8086應用程式,因此IBM想到利用8042鍵盤控制器上的某訊號腳位,作為控制A20邏輯閘的開關。打開的話,就可相容8086,但不打開的話,又會因少一條定址線,讓保護模式的可定址記憶體空間少掉一半。這就是該功能的用途,導至今日的所有x86作業系統也必須保留打開該功能的程式碼。

先天架構不良的原罪,進而限制x86引進虛擬化等新技術的可能性。當初VMWare等虛擬化軟體廠商在x86上吃足苦頭,因為x86無法透過設陷機制攔截每個指令的動作,只能土法煉鋼,讓每個指令後面都接著一個中斷,代價就是犧牲效能,這到了英特爾的Vanderpool和AMD的Pacifica後才解決。當其他RISC陸續支援條件執行機制(Conditional Execution),x86卻受限幾無餘裕的指令編碼,僅能新增幾個簡單的指令。

那是不是代表,RISC指令集就沒有這些問題?答案當然是否定的,但對於同步發展處理器與作業系統的RISC/Unix廠商而言,卻容易解決。像IBM第一代的Power處理器也曾留下不少不合時宜、後來在PowerPC取消的指令,Power4以後的系統,只要執行到這些指令,即可透過處理器的設陷機制,呼叫AIX內的模擬軟體執行,毋需讓新的Power處理器繼承這些包袱,「封閉」系統的先天優勢,可見一斑。

戴碧勳坦言,一個系統的可靠度是需要軟硬體彼此高度配合,這是x86平臺的弱點。身為電腦的語言,指令集的「穩定度」也是關鍵,像SPARC V9指令集已經相當完備,數年來一直無須改版新增指令,但x86處理器廠商卻樂此不疲,從MMX、3DNow!、SSE、SSE2到SSE3,英特爾近期又增加16個SSE4指令,英特爾與AMD的新增指令集並不完全相容。同樣是虛擬化技術,英特爾的Vanterpool和AMD的Pacifica就截然不同,增加發生軟體相容性問題的機率。

臺灣Fujitsu產品經理張仲秋對此也表示,x86平臺本來就缺乏高穩定性的作業系統,又欠缺具備軟硬體整合能力的系統廠商,市場仍需要RISC處理器與Unix作業系統。

隱而不現的是,x86指令集先天的複雜性,使得實作高效能x86處理器的廠商多半都採用極為特殊的微架構(如驚世駭俗的英特爾NetBurst),效能延展性不佳,微架構的壽命也不長。但其他RISC處理器,無論IBM的Power4、Sun的UltraSPARC III和Fujitsu的SPARC64V,都是一個微架構「一路用到底」,頂多小幅改良。本來不是說RISC處理器易於設計嗎?為何如此?道理很簡單,這樣會比較穩定,避免更換微架構造成的潛在風險。

邁向未來:指令集架構將決定多核心處理器的發展潛力
在邁向多核心架構的路上,無可避免的,要縮小單一核心的晶粒面積,放棄追求高時脈的超深指令管線,進一步精簡處理器的核心複雜度。這時處理器所採用的指令集架構就扮演著舉足輕重的角色,指令集架構越易於實作與驗證,越不需要複雜的核心就可達到合理的效能,就越適合多核心處理器,導入更完善的可靠性機制與省電功能,更可縮短產品研發的時間。

這也是Sun Niagara支援4執行緒的單一處理器核心,可以簡單到僅有4萬個邏輯閘,英特爾會大費周章發展IA-64指令集與Itanium處理器,IBM想用Power取代S/360的主因。在處理器與半導體製程研發成本如火箭般一飛沖天的時代,相較於CISC,RISC指令集在這裡就佔了很大的便宜。但在沒有導入極為複雜的實作加速機制之前,x86處理器的效能表現都慘不忍睹。x86在嵌入式處理器市場沒有地位,都是RISC的天下,連英特爾的嵌入式與網路處理器產品線都是ARM指令集,而不是x86,其理至明。

更重要的是,伺服器處理器逐步走向多執行緒的省電架構,開始與桌上型處理器的需求分道揚鑣,失去龐大個人電腦市場的保護傘,x86伺服器處理器是否有足夠的市場規模,去分擔開發x86核心的高昂成本與漫長時程,仍是一個問號。

回顧今日Itanium、RISC與x86伺服器處理器的現況,即可發現,多年來眾多「先賢先烈」所預期的技術發展趨勢,似乎紛紛一語成讖。我們有充分的理由相信,x86仍將在低階伺服器與個人電腦市場扮演主角,只是要站上高階市場,完全取代RISC,依舊遍地荊棘,困難重重。也許假以時日,這並非不可能的任務-但絕對不是現在。文⊙劉人豪回顧Itanium發展史

環顧處理器發展史,很難找到像IA-64指令集和Itanium處理器一樣,被無數人前仆後繼唱衰,還視為「政治正確」,有人稍微提出正面的看法,就被抹黑成「英特爾100億美元行銷經費的成果」。

最常見的情況,一手拿著某市場分析機構的統計數字,宣揚「AMD Opteron賣得比Itanium好很多,x86萬萬歲」,另一方面又同時質疑同一家機構對Itanium的樂觀預測,是與英特爾「密切合作」的不實數據。

不過,姑且不論這些批評者是否有合理的立論基礎,對Itanium的歷史有通盤的瞭解,還純粹為反對而反對,今日Itanium樹大招風的形象,有其歷史背景,英特爾本身亦難辭其咎。

不切實際的期望:順利取代x86
說英特爾發展「IA-64」,一開始不抱持日後取代「IA-32」x86指令集的動機,那絕對是騙人的。事實上,第一代Itanium處理器出師不利,因延期失去市場先機,Andy Grove時代的英特爾高層過度重視Itanium對x86的硬體相容性,要負起最大的責任。

根據統計,第一代Itanium「Merced」超過30%的核心電晶體數目花在x86硬體相容性,只為了讓時脈高達800MHz的Merced,做到「介於Pentium 75MHz至200MHz」等級的x86應用程式執行效能。曾有人這樣開玩笑,英特爾為何不乾脆硬塞一個P6核心算了。

有夢最美,希望相隨。原本英特爾的如意算盤是:在1998年推出時脈600MHz的Itanium,藉由高時脈的優勢,其x86應用程式執行效能可和同時期的Pentium 2 400MHz相當,如此一來,就可以將既有的x86處理器產品線逐步轉移至全新的IA-64架構。

結果變成:一再延期的Itanium在2001年上市時,拜AMD K7的強大競爭力之所賜,x86處理器時脈都突破1GHz大關了,浪費一堆時間和成本的x86相容能力根本形同虛設。初代Itanium的效能表現也不佳,應用程式不足更是一大致命傷,兩者皆空,沒有橫掃RISC伺服器市場,取代x86的「歷史性任務」更是遙遙無期。

英特爾是到了Itanium 2才注意到硬體「硬幹」不是正本清源之道,從Montecito開始取消掉相容x86的硬體電路,完全透過IA-32EL(Execution Layer)二進位執行檔轉換器的軟體解決方案,提供x86相容能力。事後證明,成本更低,效果更好,更可保留日後支援新x86指令集的彈性。英特爾甚至預期,在2008年時,Itanium搭配IA-32EL的x86效能更可超越最高階的x86處理器,但已經來不及了。

英特爾缺乏對高階伺服器市場的認知與經驗
產品上市四年後,「終於」在去年成立Itanium解決方案聯盟。「這聯盟在四年前就成立,該有多好」恐怕是所有軟硬體廠商的共同心聲。英特爾畢竟是處理器廠商,沒有高階伺服器市場的認知與系統整合能力,這對Itanium的發展造成不利影響。就算是半導體巨人,開發高階處理器、製造大型晶片與驗證產品的經驗,也非一蹴可及。

濃厚的HP色彩,則是推廣Itanium路上的大石頭,其他廠商因擔心HP「球員兼裁判」而裹足不前。最好的例子,就是當HP完全轉移Itanium研發團隊給英特爾後,過沒多久Fujitsu的PrimeQuest就出現了,軟體廠商態度也遠比過去積極。只是五年下來,享有地利之便的HP依舊佔有大多數的Itanium用戶與市場,幾乎與HP畫上等號的Itanium平臺並不見得有多「開放」。

沒有內部競爭對手
IA-64相容處理器僅英特爾Itanium一家,別無分號,不像x86同時有英特爾和AMD兩種選擇,SPARC陣營有Sun和Fujitsu兩家廠商研發產品,最封閉的IBM相容大型主機,IBM過去起碼還有Hitachi可當對手。

換言之,沒有內部競爭對手的後遺症是難以出現更廉價的IA-64處理器,限制了市場規模與普及。我們有充分的理由相信,如果市場上出現第二家IA-64處理器廠商,市場上對Itanium的「雜音」一定會小很多(很諷刺的是,IA-64指令集很多概念都源自AMD的29000 RISC指令集,但AMD並沒有繼續發展下去,而是全力投入x86市場),但這一天有可能到來嗎?英特爾願意開放IA-64實作上的專利嗎?難如登天。

英特爾隨時脫手不玩的疑慮
近來英特爾急於提振公司獲利,加上Itanium的應用面遠不如IBM的Power,除了伺服器以外,沒有其他收益,所以不少惟恐天下不亂的媒體與分析師都預期英特爾最終會脫手Itanium部門,而IA-64的生父、Itanium市佔率最高的HP,自然就是呼聲最高的承接者,也有傳言指出,日本數家廠商企圖聯合接手Itanium,因為日本是全世界最歡迎Itanium的市場。

回過頭來,能賣給誰?假設可以出售,買主得面對製造晶片的問題,而高階處理器有著極高的製程門檻,沒有自有高階製程與產能,難有競爭能力(這也是為何Sun UltraSPARC一直積弱不振的主因)。從這個角度來看,英特爾想賣也賣不掉。但只要脫手傳言陰魂不散,勢必動搖企業對Itanium的信心。

假如歷史可以重來,還會有Itanium嗎?
如果借給英特爾時光機,知道將會得到Alpha,而且同時又享有微軟在Alpha平臺上的巨大投資與現成的x86模擬軟體FX!32,他們還會和HP一起開發IA-64指令集與Itanium處理器嗎?連英特爾自己都承認「Alpha比我們擁有的任何東西都來得好」,延續Alpha的生命會不會比較輕鬆?或者是進一步擴展P6的成果,啟動因保護IA-64而延宕十年的「Yamhill」計畫,順勢將x86 64位元化,專心推動x86 Everywhere,大概今天AMD早就不見了。

無論如何,歷史不會重來,英特爾走上一條通往高階伺服器市場的荊棘之路。也許IA-64指令集終究成功,成為高階伺服器的主流,但答案可能不是Itanium,真正的最大獲利者也不會是英特爾。時間將告訴我們最後的答案。文⊙劉人豪



溫故知新:1999年分析師對Itanium的樂觀期望

「在2002年可橫掃RISC、市場規模到達300億美元」還不是對Itanium的最樂觀預測,在1999年In-Stat/MDR在處理器論壇中,大膽預測IA-64將進入桌上市場,而且在2005年全面取代英特爾的x86處理器產品線。


英特爾前院士驚爆Itanium開發內幕

領導英特爾史上最佳x86微架構P6研發團隊的英特爾前院士Robert Colwell,今年初發表回憶錄「The Pentium Chronicles: The People, Passion, and Politics behind Intel's Landmark Chips」,我們就從最後一章的附錄中,以同處於英特爾Oregon研發部門與P6計畫領導人的角度,檢視Itanium的開發過程、英特爾高層的樂觀期待、英特爾與HP不盡理想的合作關係,以及造成的後遺症。

首先,在1994年Itanium計畫啟動時,基於保護HP商業機密的考量,英特爾建立了公司內的「防火牆」機制隔離Itanium與x86部門,阻礙了技術與意見的交流。由於Itanium是全新架構,一切都在摸索階段,少了既有x86部門累積的資料、模擬數據與經驗,導致開發過程困難重重。

其次,英特爾高層對Itanium保持過高的期待,當時他們還被告知「在1999年,x86處理器就會開始被IA-64取代」,為了保護Itanium,「x86部門不准再提到『伺服器』這個名詞」,全力推動IA-64,限制x86的發展性。Robert Colwell本人與P6團隊卻不認為在2006年前64位元有普及的可能性,而且讓x86指令集64位元化,才是超越競爭對手的捷徑。那時英特爾內部已在爭論此事。

最後,在1999年,英特爾過度樂觀的支票都跳票了,Robert Colwell直接對英特爾高層建議,將第一代Itanium「Merced」視為純粹的研究計畫,等到第二代產品再上市,「如果我們希望新指令集是為了未來25年而生,那多出一到兩年的驗證期絕對是值得的」。結果,以「我們不能接受開發不能上市的產品」為由被打回票。事後證明,一語成讖,Itanium出師不利,Merced變成一個失敗的產品,為Itanic的悲劇搭建最華麗的舞臺。簡介IA-64指令集架構

毫無疑問的,Itanium最重要的特色,就是其「語言」:IA-64指令集,源自1980年代末期HP因併購Cydrome而進行的VLIW PA-RISC計畫,也是Itanium技術優勢的根源。現在我們就來看看,IA-64指令集究竟有何過人之處。



指令集架構的優勢直接反應在耗電量與核心電晶體數目上

  雙核心Itanium 2 單核心Itanium 2 Power5+ 雙核心Xeon MP 雙核心Opteron
代碼 Montecito Madison 9M Squadron Tulsa Egypt
指令集 IA-64 IA-64 Power x86 x86
製程 90nm 130nm 90nm 65nm 90nm
晶粒面積 596 432 245 435 199
耗電量 103W 107W 160W 150W 95W
電晶體 1720M 592M 276M 1328M 233M
最高時脈 1.6GHz 1.6GHz 2.2GHz 3.4GHz 2.6GHz
L2 cache 1.25MBx2 256kB 1.92MB 1MBx2 1MBx2
L3 cache 12MBx2 9MB 外部 16MB 無
核心電晶體數目 18M 20M 35M 50M 40M

追求指令平行化
有別於RISC與VLIW,英特爾將兼具兩者之長的IA-64相關技術命名為「Explicitly Parallel Instruction-set Computing」,追求高度指令平行化的潛能。IA-64的單一指令包編碼長度為128位元,包含三個41位元長的指令與5位元的指令排列模板,後者定義了數種常用的指令順序,可簡化指令解碼。

便於編譯器最佳化
IA-64堪稱是協助編譯器最佳化機制的集大成。首先,擁有多達128個通用暫存器與128個浮點暫存器,遠超過通用/浮點分別僅32個暫存器的RISC指令集,龐大的暫存器群降低記憶體頻寬的壓力與減少程序呼叫時暫存器的資料搬移工作。

其次,為了克服分支負擔和縮短記憶體延遲,IA-64導入預測執行與預測載入機制。最後,暫存器堆疊與暫存器輪轉技術,可改善不同程序傳遞參數和迴圈攤平的效率。

IA-64的問題與缺點
雖然IA-64看似先進,卻有著程式碼體積過大的缺點,如較長的指令編碼、缺乏基底偏移載入、預測執行與預測載入增加程式碼體積,以及整數乘除法無法直接使用通用暫存器作運算元等,根據IBM估算,IA-64程式碼體積高達x86的四倍,直接反映在記憶體使用量上。

此外,IA-64的設計精神在於「毋需實作複雜的微架構,即可設計出省電高效能的處理器」,但龐大的暫存器群與執行單元數,也難以提昇處理器的時脈。

為多核心鋪路
不過瑕不掩瑜,整體而言,IA-64的確遠邁既有的RISC指令集,歷代Itanium也證實IA-64的確便於打造簡單省電又高效能的核心,核心晶粒面積平均僅有同時期x86的一半,利於未來多核心的趨勢。



兼顧RISC與VLIW之長:彈性化的指令包(Bundle)
解除暫存器不足的困擾:龐大的暫存器群

減少分支負擔:預測執行機制(Predication)
降低記憶體延遲:預測記憶體載入機制(Speculative Load)

加速程序呼叫:暫存器堆疊機制(Register Stack)
攤平程式迴圈:暫存器輪轉機制(Register Rotation)

兼顧RISC與VLIW之長:彈性化的指令包(Bundle)

VLIW(超長指令集架構)雖然具備高平行化的特性,但也缺乏日後更動處理器架構的彈性,以及日後被迫重新編譯程式碼的麻煩。IA-64並未限制指令包內的三個指令型態,透過指令編碼最後5位元所定義的常用指令排序,簡化指令編碼,不同指令序列之間也可插入判斷位元,以便於處理器判定基本區塊。





解除暫存器不足的困擾:龐大的暫存器群

暫存器不足一直都是高階語言編譯器的最痛,限制程式碼最佳化的彈性與指令平行化執行的潛力(如發生暫存器相依)。IA-64定義高達128個64位元(實際65位元)通用暫存器、128個82位元浮點暫存器、64個1位元預測條件暫存器以及8個64位元分支位址暫存器,一勞永逸的解決暫存器不足的困擾。

減少分支負擔:預測執行機制(Predication)

分支與條件判斷指令會更改指令執行的流程,縮小程式碼的基本區塊(Basic Block),限制指令平行執行的空間,但硬體分支預測機制的效果亦有其限度。IA-64指令集全面支援條件執行,將分支判斷條件寫入預測條件暫存器,編譯器即可進行最佳化排程,同時執行所有程式碼,再保留所需要的結果。





降低記憶體延遲:預測記憶體載入機制(Speculative Load)

記憶體存取延遲是處理器效能的大殺手,無論是再完善的硬體預先擷取機制和快取記憶體都無法根除這個問題。IA-64指令集的預測記憶體載入機制,允許編譯器預測後面可能需要載入的記憶體位址,先行排程,再比對ALAT(Advanced Load Address Table)的位址紀錄,以確保預測的正確性。

加速程序呼叫:暫存器堆疊機制(Register Stack)

因今日程式架構均高度模組化之故,不同程序的呼叫動作與參數傳遞會消耗大量暫存器數目,製造暫存器之間的資料搬移動作。透過暫存器堆疊機制,只要修改預先建立的暫存器框架(Register Frame)的虛擬暫存器編號,即可重疊不同程序所使用的通用暫存器,毋需搬移資料即可交換不同程序的資料。





攤平程式迴圈:暫存器輪轉機制(Register Rotation)

迴圈攤平(Loop Unrolling)是編譯器經常用到的最佳化手段,避免無謂的條件判斷與分支預測錯誤,但迴圈攤平卻會因前置(Prolouge)與結尾碼(Epilouge)而大幅增加程式碼體積。IA-64無論通用和浮點暫存器均可透過暫存器輪轉機制,直接攤平迴圈,毋需付出增加程式碼體積的代價。




囧rz~ wrote:
這不是從大陸的網站...(恕刪)



1.這篇的文章原文並不是大陸而是美國只是被翻譯過而已

2.X86的分支預測命中率的確是成本比RISC高 而且指令長度不對稱 因為要加寬流水線或是加深指令平行度X86都不利

3.RISC並不一定效率就低 RISC出過超級電腦例如日本那台超級計算機"京"就是京簡只令集體系 個人電腦的IBMPOWER PC架構也是個例子

4.為了向前兼容性X86 80%常用的指令只是不足20%的指令 很浪費電路面積和成本 成本一值比較高

5.X86指令轉換成微指令還要浪費額外成本

6.你只要看看這10年X86的進步幅度就知道了 這個架構已經碰上瓶頸很可能是來自本身的自身架構的缺陷
通古斯卡 wrote:哈哈,這樓主真逗,最近怎麼那麼多人愛講A...(恕刪)


應該說 前提是人家原地不動給他超越 但Intel不是兔子…
s6普通版潛能解放,剛出而已內核改進一下多核會變正常,升上5.1.1就會更好了
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!