使用MMXSSE匯編指令集優(yōu)化視頻開發(fā)_第1頁
使用MMXSSE匯編指令集優(yōu)化視頻開發(fā)_第2頁
使用MMXSSE匯編指令集優(yōu)化視頻開發(fā)_第3頁
使用MMXSSE匯編指令集優(yōu)化視頻開發(fā)_第4頁
使用MMXSSE匯編指令集優(yōu)化視頻開發(fā)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1、匯編指令集目前大部分的PC機采用的都是Intel或者AMD的CPU,其支持的多媒體匯編指令有:1. MMX:多媒體擴展指令(MultiMedia eXtention),該指令由Intel在1996年為Pentium處理器開發(fā),包括了57條多媒體指令,可以i一次處理多個數(shù)據(jù)。但是MMX指令不能與X86浮點運算指令同時執(zhí)行,在某些場合使用受到一定限制。2. SSE:SIMD擴展指令集(Streaming SIMD Extension),也稱作單指令多數(shù)據(jù)流擴展。其中的SIMD的含義為Single Instruction Multiple Data(單指令多數(shù)據(jù))。該指令集有Intel為Pent

2、ium III研發(fā),是為了提高處理浮點運算性能而開發(fā)的指令集,有70條指令,包括50條SIMD浮點運算指令用于提升3D圖形運算效率、12條MMX整數(shù)運算增強指令和8條優(yōu)化內(nèi)存中連續(xù)數(shù)據(jù)塊傳輸指令。這些指令有利于優(yōu)化圖像處理、浮點運算、3D運算和多媒體處理等運算的性能。3. 3DNow!:3DNow!指令集由AMD開發(fā),有21條擴展指令。3DNow!指令集主要針對三維建模、坐標變換和效果渲染等3D數(shù)據(jù)處理。4. SSE2:SSE2指令集是比SSE更加先進的指令集,共包含144條指令,由兩個部分組成:SSE主要負責處理浮點數(shù),MMX主要負責處理整數(shù)計算。SSE2的寄存器容量是MMX的兩倍,寄存器存

3、儲的數(shù)據(jù)也是MMX的兩倍。SSE2可以向下兼容MMX,經(jīng)由MMX進行優(yōu)化的程序可以繼續(xù)由SSE2進行進一步的優(yōu)化。5. SSE3:SSE3是在SSE2的基礎(chǔ)上開發(fā)的,相比SSE2增加了13個SIMD指令,主要目的在于改進線進程同步和媒體、游戲等特殊應(yīng)用程序領(lǐng)域。其中定義了超線程性能增強作為其中的一部分,可以提升處理器的超線程處理能力,使得處理器更快地進行并行數(shù)據(jù)處理。6. SSE4:SSE4是Intel自SSE2以來最大的改進,包括了從多媒體應(yīng)用到高性能計算領(lǐng)域的應(yīng)用,以及使用一些專用電路進行特定應(yīng)用的加速。SSE4增加了47條指令,改進了整數(shù)型和浮點型計算、支持DWORD和QWORD操作、新

4、的單精度FP操作、快速寄存器操作和面向寄存器的內(nèi)存操作等。2、MMX/SSE2指令集剖析2.1、媒體擴展指令MMXIntel的MMX指令是Intel IA系列指令的擴展,使用了單指令多數(shù)據(jù)技術(shù)(SIMD),以并行方式處理多個數(shù)據(jù)元素。MMX擴展指令集新增了57條指令和一種64位的4字數(shù)據(jù),作為成組的數(shù)據(jù)可供MMX指令操作。一個64位數(shù)據(jù)類型可以包含8個字節(jié)、4個字、兩個雙字或者一個4重字類型,這樣一條MMX指令即可以同時處理2/4/8個數(shù)據(jù)單元。為了適應(yīng)這樣的數(shù)據(jù),MMX增加了8個64位寄存器(MM0MM7),僅有MMX指令可以按寄存器名稱直接訪問。MMX針對832位數(shù)據(jù)元素的處理性能進行了改

5、善,一個MMX指令可以處理8個字節(jié),一個時鐘周期內(nèi)完成兩條指令,即一個時鐘周期可以處理16個字節(jié)。此外,MMX技術(shù)為其他功能釋放了額外的處理器周期,更小的處理器占用率可以實現(xiàn)更高程度的并發(fā)。一、MMX指令集簡介:MMX指令集從功能上可以分為8類:數(shù)據(jù)傳送指令、算術(shù)運算指令、比較運算指令、類型轉(zhuǎn)換指令、擴展壓縮數(shù)據(jù)指令、邏輯運算指令、移位運算指令、狀態(tài)清除指令。指令列表如下:在以上指令中,除了EMMS指令外,都涉及兩個操作數(shù),即源操作數(shù)和目標操作數(shù),指令中源操作數(shù)在右,目標操作數(shù)在左。目標操作數(shù)可作為第二個源操作數(shù)進行操作,指令結(jié)束后被運算結(jié)果所覆蓋1)、數(shù)據(jù)轉(zhuǎn)移指令:數(shù)據(jù)轉(zhuǎn)移指令實現(xiàn)MMX寄存

6、器同內(nèi)存單元之間,以及MMX寄存器同通用寄存器之間的雙向數(shù)據(jù)傳遞功能。MOVD:轉(zhuǎn)移32位(4字節(jié))數(shù)據(jù);MOVQ:轉(zhuǎn)移64位(8字節(jié))數(shù)據(jù)。2)、算數(shù)運算指令:算數(shù)運算指令對打包的數(shù)據(jù)類型實現(xiàn)加法、減法、乘法和乘加操作。在介紹算術(shù)運算指令前,先簡要介紹一下所謂的“環(huán)繞模式”和“飽和模式”。所謂環(huán)繞模式,就是當一個數(shù)據(jù)單元的數(shù)據(jù)達到最大值(比如一個字節(jié)的值為255)時,如果繼續(xù)對其加1,那么該字節(jié)的數(shù)據(jù)將變?yōu)?,進位將被忽略。飽和模式則對數(shù)據(jù)的溢出進行了限制,根據(jù)有符號或者無符號類型,將運算后的結(jié)果限制在數(shù)據(jù)類型規(guī)定的范圍以內(nèi)。· PADDB/PADDW/PADDD和PSUBB/PS

7、UBW/PSUBD指令分別在環(huán)繞模式下對源和目標操作數(shù)進行有符號或無符號的相加和相減操作。每一組的三個指令分別對應(yīng)字節(jié)型、字形和雙字型數(shù)據(jù)。· PADDSB/PADDSW和PSUBSB/PSUBSW指令分別在有符號飽和模式下進行相加和相減操作。兩個指令分別處理字節(jié)型和字型數(shù)據(jù)。· PADDUSB/PADDUSW和PSUBUSB/PSUBUSW指令分別在無符號飽和模式下進行相加和相減操作。兩個指令分別處理字節(jié)型和字型數(shù)據(jù)。· PMULHW和PMULLW指令執(zhí)行源和目標操作數(shù)的乘法操作,并分別將乘積的高字和低字保存到目標操作數(shù)中。· PMADDWD指令計算源

8、和目標操作數(shù)有符號部分的乘積,并將產(chǎn)生的4個32位雙字的中間結(jié)果成對相加,獲得兩個32位雙字。PMADDWD的計算結(jié)果如圖示顯示:3).比較指令:PCMPEQB/PCMPEQW/PCMPEQD和PCMPGTB/PCMPGTW/PCMPGTD指令按照有符號類型數(shù)據(jù)比較源和目標操作數(shù)進行相等比較或大于比較。對于相等比較,如果一對數(shù)據(jù)元素相等,則目標操作數(shù)中的相應(yīng)數(shù)據(jù)元素設(shè)置為全 1;否則設(shè)置為全 0。對于大于比較,如果目標操作數(shù)中的數(shù)據(jù)元素大于源操作數(shù)中相應(yīng)的數(shù)據(jù)元素,則目標操作數(shù)中的相應(yīng)數(shù)據(jù)元素設(shè)置為全 1;否則設(shè)置為全 0。4).類型轉(zhuǎn)換指令:PACKSSWB指令將有符號字轉(zhuǎn)換成為有符號的字節(jié)

9、;PACKSSDW將有符號的雙字轉(zhuǎn)換成為有符號的字;轉(zhuǎn)換過程都按照有符號飽和模式進行。PACKUSWB指令將有符號的字轉(zhuǎn)換為無符號的字節(jié),轉(zhuǎn)換過程按照無符號飽和模式進行。5).擴展壓縮數(shù)據(jù)指令:PUNPCKHBW/PUNPCKHWD/PUNPCKHDQ指令和PUNPCKLBW/PUNPCKLWD/PUNPCKLDQ分別將源于目標操作數(shù)的高位數(shù)據(jù)和低位數(shù)據(jù)取出并交錯排入目標操作數(shù)中。PUNPCKHBW和PUNPCKLBW的示意圖如下:PUNPCKHBW操作示意圖PUNPCKLBW操作示意圖6).邏輯運算指令:PAND邏輯按位與;PANDN邏輯按位與非;POR邏輯按位或;PXOR邏輯按位或非;7)

