一种利用流水线气泡实现指令级冗余的容软错设计方法

未命名 09-10 阅读:102 评论:0


1.本发明涉及处理器可靠性设计技术领域,具体涉及一种利用流水线气泡实现指令级冗余的容软错策略与设计方法。


背景技术:

2.随着半导体器件尺寸的不断缩小、近阈值计算的不断发展,软错误已然成为设计和制造处理器时需要考量的一个关键问题。软错误通常由高能粒子(如宇宙射线)和来自于封装材料中的阿尔法粒子导致,其本质是短暂的故障,不会永久损坏电路,也不会在消失后复发。但软错误可能会导致处理器内部的程序运行故障或是产生不可察觉的错误结果,这对于可靠性要求高的处理器芯片来说是不可接受的,因此有效的可靠性设计是处理器设计的一个重要环节。
3.添加处理器的系统冗余是一种常见的可靠性设计策略,而其中指令级冗余是一种有效的系统冗余方案。指令级冗余通过复制指令的执行,进行细粒度的对比检测,可以实现近乎零延时的软错误检测。现有的指令级冗余实现方案大多通过编译器进行指令复制并插入检查指令来实现,或在多核处理器、同步多线程处理器上利用不同的硬件线程运行相同程序,使用硬件模块对比指令结果来实现。编译器辅助的方案不需要硬件层面的改动,降低了设计成本,但由于所有指令在同一流水线中执行,程序性能将极大下降。冗余线程方案则利用线程级并行,使得程序性能开销小,但只适用于支持多线程的处理器中,这可能会带来大量的非必要的硬件资源或面积开销。


技术实现要素:

4.技术问题:本发明的目的在于提出一种利用流水线气泡实现指令级冗余的容软错策略与设计方法,用以解决现有指令级冗余方案存在的性能开销大、硬件不适配、资源面积开销大的问题。本发明面向广泛的处理器架构,不局限于单一指令集架构,是一种软件透明的,完全由硬件机制实现的内核架构级容软错设计。通过在内核中增加调度、检测、纠错机制,实现了单一流水线内的指令级冗余与软错误恢复。为处理器的可靠性设计,提供了一种适用性更广,且硬件资源、性能开销都更小、更加平衡的设计方案。
5.技术方案:为了解决上述技术问题,本发明提出如下技术方案:
6.一种利用流水线气泡实现指令级冗余的容软错设计方法,通过硬件的调度机制使得每条指令在同一条流水线中执行两次,改变了原有指令执行流。由于首次执行与冗余执行都是完整的程序指令流,并不存在真正的依赖关系,两个执行流的切换极大程度消除了原有的流水线气泡。在核内对比两次执行的结果以检测是否发生软错误。当软错误被检测到时,调度机制能够清空流水线并对错误指令进行第三次执行,并通过多数表决,选出正确的结果。该方法包括以下步骤:
7.步骤s1、在需要加固的处理器内核架构中添加指令调度模块和检查缓冲模块。
8.步骤s2、处理器内核对指令进行首次执行,具体包括如下步骤:
9.步骤s201、指令调度模块初始为首次执行状态,为每一条进入流水线的指令添加首次执行标志。
10.步骤s202、带有首次执行标志的指令在流水线中正常执行,但其结果并不会被写回,而是会被保存在检查缓冲中。
11.步骤s203、不断重复步骤s2,直到发生步骤s3。
12.步骤s3、当处理器在指令的首次执行过程中,译码到气泡诱发指令或是此时检查缓冲模块被填满,内核开始指令的冗余执行,冗余执行的第一条指令为检查缓冲中保存的最早指令。
13.步骤s4、处理器内核对指令进行冗余执行,具体包括如下步骤:
14.步骤s401、指令调度模块切换为冗余执行状态,为每一条进入流水线的指令添加冗余执行标志。
15.步骤s402、带有冗余执行标志的指令在流水线中正常执行,其结果在写回前需要与检查缓冲中保存的首次执行结果进行比较。
16.步骤s403、若无差异,清除该指令在检查缓冲中保存的信息,将指令结果写回。重复步骤s4,当比较出现差异时,进入步骤s5;当检查缓冲为空时,进入步骤s7;
17.步骤s5、若有差异,即错误被检测出来时,清空检查缓冲内保存的其他指令信息,只保留该错误指令的两次执行结果。流水线上的后续指令也被清除,指令调度模块开始纠错,向错误指令的内存地址重新取指,进行第三次执行。
18.步骤s6、检查缓冲模块对三次执行的结果进行多数表决,选出正确的结果。清除该错误指令在检查缓冲中保存的结果,将正确的结果写回。
19.步骤s7、当冗余执行到检查缓冲为空时,指令调度模块切换回首次执行状态,回到步骤s2,直到所有指令完成上述步骤。
20.进一步的,所述的容软错策略可适用于广泛的处理器内核架构设计中,不局限于特定的指令集架构或是流水线结构。
21.进一步的,所述的流水线气泡是由于流水线中指令在数据、结构、控制上的相关性导致的,这可以通过增大相关指令间的距离来避免。由于首次指令流与冗余指令流都是完整的原程序指令流,它们之间是独立不相关的。通过在同一指令流的两条相关指令间插入另一指令流可以有效地增大相关指令之间的距离,从而消除原有的气泡。
22.进一步的,所述的指令调度模块主要负责对内核执行指令流的调度控制,需要实现无气泡的执行流切换,即前一条首次执行指令与后一条冗余执行指令在流水线中是连贯的,这才能保证切换机制不引入新的气泡。该指令调度模块可以是一个独立的硬件模块或是与其他模块相结合的控制逻辑。
23.进一步的,所述的检查缓冲模块主要负责对首次执行指令信息的保存、检查与纠错。检查缓冲模块内可以通过fifo、ram等存储结构保存指令信息,指令信息包括了指令类型与执行结果等。内部存储结构的大小需要根据气泡频率、气泡大小、资源开销等多方面因素定义。同样的,该检查缓冲模块可以是一个独立的硬件模块或是与其他模块相结合的控制逻辑。
24.进一步的,所述的气泡诱发指令指的是处理器指令集架构中存在的易于后续指令形成相关性,并导致流水线气泡的指令。通常,气泡诱发指令可以包括控制类指令和内存访
问指令,但不限于此,具体需要根据实际的指令集架构或处理器架构而定。
25.进一步的,所述的指令流切换策略可能会导致不同流的指令间产生一些虚假的相关性,这需要通过修改或增加原内核流水线中的指令相关性控制逻辑来避免。
26.进一步的,所述的首次执行流将指令结果保存在检查缓冲模块中,这导致执行流的最新值不会被更新到寄存器,而是保存在检查缓冲模块中。通过修改或增加原内核控制逻辑使得后续指令可以从检查缓冲模块中换取最新值。
27.有益效果:本发明的是优点在于:
28.1、本发明可适用于广泛的处理器架构,不局限于单一指令集架构,可在单一内核中实现,甚至扩展到多核架构中,具有很高的适用性。如步骤s1所述,该方案只需在单一内核中增加两个模块即可实现,并不局限于某一特殊的硬件或指令集架构。
29.2、本发明能够实现软错误的检测与恢复,且不需要软件层面的支持,降低了处理器软件开发难度。从技术方案中可以看出,所述所有步骤都不涉及软件层面的改动,该方法固化的处理器可以直接运行未改动程序,并提供容软错能力。
30.3、本发明以远远低于传统容错设计中通过多核或硬件多线程机制实现容软错设计的资源开销,实现了软错误的检测与恢复。如步骤s1所述,该方案只需在单一内核中增加两个模块即可实现,这种资源远远小于多核或多线程机制带来的资源开销。
31.4、本发明利用了处理器运行时固有的流水线气泡,大大降低了指令级冗余的性能开销。如步骤s3所示,当译码到气泡诱发指令后,若流水线顺序执行后续指令,会产生流水线气泡。通过及时切换到冗余执行,消除了后续指令与该气泡诱发指令的相关性,避免了原有气泡,从而降低了性能开销。
附图说明
32.图1是本发明提出一种利用流水线气泡实现指令级冗余的容软错设计方法的流程示意图。
33.图2是本发明提出一种利用流水线气泡实现指令级冗余的容软错设计方法的处理器执行指令流示意图。
34.图3是本发明提出一种利用流水线气泡实现指令级冗余的容软错设计方法的处理器执行流切换时机示意图。
35.图4是本发明提出一种利用流水线气泡实现指令级冗余的容软错设计方法的一个实施例对应的内核架构示意图。
36.图5是本发明提出一种利用流水线气泡实现指令级冗余的容软错设计方法的一个实施例对应的指令调度模块示意图。
37.图6是本发明提出一种利用流水线气泡实现指令级冗余的容软错设计方法的一个实施例对应的检查缓冲模块示意图。
具体实施方式
38.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员
在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
39.实施例1
40.参见图1-图6,本实施提供一种利用流水线气泡实现指令级冗余的容软错设计方法,具体包括如下步骤:
41.步骤a、在需要加固的处理器内核架构中添加指令调度模块和检查缓冲模块。
42.具体的说,本专利所述的容软错设计可适用于广泛的处理器内核架构设计中,不局限于特定的指令集架构或是流水线结构。在本实施例中,需要加固的处理器内核选择的是开源的基于risc-v指令集的ri5cy内核,它是一款拥有四级流水线的顺序单发射处理器内核,四级流水线分别为取指if、译码id、执行ex、写回wb,其结构可参见图4。
43.步骤b、当处理器运行应用程序时,内核对指令的首次执行,具体包括如下步骤:
44.步骤b1、指令调度模块初始为首次执行状态,为每一条进入流水线的指令添加首次执行标志。
45.具体的说,执行标志为1bit信号,信号为0时代表首次执行,信号为1时代表冗余执行。执行标志会跟随流水线传递,各级流水线可知晓当前指令的执行状态。
46.步骤b2、带有首次执行标志的指令在流水线中正常执行,但其结果并不会被写回,而是会被保存在检查缓冲中。
47.具体的说,当带有首次执行标志的指令进入wb阶段,wb阶段判断到当前指令处于首次执行,则该指令的结果不会被写回寄存器,而是保存在检查缓冲中。
48.步骤b3、不断重复步骤b,直到发生步骤c。
49.步骤c、当处理器在指令的首次执行过程中,译码到气泡诱发指令或是此时检查缓冲模块被填满,内核开始指令的冗余执行,冗余执行的第一条指令为检查缓冲中保存的最早指令。
50.具体的说,该容错策略在两种情况下将首次执行切换到冗余执行。第一种为id阶段译码到气泡诱发指令;第二种为检查缓冲内的fifo无法保存新的首次执行指令。这两种情况下,指令调度模块都将冗余执行的指令送入id阶段。
51.步骤d、当处理器运行应用程序时,内核对指令的冗余执行,具体包括如下步骤:
52.步骤d1、指令调度模块切换为冗余执行状态,为每一条进入流水线的指令添加冗余执行标志。
53.步骤d2、带有冗余执行标志的指令在流水线中正常执行,其结果在写回前需要与检查缓冲中保存的首次执行结果进行比较。
54.步骤d3、若无差异,清除该指令在检查缓冲中保存的结果,将指令结果写回。重复步骤d,当比较出现差异时,进入步骤e;当检查缓冲为空时,进入步骤g;
55.步骤e、若有差异,即错误被检测出来时,清空检查缓冲内保存的其他指令信息,只保留该错误指令的两次执行结果。流水线上的后续指令也被清除,指令调度模块开始纠错,向错误指令内存地址重新取指,进行第三次执行。
56.步骤f、检查缓冲模块对三次执行的结果进行多数表决,可以选出正确的结果。清除该错误指令在检查缓冲中保存的结果,将正确的结果写回。
57.步骤g、当冗余执行到检查缓冲为空时,指令调度模块切换回首次执行状态,回到步骤b,直到所有指令完成上述步骤。
58.具体的说,在本实施例中,流水线气泡是由于流水线中指令在数据、结构、控制上的相关性导致的,这可以通过增大相关指令间的距离来避免。由于首次指令流与冗余指令流都是完整的原程序指令流,如图2所示,它们之间是独立不相关的。通过在同一指令流的两条相关指令间插入另一指令流可以有效地增大相关指令之间的距离,从而消除原有的气泡,如图3所示。
59.具体的说,在本实施例中,通过对ri5cy内核运行测试程序的trace进行分析,得知流水线气泡普遍存在于控制指令与内存访问指令之后,因此将这两类指令定义为气泡诱发指令。
60.具体的说,在本实施例中,指令调度模块主要负责对内核执行指令流的调度控制,需要实现无气泡的执行流切换,即前一条首次执行指令与后一条冗余执行指令在流水线中是连贯的。为此,如图5所示,指令调度模块内部实现了一个取指fifo,能够保存送入流水线中首次执行的指令。当执行状态切换时,可以将取指fifo中保存的指令直接送入id阶段,避免了再次取指带来的气泡。
61.更具体的说,在本实施例中,ri5cy内核运行测试程序过程中有90%以上的流水线气泡间的距离小于8条指令。综合硬件资源与气泡距离的考量,取指fifo设置为8个条目,能够保存最多八条指令。
62.具体的说,在本实施例中,检查缓冲模块主要负责对首次执行指令结果的保存、检查与纠错。检查缓冲模块内实现了一个fifo结构保存指令结果,指令信息包括了指令类型与执行结果等,如图6所示。这个fifo结构与取指fifo一样有8个条目,能够保证所有取指fifo中的指令首次执行信息被保存在检查缓冲fifo中。
63.具体的说,在本实施例中,指令流切换策略可能会导致首次流和冗余流的指令间产生一些虚假的相关性,如图4所示,原内核的id阶段被修改以消除这种虚假的相关性。
64.具体的说,在本实施例中,首次执行流将指令结果保存在检查缓冲模块中,这导致执行流的最新值不会被更新到寄存器。如图4所示,在内核架构中添加了检查缓冲索引表实现对检查缓冲fifo保存结果的索引。
65.具体的说,在本实施例中,步骤e具体包括如下步骤:
66.步骤e1、错误被检测出来后,在核内产生一个错误标志信号,如图6所示。
67.步骤e2、检查缓冲模块检测到错误标志后,将内部保存的后续指令结果清除,并将该错误指令的两个不同结果保存。
68.步骤e3、流水线检测到错误标志后,将各级流水线中的指令清除,等待纠错执行。
69.步骤e4、指令调度模块检测到错误标志后,向错误指令的内存地址进行取指,准备纠错执行。
70.综上所述,本实施例展示的一种利用流水线气泡实现指令级冗余的容软错设计方法,相比现有技术,具有以下效益:
71.1、该方案可适用于广泛的处理器架构,不局限于单一指令集架构,可在单一内核中实现,甚至扩展到多核架构中,具有很高的适用性。
72.2、该方案能够实现软错误的检测与恢复,且不需要软件层面的支持,降低了处理器软件开发难度。
73.3、该方案以远低于传统硬件冗余设计方案的资源开销,实现了软错误的检测与恢
复。
74.4、该方案利用了处理器运行时固有的流水线气泡,大大降低了指令级冗余的性能开销。
75.本发明未详述之处,均为本领域技术人员的公知技术。
76.以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。

