MMX, SSE, SSE2

指令集基本概念

CPU依靠指令來計算和控制系統,每款CPU在設計時就規定了一系列與其硬件電路相配合的指令系統。指令的強弱也是CPU的重要指標,指令集是提高微處理器效率的最有效工具之一。指令集是存儲在CPU內部,對CPU運算進行指導和優化的硬程序。擁有這些指令集,CPU就可以更高效地運行。

指令集類別

從現階段的主流體系結構角度
- 複雜指令集
A complex instruction set computer (CISC) has many specialized instructions, some of which may only be rarely used in practical programs.
- 精簡指令集
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.

而從具體運用看,如Intel的MMX(Multi Media Extended)、SSE、 SSE2(Streaming-Single instruction multiple data-Extensions 2)和AMD的3DNow!等都是CPU的擴展指令集,分別增強了CPU的多媒體、圖形圖象和Internet等的處理能力。我們通常會把CPU的擴展指令集稱爲”CPU的指令集”。

精簡指令集的運用

在最初發明計算機的數十年裏,隨着計算機功能日趨增大,性能日趨變強,內部元器件也越來越多,指令集日趨複雜,過於冗雜的指令嚴重的影響了計算機的工作效率。後來經過研究發現,在計算機中,80%程序只用到了20%的指令集,基於這一發現,RISC精簡指令集被提了出來,這是計算機系統架構的一次深刻革命。RISC體系結構的基本思路是:抓住CISC指令系統指令種類太多、指令格式不規範、尋址方式太多的缺點,通過減少指令種類、規範指令格式和簡化尋址方式,方便處理器內部的並行處理,提高VLSI器件的使用效率,從而大幅度地提高處理器的性能。

  RISC指令集有許多特徵,其中最重要的有:

  • 指令種類少,指令格式規範:RISC指令集通常只使用一種或少數幾種格式。指令長度單一(一般4個字節),並且在字邊界上對齊。字段位置、特別是操作碼的位置是固定的。
  • 尋址方式簡化:幾乎所有指令都使用寄存器尋址方式,尋址方式總數一般不超過5個。其他更爲複雜的尋址方式,如間接尋址等則由軟件利用簡單的尋址方式來合成。
  • 大量利用寄存器間操作:RISC指令集中大多數操作都是寄存器到寄存器操作,只以簡單的Load和Store操作訪問內存。因此,每條指令中訪問的內存地址不會超過1個,訪問內存的操作不會與算術操作混在一起。
  • 簡化處理器結構:使用RISC指令集,可以大大簡化處理器的控制器和其他功能單元的設計,不必使用大量專用寄存器,特別是允許以硬件線路來實現指令操作,而不必像CISC處理器那樣使用微程序來實現指令操作。因此RISC處理器不必像CISC處理器那樣設置微程序控制存儲器,就能夠快速地直接執行指令。
  • 便於使用VLSI技術:隨着LSI和VLSI技術的發展,整個處理器(甚至多個處理器)都可以放在一個芯片上。RISC體系結構可以給設計單芯片處理器帶來很多好處,有利於提高性能,簡化VLSI芯片的設計和實現。基於VLSI技術,製造RISC處理器要比CISC處理器工作量小得多,成本也低得多。
  • 加強了處理器並行能力:RISC指令集能夠非常有效地適合於採用流水線、超流水線和超標量技術,從而實現指令級並行操作,提高處理器的性能。目前常用的處理器內部並行操作技術基本上是基於RISC體系結構發展和走向成熟的。

      正由於RISC體系所具有的優勢,它在高端系統得到了廣泛的應用,而CISC體系則在桌面系統中佔據統治地位。而在如今,在桌面領域,RISC也不斷滲透,預計未來,RISC將要一統江湖。

CPU的擴展指令集

對於CPU來說,在基本功能方面,它們的差別並不太大,基本的指令集也都差不多,但是許多廠家爲了提升某一方面性能,又開發了擴展指令集,擴展指令集定義了新的數據和指令,能夠大大提高某方面數據處理能力,但必需要有軟件支持。

MMX 指令集
MMX(Multi Media eXtension,多媒體擴展指令集)指令集是Intel公司於1996年推出的一項多媒體指令增強技術。MMX指令集中包括有57條多媒體指令,通過這些指令可以一次處理多個數據,在處理結果超過實際處理能力的時候也能進行正常處理,這樣在軟件的配合下,就可以得到更高的性能。MMX的益處在於,當時存在的操作系統不必爲此而做出任何修改便可以輕鬆地執行MMX程序。但是,問題也比較明顯,那就是MMX指令集與x87浮點運算指令不能夠同時執行,必須做密集式的交錯切換纔可以正常執行,這種情況就勢必造成整個系統運行質量的下降。

