SSE體系結(jié)構(gòu)與編程.ppt_第1頁
SSE體系結(jié)構(gòu)與編程.ppt_第2頁
SSE體系結(jié)構(gòu)與編程.ppt_第3頁
SSE體系結(jié)構(gòu)與編程.ppt_第4頁
SSE體系結(jié)構(gòu)與編程.ppt_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

SSE編程,華南理工大學(xué) 陳虎 博士 ,什么是SIMD,SIMD(Single Instruction Multiple Data): 單指令流多數(shù)據(jù)流) 用一個(gè)控制器對一組數(shù)據(jù)(又稱“數(shù)據(jù)向量”)中的每一個(gè)分別執(zhí)行相同的操作來實(shí)現(xiàn)空間上的并行性 典型實(shí)例: Intel的MMX或SSE AMD的3D Now!,Intel的SSE技術(shù),SSE指令集出現(xiàn)在Pentium III處理器中 包括了70條指令,其中50條SIMD浮點(diǎn)運(yùn)算指令、12條MMX 整數(shù)運(yùn)算增強(qiáng)指令、8條內(nèi)存連續(xù)數(shù)據(jù)塊傳輸指令。 SSE2指令集: 使用了144個(gè)新增指令 從64位擴(kuò)展到了128 位 提供雙精度操作支持,Intel的SSE技術(shù),SSE3指令集 增加13條指令 超線程性能增強(qiáng)指令可以提升處理器的超線程處理能力 SSE4指令集 共包括16條指令 AVX (Advanced Vector Extensions),預(yù)計(jì)2010年發(fā)布 數(shù)據(jù)寬度從128位擴(kuò)展為256位 操作數(shù)從兩個(gè)增加到三個(gè),SSE2的寄存器結(jié)構(gòu),IA32 Basic Architecture:圖10-1,SSE1、2的數(shù)據(jù)類型,數(shù)據(jù)總寬度為128位,可以表示成: 四個(gè)單精度浮點(diǎn)數(shù) 兩個(gè)雙精度浮點(diǎn)數(shù) 16個(gè)字節(jié)整數(shù) 8個(gè)16位整數(shù) 4個(gè)32位整數(shù) 2個(gè)64位整數(shù),SSE指令,SSE指令按功能可以分成四組: 封裝和標(biāo)量單精度浮點(diǎn)指令 64位的SIMD整數(shù)指令 狀態(tài)管理指令 緩存控制,預(yù)取和內(nèi)存命令指令,浮點(diǎn)指令,數(shù)據(jù)移動(dòng)指令(標(biāo)量、成組) 寄存器到存儲器 存儲器到寄存器 寄存器之間 算術(shù)運(yùn)算指令(標(biāo)量、成組) 加、減、乘、除、平方根、最大、最小 比較指令(標(biāo)量、成組) 混洗指令 轉(zhuǎn)換指令 邏輯操作指令,整數(shù)指令,算術(shù)指令 最大、最小、平均值 數(shù)據(jù)移動(dòng)指令 混洗指令 MXCSR管理指令 Cache和存儲器控制指令,使用SSE指令的四種方法,編譯器的自動(dòng)矢量化 使用C+類庫 使用編譯器的內(nèi)嵌原語(Intrinsics) 嵌入?yún)R編語言,四種方式的比較,VC8.0的內(nèi)嵌原語(intrinsics),什么內(nèi)嵌原語: 一條或一組匯編指令 內(nèi)嵌原語格式 _mm_ :指令類別(add、sub) :指令操作數(shù)的類型,內(nèi)嵌原語的數(shù)據(jù)類型,p: 緊密,指令對寄存器中的每個(gè)元素進(jìn)行運(yùn)算 ep: 擴(kuò)充緊密 s: 標(biāo)量,只將寄存器中的第一個(gè)元素參與運(yùn)算,其他說明數(shù)據(jù)類型的關(guān)鍵字有: s 單精度浮點(diǎn)數(shù) d 雙精度浮點(diǎn)數(shù) i128 帶符號128位整型 i64 帶符號64位整型 u64 無符號64位整型 i32 帶符號32位整型 u32 無符號32位整型 i8 帶符號8位整型 u8 無符號8位整型,內(nèi)嵌原語的類別,矩陣變換 讀寫控制寄存器 混洗 Cache控制 數(shù)據(jù)整型操作 存儲操作,置位運(yùn)算 讀取運(yùn)算 轉(zhuǎn)換運(yùn)算 比較操作 邏輯運(yùn)算 算術(shù)運(yùn)算,矩陣變換 例:_MM_TRANSPOSE4_PS(row0, row1, row2, row3) 作用:轉(zhuǎn)置一個(gè)44的單精度或雙精度元素矩陣,混洗操作 例:_MM_SHUFFLE(z, y, x, w) (z6) | (y4) | (x2) | w 說明: 從第一個(gè)操作數(shù)中選取兩個(gè)數(shù),從第二個(gè)操作數(shù)中選取兩個(gè)數(shù),形成一個(gè)結(jié)果字,支持Cache控制 _mm_prefetch:預(yù)取稍后運(yùn)行需要的數(shù)據(jù) _mm_stream_pi:把指定位置的數(shù)據(jù)存儲到指定的地址,而不替換cache 整型原語 _mm_extract_pi16: 從4個(gè)字中提取一個(gè)字 _mm_insert_pi16: 插入一個(gè)字 _mm_max_pi16: 計(jì)算出最大值 _mm_min_pi16: 計(jì)算最小值 讀寫控制寄存器 _MM_SET_EXCEPTION_STATE:設(shè)置異常狀態(tài)寄存器 _MM_GET_EXCEPTION_STATE:讀取異常狀態(tài)寄存器 可以操作寄存器還包括:EXCEPTION_MASK(異常屏蔽寄存器)、ROUNDING_MODE(舍入模式寄存器)、FLUSH_ZERO_MODE(清0模式寄存器),存儲操作 _mm_store_ss: 存儲低位值 _mm_store_ps: 存儲4個(gè)值,位址對齊 _mm_storer_ps: 存儲4個(gè)值,順序相反 讀取運(yùn)算 _mm_load_ss: 讀取低值,同時(shí)清空其他3個(gè)高值 _mm_loadr_ps: 以相反的順序讀入4個(gè)值 設(shè)置運(yùn)算 _mm_set_ss: 設(shè)置低位為1,同時(shí)清空其余三個(gè)高位值 _mm_set1_ps: 設(shè)置所有4個(gè)值為同一值 _mm_setzero_ps: 把所有4個(gè)值清零,轉(zhuǎn)換運(yùn)算 _mm_cvtss_si32:轉(zhuǎn)換單精度浮點(diǎn)數(shù)為32位整數(shù) _mm_cvttss_si32:轉(zhuǎn)換單精度浮點(diǎn)數(shù)為32位整數(shù)(帶截?cái)嗖僮鳎?_mm_cvtpi16_ps :轉(zhuǎn)換16位有符號整數(shù)為單精度浮點(diǎn)數(shù) 比較原語 _mm_cmpeq_ss:是否相等 _mm_cmplt_ps:是否小于 _mm_cmpgt_ps:是否大于 邏輯運(yùn)算 _mm_and_ps:與運(yùn)算 _mm_or_ps:或運(yùn)算 算術(shù)運(yùn)算 _mm_add_ss:加法 _mm_sub_ps:減法 _mm_mul_ps:乘法,SSE程序?qū)嵗?雙精度三維變換原理,SSE程序?qū)嵗?兩種不同的數(shù)據(jù)結(jié)構(gòu) 數(shù)組-結(jié)構(gòu)(the array-of-structures format(AoS) ) 結(jié)構(gòu)-數(shù)組(the structures-of-arrays data format(SoA) ),數(shù)組-結(jié)構(gòu)(AoS ),結(jié)構(gòu)-數(shù)組(SoA),SSE程序?qū)嵗?for (int i = 0; i dm00); / 取出y(i)和y(i+1) ty = _mm_load_pd(vertex.y + i); mx1 = _mm_mul_pd(ty, WM-dm01); / 取出z(i)和z(i+1) tz = _mm_load_pd(vertex.z + i); mx2 = _mm_mul_pd(tz, WM-dm02); /x(i)=x(i)*m00+y(i)*m01+z(i)*m02+m03 /x(i+1)=x(i+1)*m00+y(i+1)*m01+z(i+1)*m02+m03 mx0 = _mm_add_pd(mx0, _mm_add_pd(mx1, _mm_add_pd(mx2, WM-dm03); /寫入結(jié)果x(i),x(i+1) _mm_store_pd(vertex.x + i, mx0);,/ 計(jì)算y(i)和y(i+1) mx0 = _mm_mul_pd(tx, WM-dm10); /tx, ty, tz已經(jīng)事先讀入 mx1 = _mm_mul_pd(ty, WM-dm11); mx2 = _mm_mul_pd(tz, WM-dm12); mx0 = _mm_add_pd(mx0, _mm_add_pd(mx1, _mm_add_pd(mx2, WM-dm13); _mm_store_pd(vertex.y + i, mx0); / 計(jì)算z(i)和z(i+1) mx0 = _mm_mul_pd(tx, WM-dm20); mx1 = _mm_mul_pd(ty, WM-dm21); mx2 = _mm_mul_pd(tz, WM-dm22); mx0 = _mm_add_pd(mx0, _mm_add_pd(mx1, _mm_add_pd(mx2, WM-dm23); _mm_store_pd(vertex.z + i, mx0); /計(jì)算z(i)和z(i+1) mx0 = _mm_mul_pd(tx, WM-dm30); mx1 = _mm_mul_pd(ty, WM-dm31); mx2 = _mm_mul_pd(tz, WM-dm32); mx0 = _mm_add_pd(mx0, _mm_add_pd(mx1, _mm_add_pd(mx2, WM-dm33); _mm_store

溫馨提示

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

評論

0/150

提交評論