從CPU架構(gòu)和技術(shù)的演變看GPU未來發(fā)展
所謂X86架構(gòu)的處理器就是采用了Intel X86指令集的處理器,X86指令集是Intel公司為其第一塊16位處理器i8086所專門開發(fā)的。而IBM在1981年所推出的第一臺PC機(jī)上所使用的處理器i8088(i8086的簡化版)也是使用的X86指令集,但是為了增強(qiáng)計(jì)算機(jī)的浮點(diǎn)運(yùn)算能力,增加了X87數(shù)學(xué)協(xié)助處理器并引入了X87指令集,于是就將采用了X86指令集和X87指令集的處理器統(tǒng)稱為X86架構(gòu)的處理器。
X86基本指令集包括了:數(shù)據(jù)傳輸、算術(shù)運(yùn)算、邏輯運(yùn)算、串指令、程序轉(zhuǎn)移、偽指令、寄存器、位操作、控制指令和浮點(diǎn)運(yùn)算指令等十大類無數(shù)條。而Intel和AMD桌面級處理器在X86指令集的基礎(chǔ)上,為了提升處理器各方面的性能,所以又各自開發(fā)新的指令集,它們被稱為處理器擴(kuò)展指令集。

擴(kuò)展指令集能夠大幅提高CPU在某些特定應(yīng)用下的性能,如多媒體、3D、浮點(diǎn)運(yùn)算等,其設(shè)計(jì)初衷與協(xié)處理器是異曲同工的,但協(xié)處理器需要增加額外的運(yùn)算單元,而擴(kuò)展指令集只需要加入新的指令和算法即可,無需設(shè)計(jì)新的運(yùn)算單元,但必須要軟件支持才能發(fā)揮功效。
★ MMX指令集:增強(qiáng)多媒體性能
MMX(Multi Media eXtension 多媒體擴(kuò)展指令)指令集是Intel公司在1996年為旗下的Pentium系列處理器所開發(fā)的一項(xiàng)多媒體指令增強(qiáng)技術(shù)。MMX指令集中包括了57條多媒體指令,通過這些指令可以一次性處理多個數(shù)據(jù),在處理結(jié)果超過實(shí)際處理能力的時候仍能夠進(jìn)行正常處理,如果在軟件的配合下,可以得到更強(qiáng)的處理性能。
MMX指令集非常成功,在之后生產(chǎn)的各型CPU都包括這些指令集。據(jù)當(dāng)年Tom''s Hardware測試,即使最慢的Pentium MMX 166MHz也比Pentium 200MHz普通版要快。
Intel Pentium With MMX,首次支持MMX
但是,MMX指令集的問題也是比較明顯的,MMX指令集不能與X86的浮點(diǎn)運(yùn)算指令同時執(zhí)行,必須做密集式的交錯切換才可以正常執(zhí)行,但是這樣一來,就會造成整個系統(tǒng)運(yùn)行速度的下降。
★ 3DNow!指令集:
3DNow!指令集最由AMD公司所推出的,該指令集應(yīng)該是在SSE指令之前推出的,被廣泛運(yùn)用于AMD的K6-2和K7系列處理器上,擁有21條擴(kuò)展指令集。在整體上3DNow!的SSE非常相相似,它們都擁有8個新的寄存器,但是3DNow!是64位的,而SSE是128位。
AMD K62加入3DNow!指令集
所以3DNow!它只能存儲兩個浮點(diǎn)數(shù)據(jù),而不是四個。但是它和SSE的側(cè)重點(diǎn)有所不同,3DNow!指令集主要針對三維建模、坐標(biāo)變換和效果渲染等3D數(shù)據(jù)的處理,在相應(yīng)的軟件配合下,可以大幅度提高處理器的3D處理性能。AMD公司后來又在Athlon系列處理器上開發(fā)了新的Enhanced 3DNow!指令集,新的增強(qiáng)指令數(shù)達(dá)了52個,以致目前最為流行的Athlon 64系列處理器還是支持3DNow!指令的。★ SSE指令集:加強(qiáng)浮點(diǎn)和3D性能
SSE是Streaming SIMD Extension(SIMD擴(kuò)展指令集)的縮寫,而其中SIMD的為含意為Single Istruction Multiple Data(單指令多數(shù)據(jù)),所以SSE指令集也叫單指令多數(shù)據(jù)流擴(kuò)展。該指令集最先運(yùn)用于Intel的Pentium III系列處理器,其實(shí)在Pentium III推出之前,Intel方面就已經(jīng)泄漏過關(guān)于KNI(Katmai New Instruction)指令集的消息。這個KNI指令集也就是SSE指令集的前身,當(dāng)時也有不少的媒體將該指令集稱之為MMX2指令集,但是Intel方面卻從沒有發(fā)布有關(guān)MMX2指令集的消息。
奔騰3正式加入SSE指令集
最后在Intel推出Pentium III處理器的時候,SSE指令集也終于水落石出。SSE指令集是為提高處理器浮點(diǎn)性能而開發(fā)的擴(kuò)展指令集,它共有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ù)塊傳輸指令。理論上這些指令對當(dāng)時流行的圖像處理、浮點(diǎn)運(yùn)算、3D運(yùn)算、多媒體處理等眾多多媒體的應(yīng)用能力起到全面提升的作用。SSE指令與AMD公司的3DNow!指令彼此互不兼容,但SSE包含了3DNow!中的絕大部分功能,只是實(shí)現(xiàn)的方法不同而已。SSE也向下兼容MMX指令,它可以通過SIMD和單時鐘周期并行處理多個浮點(diǎn)數(shù)據(jù)來有效地提高浮點(diǎn)運(yùn)算速度。
★ SSE2指令集:進(jìn)一步優(yōu)化浮點(diǎn)運(yùn)算
在Pentium III發(fā)布的時候,SSE指令集就已經(jīng)集成在了處理器的內(nèi)部,但因?yàn)楦鞣N原因一直沒有得到充分的發(fā)展。直到Pentium 4發(fā)布之后,開發(fā)人員看到使用SSE指令之后,程序執(zhí)行性能將得到極大的提升,于是Intel又在SSE的基礎(chǔ)上推出了更先進(jìn)的SSE2指令集。
奔騰4初代就加入了SSE2指令集(AMD直到Athlon64才加入SSE2)
SSE2包含了144條指令,由兩個部分組:SSE部分和MMX部分。SSE部分主要負(fù)責(zé)處理浮點(diǎn)數(shù),而MMX部分則專門計(jì)算整數(shù)。SSE2的寄存器容量是MMX寄存器的兩倍,寄存器存儲數(shù)據(jù)也增加了兩倍。在指令處理速度保持不變的情況下,通過SSE2優(yōu)化后的程序和軟件運(yùn)行速度也能夠提高兩倍。由于SSE2指令集與MMX指令集相兼容,因此被MMX優(yōu)化過的程序很容易被SSE2再進(jìn)行更深層次的優(yōu)化,達(dá)到更好的運(yùn)行效果。
SSE2對于處理器的性能的提升是十分明顯的,雖然在同頻率的情況下,Pentium 4和性能不如Athlon XP,但由于Athlon XP不支持SSE2,所以經(jīng)過SSE2優(yōu)化后的程序Pentium 4的運(yùn)行速度要明顯高于Athlon XP。而AMD方面也注意到了這一情況,在隨后的K-8系列處理器中,都加入SSE2指令集。
★ SSE3指令集:加強(qiáng)并行數(shù)據(jù)處理能力
SSE3指令是目前規(guī)模最小的指令集,它只有13條指令。它共劃分為五個應(yīng)運(yùn)層,分別為數(shù)據(jù)傳輸命令、數(shù)據(jù)處理命令、特殊處理命令、優(yōu)化命令、超線程性能增強(qiáng)五個部分,其中超線程性能增強(qiáng)是一種全新的指令集,它可以提升處理器的超線程的處理能力,大大簡化了超線程的數(shù)據(jù)處理過程,使處理器能夠更加快速的進(jìn)行并行數(shù)據(jù)處理。