SSE指令集
SSE(Streaming SIMD Extensions,單指令多數據流擴展)指令集是Intel在Pentium III處理器中率先推出的。其實,早在PIII正式推出之前,Intel公司就曾經通過各種渠道公佈過所謂的KNI(Katmai New Instruction)指令集,這個指令集也就是SSE指令集的前身,並一度被很多傳媒稱之爲MMX指令集的下一個版本,即MMX2指令集。究其背景,原來”KNI”指令集是Intel公司最早爲其下一代芯片命名的指令集名稱,而所謂的”MMX2”則完全是硬件評論家們和媒體憑感覺和印象對”KNI”的 評價,Intel公司從未正式發佈過關於MMX2的消息。

  而最終推出的SSE指令集也就是所謂勝出的”互聯網SSE”指令集。SSE指令集包括了70條指令,其中包含提高3D圖形運算效率的50條SIMD(單指令多數據技術)浮點運算指令、12條MMX 整數運算增強指令、8條優化內存中連續數據塊傳輸指令。理論上這些指令對目前流行的圖像處理、浮點運算、3D運算、視頻處理、音頻處理等諸多多媒體應用起到全面強化的作用。S SE指令與3DNow!指令彼此互不兼容,但SSE包含了3DNow!技術的絕大部分功能,只是實現的方法不同。SSE兼容MMX指令,它可以通過SIMD和單時鐘週期並行處理多個浮點數據來有效地提高浮點運算速度。

SSE2指令集
SSE2(Streaming SIMD Extensions 2,Intel官方稱爲SIMD 流技術擴展 2或數據流單指令多數據擴展指令集 2)指令集是Intel公司在SSE指令集的基礎上發展起來的。相比於SSE,SSE2使用了144個新增指令,擴展了MMX技術和SSE技術,這些指令提高了廣大應用程序的運行性能。隨MMX技術引進的SIMD整數指令從64位擴展到了128 位,使SIMD整數類型操作的有效執行率成倍提高。雙倍精度浮點SIMD指令允許以 SIMD格式同時執行兩個浮點操作,提供雙倍精度操作支持有助於加速內容創建、財務、工程和科學應用。除SSE2指令之外,最初的SSE指令也得到增強,通過支持多種數據類型(例如,雙字和四字)的算術運算,支持靈活並且動態範圍更廣的計算功能。SSE2指令可讓軟件開發員極其靈活的實施算法,並在運行諸如MPEG-2、MP3、3D圖形等之類的軟件時增強性能。Intel是從Willamette核心的Pentium 4開始支持SSE2指令集的,而AMD則是從K8架構的SledgeHammer核心的Opteron開始才支持SSE2指令集的。

SSE3指令集
SSE3(Streaming SIMD Extensions 3,Intel官方稱爲SIMD 流技術擴展 3或數據流單指令多數據擴展指令集 3)指令集是Intel公司在SSE2指令集的基礎上發展起來的。相比於SSE2,SSE3在SSE2的基礎上又增加了13個額外的SIMD指令。SSE3 中13個新指令的主要目的是改進線程同步和特定應用程序領域,例如媒體和遊戲。這些新增指令強化了處理器在浮點轉換至整數、複雜算法、視頻編碼、SIMD浮點寄存器操作以及線程同步等五個方面的表現,最終達到提升多媒體和遊戲性能的目的。Intel是從Prescott核心的Pentium 4開始支持SSE3指令集的,而AMD則是從2005年下半年Troy核心的Opteron開始才支持SSE3的。但是需要注意的是,AMD所支持的SSE3與Intel的SSE3並不完全相同,主要是刪除了針對Intel超線程技術優化的部分指令。

3D Now !指令集
由AMD公司提出的3DNow!指令集應該說出現在SSE指令集之前,並被AMD廣泛應用於其K6-2 、K6-3以及Athlon(K7)處理器上。3DNow!指令集技術其實就是21條機器碼的擴展指令集。

  與Intel公司的MMX技術側重於整數運算有所不同,3DNow!指令集主要針對三維建模、座標變換 和效果渲染等三維應用場合,在軟件的配合下,可以大幅度提高3D處理性能。後來在Athlon上開發了Enhanced 3DNow!。這些AMD標準的SIMD指令和Intel的SSE具有相同效能。因爲受到Intel在商業上以及Pentium III成功的影響,軟件在支持SSE上比起3DNow!更爲普遍。Enhanced 3DNow!AMD公司繼續增加至52個指令,包含了一些SSE碼,因而在針對SSE做最佳化的軟件中能獲得更好的效能。

目前最新的Intel CPU可以支持SSE、SSE2、SSE3指令集。早期的AMD CPU僅支持3DNow!指令集,隨着Intel的逐步授權,從Venice核心的Athlon 64開始,AMD的CPU不僅進一步發展了3DNow!指令集,並且可以支持Inel的SSE、SSE2、SSE3指令集。不過目前業界接受比較廣泛的還是Intel的SSE系列指令集,AMD的3DNow!指令集應用比較少。

REFERENCE
1. Instruction set
2. RISC vs. CISC
3. Computer architecture
4. X86
5. x86 architecture

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章