小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

處理器的大腦 讀懂CPU指令集

 shiwangxu 2010-12-17

在我們對一款CPU進行全面的了解的時候,我們看看大多數(shù)人都遺漏了什么。很多人一般先從處理器的架構(gòu)開始,看看該處理器采用了什么架構(gòu),相比上一代或者競爭對手的CPU在架構(gòu)上都有什么改進或者優(yōu)勢。

其次,再看這款CPU與同檔次的處理器的主頻孰高孰低,默認高主頻的處理器一般是采用較好的晶圓來制造的,穩(wěn)定性更好,再次是看該處理器的緩存容量有多少(尤其是Intel的處理器非常依賴緩存),緩存充當處理器與緩存之間的橋梁,起到一定的數(shù)據(jù)緩沖作用。


全面了解處理器

最后我們要看該處理器采用的制程,一般制程越先進,發(fā)熱量越低,而相對越好超,而比較關注節(jié)能性能的網(wǎng)友,還會著重看該處理器的功耗為多少。那么我們看完這些參數(shù)是不是漏了些什么呢?

其實仔細想想,我們會恍然大悟,還有該處理器支持的指令集。處理器單靠里面的硬件電路是不會計算的,必須依靠指令來計算和控制系統(tǒng)。

● CPU指令集至關重要

每款CPU設計的時候就制定了一套與內(nèi)部電路配合的指令系統(tǒng),從具體運用看,我們可以在很多CPU身上看到的就有MMX(Multi Media Extended)、SSE(Streaming SIMD Extensions)、SSE2、SSE3、SSSE3、SSE4(分為SSE4.1與SSE4.2兩代,AMD的SSE4A包含在SSE4里面,這個后面會提到),另外還有AMD的3D NOW!系列。

這些指令集可謂大大增強了CPU的多媒體、圖形圖象和Internet等的處理能力,下面就讓我們逐個了解下。


● MMX增強多媒體表現(xiàn)

MMX(Multi Media eXtension,多媒體擴展指令集)指令集是英特爾于1996年推出,主要用于多媒體指令增強。

MMX指令集中包括有57條多媒體指令,通過這些指令可以一次處理多個數(shù)據(jù),在處理結(jié)果超過實際處理能力的時候也能進行正常處理。MMX的益處在于,當時存在的操作系統(tǒng)不必為此而做出任何修改便可以輕松地執(zhí)行MMX程序。

支持MMX的處理器擁有8個MMX寄存器,每個有64-bit(8byte)的容量。MMX僅支持整數(shù)操作,支持1/2/4/8-bytes數(shù)據(jù)。那即是說,一個MMX寄存器能夠儲存8/4/2/1個操作。這造成了MMX指令集與x87浮點運算指令不能夠同時執(zhí)行,必須做密集式的交錯切換才可以正常執(zhí)行,這種情況就勢必造成整個系統(tǒng)運行質(zhì)量的下降。目前AMD和和英特爾處理器都支持這一指令集。
 

3D NOW!加速三維渲染

    3DNow!指令集是由AMD提出的,廣泛應用于其K6-2 、K6-3以及Athlon(K7)處理器上。3DNow!跟后面提到的SSE非常類似,但也有一些不同。它擁有 8個新的寄存器,卻是64-bit的,并非128-bit。這樣,它只能存儲兩個浮點數(shù)據(jù),而非四個。

你知道處理器指令集嗎?指令集有何用

K6處理器開始具有3D NOW!指令集

    3DNow!可以執(zhí)行操作:相加/相乘 /相除運算,精確或者近似平分根。3DNow!指令集技術(shù)其實就是21條機器碼的擴展指令集。3DNow!指令集主要針對三維建模、坐標變換 和效果渲染等三維應用場合,在軟件的配合下,可以大幅度提高3D處理性能。后來在Athlon上開發(fā)了Enhanced 3DNow!。


● SSE加快處理多媒體應用

SSE全拼是Streaming SIMD Extension,中文名稱為SIMD擴展流。SIMD英文全稱為 Single Istruction Multiple Data(單指令多數(shù)據(jù)),即一條指令可以完成多個操作。SSE是為提供處理器浮點性能而開發(fā)的擴展指令集。

