CN111164578A - 核内锁步模式的错误恢复 - Google Patents

核内锁步模式的错误恢复 Download PDF

Info

Publication number
CN111164578A
CN111164578A CN201880063526.0A CN201880063526A CN111164578A CN 111164578 A CN111164578 A CN 111164578A CN 201880063526 A CN201880063526 A CN 201880063526A CN 111164578 A CN111164578 A CN 111164578A
Authority
CN
China
Prior art keywords
processing
vector
operations
error
check
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.)
Granted
Application number
CN201880063526.0A
Other languages
English (en)
Other versions
CN111164578B (zh
Inventor
马蒂亚斯·洛塔尔·伯特歇尔
姆布·埃约勒
巴拉吉·韦尼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
ARM Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ARM Ltd filed Critical ARM Ltd
Publication of CN111164578A publication Critical patent/CN111164578A/zh
Application granted granted Critical
Publication of CN111164578B publication Critical patent/CN111164578B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1629Error detection by comparing the output of redundant processing systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1629Error detection by comparing the output of redundant processing systems
    • G06F11/1641Error detection by comparing the output of redundant processing systems where the comparison is not performed by the redundant processing components
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0721Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1497Details of time redundant execution on a single processing unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1629Error detection by comparing the output of redundant processing systems
    • G06F11/165Error detection by comparing the output of redundant processing systems with continued operation after detection of the error
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/22Microcontrol or microprogram arrangements
    • G06F9/226Microinstruction function, e.g. input/output microinstruction; diagnostic microinstruction; microinstruction format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/845Systems in which the redundancy can be transformed in increased performance

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Advance Control (AREA)

Abstract

一种具有处理管线(2)的装置,该处理管线包括执行级(30)和至少一个前端级(10)、(20)、(25),这些前端级用于控制向执行级发出哪些微操作。该管线具有核内锁步操作模式,在该核内锁步操作模式中至少一个前端级(10)、(20)、(25)发出用于控制执行级(30)执行主处理和检查处理的微操作。检查处理包括冗余操作,这些冗余操作与至少部分主处理的相关联的主操作相对应。错误处理电路(200)、(210)响应于检测到与给定的检查和主操作相关联的信息之间的不匹配,而触发恢复操作以纠正错误并继续主处理的前向进程。

Description

核内锁步模式的错误恢复
技术领域
本技术涉及数据处理领域。更具体地,涉及错误纠正。
背景技术
数据处理装置可能会遭受随机硬件故障,例如,由集成电路短路或断路而引起的永久性故障、或临时故障(例如由于暴露于自然辐射或粒子撞击而引起的位翻转)。对于某些使用领域,例如在安全性至关重要的汽车领域中,为确保功能安全,可以为处理器提供用以检测错误并在出现此类错误的情况下确保安全运行的错误检测机制。
发明内容
至少一个示例提供了一种装置,包括:
处理管线,包括用以响应于微操作而执行数据处理的执行级,以及用以根据程序指令来控制向执行级发出哪些微操作的至少一个前端级;
所述处理管线具有核内锁步操作模式,在该核内锁步操作模式中,所述至少一个前端级被配置为:发出微操作以控制执行级执行主处理和检查处理,该检查处理包括冗余操作,这些冗余操作与至少部分主处理的相关联的主操作相对应;以及
错误处理电路,用以响应于检测到与给定的检查操作和相关联的主操作相关联的信息之间的不匹配,而触发恢复操作以纠正错误并在所述执行级上继续所述主处理的前向进程。
至少一个示例提供了一种数据处理方法,包括:
响应于由处理管线的至少一个前端级根据程序指令发出的微操作,而使用处理管线的执行级来执行数据处理;
其中,在核内锁步操作模式中,所述至少一个前端级发出微操作以控制执行级执行主处理和检查处理,该检查处理包括冗余操作,这些冗余操作与至少部分主处理的相关联的主操作相对应;以及
响应于检测到与给定的检查操作和相关联的主操作相关联的信息之间的不匹配,而触发恢复操作以纠正错误并在所述执行级上继续所述主处理的前向进程。
附图说明
本技术的其他方面、特征和优点将从下面的将结合附图进行阅读的示例描述中显而易见,在附图中:
图1示意性地图示出包括标量处理电路和矢量处理电路的数据处理系统的示例;
图2示意性地图示出使用矢量处理电路的通道来检查由标量处理电路执行的标量处理中的错误;
图3示出了一种使用矢量处理电路的至少一个通道来检查主处理中的错误的方法;
图4示出了生成编译代码的方法,该编译代码包括用于触发主处理和检查处理以及比较主处理和检查处理的结果的指令;
图5示出了图示出生成编译代码的示例;
图6示出了用于比较标量寄存器与矢量寄存器的元素并根据比较结果而有条件地跳转到目标地址的指令的示例;
图7示出了其中矢量处理的通道被保留用于检查处理,并且与其他通道相比,检查通道中的硬件功能单元具有扩展的功能性的示例;
图8示出了一种使指令解码器生成用于执行检查处理的指令的方法;以及
图9示出了其中主处理是在矢量处理电路的通道的子集上执行的矢量处理,而检查处理是在矢量处理电路的通道的另一子集上执行的示例,并且还示出了在矢量处理电路上执行标量锁步操作的示例。
图10图示了支持核内锁步模式的管线的示例,在该模式中,提供了错误处理电路以执行恢复操作来纠正检测到的错误并继续主处理的前向进程;
图11示出了使用错误检测码来检测并纠正存储数据值中的错误的示例;
图12示出了使用错误检测或纠正代码来从队列结构中存储值中的错误恢复的示例;
图13、图14、和图15图示了用于追踪哪些微操作与相应的主操作和检查操作对有关的三种示例技术;
图16示出了使用错误计数器来检测何时错误为不可恢复错误的示例;以及
图17是示出从在核内锁步模式中检测到的错误执行恢复的方法的流程图。
具体实施方式
处理管线可具有用于响应于微操作而执行数据处理的执行级,以及用于根据程序指令来控制向执行级发出哪些微操作的至少一个前端级。管线可以支持核内锁步操作模式,在该操作模式中,至少一个前端级发出用以控制执行级来执行主处理和检查处理的微操作。检查处理包括与至少部分主处理的相关联的主操作相对应的冗余操作。与复制整个处理器核心并在每个处理器核心上执行相同的程序的常规锁步方法相比,在管线内提供这样的冗余处理可以提供更多的用于提供容错的空间和能源效率技术。
可以提供错误处理电路,该错误处理电路响应于检测到与给定的检查操作和相关联的主操作相关联的信息之间的不匹配,而触发恢复操作以纠正错误并在管线的执行级上继续主处理的前向进程。在为现代微处理器开发处理器微架构中所涉及到的实现方式和逻辑验证是相对劳动密集的,因此一旦特定的微架构已开发并进行了验证,通常极不情愿对微架构进行更改。通常,提供容错与错误纠正功能性被视为是与现有微架构一起添加的、而不是内置于原始设计中的附件。因此,提供冗余以实现检测或纠正错误的锁步方法依赖于复制现有的微架构设计(例如在物理锁步示例中整个处理器核心被复制),或者依赖于软件冗余,其中使用了开发前微架构的设计并仅通过提供在管线上执行不同的指令集来提供冗余。无论哪种方式,都允许使用现有的管线微架构,而不需要进行更改。但是,因为管线通常将被设计为在主处理或检查处理的结果就绪时立即提交这些结果,这种方法意味着,如果在执行主处理和检查处理的管线中检测到错误,则可能在不出现以下各项的情况下很难从错误中恢复:中断正在执行的主处理(例如,终止正在执行的线程)、丢失在该线程执行期间已取得的任何先前进程以及在该线程终止后并在该线程可以被重新调度前执行的其他操作(例如中断处理程序或操作系统调度程序)所导致的显著延迟。
相比之下,发明人认识到对处理管线进行一些微架构更改,可以提供错误处理电路,该错误电路响应于检测到与相应的主操作和检查操作相关联的信息之间的不匹配,而触发恢复操作,该恢复操作纠正错误并在管线的执行级上继续主处理的前向进程。因此,这避免了终止主处理的需要并使得在主处理中已经进行的至少一些先前进程能被保留。与主处理被中止然后从头重新开始相比,这允许明显更快地恢复错误。
错误处理电路可以具有多种形式。在一个示例中,错误处理电路可以包括结果比较电路,用以检测给定的检查操作与相关联的主操作的结果之间的不匹配。这可用于检测执行级的数据路径中出现的错误,其中即使操作的输入操作数是正确的,也可能导致错误的结果。
恢复操作可以包括将至少一个进行中的微操作从处理管线驱逐出,该至少一个进行中的微操作对应于或取决于检测到不匹配的给定的检查操作与相关联的主操作。被驱逐出的进行中的微操作可被重新发出以供执行级执行以纠正错误。因此,如果错误出现在数据路径中而寄存器文件中的输入操作数是正确的,那么驱逐出并重新发出一些指令就足以纠正错误并使得主处理在执行级中的前向进程能够继续。在某些情况下,只有受错误影响的微操作才能被驱逐出去。例如,错误处理电路可以检测出与(与自身不匹配的)错误检查操作和相关联的主操作相对应的微操作,或取决于错误检查和主操作的微操作,然后可以仅驱逐出并重新发出那些受影响的微操作。在其他实施方式中,标识出哪些特定操作受错误影响的复杂性可能是不合理的。取而代之的是,可以简单地从处理管线中驱逐出所有进行中的微操作并重新发出被驱逐出的微操作以供执行级执行,而且无需检查哪些微操作实际上取决于错误检查和主操作。
处理管线可以具有写回级,该写回级将给定的检查操作或相关联的主操作的结果延迟写回到寄存器状态存储装置,直到给定的检查操作和相关联的主操作两者已被执行,并且给定的检查操作与相关联的主操作的结果被确定为相匹配的。这确保了直到潜在错误的微操作与相应的冗余操作已进行比较并被确定为正确之前,该潜在错误的微操不被允许污染寄存器状态。这维护了寄存器文件中寄存器状态的有效性,因为这避免了数据路径中发生的错误对寄存器状态的影响,因此,这允许简单地通过驱逐出并重新发出一些微操作来纠正数据路径中的错误。这个特征是不寻常的,因为在典型的管线中,每个微操作的结果在提交就绪后就被立即提交(通常取决于与该微操作具有操作数依赖性的较早的微操作是否已被提交),而无需将给定操作的提交与另一个不具有这样的操作数依赖性的独立操作配对。但是,尽管可能需要对管线进行一些微架构更改,以便将给定的检查操作及其相关联的主操作的写回联结起来,这样的更改是合理的,因为这实现了更快地从错误中恢复。
为了支持给定的检查操作和相关联的主操作的延迟写回,直到两个结果都就绪并被确定为相匹配为止,写回级可以具有配对识别电路,用以识别对应于相关联的检查和主操作的一对微操作。存在许多可以被用于实现这样的配对识别电路的技术。
在一个示例中,至少一个前端级可以将配对标识符分配给向执行级发出的微操作。可以为与给定的检查操作和相关联的主操作相对应的微操作分配相同的配对标识符。例如,配对标识符分配可以在管线的前端部分内的解码级中完成。然后,写回级中的配对识别电路可以基于匹配的配对标识符来识别一对相关的主操作和检查操作。这种方法的优点是:对写回级来说,识别哪些微操作是相关的是相对简单的,并且还使得用于在等待写回时缓冲正在进行的微操作的写回级内的提交缓冲区的容量能被完全使用,而不需要对哪些微操作可以被分配到哪些缓冲区条目施加任何限制。
替代地,处理管线可以包括具有多对提交缓冲槽的提交缓冲区,其中每个缓冲槽用于缓冲进行中的微操作,直到其结果被写回级写回到寄存器状态存储装置。处理管线可以将与给定的检查操作和其相关联的主操作相对应的微操作分配到同一对缓冲槽。因此,利用这种方法,不需要管线的前端中的解码级或其他级将特定的配对标识符分配给微操作。这意味着随着每个微操作沿管线向下进行,不需要加宽与每个微操作相关联的位数,这样通过减少整个管线中每微操作所需的导线数量来节省功率和电路面积。而且,该方法对写回级而言实现起来相对简单,因为在写回级处不需要比较任何标识符、操作数或操作码或任何与微操作相关联的其他信息,这是因为写回级的配对识别电路可以简单地确定分配给同一对缓冲槽的微操作是相关的,并因此应该推迟那些操作的结果的写回直到两个结果都可用且相匹配。尽管该方法可能导致一些缓冲槽没有被完全占用(因为某些主操作可能没有相关联的检查操作,所以被分配给那些无复制的主操作中的一者的给定对的缓冲槽的第二槽位可能没有被使用),可以提供一些额外的缓冲容量来解决这个问题,并且写回级逻辑的简化可以合理化未被完全占用的一些缓冲槽。替代地,为了使缓冲区容量能够被充分利用,每对缓冲槽均可以包括附加标志,用以指示该对缓冲槽包括的是相关联的主/检查操作还是两个不相关的主操作。
另一方法是,写回级的配对识别电路可以基于与微操作相关联的操作码和操作数标识符的比较,来识别与给定的检查操作和相关联的主操作相对应的微操作。因此,在这种情况下不需要在管线的前端处为微操作标记任何特定的配对标识符,而且微操作可以被自由地分配到提交缓冲区内的任何位置。写回级还可以使用一些将检查操作与主操作区分开的信息来识别哪些微操作是相关的。例如,在检查操作在矢量处理单元上实现的实施方式中,指示哪些矢量处理通道活跃的述词信息(predicate information)可以被用来将检查操作与主操作区分开。为限制用于比较与不同微操作相关联的信息以识别相关的检查和主操作的比较逻辑的复杂性,在一些情况下,可以将比较限制到在写回级处挂起的微操作中的某个子集。例如,只有在提交缓冲区头部中的预定数量的条目内的微操作才会被检查。
当响应于在核内锁步模式中操作时的主处理而执行将数据从数据存储库(例如存储器)加载到目标寄存器的加载操作时,处理管线还可以将所加载的数据写入目标寄存器的检查区域或另一寄存器以供检查操作(对应于访问该目标寄存器的主操作)进行访问。因此,可以由管线来对至寄存器文件的加载进行镜像,使得后续的主操作和检查操作可以从注册文件的不同部分读取相应的数据值以提供冗余操作。
在某些情况下,仅单个加载事务可以被发出到存储器系统,以便为主处理和检查处理加载值。然后,加载/存储单元或寄存器文件内的电路就可以将所加载的数据值复制到目标寄存器和检查区域中。通过减少所需的存储器带宽,这使得核内锁步模式可以在性能方面更有效地实现。
替代地,另一种方法将是复制加载操作,使得单独的微操作被发出到管线以便分别为主处理和检查处理加载值,并且因此单独的加载事务被发出到存储器系统,从而分别从相同的地址加载数据值到目标寄存器的主区域和检查区域。单独的加载事务可能以存储器系统中相同的存储器区域为目标,但却加载到寄存器文件的主区域和检查区域中。
错误处理电路还可以包括存储值比较电路,用以检测分别用于冗余检查操作及其相关联的主操作的一对存储数据值之间的不匹配。例如,存储数据值可以是存储在寄存器中的架构状态,或者可以是表示存储在队列结构中的控制数据的存储数据值。这可以防止由位翻转导致的错误,该位翻转可能在粒子撞击或暴露于辐射中而使得存储结构中的位改变状态的情况下发生。
为能够将检测到的错误恢复,可以将由错误处理电路检查的一对存储数据值中的至少一者与错误检测码相关联。错误检测码可以是提供一些冗余信息的任何代码,这些冗余信息允许检测到至少一个位变化状态的发生。例如,错误检测码可以是奇偶校验码或循环冗余校验(CRC)码。尽管在某些情况下错误检测码可以包括错误纠正码,该错误纠正码不仅可以检测到位翻转,也可以仅从存储的数据值和相应的错误纠正码中恢复正确的值,但实际上,与实现错误纠正码相关联的额外开销可能是不合理的。这是因为错误纠正码的计算可能是性能和资源密集的,并且由于存储的数据值可能会被频繁地访问(例如,在响应于管线中的几乎每条指令时,存储在寄存器中的架构状态都可能会被读取或更新),这会导致大量的开销。出乎意料的是,能够检测错误但不能由自己实际纠正存储值中的错误的错误检测码足以支持核内锁步模式中的错误恢复。这是因为事实上在彼此对应的一对存储数据值中已经存在冗余,其中一个对应于主操作,另一个对应于检查操作。这避免了错误检测码的显著开销,同时能够使用更廉价的错误检测码来纠正错误,并且因此可以执行恢复操作以使得主处理的继续前向进程被执行。
在一个示例中,当在一对存储数据值之间检测到不匹配时执行的恢复操作可以包括使用一对存储数据值中的另一个来校正错误的存储值。如果在寄存器中的主/检查值之间的比较已经执行并且在数据可用之前,抑制了主/检查操作的微操作被发出以供执行,则可以使用此方法。替代地,恢复操作可以包括驱逐出并重新发出微操作,如上所讨论的。例如,如果在表示用于主/检查操作的输入操作数的存储数据值的比较结果可用之前,主操作或检查操作的微操作被允许试探性地进行,那么这是优选的。
可能的是,存储值中的某些错误可能是由存储电路中的永久性故障(例如短路或断路)引起的。因此,在一些示例中,在错误存储值被纠正后,存储值比较电路可能重复检测存储数据值之间是否存在不匹配。如果存储数据值相匹配,则这表明故障是暂时的并且已经成功纠正。但是,如果错误仍然存在,则可以采取其他步骤来处理潜在的永久性故障。
同样,当在一对存储数据值之间检测到匹配时,在某些情况下,错误处理电路就可以简单地允许相应的主操作和检查操作使用存储数据值来进行。但是,在其他示例中,错误处理电路可以响应于检测到存储数据值之间的匹配,来触发与一对存储数据值中的至少一者相关联的错误检测码的重新计算。这允许纠正可能出现于错误检测码的错误,而不是存储数据值本身。
一对存储数据值中的两者都可以与各自的错误检测码相关联,以提供针对错误的额外的鲁棒性。这可以允许在错误也是相应的数据值中的标识符时,检测到错误检测码中的错误。
然而,将一对存储数据值中的两者都与错误检测码相关联不是必要的,因为多个位翻转错误发生(一个错误在数据值中,而另一个错误在错误检测码中)的可能性是很低的,特别是在用于保持各自的数据值的和错误检测码的存储元件在集成电路上物理分立的情况下。因此,在一些情况下,一对存储数据值中只有一者可以具有相关联的错误检测码,例如,仅主操作使用的值或仅检查操作使用的值。如果两个存储数据值之间存在不匹配,则可以基于根据存储数据值中重新计算的预期错误检测码与存储错误检测码是否匹配,来确定具有相关联的错误检测码的数据值是正确的还是不正确的。如果存储错误检测码与根据存储数据值计算的预期错误检测码相匹配,则这意味着该数据值是正确的,并且因此存储数据值中的错误必定存在于这对存储数据值中的另一者中。另一方面,如果一对数据值中的一者的存储错误检测码和预期错误检测码不匹配,则错误将指向该数据值。因此,可以通过计算只一对存储数据值中的一者的错误检测码来减少电路开销。例如,在下面的示例中,其中检查值被存储在矢量寄存器文件的一部分中,而主数据值被存储在标量寄存器文件或矢量寄存器文件的另一个通道中,仅需要为矢量寄存器文件中与检查值相对应的通道计算错误检测码。
错误检测码也可以用于与主操作和检查操作不直接相关联的某些存储值,例如与非复制加载/存储指令相关的加载/存储数据,或存储器系统中的缓冲区数据。这针对缓冲区中发生的错误提供了额外的容错能力。例如,每个缓冲的项目可以被两次(或两次以上)分配到缓冲区,其中相关联的错误检测码实现了在冗余分配的缓冲项目之间不匹配时检测出哪个存储缓冲区值是正确的。替代地,错误纠正码(ECC)可用于使缓冲区避免为一个项目冗余分配多个条目。
如上所述,一些由处理管线的硬件缺陷引起的错误是永久性故障,并且因此可能无法使用恢复操作进行固定。为了将暂时性故障与永久性故障区分开来,可以提供错误计数器来对由错误处理电路执行的恢复操作的次数进行计数。当错误计数器指示恢复操作已经执行了超过阈值次数时,错误处理电路可能会中止对管线上的主处理的处理。因此,如果错误持续出现,则这可能指示该故障可能是永久性故障,并且因此与使用用来纠正错误并允许继续前向进程的恢复操作相比,可能需要更具侵入性的响应动作。
在包括多个处理器的系统中,其中处理器中的至少一者具有如上所述的处理管线和支持核内锁步模式及恢复操作的错误处理电路,当错误计数器指示恢复操作执行了超过阈值次数时,错误处理电路可以触发主处理的处理到另一处理器的切换。因此,如果一个处理器出现永久性故障,则主处理会在另一处理器上继续进行。
替代地,在某些情况下,当错误计数器指示恢复操作已经执行了超过阈值次数时,错误处理电路可以触发装置的复位。
核内锁步模式可以以不同的方式来实现。在某些情况下,可行的是,使用作为检查处理执行的另外标量操作来复制标量主处理。但是,在执行级包括用于执行矢量处理的矢量处理电路(包括对包括两个或多个数据元素的矢量操作数执行的两个或多个处理通道)的管线中提供内锁步模式特别有用。在这种情况下,冗余检查操作可以包括在矢量处理电路的至少一个通道上执行的操作,而主操作可以包括在矢量处理电路的其他通道上执行的操作或对标量处理电路提供的标量操作数执行的标量操作。这利用了如下事实,矢量处理电路通常提供由执行级中其他部分(例如在矢量处理电路的其他功能单元或其他通道中)提供的镜像处理能力的功能,并且因此这提供了一些硬件冗余,可以利用硬件冗余在同一设备内执行冗余操作而对性能影响较小。
管线的前端级可以包括许多不同的级,例如用于取出指令的取出级、用于解码指令的解码级、用于执行寄存器重命名的重命名级、以及用于分发或发出指令以供执行的分发级或发出级。因此,上面讨论的管线的前端功能可以在那些级中的任意级处执行。
微操作是指将由执行级执行的特定处理操作的编码表达。通常,前端级将从存储器中取出的程序指令映射到将被发出给执行级的微操作。每个微操作可以指定操作码,该操作码标识要执行的处理操作的类型以及一个或多个其他参数,例如操作数标识符和立即值。对于某些指令,每个程序指令可对应于恰好一个微操作,使得在某些情况下,该微操作可与对应的程序指令相同。对于某些指令,前端级可以将附加信息附加到经解码的程序指令以生成微操作,例如产生未由指令编码明确指定的一些信息,以向执行级提供附加信息以使执行级能够执行相应的处理操作。
在一些示例中,一些复杂的程序指令可以被管线的前端级映射到多个微操作。例如,某些程序指令可以触发两个或更多个不同的处理操作,这些操作可以在执行级的不同执行单元中执行,或者可以对应于由一个功能单元执行的若干不同的、可独立调度的操作。例如,触发从存储器加载数据值到两个或多个不同的寄存器中的加载多条指令可以被映射到多个不同的微操作,每个微操作对应加载操作中的一者。此外,一些加载/存储操作可以被映射到不同的微操作,这些微操作包括处理实际存储器访问的加载/存储微操作和可能触发用于计算存储器访问的地址的地址指针的更新的附加算术微操作。在某些管线中,如果执行级支持与程序指令的组合相对应的功能,则可以将多个程序指令合并为单个微操作。因此,在程序指令和微操作之间可能存在一对一、一对多或多对一的关系。
在一些实施方式中,处理管线可以永久地在核内锁步模式中操作,而没有关闭核内锁步功能的任何能力。
替代地,除了核内锁步模式之外,处理管线可以支持普通模式,其中在普通模式中,检查处理被抑制并且只有主处理被执行。配置寄存器中的锁步模式设置值可以控制处理管线当前是在普通模式还是在锁步模式中操作。锁步模式设置值可以是硬连线的,例如在特定设备的制造期间被固定的,以将设备永久配置为在一种特定的错误处理模式中进行操作。替代地,锁步模式设置值可以是可编程的并且对于与该装置相关联的指令集架构是可见的,使得在处理管线上执行的软件可以改变模式设置值,以便对错误处理电路是在恢复模式中还是在中止模式中操作进行选择。
在一些实施方式中,错误处理电路可以支持多种不同的用于在核内锁步模式中操作时从错误中恢复的错误处理模式。例如,错误处理模式可以包括恢复模式,其中响应于检测到与不同的检查操作相关联的信息和其相关联的主操作之间的不匹配,而触发上面讨论的恢复操作。然而,系统也可以支持中止错误处理模式,在该中止错误处理模式中,当检测到分别与主操作和检查操作相关联的信息之间的不匹配时,不执行恢复操作,而是简单地中止主处理。例如,存储在配置寄存器内的错误处理模式设置值可以指定在核内锁步模式中处理时使用哪种错误处理模式。错误处理模式设置值可以是硬连线的,例如在特定设备的制造过程中被固定的,以将设备永久配置为在一种特定的错误处理模式中进行操作。替代地,错误处理模式设置值可以是可编程的并且对于与该装置相关联的指令集架构是可见的,使得在处理管线上执行的软件可以改变错误处理模式设置值,以便对错误处理电路是在恢复模式中还是在中止模式中操作进行选择。
提供恢复模式和中止模式两者的优点可以是:提供在主处理的无错误处理期间的性能与响应于检测到的错误相关联的延迟之间进行折衷的灵活性。尽管恢复模式可以使错误得到更快的解决,因为可以在纠正错误之后进行前向进程,而不是要求主处理的整个线程在执行其他指令之后同时被挂起和从更早的点重新开始,恢复模式可能会对在主处理进行常规无错误处理期间实现的性能产生一些影响,因为例如支持恢复操作可能涉及写回级推迟写回相关联的主操作和检查操作的结果,直到两个结果均可用且已被确定为相匹配。这可能导致依赖于主操作或检查操作的其他操作被延迟从而降低性能。在中止模式中,不需要延迟写回操作直到主操作和检查操作的两个结果均可用,因为相反地错误是通过简单地中止线程来处理的(例如通过触发中断并允许中断处理程序终止该线程并稍后对其重新调度,继而从线程的开头重新开始处理)。因此,如果预期到错误很少发生并且在检测到错误时与固定错误相关联的延迟不是特别重要,用户可以选择中止模式,并且相反地在常规无错误处理期间提高性能。如果错误延迟是更关键的因素,那么可以选择恢复模式。
核内锁步模式
更智能且潜在的半自动载具(汽车、无人机等)的出现意味着针对高性能处理器的不断增长的市场。但是,安全关键性系统要求组件进行认证以符合特定的完整性等级。例如,汽车安全完整性等级(ASIL)风险分类方案提供了几个分类等级,这些等级根据可以检测到的故障百分比而变化。可将专注于功能安全性的处理器设计为包括错误检测机制,例如在线逻辑内置自检、专用硬件检查等,这使他们能够在最高分类等级(ASIL D)处进行分类。但是,应用处理器更关注通用环境中的性能,并且不太可能支持这种程度的附加复杂性,因为对于更复杂的高性能核心而言,将错误检测机制包括在内的成本和工作量将是不可行的。但是,如果这样的更高性能的处理器可以在较低的安全等级(例如ASIL B)处认证,那么可以将这样的处理器与较小的用于仲裁的实时处理器进行结合,以形成符合ASIL D的系统,从而在安全关键环境中实现更高的性能。因此,期望提供一种错误检测技术,该技术使得更高性能处理器能够针对功能安全性进行分类。在分类方案的较低等级中,不需要检测所有潜在的故障(例如,ASIL B要求错误检查方案覆盖至少90%的单点故障和60%的潜在故障)。因此,较低的安全等级为在错误纠正范围与性能和电路面积或功耗开销之间进行折衷提供了一些自由。
用于确保功能安全性的一种方法可以是使用锁步计算,其中提供了多个冗余处理器,在冗余处理器中的每一者上执行相同的代码,并比较处理器的输出以检测错误。具有两个冗余处理器的双核方案可以允许错误检测,而具有三个冗余处理器的三核方案可以允许错误检测和错误纠正两者(因为如果在一个处理器上检测错误,则可以从另外两个处理器的输出中恢复正确的值)。虽然锁步方法可以以较低的开发成本实现高性能,因为无需修改即可将现有的高性能处理器设计用于冗余处理器中的每一者,但是电路实现成本很高,因为系统的总面积和功耗是单核的两倍或三倍。另外,由于可能需要比较各个核心上的许多接口以检测错误,因此可能需要大量的额外布线。
另一种选择方案是提供一种“虚拟锁步”方法,其中提供一个处理器,并且通过分时复用将相同的计算重复两次或多次。例如,主线程和检查线程两者都可以在同一处理器上执行并且比较它们的输出以识别错误。但是,使用这种方法,由于每个计算需要被顺序执行两次,因此有效降低了一半主处理所要达到的性能。此外,存在一个问题,即虚拟锁步方案无法检测出由处理器硬件缺陷(例如短路或断路连接)引起的永久性故障,因为相同的硬件单元将用于主计算和检查计算两者,并且主计算和检查计算两者都将遭受相同的错误。
一些处理器(通常是为更高的性能所设计的那些处理器)提供了矢量处理电路,该矢量处理电路支持矢量指令的处理,其中,源操作数或指令的结果值是包括多个数据元素的矢量。在矢量处理电路的一些硬件实施方式中,硬件功能单元可以被提供以并行地对矢量的各个数据元素执行多通道处理,以提高性能,但即使这些通道由单个硬件单元顺序地处理,通过支持响应于单个指令而处理多个不同的数据元素,可以提高代码密度,并减少指令的取出和解码开销,这有助于提高性能。
因此,许多处理器设计可能已经具有用于对包括多个数据元素的矢量操作数执行多通道处理的矢量处理电路。矢量处理电路通常可以提供一些冗余,因为通常用于处理标量指令的标量处理电路和响应于矢量指令的矢量处理电路两者都可以支持相同的功能,并且矢量处理电路本身内还可能具有冗余,因为可以提供多个相同的硬件单元来处理矢量内的不同通道。而且,矢量处理电路可能通常已经支持用于响应于给定指令而选择需要处理的哪些矢量元素的机制(例如预测)。可以利用这些特征进行错误检测。
因此,在核内锁步模式中,当在标量处理电路或矢量处理电路的通道的子集上执行主处理时,矢量处理电路上的至少一个处理通道可用于执行检查处理以检查至少部分的主处理的结果,其中主处理和检查处理的结果被比较以检测错误。因此,与双核或三核锁步方法不同,这种方法的电路实施方式成本要低得多,并且适合于具有较大物理尺寸的高性能处理器设计,因为为了错误检测目的(核内锁步)可以重复使用处理器中已可用的电路,而不是要求整个处理器(核内锁步)进行物理复制。尽管如此,与虚拟锁步方法相比,该方法还可以提高性能并提高错误检测覆盖率。因此,使用矢量通道用于主处理的错误检查可以使得能够针对至少较低等级的功能安全分类来认证更复杂的处理器,同时与上述技术相比,可以在给定等级的错误检测覆盖率下提供更高的性能或降低硬件复杂性。
注意,矢量处理电路中的硬件实施方式和可以因实施例而不同。虽然指令集架构(ISA)可以定义针对一组定义的矢量指令要满足的功能行为,但在硬件电路中如何实现这一点可能会有一些设计自由。例如,一些实施方式可以并行执行矢量处理的每个通道,其他实施方式可以在公共硬件单元上依次逐个执行每个通道,而其他实施方式可以使用折衷方法,其中使用给定的硬件功能单元集合并行执行通道组,但执行与一个矢量指令相对应的更多通道则需要多次通过。而且,一些实施方式可以在标量处理电路和矢量处理电路之间共享某一电路(例如,尽管可以为整数计算提供单独的标量算术单元和矢量算术单元,但为了节省电路面积,标量浮点指令可以重用与浮点矢量指令相同的硬件单元)。因此,标量处理电路和矢量处理电路完全分离不是必需的。通常,标量处理电路是指用于处理标量指令的电路元件的合集,而矢量处理电路是指用于处理矢量指令的电路元件的合集,它们在某种程度上可以重叠。
因此,在一些实施例中,对于至少一些指令,检查处理可以在与主处理相同的硬件功能单元上执行是可能的。这样仍然允许检测到暂时性故障(例如由粒子撞击引起的位翻转)。如果需要检测永久性故障来满足安全性分类,则可以将其他技术(例如提供软件测试套件)与在矢量处理电路上检查处理的运行一起使用,以提供所需的错误覆盖率。尽管矢量处理电路上的检查处理无法检测所有类型的错误,但仍至少可以保护处理器的某些元件免受错误影响,然后这些元件可以被软件测试排除,从而减少了测试模式中执行软件检查所需的时间,因此提高了系统性能。
然而,在其他情况下,可以在与主处理不同的硬件功能单元上执行检查处理。实际上,许多支持矢量处理的处理器可能已经具有与不同矢量通道相对应的多个硬件功能单元,或者可能已经提供了单独的标量功能单元和矢量功能单元,但是即使不是这种情况,其他实施例也可以使用修改后的处理器设计,在这种设计中提供了一些附加硬件功能单元(与复制整个处理器相比,所需的附加电路更少)以用于错误检查。通过对主处理和检查处理使用不同的硬件功能单元,可以提高错误覆盖率(因为可以检测到永久性硬件故障,而不仅仅是暂时性故障),并且还可以提高性能,因为这允许检查处理至少部分与主处理并行地执行。而且,与上面讨论的虚拟锁步方法不同,性能和错误覆盖率将不受对主计算和检查计算重用相同硬件的需求的限制。
类似地,为了提高错误检测覆盖率,将主处理的操作数或状态信息存储在硬件寄存器存储装置中用于检查处理的操作数或状态信息(例如,状态信息可以包括程序计数器、用于控制条件操作的状态标志、处理器模式信息等)的不同部分中可能是有用的。通过使用单独的寄存器存储装置,这允许检测到寄存器存储装置中的位翻转,这是因为由主处理和检查处理中的一者使用的硬件寄存器中的错误将不会影响另一者。
使用检查处理来检查主处理的所有操作不是必需的。可能无需检查某些类型的指令,以便确保功能安全性。而且,如下所述,矢量处理电路可不支持某些类型的指令,因此可以使用不同的(例如,基于软件的)错误检测技术来检查这样的指令。同样,单个检查可能覆盖多条指令。因此,将理解的是,以下对“检查主处理的结果”或将主处理的结果与检查处理的结果进行比较的任何引用均不暗示需要使用矢量处理电路上的检查处理来检查主处理的每个操作。
可以在各个处理流中的任何时间处执行将主处理的结果与检查处理的结果进行比较。例如,可以以周期性或不规则的间隔(例如,在某些寄存器写入时或在处理中的更多任意点处)触发比较。通常,比较主处理的结果与检查处理的结果的频率越高,错误信令等待时间(错误发生与错误被标记或已采取动作之间的延迟)越低,但是更频繁的比较可能会影响性能。在启用了上述恢复操作的模式中,可以优选比较每对主/检查操作的结果,以允许在将不正确的结果写入寄存器状态之前检测到错误。
在一个示例中,在通过中止主处理(而不是上面的恢复机制)来处理从错误中恢复的模式中,可以在执行用于执行以下操作的存储操作时触发将主处理的结果与检查处理的结果进行比较:将从主处理得到的数据存储到数据存储库(例如缓存或存储器)中。通过比较结果来检测每个存储操作中的错误,可以防止处理器操作中的错误从处理器泄漏到存储器系统中,这有可能导致其他设备访问同一存储器系统时出现错误,但这避免了在每次寄存器写入时更频繁地比较值的开销。在一些实施方式中,显式比较指令(与触发存储操作本身的存储指令不同)可以被包括在由数据处理装置执行的用于控制相关比较操作的指令流中的存储指令附近。替代地,其他实施方式可以具有响应于存储指令本身而触发主处理的结果与检查处理的比较的硬件,这可以减少需要执行的指令数量,从而提高性能。
为了建立检查处理所需的操作数值以镜像用于主处理的操作数值,在执行用于将数据从数据存储库加载到标量寄存器文件的主标量处理的加载操作、或用于将数据从数据存储库加载到矢量寄存器文件中与用于主矢量处理的多个通道的子集相对应的一部分的主矢量处理的加载操作时,所加载的数据也可以被加载到矢量寄存器文件中与用于检查处理的至少一个通道相对应的一部分。镜像加载可以由与指令流中的现有加载一起包括的单独指令来触发,或者可以响应于主处理流中的加载指令在硬件中自动执行。同样地,主处理中的移动操作(用于将数据从一个寄存器移动到另一寄存器)也可以被镜像在矢量寄存器文件中由检查处理使用的部分中。
在某些情况下,矢量寄存器文件中的相同寄存器可用于主矢量处理和检查处理两者。例如,在矢量指令具有述词的实施方式中(使用控制掩码指定目标寄存器中的哪些元素应响应于矢量指令而更新),则可以设置述词以避免在矢量寄存器的一个通道中的检查处理与在其他通道中执行的主矢量处理之间的干扰,使得可以共享矢量寄存器,并且检查处理对可用于常规处理的矢量寄存器的数量没有显著影响。
然而,某些系统可能根本不支持述词,或者述词可能并不被所有矢量指令都支持。在这种情况下,使用提供检查处理的至少一个通道执行一些附加矢量指令以镜像标量处理,可能会导致对矢量寄存器的其他通道的更改,这可能会影响在出于除错误检测之外的目的而执行的其他矢量指令的结果(如果他们使用的是相同的寄存器)。通过保留矢量寄存器文件中的至少一个矢量寄存器以供所述检查处理使用,可以防止这种情况。这样的保留既可以通过软件(例如,生成要执行的代码的编译器可以防止某些架构矢量寄存器用于除提供检查处理的指令之外的任何矢量指令)来完成,也可以通过硬件完成,其中某些硬件寄存器专用于响应于常规矢量指令而不可访问的检查处理(例如,指令解码器可以生成用于检查处理的指令,这些指令指定了对于常规矢量指令不可访问的保留硬件寄存器,或者寄存器重命名级可以确保用于检查处理的矢量指令的寄存器访问被映射到保留的硬件寄存器)。
在某些情况下,矢量处理电路的一个或多个通道可以保留为用于执行检查处理的“检查通道”,而这不能用于常规矢量指令。所保留的通道可以永久固定在硬件中,也可以使用述词掩码而可改变。如果主处理是标量处理,则可以将矢量处理电路的一个通道保留为标量检查通道(例如,最低有效通道或最高有效通道)。如果主处理是矢量处理,则可以将多个通道保留为检查通道,其对应于主矢量处理的多个通道。在某些情况下,可以保留通道以用于标量和矢量处理的检查两者,例如如果总共有N个通道可用,则可以保留1个通道以用于主标量处理的检查,最多保留(N/2–1)个通道(如果N/2不是整数,则四舍五入为最接近的整数)以用于与可以使用(N/2–1)个其他通道执行的主矢量处理相对应的检查处理。
为了防止检查通道与用于主矢量处理的通道之间的干扰,可以将用于控制矢量处理电路以执行检查处理或执行主矢量处理的指令与用于控制矢量处理电路以掩蔽某些通道的结果的述词信息相关联。特别地,在保留通道作为用于执行与主标量处理相对应的检查处理的标量检查通道的情况下,可以将用于控制矢量处理电路以执行与主标量处理相对应的检查处理的指令与用于控制矢量处理电路以掩蔽除检查通道以外的所述多个通道的结果的述词信息相关联,并且可以将用于控制矢量处理电路以执行主矢量处理或与主矢量处理相对应的检查处理的指令与用于控制矢量处理电路以至少掩蔽标量检查通道的结果的述词信息相关联。对于某些指令(例如,跨通道矢量操作),用于矢量处理电路或与主矢量处理相对应的检查处理的指令也可以掩蔽用于另一主矢量处理或与主矢量相对应的检查处理的通道。
使用矢量处理电路的检查处理以及主处理的结果与检查处理结果的比较可以通过软件或硬件触发。
因此,在软件实现的核内锁步模式中,为处理器解码和执行而提供的指令序列可能与在仅执行主处理的情况下所提供的指令序列不同。因此,处理器中的指令解码器可以对指令序列进行解码,该指令序列包括用于控制数据处理装置执行主处理、检查处理和错误检测的指令。例如,编译器可以基于程序员或其他编译器提供的代码(不包括用于执行检查处理或比较步骤的任何指令,从而程序员可以编写不必感知将执行错误检查的原始代码)来生成要由处理器解码/执行的指令序列。
在软件实现的实施例中,用于触发检查处理的指令可能看起来是常规矢量指令,其可能与主矢量处理中使用的矢量指令没有区别。在这种情况下,某些处理器实施方式可能会在与进行检查的主矢量处理或标量处理相同的硬件单元上执行检查处理的某些部分。可以通过使用顺序指令中的至少一个指令指定注释信息以指示要在与主处理不同的硬件功能单元上执行检查处理,来避免这种情况。然后,给定的处理器实施方式可以响应于这样的注释信息,而尝试将在不同硬件功能单元上的检查处理调度到主处理,如果可能的话,以允许检测永久性硬件故障。
替代地,可以提供一定程度的硬件修改以辅助错误检查。
例如,在某些情况下,指令集架构(ISA)可以包括一个或多个专用指令以帮助支持上述技术。例如,处理装置的指令解码器可以响应于标量矢量比较指令,而控制数据处理装置执行主处理的结果与检查处理的结果的比较(当主处理是主标量处理时)。例如,标量矢量比较指令可以指定给定的标量寄存器,并且可以触发给定的标量寄存器中的值与检查处理所使用的矢量寄存器的数据元素中的值的比较。在标量矢量比较指令的另一版本中,比较可以将响应于主标量处理而设置的一个或多个标量状态标志与响应于检查处理而设置的一个或多个矢量状态标志进行比较。在某些情况下,指令可以根据比较结果简单地设置结果值或状态标志。然而,其他实施方式也可以将比较与条件跳转操作相结合,使得响应于标量矢量比较指令,指令解码器还控制数据处理装置以根据所述比较的结果有条件地跳转到目标指令地址。如果检测到在主处理的结果与检查处理的结果之间的不匹配,这对于将程序流引导到用于处理检测到的错误的例程是很有用的。
这样的直接控制标量架构状态与矢量架构状态的比较的指令,对于本领域技术人员而言,这将被视为极不直观,因为标量和矢量寄存器文件之间的直接交互通常不实际,因为标量和矢量寄存器文件通常在处理设计的物理布局上相距甚远,因此用于将要比较的值路由到比较器的相对较长的布线通常与由相对高性能处理器预期操作所用的频率所施加的定时要求不兼容。取而代之的是,标量和矢量寄存器文件之间的交互通常将限于仅将值从标量/矢量寄存器文件中的一者复制到另一者的指令,而不是使用这些值执行任何其他操作的指令。然而,发明人认识到,与常规处理期间不同,当执行比较以进行错误检查时,该操作不是时间关键的,因为该操作不在主处理的关键路径上。因此,比较操作不必符合施加在常规计算操作上的正常时序约束。同样地,在指令还触发条件跳转操作的示例中,人们可能会预计到使用普通跳转预测机制很难预测标量和矢量寄存器文件之间的一般比较,当提供专用类型的跳转指令以专门用于错误检查时,可以以非常高的精度预测跳转(始终假设没有错误),因为与检查处理与主处理相匹配时的正常情况相比,发生错误的情况很少见。此外,当将特定的矢量通道作为标量检查通道保留时,由于无需提供多路复用器来从矢量寄存器中选择任意元素(取代比较可能始终会从某个固定通道接收值),因此标量矢量比较指令可以相对高效地通过硬件来实现。
总而言之,为标量矢量比较指令提供ISA支持使一条指令能够触发所需的比较操作(与用于在标量/矢量寄存器文件之间传输值、比较结果以及根据比较结果条件地跳转的几条指令相反),并且这样的指令在硬件中的实现并不像人们想象的那么复杂。
其他示例可以具有进一步的硬件支持,用于自动控制检查和比较操作,而无需在从存储器中取出的用于解码/执行的指令流中为此提供明确的指令。此方法在支持恢复操作(其中在错误连接后继续主处理的前向进程)时特别有用(因为管线可能会进行一些微架构更改以支持恢复操作,在包括对前端级的一些微架构更改以在执行未考虑核内锁步而写入的程序代码时自动生成检查操作的情况下也可能是有效的)。
因此,在某些情况下,数据处理装置可以包括控制电路,该控制电路控制矢量处理电路以使用由矢量处理提供的多个通道中的至少一个通道来执行检查处理,并且包括错误检测电路,该错误检测电路根据主处理的结果与检查处理的结果的比较执行错误检测。例如,控制电路可以是指令解码器,其可以生成用于控制检查处理的指令。错误检测电路可以是专用硬件,用于响应于存储指令或主处理流中的其他指令而自动比较主处理的结果与检查处理的结果,替代地,可以是标量或矢量处理电路中的现有比较器或算术电路,其可以由比较指令(常规比较或上述标量矢量比较指令之一)控制以比较从主处理器电路和检查处理电路得出的值。
在某些情况下,可以使用矢量处理电路上的检查处理来检查由数据处理装置执行的所有处理,而其他示例可以仅执行与主处理的某些部分相对应的检查处理。
在一个示例中,数据处理装置可以具有多种操作模式,包括第一(核内锁步)模式和第二模式,在第一模式中,除了所述主处理之外,还执行检查处理;第二模式中,检查处理的执行被抑制。例如,配置寄存器中的模式设置值可用于设置当前操作模式。模式设置值可以在给定设备的制造期间而硬连线,使得在实现时,设备被固定为根据需要以第一模式或第二模式操作,并且随后软件不可能修改模式位。替代地,模式设置值可以由在处理器上运行的软件来编程,使得软件可以选择是为提高容错能力而在第一模式中操作,还是为提高性能而在第二模式中操作。
可以在第二模式中禁用但在第一模式中启用任何支持错误检查的硬件辅助功能(例如将主处理中的加载自动镜像到检查处理所使用的寄存器文件的各个部分,或者在主处理中进行存储时自动地比较主/检查处理)。对于非锁步的用例,此方法可用于减少能耗和性能开销。例如,在第二模式中,主矢量处理可以使用整个矢量宽度,因为不需要保留任何通道或矢量寄存器用于检查目的-因此可用于第一模式中的主矢量处理的矢量处理通道的数量可以小于可用于第二模式中执行的矢量处理的矢量处理通道的数量。类似地,在一些实施例中,可用于主处理的矢量寄存器的数量在第一模式中可以比在第二模式中少。
在一个示例中,数据处理装置可以具有指令解码器,该指令解码器将包括定义主处理的指令的第一指令序列映射到包括定义主处理和检查处理的指令的第二指令序列,并控制数据处理装置以基于第二指令序列执行数据处理。因此,在这种情况下,生成要由处理器执行的代码的软件工具链(例如,编译器)不需要知道错误检查功能,因为处理器本身内的指令解码器可以自动生成所需的用于控制下游处理电路以执行检查处理的指令。类似地,解码器还可以生成用于控制数据处理装置以执行主处理的结果与检查处理的结果的比较的指令(如果这尚未自动通过硬件控制)。
例如,指令解码器可以将第一指令序列的标量指令映射到第二指令序列的标量指令和检查矢量指令。因此,对标量指令进行有效解码两次,一次生成用于控制主标量处理的指令,而一次生成用于控制矢量处理电路上的检查处理的检查矢量指令。解码器生成的检查矢量指令可以与用于掩蔽除标量检查通道以外的通道的述词信息相关联,或者替代地在某些实施例中,该述词信息可以是隐式的。
在某些情况下,矢量处理电路可能不支持标量指令可用的所有功能。如果指令解码器在第一条指令序列中遇到标量指令,该标量指令对应于矢量处理电路对单个矢量指令进行响应时所不支持的操作,则可以通过以下方式处理:
·触发异常条件(例如,信号告知未定义的指令,然后可以使用可提供错误检查功能的软件异常处理程序对其进行处理),或
·通过将标量指令映射到第二指令序列中用于执行与标量指令的操作相对应的组合操作的两个或多个矢量指令,这可能会降低性能,但仍允许检测到永久性硬件故障,或
·通过将标量指令映射到可以在标量处理电路上背靠背执行的两个标量指令。例如,标量指令可以简单地执行两次,这将至少允许检测暂时性硬件故障,以及如果存在两个或多个相同类型的功能单元并且硬件支持或ISA提示被提供以确保将两个标量指令发出到单独的功能单元,则允许检测一些永久性故障。
可以根据实施方式需求以及针对给定等级的安全分类寻求的所需错误检测覆盖率来选择采用哪种方法。
另一方面,当在第一指令序列中遇到矢量指令时,指令解码器可以将矢量指令映射到以下各项之一:第二序列指令中第一通道子集对应于主矢量处理并且第二通道子集对应于检查处理的单个矢量指令;或对应于主矢量处理的第一矢量指令和对应于检查处理的第二矢量指令。检查处理是否可以在与主矢量处理相同的指令中执行可以取决于指令的类型。例如,虽然在同一指令内的不同通道子集中执行通道内算术指令而没有与主处理和检查处理的任何跨通道依赖性是安全的,但对于诸如置换指令等之类的指令,其中位于结果矢量中给定位置的元素取决于源矢量中其他位置的元素,在与相应主处理相同的指令中执行检查处理可能会导致独立操作之间的干扰,因此在这种情况下,最好将指令拆分为两个单独的矢量指令,一个用于控制主矢量处理,而另一个用于控制检查处理。
在某些情况下,矢量处理电路可以具有至少一个硬件功能单元,这些硬件功能单元提供对于标量指令所需但对于数据处理装置所支持的指令集架构的任何矢量指令均不需要的功能,并且可以使用至少一个硬件功能单元来执行检查处理。例如,尽管矢量处理中通常可能不支持某种操作,但是扩展至少一个硬件功能单元以支持该操作对于减少没有矢量等效项的标量指令的数量可能是有用的。
下面讨论一些具体示例。应当理解,本发明不限于这些特定示例。
图1是其中可以采用所描述的实施例的技术的数据处理装置2的框图。在图1所示的示例中,装置2采用管线处理器的形式。指令由取出电路10从指令缓存15(通常通过诸如二级缓存50之类的一个或多个级别的缓存耦合到存储器55)取出,然后指令从取出电路10被传递通过解码电路(指令解码器)20,该解码电路20对每个指令进行解码,以便产生适当的控制信号,以控制管线处理器中的下游执行资源,以执行指令所需的操作。形成解码指令的控制信号被传递到寄存器重命名和分发电路25。寄存器重命名/分发电路25将由指令指定的架构寄存器映射到来自物理寄存器池65、70、75(物理寄存器池通常大于架构寄存器的数量)的物理寄存器,从而可以消除某些危害,进而有助于更多地使用乱序处理。寄存器重命名/分发电路25还将经重命名的指令分发到管线的发出/执行级30。
发出/执行级30包括用于执行不同类型的指令的若干执行管线32、34、36、38、40、42。执行管线32-42可被共同视为形成处理电路。尽管图1示出了一个示例,其中发出级被分成若干较小的发出队列46,其中每个执行管线32-42与对应的用于将要由该管线32-42处理的指令进行排队的发出队列46相关联,但是其他示例可以具有在多于一个执行管线32-42之间共享的组合发出队列46。
指令保持在相关的发出队列46中,直到该指令所需的操作数在寄存器中可用为止。特别地,可将用于矢量操作的源操作数存储在矢量寄存器65内,并且可以将用于标量操作的源操作数存储在标量寄存器75中。此外,可将一个或多个述词(掩码)存储在述词寄存器70中,来用作在执行某些矢量操作时处理的矢量操作数的数据元素的控制信息。标量寄存器中的一者或多者也可以用于存储用于导出这样的控制信息的数据值,以在执行某些矢量操作时使用。寄存器还可以包括用于存储控制信息或状态信息的寄存器,例如指示程序当前执行点的程序计数器、用于控制条件指令操作的条件状态标志、处理器模式位等。
当发出队列46中的给定指令所需的操作数可用并且相应的功能单元就绪时,将指令发出到相关的执行管线。在该示例中,执行管线32-42包括用于执行跳转指令的跳转指令管线32、用于执行除了乘法或乘法-累加操作(例如加、减)之外的标量整数算术指令的两个整数管线34。还提供了单独的乘法管线36,用于处理乘法或乘法-累加操作(其他示例可以将整数和乘法管线34、36组合成单个单元)。提供了加载管线38,用于执行加载操作,以将从存储器系统读取(通过数据缓存45和任何中间的其他级别的缓存,例如2级缓存50)的数据向给定的标量寄存器75或矢量寄存器65加载,并且提供了存储管线40,用于处理存储操作,以将数据从给定的标量寄存器75/矢量寄存器65存储到存储器系统45、50、55。此外,提供了两个浮点(FP)和矢量处理管线42,用于处理标量或矢量浮点操作以及其他非浮点矢量操作。在该示例中,标量浮点指令在矢量处理管线42内执行以避免浮点电路的复制,但是也可以提供单独的标量浮点单元。因此,管线32-42可以全部被视为支持标量处理的执行的标量处理电路,而管线38、40、42可以被视为支持使用对矢量操作数执行的两个或更多个处理通道来处理矢量指令的矢量处理电路(加载/存储管线38、40可以处理矢量加载/存储)。执行指令的结果在管线的写回级60被写回到寄存器65、70、75。应当理解,图1所示的一组执行管线32-42仅是一个示例,并且其他实施例可以具有不同数量或类型的执行管线。
图1所示的系统可以是按程序顺序执行指令序列的有序处理系统,或者替代地,可以是乱序系统,从而允许为寻求性能的改善而对各种指令的执行顺序进行重排序。如本领域技术人员将理解的,在乱序系统中,可以提供用于支持乱序执行的附加结构(未在图1中明确示出)(例如,通常可以提供重排序缓冲区以保持跟踪乱序执行,并允许按顺序提交各种指令的执行结果)。在有序实施方式中,可能不需要重命名级25。
当前和未来的应用处理器包括越来越宽的单指令多数据(SIMD)数据路径和功能更强大的矢量执行单元。可以支持一系列矢量指令,这些矢量指令能够模拟绝大多数标量指令的行为。此外,述词寄存器允许许多指令有选择地启用或禁用各个矢量通道。如图2所示,可以提供一组硬件机制和/或编译器生成的指令,以改换一个或多个矢量处理通道的用途,使其与标量功能单元以锁步方式运行,并在矢量寄存器文件内复制标量寄存器的内容。这允许在矢量处理电路42的至少一个通道上执行检查处理,以检查在标量处理电路32-42或在矢量处理电路42的其他通道上执行的主处理的结果。
为了便于说明,我们将首先描述主处理为标量处理的示例(稍后将讨论主处理为矢量处理的其他示例)。下面给出了许多可能的实施方式变体,但是图2示出了基本概念:
A.标量加载和移动操作被镜像到等效矢量寄存器中的特定通道,例如
-将<foo>加载至x0→将<foo>移动至v0[n]
-将<foo>加载至x1→将<foo>移动至v1[n]
(其中,n是与为核内锁步保留的矢量通道相对应的寄存器元素的索引)
B.标量操作与等效矢量操作镜像(在通道n上)。例如,当在主处理中执行了用于将寄存器XA和XB的内容相加的标量加法指令时,使用矢量加法指令对其进行镜像,该矢量加法指令在矢量寄存器vSrcA和vSrcB的通道n上执行类似的加法。如图2所示,可以使用述词(Plockstep)来掩蔽除了用于检查处理的通道以外的通道。
C.在标量存储操作中,将用于存储操作的目标寄存器中的值与矢量寄存器文件65中的等效矢量寄存器元素进行比较,并且如果检测到不匹配,则对故障进行信号告知,例如,如果比较给出不相等的结果,则跳转到处理程序代码的位置,然后处理程序将错误向其他设备进行信号告知,或采取措施解决该错误(例如,通过触发复位到先前的执行点)。可以对处理器内部值(例如,标志)执行进一步的比较以增加覆盖率。
图3示出了图示出这样的方法的流程图。在步骤100,执行主处理,其可以是在标量处理电路32-42上的标量处理或在矢量处理电路42的通道子集上的矢量处理。在步骤102,在矢量处理电路42的至少一个通道上执行检查处理(与主处理并行地或顺序地)。在步骤104,比较主处理的结果与检查处理的结果,并且如果在步骤106检测到不匹配,则在步骤108对错误进行信号告知,而否则该方法返回步骤100以继续进行主处理和检查处理。
参照图1,尽管整数34和乘法36管线内的功能可以在矢量数据路径42内复制,但是诸如跳转管线32或加载管线38/存储管线40之类的其他单元不太可能为矢量数据路径复制。因此,核内锁步方案可能无法检测那些组件内的永久性故障(这些组件中的错误可以通过其他技术(例如使用软件测试)来检测)。类似地,在为进行标量和矢量计算共享相同功能单元(FU)(例如,图1示例中的浮点单元)的情况下,则共享功能单元将无法基于所建议的方案检测到其中的永久性故障,因此再次地,可以使用其他测试技术。尽管如此,在矢量处理单元上进行标量操作的镜像仍然减少了需要通过其他方式测试的元素数量,从而帮助提高性能。
请注意,即使执行基本相同的操作,矢量功能单元(FU)42也会比相应的标量FU34、36慢。通过支持标量操作以实现锁步集成,可以部分对此进行抵消,例如将锁步值移动至标量寄存器,并使用标量比较而不是下面图5中所示的基于矢量寄存器的版本。而且,假设不存在直接依赖性,则某些长等待时间矢量指令可能会与多个标量指令重叠。此外,处理器可以包括相同类型的多个标量FU(例如,图1中的两个整数FU 34)。在某些情况下,可以通过以下方式对此进行抵消:通过提供多个窄的FU而不是一个宽的FU(例如,两个单元在两个元素上并行操作,而不是一个单元在四个元素上并行操作),使得少数通道(例如,所建议的方案只有一个)上的矢量操作能够并行化。
下面讨论了三种实施方式变体,它们是根据所需的硬件支持级别排序的。
纯编译器驱动型
这种方法的优点是:ISA中没有硬件开销或操作码开销,因为可以使用现有的处理器设计而无需进行任何修改。取而代之的是,在软件工具链中执行对检查核内锁步操作的控制,并重新编译要执行的代码,以包括用于执行检查处理和比较的其他指令。另外,可以提供操作系统异常处理程序来处理由错误检查引起的故障。
图4示出了图示出为具有标量和矢量处理电路的装置2编译代码的方法的流程图。在步骤120,由编译器接收提供定义主处理的第一指令序列的源代码。源代码可以是程序员编写的高级代码,也可以是之前从程序员的高级代码编译而来的以汇编语言表达的编译代码。在步骤122,将源代码映射到第二指令序列(编译代码),该第二指令序列至少包括用于控制处理装置2执行主处理(标量或矢量)、在矢量处理的至少一个通道中的检查处理、以及用以比较主处理的结果与检查处理的结果以进行错误检测的一个或多个比较的指令。在步骤124,输出编译代码,然后可将编译代码存储在处理装置2的存储器55中,使得当取出并解码编译代码时,处理装置2将执行如图3所示的方法。
例如,图5图示出与基本C代码示例相对应的汇编代码如何能被注释以在将“总计”的计算结果写回存储器之前,验证“总计”的计算结果。请注意,循环计数变量“i”不会作为每次循环迭代的部分进行检查。因为这会影响“总计”的值,因此会在“总计”(R0)存储回存储器之前进行隐式检查。编译器引入了用于在汇编代码中镜像标量移动指令(MOV)的附加矢量移动指令(vDUP)、与汇编代码的标量算术指令ADD、SUBS相对应的附加矢量算术指令(vADD,vSUB)、以及循环结束处的一些指令vDUP、vCMP、BNE,用于将标量结果R0复制到矢量寄存器文件并将其与矢量寄存器V0中检查处理的结果进行比较,并且如果检测到不匹配,则跳转到处理程序。如果没有检测到不匹配,则可以允许标量存储操作(STR)继续进行。尽管这种方法在常见情况(无故障)下提高了性能,但它不允许检测无限循环。这是可被接受的,因为这样的循环运行时不会破坏架构状态并且相应的(故障)线程可以通过其他方式终止(例如使用看门狗定时器)。纯编译器驱动方法的主要优点是可以在未修改的硬件上进行操作。但是,并非所有标量指令都具有矢量等效体,因此该方法可能会限制编译器可用的一组标量指令,或者替代地可以使用多个矢量微操作来模拟一个标量指令(这可能需要额外的(临时)矢量寄存器)。而且,由锁步机制引入的比较可能污染状态标志(例如,为允许评估用于解析条件指令的条件所设置的条件标志,在一些实施例中,其可以在标量和矢量处理电路之间共享)。在这种情况下,编译器可能需要知晓条件标志的实现方式,以减轻不希望的影响。
如果没有ISA和硬件支持来直接将标量寄存器与矢量元素进行比较(如下面的变体中所述),则可以保留矢量寄存器(例如,图5中的Vx)以在比较之前临时保存标量值,或者替代地,锁步元素可以被传送到标量寄存器中进行比较。无论哪种情况,如果必须保留寄存器用于比较,这都将不允许标量和矢量寄存器的ID(即R0到V0[n]、R1到V1[n]等)之间进行1:1匹配,因此寄存器压力可能会有所增加。在下面讨论的ISA辅助并硬件支持的实施例中可以避免这种情况。
使用纯编译器实现的变体,用于锁步操作的无述词指令可以更改(损坏)保存在其他通道中其余矢量元素中的数据。由于某些ISA可能仅为指令类型的子集提供述词,因此为了避免检查处理与常规矢量操作之间的相互干扰,可能需要为标量检查操作保留一些寄存器,从而有效限制了可供编译器用于常规矢量代码的矢量寄存器的数量。
另一方面,如果矢量指令具有述词(允许矢量寄存器在常规矢量代码和检查操作之间共享),则编译器可能需要引入用于管理各个矢量指令的述词的附加指令,因为矢量寄存器现在可以包括常规矢量元素、锁步矢量元素(用于检查常规矢量处理的结果)和锁步标量元素(用于检查标量处理的结果)的数据。与非锁步情况相比,这些用于设置矢量述词的附加指令可能会降低性能。
检测矢量FU中的永久性故障需要在不同的FU(或矢量处理单元的不同FU通道)中处理常规指令和锁步指令。软件可能无法保证这一点,从而可能会减少纯编译器驱动实施方式变体的错误检测覆盖率。但是,某些处理器设计可能支持注释信息,该注释信息可以提供选定的指令,以强制它们在不同的FU上执行,因此编译器可以使用这样的注释信息来提供提示,这些提示指出用于错误检查的矢量指令应安排在常规代码的不同FU上。
在纯编译器驱动实施例中,可以在标量和矢量处理之间共享专用寄存器(例如状态标志、程序计数器)。专用寄存器中的某些错误可能会在其他操作中产生连锁反应,这使得仍可以通过比较主处理与检查处理来检测这样的错误。例如,在程序计数器(PC)的情况下,相应标量和矢量指令的交织允许检测故障的子集,例如,到任意位置的跳转可能会“跳过”与矢量指令不同数量的标量,因此导致后续比较的失败。但是,对于可能无法通过主处理与检查处理之间的比较检测到的其他类型的错误,可以使用正交错误检测技术(例如,使用软件测试)来检测这样的错误。
ISA协助型
通过为核内锁步提供降低程度的ISA(指令集架构)支持,可以大大改善上述编译器驱动的方法。例如,可以提供这样的指令:将标量寄存器与矢量元素进行比较,并在相等/不相等(vCBE/vCBNE)时跳转。图6示出了此类指令的示例。该指令指定Xm(标识用于比较的标量寄存器)和地址“标签”(标识如果满足相等或不相等条件的要跳转到的跳转目标位置)。地址“标签”可以表示为相对于程序计数器(当前指令的地址)的偏移量。可以根据错误处理代码是位于提供主处理和检查处理的代码的顺序位置(例如,当vCBE可以使用,使得相等(EQ)时跳转到下一段代码以提供主/检查处理),还是位于非顺序位置(例如,当vCBNE可以使用,使得不相等(NE)时跳转到错误处理程序)来选择使用vCBE还是vCBNE版本的指令。尽管跳转目标地址可以是标识错误处理程序或将要执行的下一段主/检查处理的实际地址,但实际上在指令编码中可能只有数量有限的位可用于标识地址。如果没有足够的位可用于编码实际的跳转目标地址,则可以使用蹦床结构(trampoline structure),其中标签编码到附近无条件跳转指令的短跳,然后无条件跳转指令跳转到实际目标地址。这种方法有助于使操作码的大小保持较小,尤其是对于vCBNE版本的指令,由于必须执行两条跳转指令而不是一条指令而导致性能略有降低,这通常是可以接受的,因为故障很少发生。
指令的其他操作数可以是隐式的。如果用于主标量处理的标量寄存器与用于相应检查处理的矢量寄存器之间存在1:1映射,则标量寄存器Xm的标识也可隐式地标识要与标量寄存器Xm进行比较的矢量元素是相应矢量寄存器Vm的元素n,其中n是标量检查通道,它可以由隐式锁步述词值Px确定,也可以由硬件隐式固定。替代地,矢量寄存器Vm或锁步述词Px也可以在指令编码中指定。类似地,指令可以使用另一寄存器操作数来指示保存其跳转目标的寄存器,而不是使用标签。
当从指令缓存15取出vCBE或vCBNE指令时,它由指令解码器20解码,该指令解码器控制执行级30执行如图6所示的操作,其中将标量寄存器Xm中的值与矢量寄存器Vm的元素n中的值进行比较,并到由“标签”指示的地址的条件跳转是根据比较的结果是否相等(其中对于vCBNE跳转发生在EQ时或对于vCBE发生在NE时)而执行的。
这些指令的替代版本可以比较标量和相应的矢量标志。标志可以是指示先前处理结果的属性(例如,结果是否为负、结果是否为零(或针对比较操作是否相等)、结果是否产生进位(无符号溢出)或结果是否溢出(有符号算术))的条件状态标志。条件指令可以使用条件状态标志来评估其条件并确定是否应执行相关联的操作。因此,状态标志中的差异可以指示生成标志的操作中存在差异,因此可以对在主处理和检查处理之一中的错误进行信号告知。因此,标志比较指令可以通过比较由主处理和检查处理生成的标量和矢量特定标志而不是由主处理和检查处理生成的整数或浮点值来比较主处理/检查处理的结果。这样做的好处是,指令所需的操作数可能更少(因为标量和矢量标志寄存器都可以是隐式的,只是因为它们始终是同一寄存器),并且标量和矢量寄存器之间的交互较少(无需将数据从任意选择的寄存器多路复用到比较器)。然而,尽管这样的指令可以检测用于确定跳转条件的变量(例如,图5示例中的R1)中的错误,但是它可能不覆盖要被写入存储器的值(例如,图5中的R0)中的错误。因此,一些实施方式可以支持标量矢量比较指令的数据值比较形式和标志比较形式,以便支持两种类型的错误的检测。
请注意,上面的ISA指令示例绝非详尽无遗,可以视为彼此正交。替代实施方式变体可以选择将标量寄存器与矢量寄存器元素的比较与后续条件跳转分开,即使用vCMP指令,该指令将主标量处理所使用的标量寄存器与由检查处理所使用的相应矢量寄存器的元素进行比较,之后使用条件跳转指令BNE。这将减少通过避免标签操作数而引入的操作码开销。但是,由于增加的指令数量、需要污染标量标志等,这也可能会潜在地降低性能。
总而言之,在ISA中提供可由指令解码器解码的本机指令以控制标量寄存器文件中的值与矢量寄存器文件的检查通道中的值之间的直接比较可能对提高使用矢量处理电路42进行核内锁步检查的性能非常有用。通常,出于性能原因,人们通常会试图避免标量和矢量寄存器文件之间的直接交互,因为在典型的高端处理器中,物理远程标量和矢量寄存器文件之间的较长布线将使时序约束难以满足这样的处理器通常需要支持的频率。但是,对于上面讨论的标量矢量比较指令,这通常不是问题,因为它们不是时间关键的,并且在组合比较/跳转版本的指令中,可以非常高精度地预测跳转结果(假设无故障,因为故障很少见)。此外,这些指令仅需要连接至用于标量检查的特定矢量通道,因此无需复用来自矢量寄存器的任意元素,而只需将预定的“锁步”元素转发至标量比较器即可。
出于多种原因,这样的指令可提供性能优势。首先,由于不需要暂时保存用于将标量值传送到矢量寄存器文件的指令(例如,图5中的vDUP指令)的结果,因此减小了矢量寄存器文件的压力,反之亦然。而且,在一条指令而不是三个指令(如图5所示的vDUP、vCMP和BNE)中执行比较和跳转,因此减少了对内部队列(例如,解码队列、发出队列46)的压力,并且提高的代码密度降低了指令缓存15污染。由于指令类型为预测逻辑提供了良好的提示(因此可能比一般的跳转指令更可靠),因此跳转预测器可以轻松地以较高精度预测指令(因为故障应该很少)。而且,使用特殊的比较/跳转指令意味着用于锁步检查的比较不会污染标量条件状态标志,因此编译器具有更大的自由度来优化指令的顺序。该指令还可以提供潜在的能量节省,因为矢量操作的数量和范围减少了,并且性能提高了。
硬件辅助型
除了如上所述为附加指令提供ISA支持外,许多其他硬件修改可以为锁步检查提供更高的性能。在一些示例中,处理装置2可以具有锁步专用的硬件模式,其可以提供所提出的实施方式变体的最全面的错误检测覆盖率和最佳性能。根据特定的实施方式,可以将其设计为提供对用户级应用透明的核内锁步保护;即无需重新编译现有代码库。其ISA占用空间可以保持较小,例如指示模式的硬件支持以及在检测到故障后进入的异常处理程序的一个软件可读状态寄存器位。关于高度硬件支持的折衷是成本,不仅在面积开销和设计时间方面,而且在验证复杂性方面。以下部分描述了可作为锁步模式的一部分实现的组件的示例。
首先,处理器可以支持锁步模式位以将锁步与常规操作区分开,使得可以减少非锁步用例的能量和性能开销,同时仍然支持锁步处理。例如,状态寄存器可以提供锁步模式位,该锁步模式位可以被设置为指示处理器应以锁步模式进行操作,或者可被清除以指示处理器应以非锁步模式进行操作。在非锁步模式下,定义要执行的主处理的指令将按常规方式解码,而无需将其他指令引入管线以触发检查处理或主处理与检查处理的比较。完整的矢量宽度可用于矢量指令(包括矢量处理单元42支持的所有通道)。
另一方面,在锁步模式中,可以修改指令解码器20以将附加指令注入到与检查处理以及主处理与检查处理的比较相对应的管线中。例如,指令可以自动解码两次。在标量主处理的情况下,标量指令可以作为标量指令自动解码一次,并且作为提供检查处理的相应矢量指令解码第二次。在矢量主处理的情况下,可以将矢量指令映射到单个矢量指令,该单个矢量指令具有提供主处理的第一通道子集和提供检查处理的第二通道子集,或映射到分别与主处理和检查处理相对应的两个单独的矢量指令。
图8示出了在硬件辅助型实施例中的解码指令的方法。在步骤130,从指令缓存15中取出第一指令序列,该第一指令序列包括用于控制管线以执行主处理(可以是标量处理或矢量处理或两者的混合)的指令。在步骤132,解码器20将第一指令序列映射到第二指令序列(也称为微操作,这些微操作表示执行级30所支持的内部操作,而不是ISA中定义的宏操作)。第二指令序列包括用于执行由第一序列定义的主处理,以及向主处理提供相应的操作的检查处理的指令,其中检查处理在矢量处理单元42的至少一个通道上执行。请注意,在主处理是矢量处理的情况下,可以使用与主处理相同的指令(具有分区的通道)来实现检查处理,因此不必生成单独的指令。可选地,第二指令序列还可以包括用于触发主/检查处理的比较的指令(其可以是通用比较指令或上述特定的标量矢量比较指令)。另一方面,如果硬件响应于存储指令而自动触发主处理与检查处理之间的比较,则可能不需要包括这样的比较指令。在步骤134,第二指令序列被输出到下一管线级25,并且该指令由管线的其余部分处理。
此外,处理器可以具有用于将标量加载的结果自动传递到相应矢量寄存器中的特定元素的硬件。类似地,在进行标量存储操作之前,可以自动将标量处理所产生的标量操作数与等效的矢量元素进行比较,其中会因不匹配而引发故障异常。通过在指令解码器20中生成相应的微操作,或者通过使用矢量寄存器文件内的某些元素与某些标量功能单元(例如加载管线38/存储管线42或算术单元34、36)之间的专用转发路径,可以自动触发这两个操作。
某些标量指令可能没有矢量等效体。当编译码旨在用于锁步模式时,可以使用编译器标志来限制编译器使用的可用指令。替代地,如果指令解码器20遇到锁步模式中不支持的指令,则解码器20可以引发异常(例如,未定义的指令异常),或者在标量功能单元中两次重新执行该指令(从矢量寄存器文件中读取值,在标量FU中执行,然后写回到矢量寄存器文件,尽管这不允许检测标量FU中的永久性故障(除非可以将其保留用于锁步执行))。另一选项是将不支持的标量指令映射到实现相同的结果的两个或多个矢量指令的组合。某些指令类型(例如跳转或存储屏障)可能出于锁步目的而被解码器忽略,因为它们不太可能具有矢量等效体,并且可以通过其他方式(例如通过软件检查)进行检查。
硬件可以帮助支持核内锁步检查的另一种方式可以是扩展执行级30内某些功能单元的功能。例如,如图7所示,执行级可以具有多个标量硬件功能单元(例如,对应于执行管线32-40)和多个矢量通道硬件功能单元(矢量管线42的一部分)。矢量通道功能单元的数量不必与所支持的矢量通道的最大数量相同,因为可以在功能单元的多次通过中处理更多数量的矢量通道。虽然通常每个矢量通道功能单元是相同的,以支持专用检查矢量通道中的锁步检查,但是至少一个矢量硬件功能单元150可以部分或完全复制一个矢量通道的一个或多个标量FU的功能。这是一项可选功能,但是如果可以提供具有扩展功能的检查矢量通道,则可以在锁步模式中增加所支持指令的数量,因此与解码器在标量FU中重新执行不支持的指令的情况相比,可以增加针对永久性故障的错误检测覆盖率。
此外,硬件可以使用隐式的锁步述词值,以避免常规矢量指令影响对应于标量操作生成的锁步指令的结果(请参阅下面讨论的主矢量处理的检查)。通过使用隐式的锁步述词值(即,为主处理的锁步检查保留的通道的固定名称以及对检查指令在其他通道上的影响的硬件实现的掩蔽),无需包括用于管理在述词寄存器70中的锁步述词的指令,这不仅可以由于执行更少的指令,而且还可以由于减少述词寄存器压力而提高性能。此外,这可以节省ISA编码空间。
另一硬件辅助型功能可以是复制矢量状态标志,以提供由锁步检查指令使用的单独一组矢量状态标志。这避免了锁步指令对常规矢量标志的污染,使得可以支持矢量化代码的核内锁步,而无需编译器支持以避免标志污染的不利影响,并且当通过修改的硬件以锁步方式执行现有代码时,提高了错误覆盖率。跳转执行单元32可以在执行条件跳转指令时检查相关的标量和矢量标志,以确保它们匹配,并且如果匹配,则照常执行跳转,而如果标量标记与矢量标记之间存在不匹配,会引发“故障”异常,因为这指示主处理与检查处理之间存在差异。
此外,可以复制专用寄存器(例如程序计数器、状态寄存器、处理器模式位)。一些处理器设计通常可以在标量和矢量处理电路之间共享一组专用寄存器,但是通过复制第二组以用于进行锁步检查,由于专用寄存器中的错误现在也可被检测到,因此这提供了更大的错误检测覆盖率。类似地,可以复制跳转目标的地址计算和存储器(加载/存储)指令,以增加错误覆盖率。复制地址计算的硬件开销通常是适中的,因为大多数处理器可能已经包括适合地址计算的多个整数ALU 34。
上面的硬件修改示例简化了核内锁步的适配(通过使其软件透明),减少了性能损失并增加了错误检测覆盖率。应当理解,包括所有这些修改并不是必不可少的,可以根据开发成本与改进的性能/错误覆盖率之间的期望折衷来选择上述技术的任意组合。可以考虑进行进一步的修改,例如更宽的队列或更长的发出窗口,以进一步减少由微操作数量增加而带来的性能损失。
矢量指令的锁步检查
图2的示例示出了利用单个矢量通道来与标量执行单元和寄存器锁步运行。假定以这种形式的标量锁步方案禁止常规矢量指令的执行,则基础矢量架构不需要任何形式的述词。如图2所示,使用锁步述词Plockstep只会减少不期望的操作次数,因此会产生更高的能源效率。
但是,也可以将传统的矢量指令作为标量和矢量锁步方案的一部分来执行。在这种情况下,如图9所示,可以通过将操作数从第一通道子集映射到与检查处理180相对应的第二通道子集,并在同一矢量指令的各个通道子集内(或者替代地,在不同矢量指令的各个通道子集内)运行主处理和检查处理,来检查主矢量处理170。
在矢量锁步的情况下,将提供对矢量的进一步分区以避免独立操作之间的干扰。例如,图9图示出将8元素矢量分区为:
-为常规矢量操作保留的两个元素,
-为等效的矢量锁步操作保留了两个元素
-为标量锁步操作保留的一个元素,以及
-3个未使用的元素
常规矢量操作和矢量锁步检查操作也可分别对三个64位元素进行操作。然而,一些处理器可以实现矢量处理单元,使得最大矢量长度可能需要是一定数量的位(例如128位)的倍数,并且取决于数据元素的大小(例如64位),依赖于此属性的算法可能不支持包括奇数个数据元素的矢量。因此,支持锁步操作的设计可能会阻止这样的算法,并迫使常规和锁步通道的数量变为偶数,或者提供修改的数据路径以支持奇数倍元素。
可以如下执行述词管理以确保隔离上面介绍的矢量分区。用于特定指令的述词取决于其类型:
-标量锁步操作使用标量锁步述词值Ps,lockstep,该述词值在标量检查通道中的位值为1,在其他通道中的位值为0;
ο标量锁步操作包括为镜像标量操作而执行的任何矢量操作。
ο标量锁步述词Ps,lockstep可以防止破坏剩余矢量元素中保存的数据,这将有助于在锁步检查指令和常规矢量指令之间共享同一矢量寄存器。
ο然而,除非所有矢量指令都支持Ps,lockstep(或者在指令编码中显式地支持,或者通过引入标量锁步矢量指令的述词的硬件隐式地支持),否则将需要为标量锁步操作保留多个矢量寄存器以防止常规矢量指令使用的其他通道受到污染。这将增加矢量寄存器的压力并增加编译器的复杂性。
-没有述词的指令使用Pv||Pv,lockstep(主矢量处理使用的通道中和用于检查主矢量处理的结果的通道中都具有1)或!Ps,lockstep(标量锁步述词的逆,除标量检查通道以外的所有通道中都有1)。
ο某些矢量架构可主要针对某些浮点指令、存储器访问和通道间操作(例如归约)设置述词。
ο由于矢量锁步操作被期望镜像传统矢量操作,因此仅需禁用为标量锁步保留的元素,以防止数据损坏。
ο不为此目的提供显式或隐式述词指令的实施方式将为标量锁步操作专门保留多个矢量寄存器。
-述词指令将Pv用于常规矢量指令(在为主矢量处理保留的通道中具有1),或Pv,lockstep用于锁步矢量指令(在为主矢量处理检查保留的通道中具有1)。
ο例如,存储器访问可以使用Pv将存储器访问限制为常规矢量操作:
ο加载:对矢量锁步分区中的已复制的加载元素执行通道间移动(或逐元素移位+OR)
ο存储:在存储之前,执行通道间比较(或逐元素移位+CMP)以确保常规矢量元素与锁步矢量元素之间的匹配,并在不匹配时跳转到故障处理程序
-通道间操作(例如归约或置换)将隔离各个分区,例如一次使用Pv,一次使用Pv,lockstep重复同一指令。
关于述词生成的复杂性取决于ISA的程度和所提供的硬件支持(请参见上文)。一些矢量架构可能支持执行上述矢量加载和存储所需的数据移动所需的置换指令。它们还可以支持将与常规矢量元素相对应的述词位镜像到与锁步矢量元素相对应的位的手段。但是,大多数架构不支持某些通道间操作所要求的隔离单个分区,因此类似于上述通道间矢量指令的处理,这样的通道间述词生成指令将被执行两次(一次使用Pv,并且一次使用Pv,lockstep)。
除非所有指令具有述词,否则将通过使用单独的寄存器在物理上隔离为标量和矢量操作保留的分区。ISA支持解决此问题的一个示例可以是,使用每无述词矢量指令的附加操作码位在Ps,lockstep和!Pv,lockstep(Pv,lockstep的逆)之间进行选择,其中保存述词的寄存器由架构预定。锁步意识型解码器将通过自动选择相应的述词(例如,用于在解码标量指令时生成的标量锁步操作的Ps,lockstep)来减轻此操作码开销。通过确保常规和相应的锁步操作在不同的功能单元中执行,上面讨论的ISA或硬件修改也可以用于提高永久性故障的覆盖率。
检测执行常规矢量指令的永久性故障可能需要将矢量功能单元拆分。特别地,可以通过使用两个FU来执行四元素宽的加法,每个FU对两个元素进行操作。然后,锁步操作可以确保在不同的FU中的执行。尽管这不一定会影响非锁步保护代码的性能,但可能会增加硬件复杂性。
核内锁步的恢复操作
在上面讨论的示例中,当基于主处理和检查处理操作的结果检测到错误时,可以通过中止正在执行的错误处理线程来处理错误。例如,当检测到错误时可能会生成中断,然后中断处理程序可以执行操作以终止错误处理线程并在以后重新调度(或在终止线程之后,中断处理程序可以回到控制线程调度的操作系统)。但是,此方法可能会对性能产生重大影响,因为在重新调度线程时,可能需要从线程的最开始处重新开始处理,并且可能会丢失在检测到错误之前所进行的任何前向进程。尽管软件检查点(其中在程序代码中包括显式存储指令以在程序执行过程中在各个点处将处理的中间结果存储到存储器中)可以用于保留重新启动之间的某些前向进行,但是由于软件开发成本和性能开销的增加,这种方法则具有缺点。
图10示出了另一实施例,其中处理管线2具有一些微架构特征,这些微架构特征使得处理管线能够使用错误处理的恢复模式,其中可以纠正核内锁步模式中检测到的错误并继续所执行的线程的前向进程,而无需丢失在该线程中进行的所有先前进程,并且无需执行除了该线程自己的主/检查指令以外的指令。图10中与图1相同的元素用相同的附图标记表示。为简洁起见,尽管发出/执行级30中的各个发出队列46和执行单元32至42可以与图1中的相同,但是未在图10中示出。类似地,为简洁起见,矢量寄存器65、标量寄存器75和述词寄存器70在图10中简单地示出为单个寄存器块,但是仍然可以提供这些类型的寄存器中的每一种。
图10的示例包括错误处理电路200、210,该错误处理电路响应于检测到与给定的检查操作和相关联的主操作相关联的信息之间的不匹配,而触发恢复操作以纠正错误并在执行级30上继续主处理的前向进程。例如,错误处理电路可以包括管线的写回级60内的结果比较电路200,用于比较给定的检查操作和其相关联的主操作的结果。虽然在图1的示例中,仅可以在存储到存储器的存储操作中来比较操作结果,但在图10的示例中,其他操作(例如,在一些情况下,所有成对的检查操作和相应的主操作)的结果可以使用结果比较电路进行检查。为了防止潜在不正确的结果被写入寄存器65、75、70,成对的相关联的主操作和检查操作可以被保存在提交缓冲区202中,直到两个结果都可用并且结果被确定为匹配为止。提交缓冲区在乱序管线中也可以称为重排序缓冲区。如果确定给定的一对主操作和检查操作的结果不匹配,则可以由结果比较电路200触发恢复操作(包括从管线驱逐出至少受影响的指令并重新发出这些指令)。驱逐并重新发出指令的机制可能已经在管线微架构中提供,例如用于处理由与取出级10相关联的跳转预测器204做出的错误预测,或者用于处理其他形式的错误预测(例如如果在计算目标加载地址之前预测性地加载的加载数据被证明是不正确的)。此外,在某些管线中,如果在给定的处理点发生异常,并且管线已经被该处理点之外的指令填充,则异常处理可能需要将某些指令驱逐出。因此,结果比较电路200可以重用现有的驱逐和重新发出机制,以便从核内锁步模式中检测到的错误中恢复。
错误处理电路的另一示例是存储值比较电路210,该存储值比较电路可以比较与主操作和检查操作相关联的存储值,以便检测由诸如寄存器65、75、70或缓冲区或队列结构(例如,加载/存储队列212)之类的存储元件中的故障引起的错误。应当理解,加载/存储队列212只是可能的队列或缓冲区结构的一个示例。
如图11所示,存储值比较电路210可以使用错误检测码(EDC)来保护存储数据免于故障。现代DRAM通常依靠错误纠正码(ECC)来提高其可靠性。关注安全性和某些商用实施方式通过存储层级结构扩展了ECC的使用范围,甚至扩展到L1缓存。尽管可以使用ECC来保护处理器的寄存器文件,但是在电路面积和延迟方面,实现ECC的计算和检查ECC是否匹配其对应的数据值(实质上重复了ECC的计算)是非常昂贵的,并且在寄存器文件上使用ECC意味着该延迟在由管线执行的大多数微操作的处理的关键路径上,这意味着ECC对于高性能商用处理器是不实际的。
取而代之的是,图11中提出的方案使用核内锁步模式的特性,使与常规指令相对应的数据被复制到寄存器内的多个位置(或者在单独的矢量寄存器通道中,或者利用矢量通道复制标量寄存器文件中的数据)。因此,不需要计算上昂贵的ECC逻辑来恢复数据。取而代之的是,可以使用便宜的错误检测逻辑(例如奇偶校验位或循环冗余校验(CRC))来在用完整副本覆写之前识别哪个特定数据实例被破坏。
图11提供了奇偶校验信息可以如何被分配给矢量和述词寄存器的锁步(LS)元素的示例。请注意,不必为标量寄存器或常规矢量元素计算此信息,因为当将这些元素与它们的LS等效项匹配时,这些存储值内的错误将被检测到。
在一个示例中,错误检测机制的操作如下所述。
在寄存器写入之前:
·基于常规(主处理)操作的结果(可能先于LS等效项到达)计算奇偶校验信息
·比较常规结果和锁步结果:
ο不匹配时,执行恢复操作,包括驱逐/重新发出进行中的指令。
ο匹配时,用主/检查数据值和奇偶校验信息来更新寄存器。
在寄存器读取时:
·比较常规和等效锁步数据(主值和检查值)
ο匹配时:
·将数据转发到相应的主/检查操作
·可选:计算奇偶校验信息并检查常规元素或锁步元素,并在不匹配时纠正所存储的奇偶校验数据(纠正所存储的奇偶校验信息中的错误)
ο不匹配时:
·计算奇偶校验信息并检查常规元素或锁步元素
·用其他元素替换错误的元素
ο正常进行。
当用于检查处理的矢量锁步元素被提供以镜像主处理中使用的N个矢量元素的对应集合(其中N≥2)时,可以通过计算N个矢量锁步元素的整个块的单个EDC(例如,在图11的示例中,与矢量锁步元素V2和V3相对应的单个奇偶校验位)来减少与矢量锁步元素的EDC相关联的开销。同样地,从与矢量锁步元素的块相对应的述词值中计算出相应的奇偶校验值222,以允许在寄存器读取时检测述词寄存器中的错误。不必为每个矢量锁步元素计算单独的EDC,因为单个奇偶校验位足以确定在常规矢量元素块(V0,V1)或矢量锁步元素块(V2,V3)中单个位是否已改变状态,因为在给定寄存器写入发生的频率很高的情况下,在EDC的连续计算之间的时间段内发生多次位翻转的可能性非常低。替代地,可以提供与每个单独的矢量锁步元素相对应的单独的EDC,在这种情况下,将需要一些额外的鲁棒性来抵抗在常规或锁步元素的不同元素中发生的多个错误。
上面的示例在将数据值转发到管线中相应的主/检查操作之前,在寄存器读取时对常规数据和锁步数据进行了比较。这样做的优点是,可以通过将错误值替换为该对中的另一值来简单地纠正错误,而无需驱逐/重新发出任何指令。
一种替代方案是允许微操作在完成常规/锁步数据的比较之前继续执行,并推测不存在故障。因此,所涉及的比较可以与常规数据处理操作重叠以隐藏它们的等待时间。在这种情况下,由于一些已经执行的操作的结果可能不正确,因此在检测到故障时,恢复操作可以包括针对数据路径错误所描述的驱逐和重新发出指令。这种方法可以提高常规无错误情况下的性能,但要以增加检测到错误时用于恢复错误的等待时间为代价。
尽管上面的示例讨论了使用奇偶校验码作为错误检测码的示例,但是应当理解,也可以使用其他类型的错误检测码。例如,可以使用循环冗余校验(CRC)码。奇偶校验位(其指示在相应的数据值中存在偶数个1还是奇数个1)可能在计算上更简单,但更复杂的错误校验码(例如CRC)即使在多位故障的情况下也可以提供故障覆盖率。
请注意,在图11中,可以通过将奇偶校验信息(或其他错误检测码)与分别与主和检查操作相关联的主和检查存储值中的仅一个值相关联来减少与计算和校验奇偶校验信息相关联的开销。例如,在图11所示的情况下,仅为矢量锁步元素和标量锁步元素(即校验值)存储奇偶校验信息,而不为表示与主处理相关联的主值的常规矢量元素或存储在标量寄存器75中的标量值计算奇偶校验信息。
图12图示出覆盖队列结构的类似机制。如图12的部分A)所示,可以将多个冗余条目分配给队列(例如,装置的管线、存储器或其他系统组件内的加载/存储队列212或其他队列或缓冲区结构),并且可以将奇偶校验信息或其他EDC分配给每对冗余条目中的一个条目,以当在读取缓冲区时发现一对冗余条目不匹配时能够检测哪个条目不正确。尽管奇偶校验信息的单个实例可以覆盖所有LS条目,但每次单个条目被写入时,都需要基于所有条目中保存的数据进行重新计算。提供每条目的一个实例限制了其对由要写入的条目所保存的数据的计算工作。如图12的部分B)所示,一种替代方案是非冗余地将条目分配给缓冲区212,但是提供每条目的冗余信息(例如,ECC),这使得能够纠正和检测错误,以在用于LS用途的队列条目分配的开销与增加的控制逻辑复杂性以及计算和/或存储开销之间进行权衡。
可以使用类似的技术来扩展状态寄存器(例如,程序计数器、条件标志或处理器状态/模式指示位等)以及保存不驻留在上述方案所覆盖的寄存器或队列中的数据的总线。例如,将处理器连接到附近存储器的总线可能会两次发送相同的数据,并要求接收者比较接收到的值。替代地,总线可以被扩展以并行于常规数据传输冗余信息。不需要覆盖诸如跳转预测器204之类的不影响架构状态的结构。尽管这些结构中的错误可能会延迟程序执行,但它们不会影响功能的正确性。
除了从数据存储元件中的故障中恢复之外,我们还建议引入微架构功能,以实现从数据处理元件(例如功能单元(FU)32-42)中的故障中恢复。特别地,我们建议使用由针对核内锁步执行的冗余执行提供的信息。通过比较提交之前的常规和锁步(主和检查)结果,可以检测到FU 32-42内部中仅影响那些结果中的一者的故障。然后,处理器可以通过使用通常已经提供的用于处理错误推测或异常的电路来恢复。特别地,它可以重新发出受影响的指令及其所有从属指令,或者重新发出所有当前进行中的指令。请注意,这些事件的稀有性允许硬件设计人员优化电路,以在面积、复杂性和能耗方面将开销降至最低。恢复所需的周期数不是特别重要,因为与受影响的过程的中止和重新启动相比,总的恢复时间要短得多。除了FU本身之外,该方法还以影响相关的主/检查操作的结果的某一程度覆盖相关联的队列(例如发出队列46或重排序缓冲区)。例如,重命名逻辑内部的错误可能导致常规和等效的锁步检查指令计算出两个不同的结果。发现之后,重播机制可以丢弃重命名表中的无效条目,并使用正确的操作数标识符重新发出相应的指令。
为了使核内锁步模式能够从故障中恢复,将配对识别电路214(其可在写回之前将常规指令与相应锁步等效项相关联)引入写回级60。图13至图15示出了三种用于识别相关的主/检查微操作的配对的替代技术:
图13:在解码级20标记指令或微操作对:
·在解码时,将匹配的配对标识符分配给相关的常规和锁步指令,并为每个不同的操作对提供唯一的配对ID。
·所需的配对ID码位数与进行中的指令的最大数量除以2成正比。
·配对ID可以从写回级60处的提交缓冲区202使用的指令提交(重排序)缓冲区ID中得出,或者可以是任意标识符值。
·默认配对ID(例如零)可用于没有锁步等效项的操作。
·在提交之前,检查
ο如果ID==0、非LS指令,则正常提交
ο否则,搜索在提交缓冲区(重排序缓冲区或ROB)202的头部的窗口,以查找具有相同ID的第二完成指令;然后如上所述匹配结果,并在主要/检查结果对都可用且匹配时提交
图14:在提交缓冲区202中彼此相邻地分配指令对
·在解码时,将指令对分配给相邻的提交缓冲区202条目。
·某些指令没有锁步等效项,因此执行以下任一项:
ο将两个独立的非LS微操作分配给一对条目,并为每对条目提供至少一个位,用以区分它是与一对相关的主/检查操作还是两个独立的操作有关;或
ο(如图14中的示例所示)在用于没有LS等效项的指令(例如,跳转、存储或在不复制加载微操作的实施例中的加载(其他实施例可以如上所述通过复制的微操作来处理加载))的一对条目中留一个空条目(NOP)。
ο代替NOP,解码器可以插入其他指令,例如通过在矢量功能单元42内部复制底层地址计算,在跳转之后进行程序计数器与期望值的检查。
图15:提交前评估操作码、操作数ID和述词
·在解码时,并没有特定的动作,而是写回级60具有比较电路,用以比较与每个微操作相关联的信息以检测相关的主/检查操作。
·使用述词信息来区分常规指令和LS指令
·假设在相同的操作数上操作并在相同时间帧内执行的相似类型的常规指令和LS指令(ADD、MUL等)彼此对应
·提交之前,检查ROB头部的固定大小窗口以获取相应的指令对;如果找到,则如上所述匹配结果
请注意,上述方法可能必须进行修改,以在常规标量和相应矢量LS指令之间处理不同程度的微操作(uOp)。例如,可以将复杂标量指令的矢量等效项分解为多个uOp,以降低实施方式成本。因此,图13所示的技术可以将相同的配对ID分配给标量指令和仅最终矢量uOp(而不是同一矢量指令的其他uOp)。图14所示的技术可以将附加的矢量uOp在一对相应的标量指令和矢量uOp之前分配给提交缓冲区。图14中所示的技术在寻找相应的标量指令时可能需要识别作为分解指令的一部分的矢量uOp的序列。
上述EDC和驱逐/重新发出错误恢复机制适用于进行检测和从暂时性故障中恢复。但是,永久性故障可能导致这样的错误恢复机制进入故障检测和尝试恢复的无穷循环。看门狗定时器或类似装置可用于检测这样的循环并终止所陷入的过程。根据故障的根源,则处理器可能会进行冷复位以排出残留电荷,并且如果在后续测试中不再显示故障,则处理器可能会重新运行。
为了无需外部计时器就能够检测到永久性故障,可以使用标志或计数器扩展检测电路,以跟踪恢复尝试的次数。如图16所示,可以提供错误计数器,用于计算尝试进行恢复操作的次数。当尝试次数超过给定阈值时,可以触发永久错误处理响应。例如,为处理永久错误而采取的响应可以包括:主处理的中止、向操作系统对警报事件进行信号告知、向第二处理器核心对警报事件进行信号告知、或将主处理的执行转移到第二处理器核心。尤其是:
从数据存储元件中的故障中恢复:
·可以改变计数器的数量和位置,以在开销和覆盖率之间进行权衡,例如所有故障一个计数器、每寄存器文件一个计数器、每寄存器一个计数器,等等。
·在寄存器读取时不匹配后,递增
·可选:
ο当检测到错误时,不是在将纠正的值转发给处理单元时仅覆写损坏的值,而是恢复机制可能会覆写该损坏的值,然后重新读取并检查是否仍然存在错误,使得永久性故障的检测能够比等待其他操作读取同一寄存器要早。计数器仍可用于跟踪重试次数。
从数据处理元件中的故障中恢复
·再次地,选择计数器数量和位置,以在开销和覆盖率之间进行权衡,例如所有故障对应一个计数器、每重排序缓冲区条目一个计数器,等等。
·提交前不匹配后,递增
·如果计数器溢出:
ο停止(中止)对当前线程的处理
ο尝试恢复
·自动冷重启(单核机器可能需要,因为恢复算法可能无法在故障核心上执行)
·将信号发送到第二(未损坏)核心以在那里进行恢复(可选)。根据错误的位置,可将当前(未损坏)架构状态存储出去(store out)。然后,第二核心或恢复的核心可以从所述状态继续执行。这可能需要足够的计数器来标识故障的位置并确定架构状态是否损坏。根据处理此存储出去的方式和位置,可能还需要故障状态寄存器中的足够信息,例如在第二处理器核心上运行的处理程序可以检查故障核心的状态寄存器,并决定是否/如何进行存储出去。
还可以改变计数器的容量(位数)以在存储开销与错误恢复能力之间进行权衡:
·如果位数为1,则将计数器视为标志,这具有简单的控制电路和较低的存储开销。因此,如果已经执行了一次恢复操作的给定存储或数据路径元件中再次发生错误,则会触发中止操作。
·如果位数大于1,则可以从持续几个周期的故障中恢复,例如,随着时间的流逝,α撞击产生的电荷可能会耗尽。
·增加计数器位数的一种替代方案可以是使用1位标志,但是在故障检测之后引入经商议的n周期延迟,以实现从持续几个周期的故障中恢复的类似效果。
计数器值可以是仅微架构能够访问的内部寄存器,而软件可读的则不可以。替代地,计数器值可以是软件可读的,这对于调试目的和/或随着时间跟踪故障分布可能是有用的。
从错误中成功恢复后,可以复位计数器。在固定数量的周期后,可以将计数器复位,而不会发生其他故障。成功恢复后,本地计数器也可能会复位。例如,与特定寄存器文件相对应的计数器可以在错误值被覆写并成功重新读取后进行复位。类似地,与ROB条目相对应的计数器可以在相应指令被成功提交之后进行复位。
图17是图示出执行数据处理的方法的流程图。在步骤300,指令由管线的前端部分的解码级20解码。在步骤302,解码器确定处理器当前是否正在核内锁步模式中操作。如果不是,则在步骤304,解码器控制管线的前端部分以控制执行级30执行仅与主处理相对应的操作。例如,指令解码器20可以仅发出与主处理相对应的微操作,并且可以不发出任何检查操作。该方法然后返回到步骤300以继续解码指令。
另一方面,如果核心当前处于核内锁步模式(例如,这可以基于配置寄存器中的模式设置值来确定),则在步骤306,管线的前端部分的解码级20控制执行级以执行主处理和检查处理两者,其中检查处理对应于将主处理的相应操作进行镜像的冗余操作。主处理上的每个操作都不必一定具有相应的检查操作。
在步骤308,错误处理电路200、210检测与检查和主操作相关联的任何信息之间是否存在不匹配。例如,这可能是结果比较电路200所检测到的操作结果之间的不匹配,或者可能是与存储值比较电路210所检测到的操作相关联的存储值之间的不匹配。如果未检测到不匹配,则处理继续并且该方法返回到步骤300以继续解码指令。如果检测到与检查和主操作相关联的信息之间的不匹配,则在步骤310触发恢复操作以纠正错误并继续主处理的前向进程,然后该方法返回到步骤300。在步骤310,恢复操作可以例如包括:基于成对的存储值的值来纠正一个存储值中的错误,和/或从管线中驱逐出一些指令并将它们重新发出以供执行。
尽管图17示出了在步骤308检测到不匹配时正在执行的恢复操作,但是在支持不同错误处理模式的一些实施方式中,可以基于模式设置位在其中使用如步骤310所执行的恢复操作的恢复模式与其中取代当检测到不匹配时中止主处理线程的中止模式之间进行选择。
在本申请中,词语“被配置为……”用于表示装置的元件具有能够执行所定义的操作的配置。在此上下文中,“配置”是指硬件或软件的布置或互连方式。例如,该装置可以具有提供所定义的操作的专用硬件,或者可以被编程以执行该功能的处理器或其他处理设备。“被配置为”并不意味着需要以任何方式改变装置元件以提供所定义的操作。
尽管本文已经参考附图详细描述了本发明的说明性实施例,但是应该理解,本发明不限于这些精确的实施例,并且本领域的技术人员可以在其中进行各种改变和修改,而不脱离由所附权利要求限定的本发明的范围和精神。

