基于软错误感知的GPGPU程序近似分析系统及方法转让专利

申请号 : CN201910107441.4

文献号 : CN109815104B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 魏晓辉岳恒山谭婧炜佳孙冰怡徐海啸

申请人 : 吉林大学

摘要 :

本发明提供基于软错误感知的GPGPU程序近似分析系统及方法,以实现对GPGPU程序进行可靠性分析。上述系统进行了多次软错误模拟,将发生软错误后的错误输出结果进行了归类。在归类过程中,根据错误输出结果与标准输出结果间的误差(差异)是否超过用户质量需求,将差异发生类型(SDC)的错误输出,近一步划分为差异可接受类型和差异不可接受类型。这反映了程序可容忍一定范围的误差的近似特性,因此本发明实施例所进行的归类是近似归类。而基于近似归类所进行的可靠性分析,即为“可靠性近似分析”。可靠性近似分析有助于找出真正严重的错误,以此为依据设计保护策略可减少没必要的保护和开销。

权利要求 :

1.一种基于软错误感知的GPGPU程序近似分析系统,其特征在于,包括:接收单元,用于接收程序代码、质量度量公式、软错误模式以及用户质量需求;所述用户质量需求包括用户可容忍的误差最大值;

模拟单元,用于根据所述软错误模式对所述程序代码执行多次软错误模拟;

分析单元,用于根据所述质量度量公式确定各次软错误模拟的输出结果所对应的错误严重程度类型,以及,根据所述错误严重程度类型进行可靠性近似分析;

其中,所述根据所述质量度量公式确定各次软错误模拟的输出结果所对应的错误严重程度类型包括:根据所述质量度量公式计算目标错误输出结果与标准输出结果间的误差;所述目标错误输出结果表征任一次软错误模拟的输出结果;

若所述误差为零,确定所述目标错误输出结果的错误严重程度类型为无差异类型;

若所述误差大于零且不小于所述误差最大值,确定所述目标错误输出结果的错误严重程度类型为差异可接受类型;

若所述误差大于所述误差最大值,确定所述目标错误输出结果的错误严重程度类型为差异不可接受类型;其中,差异可接受类型和差异不可接受类型同属于差异发生类型;

若所述程序代码终止运行,确定所述目标错误输出结果的错误严重程度类型为崩溃类型。

2.如权利要求1所述的系统,其特征在于,每一次软错误模拟包括:根据所述软错误模式对所述程序代码进行软错误注入,并运行注入软错误的程序代码;

所述软错误模式包括:错误类型和错误位置;其中,所述错误位置用于指示错误发生的函数、错误发生的指令类型和错误发生的数据位中的至少一种;所述错误类型用于指示发生比特翻转的位数。

3.如权利要求2所述的系统,其特征在于,

所述分析单元还用于:收集各次软错误模拟相关的错误信息,所述错误信息包括发生软错误的核函数名称、发生软错误的指令类型和发生比特翻转的数据位;

在根据所述错误严重程度类型进行可靠性近似分析的方面,所述分析单元具体用于:根据各次软错误模拟所对应的错误严重程度类型以及收集的所述错误信息,进行多维度错误近似分析;

所述多维度错误近似分析包括:程序级错误近似分析,核函数级错误近似分析,指令类型级错误近似分析,以及,数据位级错误近似分析中的一种或多种组合。

4.如权利要求3所述的系统,其特征在于,

在进行程序级错误近似分析的方面,所述分析单元具体用于:分析程序代码对软错误的敏感度;

在进行核函数级错误近似分析的方面,所述分析单元具体用于:分析程序代码对特定核函数的敏感度,以及,分析同一程序代码对不同的核函数的敏感度中的至少一种;

在进行指令类型级错误近似分析的方面,所述分析单元具体用于:分析同一程序代码对不同的指令类型的敏感度,以及,分析同一指令类型对不同程序代码的敏感度,以及,分析在同一程序代码中同一指令类型在不同核函数中的敏感度中的至少一种;

在进行数据位级错误近似分析的方面,所述分析单元具体用于:分析同一程序代码对错误发生在不同的数据位的敏感度,分析同一程序代码对不同错误类型的敏感度,以及,比对分析不同的程序代码对错误发生在不同的数据位的敏感度中的至少一种。

5.如权利要求4所述的系统,其特征在于,

在分析所述程序代码对具体的指令类型的敏感度的方面,所述分析单元具体用于:统计在对程序代码中所述具体的指令类型的指令进行错误注入的软错误模拟中,对应无差异类型的数量NMasked,差异可接受类型的数量Nacceptable,差异不可接受类型的数量Nunacceptable,以及,崩溃类型的数量NDetected,其中,N表示数量,下标Masked、acceptable、unacceptable和Detected表示具体的错误严重程度类型;

根据公式Nacceptable/(Nacceptable+Nunacceptable)计算差异可接受类型在差异发生类型中的发生比例;

根据公式(Nacceptable+NMasked)/(NMasked+Nacceptable+Nunacceptable+NDetected),计算对所述程序代码无影响的近似比例。

6.如权利要求1-5任一项所述的系统,其特征在于,若所述标准输出结果为单一数值,所述误差质量公式包括:其中,Gi表示所述标准输出结果,Ci表示错误输出结果,rel-diffi表示错误输出结果与标准输出结果的误差。

