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);
}
我現在明白了。因此,使用64位數字會由於操作的映射而對性能造成重大損失? – Zahari
這取決於操作。可以從32位操作(取決於計算能力的2或3個指令)有效地合成64位加法和減法。乘法需要更長的指令序列(取決於體系結構,大約爲10到20條指令),除法和模數需要大量的仿真序列(60-100條指令,具體取決於體系結構)。您可以通過使用cuobjdump反彙編代碼來檢查所有細節。 – njuffa