Claims (26)

1.一种装置,包括:
处理管线,包括执行级以及至少一个前端级,所述执行级用以响应于微操作而执行数据处理,并且所述至少一个前端级用以根据程序指令来控制向所述执行级发出哪些微操作;
所述处理管线具有核内锁步操作模式,在所述核内锁步操作模式中,所述至少一个前端级被配置为:发出微操作以控制所述执行级来执行主处理和检查处理,所述检查处理包括冗余操作,所述冗余操作与至少部分主处理的相关联的主操作相对应;以及
错误处理电路,用以响应于检测到与给定的检查操作和相关联的主操作相关联的信息之间的不匹配,而触发恢复操作以纠正错误并在所述执行级上继续所述主处理的前向进程。
2.根据权利要求1所述的装置,其中,所述错误处理电路包括结果比较电路,用以检测所述给定的检查操作的结果与所述相关联的主操作的结果之间的所述不匹配。
3.根据权利要求1和2中任一项所述的装置,其中,所述恢复操作包括:
将至少一个进行中的微操作从所述处理管线驱逐出,所述至少一个进行中的微操作对应于或取决于检测到不匹配的所述给定的检查操作与所述相关联的主操作,并且
将所述至少一个进行中的微操作重新发出以供所述执行级执行。
4.根据前述权利要求中任一项所述的装置,其中,所述恢复操作包括:将所有进行中的微操作从所述处理管线驱逐出,并且将这些被驱逐出的微操作重新发出以供所述执行级执行。
5.根据前述权利要求中任一项所述的装置,其中,所述处理管线包括:写回级,用以将所述给定的检查操作的结果或所述相关联的主操作的结果延迟写回到寄存器状态存储装置,直到所述给定的检查操作和所述相关联的主操作两者都已被执行并且所述给定的检查操作的结果与所述相关联的主操作的结果被确定为匹配。
6.根据权利要求5所述的装置,其中,所述写回级包括配对识别电路,用以识别与检查操作和相关联的主操作相对应的一对微操作。
7.根据权利要求5和6中任一项所述的装置,其中,所述至少一个前端级被配置为:为向所述执行级发出的微操作分配配对标识符,其中与所述给定的检查操作和所述相关联的主操作相对应的微操作被分配有相同的配对标识符。
8.根据权利要求5和6中任一项所述的装置,其中,所述处理管线包括具有多对缓冲槽的提交缓冲区,每个缓冲槽用以缓冲进行中的微操作,直到其结果被所述写回级写回到所述寄存器状态存储装置,并且所述处理管线被配置为:将与所述给定的检查操作和所述相关联的主操作相对应的微操作分配到同一对缓冲槽。
9.根据权利要求6所述的装置,其中,所述配对识别电路被配置为:基于与所述微操作相关联的操作码和操作数标识符的比较,来识别一对微操作。
10.根据前述权利要求中任一项所述的装置,包括多个寄存器,其中,当响应于在所述核内锁步模式中操作时的所述主处理而执行将数据从数据存储库加载到目标寄存器的加载操作时,所述处理管线还被配置为:将所加载的数据也写入所述目标寄存器的检查区域或另一寄存器以供与访问所述目标寄存器的主操作相对应的检查操作进行访问。
11.根据前述权利要求中任一项所述的装置,其中,所述错误处理电路包括存储值比较电路,用以检测分别用于所述给定的检查操作和所述相关联的主操作的一对存储数据值之间的所述不匹配。
12.根据权利要求11所述的装置,其中,所述存储数据值包括在寄存器中存储的架构状态。
13.根据权利要求11和12中任一项所述的装置,其中,所述存储数据值包括在队列结构中存储的控制数据。
14.根据权利要求11至13中任一项所述的装置,其中,所述一对存储数据值中的至少一者与错误检测码相关联。
15.根据权利要求14所述的装置,其中,当检测到所述一对存储数据值之间不匹配时,所述错误处理电路被配置为:基于与所述一对存储数据值中的至少一者相关联的错误检测码,来检测所述一对存储数据值中的哪一者是错误的,并且通过使用所述一对存储数据值中的另一者来纠正该错误的存储值。
16.根据权利要求15所述的装置,其中,当所述错误的存储值被纠正之后,所述存储值比较电路被配置为:再次检测所述一对存储数据值之间是否存在不匹配。
17.根据权利要求14至16中任一项所述的装置,其中,当检测到所述一对存储数据值之间匹配时,所述错误处理电路被配置为:触发对与所述一对存储数据值中的所述至少一者相关联的所述错误检测码的重新计算。
18.根据权利要求14至17中任一项所述的装置,其中,所述一对存储数据值中仅一者与所述错误检测码相关联。
19.根据前述权利要求中任一项所述的装置,其中,所述错误处理电路具有:
恢复模式,在所述恢复模式中,所述错误处理电路响应于检测到所述不匹配,而执行所述恢复操作;以及
中止模式,在所述中止模式中,所述错误处理电路响应于检测到所述不匹配,而中止处理所述处理管线上的所述主处理。
20.根据权利要求19所述的装置,包括配置存储元件,用以存储错误处理模式设置值,所述错误处理模式设置值指示所述错误处理电路将在所述恢复模式操作还是在所述中止模式中操作。
21.根据前述权利要求中任一项所述的装置,包括错误计数器,用以对所述错误处理电路执行所述恢复操作的次数进行计数。
22.根据权利要求21所述的装置,其中,所述错误处理电路被配置为:当所述错误计数器指示所述恢复操作被执行了超过阈值次数时,中止对所述处理管线上的所述主处理的处理。
23.根据权利要求21和22中任一项所述的装置,包括多个处理器,所述处理器中的至少一个处理器包括所述处理管线和所述错误处理电路,其中,所述错误处理电路被配置为:当所述错误计数器指示所述恢复操作被执行了超过阈值次数时,触发对所述主处理的处理到另一处理器的切换。
24.根据权利要求21至23中任一所述的装置,其中,所述错误处理电路被配置为:当所述错误计数器指示所述恢复操作被执行了超过阈值次数时,触发对所述装置的复位。
25.根据前述权利要求中任一项所述的装置,其中,所述执行级包括矢量处理电路,用以执行矢量处理,所述矢量处理包括对包含多个数据元素的矢量操作数执行的多通道处理;
所述检查操作包括在所述矢量处理电路的至少一个通道上执行的操作;并且
所述主操作包括在所述矢量处理电路的其他通道上执行的操作或对标量操作数执行的标量处理。
26.一种数据处理方法,包括:
响应于由处理管线的至少一个前端级根据程序指令发出的微操作,而使用所述处理管线的执行级来执行数据处理;
其中,在核内锁步操作模式中,所述至少一个前端级发出微操作以控制所述执行级来执行主处理和检查处理,所述检查处理包括冗余操作,所述冗余操作与至少部分主处理的相关联的主操作相对应;以及
响应于检测到与给定的检查操作和相关联的主操作相关联的信息之间的不匹配,而触发恢复操作以纠正错误并在所述执行级上继续所述主处理的前向进程。
CN201880063526.0A 2017-10-05 2018-08-30 核内锁步模式的错误恢复 Active CN111164578B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1716283.5 2017-10-05
GB1716283.5A GB2567190B (en) 2017-10-05 2017-10-05 Error recovery for intra-core lockstep mode
PCT/GB2018/052451 WO2019069043A1 (en) 2017-10-05 2018-08-30 RESUME AFTER ERROR FOR INTRA-HEART SYNCHRONIZED LOCKING MODE

