芒果视频下载

網(wang)站分類
登錄 |    

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

本文章由注冊用戶 擼白人森 上傳提供 評論 發布 反饋 0
摘要:CPU知識入門-特點-分類篇:文章對CPU指令集做了詳細的介紹說明。在支持SSE4指令集的處理器上,只需要采用4 SAD運算指令便完全代替了繁復的指令串,大幅提升動態預測及差分編碼的運算速度。

處理(li)器的大腦 讀懂(dong)CPU指令(ling)集

在(zai)我(wo)(wo)們對一款CPU進(jin)行全面的(de)了解的(de)時候,我(wo)(wo)們看看大多數人都遺漏了什么(me)。很多人一般先從處(chu)理器的(de)架(jia)構(gou)開始,看看該處(chu)理器采(cai)用了什么(me)架(jia)構(gou),相比上一代或者(zhe)競爭對手的(de)CPU在(zai)架(jia)構(gou)上都有什么(me)改進(jin)或者(zhe)優勢。

其次,再看(kan)這款CPU與同檔次的處(chu)理器(qi)的主(zhu)(zhu)頻孰(shu)高(gao)(gao)孰(shu)低,默認高(gao)(gao)主(zhu)(zhu)頻的處(chu)理器(qi)一(yi)般是采(cai)用較好的晶圓來制造的,穩定性更好,再次是看(kan)該處(chu)理器(qi)的緩(huan)存容(rong)量有多少(尤其是Intel的處(chu)理器(qi)非常依賴緩(huan)存),緩(huan)存充當處(chu)理器(qi)與緩(huan)存之間的橋(qiao)梁,起(qi)到一(yi)定的數(shu)據緩(huan)沖(chong)作用。

全面了解處理器

最后我們要看該處(chu)理器(qi)采用的制(zhi)(zhi)程,一般(ban)制(zhi)(zhi)程越先進(jin),發熱量越低,而相(xiang)對越好超,而比較關注節(jie)能(neng)性能(neng)的網(wang)友,還會著重看該處(chu)理器(qi)的功耗為(wei)多少(shao)。那么我們看完這些參數是(shi)不(bu)是(shi)漏(lou)了些什么呢?

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

● CPU指令集至關重要

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

這些指(zhi)令集(ji)可謂(wei)大(da)大(da)增強了(le)CPU的(de)多媒(mei)體、圖形圖象和Internet等的(de)處理能力(li),下面(mian)就讓我們逐個了(le)解下。

● MMX增強多媒體表現

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

MMX指令(ling)(ling)集(ji)中包括有57條多(duo)媒體指令(ling)(ling),通(tong)過這些(xie)指令(ling)(ling)可以一次處(chu)(chu)理多(duo)個數據,在處(chu)(chu)理結果(guo)超過實際處(chu)(chu)理能力的(de)(de)時(shi)候也能進行(xing)(xing)正常處(chu)(chu)理。MMX的(de)(de)益處(chu)(chu)在于,當時(shi)存(cun)在的(de)(de)操作(zuo)系(xi)統(tong)不必為(wei)此而做出任何修改(gai)便可以輕松地執行(xing)(xing)MMX程序。

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

● 3D NOW!加速三維渲染

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

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

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

● SSE加快處理多媒體應用

SSE全拼是Streaming SIMD Extension,中文(wen)名(ming)稱(cheng)為(wei)SIMD擴展流。SIMD英文(wen)全稱(cheng)為(wei) Single Istruction Multiple Data(單指(zhi)令多(duo)數據),即一條指(zhi)令可(ke)以完(wan)成(cheng)多(duo)個操作。SSE是為(wei)提供處理器浮點性(xing)能而開發的擴展指(zhi)令集。

SSE指(zhi)令(ling)集(ji)包(bao)(bao)括(kuo)了70條指(zhi)令(ling),其(qi)中包(bao)(bao)含單指(zhi)令(ling)多(duo)數據浮點計算、以及額(e)外的SIMD整數和高(gao)速緩存控制指(zhi)令(ling)。其(qi)優勢包(bao)(bao)括(kuo):更高(gao)分辨(bian)率的圖(tu)像瀏(liu)覽(lan)和處理(li)、高(gao)質(zhi)量音(yin)頻、MPEG2視頻、同時(shi)MPEG2加解(jie)密;語音(yin)識別(bie)占用更少(shao)CPU資源;更高(gao)精度(du)和更快響(xiang)應(ying)速度(du)。

SSE指(zhi)令與(yu)3DNow!指(zhi)令彼此(ci)互不兼(jian)容,但SSE包含了3DNow!技術的絕大部分功能,只是實現(xian)的方法不同。SSE兼(jian)容MMX指(zhi)令,它可(ke)以通過(guo)SIMD和單時鐘周期并(bing)行處理多(duo)個浮(fu)點數據來有效(xiao)地提高(gao)浮(fu)點運算速度(du)。

