一位电气工程师最近告诫我不要使用GPU进行科学计算(例如,准确度真的很重要),因为在CPU中没有硬件保护措施。这是真的吗?如果是这样的话,典型硬件中的问题有多普遍/实质性?用于科学计算的GPU的准确性
回答
实际上,为了提高性能和能源效率,现代GPU非常适合科学计算,许多HPC应用程序至少部分移植到GPU上运行。 与以前的GPU不同,现代的GPU(例如NVIDIA的Fermi或Kepler架构)可提供完全标准化的IEEE-754格式,无论是单精度还是双精度,所以您应该可以像使用现代CPU一样使用这些格式。
我在这方面找到了一些(较旧的)论文,但看起来问题已经在计算能力> = 2.0的卡片中得到修复。
当前GPU不支持双精度计算及其 单精度支持掩盖了 IEEE-754浮点标准[1],这样的重要方面正确舍入结果 并正确关闭数字系统。 ... 我们的结果显示,在某些边缘情况下,GPU的结果 存在严重错误,此外还有错误处理 非规格化数字。
卡尔E. Hillesland和安塞尔莫Lastra的, “GPU浮点妄想”。在Proc。 GP2,2004年8月
纪尧姆大格拉萨和大卫Defour, “浮浮运营商对图形 硬件实现。”在Proc。对实数和计算机八七会议,2006年7月
双精度(CUDA计算能力1.3及以上)[14]从IEEE 754标准偏差 :舍入到-nearest-even是唯一的 支持倒数,分割和平方根的舍入模式。在 单精度,非规范和信令NaNs不支持; 只支持两种IEEE舍入模式(切片和最接近的 甚至),并且这些是在每个指令的基础上指定的,而不是在控制字中的 ;分割/平方根的精度比单精度略低。
实际上大多数科学计算一般不需要那么精确,因为测量误差和例如主要由淹没浮点舍入引入的误差(或许除了在退化情况下,如求和浮标在阵列顺序vs逆序排列,但即使在CPU中也会遇到这种问题,因为它的工作原理与设计一样,所以没有什么会提醒你。在科学计算中,通常足以在一定的误差范围内显示结果,并显示余量不会导致实际问题。
即使在CPU中,浮点数的设计也很快,数字不一定准确,这就是为什么我们总是教导将浮点与epsilon进行比较的原因。
OTOH,实际上需要精确舍入到最后一位数字的计算,如会计或数字理论,应考虑使用定点算术(例如十进制模块),它可以让您精确指定舍入规则。
NVIDIA发布了覆盖与浮点一般和尤其是对GPU的工作细节的白皮书:
http://developer.download.nvidia.com/assets/cuda/files/NVIDIA-CUDA-Floating-Point.pdf
- 1. 测量准确的GPU计算时间
- 2. 计算机科学数学
- 3. 计算机科学
- 4. 科学计算器
- 5. 计算机科学的不确定性原理
- 6. Java科学计算器
- 7. 计算机科学老人
- 8. 计算机科学分类
- 9. Android科学计算器
- 10. 计算机科学界?
- 11. 用于MATLAB程序员的Python中的科学计算
- 12. 如何编写单元测试以确保C中科学计算的数值准确性?
- 13. 关于计算机科学算法eulerproject.net的替代
- 14. Python的GUI Tkinter的科学计算器
- 15. 在数学科学中讲计算机科学
- 16. PHP float的准确性计算
- 17. 如何学习计算机科学
- 18. 哪个IDE用于Python中的科学计算和绘图?
- 19. 伟大的计算机科学演讲
- 20. 在计算机科学的书
- 21. iOS上的科学计算库/ Objective C
- 22. 计算机科学的位和字节
- 23. 计算机科学与信息科学有什么区别?
- 24. 关于计算机科学/编程的图表/信息图表
- 25. 组织基于任务的科学计算
- 26. 计算机科学“关于入侵检测系统的知识”
- 27. MySQL的帮助 - 打印CNO,sectno,就读于计算机科学
- 28. 有没有其他的NVIDIA显卡用于GPU计算的深度学习?
- 29. 准确计算LTV
- 30. Tensorflow,多标签准确性计算
是......对......所有这些内置庞大的计算集群GPU是完全无用的,本质上只是随机数发生器。所有的硬件都会受到随机误差的影响 - 陶瓷封装中的放射性衰变事件释放出的单个高能量光子可能会在cpu内部的某个位置翻转位,并且会彻底杀死系统...或者它可能不会。 –
@MarcB我不是阴谋论者!请参阅下面我的答案中的链接,了解过去的问题。我基本上想知道这些在最近的硬件中是否得到了充分的修复。 –