Publications (2)

Publication Number Publication Date
CN111164578A true CN111164578A (zh) 2020-05-15
CN111164578B CN111164578B (zh) 2024-02-23

Family

ID=60326884

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880063526.0A Active CN111164578B (zh) 2017-10-05 2018-08-30 核内锁步模式的错误恢复

Country Status (4)

Country Link
US (1) US11263073B2 (zh)
CN (1) CN111164578B (zh)
GB (1) GB2567190B (zh)
WO (1) WO2019069043A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112416609A (zh) * 2021-01-22 2021-02-26 南京芯驰半导体科技有限公司 双核模式的模式配置方法及装置
CN114265872A (zh) * 2022-02-24 2022-04-01 苏州浪潮智能科技有限公司 一种用于总线的互联装置

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11126495B2 (en) * 2018-03-07 2021-09-21 Micron Technology, Inc. Dynamic error handling in a memory system
US11372711B2 (en) * 2019-06-29 2022-06-28 Intel Corporation Apparatus and method for fault handling of an offload transaction
US11449339B2 (en) * 2019-09-27 2022-09-20 Red Hat, Inc. Memory barrier elision for multi-threaded workloads
US11651209B1 (en) 2019-10-02 2023-05-16 Google Llc Accelerated embedding layer computations
TWI719741B (zh) * 2019-12-04 2021-02-21 財團法人工業技術研究院 改變冗餘處理節點的處理器及其方法
US11556413B2 (en) * 2019-12-09 2023-01-17 SiFive, Inc. Checker cores for fault tolerant processing
FR3104754B1 (fr) * 2019-12-17 2021-12-24 Thales Sa Systeme electronique comportant un dispositif d'estimation de defauts d'une memoire electronique soumise aux conditions de vol a haute altitude
CN114428638A (zh) * 2020-10-29 2022-05-03 平头哥(上海)半导体技术有限公司 指令发射单元、指令执行单元、相关装置和方法
JP2023035739A (ja) * 2021-09-01 2023-03-13 ルネサスエレクトロニクス株式会社 半導体装置
EP4170535A1 (en) * 2021-10-19 2023-04-26 Renesas Electronics Corporation Integrated circuit
WO2023110069A1 (en) * 2021-12-15 2023-06-22 Huawei Technologies Co., Ltd. Data processing apparatus and method implementing a software lockstep
CN114579083B (zh) * 2022-05-09 2022-08-05 上海擎昆信息科技有限公司 一种基于矢量处理器的数据处理装置和方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1973261A (zh) * 2004-06-30 2007-05-30 英特尔公司 用于预测执行无竞争的锁定指令的方法和装置
US20080313435A1 (en) * 2007-06-12 2008-12-18 Arm Limited Data processing apparatus and method for executing complex instructions
CN101539875A (zh) * 1999-12-21 2009-09-23 英特尔公司 纠正软错误的固件机制
CN105022607A (zh) * 2014-04-17 2015-11-04 Arm有限公司 连续微操作的结果复用
CN106663471A (zh) * 2014-09-26 2017-05-10 英特尔公司 用于反向存储器备份的方法和装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE10349581A1 (de) * 2003-10-24 2005-05-25 Robert Bosch Gmbh Verfahren und Vorrichtung zur Umschaltung zwischen wenigstens zwei Betriebsmodi einer Prozessoreinheit
US20050108509A1 (en) * 2003-11-13 2005-05-19 Safford Kevin D. Error detection method and system for processors that employs lockstepped concurrent threads
US20090183035A1 (en) * 2008-01-10 2009-07-16 Butler Michael G Processor including hybrid redundancy for logic error protection
US8489919B2 (en) 2008-11-26 2013-07-16 Arizona Board Of Regents Circuits and methods for processors with multiple redundancy techniques for mitigating radiation errors
US10248488B2 (en) * 2015-12-29 2019-04-02 Intel Corporation Fault tolerance and detection by replication of input data and evaluating a packed data execution result

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101539875A (zh) * 1999-12-21 2009-09-23 英特尔公司 纠正软错误的固件机制
CN1973261A (zh) * 2004-06-30 2007-05-30 英特尔公司 用于预测执行无竞争的锁定指令的方法和装置
US20080313435A1 (en) * 2007-06-12 2008-12-18 Arm Limited Data processing apparatus and method for executing complex instructions
CN105022607A (zh) * 2014-04-17 2015-11-04 Arm有限公司 连续微操作的结果复用
CN106663471A (zh) * 2014-09-26 2017-05-10 英特尔公司 用于反向存储器备份的方法和装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112416609A (zh) * 2021-01-22 2021-02-26 南京芯驰半导体科技有限公司 双核模式的模式配置方法及装置
CN114265872A (zh) * 2022-02-24 2022-04-01 苏州浪潮智能科技有限公司 一种用于总线的互联装置

