用于研究目的的nVidia GPU:Float Precision

时间:2013-04-16 01:39:19

标签: cuda gpgpu nvidia floating-point-precision

我在A.I.做博士研究。而且我已经开始使用CUDA库作为我的测试平台了。 我以前玩过CUDA,我对GPGPU的工作原理有基本的了解,但我对浮点精度感到不安。

看看GTX680,我看到FP64:1/24 FP32,而特斯拉的完整FP64为1.31 TFLOPS。我很清楚,一张是游戏卡,另一张是专业卡。

我问的原因很简单:我买不起特斯拉,但我可能得到两个GTX680。虽然主要目标是拥有尽可能多的CUDA内核和内存,但浮点精度可能会成为一个问题。

我的问题是:

  1. 游戏GPU的小浮点精度有多大妥协?
  2. 32位浮点精度的1/24是不是太小了?特别是与先前的1/8 FP32费米相比
  3. 由于浮点精度较小,是否存在计算结果错误的风险?即在SVM,VSM,Matrix操作,Deep Belief Networks等中,由于浮点较小,我可能会遇到算法结果的问题,还是仅仅意味着操作需要更长时间/使用更多内存?
  4. 谢谢!

1 个答案:

答案 0 :(得分:7)

这些都是非常主观的问题。

您不太清楚您是否理解C或C ++ floatdouble数据类型之间的区别。 FP32与FP64在C或C ++中是指floatdouble。您引用的1/8和1/24的数量不会影响精度,但它们会影响吞吐量。您提到的所有GPU都具有一些FP64双精度功能,因此差异不会归结为功能,而是性能

了解您关心的代码是否依赖于双精度浮点非常重要。仅仅通过“矩阵运算”来理解FP32(float)或FP64(double)是否重要是不够的。

如果您的代码依赖于FP64 double,那么这些性能比(1 / 8,1 / 24等)将是相关的。但是你的代码仍然应该运行,也许更慢。

您还会以一种可能导致混淆的方式使用某些术语。特斯拉指的是NVIDIA GPGPU系列计算产品。最好引用特斯拉家族的特定成员。由于你提到1.31 TFlops FP,你指的是特斯拉K20X。请注意,K20X还具有FP64吞吐量和FP32吞吐量之间的比率(即,它甚至可以比FP32代码上的1.31 TFlops更快)。

如果您的算法依赖于double,它们仍会在您提及的任何产品上运行,并且无论产品如何,结果的准确性都应相同,但性能会降低,产品。如果您的算法依赖float,那么它们在任何给定产品上的运行速度都会快于double,假设浮点吞吐量是限制因素。

您可能还想考虑GeForce GTX Titan。它具有双精度浮点性能,与特斯拉K20 / K20x大致相同。