在幾年前Intel在P6核心獲得重大勝利之后,開始對它的處理器開發部門進行劃分,其中一個隊伍著重在NetBurst架構,而另一個則是在低功耗、高集成度核心方面,代表產品就是大家熟悉的用于筆記本平臺的Pentium M處理器。
當Intel的NetBurst架構處理器在性能和功耗方面受到全面挑戰后,Intel不得不考慮把高性能的Pentium M處理器架構移向桌面平臺,Israel Development Center (IDC,以色列研發中心)把Dothan的架構重新調整,讓它轉換為原生的雙核,不過Dothan到Yonah的架構調整遠比從Banias到 Dothan要大,除了雙核外,Yonah在微架構方面有很大的調整,并且針對桌面平臺,也推出類似架構的Core 2。
498)this.style.width=498;" border=1 twffan="done">
Barcelona架構特性全覽
而AMD則經歷了從K7到K8的變化,未來預計是K9和K10。就目前來說,AMD將在年中發布的Barcelona處理器是一個很好的反擊機會,第三季度會推出桌面的版本,Intel則會在年底推出轉換到45nm工藝的Penryn,相信今年將是處理器非常熱鬧的一年。接下來,就讓我們來詳細了解一下 Barcelona的微架構情況。
Barcelona是AMD的第一款四核處理器,它不像Intel的四核Kentsfield由兩個雙核Die拼接而成,這也是為什么AMD把它稱為“原生”的原因。同時在工藝方面,它也采用65nm工藝,較K8在制造設計上要復雜很多,Barcelona需要總共 11層金屬層,而K8則為9層、Core 2也只有8層,更多的金屬層會增加制造方面復雜程度,但是對最終消費者沒有太明顯的負面效應。
498)this.style.width=498;" border=1 twffan="done">
在具備四個核心和2MB L3 cache后,Barcelona總共擁有463M個晶體管,較Kentsfield的582M要少119M。更少的晶體管給cache容量帶來了局限性,每個Barcelona核心具備128KB L1 cache和512KB L2 cache,再對四核共享的2MB L3 cache進行一下分割,算起來核心總共有4.5MB cache,而Kentsfield的每個核心則擁有64KB L1 cache和一個共享的4MB L2 cache,整個Kentsfield擁有8.25MB cache,較Barcelona擁有超過80%的容量,這也是在晶體管方面多25.6%的原因。
但是Barcelona又不是簡單的一個帶L3 cache的四核K8,我們可以計算一下它們的晶體管數目,除去cache的晶體管,一個雙核Athlon 64 X2晶體管數目大概在94M,而Barcelona則在247M,雙倍一下也達不到Barcelona的水平,而且簡單的雙倍計算也不是非常準確的,因為 Barcelona只有一個Northbridge設計,所以多出的60M的晶體管是由于架構改進加強后的結果。
每一代CPU性能的提升,最大的根源都是架構方面有非常大的調整。從表中對比K8架構,Barcelona可以說是加強了很多,規格幾乎都是成倍的增長。首先是SSE指令執行位寬,現在被AMD稱為SSE128。在K8架構處理器中,兩個SSE指令是并行處理的,SSE執行單元只有64-bits寬度,一個128-bit SSE指令操作,它不得不分割成兩個64-bit指令操作,同樣的一個128-bit SSE指令被獲取后,它被首先解碼成兩個微操作(micro-ops),這會給這個指令帶來多余的解碼部分,效率上可想而知。
498)this.style.width=498;" border=1 twffan="done">
Barcelona的SSE執行單元則擴充為128-bits(實際上,Intel之前對于core2也是這么做的),一個128-bit SSE指令操作可以不必分割成兩個64-bit操作,這意味著更多的可利用帶寬可以被使用,那個FP scheduler也可以執行這些128-bit SSE指令操作。
498)this.style.width=498;" border=1 twffan="done">
SSE指令執行性能提升后也帶來了另外一個瓶頸:指令獲取帶寬(instruction fetch bandwidth),這些128-bit SSE指令變得更大,同時為了最大化并行處理的解碼數量,每周期32-bytes的帶寬可以很好的解決這個問題,32-bytes的指令獲取除了可以帶來 SSE代碼帶來好處外,同時也給整數代碼帶來了好處。
在這之后CPU可以獲取和解碼更多的指令,你需要能更多的把數據傳到核心中去處理,因此AMD也進一步提高了L1 data cache和Barcelonas SSE寄存器(registers)之間的帶寬,現在Barcelona可以實現2 x 128-bit loads/cycle的性能,同時L2 cache和內存控制器的接口也被提升到128-bits/cycle后,總體上平衡了上面的改進所帶來的性能瓶頸。
SSE128的加強設計,和Intel對Yonah到Merom轉變過程非常相像,在Conroe/Merom之前,Yonah在FP/SSE性能方面和 K8沒法相比,在此前的同頻率下K8和Yonah的性能測試中,各項性能都可以打成平手,只有在視頻編碼方面不是這樣,直到Core 2到來之后,才全面超過了AMD,相信SSE128的設計將給未來的Barcelona帶來不錯的表現。
核心調整
除了以上的改進以外,Barcelona在核心調整方面還有非常多的加強設計。首先從分支預測開始,總體來說,CPU的分支預測器的準確程度取決于設計的寬度和深度,在分支預測器不能有效預測的那些指令數量,決定了多少指令可以快速控制執行單元的運行。K8處理器的分支預測單元就是非常優秀的,而且為它的整體架構做了良好優化。
Barcelona追加了512-entry indirect predictor(512輸入非直接分支預測器),用來預測非直接分支。一個非直接性分支跳轉,它的目的是跳轉到存儲器中的地址指向,換句話說,一個分支有幾個目標。一個非直接分支發送CPU到存儲器的地址,它包含了指令需要被分支到的地址。
Intel追加了非直接預測器到他的Pentium M,設計靈感來源于更好的控制非預測分支數量將會帶來更高效的性能(其中包括功耗方面的表現),這個設計同樣也在此前的Prescott被采用,用來削弱NetBurst架構長管線設計所帶來的性能上的損失。
在Prescott中,這個簡單追加設計帶來了在SPEC CPU2000測試軟件中12%的分支預測錯誤,但是AMD和Intel在算法結構上的區別則不被公開,在SPEC CPU2000的253.perlbmk測試項目中,非預測分支減少是非常明顯的,達到了將近55%。
非直接預測器并不是Barcelona唯一的性能提升亮點,回歸堆棧(return stack)大小較K8有雙倍大小的改進,舉個例子,在一個很長的命令條中,命令代碼包括了很多子程序(比如遞歸函數),CPU實際上會用完所有空間來紀錄它的路徑,一旦開始丟失回歸地址的路徑,就會導致無法進行下一步的分支預測,雙倍大小的設計正好是為了解決這個問題,據說這個改進是在收到一個大型軟件公司的請求才確定的。
更多的優化調整
當然還有一些調整,其中Translation Lookaside Buffers簡稱為TLBs,是用于虛擬地址向物理內存地址映射的作緩存的,TLBs的使用率是非常高的,但是因為程序變的越來越多,對內存的要求也就需要處理器設計者對TLB容量大小進行調整,相對于K7,K8就有增大,在Barcelona上,AMD也在重復這樣的過程,比K8要大一些,但是它們現在支持1G pages,這對數據庫應用和虛擬加載非常的有用,AMD同樣在Barcelona上引進了128 entry 2M L2 TLB,用于滿足更新的程序對大容量的需求。
Intel在Pentium M上引進的另外一個加強設計是更低的integer divide latency,盡管現在它的細節還不是很多,但是AMD說明他們已經在Barcelona中減小這個延遲,我們還不清楚它的設計是不是和Intel的方法類似,但是預計在真實應用中,不會給性能帶來太多的提升。
還有一些不需要明顯提升晶體管數目而提升性能的辦法,就是把一些指令放到特殊的快速編碼通道里面,這樣可以很大程度上縮短指令解碼的長度,作為 sideband stack optimization(邊帶堆棧優化器,后面將具體涉及)優化加強一部分的CALL和RET-Imm指令現在也做了這樣的處理,同樣從SSE registers到 integer registers的MOVs也是這樣。
提到指令,AMD也在Barcelona引進了新的擴展:LZCNT和POPCNT,這兩個指令被用于加密應用中,AMD也是也引進了四個新的SSE擴展:EXTRQ/INSERTQ, MOVNTSD/MOVNTSS,我們將在未來Inel的Penryn處理器中看到。
邊帶堆棧優化器
最初在Pentium M中,引進了一個叫“dedicated stack manager”(專注堆棧管理器)的特性,根據字面上解釋,它是用于控制x86堆棧操作的,比如push, pop, call, return,它的意圖就是為了把堆棧操作從所有運行代碼中分離出來,以讓處理器能夠更加有效的處理其它任務。
在Barcelona中,AMD也引進了類似的叫Sideband Stack Optimizer(邊帶堆棧優化器)的技術,以讓堆棧指令不再需要通過3-way解碼,并通過整數執行單元的堆棧操作了,這個小小的優化設計可以帶來整體性能的提升。
更快的加載
在以前的《新處理器之王!Core 2 Duo全面大評測》文章中,我們對Core 2的智能內存訪問技術進行了解析,在對比系統內存存取表現,AMD K8卻因內建內存控制器而比Intel Core微架構優勝,但由于Core微架構采用短Pipeline Stage架構及頻率相對Netburst微架構低,加上高容量的L2 Cache并內建Shared Router Bus減少FSB使用,因此系統內存控取的表現差距已不像與上代Netburst微架構產品那么嚴重。而為了進一步拉近與K8架構上的內存性能距離, Intel還在Core微架構中加入全新的內存讀取技術,稱為Memory Disambiguation。
498)this.style.width=498;" align=middle border=1 twffan="done">
Memory Disambiguation是一個十分聰明的設計,通過Out of Order過程把內存讀取次序作出分析。在傳統的微架構里,內存讀取是按流程順序而被執行,如圖上例子,Load 4是獨立的Data X讀取執行,也必需要等待其他Store 1、Load 2及Store 3工作完畢,即使Load 4的Data X和前面的資料存取動作并無關系,因為處理器并不會得到前面的動作是否會改變Data X的數值,所以不能重新排序并分析Load 4能否提前執行。
498)this.style.width=498;" align=middle border=1 twffan="done">
在Intel Core微架構中通過智能的分析機制,能預知Load 4的Data X是完全獨立,并可讓它提前執行。正因如此Memory Disambigutaion能減少處理器的等候時間減少閑置,同時減低內存讀取的延遲值,而且它可以偵出沖突并重新讀取正確的資料及重新執行指令,保證運作結果不會出現嚴重,但在正常情況下Memory Disambirutation出錯的機會率很低。
可以看出Intel Core微架構,一個主要特性是加載指令可以繞過以前加載和存儲的指令,平均來說在程序中所有指令的1/3是在加載的時候就完成了,所以如果能夠提升加載性能,你就可以全面提升程序的運行性能,在Core微架構中,加載可以被重新排序,以確保需要這些數據的指令在存儲訪問非常繁忙的時候被執行。
AMD K8架構沒有上面同等的亂序執行的協調能力。在沒有集成內存控制器的情況下,Intel能夠很輕松的執行更多的內存操作,Barcelona采用了類似的方法修正了這個問題,它也能夠重新排序這些加載。但是Barcelona需要等待在決定是否這個加載可以被優先于存儲執行之前,才把存儲地址計算出來,通過這種方式,Barcelona不會有機會預測錯誤。AMD的設計者考慮到采用類似Intel的預測器的做法,但是好像對它的架構并沒有太大益處,AMD 能每個周期產生三個存儲地址,因為它有3個AGUs (Address Generation Units),而相比Intel只有1個,所以Barcelona在這方面有優勢。
從上面看,Barcelona的亂序執行能力加強后,應該會在這方面性能強于Core 2。