2010-06-16 18 views
1

我想在CUDA平臺上直接處理64位單詞(例如uint64_t vars)。 但是我明白,尋址空間,寄存器和SP架構都是基於32位的。如何處理CUDA設備上的64位字?

我居然發現這正常工作(我的CUDA cc1.1卡上):

__global__ void test64Kernel(uint64_t *word) 
{ 
    (*word) <<= 56; 
} 

,但我不知道,例如,這將如何影響寄存器使用和每時鐘週期操作數量爲

+1

也許你可以解釋爲什麼你認爲你需要64位整數?可能還有其他更好的解決方案比使用32位指令實現64位整數操作更高效。 – 2010-06-16 12:43:57

+0

嗨,我需要使用這些64位整數實際上只是總和和左移。前者使用32位指令實現是微不足道的。事實上,我很好奇CUDA設備如何處理上面的單條指令。 – pikkio 2010-06-16 13:29:37

+0

等待,我的意思是*循環*轉移 – pikkio 2010-06-16 14:13:04

回答

2

無論地址是32位還是其他任何內容都不會影響您可以使用的數據類型。在你的例子中,你有一個指針(32位,64位,3位(!) - 無關緊要)爲一個64位無符號整數。

CUDA支持64位整數,但是對於每個64位值,您所存儲的數據量是32位值的兩倍,因此將使用更多寄存器和算術運算需要更長時間(將兩個64位整數位整數只會將其擴展到較小的數據類型,並使用進位推入下一個子字)。編譯器是一個優化編譯器,所以會盡量減少這種影響。

請注意,只有計算能力爲1.3或更高(即此時爲1.3或2.0)的設備才支持使用雙精度浮點(也是64位)。