【问题标题】:nVidia GPUs for Research Purposes: Float Precision用于研究目的的 nVidia GPU:浮点精度
【发布时间】:2013-04-16 10:12:07
【问题描述】:

我正在攻读人工智能领域的博士学位。我已经到了必须开始为我的测试平台使用 CUDA 库的部分。 以前玩过CUDA,对GPGPU的工作原理等有基本的了解,但是对浮点精度很困扰。

查看 GTX680,我看到 FP64:1/24 FP32,而 Tesla 的 FP64 为 1.31 TFLOPS。我很明白,一张是游戏卡,一张是职业卡。

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

我的问题是:

  1. 游戏 GPU 中的小浮点精度有多大妥协?
  2. 32 位浮点精度的 1/24 是不是太小了?尤其是与之前的 1/8 FP32 费米相比
  3. 是否存在因浮点精度较小而导致计算结果错误的风险?即在 SVM、VSM、矩阵运算、深度信念网络等中,我是否会因为较小的浮点数而对算法的结果有问题,还是仅仅意味着运算将花费更长的时间/使用更多的内存?

谢谢!

【问题讨论】:

  • 这些征求意见的问题通常不适合 stackoverflow。在你的问题结束之前,让我陈述一下我的观点:如果你买得起两台 GTX 680,你也可以买得起一台 GTX Titan,在那里你可以获得原生 FP64 速度(与特斯拉一样是 1/3 FP32)。这为您节省了多 GPU 编程的痛苦(除非这是您想学习的)。它甚至接近两个 GTX 680 的 FP32 速度,并具有 3.5 的其他计算能力,例如每个线程最多 255 个寄存器。
  • @tera 谢谢,这更有意义。我发帖后正在看泰坦的1/3 F32。不,我不想涉足多 GPU 编程,只想导入 cuda 库。

标签: cuda gpgpu nvidia floating-point-precision


【解决方案1】:

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

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

了解您关心的代码是否依赖于双精度浮点对您来说非常重要。仅仅说“矩阵运算”之类的东西还不足以了解 FP32 (float) 或 FP64 (double) 是否重要。

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

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

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

您可能还想考虑GeForce GTX Titan。双精度浮点性能与Tesla K20/K20x大致相当。

【讨论】:

  • 谢谢,您刚刚验证了我开始理解的内容。 GTX 系列中较低的 FP 会影响处理双精度的速率,对吗?另外,是的,我正在使用双精度的稀疏矩阵,这是我担心浮点精度的主要原因。从您的回答和上面的评论来看,似乎 GTX Titan 可能是两者之间的最佳折衷方案。
  • 是的,对于GeForce家族的大部分成员来说,双精度吞吐量明显低于Tesla家族的各个成员。 GTX Titan 是个例外。由于 GeForce 的主要目标是消费图形和游戏,它们根本不依赖 FP64,因此较低的 FP64 吞吐量无关紧要。特斯拉这边的 K10 在另一个方向上也是一个例外,因为它的 FP64 吞吐量相对较低。
  • 根据稀疏矩阵处理的性质,代码可能会在受 DP 吞吐量约束之前受内存吞吐量的约束,即使游戏 GPU 的 DP 吞吐量较低。这取决于 FLOPS / 字节的比率。
  • @njuffa 你指的是设备内存吗?
  • 是的,显卡上的内存。我应该更清楚地说,稀疏矩阵代码可能受到全局内存吞吐量的限制,而不是 GPU 中浮点单元的吞吐量。
猜你喜欢
  • 2015-05-01
  • 2015-10-06
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多