7.如权利要求1-5任一项所述的系统,其特征在于,若所述标准输出结果为矩阵,所述误差质量公式包括:其中,G表示所述标准输出结果,C表示错误输出结果,rel-l2-norm表示错误输出结果与标准输出结果的误差。

8.一种基于软错误感知的GPGPU程序近似分析方法,其特征在于,包括:接收程序代码、质量度量公式、软错误模式以及质量需求;所述质量需求包括可容忍的误差最大值;

根据所述软错误模式对所述程序代码执行多次软错误模拟;

根据所述质量度量公式确定各次软错误模拟所对应的错误严重程度类型;

根据所述错误严重程度类型进行可靠性近似分析;

其中,所述根据所述质量度量公式确定各次软错误模拟所对应的错误严重程度类型包括:根据所述质量度量公式计算目标错误输出结果与标准输出结果间的误差;所述目标错误输出结果表征任一次软错误模拟对应的输出结果;

若所述误差为零,确定目标软错误模拟的错误严重程度类型为无差异类型;所述目标软错误模拟表征任一次软错误模拟;

若所述误差大于零且小于所述误差最大值,确定所述目标软错误模拟的错误严重程度类型为差异可接受类型;

若所述误差大于所述误差最大值,确定所述目标软错误模拟的错误严重程度类型为差异不可接受类型;其中,差异可接受类型和差异不可接受类型同属于差异发生类型;

若所述程序代码终止运行,确定所述目标软错误模拟的错误严重程度类型为崩溃类型。

9.如权利要求8所述的方法,其特征在于,还包括:

收集各次软错误模拟相关的错误信息,所述错误信息包括发生软错误的核函数名称、发生软错误的指令类型和发生比特翻转的数据位;

所述根据所述错误严重程度类型进行可靠性近似分析包括:根据各次软错误模拟所对应的错误严重程度类型以及收集的所述错误信息,进行多维度错误近似分析;

所述多维度错误近似分析包括:程序级错误近似分析,核函数级错误近似分析,指令类型级错误近似分析,以及,数据位级错误近似分析中的一种或多种组合。

10.如权利要求9所述的方法,其特征在于,

所述程序级错误近似分析包括:分析程序代码对软错误的敏感度;

所述核函数级错误近似分析包括:分析程序代码对特定核函数的敏感度,以及,分析同一程序代码对不同的核函数的敏感度中的至少一种;

所述指令类型级错误近似分析包括:分析同一程序代码对不同的指令类型的敏感度,以及,分析同一指令类型对不同程序代码的敏感度,以及,分析在同一程序代码中同一指令类型在不同核函数中的敏感度中的至少一种;

所述数据位级错误近似分析包括:分析同一程序代码对错误发生在不同的数据位的敏感度,分析同一程序代码对不同错误类型的敏感度,以及,比对分析不同的程序代码对错误发生在不同的数据位的敏感度中的至少一种。

说明书 :

基于软错误感知的GPGPU程序近似分析系统及方法

技术领域

[0001] 本发明涉及计算机领域,特别涉及基于软错误感知的GPGPU程序近似分析系统及方法。

背景技术

[0002] GPGPU(通用图像处理器)是计算机里处理图像的部件,原叫做GPU(图像处理器),后来因为这种部件也能处理诸如数值模拟、温度模拟、深度学习等非图形程序的高性能(HPC)程序,故称为“通用图像处理器”。
[0003] GPGPU的架构由多个SM(streaming Multiproeessor,流式多处理器)组成。GPU可通过SM并行运行成千上万个线程,这些线程执行的是同一程序代码。
[0004] GPGPU在很小的芯片上集成了成千上万的计算核,而芯片的集成度越高,其电路就越容易受到宇宙中阿尔法粒子和高能中子的影响。
[0005] 当计算机受到阿尔法粒子和高能中子影响的时候,存储的0和1会发生跳变,例如001变为000,这种跳变称为“比特翻转”,而由“比特翻转”造成的程序错误可称为“软错误”(因电路并没有被损坏,只是数据被损坏了,所以称为“软错误”)。
[0006] 传统GPU是用来处理图像数据的,发生软错误后可能只会造成图像部分像素点被破坏(如图1a所示),不会影响到用户的需求。但是当GPGPU处理HPC程序时,HPC程序有一定的可靠性需求,因此需设计保护策略消除“软错误”对程序的影响。
[0007] 在设计保护策略之前,则需要对GPGPU程序进行可靠性分析,以找出程序中对结果影响很大的那部分,后续才可有针对性地设计保护策略。

发明内容

