2013-05-30 113 views
4

我在這個主題上發現了各種意見,所以這就是我決定在這裏問的原因。我的問題是從CUDA支持int64_t的計算能力開始的。我在Quadro770M上運行cuda 5,下面的代碼沒有問題,儘管我從計算能力1.3開始讀取了支持64位的unsigned。那麼這個問題的真正答案是什麼?CUDA中的64位數字支持

__device__ void printBinary(int64_t a) { 
    int bits[64]; 
    int i; 

    for (i = 0; i < 64; i++) { 
     bits[63 - i] = (a >> i) & 1; 
    } 

    for (int i = 0; i < 64; ++i) { 
     cuPrintf("%d", bits[i]); 
    } 
    cuPrintf("\n"); 
    cuPrintf("%016llX", a); 
} 

回答

7

64位整數(符號和無符號)都支持所有支持CUDA的硬件(雖然他們的操作映射到多個本地32位指令)。

計算能力1.3介紹64位浮點數(本機支持)。

+0

我現在明白了。因此,使用64位數字會由於操作的映射而對性能造成重大損失? – Zahari

+3

這取決於操作。可以從32位操作(取決於計算能力的2或3個指令)有效地合成64位加法和減法。乘法需要更長的指令序列(取決於體系結構,大約爲10到20條指令),除法和模數需要大量的仿真序列(60-100條指令,具體取決於體系結構)。您可以通過使用cuobjdump反彙編代碼來檢查所有細節。 – njuffa