我在A.I.做博士研究。而且我已经开始使用CUDA库作为我的测试平台了。 我以前玩过CUDA,我对GPGPU的工作原理有基本的了解,但我对浮点精度感到不安。
看看GTX680,我看到FP64:1/24 FP32,而特斯拉的完整FP64为1.31 TFLOPS。我很清楚,一张是游戏卡,另一张是专业卡。
我问的原因很简单:我买不起特斯拉,但我可能得到两个GTX680。虽然主要目标是拥有尽可能多的CUDA内核和内存,但浮点精度可能会成为一个问题。
我的问题是:
谢谢!
答案 0 :(得分:7)
这些都是非常主观的问题。
您不太清楚您是否理解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等)将是相关的。但是你的代码仍然应该运行,也许更慢。
您还会以一种可能导致混淆的方式使用某些术语。特斯拉指的是NVIDIA GPGPU系列计算产品。最好引用特斯拉家族的特定成员。由于你提到1.31 TFlops FP,你指的是特斯拉K20X。请注意,K20X还具有FP64吞吐量和FP32吞吐量之间的比率(即,它甚至可以比FP32代码上的1.31 TFlops更快)。
如果您的算法依赖于double
,它们仍会在您提及的任何产品上运行,并且无论产品如何,结果的准确性都应相同,但性能会降低,产品。如果您的算法依赖float
,那么它们在任何给定产品上的运行速度都会快于double
,假设浮点吞吐量是限制因素。
您可能还想考虑GeForce GTX Titan。它具有双精度浮点性能,与特斯拉K20 / K20x大致相同。