※ 引述《k387259 (台灣李宏感)》之銘言:
: 大家好
: 想請問cuda核心數量與運算處理速度的差異
: 我在網路上有抓到一隻程式
: 目前也感覺他把平行化處理的很好
: 用了兩張卡測試(用CUDA-Z看的)
: GTX760 CUDA核心1152 處理速度1084M Hz
: Quadro K5000 CUDA核心1536 處理速度740M Hz
: 在K5000上"明顯"低於GTX760
: (K5000 FPS:30 GTX760 FPS:60)
: 處理速度的差異我知道
: 但想詢問核心數目的差異到底在哪
: 是GPU上運算部分可以平行化處理的東西更多嗎?
是!
就像是可以簡單想成總共有幾個人可以同時幫你做事。
: 但是我用CUDA-Z看thread和grid數量一樣
: 核心多/處理慢 跟 核心少/處理慢
: gpu運算的code內要怎麼處理會比較好呢?
CUDA Optimize 考量因素非常多,
在分配 thread block grid 上就必須要去看硬體的規格,
例如thread 要能整除一個 wrap同時執行的核心數(通常是32)、
block要多過那張卡上SM的數量,讓CUDA運算可以滿載。
記憶體的部分也非常重要
GPU上的記憶體,分為Global memory, share memory, register memory 等 (不懂就查)
你怎麼把你的要用的擺在相對應的記憶體區塊,
如果想要更快,可以考慮memory alignment 、memory coalesce
一般而言,你如果能把你要運算的資料一口氣放入share memory裡面,
避免在運算過程中 access global memory 這樣是最完美的。
也可以考慮stream (overlap).
如果不想要那麼麻煩的寫CUDA,也可以看看OpenACC,就像openmp一樣地去加#就行了。
加油!