论文部分内容阅读
软错误是高能粒子作用于半导体器件的灵敏区后产生的单粒子效应改变了器件的逻辑状态而导致的一种瞬态故障。它不会影响电路的内部构造,但是却可以改变寄存器或存储单元的值,影响软件计算的可靠性。随着集成电路制造工艺的发展,芯片的集成度越来越高,供应电压越来越小,软错误率急剧上升。软错误防护包括软错误检测和软错误恢复,其工作可从硬件和软件等不同级别开展。与硬件级软错误防护方法相比,软件级软错误防护方法成本和设计难度较低,得到了广泛地研究和应用。软错误的结果类型分为良性后果(Benign)、崩溃(Crash)、挂起(Hang)和结果错误(SDC,Silent Data Corruption)。良性后果指错误在程序运行过程中被屏蔽,没有对程序结果造成影响,程序输出的结果正确。崩溃和挂起使程序停止运行或非停止运行,可通过简单的检测系统检测这两种错误。发生SDC错误时,程序表面上的运行与正常时的运行没有差别,但是输出错误的结果。由于一般不会怀疑结果的正确性,因此,一旦发生SDC,后果及其严重。SDC被认为是最严重和最隐蔽的软错误类型。本文针对SDC这一软错误类型,从软错误检测和软错误恢复等两个方面开展软错误防护的研究工作。软错误检测工作包括确定检测器位置和设置检测器。在确定检测器位置方面,程序的不同指令发生错误时,程序的结果类型为SDC的概率不同,即程序指令的SDC脆弱性不同。将检测器放置在SDC脆弱性较高的指令对应的程序位置有利于程序级的错误检测,因此,识别(预测)指令的SDC脆弱性十分重要。在指令SDC脆弱性识别方面,现有方法存在故障注入代价过高,预测性能差异较大,数据集收集复杂困难等问题。针对这些问题,本文提出了一种基于局部故障注入的指令SDC脆弱性识别方法,旨在降低故障注入代价,缩小预测性能差异,简化数据集收集过程。确定检测器的位置后,需要在检测位置设置检测器,在检测器设置方面,应用逻辑不变量断言检测方法生成断言检测器以检测软错误,取得了较好的效果,为了提高检测效率,即更好地权衡检出率和检测代价,它还对断言进行了筛选。但是,筛选后仍存在冗余断言,这影响了检测效率,此外,筛选断言时,它没有考虑断言的benign检出率和检错度,使它无法降低不必要的错误恢复开销,也不能重点检测严重的SDC错误。针对这些问题,本文提出了一种程序级冗余断言检测器筛选方法,旨在通过筛除冗余断言,提高检测效率和检错度,降低benign检出率,以进一步有效权衡检出率和检测代价,重点检测严重的SDC错误,降低不必要的恢复开销。检测到错误后需要处理错误,在软错误恢复方面,针对周期性检查点恢复方法没有考虑检测器的分布,无法充分降低时间开销这一问题,提出了一种基于检测器位置的检查点软错误恢复方法,旨在通过优化检查点部署降低时间开销。本文主要研究工作如下:(1)采用局部故障注入方式预测指令的SDC脆弱性。故障注入量和指令SDC脆弱性的预测性能呈正相关关系,降低故障注入量将降低预测性能。为了在满足预测性能的情况下,最大化降低故障注入量,采用局部故障注入方式控制预测性能的下降斜率。从目标程序(指令的SDC脆弱性需要预测的程序)中选择部分指令注入故障,之后,利用故障注入结果生成训练集,使用训练集训练分类与回归树(CART,Classification and Regression Tree)预测模型,用模型预测目标程序剩余指令的SDC脆弱性。局部故障注入方式使预测性能的下降斜率在早期阶段变小,为最大化降低故障注入量提供支持。数据集从目标程序中获取,简化了收集过程。实验结果表明,所提方法只需45%的故障注入即可预测指令相对于其它指令的SDC脆弱性,预测的指令SDC脆弱性的斯皮尔曼等级相关系数为0.81,另外,在不同程序和同一程序的不同输入上的预测性能差异分别为0.1和0.025。所提方法在以上预测方面的表现都优于现有的e PVF和PVF方法。(2)提出了程序级冗余断言检测器筛选方法。对使用应用逻辑不变量断言加固的程序中的断言进行筛选,包括同一程序点处和不同程序点间的断言筛选等两个阶段。第一个阶段处理程序的每个程序点,计算程序点处的每条断言的benign检出率和检错度,之后,使用benign检出率和检错度评估每条断言的重要性,最后,只在当前程序点处留下最重要的断言。在第二个阶段,首先,将经过上一个阶段处理后程序中剩下的断言划分为两两不相交的断言对,然后,处理每个断言对。针对每个断言对,计算断言对中的前面断言相对于后面断言的冗余度,以及删除前面断言时的收益和损失。若冗余度大于阈值且收益大于损失,则删除前面断言,否则,不删除。实验结果表明,与Radish方法相比,所提方法的检测效率提高了2倍,benign检出率由27.8%下降到了19.2%,检错度提升百分比为10%。(3)提出了基于检测器位置的检查点软错误恢复方法。将检测器的位置考虑在内,对周期性检查点方法的检查点进行重新部署。首先,基于周期性检查点方法部署初始检查点,并基于检查点划分程序段,然后,根据检测器的位置计算每个程序段的时间开销,之后,处理每个程序段。对于每个程序段,评估为其增加或删除检查点后程序段的时间开销变化,若时间开销降低,则为其添加额外的检查点或删除段内的检查点。实验结果表明,当程序运行期间发生单粒子翻转且翻转后产生的错误使检测器失效时,与T/4和T/3(T为程序原始运行时间)检查点间隔的周期性检查点方法相比,所提方法在程序总体运行时间上的下降百分比分别为15%和11.4%。当程序运行期间发生单粒子翻转时,与T/4和T/3的周期性检查点方法相比,所提方法在程序总体运行时间上的下降百分比分别为16%和11%。