我已经在 CUDA 中实现了一个算法,并且似乎双精度比单精度运行得更快。
我知道通常单精度在 GPU 中更快。我的 GPU 是 Nvidia Geforce GT 650M。
算法伪代码如下:
for k to numIterations
for j to numRowsOfAMatrix
CUDAmemset(double arrayGPU)
CUBLASdotproduct(double arrayGPU,double arrayGPU) [using cublasDdot]
CUBLASdotproduct(double arrayGPU,double arrayGPU) [using cublasDdot]
CUBLASscalarVectorMultiplication(scalarCPU,double arrayGPU) [using cublasDaxpy]
CUBLASvectorSum(double arrayGPU,double arrayGPU) [using cublasDaxpy]
end
end
我已经使用以下属性运行了一些测试: 数组长度为 2500。矩阵行长度为 2700。
我获得的时间如下:
50 次迭代:
单曲 20.9960 秒
双倍 20.1881 秒
200 次迭代:
单曲 81.9562 秒
双倍 78.9490 秒
500 次迭代:
单曲 199.661 秒
双倍 199.045 秒
1000 次迭代:
单曲 413.129 秒
双倍 396.205 秒
知道为什么双精度更快吗?