10、.位移指令:位移指令有邏輯左移、邏輯右移和算數(shù)右移三種。PSLLW/PSLLD/PSLLQ和PSRLW/PSRLD/PSRLQ實現(xiàn)邏輯左移和右移操作,并用0填充空出來的高位或低位。支持字型、雙字型和四字型數(shù)據(jù);PSRAW/PSRAD實現(xiàn)算數(shù)右移操作,并將符號位拷貝到右移所空出的比特位上。8).狀態(tài)清除指令:EMMS指令用于將MMX狀態(tài)清空。該指令在一個MMX程序結(jié)束時執(zhí)行。二、CPU寄存器除了8個MMX寄存器之外,CPU還有自己的通用寄存器EAX/EBX/ECX/EDX。這四個通用寄存器都是32位寄存器,可以直接訪問,還可以按照16位和8位進行訪問。如EAX可以使用AX獲得低16位,AX可以使

11、用AH和AL分別獲取高8位和低8位。其余的寄存器有ESI/EDI/ESP/EBP等。功能描述見下圖:三、地址加載指令1).LEA指令LEA指令將源操作數(shù)的偏移地址傳遞給通用寄存器。如以下代碼:plain view plain copy print?1. LEA BX, 2400H LEA BX, 2400H該指令將2400H的偏移地址2400傳送給BX,執(zhí)行后BX=2400H。2).LDS指令LDS指令將4字節(jié)源內(nèi)存的數(shù)據(jù)按照段地址和偏移地址傳送給鏈各個寄存器,其中低地址的2字節(jié)作為偏移地址送給作為目標操作數(shù)的寄存器,高地址的2字節(jié)作為段地址送到DS寄存器。如以下代碼:plain view p

12、lain copy print?1. LDS DI, 2130H LDS DI, 2130H該指令將低地址2130H、2131H的數(shù)據(jù)作為偏移地址送到DI中,2132H、2133H的數(shù)據(jù)作為段地址送到DS中。2.2、MMX程序設(shè)計使用MMX編程的方法主要有三種:· 直接編寫匯編程序文件,命名為*.asm;· 使用C+嵌入?yún)R編,在C+代碼中使用_asm.編寫匯編程序;· 使用64位數(shù)據(jù)類型_m64和與MMX相關(guān)的C+函數(shù)實現(xiàn)。2.3、SSE/SSE2媒體擴展指令集SSE和SSE2是基于MMX的新的匯編指令集,將寄存器的大小從64位擴展到128位,且增加了新的媒體處理

13、匯編指令。一、SSE/SSE2數(shù)據(jù)結(jié)構(gòu)SSE技術(shù)支持打包的單精度浮點數(shù)操作(Packed Single-Precision Floating-point),將4個獨立的32位單精度浮點數(shù)打包為一個128位數(shù)據(jù)。SSE提供了8個128位SIMD寄存器XMM0XMM7,可以直接存取,但只能存放數(shù)據(jù)而不能用于尋址。此外SSE還提供了新的控制/狀態(tài)寄存器MXCSR。SSE2指令包括原油的32位通用寄存器(EAXEDX)、64位MMX寄存器(MM0MM7)、128位XMM(XMM0XMM7)和32位標識寄存器EFLAGS及浮點狀態(tài)/控制寄存器MCSR。此外還有兩種數(shù)據(jù)類型:128位的打包雙精度浮點數(shù)和4

14、種128位SIMD整數(shù)。· 128位打包雙精度浮點數(shù):兩個64位雙精度浮點數(shù)打包成一個雙4字節(jié)數(shù)據(jù);· 128位打包整數(shù):可以包含16個字節(jié)、8個字、4個雙字或2個四重字的整數(shù);二、SSE/SSE/2指令SSE指令集包含70條指令,主要可以分為三組:1. 50條SIMD浮點運算指令:50條SIMD浮點運算指令是其主要部分,包括幾個部分:數(shù)據(jù)傳送指令、算數(shù)運算指令、比較指令、類型轉(zhuǎn)換指令、組合指令、狀態(tài)管理指令。2. 12條SIMD整數(shù)指令:為了增強MMX指令系統(tǒng)而新增。3. 8條高速緩沖存儲器優(yōu)化指令:8條指令,為更好滴控制緩存操作,提供啊程序運行性能,專門針對Pentium III設(shè)計。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論