Also Published As

Publication number Publication date
GB201716283D0 (en) 2017-11-22
WO2019069043A1 (en) 2019-04-11
CN111164578B (zh) 2024-02-23
GB2567190B (en) 2020-02-26
US20200192742A1 (en) 2020-06-18
US11263073B2 (en) 2022-03-01
GB2567190A (en) 2019-04-10

Similar Documents

Publication Publication Date Title
CN111164578B (zh) 核内锁步模式的错误恢复
US6772368B2 (en) Multiprocessor with pair-wise high reliability mode, and method therefore
KR101546033B1 (ko) Smt 기계에서 비교 및 전달 명령어를 사용한 안정적 실행
US7861228B2 (en) Variable delay instruction for implementation of temporal redundancy
CN109891393B (zh) 使用检查器处理器的主处理器错误检测
US7584405B2 (en) Fault-detecting computer system
US6640313B1 (en) Microprocessor with high-reliability operating mode
US11507475B2 (en) Error detection using vector processing circuitry
US6615366B1 (en) Microprocessor with dual execution core operable in high reliability mode
US7478276B2 (en) Method for checkpointing instruction groups with out-of-order floating point instructions in a multi-threaded processor
US6505296B2 (en) Emulated branch effected by trampoline mechanism
Osinski et al. A survey of fault tolerance approaches on different architecture levels
JP2006252548A (ja) 時間的冗長性を実施するための可変遅延命令
Didehban Software Techniques For Dependable Execution
Buchanan A Fault Tolerant Core for Parallel Execution of Ultra Reduced Instruction Set (URISC) and MIPS Instructions
Sundaramoorthy et al. Cooperating Threads Architecture: Improving both Performance and Fault Tolerance

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