在同步多线程机上使用比较和传送指令的可靠执行.pdf

上传人:a*** 文档编号:4247190 上传时间:2018-09-12 格式:PDF 页数:20 大小:551.72KB
返回 下载 相关 举报
摘要
申请专利号:

CN201080022638.5

申请日:

2010.04.27

公开号:

CN102439561A

公开日:

2012.05.02

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 9/38申请日:20100427|||公开

IPC分类号:

G06F9/38; G06F11/16

主分类号:

G06F9/38

申请人:

超威半导体公司

发明人:

兰加纳坦·苏达卡尔; 诺恩·T·阔奇

地址:

美国加利福尼亚州

优先权:

2009.04.29 US 12/432,146

专利代理机构:

上海胜康律师事务所 31263

代理人:

李献忠

PDF下载: PDF下载
内容摘要

本发明提供在同步多线程机上进行高效且可靠执行的系统和方法。处理器设置在可靠执行模式(REM)中,以在任务关键型软件应用程序的执行过程中检测可能的错误。只有两个线程可经配置以在该模式中运行。浮点存储和整数变换一元指令可转换成新的二元指令。每个新指令具有两个源操作数,对应于不同线程的每个源操作数由相同逻辑寄存器编号指定为所述原始一元指令的单个源操作数。所有其他指令可进行复制,其中所述原始指令及其副本分配给不同线程。在使用所述新指令与实例化的整数独立群集通信时,同步多线程(SMT)浮点逻辑可能只能够提供锁步执行。在所述两个源操作数就绪之前,所述新指令无法开始,其中所述两个源操作数随后将进行比较以确定任何不匹配或错误。

权利要求书

1: 一种系统, 包括 : 计算机程序的高速缓冲存储指令 ; 以及 处理器 ; 其中所述处理器经配置以执行以下操作 : 响应于确定所述指令的原始指令对应于第一指令类型, 复制所述原始指令以创建所述 原始指令的副本 ; 响应于确定所述指令的所述原始指令对应于将由第一功能单元执行的第二指令类型, 不复制所述原始指令, 其中所述第一功能单元具有 M 个副本, 每个副本对应于多个线程的 两个或更多线程 ; 以及 响应于确定源操作数从第一线程就绪且源操作数从所述多个线程中的至少一个其他 线程就绪, 执行所述第二指令类型的所述原始指令。
2: 根据权利要求 1 所述的系统, 其特征在于, 响应于执行所述第二指令类型的所述原 始指令, 所述处理器进一步经配置以将单个结果从所述第一功能单元传输到对应于所述第 一线程的第二功能单元, 以及传输到对应于所述多个线程中的另一个线程的第三功能单 元。
3: 根据权利要求 2 所述的系统, 其特征在于, 响应于确定所述原始指令对应于第一指 令类型, 所述处理器进一步经配置以执行以下操作 : 将所述原始指令分配给所述多个线程中的第一线程 ; 以及 将所述原始指令的所述副本分配给与所述第一线程不同的至少一个线程。
4: 根据权利要求 2 所述的系统, 其特征在于, 响应于执行所述第二指令类型的所述原 始指令且确定每个源操作数就绪, 所述处理器进一步经配置以将每个源操作数的值互相比 较。
5: 根据权利要求 4 所述的系统, 其特征在于, 所述处理器进一步经配置以比较所述第 一指令类型的所述原始指令的结果和所述原始指令的至少一个副本的结果。
6: 根据权利要求 5 所述的系统, 其特征在于, 所述处理器进一步经配置以响应于通过 以下项中的一项或多项检测到不匹配而传输错误信息 : 对所述结果进行的比较, 以及对所 述源操作数进行的比较。
7: 根据权利要求 6 所述的系统, 其特征在于, 所述第一功能单元是整数执行单元且所 述第二功能单元是浮点单元。
8: 根据权利要求 7 所述的系统, 其特征在于, 所述第一指令类型是以下项中的一项或 多项 : 浮点存储指令和浮点整数变换指令。
9: 一种方法, 包括 : 响应于所述指令的原始指令对应于第一指令类型, 复制所述原始指令以创建所述原始 指令的副本 ; 响应于所述指令的所述原始指令对应于将由第一功能单元执行的第二指令类型, 不复 制所述原始指令, 其中所述第一功能单元具有 M 个副本, 每个副本对应于多个线程中的两 个或更多线程 ; 以及 响应于源操作数从第一线程就绪和从所述多个线程中的至少一个其他线程就绪, 执行 所述第二指令类型的所述原始指令, 其中每个源操作数由所述原始指令的相同寄存器编号 2 指定。
10: 根据权利要求 9 所述的方法, 其特征在于, 响应于执行所述第二指令类型的所述原 始指令, 所述方法进一步包括将单个结果从单个第一功能单元传输到对应于所述第一线程 的第二功能单元, 以及传输到对应于所述多个线程中的另一线程的至少一个其他第二功能 单元, 其中所述第二功能单元具有 N 个副本, 每个副本对应于所述多个线程中的单个不同 线程, 且其中 N 是大于 M 的整数。
11: 根据权利要求 10 所述的方法, 其特征在于, 响应于确定所述原始指令对应于第一 指令类型, 所述方法进一步包括 : 将所述原始指令分配给所述多个线程中的第一线程 ; 以及 将所述原始指令的所述副本分配给与所述第一线程不同的至少一个线程。
12: 根据权利要求 10 所述的方法, 其特征在于, 响应于执行所述第二指令类型的所述 原始指令且每个源操作数就绪, 所述方法进一步包括比较每个源操作数的值。
13: 根据权利要求 12 所述的方法, 其特征在于, 所述方法进一步包括比较所述第一指 令类型的所述原始指令的结果和所述原始指令的至少一个副本的结果, 其中所述结果在相 同的管线阶段中计算得到。
14: 根据权利要求 13 所述的方法, 其特征在于, 所述方法进一步包括响应于通过以下 项中的一项或多项检测到不匹配而传输错误信息 : 对所述结果进行的所述比较, 以及对所 述源操作数进行的所述比较。
15: 根据权利要求 14 所述的方法, 其特征在于, 所述第一功能单元是浮点单元且所述 第二功能单元是整数执行单元。
16: 根据权利要求 15 所述的方法, 其特征在于, 所述第一指令类型是以下项中的一项 或多项 : 浮点存储指令和浮点整数变换指令。
17: 一种浮点协同处理器, 包括 : 经配置以与指令提取单元、 高速缓冲存储器, 以及两个或更多整数执行群集通信的接 口, 每个整数执行群集对应于多个线程中的单个不同线程 ; 存储元件 ; 以及 电路, 其中所述电路经配置以执行以下操作 : 响应于所述指令的原始指令对应于第一指令类型, 复制所述原始指令以创建所述原始 指令的副本 ; 响应于所述指令的所述原始指令对应于将由第一功能单元执行的第二指令类型, 不复 制所述原始指令, 其中所述第一功能单元具有 M 个副本, 每个副本对应于所述多个线程中的两个或更多线程 ; 以及 响应于源操作数从第一线程就绪和从所述多个线程中的至少一个其他线程就绪, 执行 所述第二指令类型的所述原始指令, 其中每个源操作数由所述原始指令的相同寄存器编号 指定。
18: 根据权利要求 17 所述的浮点协同处理器, 其特征在于, 响应于执行所述第二指令 类型的所述原始指令, 所述电路进一步经配置以将单个结果从单个第一功能单元传输到对 应于所述第一线程的整数执行群集, 以及传输到对应于所述多个线程中的另一线程的至少 一个其他整数执行群集, 其中所述整数执行群集具有 N 个副本, 每个副本对应于所述多个 3 线程中的单个不同线程, 且其中 N 是大于 M 的整数。
19: 根据权利要求 18 所述的浮点协同处理器, 其特征在于, 响应于确定所述原始指令 对应于第一指令类型, 所述电路进一步经配置以执行以下操作 : 将所述原始指令分配给所述多个线程中的第一线程 ; 以及 将所述原始指令的所述副本分配给与所述第一线程不同的至少一个线程。
20: 根据权利要求 18 所述的浮点协同处理器, 其特征在于, 响应于执行所述第二指令 类型的所述原始指令且每个源操作数就绪, 所述电路进一步经配置以比较每个源操作数的 值。

说明书


