2012-08-24 25 views
6

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

+0

是......对......所有这些内置庞大的计算集群GPU是完全无用的,本质上只是随机数发生器。所有的硬件都会受到随机误差的影响 - 陶瓷封装中的放射性衰变事件释放出的单个高能量光子可能会在cpu内部的某个位置翻转位,并且会彻底杀死系统...或者它可能不会。 –

+0

@MarcB我不是阴谋论者!请参阅下面我的答案中的链接,了解过去的问题。我基本上想知道这些在最近的硬件中是否得到了充分的修复。 –

回答

9

实际上,为了提高性能和能源效率,现代GPU非常适合科学计算,许多HPC应用程序至少部分移植到GPU上运行。 与以前的GPU不同,现代的GPU(例如NVIDIA的Fermi或Kepler架构)可提供完全标准化的IEEE-754格式,无论是单精度还是双精度,所以您应该可以像使用现代CPU一样使用这些格式。

3

我在这方面找到了一些(较旧的)论文,但看起来问题已经在计算能力> = 2.0的卡片中得到修复。

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

  • 卡尔E. Hillesland和安塞尔莫Lastra的, “GPU浮点妄想”。在Proc。 GP2,2004年8月

  • GPUBench Test: Precision.

  • 纪尧姆大格拉萨和大卫Defour, “浮浮运营商对图形 硬件实现。”在Proc。对实数和计算机八七会议,2006年7月

  • Wikipedia's CUDA limitations section

双精度(CUDA计算能力1.3及以上)[14]从IEEE 754标准偏差 :舍入到-nearest-even是唯一的 支持倒数,分割和平方根的舍入模式。在 单精度,非规范和信令NaNs不支持; 只支持两种IEEE舍入模式(切片和最接近的 甚至),并且这些是在每个指令的基础上指定的,而不是在控制字中的 ;分割/平方根的精度比单精度略低。

1

实际上大多数科学计算一般不需要那么精确,因为测量误差和例如主要由淹没浮点舍入引入的误差(或许除了在退化情况下,如求和浮标在阵列顺序vs逆序排列,但即使在CPU中也会遇到这种问题,因为它的工作原理与设计一样,所以没有什么会提醒你。在科学计算中,通常足以在一定的误差范围内显示结果,并显示余量不会导致实际问题。

即使在CPU中,浮点数的设计也很快,数字不一定准确,这就是为什么我们总是教导将浮点与epsilon进行比较的原因。

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