Cuda 用于研究目的的nVidia GPU:浮点精度

Cuda 用于研究目的的nVidia GPU:浮点精度,cuda,gpgpu,nvidia,floating-point-precision,Cuda,Gpgpu,Nvidia,Floating Point Precision,我正在A.I.做博士研究,我已经开始使用CUDA库作为我的测试平台。 我以前玩过CUDA,我对GPGPU的工作原理等有基本的了解,但是浮点精度让我很困扰 看看GTX680,我看到FP64:1/24 FP32,而特斯拉的FP64为1.31 TFLOPS。我很清楚一张是游戏卡,另一张是专业卡 我问的原因很简单:我买不起特斯拉,但我可能买两辆GTX680。虽然主要目标是拥有尽可能多的CUDA内核和内存,但浮点精度可能会成为一个问题 我的问题是: 游戏GPU的小浮点精度有多大的折衷 32位浮点精度的1/

我正在A.I.做博士研究,我已经开始使用CUDA库作为我的测试平台。 我以前玩过CUDA,我对GPGPU的工作原理等有基本的了解,但是浮点精度让我很困扰

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

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

我的问题是:

  • 游戏GPU的小浮点精度有多大的折衷
  • 32位浮点精度的1/24不是太小了吗?特别是与之前费米的1/8 FP32相比
  • 由于较小的浮点精度,是否存在错误计算结果的风险?例如,在SVM、VSM、矩阵运算、深度信念网络等中,由于较小的浮点值,我可能会对算法的结果产生问题,还是仅仅意味着运算将花费更长的时间/使用更多的内存

  • 谢谢

    这些都是非常主观的问题

    <> P> >你不明白C还是C++ >代码>浮点和<代码>双< /C>数据类型。FP32与FP64是指C或C++中的代码>浮点< /代码>和<代码>双< /代码>。您提到的1/8和1/24的数字不会影响精度,但会影响吞吐量。您提到的所有GPU都有一些FP64双精度功能,因此差异不在于功能,而在于性能

    了解所关心的代码是否依赖于双精度浮点,这一点非常重要。仅仅说“矩阵运算”之类的话还不足以理解FP32(
    float
    )或FP64(
    double
    )是否重要

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

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

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


    <>你也可以考虑一下。它具有与特斯拉K20/K20X大致相等的双精度浮点性能。在你的问题结束之前,让我陈述我的观点:如果你能负担得起两台GTX680,你也能负担得起一台GTXTitan,在那里你可以获得本地FP64速度(1/3FP32,就像特斯拉一样)。这为您省去了多GPU编程的痛苦(除非这是您想要学习的)。它甚至接近两个GTX680的FP32速度,并具有3.5计算能力的其他优点,比如每个线程最多255个寄存器。@tera谢谢,这更有意义。在我发帖后,我正在看泰坦1/3的F32。不,我不想进入多GPU编程,只是导入cuda库。谢谢,你刚刚验证了我开始理解的内容。GTX系列中较低的FP会影响双精度的处理速度,对吗?另外,是的,我使用的是双精度稀疏矩阵,这也是我关心浮点精度的主要原因。从您的回答和上面的评论来看,GTX Titan似乎是两者之间的最佳折衷方案。是的,对于GeForce系列的大多数成员来说,双精度吞吐量明显低于特斯拉系列的各个成员。GTX泰坦是个例外。由于GeForce的主要目标是消费图形和游戏,它们根本不依赖FP64,因此较低的FP64吞吐量并不重要。特斯拉一侧的K10在另一个方向上也是一个例外,因为它的FP64吞吐量相对较低。根据稀疏矩阵处理的性质,代码在被DP吞吐量绑定之前可能会被内存吞吐量绑定,即使游戏GPU的DP吞吐量较低。它取决于触发器/字节的比率。@njuffa您指的是设备内存吗?是的,图形卡上的内存。我应该说得更清楚一些,稀疏矩阵代码可能受到全局内存吞吐量的限制,而不是GPU中浮点单元的吞吐量。