MMX, SSE, SSE2
指令集基本概念
CPU依靠指令來(lái)計(jì)算和控制系統(tǒng),每款CPU在設(shè)計(jì)時(shí)就規(guī)定了一系列與其硬件電路相配合的指令系統(tǒng)。指令的強(qiáng)弱也是CPU的重要指標(biāo),指令集是提高微處理器效率的最有效工具之一。指令集是存儲(chǔ)在CPU內(nèi)部,對(duì)CPU運(yùn)算進(jìn)行指導(dǎo)和優(yōu)化的硬程序。擁有這些指令集,CPU就可以更高效地運(yùn)行。
指令集類(lèi)別
從現(xiàn)階段的主流體系結(jié)構(gòu)角度 
 - 復(fù)雜指令集 
 A complex instruction set computer (CISC) has many specialized instructions, some of which may only be rarely used in practical programs. 
 - 精簡(jiǎn)指令集 
 A reduced instruction set computer (RISC) simplifies the processor by efficiently implementing only the instructions that are frequently used in programs, while the less common operations are implemented as subroutines, having their resulting additional processor execution time offset by infrequent use.
而從具體運(yùn)用看,如Intel的MMX(Multi Media Extended)、SSE、 SSE2(Streaming-Single instruction multiple data-Extensions 2)和AMD的3DNow!等都是CPU的擴(kuò)展指令集,分別增強(qiáng)了CPU的多媒體、圖形圖象和Internet等的處理能力。我們通常會(huì)把CPU的擴(kuò)展指令集稱(chēng)為”CPU的指令集”。
精簡(jiǎn)指令集的運(yùn)用
在最初發(fā)明計(jì)算機(jī)的數(shù)十年里,隨著計(jì)算機(jī)功能日趨增大,性能日趨變強(qiáng),內(nèi)部元器件也越來(lái)越多,指令集日趨復(fù)雜,過(guò)于冗雜的指令嚴(yán)重的影響了計(jì)算機(jī)的工作效率。后來(lái)經(jīng)過(guò)研究發(fā)現(xiàn),在計(jì)算機(jī)中,80%程序只用到了20%的指令集,基于這一發(fā)現(xiàn),RISC精簡(jiǎn)指令集被提了出來(lái),這是計(jì)算機(jī)系統(tǒng)架構(gòu)的一次深刻革命。RISC體系結(jié)構(gòu)的基本思路是:抓住CISC指令系統(tǒng)指令種類(lèi)太多、指令格式不規(guī)范、尋址方式太多的缺點(diǎn),通過(guò)減少指令種類(lèi)、規(guī)范指令格式和簡(jiǎn)化尋址方式,方便處理器內(nèi)部的并行處理,提高VLSI器件的使用效率,從而大幅度地提高處理器的性能。
RISC指令集有許多特征,其中最重要的有:
- 指令種類(lèi)少,指令格式規(guī)范:RISC指令集通常只使用一種或少數(shù)幾種格式。指令長(zhǎng)度單一(一般4個(gè)字節(jié)),并且在字邊界上對(duì)齊。字段位置、特別是操作碼的位置是固定的。
- 尋址方式簡(jiǎn)化:幾乎所有指令都使用寄存器尋址方式,尋址方式總數(shù)一般不超過(guò)5個(gè)。其他更為復(fù)雜的尋址方式,如間接尋址等則由軟件利用簡(jiǎn)單的尋址方式來(lái)合成。
- 大量利用寄存器間操作:RISC指令集中大多數(shù)操作都是寄存器到寄存器操作,只以簡(jiǎn)單的Load和Store操作訪問(wèn)內(nèi)存。因此,每條指令中訪問(wèn)的內(nèi)存地址不會(huì)超過(guò)1個(gè),訪問(wèn)內(nèi)存的操作不會(huì)與算術(shù)操作混在一起。
- 簡(jiǎn)化處理器結(jié)構(gòu):使用RISC指令集,可以大大簡(jiǎn)化處理器的控制器和其他功能單元的設(shè)計(jì),不必使用大量專(zhuān)用寄存器,特別是允許以硬件線路來(lái)實(shí)現(xiàn)指令操作,而不必像CISC處理器那樣使用微程序來(lái)實(shí)現(xiàn)指令操作。因此RISC處理器不必像CISC處理器那樣設(shè)置微程序控制存儲(chǔ)器,就能夠快速地直接執(zhí)行指令。
- 便于使用VLSI技術(shù):隨著LSI和VLSI技術(shù)的發(fā)展,整個(gè)處理器(甚至多個(gè)處理器)都可以放在一個(gè)芯片上。RISC體系結(jié)構(gòu)可以給設(shè)計(jì)單芯片處理器帶來(lái)很多好處,有利于提高性能,簡(jiǎn)化VLSI芯片的設(shè)計(jì)和實(shí)現(xiàn)。基于VLSI技術(shù),制造RISC處理器要比CISC處理器工作量小得多,成本也低得多。
- 加強(qiáng)了處理器并行能力:RISC指令集能夠非常有效地適合于采用流水線、超流水線和超標(biāo)量技術(shù),從而實(shí)現(xiàn)指令級(jí)并行操作,提高處理器的性能。目前常用的處理器內(nèi)部并行操作技術(shù)基本上是基于RISC體系結(jié)構(gòu)發(fā)展和走向成熟的。 - 正由于RISC體系所具有的優(yōu)勢(shì),它在高端系統(tǒng)得到了廣泛的應(yīng)用,而CISC體系則在桌面系統(tǒng)中占據(jù)統(tǒng)治地位。而在如今,在桌面領(lǐng)域,RISC也不斷滲透,預(yù)計(jì)未來(lái),RISC將要一統(tǒng)江湖。 
CPU的擴(kuò)展指令集
對(duì)于CPU來(lái)說(shuō),在基本功能方面,它們的差別并不太大,基本的指令集也都差不多,但是許多廠家為了提升某一方面性能,又開(kāi)發(fā)了擴(kuò)展指令集,擴(kuò)展指令集定義了新的數(shù)據(jù)和指令,能夠大大提高某方面數(shù)據(jù)處理能力,但必需要有軟件支持。
MMX 指令集 
 MMX(Multi Media eXtension,多媒體擴(kuò)展指令集)指令集是Intel公司于1996年推出的一項(xiàng)多媒體指令增強(qiáng)技術(shù)。MMX指令集中包括有57條多媒體指令,通過(guò)這些指令可以一次處理多個(gè)數(shù)據(jù),在處理結(jié)果超過(guò)實(shí)際處理能力的時(shí)候也能進(jìn)行正常處理,這樣在軟件的配合下,就可以得到更高的性能。MMX的益處在于,當(dāng)時(shí)存在的操作系統(tǒng)不必為此而做出任何修改便可以輕松地執(zhí)行MMX程序。但是,問(wèn)題也比較明顯,那就是MMX指令集與x87浮點(diǎn)運(yùn)算指令不能夠同時(shí)執(zhí)行,必須做密集式的交錯(cuò)切換才可以正常執(zhí)行,這種情況就勢(shì)必造成整個(gè)系統(tǒng)運(yùn)行質(zhì)量的下降。
