CUDA中的64位数字支持

问题描述:

我在这个主题上发现了各种意见,所以这就是我决定在这里问的原因。我的问题是从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位整数(符号和无符号)都支持所有支持CUDA的硬件(虽然他们的操作映射到多个本地32位指令)。

计算能力1.3介绍64位浮点数(本机支持)。

+0

我现在明白了。因此,使用64位数字会由于操作的映射而对性能造成重大损失? – Zahari

+3

这取决于操作。可以从32位操作(取决于计算能力的2或3个指令)有效地合成64位加法和减法。乘法需要更长的指令序列(取决于体系结构,大约为10到20条指令),除法和模数需要大量的仿真序列(60-100条指令,具体取决于体系结构)。您可以通过使用cuobjdump反汇编代码来检查所有细节。 – njuffa