什么是CPU指令集?
CPU作為一臺電腦中的核心,它的作用是無(wú)法替代的。而CPU本身只是在塊硅晶片上所集成的超大規模的集成電路,集成的晶體管數量可達到上億個(gè),是由非常先進(jìn)復雜的制造工藝制造出來(lái)的,擁有相當高的科技含量。然而如此一顆精密的芯片為什么能夠控制一個(gè)龐大而復雜的電腦系統呢?這就是CPU中所集成的指令集。所謂指令集,就是CPU中用來(lái)計算和控制計算機系統的一套指令的集合,而每一種新型的CPU在設計時(shí)就規定了一系列與其他硬件電路相配合的指令系統。而指令集的先進(jìn)與否,也關(guān)系到CPU的性能發(fā)揮,它也是CPU性能體現的一個(gè)重要標志。

再強大的處理器也需要指令集的配合才行(圖片出自電影《機械公敵》)
CPU的指令集從主流的體系結構上分為精簡(jiǎn)指令集和復雜指令集,而在普通的計算機處理器基本上是使用的復雜指令集。在計算機早期的發(fā)展過(guò)程中,CPU中的指令集是沒(méi)有劃分類(lèi)型的,而是都將各種程序需要相配合的指令集成到CPU中,但是隨著(zhù)科技的進(jìn)步,計算機的功能也越來(lái)越強大,計算機內部的元件也越來(lái)越多,而且越來(lái)越復雜,CPU的指令也相應的變得十分復雜,而在使用過(guò)程中,并不是每一條指令都要完全被執行,在技術(shù)人員的研究過(guò)程中發(fā)現,約有80%的程序只用到了20%的指令,而一些過(guò)于冗余的指令嚴重影響到了計算機的工作效率,就這一現象,精簡(jiǎn)指令集的概念就被提了出來(lái)。
精簡(jiǎn)指令集RISC就是(Reduced Instruction SetComputing)的縮寫(xiě),而復雜指令集CISC則是(Complex Instruction SetComputing)的縮寫(xiě)。它們之間的不同之處就在于RISC指令集的指令數目少,而且每條指令采用相同的字節長(cháng)度,一般長(cháng)度為4個(gè)字節,并且在字邊界上對齊,字段位置固定,特別是操作碼的位置。而CISC指令集特點(diǎn)就是指令數目多而且復雜,每條指令的長(cháng)度也不相等。在操作上,RISC指令集中大多數操作都是寄存器到寄存器之間的操作,只以簡(jiǎn)單的Load(讀?。┖蚐otre(存儲)操作訪(fǎng)問(wèn)內存地址。因此,每條指令中訪(fǎng)問(wèn)的內存地址不會(huì )超過(guò)1個(gè),指令訪(fǎng)問(wèn)內存的操作不會(huì )與算術(shù)操作混在一起。在功能上,RISC指令集也要比復雜指令集具有優(yōu)勢,精簡(jiǎn)指令集可以大大簡(jiǎn)化處理器的控制器和其他功能單元的設計,不必使用大量專(zhuān)用寄存器,特別是允許以硬件線(xiàn)路來(lái)實(shí)現指令操作,從而節約的處理器的制造成本。而采用CISC指令集的處理器是使用微程序來(lái)實(shí)現指令操作,在執行速度上不如RISC指令集。另外,RISC還加強了并行處理能力,非常適合于采用處理器的流水線(xiàn)、超流水線(xiàn)和超標量技術(shù),從而實(shí)現指令級并行操作,提高處理器的性能。而且隨著(zhù)VLSI(Very Large ScaleIntegration超大規模集成電路)技術(shù)的發(fā)展,整個(gè)處理器的核心甚至多個(gè)處理器核心都可以集成在一個(gè)芯片上。RISC指令集的體系結構可以給設計單芯多核處理器帶來(lái)很多好處,有利于處理器的性能提高。
由于RISC指令集自身的優(yōu)勢,在處理器的高端服務(wù)器領(lǐng)域的處理器上得到了廣泛的運用,而CISC指令集主要運用桌面領(lǐng)域的處理器產(chǎn)品中,比如Intel的Pentium系列和AMD的K8系列處理器。然而現在RISC指令集也不斷地向桌面領(lǐng)域滲入,相信以后的處理器指令集會(huì )慢慢的向RISC體系靠攏,使得處理器的指令集結構更加完善,功能更為強大,技術(shù)也越來(lái)越成熟。
指令集的發(fā)展史
而說(shuō)到指令集的發(fā)展,就不得提到目前主流處理器所采用的X86架構。所謂X86架構的處理器就是采用了IntelX86指令集的處理器,X86指令集是Intel公司為其第一塊16位處理器i8086所專(zhuān)門(mén)開(kāi)發(fā)的。而IBM在1981年所推出的第一臺PC機上所使用的處理器i8088(i8086的簡(jiǎn)化版)也是使用的X86指令集,但是為了增加計算機的浮點(diǎn)運算能力,增加了X87數學(xué)協(xié)助處理器和加入了X87指令集,于是就將采用了X86指令集和X87指令集的處理器統稱(chēng)為X86架構的處理器。

第一塊支持X86指令集的Intel i8086處理器
到目前為止,Intel公司所生產(chǎn)的大部分處理器都是屬于X86架構的處理器,包括像i80386、i80486和Pentium系列處理器等等。而Intel公司以外,AMD和Cyrix等廠(chǎng)商也在生產(chǎn)集成了X86指令集的處理器產(chǎn)品,而這些處理器都能夠與支持Intel處理器的軟件和硬件相兼容,所以也就形成了今天龐大的X86架構的處理器陣容。
然而隨著(zhù)處理器技術(shù)的發(fā)展,雖然處理器的主頻和制造工藝都有一定的進(jìn)步,但是處理器的性能確不能非常明顯的提高,其中一個(gè)非常重要的原因就是受到了X86所采用的SISC指令集的限制。這一點(diǎn)Intel方面也非常清楚。而目前IA-32(IntelArchitechure-32英特爾32位體系架構)的X86系列處理器存在著(zhù)一系列的問(wèn)題,使得Intel方面已經(jīng)打算放棄X86指令體系處理器的發(fā)型,而將重點(diǎn)放在下一代的IA-64體系處理器和EPIC(ExplicitlyParallel Instruction Computing)顯性并行指令方面。

X86架構處理器示意圖
首先,我們要知道,提高處理器每個(gè)時(shí)鐘頻率的指令執行數來(lái)提高處理器的性能,而這也是Intel開(kāi)發(fā)新指令集的主要目的,這樣一來(lái),處理器可以讓指令更容易解碼,并且更容易進(jìn)行并行處理,這樣就可以不受指令集的限制來(lái)開(kāi)發(fā)新型的處理器。而X86指令集的劣勢就在于它的限制過(guò)多。
第一、由于X86指令集是屬于CISC類(lèi)型的指令集,其每條指令的長(cháng)度是不固定的,而且有幾種不同的格式,這樣一來(lái),就造成了X86處理器的解碼工作非常復雜。而為了提高處理器的工作頻率,就不得不延長(cháng)處理器中的流水線(xiàn),而過(guò)長(cháng)的流水線(xiàn)在分支如果出現預測出錯的情況,又會(huì )帶來(lái)CPU工作停滯時(shí)間較長(cháng)的弊端。
第二、X86指令采用了可訪(fǎng)問(wèn)內存地址的方法,這樣的方法容易造成處理器與內存之間的不平衡工作,從而降低處理器的工作效率。而先進(jìn)的RISC處理器則是使用Load/Store的存儲模式,其中只有Load和Store指令才能從內存中讀取數據到寄存器,所有其他指令只對寄存器中的操作數進(jìn)行計算。
第三、X86構架處理器中的FPU(Floating PointUnit)浮點(diǎn)運算單元的運算能力較差,可以說(shuō)現今市面上所有類(lèi)型處理器中最慢的,其主要原因就是X86指令集中所使用的一個(gè)操作數堆棧。如果在運算過(guò)程中,沒(méi)有足夠的寄存器進(jìn)行計算,系統就不得不使用堆棧來(lái)存放數據,這樣一來(lái)會(huì )浪費大量的時(shí)間來(lái)處理FXCH指令,就是將正確的數據放到堆棧的頂部。
第四、X86指令對于各種擴展部件的限制也是十分不利的。首先,X86架構的處理器對于4GB的內存容量上限制,雖然現在目前主流的個(gè)人電腦的內存大小為512MB和1GB,但是相信隨著(zhù)操作系統和應用軟件的不斷提升,會(huì )快將會(huì )突破4GB的內存容量。另外,由于為了提高X86架構的處理器的性能,而出現像寄存器重命名、緩沖器巨大、亂序執行、分支預測、X86指令轉化等等現象,都使得處理器的核心面積變得越來(lái)越大,這也限制了處理器工作頻率的進(jìn)一步提升,此外,處理器所集成的這些龐大數目的晶體管都只是為了解決X86指令的問(wèn)題,所以繼續采用X86架構必將會(huì )影響到處理器的發(fā)展。
而反觀(guān)IA-64體系,由于采用了RISC指令集,可由一個(gè)指令、兩個(gè)輸入寄存器和一個(gè)輸出寄存器組成,指令只對寄存器進(jìn)行操作。并且具有多個(gè)不同的流水線(xiàn)或執行單元,能夠并行執行許多指令。在對指令的處理速度上要明顯優(yōu)于CISC類(lèi)型的IA-32體系。
而Intel的Merced(也就是現在Itanium安騰)處理器就是一塊采用IA-64體系的64位處理器。它擁有64位尋址能力和64位位寬的寄存器,所以稱(chēng)之為64位處理器。由于具有64位尋址能力,Merced能夠使用1百萬(wàn)TB(1TB=1024GB)的地址空間,足以運算企業(yè)級的數據任務(wù),64位寬的寄存器可以使Merced達到非常高的精度和運算速度。它所采用的EPIC指令可以使得處理器進(jìn)行并行處理,在相同的時(shí)鐘周期內,采用并行處理的指令執行數是普通CISC指令集的兩倍。此外,Merced可進(jìn)行并行分支預測。在目前的普通的處理器中,分支預測的正確率可以達到90%~95%,雖然正確率已經(jīng)相當高了,但如果預測出錯時(shí),處理器就不得不清洗整條流水線(xiàn),從而降低處理器的運算效率。10%的預測出錯率會(huì )讓處理器損失近30%的性能,而且如果流水線(xiàn)越長(cháng)的情況下,性能損失就越嚴重。而Merced的所采用的預測機制,可以使分支都能進(jìn)行并行執行,而且所花的招待時(shí)間與執行單個(gè)分支的時(shí)間是相同的。其次,處理器不會(huì )再冒預測出錯的風(fēng)險。由于處理器不再進(jìn)行跳躍執行,它不會(huì )把程序代碼分成一個(gè)一個(gè)的小塊。而是將稍前和稍后的程序代碼進(jìn)行打包,然后一起將它們發(fā)布,加強了并行工作量。這些可以使采用EPIC指令的處理器避免普通處理器所出現的分支預測40%的出錯情況,從而使處理器的性能提高10%~15%,特別是在整數代碼部分。

Intel的Merced處理器
提升性能:擴展指令集
剛才上面提到了處理器中的擴展指令集,目前市面上Intel和AMD的桌面級處理器在X86指令集的基礎上,為了提升處理器各方面的性能,所以又各自開(kāi)發(fā)新的指令集。指令集中包含了處理器對多媒體、3D處理等方面的支持,這些指令集能夠提高處理器對這某些方面處理器能力,但是需要有必要的軟件支持。
MMX指令集
MMX(Multi Media eXtension多媒體擴展指令)指令集是Intel公司在1996年為旗下的Pentium系列處理器所開(kāi)發(fā)的一項多媒體指令增強技術(shù)。MMX指令集中包括了57條多媒體指令,通過(guò)這些指令可以一次性處理多個(gè)數據,在處理結果超過(guò)實(shí)際處理能力的時(shí)候仍能夠進(jìn)行正常處理,如果在軟件的配合下,可以得到更強的處理性能。使用MMX指令集的好處就是當時(shí)所使用的操作系統可以在不做任何改變的情況下執行MMX指令。但是,MMX指令集的問(wèn)題也是比較明顯的,MMX指令集不能與X86的浮點(diǎn)運算指令同時(shí)執行,必須做密集式的交錯切換才可以正常執行,但是這樣一來(lái),就會(huì )造成整個(gè)系統運行速度的下降。

支持MMX指令集的Intel Pentium MMX處理器
SSE指令集
SSE是Streaming SIMD Extension(SIMD擴展指令集)的縮寫(xiě),而其中SIMD的為含意為SingleIstruction MultipleData(單指令多數據),所以SSE指令集也叫單指令多數據流擴展。該指令集最先運用于Intel的PentiumIII系列處理器,其實(shí)在Pentium III推出之前,Intel方面就已經(jīng)泄漏過(guò)關(guān)于KNI(Katmai NewInstruction)指令集的消息。這個(gè)KNI指令集也就是SSE指令集的前身,當時(shí)也有不少的媒體將該指令集稱(chēng)之為MMX2指令集,但是Intel方面卻從沒(méi)有發(fā)布有關(guān)MMX2指令集的消息。

加入了SSE指令集的Pentium III處理器
最后在Intel推出PentiumIII處理器的時(shí)候,SSE指令集也終于水落石出。SSE指令集是為提高處理器浮點(diǎn)性能而開(kāi)發(fā)的擴展指令集,它共有70條指令,其中包含提高3D圖形運算效率的50條SIMD浮點(diǎn)運算指令、12條MMX整數運算增強指令、8條優(yōu)化內存中的連續數據塊傳輸指令。理論上這些指令對當時(shí)流行的圖像處理、浮點(diǎn)運算、3D運算、多媒體處理等眾多多媒體的應用能力起到全面提升的作用。SSE指令與AMD公司的3DNow!指令彼此互不兼容,但SSE包含了3DNow!中的絕大部分功能,只是實(shí)現的方法不同而已。SSE也向下兼容MMX指令,它可以通過(guò)SIMD和單時(shí)鐘周期并行處理多個(gè)浮點(diǎn)數據來(lái)有效地提高浮點(diǎn)運算速度。
3DNow!指令集
3DNow!指令集最由AMD公司所推出的,該指令集應該是在SSE指令之前推出的,被廣泛運用于A(yíng)MD的K6、K6-2和K7系列處理器上,擁有21條擴展指令集。在整體上3DNow!的SSE非常相相似,它們都擁有8個(gè)新的寄存器,但是3DNow!是64位的,而SSE是128位。所以3DNow!它只能存儲兩個(gè)浮點(diǎn)數據,而不是四個(gè)。但是它和SSE的側重點(diǎn)有所不同,3DNow!指令集主要針對三維建模、坐標變換和效果渲染等3D數據的處理,在相應的軟件配合下,可以大幅度提高處理器的3D處理性能。AMD公司后來(lái)又在A(yíng)thlon系列處理器上開(kāi)發(fā)了新的Enhanced3DNow!指令集,新的增強指令數達了52個(gè),以致目前最為流行的Athlon 64系列處理器還是支持3DNow!指令的。

AMD K6、K7系列所使用的3DNow!指令集
SSE2指令集
在PentiumIII發(fā)布的時(shí)候,SSE指令集就已經(jīng)集成在了處理器的內部,但因為各種原因一直沒(méi)有得到充分的發(fā)展。直到Pentium4發(fā)布之后,開(kāi)發(fā)人員看到使用SSE指令之后,程序執行性能將得到極大的提升,于是Intel又在SSE的基礎上推出了更先進(jìn)的SSE2指令集。
SSE2包含了144條指令,由兩個(gè)部分組:SSE部分和MMX部分。SSE部分主要負責處理浮點(diǎn)數,而MMX部分則專(zhuān)門(mén)計算整數。SSE2的寄存器容量是MMX寄存器的兩倍,寄存器存儲數據也增加了兩倍。在指令處理速度保持不變的情況下,通過(guò)SSE2優(yōu)化后的程序和軟件運行速度也能夠提高兩倍。由于SSE2指令集與MMX指令集相兼容,因此被MMX優(yōu)化過(guò)的程序很容易被SSE2再進(jìn)行更深層次的優(yōu)化,達到更好的運行效果。SSE2對于處理器的性能的提升是十分明顯的,雖然在同頻率的情況下,Pentium 4和性能不如Athlon XP,但由于A(yíng)thlonXP不支持SSE2,所以經(jīng)過(guò)SSE2優(yōu)化后的程序Pentium 4的運行速度要明顯高于A(yíng)thlonXP。而AMD方面也注意到了這一情況,在隨后的K-8系列處理器中,都加入SSE2指令集。

SSE2和SSE3指令集主要用于Pentium 4系列處理器上
SSE3指令集
SSE3指令是目前規模最小的指令集,它只有13條指令。它共劃分為五個(gè)應運層,分別為數據傳輸命令、數據處理命令、特殊處理命令、優(yōu)化命令、超線(xiàn)程性能增強五個(gè)部分,其中超線(xiàn)程性能增強是一種全新的指令集,它可以提升處理器的超線(xiàn)程的處理能力,大大簡(jiǎn)化了超線(xiàn)程的數據處理過(guò)程,使處理器能夠更加快速的進(jìn)行并行數據處理。
上面介紹的基本上就是Intel和AMD公司在X86架構處理器上主要的擴展指令集,雖然它們對于處理器的性能提升有著(zhù)一定程度的幫助,但是由于受到IA-32體系的限制,X86架構基本上不會(huì )再有具有革命性意義的指令集出現,而雙方都已經(jīng)把重心轉向了64位體系架構的處理器指令集開(kāi)發(fā)上。
未來(lái):邁向64位體系
在現在的處理器市場(chǎng)上,64位技術(shù)已經(jīng)開(kāi)始普及起來(lái),像AMD的Athlon64處理器和Intel的Pentium5XX/6XX處理器已經(jīng)成為市場(chǎng)的主流。但是大家要值得主意的是,目前的桌面級64位處理器仍然還是基于X86架構之上,而不是IA-64架構。這里的64位處理器是指的處理器的通用寄存器GPR(General-PurposeRegisters)的數據寬度為64位。也就是說(shuō)處理器可一次運算64位數據。使用64位技術(shù)運算有兩大優(yōu)點(diǎn):可以進(jìn)行更大范圍的整數運算,還有就是可以支持更大容量的內存。但是要注意的是,不要看表面64位是32位兩倍,就簡(jiǎn)單的認為64位處理器的性能是32位處理器性能的兩倍。就在目前的32位主流平臺下,32位的處理器在某些方面甚至要比64位處理器還要強,所以在32位操作系統和運用程序為主情況下,不要太過(guò)于迷信64位處理器。
64位處理器技術(shù)并不是Intel和AMD處理器上才有的。早在上個(gè)世紀90年代末,在高端的采用RISC指令集的處理器中就已經(jīng)有了64位處理器,比如SUN公司的UltraSparcⅢ、IBM公司的Power5、HP公司的Alpha等處理器產(chǎn)品?,F在市面上主流的64位技術(shù)主要是Intel的EM64T技術(shù)和AMD和AMD64技術(shù)。而這兩項技術(shù)都是基于IA-32體系,而真正的IA-64體系上處理器目前只有Itanium(安騰)以及其后續產(chǎn)品,是Intel獨立開(kāi)發(fā)的,它不兼容現在32位計算機。
AMD64位技術(shù)
AMD的athlon64系列處理器的64位技術(shù)是在X86指令集的基礎上加入了X86-64的64位擴展X86指令集,這就使得athlon64系列處理器可兼容原來(lái)的32位的X86軟件,并同時(shí)支持X86-64的擴展64位計算,并且具有64位的尋址能力,使得它成為真正的64位X86構架處理器。在采用X86-64架構的Athlon64處理器中,X86-64指令集中新增了幾組處理器寄存器,它能夠提供更加快速的執行效率。寄存器是處理器用來(lái)創(chuàng )建和儲存CPU運算結果和其他運算結果的地方,標準的X86構架中包括8組通用寄存器,而在A(yíng)MD的X86-64架構中又增加了8組,將通過(guò)寄存器的數目提高到了16組。在這基礎之上,X86-64指令集還另外增加了8組128位的XMM寄存器,也叫做SSE寄存器。它能夠給單指令多數據流技術(shù)(SIMD)運算提供更多的存儲空間,這些128位的寄存器能夠提供在矢量和標量計算模式下進(jìn)行128位雙精度處理,這也為3D數據處理、矢量分析和虛擬技術(shù)提供了良好的硬件基礎。由于提供了更多的寄存器,按照X86-64標準生產(chǎn)的處理器可以更有效率的處理數據,在一個(gè)時(shí)鐘周期內能夠傳輸更多的信息。

采用X86-64架構的AMD Athlon 64處理器
EM64T技術(shù)
EM64T(Extended Memory 64Technology)也就是Intel公司開(kāi)發(fā)的64位內存擴展技術(shù)。它實(shí)際上就是IntelIA-32構架體系的擴展,既IA-32E(Intel Architectur-32Extension)。Intel的IA-32處理器通過(guò)加入EM64T技術(shù)便可在兼容IA-32軟件的情況下,允許軟件程序利用更多的內存地址空間,并且允許程序進(jìn)行32位線(xiàn)性地址寫(xiě)入。Intel的EM64T所強調的是32位技術(shù)與64位技術(shù)的兼容性,為采用EM64T的處理器增加了8個(gè)64位通用寄存器,并將原有的32位通用寄存器全部擴展為64位,這樣也提高了處理器的整數運算能力。另外增加的8個(gè)SEE寄存器也提供了對SSE、SSE2和SSE3指令的支持。

加入EM64T擴展技術(shù)的Pentium 5XX/6XX系列處理器
目前Intel的主流桌面處理器共有兩個(gè)模式,傳統的IA-32模式和IA-32E模式。在可支持EM64T指令的處理器內有一個(gè)擴展功能激活寄存器(ExtendedFeature EnableRegister),稱(chēng)為IA-32_EFER的部件,它控制處理器的EM64T是否被激活。在普通情況下,處理器會(huì )作為一顆標準的IA-32處理器,如果在運行64位的軟件或程序時(shí),EM64T就會(huì )被激活,那么處理器便會(huì )在IA-32E擴展模式下運行。
總結:
到現在為至,Intel和AMD在桌面處理器市場(chǎng)的競爭愈發(fā)的激烈,而產(chǎn)品的性能與新技術(shù)的運用將會(huì )是兩家廠(chǎng)商取勝的要點(diǎn)之一。雖然Intel已經(jīng)開(kāi)始了IA-64體系架構的研發(fā),而且已經(jīng)運用到了高端的服務(wù)器領(lǐng)域,但是要滲入到民用桌面市場(chǎng)相信還是需要相當長(cháng)的時(shí)間才行。而IA-32構架的X86處理器產(chǎn)品在一段時(shí)間內仍然將是市面上的主流。但是受到了X86構架的限制,Intel和AMD也都會(huì )將重心放在擴展性和并行處理上,而不是一味的提高處理器的主頻?,F在兩家的公司的雙核心處理器也都已經(jīng)上市,所以其擴展指令集的開(kāi)發(fā)相信也會(huì )是朝這個(gè)方向發(fā)展。雖然真正的64位體系構架才是處理器的方向,但是在這之前,X86構架仍然沒(méi)有走到盡頭,所以想要全面進(jìn)行64位時(shí)代,Intel和AMD仍然還有很長(cháng)的一段路要走。
聯(lián)系客服