SSE指令集 
 SSE(Streaming SIMD Extensions,單指令多數(shù)據(jù)流擴(kuò)展)指令集是Intel在Pentium III處理器中率先推出的。其實(shí),早在PIII正式推出之前,Intel公司就曾經(jīng)通過(guò)各種渠道公布過(guò)所謂的KNI(Katmai New Instruction)指令集,這個(gè)指令集也就是SSE指令集的前身,并一度被很多傳媒稱(chēng)之為MMX指令集的下一個(gè)版本,即MMX2指令集。究其背景,原來(lái)”KNI”指令集是Intel公司最早為其下一代芯片命名的指令集名稱(chēng),而所謂的”MMX2”則完全是硬件評(píng)論家們和媒體憑感覺(jué)和印象對(duì)”KNI”的 評(píng)價(jià),Intel公司從未正式發(fā)布過(guò)關(guān)于MMX2的消息。
而最終推出的SSE指令集也就是所謂勝出的”互聯(lián)網(wǎng)SSE”指令集。SSE指令集包括了70條指令,其中包含提高3D圖形運(yùn)算效率的50條SIMD(單指令多數(shù)據(jù)技術(shù))浮點(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)用起到全面強(qiáng)化的作用。S SE指令與3DNow!指令彼此互不兼容,但SSE包含了3DNow!技術(shù)的絕大部分功能,只是實(shí)現(xiàn)的方法不同。SSE兼容MMX指令,它可以通過(guò)SIMD和單時(shí)鐘周期并行處理多個(gè)浮點(diǎn)數(shù)據(jù)來(lái)有效地提高浮點(diǎn)運(yùn)算速度。
SSE2指令集 
 SSE2(Streaming SIMD Extensions 2,Intel官方稱(chēng)為SIMD 流技術(shù)擴(kuò)展 2或數(shù)據(jù)流單指令多數(shù)據(jù)擴(kuò)展指令集 2)指令集是Intel公司在SSE指令集的基礎(chǔ)上發(fā)展起來(lái)的。相比于SSE,SSE2使用了144個(gè)新增指令,擴(kuò)展了MMX技術(shù)和SSE技術(shù),這些指令提高了廣大應(yīng)用程序的運(yùn)行性能。隨MMX技術(shù)引進(jìn)的SIMD整數(shù)指令從64位擴(kuò)展到了128 位,使SIMD整數(shù)類(lèi)型操作的有效執(zhí)行率成倍提高。雙倍精度浮點(diǎn)SIMD指令允許以 SIMD格式同時(shí)執(zhí)行兩個(gè)浮點(diǎn)操作,提供雙倍精度操作支持有助于加速內(nèi)容創(chuàng)建、財(cái)務(wù)、工程和科學(xué)應(yīng)用。除SSE2指令之外,最初的SSE指令也得到增強(qiáng),通過(guò)支持多種數(shù)據(jù)類(lèi)型(例如,雙字和四字)的算術(shù)運(yùn)算,支持靈活并且動(dòng)態(tài)范圍更廣的計(jì)算功能。SSE2指令可讓軟件開(kāi)發(fā)員極其靈活的實(shí)施算法,并在運(yùn)行諸如MPEG-2、MP3、3D圖形等之類(lèi)的軟件時(shí)增強(qiáng)性能。Intel是從Willamette核心的Pentium 4開(kāi)始支持SSE2指令集的,而AMD則是從K8架構(gòu)的SledgeHammer核心的Opteron開(kāi)始才支持SSE2指令集的。