SSE指令集包括了70條指令,其中包含單指令多數(shù)據(jù)浮點計算、以及額外的SIMD整數(shù)和高速緩存控制指令。其優(yōu)勢包括:更高分辨率的圖像瀏覽和處理、高質(zhì)量音頻、MPEG2視頻、同時MPEG2加解密;語音識別占用更少CPU資源;更高精度和更快響應速度。
 

SSE指令與3DNow!指令彼此互不兼容,但SSE包含了3DNow!技術(shù)的絕大部分功能,只是實現(xiàn)的方法不同。SSE兼容MMX指令,它可以通過SIMD和單時鐘周期并行處理多個浮點數(shù)據(jù)來有效地提高浮點運算速度。

SSE(Streaming SIMD Extensions)是英特爾在AMD的3D Now!發(fā)布一年之后,在其計算機芯片Pentium III中引入的指令集,是MMX的超集。AMD后來在Athlon XP中加入了對這個指令集的支持。這個指令集增加了對8個128位寄存器XMM0-XMM7的支持,每個寄存器可以存儲4個單精度浮點數(shù)。使用這些寄存器的程序必須使用FXSAVE和FXRSTR指令來保持和恢復狀態(tài)。但是在Pentium III對SSE的實現(xiàn)中,浮點數(shù)寄存器又一次被新的指令集占用了,但是這一次切換運算模式不是必要的了,只是SSE和浮點數(shù)指令不能同時進入CPU的處理線而已。
 

SSE2 更精確處理浮點數(shù)

    SSE2是英特爾為了應對AMD的3Dnow!+指令集,在SSE的基礎上開發(fā)了SSE2,增加了一些指令,使得其處理器性能有大幅度提高。

    最早在Pentium 4處理器的最初版本中引入,AMD后來在Opteron 和Athlon 64處理器中也加入了SSE2的支持。到P4設計結(jié)束為止,Intel增加了一套包括144條新建指令的SSE2指令集。SSE2涉及了多重的數(shù)據(jù)目標上立刻執(zhí)行一單個的指令(即SIMD)。最重要的是SSE2能處理128位和兩倍精密浮點數(shù)學運算。

    處理更精確浮點數(shù)的能力使SSE2成為加速多媒體程序、3D處理工程以及工作站類型任務的基礎配置。

    SSE2指令集添加了對64位雙精度浮點數(shù)的支持,以及對整型數(shù)據(jù)的支持,也就是說這個指令集中所有的MMX指令都是多余的了,同時也避免了占用浮點數(shù)寄存器。這個指令集還增加了對CPU快取的控制指令。AMD對它的擴展增加了8個XMM寄存器,但是需要切換到64位模式(AMD64)才可以使用這些寄存器。Intel后來在其EM64T架構(gòu)中也增加了對AMD64的支持。


● SSE3促進五個應用

SSE3指令集是規(guī)模最小的指令集,此前MMX包含有57條命令,SSE包含有50條命令,SSE2包含有144條命令,SSE3包含有13條命令。此外Intel害針對SSE3指令集作了一次額外擴充,那就是SSSE3是,最早內(nèi)建于Core 2 Duo處理器中。
 

SSE3指令集共分為5個應用層: 第一層是“數(shù)據(jù)傳輸”,只有一條指令:FISTTP,它有利于x87浮點轉(zhuǎn)換成整數(shù),并可以大大提高優(yōu)化的效率。 第二層是“數(shù)據(jù)處理”,指令共有五條,分別是ADDSUBPS,ADDSUBPD,MOVSHDUP,MOVSLDUP,MOVDDUP。這些指令可以簡化復雜數(shù)據(jù)的處理過程,由于未來數(shù)據(jù)處理流量將會越來越大,因此Intel在這里應用的指令集最多、達到了五條。 第三層是“特殊處理”,也只有一條:LDDQU。在這條指令主要針對視頻解碼,用來提高處理器對處理媒體數(shù)據(jù)結(jié)果的精確性。 第四層是“優(yōu)化”,共有四條指令,分別是HADDPS,HSUBPS,HADDPD,HSUBPD,它們可以對程序起到自動優(yōu)化的作用,對處理3D圖形相當有用。 第五層是“超線程性能增強”,共有兩條針對線程處理的指令:MONITOR, MWAIT,這有助于增加Intel超線程的處理能力、大大簡化了超線程的數(shù)據(jù)處理過程。
 

