在单机系统或者手持设备上,程序运行过程中出现错误已不常见。但是在超级计算机系统上,应用运行过程中出现错误却很常见,并且已经成为个日益严峻的问题。出错的因素有很多,包括组成器件的稳定性、系统的规模、应用持续运行的时间以及外部环境等。
虽然技术和工艺在不断进步,但是单个电子元器件的稳定性并没有相应提高,反而随着芯片内系统集成度的提高以及工作电压的降低(接近阈值)而降低。即使组成器件的稳定性很高,系统的规模对系统整体稳定性的影响也不容忽视。超级计算机系统一般是全规模运行,因此运行过程中任何组成器件出现错误都将造成整个系统出错。假设单个器件的稳定性很高,平均无故障运行时间(mean time to failures,MTTF)是10年,当系统规模是10万个器件时,整个系统的MTTF将不足1小时。而要达到E级计算(每秒10的18次方浮点运算)的目标,根据预测,系统内处理器的个数将达到10°的量级,处理器内的并行规模将达到1000个核,整个系统的MTTF可能只有分钟的量级。应用持续运行的时间在不断增加,对于系统稳定性的影响也日益严重。显然,程序持续运行的时间越长,出错的概率越高。以Top500超级计算机排名的基准测试程序高度并行计算基准测试(high performance Linpack,HPL)为例,现在的HPL测试运行的时间一般在10小时的量级。而要达到E级计算的目标,理论上需要持续运行的时间要达到100小时的量级,运行过程中出错的概率将大大增加。外部环境对于系统稳定性的影响较为复杂,因素很多,包括通信过程中网线松动、机房温度过高、宇宙射线的辐射等。
综上所述,随着高性能计算向E级计算目标的进,应用在运行过程中出现错误将不可避免。容错已经和并行性、能耗等并列成为超级计算机系统达到E级计算需要克服的几大挑战之一。
按照错误对程序运行的影响,一般将其分为硬错误和软错误两类。硬错误指的是系统中的某些部件停止工作,比如其中的某个进程不再响应或者失去所有相关联的数据,这时整个程序将无法继续运行。软错误指的是程序运行过程中发生的瞬态错误般并不会终止程序的运行,而只是对数据的正确性有影响。软错误又可以细分为两类:一类是数据的比特位(bit)发生了翻转,比如内存中的1变成了-1;另一类是逻辑运算错误,比如将1+1算成3。
领取专属 10元无门槛券
私享最新 技术干货