GPU编程和流式多处理器(二)
GPU編程和流式多處理器(二)
2. 整數支持
SM具有32位整數運算的完整補充。
? 加法運算符的可選否定加法
? 乘法與乘法加法
? 整數除法
? 邏輯運算
? 條件碼操作
? to/from浮點轉換
? 其它操作(例如,SIMD指令用于narrow整數,population人口計數,查找第一個零)
CUDA通過標準C運算符公開了大部分此功能。非標準運算(例如24位乘法)可以使用內聯PTX匯編或內部函數進行訪問。
2.1. 乘法
在Tesla級和Fermi級硬件上,乘法的實現方式有所不同。特斯拉實現了24位乘法器,而費米實現了32位乘法器。因此,SM 1.x硬件上的完整32位乘法需要四個指令。對于針對特斯拉級硬件的性能敏感代碼,使用內在函數進行24位乘法是一項性能上的成功。表4顯示了與乘法有關的內在函數。
表4乘法本征
2.2. 混合(位操作)
CUDA編譯器實現了許多用于位操作的內在函數,如表5所示。在SM 2.x和更高版本的體系結構上,這些內在函數映射到單個指令。在Fermi之前的體系結構上,它們是有效的,可以編譯成許多指令。如有疑問,請反匯編并查看微碼!64位變體在固有名稱__clzll(),ffsll(),popcll()和brevll()的后面附加了“ ll ”(“ long long”為兩個ell)。
表5位操作本征
2.3. Funnel渠道轉移(SM 3.5)
GK110添加了一條64位的“漏斗移位”指令,該指令將兩個32位值連接在一起(最低有效和最高有效的一半指定為單獨的32位輸入,但是硬件在對齊的寄存器對上運行),將結果移位左移或右移64位值,然后返回最高有效(左移)或最低有效(右移)32位。
可以使用表6中給出的內在函數訪問Funnel移位。這些內在函數在sm_35_intrinsics.h中作為嵌入式設備功能(使用嵌入式PTX匯編程序)實現。默認情況下,移位計數的最低有效5位被屏蔽;_lc和_RC內在移位值維持在范圍0…32。
表6. Funnel平移本征
Funnel移位的應用程序包括以下內容。
? 多字移位操作
? 使用對齊的加載和存儲在未對齊的緩沖區之間復制內存
? 旋轉
要右移大于64位的數據大小,使用重復的__funnelshift_r()調用,從最低有效字到最高有效字進行操作。結果的最高有效字是使用運算符>>來計算的,該運算符會根據整數類型將零或符號位進行移位。若要將數據大小左移大于64位,使用重復的__funnelshift_l()調用,從最高有效字到最低有效字進行操作。結果的最低有效字是使用operator <<計算的。如果hi和lo參數相同,則Funnel移位會影響旋轉操作。
總結
以上是生活随笔為你收集整理的GPU编程和流式多处理器(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GPU编程和流式多处理器
- 下一篇: TensorRT 数据格式说明