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位浮点数(本机支持)。
我现在明白了。因此,使用64位数字会由于操作的映射而对性能造成重大损失? – Zahari
这取决于操作。可以从32位操作(取决于计算能力的2或3个指令)有效地合成64位加法和减法。乘法需要更长的指令序列(取决于体系结构,大约为10到20条指令),除法和模数需要大量的仿真序列(60-100条指令,具体取决于体系结构)。您可以通过使用cuobjdump反汇编代码来检查所有细节。 – njuffa