在同步多线程机上使用比较和传送指令的可靠执行

    【技术领域】
     本发明涉及计算系统, 更确切地说, 涉及在同步多线程机上的高效可靠执行。背景技术 任务关键型软件应用程序需要具备高可靠性。 此类应用程序的某些实例包括财务 和银行软件、 数据库和军事应用程序。软件测试方法可用于验证和确认软件应用程序是否 已达到预定的质量水平。然而, 用于执行应用程序的硬件平台, 例如微处理器, 可能会产生 问题。 尽管可像软件应用程序一样, 事先对微处理器进行测试以确保达到预定的质量要求, 但是综合所有输入和先决条件, 例如初始状态, 进行测试是不可行的。此外, 除功能错误之 外, 现代微处理器中可能同时出现硬错误, 例如固定型故障, 和软错误, 例如存储节点上辐 射诱发的错误。
     由于下一代新处理器的节点电容和供电电压会随时间的推移而下降, 因此存储在 节点上的电荷量也会减少。 基于这一事实, 节点更易受到由宇宙射线、 阿尔法粒子和中子等 高能粒子引起的辐射诱发的软错误的危害。 这种辐射会在晶体管的源区和漏区产生将由源 极和漏极二极管传输的少数载子。 存储在节点上的电荷相对于总电荷的变化可能是一个相 当大的百分数, 从而超出电路的噪声极限并改变节点的存储状态, 其中对于每一代产品而 言, 所述电荷变化是不断下降的。 尽管这种辐射不会对电路造成永久损坏, 但可能出现逻辑 故障。
     基于上述原因, 静态随机存取存储器 (SRAM) 等存储器使用错误校正码 (ECC) 来检 测并更正软错误。 触发性电路等时序元件可能会在设计中使用更大的电容节点或冗余销存 器来应对软错误。然而, 组合逻辑内的节点, 例如整数和浮点功能单元, 同样容易受到软错 误的危害。 因此, 针对功能错误和硬错误的测试并未证明组合逻辑不受软错误的危害, 而这 在任务关键型应用程序中是不可取的。
     无论错误是由功能故障、 硬错误还是软错误引起的, 任务关键型应用程序可能都 难以容忍出现任何错误, 且可能不允许重复执行特定的数据集。为了确保应用程序在特定 硬件上正确运行且为了检测错误, 可使用检查点以并行执行两次的方式运行应用程序。在 每个检查点上, 可对每次执行的结果数据进行比较, 所述结果数据应该是相同的。因此, 同 步执行是以锁步方式运行的。检测点处的比较所检测出的任何差异都可能标记为错误。两 次执行的同步执行操作可以回到前一次成功的检查点处并从相应检查点重新并行执行。 此 外, 标记或警告可能会报告给用户。 用户可决定重新执行应用程序, 看看有问题的检查点处 是否再次出现差异, 也可以决定在确定结果数据的差异时排除应用程序的故障。
     然而, 高效地运行并行的锁步执行过程可能十分困难。 例如, 出于直接存储器存取 (DMA) 次数不一致以及刷新操作不一致等原因, 使用两个微处理器可能无法实现锁步执行, 其中每个微处理器同步执行应用程序的一个副本且与另一个微处理器同时开始执行。因 此, 使用一个具有多个相同硬件和功能单元的微处理器更好。
     许多现代微处理器使用多个相同内核来实施多线程操作, 其中每个内核可对单独
     的软件线程以与其他内核同步的方式独立运行。
     实现任务关键型应用程序的锁步执行的一种方式是在微处理器内的两个相同内 核上同步执行应用程序和所述应用程序的副本。如果每个内核接收到相同的指令, 例如在 第一内核中接收到原始指令且在第二内核中接收到所述指令的相同副本, 则可在每个时钟 周期内进行相关数据的比较。因此, 可实现任务关键型应用程序的锁步执行。
     然而, 可能有多种不同因素会中断此类锁步执行。 例如, 并非所有硬件资源都可以 进行复制, 以在微处理器内实现多线程操作。浮点单元 (FPU) 包括复杂的逻辑, 会占用许多 芯片内空间。此外, FPU 操作也不会经常执行。因此, 设计师并不倾向于在芯片上为浮点逻 辑制造独立且昂贵的副本。相反, FPU 和芯片上其他潜在的硬件资源的多线程操作可通过 同步的多线程 (SMT) 来实现。
     正如多线程的情况一样, 在 SMT 中, 源自超过一个线程的指令可在任何指定的管 线阶段同时执行, 且可用于隐藏存储器延迟并提高单位硬件使用量的计算能力。但是, SMT 是通过复制处理器的某些部分来工作的, 例如存储架构状态的部分, 而不是复制主要的执 行资源。这就让配有 SMT 的处理器在表面上对主机操作系统显示为两个 “逻辑” 处理器。所 述操作系统可同步调度两个或多个线程或程序。在当前线程未使用不具 SMT 功能的处理器 中的执行资源时, 且尤其是在处理器因高速缓存失败而停止时, 分支预测错误, 或者说配备 SMT 的处理器可能使用这些执行资源来执行另一个预定的线程。 SMT 硬件, 例如 FPU, 不会以锁步方式执行两个线程的操作。因此, 与硬件副本, 例 如两个独立的整数群集副本, 的任何通信都会中断所述两个整数群集内的锁步执行。 此外, 当微处理器以可靠执行模式运行时, 为了不降低所述微处理器的性能, 最好不要修改任何 调度程序和重命名逻辑, 以及在所述整数群集之间传递信号, 以便同步从 FPU 接收到的非 锁步信号。
     鉴于上述情况, 需要用于在同步多线程机上进行高效且可靠执行的高效方法和机 制。
     发明内容 本发明涉及在同步多线程机上进行高效且可靠执行的系统和方法。 在一个实施例 中, 本发明提供包括高速缓冲存储器和处理器的计算机系统。所述处理器可包括同步多线 程 (SMT) 浮点单元 (FPU) 和多实例化整数独立群集, 其中每个群集对应于不同的线序 ( 硬 件线程 )。在可靠执行模式 (REM) 中, 处理器可经配置以仅对两个线程操作。任务关键型软 件应用程序的指令可在所述处理器上执行。从 FPU 传输到整数群集的非浮点外部操作的每 个指令都经过复制。源指令分配到第一线程。相同的副本指令分配到第二线程。
     处理器前端和整数群集可以锁步方式执行所述两个线程的这些指令。 包括两个结 果的比较结果的检查点可在指令引退或执行完成阶段出现, 具体取决于设计要求。不匹配 可能导致处理器将错误信息传送到所述高速缓冲存储器中的预定位置, 供用户进行检查。
     从 FPU 传输到整数群集的浮点外部操作的每个指令都转换成新指令。通常情况 下, 浮点外部操作是一元指令, 例如浮点存储指令或浮点整数变换指令。 如果两个线程是在 REM 操作的过程中运行的, 则此类指令将转换成二元指令。 两个源操作数对应于每个运行线 程, 且由相同的逻辑注册号指定为第一指令的单个源操作数。
     在执行此类新指令的过程中, FPU 需要等待两个源操作数就绪, 这是浮点调度程序 的正常操作。这两个源操作数的比较应确定匹配情况。如果出现不匹配情况, 则如上所述, 所述处理器将错误信息传送到所述高速缓冲存储器中的预定位置, 供用户进行检查。存储 或整数变换操作仍然可能继续, 也可能暂停执行, 具体取决于所需的设计。 如果出现匹配情 况, 则 FPU 将结果同步传送到所述整数群集。 因此, 所述浮点操作可以不同步执行, 但从 FPU 到整数群集的传输实现了同步操作。所述处理器继续以锁步方式执行。
     在另一个实施例中, 本发明提供像多实例化整数独立群集一样, 从指令提取单元 接收指令的 SMT FPU。FPU 内的逻辑经配置以在处理器处于 REM 操作模式时执行上述的所 有步骤。 附图说明
     图 1 为说明示例性微处理器的一个实施例的概括性方框图。
     图 2 为说明进行乱序执行的通用处理器内核的一个实施例的概括性方框图。
     图 3A 为用于在同步多线程处理器上高效且可靠执行的方法的一个实施例的流程 图。
     图 3B 为用于在同步多线程处理器上高效且可靠执行的方法的一个实施例的流程图。 尽管本发明可能有多种修改或替代形式, 但本专利申请文件以举例的方式展示了 特定实施例并进行了详细介绍。但应了解, 本专利申请文件的附图和详细说明并不旨在将 本发明限定于所揭示的特定形式, 相反, 本发明由随附的权利要求书定义, 包括落在本发明 的精神和范围内的所有修改、 等效物和替代。
     具体实施方式
     以下说明中列出了许多具体细节, 以帮助您深入了解本发明。 但是, 所属领域的一 般技术人员应了解, 本发明可在没有这些具体细节的情况下进行实践。 在某些情况下, 本专 利申请文件并未详细说明公知的电路、 结构和技术, 以免使得本发明难以理解。
     图 1 展示了示例性微处理器 100 的一个实施例。微处理器 100 可包括内存控制器 120、 接口逻辑 140、 一个或多个处理单元 115, 纵横制互联逻辑 116 和共享高速缓冲存储器 子系统 118, 其中所述一个或多个处理单元可包括一个或多个处理器内核 112 和相应的高 速缓冲存储器子系统 114。在一个实施例中, 微处理器 100 的图示功能并入单个集成电路 中。
     接口 140 通常提供输入 / 输出 (I/O) 装置与微处理器 100 中的共享高速缓冲存 储器子系统 118 和处理单元 115 之间的接口。在本专利申请文件中, 通过参考数字后跟字 母指代的元件可统一仅用数字指代。例如, 处理单元 115a 至 115b 可统一指代为处理单元 115, 或单元 115。I/O 装置可包括打印机、 键盘、 显示屏、 相机、 读卡器、 硬盘或软盘驱动器或 驱动器控制器、 网络接口卡、 视频加速器、 音频卡、 调制解调器等外围网络装置, 通用接口总 线 (GPIB) 或现场总线接口卡等多种数据采集卡, 或其他装置。此外, 接口 140 可用于与其 他微处理器和 / 或其他处理节点通信。通常情况下, 接口逻辑 140 可包括缓冲器, 所述缓冲 器用于从相应链路接收信息包, 并缓冲即将经由相应链路传输的信息包。任何合适的流控机制可用于向和从微处理器 100 传输信息包。
     微处理器 100 可经由相应的内存控制器 120 连接到相应存储器。存储器可包括任 何合适的存储装置。例如, 存储器可包括一个或多个 RAMBUS 动态随机存取存储器 (DRAM)、 同步 DRAM(SDRAM)、 DRAM、 静态 RAM 等。微处理器 100 的地址空间可分给多个存储器。每个 微处理器 100 或包括微处理器 100 的相应处理节点可包括存储器映射, 所述存储器映射用 于确定地址与存储器之间的映射关系, 并确定应将存储器的特定地址请求路由到哪个微处 理器 100 或处理节点。在一个实施例中, 某个地址的一致性点是连接到对应于所述地址的 内存存储字节的内存控制器 120。内存控制器 120 可包括用于通过接口连接到存储器的控 制电路。此外, 内存控制器 120 可包括用于对存储器请求进行排列的请求队列。
     一般而言, 纵横制互联逻辑 116 经配置以响应在连接到接口 140 的链路上接收到 控制信息包, 根据处理器内核 112 和 / 或高速缓冲存储器子系统 114 生成控制信息包、 根据 由内存控制器 120 选择的服务事务生成探针命令和响应信息包, 以及将包括微处理器的中 间节点的信息包经由接口逻辑 140 路由到其他节点。接口逻辑 140 可包括接收信息包, 并 将所述信息包与纵横制互联件 116 所使用的内部时钟同步的逻辑。纵横制互联件 116 可经 配置以将存储器请求从处理器内核 112 传输到共享高速缓冲存储器子系统 118, 或传输到 内存控制 120 和较低级别的存储器子系统。 另外, 纵横制互联件 116 可经由内存控制器 120 将所接收到的内存线和控制信号从较低级别的存储器传送到处理器内核 112 和高速缓冲 存储器子系统 114 和 118。纵横制互联件 116、 内存控制器 120、 接口 140 和处理器单元 115 之间的互联总线实施可包括任何合适的技术。 高速缓冲存储器子系统 114 和 118 可包括经配置以存储数据块的高速缓冲存储 器。高速缓冲存储器子系统 114 可并入相应处理器内核 112 内。或者, 高速缓冲存储器子 系统 114 可通过背面高速缓冲配置或内联配置 ( 如果需要 ) 连接到处理器内核 112。此外, 高速缓冲存储器子系统 114 可作为高速缓冲存储器的分级进行实施。如果需要, 靠近处理 器内核 112( 在分级内 ) 的高速缓冲存储器可并入处理器内核 112 中。在一个实施例中, 高速缓冲处理器子系统 114 各自代表第二级高速缓冲结构, 且共享高速缓冲存储器子系统 118 代表第三级高速缓冲结构。
     高速缓冲存储器子系统 114 和共享高速缓冲存储器子系统 118 可包括连接到相应 高速缓冲控制器的高速缓冲存储器。处理器内核 112 包括用于根据预定义的通用指令集执 行指令的电路。例如, 可选择 x86 指令集架构。或者, 可选择 Alpha、 PowerPC 或其他任何通 用指令集架构。通常情况下, 处理器内核 112 会对数据和指令分别访问高速缓冲存储器子 系统 114。如果未在高速缓冲存储器子系统 114 或共享高速缓冲存储器子系统 118 中找到 请求块, 则可生成读取请求并经由指定路线传输到控制器 120 中缺失块所映射的位置。
     图 2 说明进行乱序执行的通用处理器内核 200 的一个实施例。指令高速缓冲存储 器 (i-cache) 和相应的快速重编址缓冲器 (TLB)202 可为软件应用程序和地址存储指令, 以 便访问所述指令。 高速缓冲存储器 202 和 222 可位于处理器内核 200 内, 或位于所述处理器 内核的外部, 例如位于图 1 所示的高速缓冲存储器子系统 114 中。如果没有 i-cache 缺失, 则在每个时钟周期中, 指令提取单元 (IFU)204 可从 i-cache 202 提取多个指令。IFU 204 可包括程序计数器, 所述程序计数器中设有指向在 i-cache 202 中提取的下一指令的地址 的指针, 所述地址可与 i-TLB 中的地址进行比较。IFU 204 还可包括分支预测单元, 以在执
     行单元确定后面的管线阶段中的实际结果之前预测条件指令的结果。
     解码器单元 206 对所提取的多个指令的操作码进行解码, 且可在有序退出队列 中, 例如重排缓冲器 208 中, 分配条目。 在重排缓冲器 208 内分配后, 条目可在整数队列 212 和浮点队列 216 内分配。在执行单元 210 内分配之后或同时, 可分配加载 / 存储单元 220 内的输入队列的条目。条目在执行单元 210 和 / 或加载 / 存储单元 220 中的分配即视为调 度。下文将在说明存储器访问后讨论执行单元 210。
     加载和存储操作等存储器访问会向加载 / 存储单元 220 发出。加载 / 存储单元 220 可包括执行存储器访问指令的队列和逻辑。此外, 验证逻辑可存在于加载 / 存储单元 220 中, 以确保加载指令从正确的最早存储指令中接收转发数据。 加载 / 存储单元 220 可将 存储器访问请求 224 发送到芯片上的一级或多级数据高速缓冲存储器 (d-cache)222。 每一 级高速缓冲存储器可具有各自的 TLB, 所述 TLB 用于与存储器请求 224 进行地址比较。 每一 级高速缓冲存储器 222 可以连续或并行方式进行搜索。如果未在高速缓冲存储器 222 中找 到请求的内存线, 则存储器请求 224 将发送给较低级别的高速缓冲存储器, 例如高速缓冲 存储器 114 和 118, 或可能发送给片外存储器。连续或并行搜索、 可能发送给其他存储器的 请求, 以及等待所请求的内存线的抵达可能会耗费大量的时钟周期。
     源自执行单元 210 和加载 / 存储单元 220 的结果可在公用数据总线 230 中显示。 所述结果可发送给重排缓冲器 208。 在一个实施例中, 重排缓冲器 208 可为先进先出 (FIFO) 队列, 所述先进先出队列用于确保根据程序的顺序实现指令的有序退出。 此时, 接收到对应 结果的指令即标记为退出。如果指令位于队首, 则可将所述指令结果发送至相应的架构寄 存器文件。每个队列 212 和 216 可拥有相应的架构寄存器文件。架构寄存器文件可拥有处 理器内核 200 的通用寄存器的架构状态。因此重排缓冲器中的指令即可有序退出且所述指 令的队首指针可根据程序顺序中的后续指令进行调整。
     公用数据总线 230 上的结果可发送至执行单元 210, 以便将相应值转发给等待结 果的指令的操作数。 例如, 算数指令的操作数可取决于前一算数指令的结果, 或者加载指令 可能需要由功能单元 214 中的地址生成单元 (AGU) 计算得出的地址。当这些等待指令拥有 针对各自操作数的值且硬件资源能够执行所述指令时, 所述指令可乱序从相应队列 212 和 216 向功能单元 214 和 216 或加载 / 存储单元 220 中的合适资源发出。
     未提交 ( 非退出 ) 的存储器访问指令具有位于加载 / 存储单元 220 中的条目。对 于源自最早未提交的旧存储指令的传输中 ( 未提交 ) 的加载指令而言, 所述指令的转发数 据值可置于公用数据总线 230 上, 或者可在加载 / 存储单元 220 内方便地路由到加载缓冲 器中的合适条目。
     返回到执行单元 210, 队列 212 和 216 可存储等待各自的操作数变为可用的相应 整数和浮点指令。寄存器重命名和执行调度可在队列 212 和 216 内, 或未图示的周围的相 应电路内进行。当操作数可用且硬件资源也可用时, 指令可从队列 212 和 216 向整数功能 单元 214、 浮点功能单元 218, 和 / 或加载 / 存储单元 220 乱序发出。每一组整数功能单元 214 可包括算数逻辑单元 (ALU), 所述算数逻辑单元用于进行整数计算, 例如加、 减、 地址生 成, 以及确定分支条件指令的结果。浮点功能单元 218 可包括用于执行浮点加、 减、 乘、 除、 平方根、 整数到浮点的转换、 浮点到整数的转换, 或其他的电路。
     在一个实施例中, 多个整数功能单元 214 可进行实例化, 以提高微处理器指令处理量。例如, 处理器内核 200 可经配置以执行多个软件执行线程。微处理器 100 的操作系 统, 以及相应的处理器内核 200 会针对软件应用程序分配存储区。当软件应用程序经过编 译后, 所述应用程序可包括多个程序。在此类实施例中, 每个程序可拥有各自的资源, 例如 存储器图像, 或执行应用程序之前的指令实例和数据。此外, 每个程序可包括程序专用信 息, 例如处理代码、 数据以及可能堆栈的地址空间 ; 数据和控制寄存器中的变量, 例如栈指 针、 通用和浮点寄存器、 程序计数器等 ; 以及操作系统描述符, 例如 stdin、 stdout 等, 和安 全属性, 例如处理器拥有者和程序的权限集。
     软件应用程序的每个程序可进一步分为多个软件线程。 许多现代微处理器经配置 以同步执行两个或多个软件线程。 这些微处理器可具有两个或多个硬件线程 ( 线序 ), 所述 硬件线程可让操作系统的内核进行并行执行和分配。 例如, 对于多线程微处理器而言, 根据 特定单元 214 内硬件资源的可用性, 每个整数功能单元 214 可在每个时钟周期内接收特定 线程的一个或多个整数指令。从指令提取单元 204 到整数队列 212 的电路可进行修改以管 理处理器内核 200 的两个或更多线序, 而不复制每个单元硬件。例如, 拥有某个线程的架构 状态的寄存器可以复制, 但执行硬件资源无法复制。
     在另一个实施例中, 处理器内核 200 的多线程执行可包括整个群集的各个副本的 实例化, 其中群集用于执行单个线程, 且在一个实施例中, 群集包括从解码器单元 206 到指 令功能单元 214 的电路。在此类实施例中, 该电路是指整数执行群集。在另一个实施例中, 浮点协同处理器可包括从解码器单元 206 到浮点功能单元 218 的电路。此浮点协同处理器 的实例化数量可能小于整数执行群集的实例化数量。在此类实施例中, 每个浮点协同处理 器对应于两个或更多线程, 而每个整数执行群集对应于单个不同的线程。 指令提取单元 204 可包括用于以下用途的电路 : 管理内核 200 中的多个线程, 并为每个群集提供特定线程的 一个或多个可用的相应指令。在这种情况下, 每个群集为线序 ( 硬件线程 )。
     对于将浮点单元 218 的多个副本实例化以伴随整数功能单元 214 的每个副本, 尽 管从电路逻辑方面看来是可取的, 但从硬件实施方面看来可能是不可取的。 例如, 浮点功能 单元 (FPU)218 可能包括复杂的逻辑, 会占用许多芯片内空间。此外, 浮点操作并不经常以 程序模式执行。因此, 硬件设计师并不倾向于在芯片上为浮点功能单元 218 制造独立且昂 贵的副本。
     微处理器 100 以及相应的处理器内核 200 可以操作的可靠执行模式 (REM) 实施。 该模式可用于在任务关键性软件应用程序的执行过程中检测硬件软错误等执行错误的发 生。 在一个实施例中, 处理器内核 200 的浮点队列 216 和浮点功能单元 218 可以同步多线程 (SMT) 模式运行, 以便作为在两个独立的整数执行群集或两个独立的整数功能单元上执行 的两个独立的软件线程, 其中这两个实施方案都为独立的线序。在一个实施例中, IFU 204 可作为 SMT 电路实施, 以便为两个线序提供指令。从解码器单元 206 到整数功能单元 214 的电路可作为芯片上的一个整数线序进行实例化。第二整数线序是所述第一线序的副本, 所述第二整数线序也可在芯片上实例化。
     两个整数线序可从 IFU 204 的输出到相应整数功能单元 214 以锁步方式运行。例 如, 如果软件线程的指令提供给第一整数线序, 且所述线序的副本提供给第二整数线序, 则 这两个线序的每个管线阶段应在每个相应时钟周期的末尾得出相同的结果。 多个检查点指 令可插入程序代码中, 而不是在每个时钟周期的末尾进行比较。 在每个检查点中, 具体寄存器的内容的比较可对两个线序执行。 如果对应的值匹配, 则未检测到任何软错误, 且执行过 程可以继续。 在一个实施例中, 如果出现不匹配情况, 则执行过程会返回到最近一次成功检 查点, 且执行过程可从程序代码中的该位置继续。 在一个实施例中, 警报可报告给操作系统 (OS) 报告。 在替代实施例中, 警示报告可记录在位于存储器的预定位置处的日志文件中, 供 用户仔细查看。
     在另一个实施例中, 从解码器单元 206 到整数队列 212 的电路无法复制, 但可作为 SMT 单元实施。整数功能单元 214 可进行复制。再次指出, 在一个实施例中, 两个整数线序 的执行可从 IFU 204 的输出到相应整数功能单元 214 的输出以锁步方式运行。可按照上述 说明进行检查和比较。使用两个线序是出于说明的目的, 且可能或预期会使用更多数量的 线序。例如, 在替代实施例中, 如上文关于程序所述, 微处理器的电路可经配置以执行请求 两个或更多硬件线程 ( 线序 ) 的两个或更多软件线程。因此, 三个或更多整数线序的执行 可从 IFU 204 的输出到相应整数功能单元 214 的输出以锁步方式运行。
     根 据 上 述 的 任 一 实 施 例, 浮 点 队 列 216、 浮 点 功 能 单 元 218、 加载 / 存储单元 (LSU)220 和高速缓冲存储器 222 可单独进行实例化, 并从整数队列 212 和两个单独的实例 化整数功能单元 214 接收输入。如上所述, 单个软件应用程序可通过在每个整数线序上以 锁步方式运行所述软件应用程序的两个副本来高度可靠地执行。但是, 此技术无法应用到 浮点队列 216 和浮点功能单元 218, 因为无法确保源自不同线程的操作将会以锁步方式执 行。对于芯片的 SMT 部分, 例如浮点功能单元 218, 可能没有足够的硬件资源来同步执行源 自两个软件线程的指令。 因此, 源自两个软件线程的这些指令可能会不同步执行, 而不是锁 步执行。 该问题的一种解决方案是迫使这两个软件线程在 SMT 浮点电路上锁步运行。但 是, 该方案在复杂性、 芯片内资源、 额外的芯片内的线敷设方面将耗费大量成本, 且还会在 无需 REM 操作时降低性能。该问题的另一个解决方案是让这两个软件线程的浮点指令在浮 点功能单元 218 上独立运行, 并以异步方式生成结果。因此, 对这两个软件线程的结果的核 对必须针对每个操作延迟, 直到这两个软件线程中较晚的一个计算出结果。由于这种延迟 可能相当多, 例如数百个时钟周期, 且代码流中的每个操作都需要进行检查, 因此设计人员 必须分配非常大的缓冲器来从这两个线程捕获结果, 直到所述线程已经过安全检查。
     相反, 可对 REM 操作使用某种技术, 以便两个 “单独” 软件线程的两个指令, 例如原 始指令和它的相同副本, 可在多数时候在 SMT 浮点电路上不同步执行, 同样地, 所述两个软 件线程是原始软件线程和它的相同副本。这两个线程是同步的, 且仅在尝试经由浮点域传 输结果时才进行偏差比较, 因此能够确保对这两个整数群集的刺激是同步的。这可让整数 群集基于来源于浮点电路的所有传输检查源自这两个线程的相同响应, 因此所述整数群集 可以维持锁步状态。
     现在转向图 3A, 图示的是方法 300 的一个实施例, 其中所述方法用于在同步多线 程处理器上高效且可靠的执行。 出于说明的目的, 本实施例的各个步骤以连续顺序展示。 但 是, 某些步骤的顺序可能会异于图示的顺序, 某些步骤可能会同时进行, 某些步骤可能会与 其他步骤相结合, 且某些步骤可能不存在于另一个实施例中。微处理器内的多线程处理器 内核在步骤 302 中设置为可靠执行模式 (REM)。该操作可由程序代码指令、 系统微代码指 令, 由外部控制激活或解除激活的指定插针上的信号等执行。
     在步骤 304 中, 微处理器的指令提取单元从 i-cache 的指定地址中提取指令。 在一 个实施例中, 在 REM 操作过程中, 微处理器可仅允许执行两个线序 ( 硬件线程 )。所提取的 每个指令可选择性地复制。例如, 如果浮点指令未检测到在浮点电路的外部传输 ( 条件性 步骤 306), 例如浮点存储指令、 浮点整数变换指令等, 则其他计算的这些指令将在步骤 312 中复制。原始指令将视作第一软件线程的指令并发送到第一线序。指令副本将视作第二软 件线程的指令并在步骤 314 中发送到第二线序。
     指令检测和指令复制都可在解码器单元 206、 重排缓冲器 208、 执行队列 212 和 216, 或设计人员选择的另一前端单元中进行。 仅针对这些浮点外部操作的预解码电路可设 置在解码器单元 206 的前面。对于包括从解码器单元 206 到整数功能单元 214 的电路的内 核 200, 如果在所述内核中复制了整数内核, 则可使用此技术。 或者, 解码器单元 206 的输出 信号可用于检测这些操作, 且可在解码后进行复制。如果执行队列 212 和 216 的解码器单 元 206 的电路作为 SMT 电路实施, 则可使用此技术。接下来, 在步骤 314 中, 原始指令和复 制指令分配给单独的线序, 且在步骤 316 中, 所述指令被重命名并调度。
     但是, 如果浮点指令检测到在浮点电路外部传输 ( 条件性步骤 306), 例如浮点存 储指令、 浮点整数变换指令等, 则该浮点外部操作或指令无法复制。 这些指令需要从浮点功 能单元 218 到整数功能单元 214 的通信路径 ( 走线 )。由于没有功能单元 218 中的浮点逻 辑的副本, 因此锁步执行将由于这些指令而在所有功能单元 214 和 218 中中断。因此, 在步 骤 308 中, 该指令类型可转换成新指令类型。而未复制的这一新的指令类型将分配给一个 可用线序。例如, 该新指令类型可视作源软件线程的指令, 且在处理器 200 中分配给它对应 的线序。 例如, 对于微处理器内两个线序的一个实施例, 第一线序可具有 32 个浮点 (FP) 寄存器, 例如从 f0 到 f31, 且第二线序也一样。浮点单元 FPU 可能需要维持这两个线序的 状态, 其中所述浮点单元可包括队列 216 和单元 218 的电路, 或者, 可包括自身的针对解码 单元 206 到队列 216 的操作的电路。FPU 可请求至少 64 个逻辑寄存器, 例如 L0 到 L63, 所 述逻辑寄存器拥有这两个线序的提交架构。从 L0-L63 到 Strand0.FP0-Strand0.FP31 和 Strand0.FP1-Strand0.FP31 的映射可为任意的。在一个实施例中, 映射可包括分配 L0 到 Strand0.FP0 和相应地 L31 到 Strand0.FP31, 且进一步地, L32 到 Strand1.FP0 和相应地 L63 到 Strand1.FP31。
     在非 SMT 机器中, 可能没有 L32 到 L63 的分配。现在, 在一个实施例中, 单个 FP 操 作, 例如 FMUL FP0, FP1-- > FP2, 可以仅映射到 FMUL L0, L1-- > L2 或 FMULL32, L33- > L34 的其中一个, 具体取决于来源于哪个线序, 是 Strand0 还是 Strand1。在 REM/ 锁步模式中, 可能只有一个软件线程执行, 但该软件线程可在 Strand0 和 Strand1 这两个硬件线序上执 行。这可通过将上述浮点乘 (FMUL) 指令映射到 FMUL L0, L1-- > L2 至 FMUL L32, L33- > L34。这是已描述的复制操作。
     因此, 在 FPU 的前端执行上述映射后, 由于逻辑寄存器的数量足以传送所有从属 物, 因此无需对某个操作进行线序识别以强化多个操作之间的相关性。 在一个实施例中, 源 自 Strand0 的操作可以仅涉及寄存器 L0 至 L31, 且源自 Strand1 的操作可以仅涉及寄存器 L32 至 L63。在非 REM 模式中, 这两个集合之间可能不存在重叠。因此, 操作映射完毕后, 所 述操作可能无需线序 ID, 无论微处理器是否以锁步模式运行。
     在 REM 模式中, 在一个实施例中, 复制操作完毕后, 可创建两个复制的操作, 这两 个操作可都不含用于调度的线序标识符 (ID)。要指出的是, 线序 ID 是需要的, 但是所述线 序 ID 用于其他目的。
     在一个实施例中, 浮点存储指令等一元操作, 例如 FSTO FP0-- > [mem], 其中 [mem] 表示目标存储位置, 无法复制。相反, 一元指令可映射到单个二元逻辑指令, 所述二 元逻辑指令采用 FCMPSTO L0, L32-- > [mem] 的形式。该逻辑指令可不具有分配到的线序 ID。 相反, 所述逻辑指令可以具有分配到的所有线序 ID, 因为它使用的是来源于所有可用线 序的逻辑寄存器的混合集合。
     此唯一映射的指令可从两个线序中提取自己的源操作数, 且可取决于 L0 和 L32 的最后一个发生器指令。根据定义, 在一个实施例中, L0 和 L32 的发生器从 Strand0 和 Strand1 中生成。此外, 这些发生器可为类似于浮点乘指令 (FMUL) 的复制操作。这些复制 操作可在不同时间执行, 例如当 L0 和 L32 已生成且非猜测执行时。随后 FCMPSTO 可继续, 以针对执行进行调度。
     为了进一步说明, 浮点外部操作可为以下项等浮点存储指令 :
     FDIV FP_Reg_Result, FP_Reg_Src1, FP_Reg_Src2 /* 行 1*/ STF, FP_Reg_Result /* 行 2*/
     在一个实施例中, 上述行 1 中的浮点除指令 (FDIV) 可用 FP_Reg_Src1 指定的浮点 寄存器中的 64 位双精度浮点源操作数除以 FP_Reg_Src2 指定的浮点寄存器中的 64 位双精 度浮点源操作数。可以不保留余数。FDIV 指令可在处理器 200 以 REM 模式运行时复制。原 始 FDIV 指令可分配给线序 0。复制的 FDIV 指令可分配给线序 1。
     上述行 2 中的浮点存储指令 (STF) 可将源自源浮点寄存器 (FP_Reg_Result) 的预 定数量的字节存储到指定的有效地址 () 中。与整数变换操作类似, 浮点存储指 令是一元操作。它们只拥有一个源操作数。这些特定的一元操作可通过创建具有两个架构 源的新指令类型来从一元操作向二元操作转换, 其中所述两个架构源为源自第一线程的原 始逻辑寄存器编号以及源自第二线程的相同逻辑寄存器编号。例如, 如果处理器内核 200 在 REM 模式中仅运行两个线序, 则上述浮点存储指令可转换成以下指令 :
     STF, FP_Reg_Result, FP_Reg_Result /* 行 3*/
     因此, 浮点存储指令即转换成浮点存储和比较指令。重命名的寄存器文件电路可 存在于重排缓冲器 208 或执行队列 212 和 216 中。 在一个实施例中, 映射单元可将指令寄存 器编号 (IRN) 转换成逻辑寄存器编号 (LRN)。重命名的寄存器文件随后可将 LRN 映射到物 理寄存器编号 (PRN), 其中物理寄存器的数量大于可直接使用 IRN 寻址的寄存器数量。 上述 行 3 中的转换后操作的操作数 (FP_Reg_Result 和 FP_Reg_Result) 像往常一样映射到物理寄存器编号并发送到浮点队列 216 内的浮点调度程序。此浮点外部 操作未被复制, 且在方法 300 的步骤 310 中, 上面行 3 中所示的指令可分配给线序 0 且无操 作指令可分配给线序 1。
     该转换后指令自然地用作在处理器内核 200 的两个线序中执行的两个软件线程 的数据流之间的检查点 ( 同步点 )。在未修改的浮点调度程序内, 在执行单元 210 中, 转换 后操作可仅在相应 PRN 源就绪后才合规并提取。这可在以下情况后自然发生 : 执行浮点除计算的计算链在以 SMT 浮点功能单元 218 的常规数据流模式执行完毕并将结果注入转换后 操作的两个源寄存器内, 即 FP_Reg_Result 和 FP_Reg_Result
     现在转向图 3B, 图示的是方法 330 的一个实施例, 其中所述方法用于在同步多线 程处理器上继续高效且可靠的执行。出于说明的目的, 本实施例的各个步骤以连续顺序展 示。但是, 某些步骤的顺序可能会异于图示的顺序, 某些步骤可能会同时进行, 某些步骤可 能会与其他步骤相结合, 且某些步骤可能不存在于另一个实施例中。在步骤 332 中, 处理器 内核 200 以 REM 模式执行指令。
     可选择程序执行中的同步点, 以定期验证在执行任务关键型软件应用程序的过程 中未出现任何错误, 例如软错误。 在一个实施例中, 可选择一个或多个特定管线阶段或特定 组合逻辑的输出作为条件步骤 334 中的同步点。只有在并行的执行线程以锁步方式执行 时, 才能进行所述选择。如果可以进行锁步执行, 则在步骤 340 中, 指定值, 例如特定寄存器 输出、 组合逻辑输出和 / 或其他指定值, 可在每个时钟周期中在两个线序之间进行比较。在 一个实施例中, 如果需要更加频繁的检查点, 则 FMOV FP0-- > FP0 形式的空一元移动指令 可插入到软件程序流中的任何位置。该 FMOV 指令可随后转换成一元比较和移动指令, 所述 指令可实现以任意频率执行检查, 即使是在原始程序指令流中缺少常规一元存储设备时。
     基于任务关键型软件应用程序的复制指令, 以及在一个实施例中, 在包括实例化 整数群集副本的处理器上将原始和相同副本置于两个单独的线序中, 整数锁步执行是可行 的。 因此, 在一个实施例中, 每个整数指令及其副本可在相同时钟周期内在指令完成后比较 相应的结果 ( 条件性步骤 334)。在这种情况下, 所述指令为整数指令 ( 条件性步骤 336)。
     对于因锁步执行而应在相同时钟周期中具有相同结果的两个线程, 在一个实施例 中, 步骤 340 中的比较可检测到所述两个线程出现偏差的情况。 如果检测到不匹配情况 ( 条 件性步骤 342), 则可报告给 REM 控制器中的逻辑, 且预定的后续动作可在步骤 344 中进行。 此类动作可包括激活源自微处理器的某些信号输出, 暂停进一步执行应用程序, 将偏差指 令的地址存储在预定缓冲器中, 和 / 或其他动作。
     如果未检测到任何不匹配情况 ( 条件性步骤 342), 则执行过程将以锁步方式正常 继续且方法 330 的控制流将转到控制块 B, 所述控制块将返回到方法 300 的步骤 304。在另 一个实施例中, 检查点指令可用于提供同步检查点 ( 条件性步骤 334), 其中所述检查点指 令可由软件编程器或程序编制器插入程序代码中。在一个实施例中, 此类指令可插入代码 的每个基本块内, 以便让即将在所有锁步执行线程中追踪的指令数维持在低位。
     另一个同步检查点可为转换后浮点外部操作的执行 ( 条件性步骤 336)。 在执行过 程中, 处理器的前端, 例如解码器单元 206 或重排缓冲器 208, 可以常规处理量的一半将指 令发送到浮点队列 216。 这可通过每个时钟周期至多发送两个浮点指令, 或通过每隔一个时 钟周期至多发送四个浮点指令来实现。对于该实例, 假定处理器内核 200 是四宽指令发出 机器。可能或预期存在其他实施例。
     如针对方法 300 的步骤 312 所述, 在一个实施例中, 处理器前端中的逻辑可选择性 地复制这些浮点指令。该逻辑不会复制浮点外部操作, 例如浮点存储和整数变换操作。相 反, 如上文关于方法 300 的步骤 308 所述, 这些浮点指令类型将进行转换。
     在一个实施例中, 处理器内核 200 中的两个线序在 REM 操作过程中使用。在一个 实施例中, 处理器前端中存在以下用途的逻辑 : 复制除浮点外部操作以外的浮点指令, 以创建源自原始软件线程的浮点指令的相同副本, 其中所述副本将在内核 200 的第二线序中的 第二软件线程中执行。这两个指令将使用浮点功能单元 218 内的逻辑执行, 但由于缺少硬 件资源而无法同步执行。然后在执行转换后浮点外部指令的过程中, 例如如上面的行 3 所 示, 当所有源操作数在步骤 338 中就绪后, 执行单元 210 中对应于浮点操作的其他逻辑可在 步骤 340 中比较所述两个线序中相同标号的寄存器的内容。如果出现不匹配情况 ( 条件性 步骤 342), 则将在步骤 344 中报告给 REM 控制器以采取合适的动作。
     在 REM 操作过程中, 未复制但转换的浮点外部操作的执行显示为在浮点逻辑内同 步执行并以锁步方式发送信号给整数逻辑 212 和 214, 其中所述指令是在浮点逻辑 216 和 218 外部传输的唯一指令。事实上, 相对于另一个软件线程中的副本指令而言, 所有其他浮 点指令可以不以锁步方式执行, 因为这些指令不会向浮点逻辑的外部发送可破坏整数逻辑 的锁步执行的刺激。转换的浮点外部指令在源操作数在步骤 338 中就绪后读取所述操作 数, 并在步骤 340 中比较所述源操作数与所述指令在并行状态下的均等性, 其中所述源操 作数是已存在于 SMT 内核上的支持逻辑且无需进行任何修改。不匹配情况 ( 条件性步骤 342) 可在步骤 344 中报告给 REM 控制器。如果不存在不匹配情况 ( 条件性步骤 342), 所述 指令只需在相同周期中将信息发送到这两个整数逻辑, 这可以确保整数功能单元 214 只看 得到源自浮点逻辑的锁步刺激, 且自身不会落后于同步过程。 请注意, 在已描述的方案中, 两个群集中的退出可能会不同步。 这可能是可以接受 的, 因为在一个实施例中, 核对在处理器的两个线序中运行的两个软件线程包括在执行完 毕后立即使用结果标记比较相应值, 而不是在退出时比较。在退出时执行比较需要物理寄 存器文件上的额外读取端口。但是, 两种情况的出现会对目前已描述的方案带来问题。
     第一种情况是, 未在伴随线程上出现的逻辑错误可能导致一个线程上出现内部异 常。此类异常会导致一个线程上触发重定向和刷新, 而另一个线程上则没有。该情况可通 过以下方法解决 : 将附加逻辑添加到处理器前端并分派在一个线程重定向的情况下让两个 线程都重定向的逻辑。
     第二种情况是异步的外部中断。此类中断无法在锁步模式中修复, 除非两个线程 在退出状态时是同步的。这要求在出现外部中断的情况下暂停分派, 直到实例化整数逻辑 副本和浮点逻辑已从这两个线程中退出所有逾期指令。 该相同机制也可用于处理上述的内 部异常情况。
     在替代性实施例中, 性能较低的方案可经由 EPC 发送源自退出队列, 而不是执行 单元的指令的完成状态。通过该方案, EPC 不再向群集 ROBS 发送状态, 而是向 FPRET 块发 送状态。 FPRET 内的逻辑持续追踪两个线程中已完成的操作, 然后对在这两个线程中执行完 成的每个操作将完成信息锁步发送到所述两个群集。
     在另一个实施例中, 如果处理器内核 200 具有 3 个或更多可用的线序 ( 硬件线 程 ), 则浮点外部操作的转换可将一元指令转换成三元指令。下面再次显示了要从上述行 2 进行转换的一元指令的一个实例 :
     FDIV FP_Reg_Result, FP_Reg_Src1, FP_Reg_Src2 /* 行 1*/ STF, FP_Reg_Result /* 行 2*/
     如果处理器内核 200 在 REM 操作过程中运行三个线序, 则上述浮点存储指令可转 换成以下指令 :
     STF, FP_Reg_Result, FP_Reg_Result, FP_Reg_Result/* 行 4*/
     因此, 浮点存储指令即转换成三个操作数的浮点存储和比较指令。该实施方案的 优势在于 : 在比较过程中, 如果任意两个线序, 例如线序 0 和 1, 具有匹配值, 而第三线序, 例 如线序 2, 具有不匹配的值, 则在方法 330 的步骤 344 中, 将向 REM 控制器发送合适信号以报 告所述不匹配情况, 但是执行过程可使用所述线序 0 和 1 的匹配的值继续。浮点单元 218 可将所述匹配的值发送到实例化的整数逻辑 212 和 214。 但是, 如果所述三个线序都具有不 同的值, 则在步骤 344 中, 所述情况可报告给 REM 控制器, 且预定的后续动作可按照之间的 说明进行。 此类动作可包括激活源自微处理器的某些信号输出、 暂停进一步执行应用程序、 将偏差指令的地址存储在预定缓冲器中, 和 / 或其他动作。
     多种实施例可进一步包括根据上述说明经由可连接到计算机的媒介接收、 发送或 存储指令和 / 或数据。一般而言, 可连接到计算机的媒介包括磁性或光学媒介等存储媒 介或内存媒介, 例如磁盘或 DVD/CD-ROM, 易变或非易变媒介, 例如 RAM( 例如 SDRAM、 DDR、 RDRAM、 SRAM 等 )、 ROM 等。可连接到计算机的媒介也可包括经由网络和 / 或无线链路等通 信媒介传送的传输媒介或电子、 电磁或数字信号等信号。 尽管本专利申请文件已相当详尽地描述了上述实施例, 但在充分了解上述公开内 容后, 所属领域的一般技术人员应能够轻易得出各种变化和修改。随附的权利要求书意图 解释为包括所有此类变化和修改。
    

