一种基于线形汇编指令差异性变换的DSP软错误检测方法技术

技术编号:13889152 阅读:42 留言:0更新日期:2016-10-24 03:41
本发明专利技术公开了一种基于线形汇编指令差异性变换的DSP软错误检测方法,目的是解决现有DSP软错误检测方法性能开销大的问题。技术方案是将程序划分为无存基本块,构建程序控制流图,识别出循环,筛选出可编排软件流水的循环;对程序进行加固,为程序添加错误检测指令,采用指令差异性变换方法对部分指令进行等价性变换,对其余指令进行复算,并在存储指令及跳转指令前插入检测指令,利用DSP指令条件执行的特点及等价变换方法优化检测指令,针对可编排软件流水的循环采用延迟错误处理方法降低加固带来的性能开销;执行加固后的程序,检测发生在运行时的软错误。本发明专利技术是一种纯软件的DSP加固方法,对数据错误的检测率高,且加固的性能开销低。

【技术实现步骤摘要】

本专利技术涉及一种针对数字信号处理器DSP(Digital Signal Processor)程序的错误检测方法,尤其是针对空间高能粒子辐射引发的软错误进行检测的方法。
技术介绍
近年来,随着集成电路工艺技术的发展,处理器设计人员采用越来越高的时钟频率、越来越低的电压水平以及越来越小的工艺尺寸。这些技术在带来更高性能与更低功耗的同时,也使得处理器对瞬态故障更加敏感,威胁到程序执行的正确性。这些瞬态故障通常是由外部环境中高能粒子辐射和电压扰动、电磁干扰等诱发。与永久性故障导致的硬件错误相比,这种错误具有瞬态、发生时间和位置随机、可恢复等特点,因此被称为“软错误”。工程人员提出了很多技术来处理软错误的问题,这些技术主要可分为两类:硬件技术和软件技术。硬件技术主要采用体系结构冗余的思想实现容错。例如,一些存储结构比如缓存和内存包含ECC(Error Correcting Code),可以用来检测甚至改正错误,此外较为常用的错误校验码技术还包括EDAC,它们是通过设置冗余的二进制位来实现的。也可以通过设置专门的硬件检测电路实现容错,如采用专用处理器来检测总线上数据正确性的看门狗技术WatchDog。在一些可靠性要求较高的系统中,TMR(Triple-Modular Redundancy)应用比较广泛,它通过三个同时工作的部件以投票的形式实现错误的检测和恢复,是部件级别的冗余。硬件容错技术思想简单,可以显著的提高系统的可靠性,但同时会在体积、功耗等方面引入巨大的硬件开销,这在很多嵌入式系统的设计中是无法接受的。为了缓解硬件容错技术硬件开销大的问题,同时也是对硬件容错技术更好的完善和拓展,软件容错技术成为了研究热点。软件容错技术,也称为软加固技术。计算机发展的历史表明,很多原本用硬件实现的方法同样可以用软件实现。随着处理器性能的极大提升,在满足时间约束的前提下,通过程序复算牺牲部分性能来换取高可靠性的软件容错技术展现出了很强的吸引力。软件容错技术包括错误检测、定位、回复等技术,其中错误检测是错误定位和恢复
的基础。空间辐射环境中的单粒子效应可能改变寄存器、存储器、Cache中存储的数据、运算单元执行结果,导致执行结果出错,这一类软错误属于数据错误。数据错误主要通过指令复算的方式实现错误检测,其检测原理如下:由于软错误具有瞬时性、偶发性和随机性等特点,指令同一时间在不同功能部件上多次执行,或者不同时间在相同功能部件上多次执行的过程中,发生相同错误的概率非常低,因此将这多次执行的结果进行比较,若相符则认为指令执行结果正确,否则说明至少在一次执行过程中发生了软错误。通过指令复算,一般可以检测出瞬时故障导致的软错误。2002年《IEEE Transactions on Reliability》第51卷第1期发表的作者为Stanford大学CRC实验室的N.Oh、P.P.Shirvani、E.J.McCluskey的论文“Error detection by duplicated instructions in super-scalar processors”提出的EDDI方法是常用的数据流检错方法。EDDI通过复制程序指令来实现冗余,进而通过插入点比较来实现容错。故障注入实验表明:使用EDDI后,程序的平均出错概率从20%下降到1.5%以下。EDDI方法的基本步骤是:第一步,将程序划分为N个无存基本块SBB1,SBB2,…SBBN的序列,N为正整数,无存基本块是程序中能够顺序执行的指令序列的集合,这组指令序列只有最后一条指令可以是存储指令或程序控制指令,这组指令只有一个入口和一个出口,入口就是第一条指令,出口就是最后一条指令。划分无存基本块序列的具体步骤是:1.1确定程序的每个无存基本块的入口指令,它们是:●程序的第一条指令;或者●存储指令、条件转移指令或无条件转移指令跳转到的指令;或者●紧跟在存储指令、转移指令或函数调用后面的指令;或者●被调用函数的第一条指令。1.2对每个入口指令,确定其对应的出口指令,它们是:●入口指令后除当前入口指令外的第一个入口指令前的指令;或者●入口指令后的第一个存储指令、转移指令或函数调用指令;或者●程序的结束指令。1.3分别将每个入口指令和其对应的出口指令之间的程序块划分为一个无存基本块。第二步,对程序进行加固,即为每个无存基本块添加合适的复算指令或检测指令,复算指令与原指令具有相同的指令码,复算指令中的操作数为原指令中操作数的副本,具体做法为:2.1令i1=1。2.2在SBBi1除最后一条指令外的每一条指令后面插入对应的复算指令。2.3若SBBi1最后一条指令不为跳转指令或存储指令,则在这条指令后面插入对应的复算指令,转2.6。2.4若SBBi1最后一条指令为存储指令,则在这条指令前插入第一检测指令(第一检测指令的功能是检测存储指令的数据、内存地址、偏移量、指令执行条件等变量原始数据与副本数据是否一致,不一致则表示检测到错误),转2.6。2.5若SBBi1最后一条指令为跳转指令,则在这条指令前插入第二检测指令(第二检测指令的功能是检测跳转指令的指令执行条件、内存地址等变量原始数据与副本数据是否一致,不一致则表示检测到错误),转2.6。2.6i1=i1+1。2.7判断i1是否大于N,若是则执行第三步,否则转第2.2步。第三步,执行加固后的程序,检测发生在运行时的软错误,具体步骤为:3.1若加固后的程序执行过程中没有发生单粒子翻转等原因导致的软错误,则原指令和副本指令具有相同的执行结果,加固后的程序不会检测到错误,加固后的程序正常执行与加固前的执行结果相同,转第四步。3.2若加固后的程序执行过程中发生单粒子翻转等原因导致的软错误,使得原指令与副本指令执行结果不同,则加固后的程序检测到此软错误,转第四步。第四步,结束。CRC实验室在EDDI基础上引入数据差异性概念(Data Diversity),于2002年在《IEEE Transactions on Computer》第51卷第2期发表论文“ED4I:Error Detection by Diverse Data and Duplicated Instructions”提出ED4I方法。ED4I与EDDI方法在步骤上基本相同,但其中的SI不再是MI的单纯复制,而是将MI中的输入数据乘以一个差异因子k作为SI中的输入数据,若输出数据依然保持k倍的关系,则认为指令执行过程中没有发生错误。由于数据差异因子的引入,使得ED4I可以检测一部分持续性故障和永久性故障。数据差异因子的选择对ED4I方法的故障检测能力影响很大,最优k值也难以求出。另外,数据都乘以k倍可能会导致数据溢出的问题。原文章建议将k值选为-1,即将所有数据求反,但论证结果表明很多时候-1并不是最佳差异因子。虽然ED4I方法在EDDI方法的基础上进一步提高了错误检测率,但也引入了更多的性能开销。2008年国防科技大学李建立的硕士学位论文《空间辐射环境下软件实现的硬件故障检测技术研究》中第三章提出了基于逆向恢复的故障检测方法EDCC(Error Detection by
Converse Computing),思想也是对SI做差异性变换,以提高软错误本文档来自技高网
...

【技术保护点】
一种基于线形汇编指令差异性变换的DSP软错误检测方法,其特征在于包括以下步骤:第一步,将程序划分为N个无存基本块SBB1,SBB2,…SBBN的序列,N为正整数,无存基本块是程序中能够顺序执行的指令序列的集合,这组指令序列只有最后一条指令可以是存储指令或程序控制指令,这组指令只有一个入口和一个出口,入口就是第一条指令,出口就是最后一条指令;第二步,基于无存基本块序列SBB1,SBB2,…SBBN,构造程序控制流图G(V,E),V为节点集合,取值为V1,V2,…VM,V1为程序的入口节点,VM为程序的出口节点,E为边集合;第三步,基于G(V,E),找到程序中所有可被编译优化的循环,并为这些循环的无存基本块做标识;可被编译优化的循环是指除了循环的第一个无存基本块外没有循环外部到其内部的控制流转移,且除了循环的最后一个无存基本块外没有循环内部到外部的控制流转移,体现在控制流图上即循环除头节点具有多个入度外,其余节点入度为1,除尾节点具有多出度外,其余节点出度为1;这一步的具体过程为:3.1从V1开始采用深度优先搜索遍历G(V,E),得到一个树形结构T,T的叶节点是程序执行结束的节点或者是G(V,E)的深度优先搜索已经遍历过的节点;3.2遍历树形结构T,得到T中所有叶节点L1,L2,…,LN1,N1为T中叶节点的个数;3.3从每个叶节点开始,向上搜索,若一个叶节点和它的某个祖先结点相同,则找到该祖先节点到此叶节点的循环,将找到的循环存放在集合LOOP中;3.4从集合LOOP中筛选出可被编译优化的循环,并为这些循环的无存基本块做标识;可被编译优化的循环是指在G(V,E)中除头节点具有多个入度外,其余节点入度为1,除尾节点具有多出度外,其余节点出度为1的循环;具体步骤为:3.4.1判断LOOP是否为空集,若是则执行第四步,否则执行第3.4.2步;3.4.2选取LOOP中的一个循环li,LOOP=LOOP‑{li};3.4.3判断li是否可被编译优化,若不可则转第3.4.1步,若可被编译优化,执行3.4.4步;3.4.4为每个属于li的无存基本块做标识L,且为li的第一个和最后一个无存基本块分别做标识H和T,转3.4.1步;第四步,对程序进行加固,即为无存基本块序列SBB1,SBB2,…SBBN添加复算指令和检测指令,添加的检测指令都采用优化检测指令方法进行优化,对于可被编译优化的循环采用延迟错误处理方法降低加固带来的性能开销;第四步的具体过程为:4.1令i6=1;4.2对SBBi6除最后一条指令外的所有源程序指令MI,生成相应的副本指令SI插入到对应的MI指令后面,采用指令等价变换方法对指令进行指令差异性复算,用执行时间短的指令替换执行时间长者,用可分配功能单元多的指令替换可分配功能单元少的指令;4.3判断SBBi6是否具有标志L,若没有,执行第4.4步,若具有标志L,执行第4.5步;4.4SBBi6不具有标志L,表示此基本块所在的循环无法经编译器排出软件流水线,按以下方法添加复算指令,其具体过程为:4.4.1判断SBBi6最后一条指令的类型,若为存储指令,转4.4.3,若为跳转指令,则转4.4.4,既不是存储指令又不是跳转指令,转4.4.2;4.4.2在这条指令后插入复算指令,复算指令与这条指令具有相同的指令码,复算指令中的操作数为原指令操作数的副本,转4.6;4.4.3在这条指令前插入第三检测指令,第三检测指令是由一组异或指令和一条跳转指令组成的指令,其功能是使用异或指令XOR检测存储指令的数据、内存地址、偏移量、指令执行条件等变量的原始数据版本与副本数据版本的一致性,一致时程序正常继续执行,当发现不一致时,由跳转指令转到错误处理函数;令ERR为错误处理函数,转4.6;4.4.4在这条指令前插入第四检测指令,第四检测指令是由一组异或指令和一条跳转指令组成的指令,其功能是使用异或指令XOR检测跳转的地址、指令的执行条件等变量的原始数据版本与副本数据版本的一致性,一致时程序正常继续执行,当发现不一致时,由跳转指令转到错误处理函数;转4.6;4.5此时SBBi6具有标志L,即此基本块所在的循环可以经编译器排出软件流水线,则采用延迟错误处理方法,使用一个寄存器ERROR记录循环内部检测的错误,并将这些错误延迟到循环结束再处理;这一步的具体过程为:4.5.1若SBBi6还具有标志H,即SBBi6为循环的第一个无存基本块,则在SBBi6第一条语句之前插入循环错误信息寄存器初始化语句“ZERO ERROR”,转4.5.2;若SBBi6不具有标志H,则直接转4.5.2;4.5.2若SBBi6还具有标志T,即SBBi6为循环的最后一个无存基本块,则在SBBi6最后一条语句之后插入调用错误处理例程语句“[ERROR]B ERR”,转4.5.3;若SBBi...

【技术特征摘要】
1.一种基于线形汇编指令差异性变换的DSP软错误检测方法,其特征在于包括以下步骤:第一步,将程序划分为N个无存基本块SBB1,SBB2,…SBBN的序列,N为正整数,无存基本块是程序中能够顺序执行的指令序列的集合,这组指令序列只有最后一条指令可以是存储指令或程序控制指令,这组指令只有一个入口和一个出口,入口就是第一条指令,出口就是最后一条指令;第二步,基于无存基本块序列SBB1,SBB2,…SBBN,构造程序控制流图G(V,E),V为节点集合,取值为V1,V2,…VM,V1为程序的入口节点,VM为程序的出口节点,E为边集合;第三步,基于G(V,E),找到程序中所有可被编译优化的循环,并为这些循环的无存基本块做标识;可被编译优化的循环是指除了循环的第一个无存基本块外没有循环外部到其内部的控制流转移,且除了循环的最后一个无存基本块外没有循环内部到外部的控制流转移,体现在控制流图上即循环除头节点具有多个入度外...

【专利技术属性】
技术研发人员:谭庆平邵则铭徐建军宁洪姜晶菲孟宪凯张南邓锦洲曾平张浩宇
申请(专利权)人:中国人民解放军国防科学技术大学
类型:发明
国别省市:湖南;43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1