2013-02-24 44 views
0

我一直在寫我的特斯拉K20m,內核,當我編譯-Xptas = -v軟件我得到如下結果:改變CUDA拱的論點讓我用更多的寄存器

ptxas info : 0 bytes gmem 
ptxas info : Compiling entry function '_Z9searchKMPPciPhiPiS1_' for 'sm_10' 
ptxas info : Used 8 registers, 80 bytes smem, 8 bytes cmem[1] 

爲你可以看到,只有8個寄存器使用,但是,如果我提到的論點-arch = sm_35我的內核執行時間顯着提高和太習慣寄存器的數量,我想知道爲什麼

nvcc mysoftware.cu -Xptxas=-v -arch=sm_35 
ptxas info : 0 bytes gmem 
ptxas info : Compiling entry function '_Z9searchKMPPciPhiPiS1_' for 'sm_35' 
ptxas info : Function properties for _Z9searchKMPPciPhiPiS1_ 
0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads 
ptxas info : Used 21 registers, 16 bytes smem, 368 bytes cmem[0] 

自有人提到多本書,使用正確的架構爲卡爲了提高性能,我想知道爲什麼我的顯着減少。

謝謝。

編輯: 類似的問題和答案:Registers and shared memory depending on compiling compute capability?

+0

它看起來像編譯器正在做出不同的優化決策。你能提供一個你可以看到的簡短的可編輯複製器嗎?我對資源使用方面的變化沒有那麼感興趣,因爲我正處於您所報告的急劇放緩階段。 – 2013-02-24 15:42:31

+0

所以基本上,當我使用'sm_10'代碼需要2.000235毫秒來執行,但是當使用'sm_35'代碼需要2.538336到3.xxxxxx毫秒,這在這個內核的情況下是令人印象深刻的 – Anoracx 2013-02-24 15:45:15

+0

我實際上不能給這個代碼現在使用了一部分代碼,它不是我的。 – Anoracx 2013-02-24 15:54:41

回答

3

編譯與sm_20及以上使IEEE數學和ABI兼容性。這兩個選項可以增加寄存器數量並降低性能。這兩個選項可以禁用。

+1

這兩個通常是主要原因。編譯器也意識到更新的體系結構提供更多的寄存器,因此可以故意使用它們來提高性能(例如,使用臨時變量來緩存和中間結果而不是重新計算,或者更積極地預先調度負載。一般來說,我不建議關閉IEEE符合性或ABI使用ABI尤其可以實現許多新的CUDA語言特性程序員不應該注意註冊表的使用情況,除非出現溢出或佔用的特定問題 – njuffa 2013-02-24 22:23:14

+0

實際上,我並不十分執着於寄存器,我的問題是如果我使用選項-arch = sm_35進行編譯,時間會增加很多。@greg是否建議您禁用這些選項?或者根本不用?或者自始至終使用-arch = sm_10繼續編譯我的軟件具有巨大的重要性 – Anoracx 2013-02-24 22:39:58

+0

在這裏發現了類似的答案:http://stackoverflow.com/questions/6038221/registers-and-shared-memory-depen ding-on-compiling-compute-capability – Anoracx 2013-02-25 15:40:07