挑戰(zhàn)卡皇TITAN!GTX 780 SLI巔峰測試
新ISA編碼:每個線程255個寄存器
可由線程訪問的寄存器的數(shù)量在 GK110 中已經(jīng)翻了兩番,允許線程最多訪問 255 個寄存器。由于增加了每個線程可用的寄存器數(shù)量,F(xiàn)ermi 中承受很大寄存器壓力或泄露行為的代碼的速度能大大的提高。典型的例子是在 QUDA 庫中使用 CUDA 執(zhí)行格點 QCD(量子色動力學(xué))計算?;?QUDA fp64 的算法由于能夠讓每個線程使用更多寄存器并減少的本地內(nèi)存泄漏,所以其性能提高了 5.3 倍。
Shuffle 指令
為了進(jìn)一步提高性能,Kepler 采用 Shuffle 指令,它允許線程在 Warp 中共享數(shù)據(jù)。此前,Warp 內(nèi)線程之間的數(shù)據(jù)共享需要存儲和加載操作以通過共享內(nèi)存?zhèn)鬟f數(shù)據(jù)。使用 Shuffle 指令,Warp 可以讀取來自Warp 內(nèi)其他線程中任意排列的值。Shuffle 支持任意索引引用(即任何線程讀取任何其他線程)。有用的 Shuffle 子集包括下一線程(由固定量彌補(bǔ)抵消)和 Warp 中線程間 XOR “蝴蝶”式排列,也稱為 CUDA 性。
Shuffle 性能優(yōu)于共享內(nèi)存,因此存儲和加載操作能夠一步完成。Shuffle 也可以減少每個線程塊所需共享內(nèi)存的數(shù)量,因為數(shù)據(jù)在 Warp 級交換也不需要放置在共享內(nèi)存中。在 FFT 的情況下,需要共享一個 Warp 內(nèi)的數(shù)據(jù),通過使用 Shuffle 獲得 6%的性能增益。
此示例表明某些變量可以在 Kepler 中使用 Shuffle 指令。
原子運算
原子內(nèi)存運算對并行編程十分重要,允許并發(fā)線程對共享數(shù)據(jù)結(jié)構(gòu)執(zhí)行正確的讀‐修改‐寫運算。原子運算如 add、min、max 和 compare,swap 在某種意義上也是也是原子運算,如果在沒有其他線程干擾的情況下執(zhí)行讀、修改和寫運算。原子內(nèi)存運算被廣泛用于并行排序、歸約運算、建制數(shù)據(jù)結(jié)構(gòu)而同時不需要鎖定線程順序執(zhí)行。
Kepler GK110 全局內(nèi)存原子運算的吞吐量較 Fermi 時代有大幅的提高。普通全局內(nèi)存地址的原子運算吞吐量相對于每頻率一個運算來說提高了 9 倍。獨立的全局地址的原子運算的吞吐量也明顯加快,而且處理地址沖突的邏輯已經(jīng)變得更有效。原子運算通??梢园凑疹愃迫重?fù)載運算的速度進(jìn)行處理。此速度的提高使得原子運算足夠快得在內(nèi)核內(nèi)部循環(huán)中使用,消除之前一些算法整合結(jié)
果所需要的單獨的歸約傳遞。Kepler GK110 還擴(kuò)展了對全局內(nèi)存中 64‐位原子運算的本機(jī)支持。除了 atomicAdd、atomicCAS 和 atomicExch(也受 Fermi 和 Kepler GK104 支持)之外,GK110 還支持以下功能:
atomicMin、atomicMax、atomicAnd、atomicOr、atomicXor
其他不受本機(jī)支持的原子運算(例如 64 位浮點原子運算)可以使用 compare‐and‐swap (CAS) 指令模擬。
紋理改進(jìn)
GPU 的專用硬件紋理單元對于需要取樣或過濾圖像數(shù)據(jù)的計算機(jī)程序來說是寶貴的資源。Kepler中的紋理吞吐量與 Fermi 相比有明顯提高,每個SMX單元包含16紋理過濾單元,對比Fermi GF110 SM 提高了4倍。
此外,Kepler改變了管理紋理狀態(tài)的方法。在Fermi時代,為讓GPU引用紋理,必須在固定大小綁定表中分配“槽”才能啟動 Grid。表中槽數(shù)量最終限制程序一次可以讀取多少個獨特的紋理。最終,在 Fermi 中限制程序僅可以同時訪問128紋理。
Kepler中有無綁定紋理,不需要額外步驟:紋理狀態(tài)已保存為內(nèi)存中的對象,硬件按需獲取這些狀態(tài)對象,綁定表過時。這有效地消除了計算程序引用獨特紋理數(shù)量的任何限制。相反,程序可以在任何時間映射紋理和通紋理處理周圍。
關(guān)注我們