SSE3中13個新指令的主要目的是改進(jìn)線程同步和特定應(yīng)用程序領(lǐng)域,例如媒體和游戲。這些新增指令強(qiáng)化了處理器在浮點(diǎn)轉(zhuǎn)換至整數(shù)、復(fù)雜算法、視頻編碼、SIMD浮點(diǎn)寄存器操作以及線程同步等五個方面的表現(xiàn),最終達(dá)到提升多媒體和游戲性能的目的。
Intel是從Prescott核心的Pentium 4開始支持SSE3指令集的,而AMD則是從2005年下半年Troy核心的Opteron開始才支持SSE3的。但是需要注意的是,AMD所支持的SSE3與Intel的SSE3并不完全相同,主要是刪除了針對Intel超線程技術(shù)優(yōu)化的部分指令。
★ SSSE3(SSE3S)指令集:加強(qiáng)多媒體圖形圖像處理
SSSE3(Supplemental Streaming SIMD Extensions 3)是Intel命名的SSE3指令集的擴(kuò)充,不使用新的號碼是因?yàn)镾SSE3比較像是加強(qiáng)版的SSE3,以至于推出SSSE3之前,SSE4的定義容易被混淆。在公開Intel的Core微架構(gòu)之時,SSSE3出現(xiàn)在Xeon 5100與Intel Core 2移動版與桌面型處理器上。
65nm Core 2 Duo引入SSSE3指令集
SSSE3包含了16個新的不同于SSE3的指令。每一個都能夠運(yùn)作于64位的MMX寄存器或是128位XMM寄存器之中。因此,有些Intel的文件表示有32個新指令。SSSE3指令集增強(qiáng)了CPU的多媒體、圖形圖象處理、多媒體編碼、整數(shù)運(yùn)算和Internet等方面的處理能力。
★ SSE4.1指令集:大幅提升浮點(diǎn)運(yùn)算,優(yōu)化CPU和GPU數(shù)據(jù)共享
SSE4.1指令集被認(rèn)為是2001年以來Intel最重要的指令集擴(kuò)展,包含54條指令。Intel在Penryn處理器中加入了對SSE4.1的支持,共增加了47條新指令,令處理器的多媒體處理能力得到最大70%的提升。SSE4加入了6條浮點(diǎn)型點(diǎn)積運(yùn)算指令,支持單精度、雙精度浮點(diǎn)運(yùn)算及浮點(diǎn)產(chǎn)生操作,且IEEE 754指令 (Nearest, -Inf, +Inf, and Truncate) 可立即轉(zhuǎn)換其路徑模式,大大減少延誤,這些改變將對游戲及3D內(nèi)容制作應(yīng)用有重要意義。
此外,SSE4加入串流式負(fù)載指令,可提高以圖形幀緩沖區(qū)的讀取數(shù)據(jù)頻寬,理論上可獲取完整的快取緩存行,即每次讀取64Bit而非8Bit,并可保持在臨時緩沖區(qū)內(nèi),讓指令最多可帶來8倍的讀取頻寬效能提升,對于視訊處理、成像以及GPU與CPU之間的共享數(shù)據(jù)應(yīng)用,有著明顯的效能提升。
45nm Core 2 Duo引入SSE4.1指令集
SSE4指令集讓45nm Penryn處理器增加了2個不同的32Bit向量整數(shù)乘法運(yùn)算單元,并加入8位無符號(Unsigned)最小值及最大值運(yùn)算,以及16Bit及32Bit有符號 (Signed) 運(yùn)算。在面對支持SSE4指令集的軟件時,可以有效的改善編譯器效率及提高向量化整數(shù)及單精度代碼的運(yùn)算能力。同時,SSE4改良插入、提取、尋找、離散、跨步負(fù)載及存儲等動作,令向量運(yùn)算進(jìn)一步專門。
★ SSE4.2指令集:優(yōu)化XML和交互式應(yīng)用性能
在Nehalem架構(gòu)的Core i7處理器中,SSE4.2指令集被引入,加入了STTNI(字符串文本新指令)和ATA(面向應(yīng)用的加速器)兩大優(yōu)化指令。STTNI包含了四條具體的指令。STTNI指令可以對兩個16位的數(shù)據(jù)進(jìn)行匹配操作,以加速在XML分析方面的性能。Intel表示,新指令可以在XML分析方面取得3.8倍的性能提升。

ATA包括冗余校驗(yàn)的CRC32指令、計(jì)算源操作數(shù)中非0位個數(shù)的POPCNT指令,以及對于打包的64位算術(shù)運(yùn)算的SIMD指令。CRC32指令可以取代上層數(shù)據(jù)協(xié)議中經(jīng)常用到的循環(huán)冗余校驗(yàn),Intel表示其加速比可以達(dá)到6.5~18.6倍;POPCNT用于提高在DNA基因配對、聲音識別等包含大數(shù)據(jù)集中進(jìn)行模式識別和搜索等操作的應(yīng)用程序性能。
關(guān)注我們


