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

Æle*_*lex 3 cuda gpgpu nvidia floating-point-precision

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

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

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

我的问题是:

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

谢谢 !

Rob*_*lla 8

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

您不太了解C或C++ floatdouble数据类型之间的区别.FP32与FP64是指floatdouble在C或C++.您所引用的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吞吐量之间的比率(即,它可以是速度甚至比1.31万亿次上FP32码).

如果你的算法依赖于double他们仍然会在任何你提到的产品的运行,并且结果的准确性应该是相同的,无论该产品,但是性能会有所降低,depnding在产品上.如果您的算法依赖于float它们,它们将在任何给定产品上运行得更快double,假设浮点吞吐量是限制因素.

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