[0008] 有鉴于此,本发明提供基于软错误感知的GPGPU程序近似分析系统及方法,以实现对GPGPU程序进行可靠性分析。
[0009] 为了实现上述发明目的,本发明提供以下技术方案:
[0010] 一种基于软错误感知的GPGPU程序近似分析系统,包括:
[0011] 接收单元,用于接收程序代码、质量度量公式、软错误模式以及用户质量需求;所述用户质量需求包括用户可容忍的误差最大值;
[0012] 模拟单元,用于根据所述软错误模式对所述程序代码执行多次软错误模拟;
[0013] 分析单元,用于根据所述质量度量公式确定各次软错误模拟的输出结果所对应的错误严重程度类型,以及,根据所述错误严重程度类型进行可靠性近似分析;
[0014] 其中,所述根据所述质量度量公式确定各次软错误模拟的输出结果所对应的错误严重程度类型包括:
[0015] 根据所述质量度量公式计算目标错误输出结果与标准输出结果间的误差;所述目标错误输出结果表征任一次软错误模拟的输出结果;
[0016] 若所述误差为零,确定所述目标错误输出结果的错误严重程度类型为无差异类型;
[0017] 若所述误差大于零且不小于所述误差最大值,确定所述目标错误输出结果的错误严重程度类型为差异可接受类型;
[0018] 若所述误差大于所述误差最大值,确定所述目标错误输出结果的错误严重程度类型为差异不可接受类型;其中,差异可接受类型和差异不可接受类型同属于差异发生类型;
[0019] 若所述程序代码终止运行,确定所述目标错误输出结果的错误严重程度类型为崩溃类型。
[0020] 可选的,每一次软错误模拟包括:根据所述软错误模式对所述程序代码进行软错误注入,并运行注入软错误的程序代码;所述软错误模式包括:错误类型和错误位置;其中,所述错误位置用于指示错误发生的函数、错误发生的指令类型和错误发生的数据位中的至少一种;所述错误类型用于指示发生比特翻转的位数。
[0021] 可选的,所述分析单元还用于:收集各次软错误模拟相关的错误信息,所述错误信息包括发生软错误的核函数名称、发生软错误的指令类型和发生比特翻转的数据位;在根据所述错误严重程度类型进行可靠性近似分析的方面,所述分析单元具体用于:根据各次软错误模拟所对应的错误严重程度类型以及收集的所述错误信息,进行多维度错误近似分析;所述多维度错误近似分析包括:程序级错误近似分析,核函数级错误近似分析,指令类型级错误近似分析,以及,数据位级错误近似分析中的一种或多种组合。
[0022] 可选的,在进行程序级错误近似分析的方面,所述分析单元具体用于:分析程序代码对软错误的敏感度;在进行核函数级错误近似分析的方面,所述分析单元具体用于:分析程序代码对特定核函数的敏感度,以及,分析同一程序代码对不同的核函数的敏感度中的至少一种;在进行指令类型级错误近似分析的方面,所述分析单元具体用于:分析同一程序代码对不同的指令类型的敏感度,以及,分析同一指令类型对不同程序代码的敏感度,以及,分析在同一程序代码中同一指令类型在不同核函数中的敏感度中的至少一种;在进行数据位级错误近似分析的方面,所述分析单元具体用于:分析同一程序代码对错误发生在不同的数据位的敏感度,分析同一程序代码对不同错误类型的敏感度,比对分析不同的程序代码对错误发生在不同的数据位的敏感度中的至少一种。
[0023] 可选的,在分析所述程序代码对具体的指令类型的敏感度的方面,所述分析单元具体用于:统计在对程序代码中所述具体的指令类型的指令进行错误注入的软错误模拟中,对应无差异类型的数量NMasked,差异可接受类型的数量Nacceptable,差异不可接受类型的数量Nunacceptable,以及,崩溃类型的数量NDetected,其中,N表示数量,下标Masked、acceptable、unacceptable和Detected表示具体的错误严重程度类型;根据公式Nacceptable/(Nacceptable+Nunacceptable)计算差异可接受类型在差异发生类型中的发生比例;根据公式(Nacceptable+NMasked)/(NMasked+Nacceptable+Nunacceptable+NDetected),计算对所述程序代码无影响的近似比例。
[0024] 可选的,若所述标准输出结果为单一数值,所述误差质量公式包括:
[0025] 其中,Gi表示所述标准输出结果,Ci表示错误输出结果,rel-diffi表示错误输出结果与标准输出结果的误差。
[0026] 可选的,若所述标准输出结果为矩阵,所述误差质量公式包括:
[0027] 其中,G表示所述标准输出结果,C表示错误输出结果,rel-l2-norm表示错误输出结果与标准输出结果的误差。
[0028] 一种基于软错误感知的GPGPU程序近似分析方法,包括:
[0029] 接收程序代码、质量度量公式、软错误模式以及质量需求;所述质量需求包括可容忍的误差最大值;
[0030] 根据所述软错误模式对所述程序代码执行多次软错误模拟;
[0031] 根据所述质量度量公式确定各次软错误模拟所对应的错误严重程度类型;
[0032] 根据所述错误严重程度类型进行可靠性近似分析;
[0033] 其中,所述根据所述质量度量公式确定各次软错误模拟所对应的错误严重程度类型包括:
[0034] 根据所述质量度量公式计算目标错误输出结果与标准输出结果间的误差;所述目标错误输出结果表征任一次软错误模拟对应的输出结果;
[0035] 若所述误差为零,确定目标软错误模拟的错误严重程度类型为无差异类型;所述目标软错误模拟表征任一次软错误模拟;
[0036] 若所述误差大于零且小于所述误差最大值,确定所述目标软错误模拟的错误严重程度类型为差异可接受类型;
[0037] 若所述误差大于所述误差最大值,确定所述目标软错误模拟的错误严重程度类型为差异不可接受类型;其中,差异可接受类型和差异不可接受类型同属于差异发生类型;
[0038] 若所述程序代码终止运行,确定所述目标软错误模拟的错误严重程度类型为崩溃类型。
[0039] 可选的,还包括:收集各次软错误模拟相关的错误信息,所述错误信息包括发生软错误的核函数名称、发生软错误的指令类型和发生比特翻转的数据位;所述根据所述错误严重程度类型进行可靠性近似分析包括:根据各次软错误模拟所对应的错误严重程度类型以及收集的所述错误信息,进行多维度错误近似分析;所述多维度错误近似分析包括:程序级错误近似分析,核函数级错误近似分析,指令类型级错误近似分析,以及,数据位级错误近似分析中的一种或多种组合。
[0040] 可选的,所述程序级错误近似分析包括:分析程序代码对软错误的敏感度;
[0041] 所述核函数级错误近似分析包括:分析程序代码对特定核函数的敏感度,以及,分析同一程序代码对不同的核函数的敏感度中的至少一种;
[0042] 所述指令类型级错误近似分析包括:分析同一程序代码对不同的指令类型的敏感度,以及,分析同一指令类型对不同程序代码的敏感度,以及,分析在同一程序代码中同一指令类型在不同核函数中的敏感度中的至少一种;
[0043] 所述数据位级错误近似分析包括:分析同一程序代码对错误发生在不同的数据位的敏感度,分析同一程序代码对不同错误类型的敏感度,以及,比对分析不同的程序代码对错误发生在不同的数据位的敏感度中的至少一种。
[0044] 需要说明的是,虽然对输出结果的准确性要求高,但在很多情况下,仍可容忍一定范围的误差,例如,在用高性能程序进行物理模拟估计室内温度的时候,如果估计值和真实值有差距,但差距不大还是可以接受的。也即,高性能程序也具有“近似”特性。所谓“近似特性”指的是程序可以容忍一定范围的误差,接受不太精确的结果的特性。
[0045] 基于上述“近似特性”,本发明实施例所提供的技术方案进行了多次软错误模拟,将发生软错误后的错误输出结果,进行了归类。在归类过程中,根据错误输出结果与标准输出结果间的误差(差异)是否超过QoS(用户质量需求),将差异发生类型(SDC)的错误输出,近一步划分为差异可接受(SDCs-acceptable)类型和差异不可接受(SDCs-unacceptable)类型。这反映了程序可容忍一定范围的误差的近似特性,因此本发明实施例所进行的归类是近似归类。而基于近似归类所进行的可靠性分析,即为“可靠性近似分析”。可靠性近似分析有助于找出真正严重的错误,以此为依据设计保护策略可减少没必要的保护和开销。

