最近一陣進行了一些opencl簡單測試,得出了一些有趣的結論。由於amd還沒有公布rv870架構的官方文件,因此我們可以從這些結論中反推amd/ati顯示卡的架構,並對opencl未來的走向作乙個簡單的判斷。
首先是峰值計算能力方面,我們進行了單精度浮點、雙精度浮點和32bit整數計算測試,測試專案包括加法、乘法、乘加,以及浮點的特殊函式和定點的位操作測試。
測試結果表明:
gtx285的單精度乘加峰值計算能力為660gflops,hd4890為800gflops
乘法gtx285由於具有雙發射達到了450gflops,hd4890為400gflops
加法gtx285為330gflops,hd4890為400gflops
超越函式方面,gtx285的原生(native)和普通精度較高版均以數倍優勢勝出hd4890
5870在超越函式的比例上也沒有得到改善,fermi令人滿意
雙精度方面,gtx285乘加為約83gflops,正好是單精度的1/8
加法為41gflops
乘法為41gflops,因為雙精度沒有雙發機制
雙精度測試amd方面本來可以取得更大優勢,但是驅動還沒有提供支援
fermi取得了很好的成績
整數方面
gt200 加法330gflops 乘法83gflops 乘加135gflops 測試的幾項位操作120gips
4870 在整數理論效能上略有優勢(400gflops),但是位操作大比分落後
fermi擁有出色的32bit單元,因此整數乘法成績將與加法相同
頻寬測試包括memcpy、gpu訪問視訊記憶體和local memory
memcpy測試中,ati的主機與裝置端實用頻寬僅達到了1.7gb/s,即使考慮到rv770擁有全雙工的pci-e控制器,這一成績也是不能接受的
gt200的主機裝置端通訊速度相當正常,為5gb/s,fermi有相當提高
4890使用的視訊記憶體間memcpy機制匪夷所思,速度僅10gb/s,gt200為100gb/s
gt200實測視訊記憶體頻寬達到了100gflops,而4890對float型資料僅20gb/s,對float4型打包資料讀寫才能獲得更高效能
在對local memory(相當於cuda的shared memory)進行32bit資料讀寫測試時,由於4890使用的是視訊記憶體模擬local memory,因此只獲得了20gb/s的速度,而gtx285為1tb/s,差距達到了50倍。
不過待amd改善驅動後,頻寬測試成績將有所提高,但是由於硬體架構原因,應該還是只能對四向量打包型資料才能獲得最高效能,而不打包資料的效能和隨機訪問的效能則低於nvidia標量架構
5870的對global原子操作速度達到了gtx285的16倍,說明5870擁有與fermi類似的快取,只是功能可能稍弱。
不過gtx285使用對shared memory原子後,也可以取得與5870相當的成績
在sha-1 aes matrixmul等測試中,4890取得的成績相當於gtx285的9%-33%,而5870為gtx285的66%-200%
測試專案還在增加中,有待完善
由於下代gpu都擁有較強的cache機制,因此是否進行image測試還沒有決定。
在實際應用中,ati必須在每個執行緒內使用float4或者int4等四向量資料才能獲得最高效能,這提高了amd平台的程式設計難度,降低了在某些應用中的效能。尤其是上一代的rv770的架構並不是為了opencl設計的,效能下降非常嚴重。
ati的做法相當於在細粒度執行緒並行之下再加入了指令級並行,這樣就存在group-item-vector element**並行,並行方式更加難以設計,寫起kernel來更加痛苦,而且效能也會受到影響。opencl主機端**和cuda runtime api相比簡直就是地獄,再讓kernel更加複雜,那麼就是要開發人員的命了。
好在5870執行標量型**的比4870有很大提高,那麼看來opencl在nvidia g8x/g9x/gt200,以及ati 58xx上,**還是可以做到通用的。
AMD連發四款OpenCL加速計算開發工具
amd今天宣布推出四款全新的軟體開發工具和方案,可進一步優化應用程式對opencl標準規範的支援,並且全部支援fusion apu融合處理器。gdebugger 一款先進的opencl opengl偵錯程式 程式分析器和記憶體分析器,可以在amd gpu上實時除錯opencl核心,並在分析核心變數和...
用OpenCL實現HEVC中ME模組的測試資料分析
使用opencl來實現編碼演算法中運動搜尋模組!下面測試資料時在gtx570上的測試結果 lcu為32x32,100幀720p,cpu上純c演算法使用搜尋時間是67s,gpu上是0.915s lcu為16x16,cpu 是76.8s,gpu上是1.6s lcu為8x8,cpu 是82.5s,gpu上...
簡測科技二面面經
1.join的用法,幾種join的區別 2.儲存過程的用法,為什麼要用儲存過程 3.索引 4.手寫merge 忘記最優解法啥樣的了,完全是自己寫了乙個,有很多細節錯誤,也重複了很多 5.bitmap,byte陣列,給乙個offset,把offset指定的那一位如果為0則置為1,也是出了不少錯誤,最後...