技术特征:
1.一种利用流水线气泡实现指令级冗余的容软错设计方法,其特征在于,所述方法包括以下步骤:步骤s1、在需要加固的处理器内核架构中添加指令调度模块和检查缓冲模块;步骤s2、处理器内核对程序的指令流进行首次执行,具体包括如下步骤:步骤s201、指令调度模块初始为首次执行状态,为每一条进入流水线的指令添加首次执行标志;步骤s202、带有首次执行标志的指令在流水线中正常执行,但其结果并不会被写回,而是会被保存在检查缓冲模块中;步骤s203、不断重复步骤s2,直到发生步骤s3;步骤s3、当处理器内核在指令的首次执行过程中,译码到气泡诱发指令或是此时检查缓冲模块被填满,指令调度模块切换内核到指令冗余执行,冗余执行的第一条指令为检查缓冲中保存的最早指令;步骤s4、内核对指令的冗余执行,具体包括如下步骤:步骤s401、指令调度模块切换为冗余执行状态,为每一条进入流水线的指令添加冗余执行标志;步骤s402、带有冗余执行标志的指令在流水线中正常执行,其结果在写回前需要与检查缓冲中保存的首次执行结果进行比较;步骤s403、若无差异,清除该指令在检查缓冲中保存的信息,将指令结果写回;重复步骤s4,当比较出现差异时,进入步骤s5;当检查缓冲为空时,进入步骤s7;步骤s5、若有差异,即错误被检测出来时,清空检查缓冲内保存的其他指令信息,只保留该错误指令的两次执行结果;流水线上的后续指令也被清除,指令调度模块开始纠错,从错误指令的内存地址重新取指,进行第三次执行;步骤s6、检查缓冲模块对三次执行的结果进行多数表决,选出正确的结果;清除该错误指令在检查缓冲中保存的结果,将正确的结果写回;步骤s7、当冗余执行到检查缓冲为空时,指令调度模块切换回首次执行状态,回到步骤s2,直到所有指令完成上述步骤。2.根据权利要求1所述的利用流水线气泡实现指令级冗余的容软错设计方法,其特征在于,所述的流水线气泡是由于流水线中指令在数据、结构、控制上的相关性导致的,通过增大相关指令间的距离来避免;由于首次指令流与冗余指令流都是完整的原程序指令流,它们之间是独立不相关的;通过在同一指令流的两条相关指令间插入另一指令流增大相关指令之间的距离,从而消除原有的气泡。3.根据权利要求1所述的利用流水线气泡实现指令级冗余的容软错设计方法,其特征在于,所述指令调度模块负责对内核执行指令流的调度控制,需要实现无气泡的执行流切换,即前一条首次执行指令与后一条冗余执行指令在流水线中是连贯的;所述指令调度模块是一个独立的硬件模块或是与其他模块相结合的控制逻辑。4.根据权利要求1所述的利用流水线气泡实现指令级冗余的容软错设计方法,其特征在于,所述检查缓冲模块负责对首次执行指令信息的保存、检查与纠错;检查缓冲模块内通过fifo、ram存储结构保存指令信息,包括指令类型与执行结果;内部存储结构的大小需要根据气泡频率、气泡大小、资源开销多方面因素定义;所述检查缓冲模块是一个独立的硬件
模块或是与其他模块相结合的控制逻辑。5.根据权利要求1所述的利用流水线气泡实现指令级冗余的容软错设计方法,其特征在于,所述气泡诱发指令指在处理器架构中存在的易于与后续指令形成相关性,并导致流水线气泡的指令;气泡诱发指令包括控制类指令和内存访问指令。6.根据权利要求1所述的利用流水线气泡实现指令级冗余的容软错设计方法,其特征在于,指令流切换会导致不同流的指令间产生一些虚假的相关性,通过修改或增加原内核流水线中的指令相关性控制逻辑来避免。7.根据权利要求1所述的利用流水线气泡实现指令级冗余的容软错设计方法,其特征在于,首次执行流将指令结果保存在检查缓冲模块中,这导致执行流的最新值不会被更新到寄存器;通过修改或增加原内核控制逻辑使得后续指令从检查缓冲模块中读取最新值。

技术总结
本发明公开了一种利用流水线气泡实现指令级冗余的容软错设计方法。包括:在处理器内核中增加指令调度模块和检查缓冲模块;处理器运行时,指令调度模块将指令标记为首次执行或冗余执行,两次送入流水线中。首次执行结果保存在检查缓冲中,不进行写回;冗余执行结果与检查缓冲中的首次执行结果比较,若相同,则将该正确结果写回并移出检查缓冲。若不同,指令调度模块将该指令第三次送入流水线进行纠错执行,通过三个结果的多数表决选出正确结果并写回;当检查缓冲为空时,处理器对后续指令进行首次执行,并不断循环上述操作。本发明能够以极小的硬件资源开销,大幅提高处理器的容软错能力,且有效降低了指令级冗余的性能开销。且有效降低了指令级冗余的性能开销。且有效降低了指令级冗余的性能开销。


技术研发人员:凌明 王景铭
受保护的技术使用者:东南大学
技术研发日:2023.06.19
技术公布日:2023/9/7
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