在同步多线程机上使用比较和传送指令的可靠执行.pdf_第1页
第1页 / 共20页
在同步多线程机上使用比较和传送指令的可靠执行.pdf_第2页
第2页 / 共20页
在同步多线程机上使用比较和传送指令的可靠执行.pdf_第3页
第3页 / 共20页
点击查看更多>>
资源描述

《在同步多线程机上使用比较和传送指令的可靠执行.pdf》由会员分享,可在线阅读,更多相关《在同步多线程机上使用比较和传送指令的可靠执行.pdf(20页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 102439561 A (43)申请公布日 2012.05.02 C N 1 0 2 4 3 9 5 6 1 A *CN102439561A* (21)申请号 201080022638.5 (22)申请日 2010.04.27 12/432,146 2009.04.29 US G06F 9/38(2006.01) G06F 11/16(2006.01) (71)申请人超威半导体公司 地址美国加利福尼亚州 (72)发明人兰加纳坦苏达卡尔 诺恩T阔奇 (74)专利代理机构上海胜康律师事务所 31263 代理人李献忠 (54) 发明名称 在同步多线程机上使用比较和传送指令的。

2、可 靠执行 (57) 摘要 本发明提供在同步多线程机上进行高效且可 靠执行的系统和方法。处理器设置在可靠执行模 式(REM)中,以在任务关键型软件应用程序的执 行过程中检测可能的错误。只有两个线程可经配 置以在该模式中运行。浮点存储和整数变换一元 指令可转换成新的二元指令。每个新指令具有两 个源操作数,对应于不同线程的每个源操作数由 相同逻辑寄存器编号指定为所述原始一元指令的 单个源操作数。所有其他指令可进行复制,其中 所述原始指令及其副本分配给不同线程。在使用 所述新指令与实例化的整数独立群集通信时,同 步多线程(SMT)浮点逻辑可能只能够提供锁步执 行。在所述两个源操作数就绪之前,所述新指。

3、令无 法开始,其中所述两个源操作数随后将进行比较 以确定任何不匹配或错误。 (30)优先权数据 (85)PCT申请进入国家阶段日 2011.11.23 (86)PCT申请的申请数据 PCT/US2010/032514 2010.04.27 (87)PCT申请的公布数据 WO2010/126868 EN 2010.11.04 (51)Int.Cl. (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 3 页 说明书 12 页 附图 4 页 CN 102439571 A 1/3页 2 1.一种系统,包括: 计算机程序的高速缓冲存储指令;以及 处理器; 其中所述处理器经配置以执行。

4、以下操作: 响应于确定所述指令的原始指令对应于第一指令类型,复制所述原始指令以创建所述 原始指令的副本; 响应于确定所述指令的所述原始指令对应于将由第一功能单元执行的第二指令类型, 不复制所述原始指令,其中所述第一功能单元具有M个副本,每个副本对应于多个线程的 两个或更多线程;以及 响应于确定源操作数从第一线程就绪且源操作数从所述多个线程中的至少一个其他 线程就绪,执行所述第二指令类型的所述原始指令。 2.根据权利要求1所述的系统,其特征在于,响应于执行所述第二指令类型的所述原 始指令,所述处理器进一步经配置以将单个结果从所述第一功能单元传输到对应于所述第 一线程的第二功能单元,以及传输到对应。

5、于所述多个线程中的另一个线程的第三功能单 元。 3.根据权利要求2所述的系统,其特征在于,响应于确定所述原始指令对应于第一指 令类型,所述处理器进一步经配置以执行以下操作: 将所述原始指令分配给所述多个线程中的第一线程;以及 将所述原始指令的所述副本分配给与所述第一线程不同的至少一个线程。 4.根据权利要求2所述的系统,其特征在于,响应于执行所述第二指令类型的所述原 始指令且确定每个源操作数就绪,所述处理器进一步经配置以将每个源操作数的值互相比 较。 5.根据权利要求4所述的系统,其特征在于,所述处理器进一步经配置以比较所述第 一指令类型的所述原始指令的结果和所述原始指令的至少一个副本的结果。。

6、 6.根据权利要求5所述的系统,其特征在于,所述处理器进一步经配置以响应于通过 以下项中的一项或多项检测到不匹配而传输错误信息:对所述结果进行的比较,以及对所 述源操作数进行的比较。 7.根据权利要求6所述的系统,其特征在于,所述第一功能单元是整数执行单元且所 述第二功能单元是浮点单元。 8.根据权利要求7所述的系统,其特征在于,所述第一指令类型是以下项中的一项或 多项:浮点存储指令和浮点整数变换指令。 9.一种方法,包括: 响应于所述指令的原始指令对应于第一指令类型,复制所述原始指令以创建所述原始 指令的副本; 响应于所述指令的所述原始指令对应于将由第一功能单元执行的第二指令类型,不复 制所。

7、述原始指令,其中所述第一功能单元具有M个副本,每个副本对应于多个线程中的两 个或更多线程;以及 响应于源操作数从第一线程就绪和从所述多个线程中的至少一个其他线程就绪,执行 所述第二指令类型的所述原始指令,其中每个源操作数由所述原始指令的相同寄存器编号 权 利 要 求 书CN 102439561 A CN 102439571 A 2/3页 3 指定。 10.根据权利要求9所述的方法,其特征在于,响应于执行所述第二指令类型的所述原 始指令,所述方法进一步包括将单个结果从单个第一功能单元传输到对应于所述第一线程 的第二功能单元,以及传输到对应于所述多个线程中的另一线程的至少一个其他第二功能 单元,其。

8、中所述第二功能单元具有N个副本,每个副本对应于所述多个线程中的单个不同 线程,且其中N是大于M的整数。 11.根据权利要求10所述的方法,其特征在于,响应于确定所述原始指令对应于第一 指令类型,所述方法进一步包括: 将所述原始指令分配给所述多个线程中的第一线程;以及 将所述原始指令的所述副本分配给与所述第一线程不同的至少一个线程。 12.根据权利要求10所述的方法,其特征在于,响应于执行所述第二指令类型的所述 原始指令且每个源操作数就绪,所述方法进一步包括比较每个源操作数的值。 13.根据权利要求12所述的方法,其特征在于,所述方法进一步包括比较所述第一指 令类型的所述原始指令的结果和所述原始。

9、指令的至少一个副本的结果,其中所述结果在相 同的管线阶段中计算得到。 14.根据权利要求13所述的方法,其特征在于,所述方法进一步包括响应于通过以下 项中的一项或多项检测到不匹配而传输错误信息:对所述结果进行的所述比较,以及对所 述源操作数进行的所述比较。 15.根据权利要求14所述的方法,其特征在于,所述第一功能单元是浮点单元且所述 第二功能单元是整数执行单元。 16.根据权利要求15所述的方法,其特征在于,所述第一指令类型是以下项中的一项 或多项:浮点存储指令和浮点整数变换指令。 17.一种浮点协同处理器,包括: 经配置以与指令提取单元、高速缓冲存储器,以及两个或更多整数执行群集通信的接 。

10、口,每个整数执行群集对应于多个线程中的单个不同线程; 存储元件;以及 电路,其中所述电路经配置以执行以下操作: 响应于所述指令的原始指令对应于第一指令类型,复制所述原始指令以创建所述原始 指令的副本; 响应于所述指令的所述原始指令对应于将由第一功能单元执行的第二指令类型,不复 制所述原始指令,其中所述第一功能单元具有M个副本, 每个副本对应于所述多个线程中的两个或更多线程;以及 响应于源操作数从第一线程就绪和从所述多个线程中的至少一个其他线程就绪,执行 所述第二指令类型的所述原始指令,其中每个源操作数由所述原始指令的相同寄存器编号 指定。 18.根据权利要求17所述的浮点协同处理器,其特征在于。

11、,响应于执行所述第二指令 类型的所述原始指令,所述电路进一步经配置以将单个结果从单个第一功能单元传输到对 应于所述第一线程的整数执行群集,以及传输到对应于所述多个线程中的另一线程的至少 一个其他整数执行群集,其中所述整数执行群集具有N个副本,每个副本对应于所述多个 权 利 要 求 书CN 102439561 A CN 102439571 A 3/3页 4 线程中的单个不同线程,且其中N是大于M的整数。 19.根据权利要求18所述的浮点协同处理器,其特征在于,响应于确定所述原始指令 对应于第一指令类型,所述电路进一步经配置以执行以下操作: 将所述原始指令分配给所述多个线程中的第一线程;以及 将所。

12、述原始指令的所述副本分配给与所述第一线程不同的至少一个线程。 20.根据权利要求18所述的浮点协同处理器,其特征在于,响应于执行所述第二指令 类型的所述原始指令且每个源操作数就绪,所述电路进一步经配置以比较每个源操作数的 值。 权 利 要 求 书CN 102439561 A CN 102439571 A 1/12页 5 在同步多线程机上使用比较和传送指令的可靠执行 技术领域 0001 本发明涉及计算系统,更确切地说,涉及在同步多线程机上的高效可靠执行。 背景技术 0002 任务关键型软件应用程序需要具备高可靠性。此类应用程序的某些实例包括财务 和银行软件、数据库和军事应用程序。软件测试方法可用。

13、于验证和确认软件应用程序是否 已达到预定的质量水平。然而,用于执行应用程序的硬件平台,例如微处理器,可能会产生 问题。尽管可像软件应用程序一样,事先对微处理器进行测试以确保达到预定的质量要求, 但是综合所有输入和先决条件,例如初始状态,进行测试是不可行的。此外,除功能错误之 外,现代微处理器中可能同时出现硬错误,例如固定型故障,和软错误,例如存储节点上辐 射诱发的错误。 0003 由于下一代新处理器的节点电容和供电电压会随时间的推移而下降,因此存储在 节点上的电荷量也会减少。基于这一事实,节点更易受到由宇宙射线、阿尔法粒子和中子等 高能粒子引起的辐射诱发的软错误的危害。这种辐射会在晶体管的源区。

14、和漏区产生将由源 极和漏极二极管传输的少数载子。存储在节点上的电荷相对于总电荷的变化可能是一个相 当大的百分数,从而超出电路的噪声极限并改变节点的存储状态,其中对于每一代产品而 言,所述电荷变化是不断下降的。尽管这种辐射不会对电路造成永久损坏,但可能出现逻辑 故障。 0004 基于上述原因,静态随机存取存储器(SRAM)等存储器使用错误校正码(ECC)来检 测并更正软错误。触发性电路等时序元件可能会在设计中使用更大的电容节点或冗余销存 器来应对软错误。然而,组合逻辑内的节点,例如整数和浮点功能单元,同样容易受到软错 误的危害。因此,针对功能错误和硬错误的测试并未证明组合逻辑不受软错误的危害,而。

15、这 在任务关键型应用程序中是不可取的。 0005 无论错误是由功能故障、硬错误还是软错误引起的,任务关键型应用程序可能都 难以容忍出现任何错误,且可能不允许重复执行特定的数据集。为了确保应用程序在特定 硬件上正确运行且为了检测错误,可使用检查点以并行执行两次的方式运行应用程序。在 每个检查点上,可对每次执行的结果数据进行比较,所述结果数据应该是相同的。因此,同 步执行是以锁步方式运行的。检测点处的比较所检测出的任何差异都可能标记为错误。两 次执行的同步执行操作可以回到前一次成功的检查点处并从相应检查点重新并行执行。此 外,标记或警告可能会报告给用户。用户可决定重新执行应用程序,看看有问题的检查。

16、点处 是否再次出现差异,也可以决定在确定结果数据的差异时排除应用程序的故障。 0006 然而,高效地运行并行的锁步执行过程可能十分困难。例如,出于直接存储器存取 (DMA)次数不一致以及刷新操作不一致等原因,使用两个微处理器可能无法实现锁步执行, 其中每个微处理器同步执行应用程序的一个副本且与另一个微处理器同时开始执行。因 此,使用一个具有多个相同硬件和功能单元的微处理器更好。 0007 许多现代微处理器使用多个相同内核来实施多线程操作,其中每个内核可对单独 说 明 书CN 102439561 A CN 102439571 A 2/12页 6 的软件线程以与其他内核同步的方式独立运行。 000。

17、8 实现任务关键型应用程序的锁步执行的一种方式是在微处理器内的两个相同内 核上同步执行应用程序和所述应用程序的副本。如果每个内核接收到相同的指令,例如在 第一内核中接收到原始指令且在第二内核中接收到所述指令的相同副本,则可在每个时钟 周期内进行相关数据的比较。因此,可实现任务关键型应用程序的锁步执行。 0009 然而,可能有多种不同因素会中断此类锁步执行。例如,并非所有硬件资源都可以 进行复制,以在微处理器内实现多线程操作。浮点单元(FPU)包括复杂的逻辑,会占用许多 芯片内空间。此外,FPU操作也不会经常执行。因此,设计师并不倾向于在芯片上为浮点逻 辑制造独立且昂贵的副本。相反,FPU和芯片。

18、上其他潜在的硬件资源的多线程操作可通过 同步的多线程(SMT)来实现。 0010 正如多线程的情况一样,在SMT中,源自超过一个线程的指令可在任何指定的管 线阶段同时执行,且可用于隐藏存储器延迟并提高单位硬件使用量的计算能力。但是,SMT 是通过复制处理器的某些部分来工作的,例如存储架构状态的部分,而不是复制主要的执 行资源。这就让配有SMT的处理器在表面上对主机操作系统显示为两个“逻辑”处理器。所 述操作系统可同步调度两个或多个线程或程序。在当前线程未使用不具SMT功能的处理器 中的执行资源时,且尤其是在处理器因高速缓存失败而停止时,分支预测错误,或者说配备 SMT的处理器可能使用这些执行资。

19、源来执行另一个预定的线程。 0011 SMT硬件,例如FPU,不会以锁步方式执行两个线程的操作。因此,与硬件副本,例 如两个独立的整数群集副本,的任何通信都会中断所述两个整数群集内的锁步执行。此外, 当微处理器以可靠执行模式运行时,为了不降低所述微处理器的性能,最好不要修改任何 调度程序和重命名逻辑,以及在所述整数群集之间传递信号,以便同步从FPU接收到的非 锁步信号。 0012 鉴于上述情况,需要用于在同步多线程机上进行高效且可靠执行的高效方法和机 制。 发明内容 0013 本发明涉及在同步多线程机上进行高效且可靠执行的系统和方法。在一个实施例 中,本发明提供包括高速缓冲存储器和处理器的计算。

20、机系统。所述处理器可包括同步多线 程(SMT)浮点单元(FPU)和多实例化整数独立群集,其中每个群集对应于不同的线序(硬 件线程)。在可靠执行模式(REM)中,处理器可经配置以仅对两个线程操作。任务关键型软 件应用程序的指令可在所述处理器上执行。从FPU传输到整数群集的非浮点外部操作的每 个指令都经过复制。源指令分配到第一线程。相同的副本指令分配到第二线程。 0014 处理器前端和整数群集可以锁步方式执行所述两个线程的这些指令。包括两个结 果的比较结果的检查点可在指令引退或执行完成阶段出现,具体取决于设计要求。不匹配 可能导致处理器将错误信息传送到所述高速缓冲存储器中的预定位置,供用户进行检查。

21、。 0015 从FPU传输到整数群集的浮点外部操作的每个指令都转换成新指令。通常情况 下,浮点外部操作是一元指令,例如浮点存储指令或浮点整数变换指令。如果两个线程是在 REM操作的过程中运行的,则此类指令将转换成二元指令。两个源操作数对应于每个运行线 程,且由相同的逻辑注册号指定为第一指令的单个源操作数。 说 明 书CN 102439561 A CN 102439571 A 3/12页 7 0016 在执行此类新指令的过程中,FPU需要等待两个源操作数就绪,这是浮点调度程序 的正常操作。这两个源操作数的比较应确定匹配情况。如果出现不匹配情况,则如上所述, 所述处理器将错误信息传送到所述高速缓冲。

22、存储器中的预定位置,供用户进行检查。存储 或整数变换操作仍然可能继续,也可能暂停执行,具体取决于所需的设计。如果出现匹配情 况,则FPU将结果同步传送到所述整数群集。因此,所述浮点操作可以不同步执行,但从FPU 到整数群集的传输实现了同步操作。所述处理器继续以锁步方式执行。 0017 在另一个实施例中,本发明提供像多实例化整数独立群集一样,从指令提取单元 接收指令的SMT FPU。FPU内的逻辑经配置以在处理器处于REM操作模式时执行上述的所 有步骤。 附图说明 0018 图1为说明示例性微处理器的一个实施例的概括性方框图。 0019 图2为说明进行乱序执行的通用处理器内核的一个实施例的概括性。

23、方框图。 0020 图3A为用于在同步多线程处理器上高效且可靠执行的方法的一个实施例的流程 图。 0021 图3B为用于在同步多线程处理器上高效且可靠执行的方法的一个实施例的流程 图。 0022 尽管本发明可能有多种修改或替代形式,但本专利申请文件以举例的方式展示了 特定实施例并进行了详细介绍。但应了解,本专利申请文件的附图和详细说明并不旨在将 本发明限定于所揭示的特定形式,相反,本发明由随附的权利要求书定义,包括落在本发明 的精神和范围内的所有修改、等效物和替代。 具体实施方式 0023 以下说明中列出了许多具体细节,以帮助您深入了解本发明。但是,所属领域的一 般技术人员应了解,本发明可在没。

24、有这些具体细节的情况下进行实践。在某些情况下,本专 利申请文件并未详细说明公知的电路、结构和技术,以免使得本发明难以理解。 0024 图1展示了示例性微处理器100的一个实施例。微处理器100可包括内存控制器 120、接口逻辑140、一个或多个处理单元115,纵横制互联逻辑116和共享高速缓冲存储器 子系统118,其中所述一个或多个处理单元可包括一个或多个处理器内核112和相应的高 速缓冲存储器子系统114。在一个实施例中,微处理器100的图示功能并入单个集成电路 中。 0025 接口140通常提供输入/输出(I/O)装置与微处理器100中的共享高速缓冲存 储器子系统118和处理单元115之间。

25、的接口。在本专利申请文件中,通过参考数字后跟字 母指代的元件可统一仅用数字指代。例如,处理单元115a至115b可统一指代为处理单元 115,或单元115。I/O装置可包括打印机、键盘、显示屏、相机、读卡器、硬盘或软盘驱动器或 驱动器控制器、网络接口卡、视频加速器、音频卡、调制解调器等外围网络装置,通用接口总 线(GPIB)或现场总线接口卡等多种数据采集卡,或其他装置。此外,接口140可用于与其 他微处理器和/或其他处理节点通信。通常情况下,接口逻辑140可包括缓冲器,所述缓冲 器用于从相应链路接收信息包,并缓冲即将经由相应链路传输的信息包。任何合适的流控 说 明 书CN 102439561 。

26、A CN 102439571 A 4/12页 8 机制可用于向和从微处理器100传输信息包。 0026 微处理器100可经由相应的内存控制器120连接到相应存储器。存储器可包括任 何合适的存储装置。例如,存储器可包括一个或多个RAMBUS动态随机存取存储器(DRAM)、 同步DRAM(SDRAM)、DRAM、静态RAM等。微处理器100的地址空间可分给多个存储器。每个 微处理器100或包括微处理器100的相应处理节点可包括存储器映射,所述存储器映射用 于确定地址与存储器之间的映射关系,并确定应将存储器的特定地址请求路由到哪个微处 理器100或处理节点。在一个实施例中,某个地址的一致性点是连接到。

27、对应于所述地址的 内存存储字节的内存控制器120。内存控制器120可包括用于通过接口连接到存储器的控 制电路。此外,内存控制器120可包括用于对存储器请求进行排列的请求队列。 0027 一般而言,纵横制互联逻辑116经配置以响应在连接到接口140的链路上接收到 控制信息包,根据处理器内核112和/或高速缓冲存储器子系统114生成控制信息包、根据 由内存控制器120选择的服务事务生成探针命令和响应信息包,以及将包括微处理器的中 间节点的信息包经由接口逻辑140路由到其他节点。接口逻辑140可包括接收信息包,并 将所述信息包与纵横制互联件116所使用的内部时钟同步的逻辑。纵横制互联件116可经 配。

28、置以将存储器请求从处理器内核112传输到共享高速缓冲存储器子系统118,或传输到 内存控制120和较低级别的存储器子系统。另外,纵横制互联件116可经由内存控制器120 将所接收到的内存线和控制信号从较低级别的存储器传送到处理器内核112和高速缓冲 存储器子系统114和118。纵横制互联件116、内存控制器120、接口140和处理器单元115 之间的互联总线实施可包括任何合适的技术。 0028 高速缓冲存储器子系统114和118可包括经配置以存储数据块的高速缓冲存储 器。高速缓冲存储器子系统114可并入相应处理器内核112内。或者,高速缓冲存储器子 系统114可通过背面高速缓冲配置或内联配置(。

29、如果需要)连接到处理器内核112。此外, 高速缓冲存储器子系统114可作为高速缓冲存储器的分级进行实施。如果需要,靠近处理 器内核112(在分级内)的高速缓冲存储器可并入处理器内核112中。在一个实施例中, 高速缓冲处理器子系统114各自代表第二级高速缓冲结构,且共享高速缓冲存储器子系统 118代表第三级高速缓冲结构。 0029 高速缓冲存储器子系统114和共享高速缓冲存储器子系统118可包括连接到相应 高速缓冲控制器的高速缓冲存储器。处理器内核112包括用于根据预定义的通用指令集执 行指令的电路。例如,可选择x86指令集架构。或者,可选择Alpha、PowerPC或其他任何通 用指令集架构。。

30、通常情况下,处理器内核112会对数据和指令分别访问高速缓冲存储器子 系统114。如果未在高速缓冲存储器子系统114或共享高速缓冲存储器子系统118中找到 请求块,则可生成读取请求并经由指定路线传输到控制器120中缺失块所映射的位置。 0030 图2说明进行乱序执行的通用处理器内核200的一个实施例。指令高速缓冲存储 器(i-cache)和相应的快速重编址缓冲器(TLB)202可为软件应用程序和地址存储指令,以 便访问所述指令。高速缓冲存储器202和222可位于处理器内核200内,或位于所述处理器 内核的外部,例如位于图1所示的高速缓冲存储器子系统114中。如果没有i-cache缺失, 则在每个。

31、时钟周期中,指令提取单元(IFU)204可从i-cache 202提取多个指令。IFU 204 可包括程序计数器,所述程序计数器中设有指向在i-cache 202中提取的下一指令的地址 的指针,所述地址可与i-TLB中的地址进行比较。IFU 204还可包括分支预测单元,以在执 说 明 书CN 102439561 A CN 102439571 A 5/12页 9 行单元确定后面的管线阶段中的实际结果之前预测条件指令的结果。 0031 解码器单元206对所提取的多个指令的操作码进行解码,且可在有序退出队列 中,例如重排缓冲器208中,分配条目。在重排缓冲器208内分配后,条目可在整数队列212 和。

32、浮点队列216内分配。在执行单元210内分配之后或同时,可分配加载/存储单元220 内的输入队列的条目。条目在执行单元210和/或加载/存储单元220中的分配即视为调 度。下文将在说明存储器访问后讨论执行单元210。 0032 加载和存储操作等存储器访问会向加载/存储单元220发出。加载/存储单元 220可包括执行存储器访问指令的队列和逻辑。此外,验证逻辑可存在于加载/存储单元 220中,以确保加载指令从正确的最早存储指令中接收转发数据。加载/存储单元220可将 存储器访问请求224发送到芯片上的一级或多级数据高速缓冲存储器(d-cache)222。每一 级高速缓冲存储器可具有各自的TLB,所。

33、述TLB用于与存储器请求224进行地址比较。每一 级高速缓冲存储器222可以连续或并行方式进行搜索。如果未在高速缓冲存储器222中找 到请求的内存线,则存储器请求224将发送给较低级别的高速缓冲存储器,例如高速缓冲 存储器114和118,或可能发送给片外存储器。连续或并行搜索、可能发送给其他存储器的 请求,以及等待所请求的内存线的抵达可能会耗费大量的时钟周期。 0033 源自执行单元210和加载/存储单元220的结果可在公用数据总线230中显示。 所述结果可发送给重排缓冲器208。在一个实施例中,重排缓冲器208可为先进先出(FIFO) 队列,所述先进先出队列用于确保根据程序的顺序实现指令的有。

34、序退出。此时,接收到对应 结果的指令即标记为退出。如果指令位于队首,则可将所述指令结果发送至相应的架构寄 存器文件。每个队列212和216可拥有相应的架构寄存器文件。架构寄存器文件可拥有处 理器内核200的通用寄存器的架构状态。因此重排缓冲器中的指令即可有序退出且所述指 令的队首指针可根据程序顺序中的后续指令进行调整。 0034 公用数据总线230上的结果可发送至执行单元210,以便将相应值转发给等待结 果的指令的操作数。例如,算数指令的操作数可取决于前一算数指令的结果,或者加载指令 可能需要由功能单元214中的地址生成单元(AGU)计算得出的地址。当这些等待指令拥有 针对各自操作数的值且硬件。

35、资源能够执行所述指令时,所述指令可乱序从相应队列212和 216向功能单元214和216或加载/存储单元220中的合适资源发出。 0035 未提交(非退出)的存储器访问指令具有位于加载/存储单元220中的条目。对 于源自最早未提交的旧存储指令的传输中(未提交)的加载指令而言,所述指令的转发数 据值可置于公用数据总线230上,或者可在加载/存储单元220内方便地路由到加载缓冲 器中的合适条目。 0036 返回到执行单元210,队列212和216可存储等待各自的操作数变为可用的相应 整数和浮点指令。寄存器重命名和执行调度可在队列212和216内,或未图示的周围的相 应电路内进行。当操作数可用且硬件。

36、资源也可用时,指令可从队列212和216向整数功能 单元214、浮点功能单元218,和/或加载/存储单元220乱序发出。每一组整数功能单元 214可包括算数逻辑单元(ALU),所述算数逻辑单元用于进行整数计算,例如加、减、地址生 成,以及确定分支条件指令的结果。浮点功能单元218可包括用于执行浮点加、减、乘、除、 平方根、整数到浮点的转换、浮点到整数的转换,或其他的电路。 0037 在一个实施例中,多个整数功能单元214可进行实例化,以提高微处理器指令处 说 明 书CN 102439561 A CN 102439571 A 6/12页 10 理量。例如,处理器内核200可经配置以执行多个软件执。

37、行线程。微处理器100的操作系 统,以及相应的处理器内核200会针对软件应用程序分配存储区。当软件应用程序经过编 译后,所述应用程序可包括多个程序。在此类实施例中,每个程序可拥有各自的资源,例如 存储器图像,或执行应用程序之前的指令实例和数据。此外,每个程序可包括程序专用信 息,例如处理代码、数据以及可能堆栈的地址空间;数据和控制寄存器中的变量,例如栈指 针、通用和浮点寄存器、程序计数器等;以及操作系统描述符,例如stdin、stdout等,和安 全属性,例如处理器拥有者和程序的权限集。 0038 软件应用程序的每个程序可进一步分为多个软件线程。许多现代微处理器经配置 以同步执行两个或多个软件。

38、线程。这些微处理器可具有两个或多个硬件线程(线序),所述 硬件线程可让操作系统的内核进行并行执行和分配。例如,对于多线程微处理器而言,根据 特定单元214内硬件资源的可用性,每个整数功能单元214可在每个时钟周期内接收特定 线程的一个或多个整数指令。从指令提取单元204到整数队列212的电路可进行修改以管 理处理器内核200的两个或更多线序,而不复制每个单元硬件。例如,拥有某个线程的架构 状态的寄存器可以复制,但执行硬件资源无法复制。 0039 在另一个实施例中,处理器内核200的多线程执行可包括整个群集的各个副本的 实例化,其中群集用于执行单个线程,且在一个实施例中,群集包括从解码器单元20。

39、6到指 令功能单元214的电路。在此类实施例中,该电路是指整数执行群集。在另一个实施例中, 浮点协同处理器可包括从解码器单元206到浮点功能单元218的电路。此浮点协同处理器 的实例化数量可能小于整数执行群集的实例化数量。在此类实施例中,每个浮点协同处理 器对应于两个或更多线程,而每个整数执行群集对应于单个不同的线程。指令提取单元204 可包括用于以下用途的电路:管理内核200中的多个线程,并为每个群集提供特定线程的 一个或多个可用的相应指令。在这种情况下,每个群集为线序(硬件线程)。 0040 对于将浮点单元218的多个副本实例化以伴随整数功能单元214的每个副本,尽 管从电路逻辑方面看来是。

40、可取的,但从硬件实施方面看来可能是不可取的。例如,浮点功能 单元(FPU)218可能包括复杂的逻辑,会占用许多芯片内空间。此外,浮点操作并不经常以 程序模式执行。因此,硬件设计师并不倾向于在芯片上为浮点功能单元218制造独立且昂 贵的副本。 0041 微处理器100以及相应的处理器内核200可以操作的可靠执行模式(REM)实施。 该模式可用于在任务关键性软件应用程序的执行过程中检测硬件软错误等执行错误的发 生。在一个实施例中,处理器内核200的浮点队列216和浮点功能单元218可以同步多线程 (SMT)模式运行,以便作为在两个独立的整数执行群集或两个独立的整数功能单元上执行 的两个独立的软件线。

41、程,其中这两个实施方案都为独立的线序。在一个实施例中,IFU 204 可作为SMT电路实施,以便为两个线序提供指令。从解码器单元206到整数功能单元214 的电路可作为芯片上的一个整数线序进行实例化。第二整数线序是所述第一线序的副本, 所述第二整数线序也可在芯片上实例化。 0042 两个整数线序可从IFU 204的输出到相应整数功能单元214以锁步方式运行。例 如,如果软件线程的指令提供给第一整数线序,且所述线序的副本提供给第二整数线序,则 这两个线序的每个管线阶段应在每个相应时钟周期的末尾得出相同的结果。多个检查点指 令可插入程序代码中,而不是在每个时钟周期的末尾进行比较。在每个检查点中,具。

42、体寄存 说 明 书CN 102439561 A CN 102439571 A 7/12页 11 器的内容的比较可对两个线序执行。如果对应的值匹配,则未检测到任何软错误,且执行过 程可以继续。在一个实施例中,如果出现不匹配情况,则执行过程会返回到最近一次成功检 查点,且执行过程可从程序代码中的该位置继续。在一个实施例中,警报可报告给操作系统 (OS)报告。在替代实施例中,警示报告可记录在位于存储器的预定位置处的日志文件中,供 用户仔细查看。 0043 在另一个实施例中,从解码器单元206到整数队列212的电路无法复制,但可作为 SMT单元实施。整数功能单元214可进行复制。再次指出,在一个实施例。

43、中,两个整数线序 的执行可从IFU 204的输出到相应整数功能单元214的输出以锁步方式运行。可按照上述 说明进行检查和比较。使用两个线序是出于说明的目的,且可能或预期会使用更多数量的 线序。例如,在替代实施例中,如上文关于程序所述,微处理器的电路可经配置以执行请求 两个或更多硬件线程(线序)的两个或更多软件线程。因此,三个或更多整数线序的执行 可从IFU 204的输出到相应整数功能单元214的输出以锁步方式运行。 0044 根据上述的任一实施例,浮点队列216、浮点功能单元218、加载/存储单元 (LSU)220和高速缓冲存储器222可单独进行实例化,并从整数队列212和两个单独的实例 化整。

44、数功能单元214接收输入。如上所述,单个软件应用程序可通过在每个整数线序上以 锁步方式运行所述软件应用程序的两个副本来高度可靠地执行。但是,此技术无法应用到 浮点队列216和浮点功能单元218,因为无法确保源自不同线程的操作将会以锁步方式执 行。对于芯片的SMT部分,例如浮点功能单元218,可能没有足够的硬件资源来同步执行源 自两个软件线程的指令。因此,源自两个软件线程的这些指令可能会不同步执行,而不是锁 步执行。 0045 该问题的一种解决方案是迫使这两个软件线程在SMT浮点电路上锁步运行。但 是,该方案在复杂性、芯片内资源、额外的芯片内的线敷设方面将耗费大量成本,且还会在 无需REM操作时。

45、降低性能。该问题的另一个解决方案是让这两个软件线程的浮点指令在浮 点功能单元218上独立运行,并以异步方式生成结果。因此,对这两个软件线程的结果的核 对必须针对每个操作延迟,直到这两个软件线程中较晚的一个计算出结果。由于这种延迟 可能相当多,例如数百个时钟周期,且代码流中的每个操作都需要进行检查,因此设计人员 必须分配非常大的缓冲器来从这两个线程捕获结果,直到所述线程已经过安全检查。 0046 相反,可对REM操作使用某种技术,以便两个“单独”软件线程的两个指令,例如原 始指令和它的相同副本,可在多数时候在SMT浮点电路上不同步执行,同样地,所述两个软 件线程是原始软件线程和它的相同副本。这两。

46、个线程是同步的,且仅在尝试经由浮点域传 输结果时才进行偏差比较,因此能够确保对这两个整数群集的刺激是同步的。这可让整数 群集基于来源于浮点电路的所有传输检查源自这两个线程的相同响应,因此所述整数群集 可以维持锁步状态。 0047 现在转向图3A,图示的是方法300的一个实施例,其中所述方法用于在同步多线 程处理器上高效且可靠的执行。出于说明的目的,本实施例的各个步骤以连续顺序展示。但 是,某些步骤的顺序可能会异于图示的顺序,某些步骤可能会同时进行,某些步骤可能会与 其他步骤相结合,且某些步骤可能不存在于另一个实施例中。微处理器内的多线程处理器 内核在步骤302中设置为可靠执行模式(REM)。该。

47、操作可由程序代码指令、系统微代码指 令,由外部控制激活或解除激活的指定插针上的信号等执行。 说 明 书CN 102439561 A CN 102439571 A 8/12页 12 0048 在步骤304中,微处理器的指令提取单元从i-cache的指定地址中提取指令。在一 个实施例中,在REM操作过程中,微处理器可仅允许执行两个线序(硬件线程)。所提取的 每个指令可选择性地复制。例如,如果浮点指令未检测到在浮点电路的外部传输(条件性 步骤306),例如浮点存储指令、浮点整数变换指令等,则其他计算的这些指令将在步骤312 中复制。原始指令将视作第一软件线程的指令并发送到第一线序。指令副本将视作第二。

48、软 件线程的指令并在步骤314中发送到第二线序。 0049 指令检测和指令复制都可在解码器单元206、重排缓冲器208、执行队列212和 216,或设计人员选择的另一前端单元中进行。仅针对这些浮点外部操作的预解码电路可设 置在解码器单元206的前面。对于包括从解码器单元206到整数功能单元214的电路的内 核200,如果在所述内核中复制了整数内核,则可使用此技术。或者,解码器单元206的输出 信号可用于检测这些操作,且可在解码后进行复制。如果执行队列212和216的解码器单 元206的电路作为SMT电路实施,则可使用此技术。接下来,在步骤314中,原始指令和复 制指令分配给单独的线序,且在步骤。

49、316中,所述指令被重命名并调度。 0050 但是,如果浮点指令检测到在浮点电路外部传输(条件性步骤306),例如浮点存 储指令、浮点整数变换指令等,则该浮点外部操作或指令无法复制。这些指令需要从浮点功 能单元218到整数功能单元214的通信路径(走线)。由于没有功能单元218中的浮点逻 辑的副本,因此锁步执行将由于这些指令而在所有功能单元214和218中中断。因此,在步 骤308中,该指令类型可转换成新指令类型。而未复制的这一新的指令类型将分配给一个 可用线序。例如,该新指令类型可视作源软件线程的指令,且在处理器200中分配给它对应 的线序。 0051 例如,对于微处理器内两个线序的一个实施例,第一线序可具有32个浮点(FP) 寄存器,例如从f0到f31,且第二线序也一样。浮点单元FPU可能需要维持这两个线序的 状态,其中所述浮点单元可包括队列216和单元218的电路,或者,可包括自身的针对解码 单元206到队列216的操作的电路。FPU可请求至少64个逻辑寄存器,例如L0到L63,所 述逻辑寄存器拥有这两个线序的提交架构。从L0-L63到Strand0.FP0-Stran。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1