SSE3指令集 
 SSE3(Streaming SIMD Extensions 3,Intel官方稱(chēng)為SIMD 流技術(shù)擴(kuò)展 3或數(shù)據(jù)流單指令多數(shù)據(jù)擴(kuò)展指令集 3)指令集是Intel公司在SSE2指令集的基礎(chǔ)上發(fā)展起來(lái)的。相比于SSE2,SSE3在SSE2的基礎(chǔ)上又增加了13個(gè)額外的SIMD指令。SSE3 中13個(gè)新指令的主要目的是改進(jìn)線程同步和特定應(yīng)用程序領(lǐng)域,例如媒體和游戲。這些新增指令強(qiáng)化了處理器在浮點(diǎn)轉(zhuǎn)換至整數(shù)、復(fù)雜算法、視頻編碼、SIMD浮點(diǎn)寄存器操作以及線程同步等五個(gè)方面的表現(xiàn),最終達(dá)到提升多媒體和游戲性能的目的。Intel是從Prescott核心的Pentium 4開(kāi)始支持SSE3指令集的,而AMD則是從2005年下半年Troy核心的Opteron開(kāi)始才支持SSE3的。但是需要注意的是,AMD所支持的SSE3與Intel的SSE3并不完全相同,主要是刪除了針對(duì)Intel超線程技術(shù)優(yōu)化的部分指令。
3D Now !指令集 
 由AMD公司提出的3DNow!指令集應(yīng)該說(shuō)出現(xiàn)在SSE指令集之前,并被AMD廣泛應(yīng)用于其K6-2 、K6-3以及Athlon(K7)處理器上。3DNow!指令集技術(shù)其實(shí)就是21條機(jī)器碼的擴(kuò)展指令集。
與Intel公司的MMX技術(shù)側(cè)重于整數(shù)運(yùn)算有所不同,3DNow!指令集主要針對(duì)三維建模、坐標(biāo)變換 和效果渲染等三維應(yīng)用場(chǎng)合,在軟件的配合下,可以大幅度提高3D處理性能。后來(lái)在Athlon上開(kāi)發(fā)了Enhanced 3DNow!。這些AMD標(biāo)準(zhǔn)的SIMD指令和Intel的SSE具有相同效能。因?yàn)槭艿絀ntel在商業(yè)上以及Pentium III成功的影響,軟件在支持SSE上比起3DNow!更為普遍。Enhanced 3DNow!AMD公司繼續(xù)增加至52個(gè)指令,包含了一些SSE碼,因而在針對(duì)SSE做最佳化的軟件中能獲得更好的效能。
目前最新的Intel CPU可以支持SSE、SSE2、SSE3指令集。早期的AMD CPU僅支持3DNow!指令集,隨著Intel的逐步授權(quán),從Venice核心的Athlon 64開(kāi)始,AMD的CPU不僅進(jìn)一步發(fā)展了3DNow!指令集,并且可以支持Inel的SSE、SSE2、SSE3指令集。不過(guò)目前業(yè)界接受比較廣泛的還是Intel的SSE系列指令集,AMD的3DNow!指令集應(yīng)用比較少。
REFERENCE 
 1. Instruction set 
 2. RISC vs. CISC 
 3. Computer architecture 
 4. X86 
 5. x86 architecture
總結(jié)
以上是生活随笔為你收集整理的MMX, SSE, SSE2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: FPU、MMX、SSE
- 下一篇: MMX、SSE、AVX等SIMD指令集说
