如果你能幫我澄清關於GPU性能的一些細節,這將是非常好的,因爲我在這裏呆了幾個星期。 此外,我很抱歉我的英語不好,但我會盡力解釋這個問題。CUDA矩陣乘法的性能
所以,關於我的問題。我們來看看非常簡單的程序 - 使用共享內存的密集矩陣乘法。 據我所知,Nvidia公司提供了它的一個在CUDA編程指南,實現(這裏是鏈接): http://docs.nvidia.com/cuda/cuda-c-programming-guide/#shared-memory
這是非常簡單的,我想每個人誰是熟悉CUDA已經看過了。但是讓我們來衡量這個內核的性能(Gflops)。 使用「Nvprof」實用程序,我們可以測量一些度量來計算浮點運算的計數,使用cuda事件我們可以測量內核的執行時間。因此,對於方陣矩陣乘法(每個矩陣中2048x2048個浮點元素),我們有 (1.7180e + 10)/(0.054 * 10^9)Gflpos = 318Gflops。
現在很重要的一點是,我正在使用GeForce GTX Titan卡,其性能達到3.1 Tflops的單峯精度。因此,我們只達到了峯值性能的1/10,但我們已經使用了從我的大學CUDA課程中所瞭解的所有優化(共享內存,合併內存訪問等)。 在這裏,我猜測它是因爲它是內存綁定的問題,但據我所知它是不正確的。作爲cuBlas的一個例子(如果我是對的),SGEMM的功能達到峯值性能的71%。當然我明白要達到cuBlas性能是非常困難的,但爲什麼我達不到1 Tflop?
所以,問題是:
1)我對我的推理嗎?
2)我甚至無法達到峯值性能一半的主要原因是什麼?
3)我可以使用哪些其他優化? (這裏的一切,你知道將是非常有用的 - 文章,建議等)
謝謝你的關注!
您是否熟悉[Google學術搜索](http://scholar.google.com/)?使用關鍵字「GPU」「CUDA」「GEMM」的簡單查詢產生了一系列處理高性能實現策略的文章。性能超越算法的其餘部分是精心設計的手工彙編語言實現(這幾乎適用於所有計算平臺)。 – njuffa 2014-12-05 17:38:16
請顯示您的代碼。按照我的觀點,您的問題太廣泛了,無法得出明確的答案。沒有看到您的實施,有太多可能的地方可以提出改進建議。 – 2014-12-05 17:39:00
關於代碼:我正在談論提高nvidia代碼的性能,並提供了鏈接。當然,我有自己的實現(速度提高1.4倍),但我決定不在這裏提供,因爲這不是我正在尋求的加速,而且我希望避免在自己的代碼中談論可能出現的錯誤。那麼讓我們考慮一下我們想要加速Nvidia代碼。 – 2014-12-05 18:35:44