nVidia GPU用于研究用途:浮点精度

3
我正在进行人工智能专业的博士研究,目前需要使用CUDA库作为测试平台。虽然我之前用过CUDA并且对GPU通用计算有基本的了解,但我仍然对浮点精度感到困扰。
GTX680的FP64为1/24的FP32,而Tesla则具有完整的FP64,性能为1.31 TFLOPS。我很清楚其中一个是游戏显卡,另一个是专业显卡。
我提出问题的原因很简单:我买不起Tesla,但我可以考虑购买两个GTX680。尽管主要目标是拥有尽可能多的CUDA核心和内存,但浮点精度可能会成为问题。
我的问题如下:
1. 游戏显卡中小的浮点精度会带来多大的影响? 2. 1/24的32位浮点精度是否过小?特别是与先前Fermi的1/8 FP32相比。 3. 由于较小的浮点精度,是否存在计算结果错误的风险?例如,在SVM、VSM、矩阵运算、深度置信网络等方面,我是否会因较小的浮点数而遇到算法结果的问题,或者这只是意味着操作将花费更长时间/使用更多内存?
谢谢!

4
在stackoverflow中,这些询问意见的问题通常不适合。在你的问题被关闭之前,让我陈述我的观点:如果你有足够的钱购买两个GTX 680,你也能够负担得起一张GTX Titan,那里你可以获得原生FP64速度(1/3 FP32,就像Tesla一样)。这可以避免您使用多GPU编程时的麻烦(除非这正是您想要学习的内容)。它甚至接近于两个GTX 680的FP32速度,并具备计算能力3.5的其他好处,如每线程最多255个寄存器。 - tera
@tera 谢谢,现在更有意义了。在我发布后,我正在看Titan的1/3 F32。不,我不想涉足多GPU编程,只是导入CUDA库。 - Ælex
1个回答

10

这些问题非常主观。

您是否清楚了解C或C ++的float和double数据类型的区别不是很明确。FP32与FP64是指C或C++中的float和double。您所提到的1/8和1/24数字并不影响精度,但它们会影响吞吐量。您提到的所有GPU都具有一定的FP64双精度能力,因此差异不在于能力而在于性能。

对于您来说,了解代码是否依赖于双精度浮点非常重要。仅说“矩阵运算”之类的话是不够的,无法了解FP32(float)或FP64(double)的重要性。

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

您还在以可能导致混淆的方式使用某些术语。Tesla是指NVIDIA GPGPU计算产品系列。更好的做法是引用Tesla系列的特定成员。由于您提到了1.31 TFlops FP,因此您正在引用Tesla K20X。请注意,K20X也具有FP64吞吐量和FP32吞吐量之间的比率(即,在FP32代码上可能比1.31 TFlops更快)。

如果您的算法依赖于double,则它们仍将运行在您提到的任何产品上,并且结果的准确性应该与产品无关,但性能会降低,取决于产品。如果您的算法依赖于float,则在假定浮点吞吐量是限制因素的情况下,它们将在任何给定的产品上运行得更快。

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


1
是的,对于GeForce系列的大多数成员来说,双精度吞吐量显著低于Tesla系列的各个成员。GTX Titan是一个例外。由于GeForce的主要目标是消费级图形和游戏,这些都不需要FP64,因此那里较低的FP64吞吐量并不重要。在Tesla方面,K10也是另一个例外,因为它具有相对较低的FP64吞吐量。 - Robert Crovella
1
根据稀疏矩阵处理的性质,代码可能会在DP吞吐量之前受到内存吞吐量的限制,即使使用游戏GPU的较低DP吞吐量。这取决于FLOPS /字节的比率。 - njuffa
1
是的,显卡上的内存。我可能应该更清楚地说,稀疏矩阵代码可能会受到全局内存吞吐量的限制,而不是 GPU 中浮点单位的吞吐量的限制。 - njuffa
这些吞吐量/性能比率(1/8、1/24)究竟衡量了什么? - wip
双精度计算硬件与单精度计算硬件的比率。 - Robert Crovella
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接