CN115016993A - 适用于异构冗余的错误清洗方法、装置和计算机设备 - Google Patents
适用于异构冗余的错误清洗方法、装置和计算机设备 Download PDFInfo
- Publication number
- CN115016993A CN115016993A CN202210526720.6A CN202210526720A CN115016993A CN 115016993 A CN115016993 A CN 115016993A CN 202210526720 A CN202210526720 A CN 202210526720A CN 115016993 A CN115016993 A CN 115016993A
- Authority
- CN
- China
- Prior art keywords
- register
- central processing
- processing unit
- reference value
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2205—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
- G06F11/2236—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Hardware Redundancy (AREA)
Abstract
本申请涉及一种适用于异构冗余的错误清洗方法、装置、计算机设备、存储介质和计算机程序产品。所述方法包括:获取多个中央处理器中每个中央处理器的寄存器堆,各中央处理器采用不同的指令集架构;获取预设程序及其对应的汇编文件;汇编文件包括各中央处理器对自身寄存器的操作过程;确定得到运行出错的第一中央处理器;从汇编文件中确定出运行正确的第二中央处理器对应的汇编子文件;获取第二中央处理器的寄存器堆与第一中央处理器的寄存器堆的对应关系,并根据汇编子文件及对应关系得到第一中央处理器中每个寄存器在执行完预设程序后的参考值;基于参考值更新第一中央处理器的寄存器的值。本方法能够提高异构冗余系统的错误清洗效率与准确率。
Description
技术领域
本申请涉及数据清洗技术领域,特别是涉及一种适用于异构冗余的错误清洗方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术
异构冗余系统主要由异构CPU(Central Processing Unit,中央处理器)系统、拟态调度单元、总线、外设等组件组成,其中异构CPU系统一般由三种不同指令集架构的CPU组成。当拟态调度器对异构CPU的输出结果进行裁决发现三者不一致时,需要判断出出错的CPU并对其进行错误清洗。
传统技术中,对由异构CPU组成的拟态系统通常是在软件程序中插入检查点,程序执行到每个检查点时都对各个CPU的输出进行判决,当判决发现有CPU运行错误时,通过从该CPU的上一个检查点加载寄存器信息来完成清洗功能,上一个检查点至该检查点的程序需要重新执行。
但该方法在软件中插入的检查点个数有限,假设每个检查点之间的时间间隔为T,那么清洗后CPU需要重新执行周期T之前的所有指令,对系统的清洗和运行的效率影响较大。
发明内容
基于此,有必要针对上述技术问题,提供一种适用于异构冗余的错误清洗方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种适用于异构冗余的错误清洗方法。所述方法包括:
获取多个中央处理器中每个中央处理器的寄存器堆,各中央处理器采用不同的指令集架构;
获取预设程序及预设程序对应的汇编文件;汇编文件包括不同的指令集架构的中央处理器对自身寄存器的不同操作过程;
从多个中央处理器中确定得到运行出错的第一中央处理器;
从汇编文件中确定出运行正确的第二中央处理器所对应的汇编子文件;
获取第二中央处理器的寄存器堆与第一中央处理器的寄存器堆之间的对应关系,并根据汇编子文件及对应关系得到第一中央处理器中每个参与执行预设程序的寄存器在执行完预设程序后的参考值;
基于参考值更新第一中央处理器的寄存器中的值。
在其中一个实施例中,基于参考值更新第一中央处理器的寄存器中的值,包括:
获取执行预设程序之前,第一中央处理器的多个寄存器的初始值;
基于寄存器的初始值与参考值,确定第一中央处理器中各个寄存器的类型;
基于寄存器的类型与参考值,对寄存器的值进行更新。
在其中一个实施例中,基于寄存器的初始值与参考值,确定第一中央处理器中各个寄存器的类型,包括:
当寄存器的初始值与参考值相同时,寄存器为第一类寄存器;
当寄存器的初始值与参考值不同时,寄存器为第二类寄存器。
在其中一个实施例中,基于寄存器的类型与参考值,对寄存器的值进行更新,包括:
当寄存器为第一类寄存器时,按照寄存器的初始值进行加载;
当寄存器为第二类寄存器时,将参考值作为寄存器的值。
在其中一个实施例中,当寄存器为第二类寄存器时,还包括:
当第二类寄存器通过指令调用预设程序中的子程序时,硬件自动将子程序返回地址保存在预设缓存寄存器中。
在其中一个实施例中,基于参考值更新第一中央处理器的寄存器中的值之后,还包括:
获取预设缓存寄存器中的子程序返回地址,基于子程序返回地址继续执行预设程序。
第二方面,本申请还提供了一种适用于异构冗余的错误清洗装置。所述装置包括:
寄存器堆获取模块,用于获取多个中央处理器中每个中央处理器的寄存器堆,各中央处理器采用不同的指令集架构;
汇编文件获取模块,用于获取预设程序及预设程序对应的汇编文件;汇编文件包括不同的指令集架构的中央处理器对自身寄存器的不同操作过程;
错误中央处理器确定模块,用于从多个中央处理器中确定得到运行出错的第一中央处理器;
汇编子文件获取模块,用于从汇编文件中确定出运行正确的第二中央处理器所对应的汇编子文件;
参考值获取模块,用于获取第二中央处理器的寄存器堆与第一中央处理器的寄存器堆之间的对应关系,并根据汇编子文件及对应关系得到第一中央处理器中每个参与执行预设程序的寄存器在执行完预设程序后的参考值;
更新模块,用于基于参考值更新第一中央处理器的寄存器中的值。
第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一实施例所述的方法的步骤。
第四方面,本申请还提供了一种计算机设备可读存储介质。所述计算机设备可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一实施例所述的方法的步骤。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述任一实施例所述的方法的步骤。
上述适用于异构冗余的错误清洗方法、装置、计算机设备、存储介质和计算机程序产品,首先获取多个中央处理器中每个中央处理器的寄存器堆,各中央处理器采用不同的指令集架构;再获取预设程序及预设程序对应的汇编文件;汇编文件包括不同的指令集架构的中央处理器对自身寄存器的不同操作过程。然后,从多个中央处理器中确定得到运行出错的第一中央处理器;从汇编文件中确定出运行正确的第二中央处理器所对应的汇编子文件,可以得到运行正确的第二中央处理器中寄存器的值。进一步,获取第二中央处理器的寄存器堆与第一中央处理器的寄存器堆之间的对应关系,并根据汇编子文件及对应关系得到第一中央处理器中每个参与执行预设程序的寄存器在执行完预设程序后的参考值,再基于参考值更新第一中央处理器的寄存器中的值。基于运行正确的第二中央处理器的寄存器的值得到第一中央处理器的寄存器的参考值,可以使得第一中央处理器在寄存器值更新后继续执行后续程序,而不需要重新执行所有程序,能够提高第一中央处理器的寄存器值的更新效率与准确率。
附图说明
图1为一个实施例中适用于异构冗余的错误清洗方法的应用环境图;
图2为一个实施例中适用于异构冗余的错误清洗方法的流程示意图;
图3为一个实施例中预设程序的示意图;
图4为一个实施例中适用于异构冗余的错误清洗装置的结构框图;
图5为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的适用于异构冗余的错误清洗方法,可以应用于服务器或终端单侧实现,也可以应用于包括终端和服务器的系统,通过终端和服务器的交互实现。
本申请实施例提供的适用于异构冗余的错误清洗方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。数据存储系统可以存储服务器104需要处理的数据。数据存储系统可以集成在服务器104上,也可以放在云上或其他网络服务器上。服务器104可以给终端102提供错误清洗的环境,服务器104与终端102进行通信交互,从而进入错误清洗的环境,获取多个中央处理器中每个中央处理器的寄存器堆,各中央处理器采用不同的指令集架构。然后,服务器104获取预设程序及预设程序对应的汇编文件;汇编文件包括不同的指令集架构的中央处理器对自身寄存器的不同操作过程。进一步,服务器104从多个中央处理器中确定得到运行出错的第一中央处理器;从汇编文件中确定出运行正确的第二中央处理器所对应的汇编子文件;获取第二中央处理器的寄存器堆与第一中央处理器的寄存器堆之间的对应关系,并根据汇编子文件及对应关系得到第一中央处理器中每个参与执行预设程序的寄存器在执行完预设程序后的参考值。最后,服务器104基于参考值更新第一中央处理器的寄存器中的值。
异构冗余系统主要由异构CPU系统、拟态调度单元、总线、外设等组件组成。其中,终端102的系统相当于是异构冗余系统的外设,服务器104相当于是异构CPU系统。
在一个实施例中,如图2所示,提供了一种适用于异构冗余的错误清洗方法,以该方法应用于服务器单侧实现为例进行说明,包括以下步骤202至步骤212。
步骤202,获取多个中央处理器中每个中央处理器的寄存器堆,各中央处理器采用不同的指令集架构。
在本实施例中,异构CPU系统可以由三种不同指令集架构的CPU组成。
在本实施例中,中央处理器的寄存器堆,是该中央处理器中多个寄存器组成的阵列,通常由快速的静态随机读写存储器(SRAM)实现。这种RAM具有专门的读端口与写端口,可以多路并发访问不同的寄存器。
步骤204,获取预设程序及预设程序对应的汇编文件;汇编文件包括不同的指令集架构的中央处理器对自身寄存器的不同操作过程。
在本实施例中,汇编文件包括多个汇编子文件,分别对应每个指令集架构的中央处理器对自身寄存器的不同操作过程。
在本实施例中,服务器可以基于各指令集架构对应的编译工具,分别对预设程序进行编译,分别得到各指令集架构对应的汇编子文件。
步骤206,从多个中央处理器中确定得到运行出错的第一中央处理器。
在本实施例中,服务器通过拟态调度单元对多个中央处理器的输出结果进行裁决,当多个中央处理器的输出结果不一致时,可以通过多模裁决的方式判断出出错的中央处理器。例如,当异构CPU采用三个不同指令集架构的中央处理器,且三个中央处理器的结果中有一个不同于其他两个时,可以裁定与其他中央处理器结果不一致的中央处理器为运行出错的第一中央处理器。
在另一个实施例中,当异构CPU采用三个以上不同指令集架构的中央处理器时,可以将多个中央处理器的结果中的众数作为正确结果,将多个中央处理器的结果中不同于正确结果的处理器作为运行出错的第一中央处理器。
步骤208,从汇编文件中确定出运行正确的第二中央处理器所对应的汇编子文件。
在本实施例中,异构CPU的多个中央处理器中,不同于第一中央处理器的中央处理器为运行正确的中央处理器。服务器可以从多个运行正确的中央处理器中择一作为第二中央处理器,基于汇编文件查询对应第二中央处理器的汇编子文件。
步骤210,获取第二中央处理器的寄存器堆与第一中央处理器的寄存器堆之间的对应关系,并根据汇编子文件及对应关系得到第一中央处理器中每个参与执行预设程序的寄存器在执行完预设程序后的参考值。
在本实施例中,预设程序可以包括但不限于:整个主程序、主程序中的一段子程序。
在本实施例中,服务器可以基于第二中央处理器所对应的汇编子文件,得到第二中央处理器中每个参与执行预设程序的寄存器在执行完预设程序后的值。进一步,服务器可以基于第二中央处理器的寄存器堆与第一中央处理器的寄存器堆之间的对应关系、以及第二中央处理器中每个参与执行预设程序的寄存器在执行完预设程序后的值,得到第一中央处理器中每个参与执行预设程序的寄存器在执行完预设程序后的参考值。
在本实施例中,第二中央处理器的寄存器堆与第一中央处理器的寄存器堆之间的对应关系是指:第一中央处理器的寄存堆、第二中央处理器的寄存器堆分别在执行完同一预设程序后的寄存器值的对应关系。例如,在执行完同一循环后,第一中央处理器中由寄存器1存储该循环后结果,第二中央处理器中由寄存器2存储该循环后结果,那么,服务器可以基于第二中央处理器中寄存器2在执行完预设程序后的值,得到第一中央处理器中寄存器1在执行完预设程序后的参考值。
步骤212,基于参考值更新第一中央处理器的寄存器中的值。
在本实施例中,服务器可以基于参考值,对第一中央处理器中每个参与执行预设程序的寄存器的值进行更新,使第一中央处理器中寄存器的值更新为正常运行预设程序后的值,能够继续执行后续程序。
上述适用于异构冗余的错误清洗方法中,首先获取多个中央处理器中每个中央处理器的寄存器堆,各中央处理器采用不同的指令集架构;再获取预设程序及预设程序对应的汇编文件;汇编文件包括不同的指令集架构的中央处理器对自身寄存器的不同操作过程。然后,从多个中央处理器中确定得到运行出错的第一中央处理器;从汇编文件中确定出运行正确的第二中央处理器所对应的汇编子文件,可以得到运行正确的第二中央处理器中寄存器的值。进一步,获取第二中央处理器的寄存器堆与第一中央处理器的寄存器堆之间的对应关系,并根据汇编子文件及对应关系得到第一中央处理器中每个参与执行预设程序的寄存器在执行完预设程序后的参考值,再基于参考值更新第一中央处理器的寄存器中的值。基于运行正确的第二中央处理器的寄存器的值得到第一中央处理器的寄存器的参考值,可以使得第一中央处理器在寄存器值更新后继续执行后续程序,而不需要重新执行所有程序,能够提高第一中央处理器的寄存器值的更新效率与准确率。
在其中一个实施例中,基于参考值更新第一中央处理器的寄存器中的值,可以包括:获取执行预设程序之前,第一中央处理器的多个寄存器的初始值;基于寄存器的初始值与参考值,确定第一中央处理器中各个寄存器的类型;基于寄存器的类型与参考值,对寄存器的值进行更新。
在本实施例中,服务器可以观测执行预设程序后第一中央处理器的寄存器值的变化。在执行预设程序后,第一中央处理器的多个寄存器的值可能存在变化,也可能不存在变化。服务器可以基于寄存器的初始值与参考值,确定第一中央处理器中各个寄存器的类型。
在其中一个实施例中,基于寄存器的初始值与参考值,确定第一中央处理器中各个寄存器的类型,可以包括:当寄存器的初始值与参考值相同时,寄存器为第一类寄存器;当寄存器的初始值与参考值不同时,寄存器为第二类寄存器。
在本实施例中,当寄存器为第二类寄存器时,服务器可以将参考值作为寄存器的值,对寄存器的值进行赋值更新。
在本实施例中,当寄存器为第一类寄存器时,服务器不用对第一类寄存器的值赋值更新,可以按照寄存器的初始值进行加载。
在其中一个实施例中,当寄存器为第二类寄存器时,还可以包括:当第二类寄存器通过指令调用预设程序中的子程序时,硬件自动将子程序返回地址保存在预设缓存寄存器中。
在本实施例中,每个指令集架构的中央处理器中都存在至少一个预设缓存寄存器,用于保存子程序地址。
在其中一个实施例中,基于参考值更新第一中央处理器的寄存器中的值之后,还可以包括:获取预设缓存寄存器中的子程序返回地址,基于子程序返回地址继续执行预设程序。
在本实施例中,服务器可以读取预设缓存寄存器,得到子程序返回地址。进一步,服务器对第一中央处理器的寄存器值进行更新后,服务器可以通过读取子程序返回地址,使中央处理器的程序执行地址指向子程序返回地址,可以实现在不重启预设程序的情况下使得第一中央处理器重新正常工作的目的。
在其中一个实施例中,以arm(Acorn RISC Machine),risc-v(RISC-Vinstructionset architecture),mips(MIPS architecture)三种指令集的异构CPU系统为例。为说明不同指令集架构的CPU的寄存器之间如何进行加载赋值。
在本实施例中,如图3所示,以循环加法的C程序为例进行说明。将该C程序分别用arm,risc-v,mips的gcc(GNU Compiler Collection,GNU编译器套件)编译工具编译成汇编文件,如下表1所示。
表1汇编文件表
在本实施例中,对于arm处理器,寄存器堆包含了13个通用寄存器r0-r12,以及sp堆栈指针、lr连接寄存器、pc程序计数器,共计16个寄存器。对于risc-v处理器,寄存器堆包含了x0全零寄存器,x1动态返回地址(ra),x2堆栈指针(sp),x3全局指针(gp),x4线程指针(tp),x8栈帧指针寄存器(s0/fp),以及16个通用寄存器x5-x7和x9-x31,共计32个寄存器。对于mips处理器,寄存器堆包含了$0全零寄存器,$1-$27共27个通用寄存器,以及$28为gp全局指针,$29为sp堆栈指针,$30为fp栈帧指针寄存器,$31为ra动态返回地址,共计32个寄存器。
一般来说,通用寄存器中的存储内容可以在不同指令集架构的CPU之间进行交换,但是特殊寄存器的内容依然需要从自身CPU进行获取。
在本实施例中,当arm指令集架构的CPU出错,服务器可以选择mips或risc-v指令集架构的CPU作为第二中央处理器,由第二中央处理器加载寄存器值至arm。
在本实施例中,由汇编文件中对应arm指令集架构的CPU的汇编子文件可知,在arm指令集架构的CPU执行结束一个循环加法进程后,初始值和参考值一致的寄存器(第一类寄存器)有sp和r7,服务器可以对寄存器sp和r7分别按照他们的初始值进行加载。
在本实施例中,由汇编文件中对应arm指令集架构的CPU的汇编子文件可知,在arm指令集架构的CPU执行结束一个循环加法进程后,初始值和参考值不一致的寄存器(第二类寄存器)有r0,r2,r3。因此,服务器需要对这三个寄存器进行赋值更新。进一步,服务器可以基于汇编文件中对应arm指令集架构的CPU的汇编子文件,得到上述三个寄存器的参考值(r0=0,r3=0,r2=$3),将寄存器的参考值作为寄存器的值进行更新。
在本实施例中,服务器可以将arm指令集架构的CPU中的连接寄存器lr作为预设缓存寄存器。如汇编文件中对应arm指令集架构的CPU的汇编子文件所示,当第二类寄存器通过bl或blx指令调用子程序时,硬件自动将子程序返回地址保存在lr寄存器(预设缓存寄存器)中。也就是说,只要第二类寄存器执行程序后还未跳转进入其他子程序,lr寄存器中保存的都应是上一个子程序的返回地址。
在另一个实施例中,当risc-v指令集架构的CPU出错,服务器可以选择mips或arm指令集架构的CPU作为第二中央处理器,由第二中央处理器加载寄存器值至risc-v。
在本实施例中,由汇编文件中对应risc-v指令集架构的CPU的汇编子文件可知,在risc-v指令集架构的CPU执行结束一个循环加法进程后,初始值和参考值一致的寄存器(第一类寄存器)有sp和s0(fp),服务器可以对寄存器sp和s0(fp)分别按照他们的初始值进行加载。
在本实施例中,由汇编文件中对应risc-v指令集架构的CPU的汇编子文件可知,在risc-v指令集架构的CPU执行结束一个循环加法进程后,初始值和参考值不一致的寄存器(第二类寄存器)有a0,a5,a4。因此,服务器需要对这三个寄存器进行赋值更新。进一步,服务器可以基于汇编文件中对应risc-v指令集架构的CPU的汇编子文件,得到上述三个寄存器的参考值(a0=0x0,a5=0x0,a4=r2),将寄存器的参考值作为寄存器的值进行更新。
在本实施例中,服务器可以将risc-v指令集架构的CPU中的x1动态返回地址(ra)作为预设缓存寄存器。如汇编文件中对应risc-v指令集架构的CPU的汇编子文件所示,当第二类寄存器调用子程序时,硬件自动将子程序返回地址保存在x1动态返回地址(ra)(预设缓存寄存器)中。也就是说,只要第二类寄存器执行程序后还未跳转进入其他子程序,x1动态返回地址(ra)寄存器中保存的都应是上一个子程序的返回地址。
在另一个实施例中,当mips指令集架构的CPU出错,服务器可以选择risc-v或arm指令集架构的CPU作为第二中央处理器,由第二中央处理器加载寄存器值至mips。
在本实施例中,由汇编文件中对应mips指令集架构的CPU的汇编子文件可知,在mips指令集架构的CPU执行结束一个循环加法进程后,初始值和参考值一致的寄存器(第一类寄存器)有$sp和$fp,服务器可以对寄存器$sp和$fp分别按照他们的初始值进行加载。
在本实施例中,由汇编文件中对应mips指令集架构的CPU的汇编子文件可知,在mips指令集架构的CPU执行结束一个循环加法进程后,初始值和参考值不一致的寄存器(第二类寄存器)有$2和$3。因此,服务器需要对这两个寄存器进行赋值更新。进一步,服务器可以基于汇编文件中对应mips指令集架构的CPU的汇编子文件,得到上述两个寄存器的参考值($2=0,$3=a4),将寄存器的参考值作为寄存器的值进行更新。
在本实施例中,服务器可以将mips指令集架构的CPU中的$31作为预设缓存寄存器。如汇编文件中对应mips指令集架构的CPU的汇编子文件所示,当第二类寄存器调用子程序时,硬件自动将子程序返回地址保存在$31(预设缓存寄存器)中。也就是说,只要第二类寄存器执行程序后还未跳转进入其他子程序,$31中保存的都应是上一个子程序的返回地址。
在本实施例中,本方法只观测如图3所示的一段循环加法C代码导致的寄存器变化,通过对寄存器进行重新赋值,来达到不重新启动程序、使CPU恢复正常工作的目的。
在另一个实施例中,服务器可以读取预设缓存寄存器,得到子程序返回地址。
在本实施例中,子程序返回地址可以是一个数值或字符等,其表现形式与PC程序计数器中数据一致。例如,当预设程序为10行的代码,当第一中央处理器执行至第6行代码时出现错误,pc程序计数器中数据可能是6(当程序跑飞时pc程序计数器中数据也会错误)。假使此时子程序返回地址为6,那么,服务器对第一中央处理器中的寄存器值更新后,将预设缓存寄存器中的子程序返回地址赋值给pc程序计数器,使得第一中央处理器在寄存器值更新后继续执行后续程序,而不需要重新执行所有程序。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的适用于异构冗余的错误清洗方法的适用于异构冗余的错误清洗装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个适用于异构冗余的错误清洗装置实施例中的具体限定可以参见上文中对于适用于异构冗余的错误清洗方法的限定,在此不再赘述。
在一个实施例中,如图4所示,提供了一种适用于异构冗余的错误清洗装置装置,包括:寄存器堆获取模块402、汇编文件获取模块404、错误中央处理器确定模块406、汇编子文件获取模块408、参考值获取模块410和更新模块412。
其中,寄存器堆获取模块402,用于获取多个中央处理器中每个中央处理器的寄存器堆,各中央处理器采用不同的指令集架构。
汇编文件获取模块404,用于获取预设程序及预设程序对应的汇编文件;汇编文件包括不同的指令集架构的中央处理器对自身寄存器的不同操作过程。
错误中央处理器确定模块406,用于从多个中央处理器中确定得到运行出错的第一中央处理器。
汇编子文件获取模块408,用于从汇编文件中确定出运行正确的第二中央处理器所对应的汇编子文件。
参考值获取模块410,用于获取第二中央处理器的寄存器堆与第一中央处理器的寄存器堆之间的对应关系,并根据汇编子文件及对应关系得到第一中央处理器中每个参与执行预设程序的寄存器在执行完预设程序后的参考值。
更新模块412,用于基于参考值更新第一中央处理器的寄存器中的值。
在其中一个实施例中,更新模块412可以包括:
初始值获取子模块,用于获取执行预设程序之前,第一中央处理器的多个寄存器的初始值。
寄存器类型确定子模块,用于基于寄存器的初始值与参考值,确定第一中央处理器中各个寄存器的类型。
寄存器值更新子模块,用于基于寄存器的类型与参考值,对寄存器的值进行更新。
在其中一个实施例中,寄存器类型确定子模块可以包括:
第一确定单元,用于当寄存器的初始值与参考值相同时,确定寄存器为第一类寄存器。
第二确定单元,用于当寄存器的初始值与参考值不同时,确定寄存器为第二类寄存器。
在其中一个实施例中,寄存器值更新子模块可以包括:
第一更新但愿,用于当寄存器为第一类寄存器时,按照寄存器的初始值进行加载。
第二更新单元,用于当寄存器为第二类寄存器时,将参考值作为寄存器的值。
在其中一个实施例中,当寄存器为第二类寄存器时,第二更新单元还可以包括:
地址缓存子单元,用于当第二类寄存器通过指令调用预设程序中的子程序时,硬件自动将子程序返回地址保存在预设缓存寄存器中。
在其中一个实施例中,上述装置还可以包括:
继续执行模块,用于获取预设缓存寄存器中的子程序返回地址,基于子程序返回地址继续执行预设程序。
上述适用于异构冗余的错误清洗装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储子程序返回地址、第一中央处理器的寄存器的初始值、参考值等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种适用于异构冗余的错误清洗方法。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:获取多个中央处理器中每个中央处理器的寄存器堆,各中央处理器采用不同的指令集架构;获取预设程序及预设程序对应的汇编文件;汇编文件包括不同的指令集架构的中央处理器对自身寄存器的不同操作过程;从多个中央处理器中确定得到运行出错的第一中央处理器;从汇编文件中确定出运行正确的第二中央处理器所对应的汇编子文件;获取第二中央处理器的寄存器堆与第一中央处理器的寄存器堆之间的对应关系,并根据汇编子文件及对应关系得到第一中央处理器中每个参与执行预设程序的寄存器在执行完预设程序后的参考值;基于参考值更新第一中央处理器的寄存器中的值。
在其中一个实施例中,处理器执行计算机程序时还实现基于参考值更新第一中央处理器的寄存器中的值,可以包括:获取执行预设程序之前,第一中央处理器的多个寄存器的初始值;基于寄存器的初始值与参考值,确定第一中央处理器中各个寄存器的类型;基于寄存器的类型与参考值,对寄存器的值进行更新。
在其中一个实施例中,处理器执行计算机程序时还实现基于寄存器的初始值与参考值,确定第一中央处理器中各个寄存器的类型,可以包括:当寄存器的初始值与参考值相同时,寄存器为第一类寄存器;当寄存器的初始值与参考值不同时,寄存器为第二类寄存器。
在其中一个实施例中,处理器执行计算机程序时还实现基于寄存器的类型与参考值,对寄存器的值进行更新,可以包括:当寄存器为第一类寄存器时,按照寄存器的初始值进行加载;当寄存器为第二类寄存器时,将参考值作为寄存器的值。
在其中一个实施例中,处理器执行计算机程序时实现当寄存器为第二类寄存器时,还可以包括:当第二类寄存器通过指令调用预设程序中的子程序时,硬件自动将子程序返回地址保存在预设缓存寄存器中。
在其中一个实施例中,处理器执行计算机程序时实现基于参考值更新第一中央处理器的寄存器中的值之后,还可以包括:获取预设缓存寄存器中的子程序返回地址,基于子程序返回地址继续执行预设程序。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取多个中央处理器中每个中央处理器的寄存器堆,各中央处理器采用不同的指令集架构;获取预设程序及预设程序对应的汇编文件;汇编文件包括不同的指令集架构的中央处理器对自身寄存器的不同操作过程;从多个中央处理器中确定得到运行出错的第一中央处理器;从汇编文件中确定出运行正确的第二中央处理器所对应的汇编子文件;获取第二中央处理器的寄存器堆与第一中央处理器的寄存器堆之间的对应关系,并根据汇编子文件及对应关系得到第一中央处理器中每个参与执行预设程序的寄存器在执行完预设程序后的参考值;基于参考值更新第一中央处理器的寄存器中的值。
在其中一个实施例中,计算机程序被处理器执行时还实现基于参考值更新第一中央处理器的寄存器中的值,可以包括:获取执行预设程序之前,第一中央处理器的多个寄存器的初始值;基于寄存器的初始值与参考值,确定第一中央处理器中各个寄存器的类型;基于寄存器的类型与参考值,对寄存器的值进行更新。
在其中一个实施例中,计算机程序被处理器执行时还实现基于寄存器的初始值与参考值,确定第一中央处理器中各个寄存器的类型,可以包括:当寄存器的初始值与参考值相同时,寄存器为第一类寄存器;当寄存器的初始值与参考值不同时,寄存器为第二类寄存器。
在其中一个实施例中,计算机程序被处理器执行时还实现基于寄存器的类型与参考值,对寄存器的值进行更新,可以包括:当寄存器为第一类寄存器时,按照寄存器的初始值进行加载;当寄存器为第二类寄存器时,将参考值作为寄存器的值。
在其中一个实施例中,计算机程序被处理器执行时实现当寄存器为第二类寄存器时,还可以包括:当第二类寄存器通过指令调用预设程序中的子程序时,硬件自动将子程序返回地址保存在预设缓存寄存器中。
在其中一个实施例中,计算机程序被处理器执行时实现基于参考值更新第一中央处理器的寄存器中的值之后,还可以包括:获取预设缓存寄存器中的子程序返回地址,基于子程序返回地址继续执行预设程序。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:获取多个中央处理器中每个中央处理器的寄存器堆,各中央处理器采用不同的指令集架构;获取预设程序及预设程序对应的汇编文件;汇编文件包括不同的指令集架构的中央处理器对自身寄存器的不同操作过程;从多个中央处理器中确定得到运行出错的第一中央处理器;从汇编文件中确定出运行正确的第二中央处理器所对应的汇编子文件;获取第二中央处理器的寄存器堆与第一中央处理器的寄存器堆之间的对应关系,并根据汇编子文件及对应关系得到第一中央处理器中每个参与执行预设程序的寄存器在执行完预设程序后的参考值;基于参考值更新第一中央处理器的寄存器中的值。
在其中一个实施例中,计算机程序被处理器执行时还实现基于参考值更新第一中央处理器的寄存器中的值,可以包括:获取执行预设程序之前,第一中央处理器的多个寄存器的初始值;基于寄存器的初始值与参考值,确定第一中央处理器中各个寄存器的类型;基于寄存器的类型与参考值,对寄存器的值进行更新。
在其中一个实施例中,计算机程序被处理器执行时还实现基于寄存器的初始值与参考值,确定第一中央处理器中各个寄存器的类型,可以包括:当寄存器的初始值与参考值相同时,寄存器为第一类寄存器;当寄存器的初始值与参考值不同时,寄存器为第二类寄存器。
在其中一个实施例中,计算机程序被处理器执行时还实现基于寄存器的类型与参考值,对寄存器的值进行更新,可以包括:当寄存器为第一类寄存器时,按照寄存器的初始值进行加载;当寄存器为第二类寄存器时,将参考值作为寄存器的值。
在其中一个实施例中,计算机程序被处理器执行时实现当寄存器为第二类寄存器时,还可以包括:当第二类寄存器通过指令调用预设程序中的子程序时,硬件自动将子程序返回地址保存在预设缓存寄存器中。
在其中一个实施例中,计算机程序被处理器执行时实现基于参考值更新第一中央处理器的寄存器中的值之后,还可以包括:获取预设缓存寄存器中的子程序返回地址,基于子程序返回地址继续执行预设程序。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (10)
1.一种适用于异构冗余的错误清洗方法,其特征在于,所述方法包括:
获取多个中央处理器中每个中央处理器的寄存器堆,各中央处理器采用不同的指令集架构;
获取预设程序及所述预设程序对应的汇编文件;所述汇编文件包括不同的指令集架构的中央处理器对自身寄存器的不同操作过程;
从所述多个中央处理器中确定得到运行出错的第一中央处理器;
从所述汇编文件中确定出运行正确的第二中央处理器所对应的汇编子文件;
获取所述第二中央处理器的寄存器堆与所述第一中央处理器的寄存器堆之间的对应关系,并根据所述汇编子文件及所述对应关系得到所述第一中央处理器中每个参与执行所述预设程序的寄存器在执行完所述预设程序后的参考值;
基于所述参考值更新所述第一中央处理器的寄存器中的值。
2.根据权利要求1所述的方法,其特征在于,所述基于所述参考值更新所述第一中央处理器的寄存器中的值,包括:
获取执行所述预设程序之前,所述第一中央处理器的多个寄存器的初始值;
基于所述寄存器的初始值与所述参考值,确定所述第一中央处理器中各个寄存器的类型;
基于所述寄存器的类型与所述参考值,对所述寄存器的值进行更新。
3.根据权利要求2所述的方法,其特征在于,所述基于所述寄存器的初始值与所述参考值,确定所述第一中央处理器中各个寄存器的类型,包括:
当所述寄存器的初始值与所述参考值相同时,所述寄存器为第一类寄存器;
当所述寄存器的初始值与所述参考值不同时,所述寄存器为第二类寄存器。
4.根据权利要求3所述的方法,其特征在于,所述基于所述寄存器的类型与所述参考值,对所述寄存器的值进行更新,包括:
当所述寄存器为第一类寄存器时,按照所述寄存器的初始值进行加载;
当所述寄存器为第二类寄存器时,将所述参考值作为所述寄存器的值。
5.根据权利要求4所述的方法,其特征在于,所述当所述寄存器为第二类寄存器时,还包括:
当所述第二类寄存器通过指令调用所述预设程序中的子程序时,硬件自动将所述子程序返回地址保存在预设缓存寄存器中。
6.根据权利要求5所述的方法,其特征在于,所述基于所述参考值更新所述第一中央处理器的寄存器中的值之后,还包括:
获取所述预设缓存寄存器中的所述子程序返回地址,基于所述子程序返回地址继续执行所述预设程序。
7.一种适用于异构冗余的错误清洗装置,其特征在于,所述装置包括:
寄存器堆获取模块,用于获取多个中央处理器中每个中央处理器的寄存器堆,各中央处理器采用不同的指令集架构;
汇编文件获取模块,用于获取预设程序及所述预设程序对应的汇编文件;所述汇编文件包括不同的指令集架构的中央处理器对自身寄存器的不同操作过程;
错误中央处理器确定模块,用于从所述多个中央处理器中确定得到运行出错的第一中央处理器;
汇编子文件获取模块,用于从所述汇编文件中确定出运行正确的第二中央处理器所对应的汇编子文件;
参考值获取模块,用于获取所述第二中央处理器的寄存器堆与所述第一中央处理器的寄存器堆之间的对应关系,并根据所述汇编子文件及所述对应关系得到所述第一中央处理器中每个参与执行所述预设程序的寄存器在执行完所述预设程序后的参考值;
更新模块,用于基于所述参考值更新所述第一中央处理器的寄存器中的值。
8.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述的方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
10.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210526720.6A CN115016993A (zh) | 2022-05-16 | 2022-05-16 | 适用于异构冗余的错误清洗方法、装置和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210526720.6A CN115016993A (zh) | 2022-05-16 | 2022-05-16 | 适用于异构冗余的错误清洗方法、装置和计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115016993A true CN115016993A (zh) | 2022-09-06 |
Family
ID=83068726
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210526720.6A Pending CN115016993A (zh) | 2022-05-16 | 2022-05-16 | 适用于异构冗余的错误清洗方法、装置和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115016993A (zh) |
-
2022
- 2022-05-16 CN CN202210526720.6A patent/CN115016993A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6027020B2 (ja) | プログラム状態のチェックポイントおよび復元の方法 | |
JP5611756B2 (ja) | プログラム・フロー制御 | |
US20110246823A1 (en) | Task-oriented node-centric checkpointing (toncc) | |
US11893390B2 (en) | Method of debugging a processor that executes vertices of an application, each vertex being assigned to a programming thread of the processor | |
US7793160B1 (en) | Systems and methods for tracing errors | |
CN103999036A (zh) | 在支持事务的计算机体系结构中使用异常进行代码专业化的方法和系统 | |
TW200935246A (en) | Optimizing execution of single-threaded programs on a multiprocessor managed by compilation | |
US8095829B1 (en) | Soldier-on mode to control processor error handling behavior | |
US8191054B2 (en) | Process for handling shared references to private data | |
JPH05250499A (ja) | データフロー計算機 | |
US11544189B2 (en) | System and method for memory management | |
US11113140B2 (en) | Detecting error in executing computation graph on heterogeneous computing devices | |
CN115016993A (zh) | 适用于异构冗余的错误清洗方法、装置和计算机设备 | |
CN114047952B (zh) | 用于单片机的处理器、方法、单片机和存储介质 | |
WO1998013762A1 (en) | Processing system and method for reading and restoring information in a ram configuration | |
JP4155052B2 (ja) | エミュレータ、エミュレーション方法およびプログラム | |
US7181652B2 (en) | System and method for detecting and isolating certain code in a simulated environment | |
US11099958B2 (en) | Instruction generation for validation of processor functionality | |
JP5545054B2 (ja) | デバッグ回路及びデバッグシステム | |
US20210089310A1 (en) | Multiprocessor device | |
CN117033497B (zh) | 数据湖上数据更新与读取的方法及相关设备 | |
US11086758B1 (en) | Identifying firmware functions executed in a call chain prior to the occurrence of an error condition | |
KR101395007B1 (ko) | 복수의 프로세서를 이용한 스냅샷 이미지 처리 장치 및 방법 | |
CN112463327B (zh) | 逻辑线程快速切换的方法、装置、cpu芯片及服务器 | |
JP3988740B2 (ja) | 並列処理装置、命令再試行方法、およびプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |