导致每次计算结果不同的原因

导致每次计算结果不同的原因

ID:32381301

大小:57.69 KB

页数:17页

时间:2019-02-04

导致每次计算结果不同的原因_第1页
导致每次计算结果不同的原因_第2页
导致每次计算结果不同的原因_第3页
导致每次计算结果不同的原因_第4页
导致每次计算结果不同的原因_第5页
资源描述:

《导致每次计算结果不同的原因》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、1前言    曾经有很多人问,诸如为什么明明输入文件一样,但是动力学轨迹每次跑出来的都不一样、为什么几何优化结果相差甚远等等,甚至怀疑计算科学是否遵循决定论。实际上结果的差异是由于运算开始或运算过程中各种形式的数值误差、随机性引起的。这个是很重要却不被多数人重视的问题,它和理论本身、算法、软件环境、硬件环境等都有密切关联。本文将对这个问题做一些分析探讨。首先先讨论数值算法、软件、硬件因素是如何导致误差(错误)和随机性的。然后再看这些问题对计算化学会产生何等的影响。    2数值误差(错误)、随机性的根源    2.1内存

2、因为不少人对内存有误解,所以下面说得多一些。内存在数据读、写的过程中不可避免地会发生一些错误,轻则数据出现异常(比如一个变量为1却成了0),重则死机、重启。和内存错误(包括各种类型错误)相关的主要有以下几个方面:    (1)供电质量差。如电压偏离标准值过多、电流不稳。这不仅取决于电源质量,还取决于主板好坏(内存供电电路)。    (2)过热。随着温度升高内存出错的几率总是增加的,但只有高温下增加的幅度才最明显。遥想笔者用i860+RDRAM的日子,不装个小风扇吹着内存的话高负载下20分钟左右就死机。烫手的话应该装上散热

3、片乃至小风扇。    (3)内存质量。一方面是内存设计,即布线、PCB板数、贴片元件等。另一方面取决于内存颗粒制造商的品质,也有RP的关系,比如颗粒来自晶圆的边角还是中心(杂质含量不同)。    (4)制程。一般来说制程越精细可靠性越低,比如22nm制程的比起0.35微米制程的更容易出问题。但不要忽视工艺质量也在逐步改进,新的精细制程的产品出错几率不一定比以往的粗糙制程的要大。    (5)宇宙辐射。这看起来比较微妙,但是当严重的时候,如太阳风暴剧烈时,对电子设备的影响就明显了。这也是为什么在一些宇航领域(接受的辐射更严

4、重)的芯片仍然用着设计过时、制程古旧的产品,没准儿出现一个小错大家就没命了。机箱内电磁辐射也对内存稳定性有影响。    (6)内存参数。所设的工作频率越高、延迟越低出问题的几率越高,当然也要看内存类型。    (7)内存容量、读写次数:内存容量越大、读写越频繁,相同时间内出错的几率越大。    (8)老化。在越恶劣的环境使用越长时间,出错的可能性越大。要注意以上的因素不是分立、绝对的,而是互相关联的、相对的,不能单独拿出来对比。可见,与内存数据出错相关的因素很多,也很难衡量内存平均多长时间出一次错。一个令我比较认可的、由

5、大规模统计得到的说法是一般的使用环境下(外界环境正常,计算机运行稳定),平均每年每条内存有3%几率出错(包括各种形式的错误)。实际上这个几率是很小的,换句话说,等到机子被淘汰了也未必能赶上一次内存出错。所以不要把内存问题过分夸大,比如持续几天的计算,计算结果无法重现由内存错误导致的可能性微乎其微。但是,对于数据中心,内存出错几率乘上相应内存数目,再考虑数据出错的损失,这就是大问题了。内存的ErrorCheckingandCorrecting(ECC)显得十分必要,这是一种数据错误检测和校正的技术,每次在写入数据时同时写入

6、额外的数据位用作校验,在读出数据时也同时把校验位读出,由此根据一定算法分析读出的数据是否和写入的数据相同,若不同则进行修复。这使得内存数据出错几率大大降低,但也并非能解决所有问题。有些人误认为ECC内存性能比普通同类型内存要低很多,其实相差甚微。现今服务器内存几乎都带ECC,它比普通内存略贵,多了额外内存颗粒用于储存校验位,而现今服务器主板也都支持ECC(有些主板则只支持ECC内存)。个人计算没有绝对的必要使用ECC内存。导致内存出错的原因对于CPU/GPU运算出错也基本是一样的,就不累述了。    2.2处理器类型  

7、  对于不同架构的CPU、拥有不同指令集的CPU、乃至GPU,不能期望它们能完全重现同样的结果。尤其是浮点运算的标准可能不同,比如末位的舍入、极小值的处理。有些指令在不同处理器中执行方式不同,比如先乘一个数再加上一个数,这两条指令在有的处理器中会被融合为结果更精确的“乘加”一条指令。也有一些很特殊的情况,数值错误是由CPU设计bug引起的。老玩家们应该还记得,较早一批的Pentium60/66Mhz的浮点除法指令有错误。    2.3网络数据传输    对于集群,尤其是分布式计算,需要考虑网络连接引入的错误。网络传输都会

8、有一定误码率,即在多少位数据中出现一位差错,其大小取决于网络规范、传输介质、传输距离、外界干扰、网络适配器质量等因素。主流的以太网、infiniband等网络标准本身都带校验帧以保证数据完整、准确性,已很大程度上减轻了网络传输引发的数据错误。    2.4随机数生成器    在一些程序中要用到随机数生成器,比如Mon

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。