CN109891393B - 使用检查器处理器的主处理器错误检测 - Google Patents
使用检查器处理器的主处理器错误检测 Download PDFInfo
- Publication number
- CN109891393B CN109891393B CN201780066948.9A CN201780066948A CN109891393B CN 109891393 B CN109891393 B CN 109891393B CN 201780066948 A CN201780066948 A CN 201780066948A CN 109891393 B CN109891393 B CN 109891393B
- Authority
- CN
- China
- Prior art keywords
- checker
- processor
- main
- flow
- memory
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/1629—Error detection by comparing the output of redundant processing systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1405—Saving, restoring, recovering or retrying at machine instruction level
- G06F11/1407—Checkpointing the instruction stream
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/1629—Error detection by comparing the output of redundant processing systems
- G06F11/1641—Error detection by comparing the output of redundant processing systems where the comparison is not performed by the redundant processing components
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Hardware Redundancy (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
- Advance Control (AREA)
Abstract
本申请公开了使用检查器处理器的主处理器错误检测。装置(2)包括:主处理器(4),用于执行程序指令的主流(30);两个或多个检查器处理器(20),用于彼此并行地执行程序指令的相应检查器流(34),检查器流与主处理器所执行的主流的不同部分(32)相对应;以及错误检测电路(28),用于当在主处理器(4)上执行的主流的给定部分(32)的结果与在多个检查器处理器(20)之一上执行的相应检查器流(34)的结果之间检测到不匹配时检测错误。与双核锁步技术相比,该方法能够以较低电路面积和功耗开销来检查高性能主处理器(4)的错误。
Description
技术领域
本技术涉及数据处理的领域,更具体地,涉及错误检测。
背景技术
包括软(瞬态)故障和硬(永久)故障的硬件故障在数据处理***中越来越常见。随着***中晶体管数量的增加和特征尺寸的减小,故障的可能性增加,因为较小晶体管更容易受到由宇宙射线或其他粒子撞击引起的瞬态错误的影响,并且较小特征尺寸的可变性增加将显著增加瞬态故障的发生。同时,在数据处理***上执行的工作负载越来越不容忍错误,特别是对于需要严格安全标准的汽车行业等应用。因此,用于检测数据处理***中的错误的技术变得越来越重要。
发明内容
至少一些示例提供了一种装置,包括:
主处理器,其用于执行程序指令的主流;
多个检查器处理器,其用于彼此并行地执行程序指令的相应检查器流,检查器流与主处理器所执行的主流的不同部分相对应;以及
错误检测电路,其用于当在主处理器上执行的主流的给定部分的结果与在多个检查器处理器之一上执行的对应检查器流的结果之间检测到不匹配时检测错误。
至少一些示例提供了一种数据处理方法,包括:
在主处理器上执行程序指令的主流;
在多个检查器处理器上并行地执行程序指令的相应检查器流,检查器流与主处理器所执行的主流的不同部分相对应;以及
当在主处理器上执行的主流的给定部分的结果与在多个检查器处理器之一上执行的对应检查器流的结果之间检测到不匹配时检测错误。
附图说明
通过结合附图阅读对示例的以下描述,本技术的另外方面、特征和优点将变得明显,在附图中:
图1示意性地示出了数据处理***,该数据处理***包括用于执行程序指令的主流的主处理器和用于执行与主流的相应部分相对应的程序指令的检查器流的多个检查器处理器;
图2示意性地示出了并行处理相应检查器流的检查器处理器的示例;
图3是示出利用主处理器处理主流的方法的流程图;
图4是示出利用检查器处理器之一处理检查器流并检测错误的方法的流程图;以及
图5示出了在主处理器的集群之间共享检查器处理器的示例。
具体实施方式
实现错误检测可能具有挑战性,尤其是对于更大更复杂的处理器。一种方法可以使用双核锁步(dual-core lockstep)技术,其中,提供了相同处理器的两个版本并且在相同输入上并行地执行相同指令,使得可以在两个处理器的结果之间存在差异时检测到错误。然而,这种方法要求第二核与第一核保持同步,因此必须提供与第一核相同的完整第二核,使处理***的面积和功耗加倍。这可能是显著的成本,尤其是当主处理器是相对复杂的高性能处理器(例如,支持无序执行的处理器)时。此外,由于对相应核的许多接口进行比较以检测错误,因此将需要大量的额外布线。对于更复杂的处理器,由于这些处理器的物理尺寸以及两个冗余处理器之间的相对较大距离,这种布线可能成为要实施的显著问题,限制了处理器可操作的频率,并因此最终限制了可以应用这种双核锁步技术的处理器的大小。
另一替代方案是提供单个处理器并在软件级使用冗余来检测错误。例如,可以在同时多线程***中运行重复线程,或者在支持虚拟化的***中,可以使用管理程序来复制工作负载并执行定期比较以检查故障。然而,虽然这些方法减少了面积和实施方式问题,但它们仍然具有明显的缺点。首先,***的可用性能显著降低。此外,由于计算仍被执行两次,因此在相对较大处理器上仍存在显著的功耗损失。此外,由于复制工作负载在与主工作负载相同的硬件上运行,因此可能无法检测到一些硬故障,因为主工作负载和复制工作负载二者将发生相同错误。
越来越多的新兴应用(例如,自动驾驶)要求鲁棒错误检测和高性能的组合,因此希望提供一种克服上述问题的错误检测技术。
可以提供一种装置,该装置包括:主处理器,其用于执行程序指令的主流;以及两个或更多个检查器处理器,其用于彼此并行地执行程序指令的相应检查器流,其中检查器流与主处理器所执行的主流的不同部分相对应。提供了错误检测电路,以用于当在主处理器上执行的主流的给定部分的结果与在多个检查器处理器之一上执行的对应检查器流的结果之间检测到不匹配时检测错误。
因此,多个检查器处理器并行操作以处理与主流的不同部分相对应的检查器流。通过跨多个检查器处理器分布与主流的不同部分相对应的检查器流,任何单独的检查器处理器不必达到主处理器的性能水平,使得可以使用更小更不复杂的检查器处理器,从而与双核锁步技术相比,这减少了电路面积和功耗开销以及错误检查的布线复杂性。因此,这种方法可以更好地按比例缩放到更大主处理器。此外,由于主处理器本身不执行检查器流,因此检查对于主处理器所执行的主流而实现的性能具有较小影响,并且由于检查器流在不同的处理器上被执行,因此可以检测到影响主处理器的硬错误。
主处理器能够以比每个检查器处理器更大的指令吞吐量处理程序指令。通常,主处理器可以以允许比检查器处理器更高的最大指令吞吐量的任何方式不同于检查器处理器。例如,主处理器可以是无序处理器,而检查器处理器是有序处理器,和/或可以支持并行地发布和执行更多数量的指令。通常,提供更高性能的处理器每次计算需要更多的单位面积和更多功耗,并且因此与提供与主处理器相同的复制处理器相比,使用具有较低指令吞吐量的检查器处理器的阵列来检查主处理器的处理可以是显著更大的面积和能量效率。
该装置可以具有检查点电路以存储多个检查点条目,每个检查点条目指示在执行主流期间响应于相应检查边界事件而捕获的主处理器的架构状态。架构状态可以包括来自通用寄存器的数据、控制数据(例如,指示主流的当前执行点的程序计数器)、以及检查器流从与主流的对应部分的开始相对应的点开始处理相关检查器流所需的任何其他状态信息。因此,在启动给定检查器流时,检查器处理器可以使用由检查点电路的一个检查点条目指示的架构状态来开始处理检查器流,并且在完成检查器流时,错误检测电路可以识别在响应于检查器流而由检查器处理器生成的架构状态与由检查点电路的后续检查点条目指示的架构状态之间是否存在不匹配,并且如果存在不匹配,则用发送错误的信号。
在一些实施方式中,如果检测到错误,则检查点电路的检查点条目还可以用于从错误中恢复,因为可以执行错误恢复操作以恢复在主处理器的架构状态寄存器发生错误之前的主流的点处捕获的架构状态。
还可以使用存储器日志电路来跟踪在主流期间由主处理器执行的存储器访问(例如,加载或存储操作),该存储器日志电路包括多个存储器日志条目,每个存储器日志条目包括指示在主流的对应部分期间由主处理器触发的存储器访问的数据值和地址的跟踪数据。在该背景下,“存储器访问”包括对缓存和主存储器二者的访问(因此“存储器”包含“缓存”)。可以使用片上存储装置或片外存储装置来实施存储器日志电路。
在一些示例中,存储器日志电路可以仅捕获与存储操作(将数据值从寄存器存储到存储器中的位置的操作)有关的跟踪数据,其中加载操作(从存储器读取值并将其存储在寄存器中的操作)未被存储器日志电路跟踪。通过跟踪由主处理器执行的存储操作的地址和数据值,错误检测电路可以根据针对给定地址由检查器处理器之一存储的数据值是否与针对所述给定地址在对应存储器日志条目中记录的数据值相匹配,来检测对于给定存储操作是否发生错误。尽管在任何情况下都可以根据架构状态数据与检查器流结束时所存储的检查点条目的比较来检测影响存储操作的一些错误,但可能无法使用检查点机制来检查一些类型的错误,例如,由于数据值驻留在加载/存储队列中时的损坏而导致的错误,以及存储到存储器中的值在到达检查器流的结束时间时不再驻留在寄存器文件中的错误,因此存储器访问日志可以有助于提高针对错误的鲁棒性。
在一些示例中,可能不需要由存储器日志电路跟踪加载操作,因为如果加载到主处理器的寄存器中的值中存在错误,则其将改变可以根据检查点数据与检查器处理器的架构状态或检查点之间的存储值的比较来检测的检查器流的结果,或者如果加载值中的错误最终不影响结果,则根本不需要发送错误的信号。因此,在一些实施例中,存储器日志电路可以仅跟踪存储操作的地址和数据值。如果未跟踪加载操作,则在检查器流中遇到加载指令时,检查器处理器可以获得要从存储器加载的数据值(基本上重复已经由主处理器执行的加载)。
然而,在其他示例中,可以由存储器日志电路跟踪加载操作和存储操作二者。即使可能不需要跟踪加载操作以进行错误检测,但跟踪加载操作的地址和数据值可以有助于提高检查器处理器的性能,因为可以直接从对应的存储器日志条目获取要加载的数据值,从而避免需要从存储器访问数据,如果主处理器先前访问的数据不再在缓存中,这可能导致较长延迟。因此,除了跟踪存储操作以进行错误检测之外,存储器日志电路还可以跟踪加载操作以使得能够将加载结果从主处理器转发到检查器处理器。
其他示例可以使用混合方法,其中通常不跟踪加载操作,除非发生触发跟踪特定加载操作的至少一个条件。因此,在一些情况下,存储器日志电路可以跟踪所有存储操作和所选择的加载操作。
一个示例可以是其中所选择的加载操作包括针对其与加载相关联的地址被标记为不可缓存的加载操作。例如,存储器保护单元或存储器管理单元可以定义给定地址范围的属性,包括指定来自给定地址范围的数据是否可以在缓存层级的给定水平下进行缓存的参数。对于不可缓存地址,从更高水平的缓存或主存储器访问对应数据通常更慢,因此为了避免检查器处理器遇到这种加载的过多延迟,优选地在由主处理器执行加载时将该加载的数据值和地址写到相关存储器日志条目。避免检查器处理器处的过长延迟可能是重要的,就像如果检查器处理器花费很长时间来处理每个检查器流,则这可能增加所有检查器处理器忙于处理与主流的先前部分相对应的检查器流的可能性(并且所有检查点条目或存储器日志条目都已满,因此无法跟踪主流的新部分的数据),在这种情况下,主处理器可能必须停止其处理以确保错误可以被检测到。因此,提高检查器处理器的性能还可以通过减少停止的机会来帮助提高主处理器的性能。
在预先已知地址将不会被长时间访问的情况下,可以将加载操作标记为非暂时的。为了提高缓存效率,主处理器可以选择不将与非暂时性访问相关联的数据存储在缓存中。如果主处理器未缓存数据,则当检查器处理器执行对应的检查器流时,其将需要从主存储器加载数据,这将使检查器处理器停止一段时间。因此,为了避免停止检查器处理器,存储器日志电路还可以跟踪非暂时性加载操作(标记有提示的加载操作,该提示指示不需要缓存的对应数据值)。
可以由存储器日志电路跟踪的所选择的加载操作的另一示例可以是加载操作,针对该加载操作在检查器处理器已经在检查器流中执行对应加载操作之前,主处理器已经针对相同地址执行了后续存储操作。由于检查器处理器在主处理器的对应部分完成之后的某个时间可能正在执行其检查器流,因此可能存在中间存储操作,其重写先前由主处理器读取的值,因此在这种情况下,由检查器处理器在重复加载时看到的值可能与主处理器最初加载的值不同,因此如果存储器日志电路未跟踪加载,则这可能导致检测到不表示影响主处理器操作的有效性的真实错误的一些误报错误。如果这种误报错误足够罕见,则优选地不要在跟踪加载操作时产生开销。然而,在其他实施方式中,在这种情况下,可以通过检测或预测先前加载的地址何时被后续存储重写并将先前加载的原始数据值和地址复制到存储器日志电路中,来避免不必要的恢复操作的开销。
要注意,在仅由存储器日志电路跟踪所选择的加载的情况下,虽然通常可以跟踪满足特定标准的所选择的加载,但仍可以由存储器日志电路跟踪不满足该标准的一些其他加载,因为为了降低用于检测加载是否满足标准的检测机制的成本,可以使用允许对加载是否满足标准的一些误报检测的电路。例如,为了检测加载之后是否对相同地址进行后续存储,用于减少硬件成本的一种技术可以是使用诸如布隆过滤器(Bloom filter)之类的结构,这确保在先前遇到的加载地址和后续存储之间没有漏报匹配,但允许一些误报匹配。因此,在所选择的加载被跟踪的情况下,存储器日志可以包括至少所选择的加载的跟踪数据,以及可能一些其他加载的跟踪数据。
在由存储器日志电路跟踪存储操作和(至少一些)加载操作二者的示例中,可以使用在存储和加载之间共享的公共结构(例如,表结构,其中每个条目包括指示对应目标地址和数据值是否与存储或加载有关的标志)来实施存储器日志电路。替代地,可以提供单独的数据结构以分别跟踪加载和存储操作。
在由主处理器处理主流期间发生的大部分错误可以通过简单地将架构状态从先前执行点恢复到主处理器的寄存器来恢复。然而,如果存储操作发生错误,则如果在检测到错误时已经将错误值存储到存储器中,这也可能导致正在执行的其他处理线程或相同处理***内可以已经从存储器读取不正确值的其他设备出错。避免主流中的错误传播到其他线程或设备的一种方法可以是推迟将存储事务提交到存储器,直到错误检测电路检测到该存储指令是否发生错误。
然而,由于检查器处理器在主流的对应部分已经完成之后通常运行一段时间,因此阻止存储直到它们被检查可能是不可行的,因为这可能需要较大结构来排队存储,并且添加用于相对大量存储的加载-存储转发的间接表可能减慢无错执行的常见情况。因此,在一些示例中,优选地允许主处理器在错误检测电路检测到该存储指令是否发生错误之前提交存储事务。尽管这有时可能允许主流中的错误影响其他设备或线程的操作,但这种方法可以是优选的,以使得无错操作的常见情况能够以很少要求恢复操作更复杂和缓慢为代价而具有更高性能(例如,在这种情况下,从错误软件恢复可能需要将错误报告给其他线程或设备,然后这些线程或设备本身可能需要倒回到更早的执行点)。
另一方法可以是在不等待错误检测电路确认它们无错误的情况下提交一些存储操作,而阻止其他存储操作并且一旦错误清除则提交,这取决于存储操作的目标地址。例如,对于存储器地址空间的大部分区域,***的重新启动可以成功地解决存储器中的数据中的任何错误,以使得允许可能错误的存储操作在由错误检测电路检查之前更新存储器是可接受的。然而,对于其他区域,将损坏数据写入存储器可能是不期望的。例如,一些区域可以被定义为“设备”区域,其在被写入时在对应外部设备处触发一些动作(例如,发射车辆中的安全气囊),并且由短暂故障使得触发这样的动作所引起的错误可能是不期望的(例如,一旦发射,则***重启将不能使得安全气囊“未发射”)。因此,在一些情况下,对地址空间的“设备”类型区域的存储操作可以被保持在队列中,并且在错误检测电路基于对应的检查器流确认主处理器的原始存储操作无错误时被提交到存储器,而对其他区域的存储在不等待错误检测的情况下被提交到存储器。
因此,在最一般的水平,可以推迟存储操作的提交,直到已经利用地址空间的至少一个第一区域(在一些实施例中,其可以是地址空间的部分或者整个地址空间)中的目标地址对存储操作执行错误检查之后。类似地,如果存储操作目标地址在地址空间的至少一个第二区域中(其也可以是地址空间的仅一部分或整个地址空间),则可以在不等待错误检测完成的情况下触发存储操作向存储器的提交。回滚日志可以用于记录与第二区域中的地址相关联的先前数据值,这些数据值在对应的错误检查完成之前由存储来更新,其可以允许如果随后识别出错误则进行恢复。
可以在加载/存储的地址和数据值可用的主处理器的任何处理阶段更新存储器日志条目。然而,在其中主处理器是无序处理器而检查器处理器是有序处理器的示例中,一旦由主处理器提交对应的存储器访问就更新存储器日志电路可以是有用的。提交存储器访问的点是已知应明确地执行存储器访问的点(例如,一旦解析了任何先前的分支指令的结果,并且生成影响存储数据值或目标地址的计算的结果的任何先前的操作本身已被提交)。由于通常存储器访问将按程序顺序提交,因此即使存储器访问实际上是由主处理器乱序执行,在提交阶段更新存储器日志也意味着存储器日志条目以与有序检查器处理器在执行对应的检查器流时遇到存储器访问相同的顺序来跟踪存储器访问。这使得检查器处理器和存储器日志的实施方式更简单,因为检查器处理器可以简单地按顺序读出存储器日志的每个条目,而不必针对所需存储器地址执行对整个条目的搜索。注意,在存储器访问本身被提交时,这并不一定意味着触发该存储器访问的指令被提交。例如,存储器访问可以仅是由对应指令触发的复合操作的一部分,并且虽然可能已经提交存储器访问,但仍可以未提交存储器访问的其他部分,使得整个指令被认为尚未提交。
在一些示例中,每个检查器流可以仅由一个检查器处理器执行。在这种情况下,如果检测到错误,则可能无法确定错误发生在主处理器还是检查器处理器中,但主处理器可以触发恢复操作以防主处理器错误。实际上,错误可能足够稀少,使得可以容忍一些不必要的恢复操作以减少错误检查的开销。
然而,在其他示例中,可以将相同的检查器流分配给两个或更多个检查器处理器。在这种情况下,如果检查器处理器中的一个向主处理器生成不同结果但另一检查器处理器与主处理器匹配,则在检查器处理器中的一个中发生错误,并因此不需要触发主处理器的错误恢复操作。然而,如果运行相同检查器流的每个检查器处理器对其结果达成一致但与主处理器不同,则可以将错误精确定位到主处理器并且可以触发错误恢复操作。虽然这种方法可能需要提供额外的检查器处理器,但对于其中减少***不可用于处理主流的时间特别重要的应用,这种额外开销可能是合理的。
替代地,不是将所有检查器流分配给多个检查器处理器,另一方法可以是通常将检查器流分配给单个检查器处理器,但如果针对该检查器流检测到错误,则在第二检查器处理器上重复检查器流以解决是在主处理器中还是第一检查器处理器中发生错误。虽然在两个或更多个检查器处理器上按顺序执行相同检查器流可能增加错误报告延迟,但这可以是合理的以避免例如主处理器的不必要的重新启动。
在一些示例中,所有检查器处理器可以具有相同的微架构,在这种情况下,给定的检查器流可以被分配给任何可用的检查器处理器。
然而,在一些情况下,包括至少一些具有不同微架构的检查器处理器可能是有用的。例如,检查器处理器中的至少一个可以支持至少一个其他检查器处理器不支持的至少一种类型的处理操作。在这种情况下,如果主流的一部分包括至少一种类型的处理操作,则对应的检查器流被分配给支持该操作的一个检查器处理器,并且不能被分配给一个其他处理器。一些类型的处理操作相对很少,因此在每个检查器处理器中提供用于支持该操作的硬件可能是不合理的。例如,主流的一些部分可能不包括任何浮点运算,因此仅为一些检查器处理器提供浮点单元可以节省电路面积和功率,而不会显著影响错误报告延迟。
在一些示例中,检查器处理器可以执行来自与主处理器相同的指令集架构(ISA)的程序指令。然而,如果检查器处理器根据与主流不同的指令集架构(ISA)执行检查器流,则通常可以减少检查器处理器的面积和功耗。因此,指令的检查器流可能不包括与主流的对应部分完全相同的指令。
检查器处理器ISA可以是主处理器ISA的部分子集,其中主处理器支持执行检查器处理器不支持的一些类型的指令。例如,由主处理器ISA的一个指令触发的复合操作可以由检查器处理器使用检查器处理器ISA的生成等同结果的多个单独的更简单指令来执行。此外,虽然主处理器ISA可以支持向量指令的执行,该向量指令控制处理器在包括一个寄存器中的多个独立数据元素的向量操作数上并行地执行多个独立的处理通道,但检查器处理器可以仅具有标量处理硬件并且可以使用检查器处理器ISA的标量指令来按顺序地执行对应的处理通道。替代地,检查器处理器ISA可以完全不同于主处理器ISA,其中两个ISA中的对应类型的指令具有完全不同的编码。
当检查器处理器使用与主处理器ISA不同的ISA时,可以使用不同的方法来生成检查器流。在一个示例中,检查器处理器可以执行定义检查器流的检查器二进制代码,检查器二进制代码独立于定义主流的主二进制代码。因此,可以分别为主处理器和检查器处理器编译完全不同的二进制代码,并且可以将两组二进制代码存储在存储器中以供相应的主处理器和检查器处理器访问。替代地,检查器处理器可以执行定义检查器流的检查器二进制代码,其通过定义主流的主二进制代码的运行时转换获得。使用运行时转换可以简化用于开发在主处理器和检查器处理器上运行的代码的工具链,并减少存储要执行的代码所需的存储器存储容量。另一方面,使用单独的二进制代码具有以下优势:不需要证明用于将主流转换为检查器流的运行时转换代码本身是“安全的”,这可能是诸如汽车之类的某些安全关键应用的重要因素。
可以以不同的方式控制将主流划分到由相应的检查器部分检查的各部分中。在一些情况下,每个部分可以简单地对应于固定大小的指令块或者在固定持续时间的时间段中处理的指令。
然而,如果各部分根据在由主处理器正在处理的主流内发生的事件而具有可变大小,则检查器处理器的效率可能更高。因此,在一个示例中,每个检查器流对应于主处理器在两个连续检查边界事件之间执行的主流的一部分。有效地,边界事件可以标记主流的期望开始新检查器流的点。在每个边界事件处捕获寄存器检查点,并在边界事件之后分配新检查器流。
例如,每个检查边界事件可以是以下事件之一:
·占用存储器日志条目,该存储器日志条目用于响应于主流达到阈值占用水平或更高水平来跟踪由主处理器执行的存储器访问。因此,当给定存储器日志条目满或接近满时,这可以触发主流的当前部分的结束和下一部分的开始,以使得可以使用下一个存储器日志条目来跟踪后续存储器访问。
·发生异常事件,可能是软件异常,例如由主处理器执行主流而导致的除零错误或其他事件,或者由诸如用户按下设备上的按钮之类的外部事件或从外部设备接收到信号而引起的硬件中断。异常事件可能导致架构状态的重大变化,因此如果在主流的一部分中发生异常,则检查器处理器可能需要能够识别异常发生的点以便避免误报检测错误。虽然可以跟踪异常,例如通过在存储器日志中包括记录异常的发生的条目,但在发生异常事件时完成当前部分并开始下一部分(可能对应于异常处理程序)以减少跟踪异常的开销可以更简单。类似地,从异常处理程序返回到普通代码也可以被视为异常边界事件。
·检测主处理器所执行的程序指令的主流中的控制流改变指令。控制流改变指令(例如,导致程序内的控制流的非顺序改变的分支指令或其他指令)可以在主处理器中经受分支预测,并且如果存在错误预测,则主处理器可能执行本不应该被执行的一系列指令。
因此,如果各部分之间的边界发生在控制流改变指令处,则如果存在错误预测,如果是主流中不需要的那些指令,则可能根本不需要执行与控制流改变指令之后的指令相对应的检查器流。因此,在控制流改变指令处触发边界事件可以通过避免执行不必要的指
令来帮助简化从分支错误预测的恢复并提高检查器处理器的性能。·检测主处理器所执行的程序指令的主流中的检查屏障指令。这可以允许程序员或编译器通过在程序指令的主流中包括检查屏障指令来强制检查器流之间的边界。例如,这在检查器处理器实施如上所述与主处理器不同的指令集架构(ISA)时可能特别有用,因为屏障指令可以简化主流的对应点与不同ISA的检查器流之间的映射。即使主处理器和检查器处理器使用同一ISA,屏障指令也可用于发信号通知在其处包括用于错误检测的检查点特别有用的执行点,例如,因为主流的下一部分将包括大量可能破坏存储器的大量存储器事务。屏障指令也可用于其中多个线程共享对数据的访问的环境,例如,通过基于锁定的机制,其中,一个线程可以锁定对给定数据值的访问以排除其他线程访问它,直到锁定被放弃为止。例如,检查屏障指令可以被包括在使用锁定资源的代码的末端,以在锁定放弃之前强制错误检测检查点,并且另一线程现在可以访问数据。这可以有助于减少错误传播到其他线程的可能性。
·检测与至少一个检查器处理器不支持的操作相对应的预定类型的指令。如上所述,一些检查器处理器可能不支持可由主处理器执行的每种类型的处理操作。在这种情况下,当遇到与仅在一些处理器上支持的操作之一相应的指令时,结束当前部分以使得用于当前部分的检查器流仍能够被分配给任何检查器处理器而无论它们是否支持这种类型的操作可能是有用的。例如,在其中仅一些检查器处理器支持浮点运算的实施例中,该方法可能特别有用,因为通常一旦遇到一个浮点运算,许多后续运算也可能是浮点运算,因此通过在第一次遇到的浮点运算处开始一部分,整个浮点运算序列将更可能适配于主流的较少部分,以减少必须分配给支持浮点运算的检查器处理器的检查器流的数量。这可以实现检查器流的更高效调度并提高检查器处理器的利用率,减少由于相关检查器处理器不可用于处理所需的处理操作集合而导致停止的可能性。
·检测自先前的检查边界事件以来在主流中执行的指令对应于检查器处理器之一的至少阈值量的累积工作负载。如果每个检查器流的执行时间大致相等,则可以减少总体错误检测延迟。由主处理器执行的一些指令可以对应于检查器处理器的比其他指令更多的工作。例如,如果主处理器支持向量指令的处理但检查器处理器使用一系列标量计算来执行操作,则主流的一个向量指令可以与检查器处理器的比主流一个标量指令更大的工作负载(执行时间)相对应。在这种情况下,为了平衡各个检查器流的负载,包含N通道向量指令块的主流的一部分可以在包含基本标量操作的一个部分将被停止的指令数量的1/N之后停止。因此,在处理与主流的当前部分相对应的指令时提供对针对检查器处理器迄今发生的累积工作负载的量的跟踪,并且在累积工作负载超过阈值时触发检查边界事件可能是有用的。对累积工作负载的跟踪可能相对不精确,并且不需要精确地对应于每个操作所花费的执行时间量
(其在任何情况下可能随实例而变化)。例如,实施跟踪的一种方式可以是提供在检查边界处重置的计数器,并且然后对于每个标量指令递增1并对于每个向量指令递增向量通道的数量,以及在计数器超过阈值时触发检查边界事件,并在每个检查边界事件上重置计数器。更一般地,给定计数器增量值(例如,1、2、
3……)可以基于对处理检查器处理器的相应操作所涉及的工作负载量的估计来分配给每种类型的指令,并且这可以用于对累积工作负载进行计数并在计数达到阈值时触发检查边界事件。
·自先前检查边界事件发生以来经过预定时间段。非常长的检查器流可能是不期望的,因为它可能占用检查器处理器相当长的一段时间并增加错误报告延迟。在一些应用中,可能需要在某个最大延迟内执行错误检查,因此为了确保检查器流不会变得过大,定义超时特征可能是有用的,即使没有其他类型的检查边界事件发生,如果自先前的检查边界事件起已经经过预定时间段,则停止主流的当前部分并分配新检查器流。可以根据经过的处理周期的数量、经过时间、或所执行的程序指令的数量来测量预定时间段。
因此,可以提供一系列不同的检查边界事件。注意,任何特定实施例不需要实施所有这些类型的检查边界事件。给定实施例可以实施包括这些类型的检查边界事件中的任何一个或多个的子集。
在一些实施例中,主处理器可以不是数据处理装置中的唯一处理器,并且可能存在各自需要检查错误的多个处理器。因此,可能存在各自执行程序指令的相应主流的两个或更多个主处理器。在一些示例中,每个主处理器可以具有其本身的一组专用检查器处理器,用于执行检查流以检查由该主处理器所执行的主流的对应部分。
然而,通常虽然可能需要一定数量的检查器处理器来处理检查主流中的错误所需的峰值负载,但检查器处理器上的平均负载可能低于峰值负载,并且因此分配给给定主处理器的检查器处理器通常可能无法被充分利用。
因此,在具有多个主处理器的实施例中,在主处理器之间共享一组检查器处理器可能更高效,使得该组的每个检查器处理器可以执行与由任何主处理器执行的主流的一部分相对应的检查器流。这允许提供足够的检查器处理器来处理任何一个主处理器的峰值负载,但可以基于每个主处理器的平均负载来确定检查器处理器的数量,以减少总共提供的检查器处理器的数量。
替代地,可以使用混合方法,其中,给定主处理器具有专用于处理对应于该主处理器的检查器流的至少一个检查器处理器,以及所提供的可用于执行任何主处理器的检查器流的检查器处理器的共享池。
在一些实施方式中,错误检测电路实际上可以将检查器流的结果与主流本身的对应部分的结果进行比较,并且在比较检测到不匹配时检测错误。因此,错误检测电路可以具有用于将从检查器流产生的寄存器状态与寄存器检查点状态进行比较的硬件比较器,以及用于将存储数据与存储器日志中的数据进行比较的比较器。
另一方面,在其他实施例中,主流结果和检查器流结果之间的比较可以通过将比较流分配给检查器处理器之一来以软件的方式执行。在这种情况下,错误检测电路可以基于由检查器处理器执行的比较流的结果来检测错误,并且如果比较检测到不匹配则断言错误信号,但不实际执行比较本身。在这样的实施例中,错误检测电路可以包括被配置为使得检查器处理器响应于完成检查器流被完成而执行比较流的电路。
图1示出了数据处理装置2的示例,该数据处理装置2包括用于处理程序指令的主流的主处理器4。该示例中的主处理器4是无序处理器,该无序处理器包括提取和解码逻辑6和无序执行硬件10,其中,提取和解码逻辑6用于从指令缓存8提取指令并对所提取的指令进行解码,并且无序执行硬件10支持以与由提取/解码逻辑6从缓存8提取指令的程序顺序不同的顺序执行经解码的指令。提交逻辑12跟踪已经执行了哪些指令,并且在已经执行了程序顺序中的任何先前指令时提交由指令引起的架构状态的改变。所提交的架构状态表示例如在分支错误预测的情况下可以向其回滚处理的最后已知的安全执行点。无序执行允许如果稍后的指令独立于停止指令,则在等待操作数变为可用的先前停止指令之前执行稍后的指令,实现比有序处理器更高的性能。将理解的是,图1示出了高水平下的无序流水线,并且任何已知的无序流水线设计可以用于主处理器4。还将理解的是,主处理器不限于是无序处理器,并且它可以是能够以比检查器处理器20更高的速率处理指令的任何类型的处理器,例如,超标量有序处理器。
装置2还包括一组检查器处理器20,其用于检查由主处理器4处理的主流中的错误。每个检查器处理器20支持处理具有比主处理器4更低的最大指令吞吐量的指令。例如,每个检查器处理器20可以是较小处理器,其具有比主处理器4更低的功耗和每计算单元更小的电路面积,但其以更低的性能操作,使得给定量的处理工作负载在检查器处理器20上比在主处理器4花费更长的时间来完成。例如,检查器处理器20可以具有比主处理器4更少的流水线级,并且可以具有更少(或更不复杂)的性能增强特征,例如,分支预测。检查器处理器20可以是有序处理器。
装置2还具有寄存器检查点电路24和存储器日志电路26,其中,寄存器检查点电路24用于存储以规则或不规则间隔从主处理器4的寄存器捕获的多组架构状态数据,并且存储器日志电路26用于在处理主流期间跟踪由主处理器4执行的存储器访问的地址和数据值。在图1的示例中,每个检查器处理器20具有寄存器检查点电路24中的对应条目和存储器日志电路26中的对应条目,但其他实施例可以提供一些备用条目。在图1的示例中,寄存器检查点电路24和存储器日志电路26使用组合存储结构,但寄存器检查点电路24和存储器日志电路26还可以被分成单独的结构。在一些实施例中,可以通过在检查器处理器20中与寄存器文件共享寄存器检查点电路24来减小所需的面积。因此将理解,图1仅示出了概念,并且其他实施例可以使用不同的电路布置来实施该技术。
控制电路22控制将程序指令的检查器流分配到相应的检查器处理器20。如图2所示,由主处理器4执行的程序指令的主流30被分成部分32。虽然图2示出了其中每个部分32具有相同尺寸的示例,但这不是必需的,并且一些实施例可以使用可变大小的分区,其中,当如上所述发生多个检查器边界事件中的一个时触发部分之间的边界。当主处理器4开始处理主流30的给定部分时,控制电路22选择可用的检查器处理器20,并开始填充该检查器处理器的存储器日志电路26的对应条目。当主处理器4到达部分32的末端时,获取主处理器4的当前架构状态的快照并将其存储到寄存器检查点条目之一。然后,所选择的检查器处理器20开始处理与主流30的最近完成的部分32相对应的程序指令的检查器流34。由于检查器处理器20以比主处理器4更低的性能操作,因此完成对应操作将花费更长时间。当检查器处理器20到达检查器流34的末端时,错误检测电路28将该检查器处理器20的所产生的架构状态与存储在对应寄存器检查点电路24中的架构状态的快照进行比较。如果比较检测到不匹配,则错误检测电路28发送已发生错误的信号,这可以触发恢复操作,例如,从先前的程序执行点恢复到主处理器4的先前架构状态,或触发***重启。此外,在处理给定检查器流34期间,如果与存储操作相关联的数据值与针对存储器日志电路26中的相同地址所记录的数据值不同,则错误检测电路28也触发错误信号。
如图2所示,提供了多个检查器处理器20,以用于彼此并行地执行相应的检查器流34,使得即使每个检查器处理器20比主处理器4更慢,但检查器处理器20的集合整体上可以并行地检查主流30的不同部分的错误,以使得检查器处理器能够跟上主处理器的执行速率。换句话说,通过并行执行重复错误检测任务,可以使用小得多的检查器处理器20的阵列来对主处理器4进行故障检测。这是通过基于来自主处理器的寄存器检查点来分割执行来完成的。然后可以在几个较小的检查器处理器上同时再次运行每个部分。由于故障检测的重复执行可以跨许多微型处理器并行执行,因此在面积和功耗方面,执行重复任务的效率要比双核锁步方法好许多倍。例如,使用典型的微控制器和无序处理器的典型面积和功耗数字的计算表明,该组检查器处理器20的额外开销占主处理器4的面积/功耗的百分比将为大约10-20%,而相对于双核锁步***而言则为100%。
图2示出了一个示例,其中示出了每个检查器处理器20在主流的对应部分已经在主核上完成之后开始执行其检查器流。该方法的优点在于,其比实施用于将存储器操作与加载/存储日志进行比较的比较逻辑更简单。
然而,用于减少错误检测延迟的替代方法可以是在主处理器4开始执行主流的对应部分时,启动检查器处理器20执行检查器流(其中主流的该部分和对应的检查器流并行执行)。利用该方法,检查器处理器20可以达到尚未分配给加载/存储日志的存储器操作(例如,如果主处理器4遇到缓存未命中,因此还不能更新日志)。在这种情况下,如果在检查器处理器20到达对应存储器操作时加载/存储日志的所需条目不可用,则用于将由检查器处理器20执行的存储器操作与存储器日志电路26进行比较的逻辑可以输出“未就绪”指示。如果检查器核接收到“未就绪”指示,则它可以停止其执行,直到日志条目可用为止。替代地,对于存储操作,对应的存储器日志条目未就绪的检查器流中的存储操作的数据值和地址可以被存储在较小存储结构中,并且稍后在存储器日志条目变得可用时与存储器日志条目进行比较。
在图1的示例中,检查器处理器20具有与主处理器4所使用的L1指令缓存8分开的指令缓存40,并且不访问数据缓存,因为可以通过将加载的数据和地址存储在存储器日志电路26的相关条目中,经由存储器日志电路26将主处理器的来自L1数据缓存42的加载操作的结果转发到检查器处理器20。可以提供共享L2缓存44,以用于存储由主处理器4访问的数据和由主处理器4或检查器处理器20执行的指令。检查器处理器还可以各自具有自身的缓存。
然而,减小存储器日志的大小的另一方法将是仅在存储器日志中记录存储操作,并允许检查器处理器20独立地从缓存检索加载数据。在这种情况下,检查器处理器可以具有与主处理器4的L1数据缓存42分开的数据缓存。然而,实际上,由于微型检查器处理器的执行遮蔽主处理器的执行,因此检查器处理器所需的数据可能在主处理器4的L1数据缓存42或其他附近缓存(例如,共享L2缓存44)中可用,并且因此对于检查器处理器20,简单地共享由主处理器4使用的相同的(一个或多个)数据缓存可能更高效。
如果主处理器在检查器处理器执行加载之前对缓存中的数据执行存储,则这种不在存储器日志中记录加载操作的方法可能引起误报错误。如果这种错误足够少见,则这可以是可接受的以降低存储器日志的复杂性。然而,为了解决此问题,可以使用混合方法,其中,日志通常不保持加载数据,但在需要时使用写入技术的副本来将所选加载的加载数据添加到日志。
图3是示出在主处理器4上处理主流的方法的流程图。在步骤50处,主处理器4开始处理来自主流的指令。在步骤52处,主处理器4确定提交逻辑12是否已经提交存储指令(或者在跟踪所有或一些加载的实施例中,所选择的加载操作)。如果是,则在步骤54处,将存储或加载的数据值和存储器访问的目标地址写入当前存储器日志条目,该当前存储器日志条目54被填充用于主流30的当前部分32。如果所提交的指令不是存储或所选择的加载,则省略步骤54。在另一实施例中,目标地址可以仅被存储在存储器日志条目中以用于存储操作。如果加载的地址不正确,但加载返回的值是正确的,则***仍将正常运行,因此不需要检测这样的错误。这可以减少存储器日志中所需的存储量。
该方法然后进行到步骤56,其中,确定是否已经发生检查边界事件。检查边界事件可以是上面提到的任何类型的边界事件。如果未发生检查边界事件,则该方法返回到步骤50以继续处理主流。如果发生检查边界事件,则在步骤58处,主处理器从其内部寄存器读取架构状态数据,并将读取的状态数据写到检查点电路24的当前检查点条目。例如,状态可以包括寄存器数据、诸如程序计数器、堆栈指针或函数返回地址之类的控制数据、对当前处理模式的指示等。在步骤60处,检查器分配控制电路22切换寄存器检查点条目和存储器日志条目中的哪个是当前填充条目,并且新选择的条目是对应于可用检查器处理器20的条目。在步骤62处,控制电路22触发与寄存器检查点电路24和存储器日志电路26的先前选择的条目相对应的检查器处理器,以开始处理对应于主流的最近完成部分的检查器流。同时,该方法继续到步骤50以继续处理主流30的下一部分。
将理解的是,代替执行步骤58以在检查边界事件发生之后将主处理器状态写到寄存器检查点,替代地可以在整个处理主流30的部分期间连续地执行检查寄存器状态。在这种情况下,在主处理器所执行的每个指令被提交时将更新寄存器检查点电路24。如果在步骤56处遇到检查点边界事件,则当前寄存器检查点将已经包含架构状态,并且检查点边界事件将通过进行到步骤60并省略步骤58来简单地触发选择下一寄存器检查点。这样的实施例可以更容易实施,因为在遇到检查点边界事件时需要执行较少工作。
图4示出了流程图,该流程图图示由检查器处理器20之一处理检查器流。在步骤70处,利用来自检查点条目的架构状态初始化检查器处理器,该检查点条目定义主流的相应部分的开始处的寄存器状态。在步骤72处,检查器流开始由检查器处理器20处理。在步骤74处,要确定检查器处理器20是否遇到存储操作。如果是,则在步骤76处,要确定与由检查器处理器20执行的存储相关联的数据值是否与存储在存储器日志的下一条目中的数据和地址相匹配,并且如果存在不匹配,则在步骤78处,错误检测电路28发送错误的信号。如果在步骤76处存储数据和地址与存储器日志相匹配,或者未遇到存储操作,则在步骤80处,要确定是否已到达检查器流的结束。如果否,则在步骤72处继续处理检查器流。在检查器流完成时,在步骤82处,错误检测电路将检查器处理器的状态与下一检查点条目(用于在步骤70处初始化检查器处理器的检查点条目之后的条目)中显示的状态进行比较,并且如果存在匹配,则在步骤84处发送没有错误的信号,因此主流的对应部分被验证为没有错误。如果检测到检查器处理器的架构状态与存储在下一检查点条目中的状态之间的不匹配,则在步骤78处再次发送错误的信号。
注意,虽然通常寄存器检查点的数量可以对应于检查器处理器20的数量,但用于在步骤70处初始化检查器处理器的检查点条目还是存储将在步骤82处在检查器流的末端进行比较的状态的检查点条目被认为是对应于该检查器处理器20的条目是实施方式选择,并且可以使用任一方法。因此,在第一种情况下,使用其自身的寄存器检查点电路的条目来初始化给定检查器处理器,并且该比较使用存储在对应于下一所选择的检查器处理器的条目中的状态数据。在第二种情况下,使用先前选择的检查器处理器的条目来初始化给定检查器处理器,然后在步骤82处的比较使用该检查器处理器自己的检查点电路24的条目。
在一些情况下,检查器处理器20可以执行与主处理器相同的ISA。然而,即使ISA是相同的,检查器处理器20也可以具有与主处理器4不同的微架构,例如,检查器处理器20可以不支持全宽度向量执行,并且替代地检查器处理器可以顺序执行向量指令的通道。为了补偿这一点并且保持检查器处理器对每个检查器流34的执行时间大致相等,部分32的大小可以根据所执行的工作量而变化。例如,主流的完全由4通道向量操作组成的部分32可以包含1/4的指令作为仅包含基本整数指令的块。这种根据检查器处理器20的资源来缩放块的大小的方法也可以扩展到处理其他微架构差异。例如,如果检查器处理器20不具有流水线浮点乘法累加ALU并且在主流30中执行浮点乘法累加指令,则可以使用较小块大小。
此外,每个检查器处理器的微架构可能不同。因此,并非所有检查器处理器都需要支持可由主处理器4执行的每个可能的操作。例如,并非所有检查器处理器都必须支持浮点运算。在这种情况下,仅不包含浮点指令的检查器流将被分配给没有浮点单元的检查器处理器。为了帮助减少包含浮点指令的部分32的比例,如果一个部分在在该部分内第一次遇到浮点指令时接近其自然终点,则可以提前终止该部分。
为了进一步减小检查器处理器20的面积,它们可以运行与主处理器4不同的ISA。这可以是主处理器4上的ISA的缩减版本,或者完全独立的ISA。这可以以若干不同的方式来处理:
·可以使用运行时转换方法将在主处理器4上运行的代码转换为检查器处理器20所需的ISA。转换代码可以作为与主流30本身分开的线程在主处理器4上运行。
·用于生成主流30的代码的工具链可以针对不同的ISA编译软件两次。在需要故障检测的更严格控制的环境(例如,汽车应用)中,这种方法可能是优选的以消除需要证明转换代码是安全的。为了简化两个编译的二进制文件之间的映射,实现可以在主处理器4上执行的将强制部分32之间的检查点的检查屏障指令可能是有用的。提供检查屏障指令还将使得能够在编译时执行块的动态大小调整,这减少了硬件需要执行的工作量(即使在在检查器处理器20运行与主处理器4相同的ISA的实施例中,这也将是优势)。
通过将存储操作保持在主处理器4的提交阶段12直到检查器处理器已到达相关联指令为止,可以在检测到错误时使用寄存器检查点作为恢复机制。替代地,为了降低所需的加载-存储转发硬件的复杂性,可以使用混合方法,其中,对第一存储器区域(例如,设备类型存储器)的存储被保持在提交阶段,而对第二存储器区域(例如,普通存储器)的存储触发用于填充回滚日志的写入技术的副本。
检查器处理器上的峰值负载通常高于平均负载。为了减少对过度供应检查器处理器的需要,可以在两个或更多个主处理器4的集群之间共享检查器处理器20的池,如图5所示。图5示出了具有M个主处理器4和N个检查器处理器20的示例,其中,N>M。如果需要给定数量A的检查器处理器20来满足单个主处理器4的峰值负载,则在主处理器4之间共享检查器处理器20以使得可以使用每个检查器处理器20来执行来自任何主处理器4的检查器流,使得能够利用N<A*M个检查器处理器20来执行错误检查,因为不太可能所有主处理器4将同时遇到其峰值负载,并且平均负载可能更小。
以下阐述特定实施例的更具体细节。
动机
为了实现低功耗和低芯片面积故障检测,同时支持相对高性能处理器的错误检测,我们提供了一种并行化故障检测计算的方法。如果原始计算表现出线程级并行性,则这将是微不足道的:我们可以将工作负载和检测二者分成一组简单的核。然而,通常要检查错误的主应用在较大无序核上运行,因为它们表现出很小线程级并行性,并且主要是顺序的。
然而,即使原始程序是顺序的,仍然可以并行化错误检测。我们可以使用强感应原理来一次性检查所执行程序的多个部分。也就是说,我们可以检查程序的给定部分,假设所有先前的部分都是正确的。如果我们针对程序的每个部分证明这一点,就可以证明整个程序没有硬件故障。
这意味着在计算上我们可以重叠这些检查中的每一个并在多个低功耗核上运行它们,如图2所示。实际上,我们可以通过从原始计算核中获取周期性寄存器检查点来分割计算,并使用这些检查点生成检查器线程,这些线程在两个检查点之间重复计算,并且允许重叠。由于计算已经完成一次,并且检查器线程正在重复冗余计算,我们可以为每个单独检查的目的假设寄存器检查点是正确的。由于已经观察到存储器值,在线程之间还没有竞争条件:我们可以单独存储来自每个区段的加载和存储值,这允许检查器线程读取相同的存储器值并检查存储的地址和值。一旦完成每个检查,我们可以针对在该特定区段的末端处从原始计算获得的寄存器文件来检查新计算的寄存器文件。
如果检查失败,即使将来的检查成功,我们也无法证明稍后的计算是正确的。这是因为强感应假设所需的计算的先前部分的正确性的假设不成立。一旦完成对给定点的所有检查,就知道正确性。类似地,如果在检查中检测到错误,我们不知道这是第一个错误,直到所有先前的检查完成。尽管如此,这样的***为我们提供了足够的能力来识别发生了错误,以及第一个错误的位置,从而提供了一种实用的错误检测机制。
概述
图1给出了我们的***的概述。我们将一组微控制器大小的核附接到无序处理器,以便高效地重复来自原始核的计算。由主核执行的加载和存储被存储在硬件加载存储日志中,其被分成多个区段,每个区段由不同的微控制器并行检查。微控制器还在每个区段的开头和结尾处被提供寄存器文件的副本,以由此开始执行。
诸如缓存和DRAM之类的存储器块可以由诸如纠错码(ECC)之类的另一方案来保护,使得它们不需要被复制:使用检查器处理器的检测方案仅覆盖核内的错误。在一些实施例中,指令流是只读的,使得由检查器单元读取的指令将与由主线程读取的指令相同。这是一种常见的设计选择,但即使需要写入指令流,也可以通过要求在修改指令流之前完成对先前执行的指令的任何检查来适应这一点。
一些实施例提供了仅提供软错误和硬错误的检测而非校正的方案。检测到错误可能触发程序中的异常,这可能被捕获和处理,或者可能触发程序的终止。可以允许不正确的值在检测到的错误上传播到主存储器和设备中:异常触发的语义可以设计为将此考虑在内以包括向其他设备或线程报告错误。
下面讨论的方案是一种硬件方案,其中,完成错误检测而不修改原始程序。在下面给出的示例中,相同的代码可以在微控制器上运行,就像在主核上一样:在加载和存储检查方面的不同行为以及在到达寄存器检查点时的停止可以使用硬件逻辑来实现。然而,如上所述,其他示例可以在检查器处理器20上实施与主处理器4相比不同的ISA,但即使在这种情况下,主处理器4或检查器处理器20也不需要执行用于读取存储器日志和寄存器检查点或比较寄存器状态的指令来检测错误——这可以使用硬件逻辑来完成。
微控制器
多个微控制器大小的检查器处理器20被附接到主无序核,以便运行冗余故障检测代码。我们要求它们中的多个能够与主核保持同步:出于功耗和芯片面积的原因,它们更小、有序,并且以比无序核更低的时钟速度运行。在该示例中,为了能够运行与无序核相同的指令流,每个微控制器执行与主核相同的指令集架构。然而,由于唯一需要检查正确性的状态是架构,因此允许微架构实施方式细节不同。
由于微控制器执行与主核相同的工作,因此所读取的许多指令可能已经在L2缓存中。微控制器也可以彼此共享代码。这些因素以及指令缓存的有限区域预算导致高效缓存结构是连接到主核的L2缓存44的微控制器的共享L1缓存40,以及用于每个微控制器的一组非常小的L0指令缓存。由于微控制器仅从日志而不是主存储器访问数据,并且对该结构的所有访问都是顺序的,因此不需要数据缓存。
当收集加载和存储的流以及流的开始和结束处的架构寄存器检查点时,利用来自起始寄存器文件的相应程序计数来启动微控制器。然后运行原始指令流,仅针对加载和存储具有不同的行为:不是从缓存或主存储器中读取,加载从主核查看加载和存储的日志中的下一个值,然后返回最初记载的值。在存储中,硬件逻辑检查地址和所存储的值二者以确保它们是相同的。如果存储检查失败,则针对主核引发错误异常。
当流结束时,微控制器停止执行。此时,检查寄存器文件与在原始流结束时获取的架构寄存器文件的一致性,并然后将微控制器置于省电状态,直到准备好检查另一个流为止。
分区加载存储日志
主核和检查器核二者从存储器中的相同的地址读取。然而,由于检查器核在主核之后执行相同的代码,因此如果从主存储器本身读取则值可能不同。因此,我们将加载的结果从主核转发到SRAM日志,以便微控制器读取。
我们进一步使用同一结构来存储加载的地址,以及存储的地址和值。针对由微控制器计算的值来检查这些项以检测执行中的错误。
当无序核上的加载和存储提交时,在硬件中收集上述信息。然后将其存储到SRAM中:由于数据按顺序被存储和读取,因此其也可以被存储到主存储器中而没有明显损失,但为了简化设计,数据可以保留在芯片上。通过在提交时收集数据,数据按照其在有序微控制器上使用的顺序进行存储:为检查加载或存储,只需要读取日志中的下一个条目。
对加载存储日志进行分区,使得可以由多个微控制器同时检查日志的不同部分。我们通过在每次填充加载存储日志的区段时存储来自主核的架构寄存器检查点来实现这一点。然后,我们利用在填充前一个区段时收集的寄存器检查点来启动微控制器。在检查完成时,将释放日志的相关区段以便再次使用。如果日志的所有区段都已满,则停止主处理器,直到微控制器中的一个完成为止,并清除其队列。如图2所示,在微控制器和加载存储日志分区之间存在一对一的对应关系。这简化了数据路径,使得在日志和核之间不需要仲裁。然而,这也意味着微控制器或主处理器4中的一个总是被停止,否则主核将无处写入其加载和存储。由于每个微控制器相对较小,因此可能优选的是包括具有复杂间接层的额外核,这将增加布线。
加载存储日志的大小
虽然我们希望将加载存储日志划分为多个区段以获得检查并行性,但日志的大小代表了权衡。每次填充区段时,都从主核取出架构寄存器检查点,涉及复制大量寄存器。为了使该成本可以忽略不计,我们可以降低这种情况发生的频率。我们可以通过减少区段的数量来实现这一点,代价是减少并行性的量,或者通过增加加载存储日志的大小,使得每个区段更大。这增加了片上存储要求以及错误检测延迟:由于每个区段较长,微控制器将花费更长时间来检查它,因此报告任何错误的时间更长。
存储器***
与锁步方案相比,我们的方案使得原始执行和给定指令的检查之间的延迟增加:发生这种情况以实现并行性。这意味着阻止存储直到它们已经被检查为止可能是不可行的:针对该数量的存储添加用于加载存储转发的间接表将减慢无错执行的常见情况。因此,我们替代地可以允许潜在的故障存储转移到存储器中。这不会改变***的错误属性:即使我们通过检查点实现容错,仅允许正确结果提交到存储器也并不好,因为这些也需要被撤消以返回检查点。
然而,如果我们允许错误传播到IO***以及主存储器,这确实意味着错误可以传播到其他线程,事实上传播到其他设备。不是尝试跟踪不正确数据的流,将错误报告为异常的软件可以处理向与之进行通信的任何设备报告错误。
中断
对于在主核和检查器核之间看到的加载和存储的模式相同,还应该在当检查器核在主核上时,在检查器核上的代码中的相同点看到中断。对此存在另外的解决方案:一种解决方案是当中断事件到达主核的流水线的提交阶段时,将中断事件***到加载存储日志中。另一解决方案是根据中断拆分检查,并在中断边界上发布早期寄存器检查点。后一解决方案可能轻微地减少队列占用率,但实施起来更简单。
***故障
错误检测方案假设将错误报告给程序本身。然而,一些错误可能导致程序在被检查之前提前终止,例如,区段错误。为避免这种情况,我们阻止进程终止,直到检查器核完成执行为止。如果检查成功,则我们终止该程序。否则,我们发布故障错误,其将由程序处理。
过检测
添加冗余逻辑必然导致在***内发生更多错误:存在更多组件,每个组件都可能引入新错误。然而,如果未被报告,则检查器电路中的错误将不会影响主程序。尽管如此,由于我们无法验证主核和检查器核中的哪个产生了错误结果,我们仍报告错误。
对此的一个解决方案是,在检测到错误时,在不同的微控制器单元上重复检查。如果检查都与主核不一致,则我们才会标记错误。这将以增加的延迟为代价来降低误报率。我们还可以在不同的微控制器上同时运行检查的两个副本:这将需要更多的微控制器,但减少了延迟。然而,假设错误很少,则这些解决方案都不是必需的:我们可能只希望向***报告可能有故障的错误。
为了让我们的***捕获错误,我们检查加载和存储,以及每次检查末端处的寄存器检查点。由于寄存器状态在处理器外部永远不可见,因此可以认为不必检查寄存器状态存在错误。然而,从多个位置并行检查的能力依赖于归纳假设:假设寄存器文件和先前的加载和存储在该点之前是正确的,每个单独的检查都验证加载和存储是正确的。通过检查每个检查点的末端处的寄存器文件,我们可以组合每个单独的检查以覆盖整个程序。
然而,检查错误的寄存器可能不会影响任何未来的加载或存储:例如,它们可能在被再次使用之前被覆盖。然而,由于寄存器的活跃性仅在将来的分区检查中显而易见,因此可能无法对此进行计算,因此可能优选的是报告错误,即使期满在将来的迭代中实际上不会导致问题。然而,应注意,我们不需要检查所有寄存器错误:只要寄存器错误不影响每个分区的末端处的寄存器文件,或任何加载或存储,则它就不会影响程序的正确执行。因此,可以通过增加每个分区的大小来降低误报率,代价是增加检测延迟和存储要求。
错误覆盖
由于检查是在与初始计算分开的硬件上完成的,因此我们的***可以成功地覆盖软故障和硬故障二者。通过覆盖加载和存储,检查器核覆盖处理器的所有外部可见状态。然而,来自存储器***的加载的值未被复制:因为我们使用加载存储日志来转发主核观察到的结果,因此初始加载中的任何错误都将传播。为了防止加载存储日志中的错误,可以使用纠错码(ECC)来保护日志中的加载数据,使得我们具有信息冗余以覆盖错误。类似地,存储器***内的错误未由处理器上的冗余覆盖:我们可以在主存储器和缓存***上使用ECC来覆盖这些故障。
超时
虽然从利用和固定存储空间的角度来看,开始和结束加载存储流的检查的条件是填充和清空加载存储日志的区段是有用的,但有些情况下我们可能希望较早地触发检测。例如,主核可能错误地进入了无加载或存储的无限控制流循环,这意味着不会发布新的检查。类似地,检查器核可能在影响检查器核的错误之下完成相同的操作,这意味着检查永远不会完成。
为了解决前一问题,我们可以引入超时值:发布检查的条件然后变为填充加载存储队列区段或达到最大指令数。为了解决后一问题,我们可以记录在每个区段中提交的指令数。然后,当在加载存储日志区段中检查了所有加载和存储时,或者当所提交的指令数等于在原始核上提交的数量时,我们检查寄存器文件。
可以使用相同的解决方案来触发早期检测,例如,如上所述的中断、分支指令、屏障指令等。
加载转发复制
加载经由加载存储队列从主核被转发到微控制器。如果当数据在加载存储队列中时发生错误,则将由检查核来检测,只要它导致每个检查点的末端处的任何存储或寄存器文件不同。然而,如果主核中的物理寄存器中的加载值发生错误,则在退出指令之前,错误可以被复制到检查器核。对此的解决方案是添加加载复制表:来自缓存的加载被存储在加载复制表中,并在提交时进行检查。如果所加载的值不同,则触发错误。由于推测性加载可以进入此队列,因此每个加载都利用基于指令的ID进行标记:可以从表中安全地删除具有早于当前退出指令的ID的加载。
其他修改
除了加载和存储地址和数据之外,还可以在加载存储日志中存储其他信息以提高微控制器的性能。例如,如果执行正确,则检查器核和主核之间的分支信息将是相同的。因此,可以将该信息用作检查器核的分支预言,以在微控制器处提供一些性能提升。此外,存储器日志可以存储分支的目标:这将允许日志用作非常高效的指令预取器,可能减少微控制器的指令缓存要求。
在本申请中,词语“被配置为……”用于表示装置的元件具有能够执行所定义的操作的配置。在此上下文中,“配置”表示硬件或软件的互连的布置或方式。例如,装置可以具有提供所定义的操作的专用硬件,或者可以被编程为执行功能的处理器或其他处理设备。“被配置为”并不意味着需要以任何方式改变装置元件以便提供所定义的操作。
尽管本文已经参考附图详细描述了本发明的说明性实施例,但应理解,本发明不限于那些精确的实施例,并且本领域技术人员可以在其中实现各种改变和修改,而不脱离由所附权利要求限定的本发明的范围和精神。
Claims (24)
1.一种用于数据处理的装置,包括:
主处理器,所述主处理器用于执行程序指令的主流;
多个检查器处理器,所述多个检查器处理器用于彼此并行地执行程序指令的相应的检查器流,所述检查器流与所述主处理器所执行的所述主流的不同部分相对应;以及
错误检测电路,所述错误检测电路用于当在所述主处理器上执行的所述主流的给定部分的结果与在所述多个检查器处理器之一上执行的所对应的检查器流的结果之间检测到不匹配时检测错误。
2.根据权利要求1所述的装置,其中,所述主处理器能够以比所述检查器处理器中的每个检查器处理器更大的指令吞吐量来处理程序指令。
3.根据前述权利要求中的任一项所述的装置,包括检查点电路,所述检查点电路用于存储多个检查点条目,每个检查点条目指示在执行所述主流期间响应于相应的检查边界事件而捕获的所述主处理器的架构状态。
4.根据权利要求3所述的装置,其中,对于每个检查器流,所述所对应的检查器处理器被配置为使用由所述检查点电路的一个检查点条目指示的架构状态来开始处理所述检查器流,并且所述错误检测电路被配置为当在由所述检查器处理器响应于所述检查器流而生成的架构状态和由所述检查点电路的后续检查点条目指示的架构状态之间检测到不匹配时检测所述错误。
5.根据权利要求3所述的装置,其中,所述错误检测电路响应于检测到所述错误来基于所述检查点电路的检查点条目之一触发错误恢复操作。
6.根据权利要求1所述的装置,包括存储器日志电路,所述存储器日志电路用于捕获多个存储器日志条目,每个存储器日志条目包括跟踪数据,所述跟踪数据指示在所述主流的对应部分期间由所述主处理器触发的存储器访问的数据值和地址。
7.根据权利要求6所述的装置,其中,所述存储器日志电路被配置为捕获存储器日志条目,所述存储器日志条目至少包括针对下列项之一的跟踪数据:
仅存储操作;
加载操作和存储操作二者;
存储操作,以及与加载相关联的地址被标记为不可缓存的一个或多个所选择的加载操作;
存储操作,以及加载操作被标记为非临时访问的一个或多个所选择的加载操作;以及
存储操作,以及所述主处理器已经在检查器处理器执行所述检查器流中对应的加载操作之前执行了针对相同地址的后续存储操作的一个或多个所选择的加载操作。
8.根据权利要求6和7中的任一项所述的装置,其中,每个检查器处理器被配置为:当在所述检查器流之一的处理期间执行加载操作时,从所述存储器日志电路的对应存储器日志条目获得要加载的数据值。
9.根据权利要求6和7中的任一项所述的装置,其中,所述错误检测电路被配置为:根据由所述检查器处理器之一针对给定地址要存储的数据值与在所述给定地址的对应存储器日志条目中所记录的数据值是否匹配,来检测针对给定存储操作是否发生错误。
10.根据权利要求9所述的装置,其中,所述主处理器被配置为:响应于以地址空间的至少一个第一区域中的地址为目标的存储指令而推迟将存储器事务提交到存储器,直到所述错误检测电路已检测到针对该存储指令是否发生错误为止。
11.根据权利要求9所述的装置,其中,所述主处理器被配置为:响应于以地址空间的至少一个第二区域中的地址为目标的存储指令,在所述错误检测电路已检测到针对该存储指令是否发生错误之前,将存储器事务提交到存储器。
12.根据权利要求11所述的装置,其中,响应于以所述第二区域中的给定地址为目标的所述存储指令,所述主处理器被配置为将与所述给定地址相关联的先前值记录在回滚日志中。
13.根据权利要求6和7中的任一项所述的装置,其中,所述主处理器包括无序处理器,所述检查器处理器包括有序处理器,并且所述存储器日志电路被配置为在给定存储器访问指令由所述主处理器提交时更新所述存储器日志条目之一以指示所述给定存储器访问指令的数据值和地址。
14.根据权利要求1、2、6和7中的任一项所述的装置,包括控制电路,所述控制电路用于将相同的检查器流分配给所述检查器处理器中的两个或更多个检查器处理器。
15.根据权利要求1、2、6和7中的任一项所述的装置,其中,所述检查器处理器中的至少一个检查器处理器被配置为支持至少一个其他检查器处理器不支持的至少一种类型的处理操作。
16.根据权利要求1、2、6和7中的任一项所述的装置,其中,所述检查器流包括根据与所述主流的程序指令不同的指令集架构定义的程序指令。
17.根据权利要求16所述的装置,其中,所述检查器处理器被配置为执行定义所述检查器流的检查器二进制代码,所述检查器二进制代码独立于定义所述主流的主二进制代码。
18.根据权利要求16所述的装置,其中,所述检查器处理器被配置为执行定义所述检查器流的检查器二进制代码,所述检查器二进制代码包括通过定义所述主流的主二进制代码的运行时转换获得的转换二进制代码。
19.根据权利要求1、2、6和7中的任一项所述的装置,包括多个主处理器,所述多个主处理器用于执行程序指令的多个主流:
其中,所述多个检查器处理器在所述多个主处理器之间被共享以执行与由所述多个主处理器执行的所述多个主流的不同部分相对应的检查器流。
20.根据权利要求1、2、6和7中的任一项所述的装置,其中,每个检查器流与所述主流的由所述主处理器在两个连续的检查边界事件之间执行的一部分相对应。
21.根据权利要求20所述的装置,其中,每个检查边界事件包括下列项之一:
占用存储器日志条目,所述存储器日志条目用于响应于所述主流达到阈值占用水平或更高水平来跟踪由所述主处理器执行的存储器访问;
发生异常事件或异常返回;
检测到由所述主处理器执行的程序指令的所述主流中的控制流改变指令;
自发生先前的检查边界事件起经过了预定时间段;
检测到由所述主处理器执行的程序指令的所述主流中的检查屏障指令;
检测到与所述检查器处理器中的至少一个检查器处理器不支持的操作相对应的预定类型的指令;
检测到自先前的检查边界事件起在所述主流中执行的指令与所述检查器处理器之一的至少阈值量的累积工作负载相对应。
22.根据权利要求1、2、6和7中的任一项所述的装置,其中,所述错误检测电路被配置为检测所述主流的给定部分的结果与所述所对应的检查器流的结果之间的所述不匹配。
23.根据权利要求1、2、6和7中的任一项所述的装置,其中,所述错误检测电路被配置为触发所述检查器处理器之一来检测所述主流的给定部分的结果与所述所对应的检查器流的结果之间的所述不匹配。
24.一种数据处理方法,包括:
在主处理器上执行程序指令的主流;
在多个检查器处理器上并行地执行程序指令的相应检查器流,所述检查器流与所述主处理器所执行的所述主流的不同部分相对应;以及
当在所述主处理器上执行的所述主流的给定部分的结果与在所述多个检查器处理器之一上执行的所对应的检查器流的结果之间检测到不匹配时检测错误。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1618655.3A GB2555628B (en) | 2016-11-04 | 2016-11-04 | Main processor error detection using checker processors |
GB1618655.3 | 2016-11-04 | ||
PCT/GB2017/053179 WO2018083441A1 (en) | 2016-11-04 | 2017-10-20 | Main processor error detection using checker processors |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109891393A CN109891393A (zh) | 2019-06-14 |
CN109891393B true CN109891393B (zh) | 2023-09-01 |
Family
ID=60182814
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780066948.9A Active CN109891393B (zh) | 2016-11-04 | 2017-10-20 | 使用检查器处理器的主处理器错误检测 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10909006B2 (zh) |
CN (1) | CN109891393B (zh) |
GB (1) | GB2555628B (zh) |
WO (1) | WO2018083441A1 (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102018213618A1 (de) * | 2018-06-20 | 2019-12-24 | Robert Bosch Gmbh | Kryptografiemodul und Betriebsverfahren hierfür |
US11200312B1 (en) * | 2018-07-02 | 2021-12-14 | Rockwell Collins, Inc. | Dual lock step processor system |
KR20200053886A (ko) * | 2018-11-09 | 2020-05-19 | 삼성전자주식회사 | 뉴럴 프로세싱 유닛, 뉴럴 프로세싱 시스템, 및 어플리케이션 시스템 |
US11086715B2 (en) * | 2019-01-18 | 2021-08-10 | Arm Limited | Touch instruction |
US11036515B1 (en) | 2019-06-20 | 2021-06-15 | Marvell Asia Pte, Ltd. | System and method for instruction unwinding in an out-of-order processor |
US10996957B1 (en) * | 2019-06-20 | 2021-05-04 | Marvell Asia Pte, Ltd. | System and method for instruction mapping in an out-of-order processor |
US11556413B2 (en) * | 2019-12-09 | 2023-01-17 | SiFive, Inc. | Checker cores for fault tolerant processing |
CN111104243B (zh) * | 2019-12-26 | 2021-05-28 | 江南大学 | 一种低延迟的双模lockstep容软错误处理器*** |
CN111427821B (zh) * | 2020-03-19 | 2021-10-01 | 深圳震有科技股份有限公司 | 双核amp***共用spi接口的方法、***及存储介质 |
CN113655745B (zh) * | 2021-08-19 | 2023-04-07 | 无锡中微亿芯有限公司 | 一种实现配置码流自动检纠错的fpga |
US12019733B2 (en) * | 2022-03-11 | 2024-06-25 | Intel Corporation | Compartment isolation for load store forwarding |
CN114579083B (zh) * | 2022-05-09 | 2022-08-05 | 上海擎昆信息科技有限公司 | 一种基于矢量处理器的数据处理装置和方法 |
GB2619989A (en) * | 2022-12-21 | 2023-12-27 | Imagination Tech Ltd | Scheduling of duplicate threads |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103140828A (zh) * | 2010-09-25 | 2013-06-05 | 英特尔公司 | 基于硬件限制利用可调事务尺寸来动态优化代码的装置、方法和*** |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB1245072A (en) * | 1969-02-17 | 1971-09-02 | Automatic Telephone & Elect | Improvements in or relating to checking and fault indicating arrangements |
IT1213344B (it) * | 1986-09-17 | 1989-12-20 | Honoywell Information Systems | Architettura di calcolatore a tolleranza di guasto. |
EP0312764A3 (en) * | 1987-10-19 | 1991-04-10 | International Business Machines Corporation | A data processor having multiple execution units for processing plural classes of instructions in parallel |
US5138708A (en) | 1989-08-03 | 1992-08-11 | Unisys Corporation | Digital processor using current state comparison for providing fault tolerance |
US7017073B2 (en) * | 2001-02-28 | 2006-03-21 | International Business Machines Corporation | Method and apparatus for fault-tolerance via dual thread crosschecking |
US6928583B2 (en) * | 2001-04-11 | 2005-08-09 | Stratus Technologies Bermuda Ltd. | Apparatus and method for two computing elements in a fault-tolerant server to execute instructions in lockstep |
US7194671B2 (en) * | 2001-12-31 | 2007-03-20 | Intel Corporation | Mechanism handling race conditions in FRC-enabled processors |
JP3606281B2 (ja) * | 2002-06-07 | 2005-01-05 | オムロン株式会社 | プログラマブルコントローラ及びcpuユニット並びに特殊機能モジュール及び二重化処理方法 |
US7308607B2 (en) * | 2003-08-29 | 2007-12-11 | Intel Corporation | Periodic checkpointing in a redundantly multi-threaded architecture |
US20050240806A1 (en) * | 2004-03-30 | 2005-10-27 | Hewlett-Packard Development Company, L.P. | Diagnostic memory dump method in a redundant processor |
US20080036487A1 (en) * | 2006-08-09 | 2008-02-14 | Arm Limited | Integrated circuit wearout detection |
EP2537091A4 (en) * | 2010-02-16 | 2014-08-06 | Freescale Semiconductor Inc | DATA PROCESSING METHOD, DATA PROCESSOR, AND APPARATUS COMPRISING DATA PROCESSOR |
US8412980B2 (en) * | 2010-06-04 | 2013-04-02 | International Business Machines Corporation | Fault tolerant stability critical execution checking using redundant execution pipelines |
US8499193B2 (en) * | 2010-07-30 | 2013-07-30 | Honeywell International Inc. | Integrated dissimilar high integrity processing |
US9891917B2 (en) * | 2013-03-06 | 2018-02-13 | Infineon Technologies Ag | System and method to increase lockstep core availability |
JP6360387B2 (ja) * | 2014-08-19 | 2018-07-18 | ルネサスエレクトロニクス株式会社 | プロセッサシステム、エンジン制御システム及び制御方法 |
DE102016215345A1 (de) * | 2016-08-17 | 2018-02-22 | Siemens Aktiengesellschaft | Verfahren und Vorrichtung zur redundanten Datenverarbeitung |
-
2016
- 2016-11-04 GB GB1618655.3A patent/GB2555628B/en active Active
-
2017
- 2017-10-20 WO PCT/GB2017/053179 patent/WO2018083441A1/en active Application Filing
- 2017-10-20 CN CN201780066948.9A patent/CN109891393B/zh active Active
- 2017-10-20 US US16/338,757 patent/US10909006B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103140828A (zh) * | 2010-09-25 | 2013-06-05 | 英特尔公司 | 基于硬件限制利用可调事务尺寸来动态优化代码的装置、方法和*** |
Also Published As
Publication number | Publication date |
---|---|
US10909006B2 (en) | 2021-02-02 |
GB2555628A (en) | 2018-05-09 |
US20200089559A1 (en) | 2020-03-19 |
WO2018083441A1 (en) | 2018-05-11 |
CN109891393A (zh) | 2019-06-14 |
GB2555628B (en) | 2019-02-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109891393B (zh) | 使用检查器处理器的主处理器错误检测 | |
US11263073B2 (en) | Error recovery for intra-core lockstep mode | |
US6772368B2 (en) | Multiprocessor with pair-wise high reliability mode, and method therefore | |
US6640313B1 (en) | Microprocessor with high-reliability operating mode | |
US7478276B2 (en) | Method for checkpointing instruction groups with out-of-order floating point instructions in a multi-threaded processor | |
US7444544B2 (en) | Write filter cache method and apparatus for protecting the microprocessor core from soft errors | |
KR100388947B1 (ko) | 실행 파이프라인 외부에 복수의 프로그램 카운터 및트레이스 버퍼를 구비한 프로세서 | |
US6615366B1 (en) | Microprocessor with dual execution core operable in high reliability mode | |
US8635492B2 (en) | State recovery and lockstep execution restart in a system with multiprocessor pairing | |
KR101546033B1 (ko) | Smt 기계에서 비교 및 전달 명령어를 사용한 안정적 실행 | |
US6598122B2 (en) | Active load address buffer | |
JP2597811B2 (ja) | データ処理システム | |
US5815651A (en) | Method and apparatus for CPU failure recovery in symmetric multi-processing systems | |
US6941489B2 (en) | Checkpointing of register file | |
US7861228B2 (en) | Variable delay instruction for implementation of temporal redundancy | |
US20060190702A1 (en) | Device and method for correcting errors in a processor having two execution units | |
JP2002508568A (ja) | 不適正順序マルチスレッド実行を実行するロード命令およびストア命令を順序付けるシステム | |
JP2002508567A (ja) | 誤推論後の命令再実施のためのアウトオブパイプライン・トレース・バッファ | |
JPH0812619B2 (ja) | リカバリ制御システム及びエラー回復方法 | |
JPH11500551A (ja) | 特殊機能を提供する高性能投機的実行プロセッサの構造及び方法 | |
CN111149094B (zh) | 处理缓冲器中的错误 | |
US20190121689A1 (en) | Apparatus and method for increasing resilience to faults | |
US20020087842A1 (en) | Method and apparatus for performing architectural comparisons | |
Skarlatos et al. | Towards reliable task parallel programs | |
Nakka et al. | Recent Advances in Industry and Experimental Research in Processor Level Error Detection and Recovery |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |