[发明专利]一种基于线形汇编指令差异性变换的DSP软错误检测方法有效
申请号: | 201610290829.9 | 申请日: | 2016-05-04 |
公开(公告)号: | CN106021040B | 公开(公告)日: | 2019-07-16 |
发明(设计)人: | 谭庆平;邵则铭;徐建军;宁洪;姜晶菲;孟宪凯;张南;邓锦洲;曾平;张浩宇 | 申请(专利权)人: | 中国人民解放军国防科学技术大学 |
主分类号: | G06F11/22 | 分类号: | G06F11/22 |
代理公司: | 湖南兆弘专利事务所(普通合伙) 43008 | 代理人: | 赵洪 |
地址: | 410073 湖南省长沙市砚瓦池正*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于线形汇编指令差异性变换的DSP软错误检测方法,目的是解决现有DSP软错误检测方法性能开销大的问题。技术方案是将程序划分为无存基本块,构建程序控制流图,识别出循环,筛选出可编排软件流水的循环;对程序进行加固,为程序添加错误检测指令,采用指令差异性变换方法对部分指令进行等价性变换,对其余指令进行复算,并在存储指令及跳转指令前插入检测指令,利用DSP指令条件执行的特点及等价变换方法优化检测指令,针对可编排软件流水的循环采用延迟错误处理方法降低加固带来的性能开销;执行加固后的程序,检测发生在运行时的软错误。本发明是一种纯软件的DSP加固方法,对数据错误的检测率高,且加固的性能开销低。 | ||
搜索关键词: | 一种 基于 线形 汇编 指令 差异性 变换 dsp 错误 检测 方法 | ||
【主权项】:
1.一种基于线形汇编指令差异性变换的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.4,SBBi6不具有标志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;若SBBi6不具有标志T,则直接转4.5.3;4.5.3,判断SBBi6最后一条指令的类型,若为存储指令,则转4.5.5;若为跳转指令,则转4.5.6,若既不是存储指令也不是跳转指令,转4.5.4;4.5.4,为这条指令生成副本指令,副本指令和原指令具有相同的指令码,副本指令中的操作数为原指令中操作数的副本,转4.6;4.5.5,在这条指令前插入第五检测指令,第五检测指令是由一组异或指令、一条错误信息记录指令和一条存储条件无效化指令组成的指令,其功能是使用异或指令XOR检测存储指令的数据、内存地址、偏移量、指令执行条件等变量的原始数据版本与副本数据版本的一致性,一致时程序正常继续执行,当发现不一致时,采用延迟错误处理方法将检测到的错误记录到ERROR寄存器中,并在循环结束的位置插入循环错误判断的指令,根据ERROR寄存器的值进行错误处理;在检测到错误的情况下,为了防止错误向内存传播,使该存储指令的执行条件为假;转4.6;4.5.6,在这条指令前插入第六检测语句,第六检测指令是由一组异或指令、一条错误信息记录指令和一条循环计数器清零指令组成的指令,其功能是使用异或指令XOR检测跳转指令的地址、指令执行条件等变量的原始数据版本与副本数据版本的一致性,一致时程序正常继续执行,当发现不一致时,采用延迟错误处理方法将检测到的错误记录到ERROR寄存器中,并在循环结束的位置插入循环错误判断的指令,根据ERROR寄存器的值进行错误处理;在检测到错误的情况下,为了降低错误处理延迟,将循环计数器清零从而结束循环;转4.6;4.6,i6=i6+1;4.7,判断i6是否大于N,若是则执行第五步,否则执行第4.2步;第五步,执行完成了加固的线形汇编程序,检测发生在运行时的软错误,具体步骤为:5.1,判断程序是否检测出了软错误,若是则执行第5.3步,否则执行第5.2步;5.2,程序正常执行,转5.7;5.3,判断错误被检测出的位置,若错误发生在可被编译优化的循环外,则执行第5.4步,否则执行第5.5步;5.4,错误发生之后的检测指令将此错误检测出,转5.6;5.5,循环内的检测指令将错误记录到ERROR寄存器中,并且跳过循环内的存储指令,清零循环计数器,提前终止循环,转5.6;5.6,进行错误处理;5.7,结束。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科学技术大学,未经中国人民解放军国防科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201610290829.9/,转载请声明来源钻瓜专利网。
- 上一篇:照明灯具及其盖体组件
- 下一篇:一种方便调节的LED灯