close
from  http://financenews.sina.com/sinacn/304-000-106-109/2009-07-01/17461098448.html

CPU中的指令集,雖然不起眼,但是在CPU的運算中有重要加速作用,尤其是編碼方面,若使用的軟件對CPU的指令集有優化,那麼CPU的運算效能較無指令集優化運行速度有很大提升。SSE指令集作為Intel的頂梁柱,重要些不言而喻。每次的SSE指令集升級,都牽動著英特爾不少心血,除了自身研發指令集外,如何能讓眾多軟件支持新指令集是更為關鍵的問題。

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指令集包括了70條指令,其中包含提高3D圖形運算效率的50條SIMD(單指令多數據技術)浮點運算指令、12條MMX 整數運算增強指令、8條優化內存中連續數據塊傳輸指令。理論上這些指令對目前流行的圖像處理、浮點運算、3D運算、視頻處理、音頻處理等諸多多媒體應用起到全面強化的作用。SSE指令與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超線程技術優化的部分指令。


SSSE3指令集
SSSE3(Supplemental Streaming SIMD Extensions 3)內置于Intel公司微處理器中的多媒體關聯的擴張指令集。是擴張了SSE3的產品,于2006年7月首次裝載在Core 2 Duo處理器中。SSSE3裝載了用一個命令一口氣處理複數個數據的「SIMD」的處理方式,特別在處理語音和動畫關聯上能夠高速地發揮力量。SSSE3是在 SSE3命令的基礎上又添加了32個新命令的產品,其原名為TNI,是SSE4指令集的子集,包含有13條命令。


SSE4指令集的兩個分支:SSE4.1 + SSE4.2
SSE4指令集被認為是2001年以來Intel最重要的指令集擴展,包含54條指令。 Intel在Penryn處理器中加入了對SSE4.1的支持,共增加了47條新指令,提升了處理器在圖形、3D圖像與游戲、視頻編碼與影音處理等方面的性能表現。本次在Nehalem處理器中,進一步支持了SSE4.2指令集。SSE4.2完整的實現了SSE4指令集,相對于SSE4.1加入了7條新指令。


SSE4.1指令集
45納米加入了SSE4.1指令集,令處理器的多媒體處理能力得到最大70%的提升。SSE4加入了6條浮點型點積運算指令,支持單精度、雙精度浮點運算及浮點產生操作,且IEEE 754指令 (Nearest, -Inf, +Inf, and Truncate) 可立即轉換其路徑模式,大大減少延誤,這些改變將對游戲及 3D 內容制作應用有重要意義。此外,SSE4加入串流式負載指令,可提高以圖形幀緩衝區的讀取數據頻寬,理論上可獲取完整的快取緩存行,即每次讀取64Bit而非8Bit,並可保持在臨時緩衝區內,讓指令最多可帶來8倍的讀取頻寬效能提升,對于視訊處理、成像以及圖形處理器與中央處理器之間的共享數據應用,有著明顯的效能提升。


SSE4指令集讓45nm Penryn處理器增加了2個不同的32Bit向量整數乘法運算單元,並加入8位無符號(Unsigned)最小值及最大值運算,以及16Bit及32Bit有符號 (Signed) 運算。在面對支持SSE4指令集的軟件時,可以有效的改善編譯器效率及提高向量化整數及單精度代碼的運算能力。同時,SSE4改良插入、提取、尋找、離散、跨步負載及存儲等動作,令向量運算進一步專門。


SSE4.2指令集
在Nehalem架構的Core i7處理器中,SSE4.2指令集被引入,加入了STTNI(字符串文本新指令)和ATA(面向應用的加速器)兩大優化指令。SSE4.2新加入的幾條新指令有兩類。


第一類是字符串與文本新指令STTNI,STTNI包含了四條具體的指令。STTNI指令可以對兩個16位的數據進行匹配操作,以加速在XML分析方面的性能。據Intel表示,新指令可以在XML分析方面取得3.8倍的性能提升。


第二類指令是面向應用的加速指令ATA。ATA包括冗余校驗的CRC32指令、計算源操作數中非0位個數的POPCNT指令,以及對于打包的64位算術運算的SIMD指令。CRC32指令可以取代上層數據協議中經常用到的循環冗余校驗,據Intel表示其加速比可以達到6.5~18.6倍;POPCNT用于提高在DNA基因配對、聲音識別等包含大數據集中進行模式識別和搜索等操作的應用程序性能。 Intel也公布了支持新指令集的開發工具。這些工具涵蓋了主流的編譯開發環境。目前已明確支持SSE4.2的開發環境包括:Intel C++ Compiler 10.X、微軟的Visual Studio 2008 VC++、GCC 4.3.1、Sun Studio Express等。程序員可以直接使用高級編程語言編程,編譯器會自動生成優化結果。當然程序員也可以用內嵌匯編的方式來達到目的。

 

 

 

 
arrow
arrow
    全站熱搜

    chunyuan 發表在 痞客邦 留言(0) 人氣()