Floating point CUDA中的双精度浮点

Floating point CUDA中的双精度浮点,floating-point,cuda,gpu,gpgpu,Floating Point,Cuda,Gpu,Gpgpu,CUDA支持双精度浮点数吗 还有,原因是什么?如果你的GPU有,那么你可以做双精度。您应该知道,1.3硬件每个MP只有一个双精度FP单元,必须由该MP上的所有线程共享,而有8个单精度FPU,因此每个活动线程都有自己的单精度FPU。换句话说,您很可能会看到双精度的性能比单精度差8倍。根据Paul R的评论,Compute Capability 2.0设备(也称为Fermi)对双精度的支持有了很大改进,性能只有单精度的一半 这里有更多关于新设备双重性能的详细信息。作为提示: 如果要使用双精度,必须将

CUDA支持双精度浮点数吗


还有,原因是什么?

如果你的GPU有,那么你可以做双精度。您应该知道,1.3硬件每个MP只有一个双精度FP单元,必须由该MP上的所有线程共享,而有8个单精度FPU,因此每个活动线程都有自己的单精度FPU。换句话说,您很可能会看到双精度的性能比单精度差8倍。

根据Paul R的评论,Compute Capability 2.0设备(也称为Fermi)对双精度的支持有了很大改进,性能只有单精度的一半

这里有更多关于新设备双重性能的详细信息。

作为提示:

如果要使用双精度,必须将GPU架构设置为
sm_13
(如果您的GPU支持)

否则,它仍然会将所有的双精度转换为浮点数,并且只给出一个警告(如faya的帖子所示)。 (如果因此而出现错误,则非常恼人:-))


标志是:
-arch=sm_13

正如其他人所提到的,旧的CUDA卡不支持双卡类型。但是,如果您想要比您的旧GPU提供的精度更高,您可以使用类似于该技术的浮点解决方案。有关该技术的更多信息,请阅读


当然,在现代GPU上,您也可以使用double-double来实现比double更高的精度
double-double
也用于

+1:感谢您提供的额外信息-我已经有一年左右没有与CUDA合作了,并且不知道Compute Capability 2.0-任何技术都不会停留很长时间!请注意,GeForce卡的费米双精度性能(人为地)低于Teslas卡。Quadro卡应具有与特斯拉卡相同的性能水平。不幸的是,Quadro卡的价格似乎是具有相应GPU的GeForce卡的10倍左右(尽管Quadro卡具有更多内存)。感谢您的提示。我想切换到
double
精度,主要是为了准确度。我正在咨询一个我将Python代码转换为C++ /CUDA的项目,Python代码使用了<代码>双< /代码>精度无处不在。我注意到,当我切换到使用
float
时,结果的最大绝对差值为
1e-06
。我对此不太满意,但我更愿意接受准确的子弹,而不是表现。谢谢+1.哈-现在评论7岁孩子的答案,雷?;-)说真的,虽然这可能有点过时了,但据我所知,我已经有好几年没有使用CUDA了,最新的nVidia硬件现在可能有更好的双精度支持。呵呵,我没有注意到这一年。我在评论之前查阅了功能:)。我正在为我的客户开发的卡只有3.0版的计算能力,它仍然只有单精度的一半。它从6.0开始才得到全面支持。。。可怜。尽管如此,还是要谢谢你,即使这已经是7岁了!另一个需要考虑的是,如果GPU是旧的,但是CPU是合理的新的(特别是如果它有好的内核数),那么在CPU上有一个好的FFT库(例如FFTW)可以得到更好的结果,这是很容易实现和管理的。不管你走哪条路,祝你好运@苏帕尔什瓦啊,我明白了。不,我在结尾的第一句话是“……但我宁愿准确地接受子弹而不是表现”。。。这意味着我最终使用了单精度。我也没有使用任何基于FFT的解决方案,因为我的特定用例不需要它(即使我在2D中实现了卷积)。