測試用程式:原始檔下載
這邊用來作效能測試的程式,是之前《CUDA Texture Part.2 Linear Memory》、《CUDA Texture Part.3 CUDA Array》中,很簡單的 blending 演算法。而在這邊,Heresy 是用 cutil 的函式來作時間計算的工作,所以在下載原始檔後,如果要編譯可能會需要進專案設定的部分,修改相關的路徑。
而在執行的測試方面,分成五種不同的方法:
-
CPU
使用 CPU 來做計算,但是沒有使用 OpenMP 之類的平行化計算,所以應該只有用到一顆 CPU 核心。 -
GPU
簡單的透過 CUDA global memory 來做,沒有特別最佳化。 -
GPU Texture
使用 CUDA Linear memory 的 texture 來做存取。 -
GPU without transfer
簡單的透過 CUDA global memory 來做,沒有特別最佳化;不過在計算時間時,不考慮將記憶體由 host 複製到 device 的時間。 -
GPU Texture without transfer
使用 CUDA Linear memory 的 texture 來做存取;不過在計算時間時,不考慮將記憶體由 host 複製到 device 的時間。
- 而測試的資料大小,分別有:640×480、1280×1024、1600×1200、1920×1200、2048×2048、4096×2048、4096×4096。計算時間時,每個方法在每組資料,都會跑 300 次;出來的結果,就是每處理一份資料所需的時間(單位應該是 ms)。
測試的平台:
- Intel Core 2 Exterme X9650 (3Ghz, 333mhz x 9 )
- 4GB DDR2
- ASUS P5K Premium/Wi-Fi (Intel P35)
- GeForce 8800GT 512MB
最後測試的結果,大概如下圖:
首先,當然是先看和 CPU 比較的結果了~在上圖中,可以很清楚的看出來,在 GPU 上的測試,不管是哪種方法,所需時間都比 CPU 少;而當資料越大,差異也越大。如果比較「CPU」和「GPU Texture without transfer」的話,只要資料量稍大(1600×1200 以上),所需時間可以差到 11 倍以上!不過實際上,這個程式在每個 thread 的運算量還不是很多,應該還沒有能完全發揮大量平行化的優勢;如果在跑更複雜一些的計算,理論上應該可以快上更多。
而如果比較「GPU」和「GPU without transfer」這兩組結果,可以發現:在這個簡單的 CUDA 測試程式中,「將資料由 host 複製到 device」所花費的時間,大概佔了快一半左右的時間…而考慮「GPU Texture」和「GPU Texture without transfer」也可以發現,資料傳輸的部分佔了相當大的比重,比例甚至超過一半。
而比較「GPU Texture without transfer」和「GPU without transfer」的結果,可以發現在沒有最佳化的情況下,直接使用 CUDA global memory 來存取資料計算所需的時間,會比使用 texture 來的慢上不少(超過兩倍)。或許對不了解最佳化方法,或不想太花心思去做最佳化的人來說,使用 CUDA Texture 會是個不錯的選擇吧?
[…] 在前一篇已經寫了一個小程式,用來大概測試一下 CUDA 在 GPU 上的計算能力了~後來,想一想,乾脆把公司能跑 CUDA 的顯示卡,都拿來測看看吧!有測試的卡一共四張(維基百科的參考資料): […]
讚讚
[…] 簡單的 CUDA 效能測試 (2008/1/30) 用簡單的 blending 演算法,來進行一些簡單的效能測試;主要是在比較 CPU 和 GPU 間的效能差異,同時也比較使用 global memory 和 texture 的效能。 […]
讚讚
還好啦~不至於變洗版啦~ ^^"
不過,Heresy 到是建議你也可以試著把你自己的學習的相關東西,自己整理一下,這樣也會對學習有幫助。
Heresy 很多也是寫到了才學會的 :p
讚讚
呵呵~努力想把這項技術學起來…不過INTEL準備出…Larrabee..@@還有阿~我這樣發問頻頻~會不會變洗版阿XD
讚讚