一、CPU緩存(Cache)
CPU處理的數(shù)據(jù)是來(lái)自于硬盤(pán)和內(nèi)存,但隨著CPU技術(shù)的發(fā)展,CPU的處理、運(yùn)算能力已經(jīng)大大超過(guò)了存儲(chǔ)系統(tǒng)的供應(yīng)能力,于是出現(xiàn)CPU在存儲(chǔ)系統(tǒng)提供足夠的數(shù)據(jù)前處于等待狀態(tài),而且每當(dāng)CPU的頻率提升這樣的差距就更明顯。那么在CPU等待期時(shí),硬盤(pán)、內(nèi)存所提供、準(zhǔn)備供CPU處理的數(shù)據(jù)存放在哪里呢?其實(shí)這些數(shù)據(jù)都暫時(shí)存在CPU的緩存之內(nèi)。
目前臺(tái)式CPU的緩存分二級(jí):L1(一級(jí)緩存)和L2(二級(jí)緩存),當(dāng)處理器要讀取數(shù)據(jù)時(shí),首先要在L1緩存中查找,然后才在L2緩存中查找,最后才去系統(tǒng)內(nèi)存查找。
每一級(jí)緩存中的數(shù)據(jù)都是下面一級(jí)數(shù)據(jù)的一部分,即L1緩存中的數(shù)據(jù)在L2緩存、系統(tǒng)內(nèi)存、頁(yè)文件中都有。由于CPU首先讀取L1緩存中的數(shù)據(jù),因此內(nèi)置的L1高速緩存的容量和結(jié)構(gòu)對(duì)中央處理器的性能影響較大,容量越大,性能也相對(duì)會(huì)提高不少。這也正是一些公司力爭(zhēng)加大L1級(jí)高速緩存容量的原因。不過(guò)高速緩存均由靜態(tài)隨機(jī)存儲(chǔ)器組成,結(jié)構(gòu)較復(fù)雜(L1緩存是采用了速度非常高的SRAM,這種內(nèi)存單晶元使用4到6個(gè)晶體管,比我們常見(jiàn)的內(nèi)存芯片要復(fù)雜多了),受處理器內(nèi)核面積、制造工藝的限制,L1緩存的容量不可能做得太大。而且當(dāng)L1緩存增大到一定程度后性能便難以明顯提高,因?yàn)镃PU等待數(shù)據(jù)期間存在一個(gè)臨界點(diǎn)──在處理器工作時(shí),停滯時(shí)間長(zhǎng)短保持為一個(gè)常量。此外,增大L1緩存也會(huì)使生產(chǎn)成本提高不少,在權(quán)衡成本和系統(tǒng)性能提升后,最好的方法應(yīng)該是為L(zhǎng)1緩存加附加緩存──即L2緩存。L2緩存位于L1緩存和系統(tǒng)內(nèi)存之間,通常存儲(chǔ)L1緩存中數(shù)據(jù)的擴(kuò)充部分,而L1則主要存放的是CPU最常用的代碼和數(shù)據(jù)(因此L1又分L1指令緩存、L1數(shù)據(jù)緩存),可以這么說(shuō),L1緩存是L2緩存的子集。
總的來(lái)說(shuō),較大的緩存帶來(lái)的好處是可以減少訪(fǎng)問(wèn)相對(duì)較慢的系統(tǒng)內(nèi)存的需求、改進(jìn)文件系統(tǒng)效率并減少?gòu)闹鲀?nèi)存到較慢磁盤(pán)子系統(tǒng)的請(qǐng)求數(shù)量、提供更有效的文件系統(tǒng)緩存行為及較短消息和處理器隊(duì)列長(zhǎng)度。新一代CPU產(chǎn)品都在往大緩存方向發(fā)展:目前主流臺(tái)式CPU的L2緩存已經(jīng)提升到512KB,而迅馳移動(dòng)處理器、Opteron處理器及未來(lái)的Prescott處理器的L2緩存將達(dá)1MB。
此外,為了進(jìn)一步發(fā)揮緩存的效用、改進(jìn)內(nèi)存性能并使之與CPU發(fā)展同步來(lái)維護(hù)系統(tǒng)平衡,CPU生產(chǎn)廠(chǎng)商(如Intel)在CPU中使用了控制緩存的指令。這里有兩類(lèi)緩存控制指令。一類(lèi)是數(shù)據(jù)預(yù)存取指令,能夠增加從內(nèi)存到緩存的數(shù)據(jù)流。數(shù)據(jù)預(yù)存取指令允許應(yīng)用識(shí)別出所需的信息,并預(yù)先將它們從主存中取出存入緩存。這樣一來(lái),處理器便可以更快地獲取信息,從而改進(jìn)應(yīng)用性能。另一類(lèi)是內(nèi)存流優(yōu)化處理指令,能夠增加從處理器到主存的數(shù)據(jù)流。內(nèi)存流優(yōu)化處理指令允許應(yīng)用越過(guò)緩存直接訪(fǎng)問(wèn)內(nèi)存。通常情況下,處理器寫(xiě)出的數(shù)據(jù)都將暫時(shí)存儲(chǔ)在緩存中以備處理器稍后使用。如果處理器不再使用它們,數(shù)據(jù)最終將被移至內(nèi)存。這兩類(lèi)指令都賦予了應(yīng)用開(kāi)發(fā)人員對(duì)緩存內(nèi)容更大的控制能力,使他們能夠控制緩存操作以滿(mǎn)足其應(yīng)用的需求。
注:鑒于緩存對(duì)CPU性能影響較大,目前緩存大小已經(jīng)成為CPU廠(chǎng)商用來(lái)劃分CPU等級(jí)的標(biāo)準(zhǔn)之一。
二、指令集
指令集是CPU所能執(zhí)行的所有指令的集合,是提高處理器效率的最有效工具之一。目前隨著新核心、新工藝的應(yīng)用,新一代CPU的時(shí)鐘頻率提升到3GHz以上,但對(duì)于應(yīng)用層面來(lái)說(shuō),新一代CPU是否能更有效地處理數(shù)據(jù)才是軟件開(kāi)發(fā)人員所最為關(guān)注的。雖然增加處理器內(nèi)部的高速緩存容量可以提高在讀/寫(xiě)方面的速度,不過(guò)這并不能從根本上解決問(wèn)題:當(dāng)數(shù)量巨大的數(shù)據(jù)需要處理時(shí),過(guò)于冗雜的指令會(huì)嚴(yán)重影響電腦的工作效率。那么此時(shí)CPU中所使用、支持的指令集這時(shí)就起到了至關(guān)重要的作用了。從現(xiàn)階段主流體系結(jié)構(gòu)講,指令集可分為復(fù)雜指令集和精簡(jiǎn)指令集兩部分。而從具體運(yùn)用看,多媒體指令集又是其中我們最熟悉、最引人注目的一種。目前多媒體指令集主要有以下幾種:
MMX指令集
MMX指令集是Intel在1996年開(kāi)發(fā)的一項(xiàng)多媒體指令增強(qiáng)技術(shù),其英文名稱(chēng)可以翻譯為“多媒體擴(kuò)展指令集”。它是為多媒體而建立的擴(kuò)展指令集,使用MMX能夠處理多媒體數(shù)據(jù)、圖像和聲音。支持MMX指令的處理器具有57條多媒體指令、8個(gè)64位的MMX寄存器。但MMX只能夠處理整數(shù)類(lèi)型,支持1、2、4、8字節(jié)的數(shù)據(jù),也就是說(shuō)MMX寄存器能夠存儲(chǔ)8組、4組、2組或1組操作數(shù)。被存儲(chǔ)在MMX寄存器中的數(shù)據(jù)能夠進(jìn)行加、減、乘計(jì)算。MMX指令集是Pentium、PentiumⅡ時(shí)代的最主要標(biāo)志之一。
3D Now!指令集
3D Now!是AMD推出的指令集,被AMD廣泛應(yīng)用于其K6-2、K6-3以及Athlon系列處理器。3DNow!指令集技術(shù)擁有21條機(jī)器碼的擴(kuò)展指令集,具有8個(gè)新的寄存器,應(yīng)用于浮點(diǎn)數(shù)處理和幾何運(yùn)算,并且支持加法運(yùn)算、乘法運(yùn)算、除法運(yùn)算、求精度平方根等操作方式。與Intel公司的MMX技術(shù)側(cè)重于整數(shù)運(yùn)算有所不同,3DNow!指令集主要針對(duì)三維建模、坐標(biāo)變換和效果渲染等三維應(yīng)用場(chǎng)合,在軟件的配合下,可以大幅度提高3D處理性能。后來(lái)針對(duì)Intel的SEE指令集,AMD在A(yíng)thlon上開(kāi)發(fā)了Enhanced 3DNow!(也被稱(chēng)為3DNow!+)。在Enhanced 3DNow!中,AMD融入了一些SSE代碼,指令也增加到52個(gè),這樣使用其CPU可以從針對(duì)SSE做最佳化的軟件中獲得更好的執(zhí)行效能。總的來(lái)說(shuō),3D Now!指令集也相當(dāng)出色,但由于當(dāng)時(shí)的Intel在市場(chǎng)上具有傳統(tǒng)的強(qiáng)勢(shì)地位,因此一直得不到軟件開(kāi)發(fā)商的廣泛支持。
SEE與SEE2指令集
SSE指令是Intel在PentiumⅢ處理器中推出的新一代指令集,它有70條指令,其中包含提高3D圖形運(yùn)算效率的50條SIMD浮點(diǎn)運(yùn)算指令、12條MMX整數(shù)運(yùn)算增強(qiáng)指令、8條優(yōu)化內(nèi)存中連續(xù)數(shù)據(jù)塊傳輸指令。理論上這些指令對(duì)圖像處理、浮點(diǎn)運(yùn)算、3D運(yùn)算、視頻處理、音頻處理等諸多多媒體應(yīng)用起到全面優(yōu)化的作用。支持SSE的處理器除了有配備標(biāo)準(zhǔn)的x87寄存器外,還需要有額外的8個(gè)128位寄存器,每個(gè)寄存器存放4個(gè)32位浮點(diǎn)數(shù)。能夠?qū)γ總€(gè)寄存器中的4個(gè)浮點(diǎn)數(shù)進(jìn)行以下算術(shù)操作:兩組浮點(diǎn)數(shù)相加、相減、相乘或相除;也可以反過(guò)來(lái)對(duì)浮點(diǎn)數(shù)求平方根。寄存器中的內(nèi)存能夠任意轉(zhuǎn)移,但是移動(dòng)數(shù)據(jù)沒(méi)有增加數(shù)據(jù)快捷,因此SSE最有效率的方式是封裝好數(shù)據(jù)之后再執(zhí)行。SSE兼容MMX指令,它可以通過(guò)SIMD和單時(shí)鐘周期并行處理多個(gè)浮點(diǎn)數(shù)據(jù)來(lái)有效地提高浮點(diǎn)運(yùn)算速度。雖然SEE指令與3D Now!指令彼此互不兼容,但SSE包含了3D Now!技術(shù)的絕大部分功能,只是兩者實(shí)現(xiàn)的方法不同而已。鑒于SSE得到了眾多軟件開(kāi)發(fā)商的支持,AMD在其Athlon XP處理器上推出支持SSE指令集的Enhanced 3DNow!,雖然也能夠使用SSE對(duì)普通的指令進(jìn)行優(yōu)化處理,不過(guò)效率要略稍于Pentium Ⅲ/4。
后來(lái)在研發(fā)Pentium 4時(shí),Intel又在SSE的基礎(chǔ)上增加了一套包括144條新建指令的SSE2指令集來(lái)提升Pentium 4處理器性能。SSE2是當(dāng)前市場(chǎng)上x(chóng)86處理器最新的SIMD擴(kuò)展指令集,它由兩個(gè)不同的部分所組成:SSE部分和MMX部分。前者主要負(fù)責(zé)處理浮點(diǎn)數(shù),后者則專(zhuān)門(mén)計(jì)算整數(shù)。SSE2寄存器容量是MMX寄存器的兩倍,寄存器存儲(chǔ)數(shù)據(jù)也增加了兩倍,在指令處理速度保持不變的情況下,通過(guò)SSE2優(yōu)化后的應(yīng)用軟件運(yùn)行速度也將提高2倍。由于SSE2指令集與MMX相兼容,因此被MMX優(yōu)化過(guò)的程序很容易被SSE2再次深層次優(yōu)化。值得一提的是Opteron也兼容了SSE2指令集,AMD在Opteron處理器內(nèi)部增加了對(duì)應(yīng)的16個(gè)128位 SSE2寄存器單元,數(shù)量比Pentium 4還要多出一倍。不過(guò),Opteron的SSE2功能是通過(guò)“解釋執(zhí)行”來(lái)完成:SSE2指令代碼被識(shí)別后,必須被轉(zhuǎn)換為Opteron可識(shí)別的x86-64中間指令,然后再進(jìn)行處理。所以O(shè)pteron在執(zhí)行SSE2指令時(shí)要比Pentium 4要慢許多。
三、尋址位寬
位寬對(duì)處理器性能的影響絕不亞于主頻。位寬是指微處理器一次執(zhí)行指令的數(shù)據(jù)寬, 處理器的尋址位寬增長(zhǎng)很快,業(yè)界已使用過(guò)4、8、16位尋址再到目前主流的32位,而64位尋址浮點(diǎn)運(yùn)算將成為未來(lái)CPU發(fā)展趨勢(shì)。受虛擬和實(shí)際內(nèi)存尺寸的限制,目前主流的32位在性能執(zhí)行模式方面存在一個(gè)致命的缺陷:當(dāng)面臨大量的數(shù)據(jù)流時(shí),32位的寄存器和指令集不能及時(shí)進(jìn)行相應(yīng)的處理運(yùn)算。32位處理器一次只能處理32位的數(shù)據(jù),也就是4個(gè)字節(jié)的數(shù)據(jù);而64位處理器一次就能處理64位(即8個(gè)字節(jié))的數(shù)據(jù)。如果我們將總長(zhǎng)128位的指令分別按照32位、64位為單位進(jìn)行編輯的話(huà):32位的處理器需要4個(gè)指令,而64位處理器則只要兩個(gè)指令。顯然,在工作頻率相同的情況下,64位處理器的處理速度比32位的更快。
大家比較一下圖2中的32位與64位處理器,64位的代碼流的數(shù)量沒(méi)有改變,其寬度隨著指令代碼的寬度而變化;而數(shù)據(jù)流的寬度則增加了一倍,這是為了在同一時(shí)間內(nèi)傳輸更多的數(shù)據(jù),寄存器和內(nèi)部數(shù)據(jù)通道也必須加倍。此外,在64位處理器中的寄存器位數(shù)是32位處理器中的兩倍,不過(guò)正在實(shí)行指令的指令寄存器卻都是一樣的。此外64位處理器的程序計(jì)數(shù)器也加倍了。
目前64位尋址越來(lái)越普及,近年來(lái)Intel和AMD公司相繼推出64位處理器便是這種發(fā)展趨勢(shì)的表現(xiàn)。不過(guò),64位處理器要與64位操作系統(tǒng)、64位應(yīng)用軟件相結(jié)合才能全面發(fā)揮優(yōu)勢(shì)。