CUDA 是否支持双精度浮点数?
另外,同样的原因是什么?
如果您的 GPU 具有1.3 的计算能力,那么您可以进行双精度。您应该知道,虽然 1.3 硬件每个 MP 只有一个双精度 FP 单元,必须由该 MP 上的所有线程共享,而有 8 个单精度 FPU,因此每个活动线程都有自己的单精度 FPU。换句话说,您可能会看到双精度的性能比单精度差 8 倍。
作为提示:
如果你想使用双精度,你必须将 GPU 架构设置为sm_13
(如果你的 GPU 支持它)。
否则,它仍会将所有双精度数转换为浮点数并仅给出警告(如 faya 的帖子所示)。(如果您因此遇到错误,非常烦人:-))
旗帜是:-arch=sm_13
继 Paul R 的评论之后,Compute Capability 2.0 设备(又名 Fermi)大大改进了双精度支持,性能仅为单精度的一半。
这份Fermi 白皮书详细介绍了新设备的双重性能。
正如其他人所提到的,较旧的 CUDA 卡不支持该double
类型。但是,如果您想要比旧 GPU 提供的精度更高的精度,您可以使用类似于double-double技术的float-float解决方案。有关该技术的更多信息,请阅读
当然,在现代 GPU 上,您也可以使用double-double来实现大于 double 的精度。double-double
也用于long double
PowerPC