附图说明

[0046] 图1a为软错误造成图像部分像素点被破坏的示意图;
[0047] 图1b为本发明实施例提供的GPGPU架构示意图;
[0048] 图2为本发明实施例提供的近似分析系统的示例性结构图;
[0049] 图3为本发明实施例提供的近似分析方法的示例性流程。

具体实施方式

[0050] 本发明实施例公开了基于软错误感知的GPGPU程序近似分析系统及方法,以实现对GPGPU程序进行可靠性分析。
[0051] 先介绍GPGPU:
[0052] 随着近年来各行业应用数据量激增,互联网数据量增长速度远超硬件平台计算、存储资源增长速度。基于现有数据处理技术提供的计算能力和能量效率都难以满足应用计算需求。据研究,在未来的十年里,互联网数据量会增加50倍,而计算机存储和计算能力仅仅会提升10倍。
[0053] 在这样的背景下,GPGPU应运而生。GPGPU是一种新型的计算平台,因为可以支持高并发的线程操作,GPGPU被越来越多地用于高性能计算。不同于传统的GPU平台只是用来计算图像数据,GPGPU被越来越多用在数值模拟、数据挖掘、人工智能等领域。
[0054] GPGPU使用SIMT(单指令多线程)编程模型,即同一个程序内核中的所有线程使用不同的数据执行相同的程序代码。
[0055] GPU的架构可参见图1b:GPU包括多个SM,GPU可通过SM并行运行多个线程。
[0056] 具体的,上述多个线程执行的是同一代码段中的程序指令(也即使用不同的操作数执行相同的程序指令)。代码段中包括许多程序指令,例如,第一条程序指令是两个数相加,第二条程序指令是两个数相乘,等等。在同一时刻,不同的SM可以执行到不同的程序指令,有的SM可能执行到了第100条程序指令,有的SM可能执行到了第200条程序指令。
[0057] 上述多个线程被划分成多个CTA(线程块),每个CTA由数百个线程组成。线程以CTA为单位被分发到各个SM中,也即,每一SM会分配至少一个线程块。
[0058] CTA进一步划分为多个线程簇(warp),线程簇的大小是固定的,包括32个线程或16个线程。在SM流水线中,每次从所分配的CTA中取一个准备好的warp执行操作。同一warp中的线程以SIMD(单指令多数据)模式执行,也即,同一warp中的线程在同一时刻执行同一程序指令。
[0059] 举例来讲,在t0时刻,一个线程簇中的线程均会执行a+b赋值给c的程序指令,所不同的是,不同线程选择的a和b的值不同,进一步的,赋值给c的值也不同。
[0060] 前述提及了,GPGPU在执行程序代码时,可能会发生软错误,尤其一些HPC程序,有较高的可靠性需求,需要对其进行可靠性分析。
[0061] 在现有的可靠性分析方法,会对程序代码中特定类型的指令进行成千上百次的错误注入,并运行注入错误的程序代码。
[0062] 在此同时,记录一份没有注入错误的程序输出,即“无污染输出”。进而对植入错误的程序代码的输出进行监测,针对错误严重程度,将输出分为三类:
[0063] Masked:程序输出和真实结果没有差异;
[0064] SDC:程序结果和真实值不一样;
[0065] Detected:程序直接终止,因为错误严重程序被迫结束。
[0066] 需要说明的是,在现有可靠性分析方法,一般使用diff命令来比较程序输出的文本文件和真实结果的文本文件,diff会以逐行的方式,比较两文本文件的异同处。Diff会在命令行中打印每一行的改动。
[0067] 基于diff命令可确定有程序输出时(程序直接终止则无输出),程序输出和真实结果无差异时,diff命令输出为空,可确定为Masked,否则diff命令输出不为空,可确定为SDC。
[0068] 然后通过统计分析的方法,分析错误发生在不同类型的指令的影响结果,再根据分析结果找出对于程序很重要的部分,以便后续有针对性地设计保护策略。
[0069] 在上述现有可靠性分析方法(也可称为可靠性弹性分析方法),将所有的SDC和Detected错误都认为不可接受。
[0070] 举例来讲,假如对加法指令注入错误1000次,其中200次是Masked,500次是SDCs,300次是Detected,那么根据现有的可靠性分析方法,加法指令造成严重错误的概率为(500+300)/1000=0.8。
[0071] 然后,发明人在实施本发明创造时发现:虽然高性能程序对输出结果的准确性要求高,但在很多情况下,仍可容忍一定范围的误差,例如,在用高性能程序进行物理模拟估计室内温度的时候,如果估计值和真实值有差距,但差距不大还是可以接受的。也即,高性能程序也具有“近似”特性。所谓“近似特性”指的是程序可以容忍一定范围的误差,接受不太精确的结果的特性。沿用前例,在500次SDCs中,发明人发现其中有400次的输出结果不影响正常使用。
[0072] 因此,现有的可靠性分析方法过度估计了发生错误的严重程度,造成分析结果不准确。导致后续进行了很多没必要的保护,造成没必要的开销。
[0073] 有鉴于此,本发明提供了基于软错误感知的GPGPU程序近似分析系统及方法,基于上述提及的“近似特性”来对GPGPU程序进行可靠性分析。
[0074] 本发明的核心思想是:进行多次软错误模拟,将发生软错误后的错误输出结果进行归类,在归类过程中,根据错误输出结果与标准输出结果间的误差(差异)是否超过QoS(用户质量需求),将差异发生类型(SDC)的错误输出,近一步划分为差异可接受(SDCs-acceptable)类型和差异不可接受(SDCs-unacceptable)类型。基于上述归类进行可靠性分析。
[0075] 上述近似分析系统也可理解为近似性分析框架。
[0076] 图2示出了近似分析系统的示例性结构,其可包括:接收单元1、模拟单元2和分析单元3。
[0077] 本文后续将结合方法实施例介绍上述各单元的功能。
[0078] 图3示出了由上述近似分析系统执行的分析方法的一种示例性流程,至少可包括如下步骤:
[0079] S0:近似分析系统/近似分析框架接收参数。
[0080] 上述参数一般可由需进行近似分析的用户向框架提交。
[0081] 具体的,上述参数可包括:
[0082] ①,Application:包括程序代码和标准数据;
[0083] 其中,程序代码是需要分析的程序代码,而标准数据包括程序标准输入数据和标准输出数据。
[0084] 标准输出数据是在程序代码不发生软错误时,基于标准输入数据而输出的真实数据。
[0085] 可以理解的是,为了进行对比,在多次软错误模拟中,程序代码处理的输入数据应相同,这样其的输出结果与标准输出数据才具有可比性。
[0086] 所以,除了要向框架提交标准输出数据外,还要提交标准输入数据。
[0087] ②,Quality Metric:质量度量公式;
[0088] 质量度量公式用于量化错误输出结果和标准输出数据间的差异。根据程序代码输出的是单一数值,还是矩阵,质量度量公式会有不同。
[0089] 在一个示例中,若程序代码的输出为单一数值,则误差质量公式包括:
[0090]
[0091] 其中,Gi表示标准输出结果,Ci表示错误输出结果,rel-diffi表示错误输出结果与标准输出结果的误差,|*|表示取绝对值。
[0092] 在另一个示例中,若程序代码的输出结果为矩阵,则误差质量公式包括:
[0093]
[0094] 其中,G表示标准输出结果,C表示错误输出结果,rel-l2-norm表示错误输出结果与标准输出结果的误差或相对L2误差值。
[0095] 公式二实现的运算为:G与C两个矩阵相减之后得到一个矩阵,计算这一矩阵的L2范式(L2范式是一个数值),再除以G的L2范式。||*||表示计算L2范式。
[0096] L2范式的计算方法是把矩阵中的所有元素求和开根号,也即,对于任一矩阵A,若其包含N个元素,ai表示矩阵A中的第i个元素,则其L2范式可表示如下:
[0097]
[0098] ③,Error Mode:软错误模式;
[0099] 上述软错误模式包括:错误类型和错误位置。
[0100] ④,QoS threshold:用户质量需求。
[0101] 其中,上述用户质量需求包括用户可容忍的误差最大值。当然,误差最大值也可以是经验值,而不需要用户提供。
[0102] 在一个示例中,可由前述的接收单元1执行步骤S0。
[0103] S1:根据软错误模式对程序代码执行多次软错误模拟。
[0104] 在一个示例中,可由前述的模拟单元2执行步骤S1。
[0105] 具体的,每一次软错误模拟可包括:根据软错误模式对程序代码进行软错误注入,并运行注入软错误的程序代码。
[0106] 需要说明的是,前述提及了GPGPU可并行运行多个线程,每一线程都运行相同的程序代码,则在每次软错误模拟,可随机选一个线程,对其执行的程序代码进行软错误注入。
[0107] 前述提及了,软错误模式包括:错误类型和错误位置。
[0108] 其中,错误类型用于指示发生比特翻转的位数。例如,单比特翻转,N比特翻转等(N大于1)。
[0109] 而上述错误位置可用于指示错误发生的函数、错误发生的指令类型和错误发生的数据位中的至少一种。
[0110] 以32位数据为例,错误发生的数据位可指示错误发生在高位、低位,也可更细化指示错误发生在第x位。
[0111] 进一步的,指令类型包括加法、乘法、除法、移位、存储、取值等。
[0112] 需要说明的是,以单比特翻转为例,假定错误位置只指示了加法指令,在程序代码中可能有成千上万条加法指令,则在每次软错误模拟时,可随机对一条加法指令进行单比特翻转的错误注入。
[0113] 更具体的,假定加法指令是a+b赋值给c,可对c的值进行单比特翻转,以实现错误注入;对于取值的指令,可对其所取的值进行单比特翻转,以实现错误注入。
[0114] 其他指令类型的错误注入与此类似,在此不作赘述。
[0115] 仍以单比特翻转为例,假定错误位置只指示了错误发生的函数,则在每次软错误模拟时,可随机对该函数对应的一条指令进行单比特翻转的错误注入。
[0116] 仍以单比特翻转为例,假定错误位置指示了错误发生的函数和指令类型(例如加法),则在每次软错误模拟时,可随机对该函数对应的一条加法指令进行单比特翻转的错误注入。
[0117] 仍以单比特翻转为例,假定错误位置仅指示了错误发生在高位,则在每次软错误模拟时,可随机对程序代码中的一条指令进行高位单比特翻转的错误注入。
[0118] 以此类推,不再赘述。
[0119] S2:根据质量度量公式确定各次软错误模拟的输出结果所对应的错误严重程度类型。
[0120] 具体的,可由前述的分析单元3执行步骤S2。
[0121] 步骤S2实现的是对发生软错误后的错误输出结果进行归类。
[0122] 在一个示例中,对于任一次软错误模拟的输出结果(可称为目标错误输出结果),可具体进行如下归类:
[0123] 步骤a:根据质量度量公式计算目标错误输出结果与标准输出结果间的误差。
[0124] 质量度量公式的介绍请参见前述记载,在此不作赘述。
[0125] 需要说明的是,前述提及了,现有可靠性分析方法中,使用diff命令比较错误输出与真实结果是否有差异。但diff命令只能输出哪一行有差异,并未对差异进行量化。
[0126] 而在本发明实施例中,使用质量度量公式对错误输出和真实结果的差异进行了量化,得到了量化值(也即误差)。
[0127] 后续可基于量化值对SDC类的错误输出进行更为细致的分类。
[0128] 步骤b:
[0129] 若误差为零,确定目标错误输出结果的错误严重程度类型为无差异类型(表示为Masked);
[0130] 若误差大于零且不小于误差最大值,确定目标错误输出结果的错误严重程度类型为差异可接受类型(表示为acceptable或SDCs-acceptable);
[0131] 若误差大于误差最大值,确定目标错误输出结果的错误严重程度类型为差异不可接受类型(表示为unacceptable或SDCs-unacceptable);其中,差异可接受类型和差异不可接受类型均属于差异发生类型(表示为SDC);
[0132] 若程序代码终止运行,确定目标错误输出结果的错误严重程度类型为崩溃类型(表示为Detected)。
[0133] 在上述归类过程中,根据错误输出结果与标准输出结果间的误差(差异)是否超过QoS(用户质量需求),将差异发生类型(SDC)的错误输出,近一步划分为差异可接受(SDCs-acceptable)类型和差异不可接受(SDCs-unacceptable)类型。这反映了程序可容忍一定范围的误差的近似特性,因此本发明实施例所进行的归类是近似归类。
[0134] S3:收集各次软错误模拟相关的错误信息。
[0135] 具体的,可由前述的分析单元3执行步骤S3。
[0136] 错误信息包括kname(发生软错误的核函数名称)、instruction-type(发生软错误的指令类型)和data bit-location(发生比特翻转的数据位)。
[0137] 依据这些信息,分析框架后续可以进行程序级,核函数级,指令类型级,数据位级的错误分析。
[0138] S4:根据所述错误严重程度类型进行可靠性近似分析。
[0139] 具体的,可由前述的分析单元3执行步骤S4。
[0140] 具体的,分析单元3可根据各次软错误模拟所对应的错误严重程度类型以及收集的错误信息,进行多维度错误近似分析。
[0141] 进一步的,上述多维度错误近似分析可包括:程序级错误近似分析,核函数级错误近似分析,指令类型级错误近似分析,以及,数据位级错误近似分析中的一种或多种组合。
[0142] 下面分别介绍各种错误近似分析。
[0143] 一,程序级错误近似分析
[0144] 程序级错误近似分析侧重于:分析程序代码对软错误的敏感度。
[0145] 具体的,可通过如下方式分析程序代码对软错误的敏感度:
[0146] 步骤a1:统计所有的软错误模拟中,对应无差异类型的数量NMasked,差异可接受类型的数量Nacceptable,差异不可接受类型的数量Nunacceptable,以及,崩溃类型的数量NDetected;
[0147] 步骤b1:根据公式SDCs-Acceptance-Ratio=Nacceptable/(Nacceptable+Nunacceptable)*100%,计算差异可接受类型在差异发生类型中的发生比例。
[0148] 其中,“SDCs-Acceptance-Ratio”表示“差异可接受类型在差异发生类型中的发生比例”。
[0149] 步骤c1:根据公式Aprroximate-Acceptance-Proportion=(Nacceptable+NMasked)/(NMasked+Nacceptable+Nunacceptable+NDetected)*100%,计算对程序代码无影响的近似比例。
[0150] 其中,“Aprroximate-Acceptance-Proportion”表示“无影响的近似比例”。
[0151] 举例来讲,假定对程序代码进行了1000次的错误注入,得到的错误输出中,200次是Masked,300次是Detected,500次是SDCs,通过QoS threshold划分,这500次SDCs可分为400次SDCs-acceptable和100次SDCs-unacceptable。
[0152] 也即NMasked=200,NDetected=300,Nacceptable=400,Nunacceptable=100。
[0153] 则SDCs-Acceptance-Ratio=400/500*100%=80%。
[0154] Aprroximate-Acceptance-Proportion=(400+200)/1000*100%=60%。
[0155] 二,核函数级错误近似分析
[0156] 核函数级错误近似分析侧重于分析同一程序代码对不同的核函数的敏感度,当然也可分析程序代码对特定核函数的敏感度。
[0157] 举例来讲,可分析同一程序代码对核函数A和核函数B的敏感度。
[0158] 可先分别计算程序代码对核函数A的敏感度,以及同一程序代码对核函数B的敏感度,再进行比对。
[0159] 在核函数级错误近似分析中,比较侧重于分析同一程序代码对不同的核函数的敏感度。
[0160] 具体的,可通过如下方式分析程序代码对特定核函数的敏感度:
[0161] 步骤a2:统计在对程序代码中特定核函数(例如核函数A)中各种类型的指令进行错误注入的软错误模拟中,对应无差异类型的数量NMasked,差异可接受类型的数量Nacceptable,差异不可接受类型的数量Nunacceptable,以及,崩溃类型的数量NDetected;
[0162] 步骤b2:根据公式SDCs-Acceptance-Ratio=Nacceptable/(Nacceptable+Nunacceptable)*100%,计算差异可接受类型在差异发生类型中的发生比例。
[0163] 步骤c2:根据公式Aprroximate-Acceptance-Proportion=(Nacceptable+NMasked)/(NMasked+Nacceptable+Nunacceptable+NDetected)*100%,计算特定核函数对程序代码无影响的近似比例。
[0164] 假定在对程序代码中的核函数A进行了1000次的错误注入,得到的错误输出中,200次是Masked,300次是Detected,500次是SDCs,通过QoS threshold划分,这500次SDCs可分为400次SDCs-acceptable和100次SDCs-unacceptable。
[0165] 也即NMasked=200,NDetected=300,Nacceptable=400,Nunacceptable=100。
[0166] 则SDCs-Acceptance-Ratio=400/500*100%=80%。
[0167] Aprroximate-Acceptance-Proportion=(400+200)/1000*100%=60%。
[0168] 需要注意的是,上述都是对于软错误的敏感度,即,错误注入在任何指令类型都可以。
[0169] 三,指令类型级错误近似分析
[0170] 指令类型级错误近似分析侧重于进行如下分析:
[0171] 1)分析同一程序代码对不同的指令类型的敏感度;
[0172] 举例来讲,可分析同一程序代码对加法指令和乘法指令的敏感度。
[0173] 可先分别计算程序代码对加法指令的敏感度,以及同一程序代码对乘法指令的敏感度,再进行比对。
[0174] 具体的,可通过如下方式计算程序代码对特定指令类型(例如加法指令)的敏感度:
[0175] 步骤a3:统计在对程序代码中特定指令类型的指令进行错误注入的软错误模拟中,对应无差异类型的数量NMasked,差异可接受类型的数量Nacceptable,差异不可接受类型的数量Nunacceptable,以及,崩溃类型的数量NDetected;
[0176] 步骤b3:根据公式SDCs-Acceptance-Ratio=Nacceptable/(Nacceptable+Nunacceptable)*100%,计算差异可接受类型在差异发生类型中的发生比例。
[0177] 步骤c3:根据公式Aprroximate-Acceptance-Proportion=(Nacceptable+NMasked)/(NMasked+Nacceptable+Nunacceptable+NDetected)*100%,计算对程序代码无影响的近似比例。
[0178] 以特定指令类型为加法举例:
[0179] 假定在对程序代码中的加法指令进行了1000次的错误注入,得到的错误输出中,200次是Masked,300次是Detected,500次是SDCs,通过QoS threshold划分,这500次SDCs可分为400次SDCs-acceptable和100次SDCs-unacceptable。
[0180] 也即NMasked=200,NDetected=300,Nacceptable=400,Nunacceptable=100。
[0181] 则SDCs-Acceptance-Ratio=400/500*100%=80%。
[0182] Aprroximate-Acceptance-Proportion=(400+200)/1000*100%=60%。
[0183] 2)分析同一指令类型对不同程序代码的敏感度,或者说,分析不同的程序代码对同一指令类型的敏感度。
[0184] 具体的,可分别计算各程序代码对特定指令类型的敏感度,再进行比对。
[0185] 3)分析在同一程序代码中同一指令类型在不同核函数中的敏感度;
[0186] 以加法指令为例,可分别计算同一程序代码中,不同核函数对加法指令的敏感度,再进行比对。
[0187] 四,数据位级错误近似分析
[0188] 数据位级错误近似分析侧重于进行如下分析:
[0189] 1)分析同一程序代码对错误发生在不同的数据位的敏感度;
[0190] 举例来讲,可分析同一程序代码对高位和低位的敏感度。
[0191] 可先分别计算程序代码对高位的敏感度,以及同一程序代码对低位的敏感度,再进行比对。
[0192] 2)分析同一程序代码对不同错误类型的敏感度;
[0193] 这里的错误类型指有多少位发生比特翻转。例如,错误类型可包括单比特翻转,多比特翻转等。
[0194] 以分析同一程序代码对单比特翻转和双比特翻转的敏感度为例,可先分别计算程序代码对单比特翻转的敏感度,以及该程序代码对多比特翻转的敏感度,再进行比对。
[0195] 具体的,以单比特翻转为例,可通过如下方式分析程序代码对错误类型的敏感度:
[0196] 步骤a4:统计在对程度代码中各指令进行单比特翻转错误注入的软错误模拟中,对应无差异类型的数量NMasked,差异可接受类型的数量Nacceptable,差异不可接受类型的数量Nunacceptable,以及,崩溃类型的数量NDetected;
[0197] 步骤b4:根据公式SDCs-Acceptance-Ratio=Nacceptable/(Nacceptable+Nunacceptable)*100%,计算差异可接受类型在差异发生类型中的发生比例。
[0198] 步骤c4:根据公式Aprroximate-Acceptance-Proportion=(Nacceptable+NMasked)/(NMasked+Nacceptable+Nunacceptable+NDetected)*100%,计算单比特翻转对程序代码无影响的近似比例。
[0199] 假定在对程序代码中的指令进行了1000次的单比特错误注入,得到的错误输出中,200次是Masked,300次是Detected,500次是SDCs,通过QoSthreshold划分,这500次SDCs可分为400次SDCs-acceptable和100次SDCs-unacceptable。
[0200] 也即NMasked=200,NDetected=300,Nacceptable=400,Nunacceptable=100。
[0201] 则SDCs-Acceptance-Ratio=400/500*100%=80%。
[0202] Aprroximate-Acceptance-Proportion=(400+200)/1000*100%=60%。
[0203] 3)比对分析不同的程序代码对错误发生在不同的数据位的敏感度。
[0204] 假定程序代码a和程序代码b,可先计算程序代码a对高位的敏感度,以及程序代码a对低位的敏感度,程序代码b对高位的敏感度,以及程序代码b对低位的敏感度。
[0205] 对敏感度进行比较,可发现错误发生的数据位越高,越容易造成严重危害。
[0206] 可见,基于“近似特性”,本发明实施例进行了多次软错误模拟,将发生软错误后的错误输出结果,进行了归类。在归类过程中,根据错误输出结果与标准输出结果间的误差(差异)是否超过QoS(用户质量需求),将差异发生类型(SDC)的错误输出,近一步划分为差异可接受(SDCs-acceptable)类型和差异不可接受(SDCs-unacceptable)类型。这反映了程序可容忍一定范围的误差的近似特性,因此本发明实施例所进行的归类是近似归类。而基于近似归类所进行的可靠性分析,即为“可靠性近似分析”。可靠性近似分析有助于找出真正严重的错误,以此为依据设计保护策略可减少没必要的保护和开销。
[0207] 本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
[0208] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。