GPU用于科学计算的准确性

时间:2012-08-24 14:28:47

标签: gpu gpu-programming

一位电气工程师最近提醒我不要使用GPU进行科学计算(例如准确性非常重要),因为没有像CPU那样的硬件保护措施。这是真的,如果是这样,典型硬件中的问题有多普遍/实质?

4 个答案:

答案 0 :(得分:9)

实际上,现代GPU非常适合科学计算,并且为了性能和能效,许多HPC应用程序至少部分移植到GPU上运行。 与较旧的GPU不同,现代的GPU(例如采用NVIDIA的Fermi或Kepler架构)提供完全标准化的IEEE-754格式,无论是单精度还是双精度,因此您应该能够像在现代CPU上一样使用它们。

答案 1 :(得分:4)

我发现了一些(较旧的)论文,但似乎问题已经解决,计算能力> = 2.0。

  

当前的GPU不支持双精度计算及其   单精度支持掩盖了重要方面   IEEE-754浮点标准[1],如正确的舍入结果   并正确关闭号码系统。   ...   我们的结果表明GPU的结果存在严重错误   在某些边缘情况下,除了不正确的处理   非规范化数字。

  • Karl E. Hillesland和Anselmo Lastra,“GPU浮点偏执狂”。在Proc。 GP2,2004年8月。

  • GPUBench Test: Precision.

  • Guillaume Da Graca和David Defour,“在图形上实现float-float操作符 硬件。“在Proc。第7届实数和计算机会议上,2006年7月。

  • Wikipedia's CUDA limitations section

  

双精度(CUDA计算能力1.3及以上)[14]偏离   来自IEEE 754标准:round-to-nearest-even是唯一的   支持倒数,除法和平方根的舍入模式。在   不支持单精度,非正规和信令NaN;   仅支持两种IEEE舍入模式(chop和round-to-nearest   偶数),这些是基于每个指令而不是   在控制字中;并且除法/平方根的精度是   略低于单精度。

答案 2 :(得分:2)

NVIDIA发布了一份白皮书,其中详细介绍了使用浮点和GPU的详细信息:

http://developer.download.nvidia.com/assets/cuda/files/NVIDIA-CUDA-Floating-Point.pdf

答案 3 :(得分:1)

实际上,大多数科学计算通常不需要那么准确,因为测量误差等很大程度上压倒了浮点舍入所引入的误差(除非可能在退化情况下,例如将一系列浮点数与相反的顺序,但即使在CPU中你也会遇到这类问题,因为它的设计工作正常,所以没有任何事情可以警告你。在科学计算中,通常足以在一定的误差范围内显示结果,并表明边际不会导致实际问题。

浮点设计速度快,不一定是精确的数字方式,即使在CPU中也是如此,这就是为什么我们总是教导我们将浮点数与epsilon进行比较。

OTOH,计算实际上需要精确的舍入规则到最后的数字,如会计或数论,应考虑使用定点算术(例如十进制模块),它允许您准确指定舍入规则。