SSE(Streaming SIMD Extensions)是英特爾(er)在(zai)(zai)AMD的(de)(de)(de)3D Now!發布(bu)一(yi)年(nian)之后(hou)(hou),在(zai)(zai)其(qi)計算機芯(xin)片Pentium III中(zhong)(zhong)引入(ru)的(de)(de)(de)指令(ling)集,是MMX的(de)(de)(de)超集。AMD后(hou)(hou)來在(zai)(zai)Athlon XP中(zhong)(zhong)加入(ru)了對(dui)這(zhe)(zhe)個(ge)指令(ling)集的(de)(de)(de)支持。這(zhe)(zhe)個(ge)指令(ling)集增加了對(dui)8個(ge)128位(wei)寄存(cun)器XMM0-XMM7的(de)(de)(de)支持,每個(ge)寄存(cun)器可(ke)以(yi)存(cun)儲(chu)4個(ge)單精(jing)度浮點數。使用這(zhe)(zhe)些(xie)寄存(cun)器的(de)(de)(de)程(cheng)序必須使用FXSAVE和(he)FXRSTR指令(ling)來保持和(he)恢(hui)復(fu)狀態。但(dan)(dan)是在(zai)(zai)Pentium III對(dui)SSE的(de)(de)(de)實現中(zhong)(zhong),浮點數寄存(cun)器又(you)一(yi)次被新的(de)(de)(de)指令(ling)集占用了,但(dan)(dan)是這(zhe)(zhe)一(yi)次切換運算模式不是必要的(de)(de)(de)了,只是SSE和(he)浮點數指令(ling)不能同時進(jin)入(ru)CPU的(de)(de)(de)處理(li)線而(er)已(yi)。

● SSE2 更精確處理浮點數

SSE2是英特(te)爾為了(le)應對(dui)AMD的(de)3Dnow!+指令集,在SSE的(de)基礎(chu)上開(kai)發了(le)SSE2,增加了(le)一些指令,使得(de)其處理(li)器性(xing)能有(you)大幅度提高(gao)。

最(zui)早在(zai)(zai)Pentium 4處(chu)理器的(de)最(zui)初(chu)版(ban)本中(zhong)引入(ru),AMD后(hou)來在(zai)(zai)Opteron 和Athlon 64處(chu)理器中(zhong)也加入(ru)了(le)SSE2的(de)支持。到P4設計結束為止,Intel增加了(le)一(yi)套包括144條新建指令的(de)SSE2指令集。SSE2涉及了(le)多(duo)重(zhong)的(de)數據目標上立刻(ke)執行一(yi)單個的(de)指令(即SIMD)。最(zui)重(zhong)要(yao)的(de)是SSE2能(neng)處(chu)理128位(wei)和兩倍(bei)精密浮點數學運算。

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

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

● SSE3促進五個應用

SSE3指令(ling)(ling)(ling)集(ji)是(shi)(shi)規模最小(xiao)的指令(ling)(ling)(ling)集(ji),此前(qian)MMX包含有(you)57條(tiao)命(ming)(ming)令(ling)(ling)(ling),SSE包含有(you)50條(tiao)命(ming)(ming)令(ling)(ling)(ling),SSE2包含有(you)144條(tiao)命(ming)(ming)令(ling)(ling)(ling),SSE3包含有(you)13條(tiao)命(ming)(ming)令(ling)(ling)(ling)。此外Intel害(hai)針對SSE3指令(ling)(ling)(ling)集(ji)作了一(yi)次額外擴充,那就是(shi)(shi)SSSE3是(shi)(shi),最早內建于(yu)Core 2 Duo處理器中。

SSE3指(zhi)(zhi)令(ling)集共(gong)分(fen)為5個應用層(ceng): 第(di)一(yi)層(ceng)是“數據(ju)傳輸”,只(zhi)(zhi)有(you)一(yi)條指(zhi)(zhi)令(ling):FISTTP,它有(you)利于x87浮點轉換成整數,并可以大大提高優化(hua)的(de)效率(lv)。 第(di)二層(ceng)是“數據(ju)處(chu)(chu)理(li)(li)”,指(zhi)(zhi)令(ling)共(gong)有(you)五(wu)條,分(fen)別(bie)是ADDSUBPS,ADDSUBPD,MOVSHDUP,MOVSLDUP,MOVDDUP。這些指(zhi)(zhi)令(ling)可以簡(jian)化(hua)復雜數據(ju)的(de)處(chu)(chu)理(li)(li)過(guo)程(cheng),由于未來(lai)數據(ju)處(chu)(chu)理(li)(li)流量將會(hui)越來(lai)越大,因此Intel在這里應用的(de)指(zhi)(zhi)令(ling)集最(zui)多、達(da)到(dao)了五(wu)條。 第(di)三(san)層(ceng)是“特殊處(chu)(chu)理(li)(li)”,也只(zhi)(zhi)有(you)一(yi)條:LDDQU。在這條指(zhi)(zhi)令(ling)主要(yao)針(zhen)對視頻解碼,用來(lai)提高處(chu)(chu)理(li)(li)器(qi)對處(chu)(chu)理(li)(li)媒體(ti)數據(ju)結(jie)果的(de)精確性。 第(di)四層(ceng)是“優化(hua)”,共(gong)有(you)四條指(zhi)(zhi)令(ling),分(fen)別(bie)是HADDPS,HSUBPS,HADDPD,HSUBPD,它們可以對程(cheng)序起到(dao)自動優化(hua)的(de)作用,對處(chu)(chu)理(li)(li)3D圖形(xing)相當有(you)用。 第(di)五(wu)層(ceng)是“超線(xian)程(cheng)性能增強”,共(gong)有(you)兩條針(zhen)對線(xian)程(cheng)處(chu)(chu)理(li)(li)的(de)指(zhi)(zhi)令(ling):MONITOR, MWAIT,這有(you)助于增加(jia)Intel超線(xian)程(cheng)的(de)處(chu)(chu)理(li)(li)能力(li)、大大簡(jian)化(hua)了超線(xian)程(cheng)的(de)數據(ju)處(chu)(chu)理(li)(li)過(guo)程(cheng)。

● SSE4.1改進視頻處理

SSE4.1是Intel在Penryn核心(xin)的(de)Core 2 Duo與Core 2 Solo處(chu)理器時,新增的(de)47條(tiao)新多(duo)媒體(ti)指(zhi)令集,用(yong)來加強視頻編輯(ji)等方面的(de)應(ying)(ying)用(yong)。另外,AMD也開發了屬于自己的(de)SSE4a多(duo)媒體(ti)指(zhi)令集,并內建(jian)在Phenom與Opteron等K10架構處(chu)理器中(zhong),不(bu)過相關應(ying)(ying)用(yong)都差(cha)不(bu)多(duo),并且(qie)無(wu)法與Intel的(de)SSE4系列指(zhi)令集相容。

據了(le)解(jie),在(zai)(zai)進(jin)行視頻編(bian)碼時(shi)需要(yao)進(jin)行動態預測(Motion Estimation)及差分編(bian)碼方式去除(chu)相(xiang)鄰2張影像(xiang)之(zhi)相(xiang)關性(xing),這是一個(ge)(ge)非(fei)常(chang)復雜的運算(suan)動作(zuo)。在(zai)(zai)沒有SSE4指令集時(shi),完成一個(ge)(ge)步驟(zou)需要(yao)以下指令語句:

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;

… }

}

一大串(chuan)的(de)指令極度浪(lang)費處(chu)理(li)器資源,而在支持SSE4指令集的(de)處(chu)理(li)器上,只需(xu)要采用4 SAD運算指令:MPSADBW xmm0,xmm1,0便完全(quan)代替了以(yi)上繁復的(de)指令串(chuan),大幅提升動態預測(ce)(Motion Estimation)及(ji)差分編碼的(de)運算速度。


網站提醒和聲明
本(ben)站(zhan)為注冊用(yong)戶(hu)提供信(xin)息存儲空間服務,非“MAIGOO編輯上(shang)傳提供”的文章/文字均是注冊用(yong)戶(hu)自主發布上(shang)傳,不代(dai)表(biao)本(ben)站(zhan)觀點,版權歸(gui)原作者所有,如有侵權、虛假信(xin)息、錯誤信(xin)息或任何問題,請及(ji)時聯系我們(men)(men),我們(men)(men)將在第一時間刪除或更(geng)正。 申請刪除>> 糾錯>> 投訴侵權>> 網(wang)頁上相關信(xin)息的知識產權歸網(wang)站方所有(包括但不(bu)限(xian)于文字(zi)、圖片、圖表、著(zhu)作權、商標權、為用戶提供的商業信(xin)息等),非經許可不(bu)得(de)抄襲或使用。
提交說明(ming): 快速提交發布>> 查看提交幫助>> 注冊登錄>>
發表評論
您還未登錄,依《網絡安全法》相關要求,請您登錄賬戶后再提交發布信息。點擊登錄>>如您還未注冊,可,感謝您的理解及支持!
最新評論
暫無評論
頁面相關分類
熱門模塊
已有4083129個品牌入駐 更新521332個招商信息 已發布1608415個代理需求 已有1391635條品牌點贊