SSE4.1改進視頻處理

    SSE4.1是Intel在Penryn核心的Core 2 Duo與Core 2 Solo處理器時,新增的47條新多媒體指令集,用來加強視頻編輯等方面的應用。另外,AMD也開發(fā)了屬于自己的SSE4a多媒體指令集,并內(nèi)建在Phenom與Opteron等K10架構(gòu)處理器中,不過相關應用都差不多,并且無法與Intel的SSE4系列指令集相容。

    據(jù)了解,在進行視頻編碼時需要進行動態(tài)預測(Motion Estimation)及差分編碼方式去除相鄰2張影像之相關性,這是一個非常復雜的運算動作。在沒有SSE4指令集時,完成一個步驟需要以下指令語句:

  for (int moveblock=0;moveblock<16;moveblock++)

  for(int line=0; line<16; line++) // Does the 16 pixels large in 4 iteration

  {

  int i=0;

  sum0+=abs( pBlock1[j]-pBlock2)+abs(pBlock1[j+1]-pBlock2[i+1])+abs(pBlock1[j+2]-pBlock2[i+2])+abs(pBlock1[j+3]-pBlock2[i+3]); // Compare with 0 pixel offset

  sum1+=abs(pBlock1[j+1]-pBlock2)+abs(pBlock1[j+2]-pBlock2[i+1])+abs(pBlock1[j+3]-pBlock2[i+2])+abs(pBlock1[j+4]-pBlock2[i+3]); // Compare with 1 pixel offset

  sum2+=abs(pBlock1[j+2]-pBlock2)+abs(pBlock1[j+3]-pBlock2[i+1])+abs(pBlock1[j+4]-pBlock2[i+2])+abs(pBlock1[j+5]-pBlock2[i+3]); // Compare with 2 pixel offset

  sum3+=abs(pBlock1[j+3]-pBlock2)+abs(pBlock1[j+4]-pBlock2[i+1])+abs(pBlock1[j+5]-pBlock2[i+2])+abs(pBlock1[j+6]-pBlock2[i+3]); // Compare with 3 pixel offset

  sum4+=abs(pBlock1[j+4]-pBlock2)+abs(pBlock1[j+5]-pBlock2[i+1])+abs(pBlock1[j+6]-pBlock2[i+2])+abs(pBlock1[j+7]-pBlock2[i+3]); // Compare with 4 pixel offset

    sum5+=abs(pBlock1[j+5]-pBlock2)+abs(pBlock1[j+6]-pBlock2[i+1])+abs(pBlock1[j+7]-pBlock2[i+2])+abs(pBlock1[j+8]-pBlock2[i+3]); // Compare with 5 pixel offset

    sum6+=abs(pBlock1[j+6]-pBlock2)+abs(pBlock1[j+7]-pBlock2[i+1])+abs(pBlock1[j+8]-pBlock2[i+2])+abs(pBlock1[j+9]-pBlock2[i+3]); // Compare with 6 pixel offset

    sum7+=abs(pBlock1[j+7]-pBlock2)+abs(pBlock1[j+8]-pBlock2[i+1])+abs(pBlock1[j+9]-pBlock2[i+2])+abs(pBlock1[j+10]-pBlock2[i+3]); // Compare with 7 pixel offset

  i=4;

  j=moveblock+4;

  …

  … }

  }

  一大串的指令極度浪費處理器資源,而在支持SSE4指令集的處理器上,只需要采用4 SAD運算指令:

  MPSADBW xmm0,xmm1,0

  便完全代替了以上繁復的指令串,大幅提升動態(tài)預測(Motion Estimation)及差分編碼的運算速度。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多