【发布时间】:2010-05-12 08:11:39
【问题描述】:
CUDA 是否支持双精度浮点数?
还有,同样的原因是什么?
【问题讨论】:
标签: floating-point cuda gpu gpgpu
CUDA 是否支持双精度浮点数?
还有,同样的原因是什么?
【问题讨论】:
标签: floating-point cuda gpu gpgpu
如果你的 GPU 有 compute capability 1.3 那么你可以做双精度。您应该知道,虽然 1.3 硬件每个 MP 只有一个双精度 FP 单元,必须由该 MP 上的所有线程共享,而有 8 个单精度 FPU,因此每个活动线程都有自己的单精度 FPU。换句话说,您很可能会看到双精度的性能比单精度差 8 倍。
【讨论】:
doubleprecision,主要是为了准确。我正在咨询一个将 Python 代码转换为 C++ / CUDA 的副项目,并且 Python 代码在任何地方都使用 double 精度。我注意到,当我切换到使用float 时,结果的最大绝对差异为1e-06。我对此不太满意,但我宁愿以准确性而不是性能来接受子弹。谢谢! +1。
作为提示:
如果您想使用双精度,您必须将 GPU 架构设置为 sm_13(如果您的 GPU 支持的话)。
否则,它仍会将所有双精度数转换为浮点数并仅给出警告(如 faya 的帖子所示)。 (如果您因此遇到错误,非常烦人:-))
标志是:-arch=sm_13
【讨论】:
继 Paul R 的 cmets 之后,Compute Capability 2.0 设备(又名 Fermi)大大改进了双精度支持,性能仅为单精度的一半。
这个Fermi whitepaper有更多关于新设备双重性能的细节。
【讨论】:
正如其他人所说,较旧的 CUDA 卡不支持 double 类型。但是,如果您想要比旧 GPU 提供的精度更高的精度,您可以使用类似于double-double 技术的 float-float 解决方案。有关该技术的更多信息,请阅读
当然,在现代 GPU 上,您也可以使用 double-double 来实现大于 double 的精度。 double-double 也用于long double on PowerPC
【讨论】: