首页> 中国专利> 利用世代数的重命名

利用世代数的重命名

摘要

本发明涉及利用世代数的重命名。一种处理器包括具有多个寄存器的寄存器堆,并且被配置用于乱序指令执行,该处理器进一步包括:重命名器单元,产生与寄存器堆地址相关联的世代数以提供与该寄存器的现有版本在时间上偏移的寄存器的重命名版本,而不是分配非程序员可见的物理寄存器作为重命名的寄存器。

著录项

  • 公开/公告号CN105242906A

    专利类型发明专利

  • 公开/公告日2016-01-13

    原文格式PDF

  • 申请/专利权人 美国博通公司;

    申请/专利号CN201510201428.7

  • 申请日2015-04-24

  • 分类号G06F9/38(20060101);

  • 代理机构11240 北京康信知识产权代理有限责任公司;

  • 代理人田喜庆

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-18 13:28:42

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-11-09

    专利权的转移 IPC(主分类):G06F9/38 登记生效日:20181022 变更前: 变更后: 申请日:20150424

    专利申请权、专利权的转移

  • 2018-05-04

    授权

    授权

  • 2017-04-05

    专利申请权的转移 IPC(主分类):G06F9/38 登记生效日:20170315 变更前: 变更后: 申请日:20150424

    专利申请权、专利权的转移

  • 2016-02-10

    实质审查的生效 IPC(主分类):G06F9/38 申请日:20150424

    实质审查的生效

  • 2016-01-13

    公开

    公开

说明书

相关申请的交叉引用

本专利申请要求于2014年4月25日提交的美国临时专利申请号 61/984,706以及2014年10月31日提交的美国专利申请号14/530,111的优 先权。通过引用将其全部并入本文中。

技术领域

本公开内容总体涉及计算机处理器。

背景技术

半导体制造的发展使得在集成电路上上并入大量逻辑电路成为可能。 进而,这导致数字系统架构的发展。数字系统架构中已从在单个集成电路 上包括大量阵列的逻辑电路的能力受益良多的一个具体领域是处理器设 计。

发明内容

根据本发明的一个方面,提供一种装置,包括:寄存器,通过寄存器 地址寻址,被配置为存储一值;重命名器,被配置为接收所述寄存器地址 以及所述寄存器是取出指令的目的地还是源的指示,并且生成与用于所述 取出指令的所述寄存器相关联的飞行中(inflight,未提交状态)的世代数 (generationnumber,世代号);以及保留队列,与所述寄存器和所述重命 名器通信地耦接,被配置为同时存储所述寄存器地址和所述飞行中的世代 数。

其中,所述保留队列进一步被配置为存储所述取出指令的指令操作 码。

其中,所述寄存器和所述重命名器被配置为同时向所述保留队列提供 数据。

其中,所述重命名器进一步被配置为存储指示当前所述寄存器的哪个 世代正被使用的飞行中的数组。

其中,所述重命名器进一步被配置为维护指示所述寄存器的最新确认 返回的世代的真值指针。

其中,所述重命名器进一步被配置为至少部分基于使用所述飞行中的 数组和所述真值指针来生成指示与所述飞行中的世代数相关联的值是否 有效的有效位。

其中,如果所述寄存器是用于所述取出指令的源寄存器,则所述保留 队列进一步被配置为存储一值和所述有效位。

其中,如果推测地执行所述取出指令,所述重命名器进一步被配置为 维护一指向所述飞行中的世代数的推测指数(SIN)指针。

其中,如果所述取出指令被推测地执行并且被确认,所述重命名器进 一步被配置为更新真值指针至等于所述SIN指针并且清除所述SIN指针。

其中,如果所述取出指令被推测地执行并且被删除,所述重命名器进 一步被配置为更新所述飞行中的数组并且清除所述SIN指针。

其中,通过所述重命名器生成飞行中的世代数进一步包括:如果在所 述取出指令中设定标记位,选择下一个非飞行中的世代数。

其中,如果飞行中的所述寄存器没有另外的世代,则所述重命名器进 一步被配置为从所述取出指令和目的地寄存器地址接收结果,更新飞行中 的数组,并且使所述寄存器利用所述结果来更新。

其中,所述重命名器进一步被配置为更新飞行中的数组,并且如果没 有用于所述寄存器的后来的飞行中的世代数,所述寄存器被配置为存储所 述取出指令的结果。

进一步地,该装置包括寄存器写入控制逻辑,其中,所述重命名器进 一步被配置为告知所述寄存器写入控制逻辑是否应当存储所述结果。

根据本发明的另一方面,提供一种方法,包括:通过寄存器重命名器 接收由取出指令指定的寄存器地址;如果所述寄存器地址是源寄存器地 址,通过所述寄存器重命名器生成飞行中的寄存器世代数,所述飞行中的 寄存器世代数包括与所述寄存器地址相关联的最新飞行中的世代数;如果 所述寄存器地址是目的地寄存器地址,通过所述寄存器重命名器生成飞行 中的寄存器世代数,所述飞行中的寄存器世代数包括所述最新飞行中的世 代数之后的与所述寄存器地址相关联的飞行中的世代数;以及提供所述飞 行中的寄存器世代数至保留队列。

进一步地,该方法包括:与寄存器堆提供一值同时提供所述飞行中的 寄存器世代数。

进一步地,该方法包括:维护指示当前所述寄存器的哪个世代正被使 用的飞行中的数组。

进一步地,该方法包括:维护指示所述寄存器的最新确认返回的世代 的真值指针。

进一步地,该方法包括:基于所述飞行中的数组和所述真值指针来生 成指示寄存器堆中的值有效的有效位。

进一步地,该方法包括:如果推测地执行所述取出指令,维护一指向 与所述取出指令相关联的所述飞行中的世代数的推测指数(SIN)指针。

进一步地,该方法包括:如果所述取出指令被推测地执行并且被确认, 更新所述真值指针并且清除所述SIN指针。

进一步地,该方法包括:如果所述取出指令被推测地执行并且被取消, 更新所述飞行中的数组并且清除所述SIN指针。

进一步地,该方法包括:如果在所述取出指令中设定标记位,接收所 述标记位并且选择用于所述寄存器的下一个非飞行中的寄存器世代数。

附图说明

参考附图描述实施方式。在附图中,相同的附图标记表示相同的或功 能相似的元件。此外,参考标号最左边的数字表示该参考标号首次出现的 附图。

图1是示例性处理器的高层次的框图。

图2是实现寄存器重命名的示例性处理器的高层次的框图。

图3是示出根据示例性实施方式的寄存器重命名过程的流程图。

图1和图2示出各种组件、它们的布置及互联,但未按比例绘制。

具体实施方式

以下详细说明参考附图以示出示例性实施方式。在具体描述中,对“一 个示例性实施方式”、“说明性实施方式”、“示例性实施方式”等的引用是 指所描述的示例性实施方式可包括具体的特征、结构或特性,但每个示例 性实施方式可能不一定包括具体的特征、结构或特性。而且,这些短语不 一定指代相同的示例性实施方式。进一步,当结合示例性实施方式对一个 具体的特征、结构或特性进行说明时,无论是否明确指出,本领域的技术 人员在其知识范围内可结合其他示例性实施方式影响该特征,结构或特 性。

提供本文所述的示例性实施方式是用于说明的目的而不非限制。其他 示例性实施方式也是可行的,以及在本发明的精神和范围内可以对示例性 实施方式做出修改。

应当理解,本文中的措辞或术语是为了描述而非限制,使得本说明书 的术语或措辞应由本领域的技术人员根据本文中的教导进行解释。

术语

在电子设备领域,术语芯片、裸片、集成电路、半导体设备、及微电 子设备常常可互换地使用。

如在此所使用的FET是指金属氧化物半导体场效应晶体管 (MOSFET)。n-沟道FET在本文中称为NFET。p-沟道FET在本文中称 为PFET。

CMOS是指其中NFET和PFET形成在集成电路中的半导体制造工 艺。

CMOS电路是指其中一起使用NFET和PFET两者的电路。

VLIW是超长指令字的缩写。

如在本文的示例性实施方式的描述中使用的,VLIW指令是指组合在 一起用于提供至指令解码器的指令集。指令集中的各指令被分配到多个执 行管道之一用于执行。

IC0是指在指令缓存的输入上的伪阶段(pseudo-stage)。

IC1是指指令缓存阶段。在该周期与确定下一次取出哪个PC的计算 一起做出对指令缓存的取出请求。在该阶段提供先前请求的VLIW指令。

DE1是指指令解码器的第一阶段。

DE1_operation是指通过指令解码器的第一阶段执行的逻辑操作。

DE1_time是指其中出现DE_1operation的周期。

DE2是指指令解码器的第二阶段。

DE2_operation是指通过指令解码器的第二阶段执行的逻辑操作。

DE2_time是指其中出现通用寄存器堆(GRF)和谓词寄存器堆(PREG) 的读取和重命名的周期。

RS是指保留站。存在几个不同的可以排队的保留站。在最好的情况 下,这是单个周期阶段,然而操作可以在这里以多个周期结束排队。

EXn是指执行管道的第n个阶段。执行管道的示例包括ALU短管道 和长管道,BRANCH(分支)和加载存储单元。

SHP是指短执行管道。短执行管道被用于执行单循环操作。

LOP是指长执行管道。长执行管道被用于执行需要2至8个周期完成 的指令。

LSU是指加载存储单元。

DTCM是指数据紧耦合存储器。

PBUS是指连接至外围存储器的总线。

DCACHE是指用于缓存对外围存储器的访问的数据缓存。

排队(enqueue,入队)是指其中DE2中的VLIW指令分成其组件操 作,然后向前下方移动管道至保留站中的动作。

发射(issue)是指将操作从保留站移动至执行单元。当操作从保留站 移动至执行单元时,将操作称为被发射。操作是VLIW指令的组件部分。

当前PC是指当前在给定阶段中的指令的程序计数器(PC)的值。管 道的每个阶段将具有其自身的当前PC版本。

下一个PC是指从Icache取出的下一个PC。对于直线式代码,这将 是当前PC+当前指令宽度,对于改方向代码,其将是新的目标PC。

循环开始地址是指循环体中的第一指令的地址,即,分支的用于开始 新的循环迭代的地址。

循环结束地址是指循环体之后的第一指令的地址,即,分支的用于自 然退出循环的地址。

循环体是指开始于循环开始地址并且结束于循环匹配地址的指令。

循环匹配地址是指循环体中的最后指令的地址。

循环计数是指应当执行的循环的迭代数目。这来自用于LOOP(循环) 操作的真值字段,或者来自用于ZLOOP和ZLOOPS操作的通用寄存器。

SIN是指推测指数(SpeculationIndexNumber),该推测指数被用于识 别在分支附近推测地排队的指令。

SIN解析是指确定分支是否正确推测与否。SIN解析在EX1中执行。

SIN验证是指EX1中正确推测的分支,该分支反过来将验证与操作相 关联的SIN在正确推测的分支附近。验证的操作是将要更新架构状态的操 作。

SIN取消是指EX1中未正确推测的分支,该分支将反过来取消所有的 突出的SIN,并且使EX1改方向,有效地从执行管道去除在分支附近的所 有的操作。在一个实施方式中,去除在未正确推测的分支附近的操作包括 改变与执行管道中的这些指令的每一个相关联的状态。

状态一致执行(SCE)是指内部机制执行的防止未来操作出现不连贯 的机器状态的动作。

陷阱事件是指一组同步、异步及故障事件。

同步陷阱事件是指具体的指令并及时检测以防止引起事件的指令排 队。访管(SVC)指令符合该种类。当它们出现在指令流中的在架构上定 义的地点时,这些是精确的。

异步陷阱事件(中断)独立于当前指令序列发生。异步异常符合于此。

故障陷阱事件防止程序流程恢复。故障陷阱事件的实例是未对准的 PC和数据中止。具有寄存器目的地的故障操作必须完成寄存器值。

公开的处理器架构包括具有多个寄存器的寄存器堆,并且被配置为乱 序指令执行,进一步包括产生世代数的重命名器单元,世代数与寄存器堆 地址相关联,以提供与寄存器的现有版本暂时偏移的寄存器的重命名的版 本,而不是分配非程序员可见物理寄存器作为重命名的寄存器。处理器架 构包括耦接至指令缓存并且被配置为提供推测地址至指令缓存的小的重 置DHLGshare分支预测单元。处理器架构适于在集成电路中实现。这种 集成电路通常利用CMOS电路实现。

在典型的实施方式中,根据本公开内容的处理器在集成电路中实现为 嵌入式处理器。

图1是示出根据本公开内容的示例性处理器的主要模块的高层次方框 图。示例性处理器包括指令缓存102,耦接分支预测单元104以接收来自 分支预测单元104的VLIW指令地址,并且进一步耦接分支预测单元104、 指令解码器106、寄存器堆108、及世代重命名110以向它们提供输出。 世代重命名器(Generationrenamer)110耦接至分支执行单元118以接收 SIN控制信号,耦接至SIN分配器(allocator)以接收SIN号,耦接至制 止盒(stuntbox)124以接收来自操作数复制网络的输出,以及耦接至分 支保留队列112、执行管道保留队列114A、114B、114C、114D、及加载/ 存储保留队列116。寄存器堆108耦接至制止盒124以接收来自操作数复 制网络的输出,并且进一步耦接至分支保留队列112、执行管道保留队列 114A、114B、114C、114D、及加载/存储保留队列116。分支保留队列112 耦接至分支执行单元118。执行管道保留队列114A、114B、114C、114D 各自分别耦接至对应的执行管道120A、120B、120C及120D。执行管道 120A、120B、120C、及120D各自耦接制止盒124以提供输出到制止盒 124。每个执行管道120A、120B、120C、及120D分别耦接它们的输入端, 以将它们的输出提供回至它们的输入端,并且每个进一步耦接至分支执行 单元118的输出端以接收SIN控制信号。存储器122耦接至加载/存储单 元116。并且加载/存储单元116进一步耦接至系统总线126。

指令缓存102保存先前通过取指令单元(未示出)取出的VLIW指令。 通常从设置在处理器本身以外的存储器取出VLIW指令。分支预测单元 104被示出耦接至指令缓存102。分支预测单元104提供VLIW指令的地 址以便取出。如果请求的VLIW指令存在于指令缓存102中,则将其提供 至指令解码器106。如果请求的VLIW指令未存在于指令缓存102中,则 出现缓存未命中,那么从设置在处理器以外的存储器取出请求的指令。

分支预测单元104具有几个功能,包括提供指令缓存102需要的程序 计数器值,和整个处理器的不同的阶段(stage,级)与逻辑模块需要的程 序计数器值。对于连续执行的程序代码,程序计数器值仅改变刚才取出的 指令的长度。但是当检测到分支指令,则分支预测单元104确定应当从什 么地址取出下一个指令。在该示例性处理器中,分支预测单元104使用小 的重置DHLGshare分支预测机制来确定下一个指令地址。

指令解码器106解码VLIW指令的内容并且将控制信息提供至处理器 的各个其他模块。

寄存器堆108包含预定数量的程序员可见寄存器。这些寄存器保存在 程序的执行过程中使用的值。

从VLIW指令获得的各个指令被排队到选择的保留队列中。当所排队 指令的执行需要的操作数变成可利用时,将该指令发射至与所选择的保留 队列相关联的执行管道。

通常,当寄存器实例被再分配至不同的非程序员可见物理寄存器时, 世代重命名器110被用于在指令中向这些寄存器实例分配世代数。

保留队列保存等待被发射的指令。

制止盒124提供用于接收并且分配执行管道的输出的机制。制止盒 124提供数据至操作数复制网络。操作数复制网络允许执行管道的所有结 果对处理器内的其他模块可用。以这种方法,等待从执行另一个指令产生 的操作数的指令不需要等待该操作数写回至寄存器堆,然后从寄存器堆读 出。更确切地,经由操作数复制网络,所需要的操作数对整个处理器的等 待具体结果的所有的位置可用。

系统总线126为嵌入式处理器提供机制来与集成电路上的处理器本身 以外的其他逻辑模块通信。

世代重命名概述

处理器包括许多不同的物理资源,例如寄存器、执行单元、运算单元、 存储器、控制逻辑等。处理器中包括的物理资源之一是对程序员在创建软 件时可利用的寄存器的架构可见集。这些寄存器物理存储将由处理器使用 的信息,如通过软件指引的信息。基于处理器的设计和实现的指令集来确 定寄存器组内的可利用的寄存器的数目。因为存在固定数量的寄存器,所 以常常要求程序员在创建他们的软件时重新使用寄存器。

因为寄存器被重新使用,所以当处理器执行软件时需要确保保持每个 寄存器的正确值用于正在执行或被调度来执行的每个指令,以保证正确地 执行程序。这对可以根据可利用的资源以不同的顺序执行指令的乱序机器 来说是确实存在的问题,并且甚至对于可以取出、解码、并且并行执行多 指令的非常大的指令字(VLIW)处理器来说,更是这样。

为了解决这些问题,来发了世代重命名。世代重命名允许处理器保持 用于寄存器堆中的每个架构寄存器的值。另外,处理器保持每个寄存器的 多个版本、命名的世代。每个世代表示将或者可以存储在寄存器中的新值。 不同的寄存器可以同时使用不同的世代。例如,机器可以在使用R1的世 代5和世代7的同时使用R0的世代2、世代3、及世代4。在架构上,每 个寄存器具有与其相关联的值,维持当前正使用的世代的方式,以及用于 识别最后已知的正确使用的世代和任何推测的使用的世代的指针集。以下 将更详细地描述这些组成。

因为个别指令处于飞行中的,例如等待执行、正在执行、或者等待引 退,与个别指令相关联的寄存器保持表示每个寄存器的哪个世代正在被该 指令使用的描述符。因此,使用相同寄存器的多个指令可同时处于飞行中 的,而允许程序按预期执行。指令可以被保持直到它们的每个源寄存器的 正确世代可利用。即使指令使用相同的目标寄存器,它们也可以执行。并 且指令可以引退,即使这将修改同一寄存器,也没有引起程序执行中的错 误。利用与将正确值转发至正确指令最相关的最小的另外的逻辑,处理器 可以在维持与架构上可见寄存器相关联的寄存器堆的同时执行。例如,当 指令引退时,目标寄存器的值可被转发至要求具有该世代的寄存器的飞行 中的指令。在示例中,如果这还是飞行中的寄存器的最后的世代,那么值 也可被写入寄存器堆。

世代允许处理器在使用相同的体系架构寄存器的同时取出、排队、并 且执行多个指令。这减小或者消除停止执行管线以等待先前指令的结果的 需要。例如,程序员可能希望仅使用5个寄存器执行以下代码:

Inst0:AddR0,R1,R2

Inst1:MulR1,R0,R0

Inst2:AddR0,R4,R5

Inst3:MulR4,R0,R0.

在该代码中,程序员将R1和R2中的值相加并存储结果在R0。(在 R0中存储的)该结果然后被平方并存储在R1中。随后,将R4和R5中 的值相加并将结果再次存储在R0中。类似地,该结果被平方并存储在R4 中。

通常,处理器要么必须停止Inst2直到Inst1完成(要么在Inst1执行 时冒R0包含错误值的风险),或者使用程序员看不见的寄存器以扩大可利 用寄存器的集合并且去除由再使用寄存器R0所引起的先读后写(WAR) 故障。如果这未完成,R0中的值可能不正确,因此将不期望的值存储在 R1中。每次遇到故障时停止机器可能大大地降低处理器的性能。增加存 储架构寄存器和非程序员可见寄存器两者的寄存器堆的尺寸可以减轻这 个问题。但是这需要增加结果直通逻辑(theforwardinglogic)和重命名逻 辑以跟踪哪个寄存器来存储一值,用于哪个指令正在使用哪个架构寄存 器。并且物理寄存器的数目的增加也增加功率损耗和芯片面积。

世代重命名允许处理器保持(maintain)寄存器堆与体系架构寄存器, 同时甚至当指令指定使用相同的寄存器时允许处理器排队并并行执行这 些指令。具体地,这允许改变相同寄存器的值的两个指令都排队、发射、 并且执行,而不影响取决于任一指令的其余软件的执行。每一次寄存器用 作目的地时,该寄存器被标记有新的世代数。在那之后使用寄存器的每个 指令将使用新的世代直到世代数再次增加。一旦初始指令执行并且确定了 寄存器的值,可以更新使用该寄存器和该世代数的所有未决的指令,以表 示它们具有用于该寄存器的有效值。

返回至以上实例,我们将使用约定来表示Rn世代m。对于以 上代码段,我们将假定在执行之前寄存器的世代信息是及在该示例性实施方式中,当指令排队时,世代 数分配如下:

Inst0:Add(R0的世代增加,R1和R2保持相同)

Inst1:Mul(R1的世代增加,R0保持相同)

Inst2:Add(R0的世代增加,R4和R5保持相同)

Inst3:Mul(R4的世代增加,R0保持相同)。

因此世代重命名允许发射并执行Inst2,而不会影响Inst1的结果。在 以上实例中,如果Inst2在Inst1之前执行,那么Inst2的结果将直通 (forward,转发)至使用的所有的其他指令,不会影响使用R0的 其他世代的指令。例如,一旦执行,可以通过等待这些结果的任何飞行中 的指令复制指令的结果。例如,如果我们具有两个执行单元,那么我们的 每个指令可以排队至不同的执行单元。如果Add指令比Mul指令执行的 快,那么我们可以具有类似下列的序列:

时间1:将Inst0放置在队列0中;将Inst1放置在队列0中;将Inst 2放置在队列1中;将Inst3放置在队列1中

时间2:执行Inst0和Inst2(不取决于任何先前的指令的结果)

时间3:引退适当地更新Inst1和Inst3;使用来自Inst0和 Inst2的结果执行Inst1和Inst3(这假定对于该处理器,来自Inst2的结 果可以直通回至Inst3)。

替代地:

时间1:将Inst0放置在队列0中;将Inst1放置在队列0中;将Inst 2放置在队列1中;将Inst3放置在队列1中

时间2:执行Inst0和Inst2(不取决于任何先前的指令的结果)

时间3:引退适当地更新Inst1;使用来自Inst0的结果开始 执行Inst1

时间4:引退适当地更新Inst3;使用来自Inst2的结果开始 执行Inst3

因此世代重命名允许多个指令同时存在于处理器中。虽然这些指令看 起来有序执行,但是可以乱序执行(即,乱序执行的结果与有序执行相同)。 世代重命名通过允许每个寄存器的多个版本存在于处理器中来允许这发 生,使得指令可以更新并使用相同的寄存器,而不干扰彼此的执行。

世代重命名结构

参考图2,处理器的示例性实施方式包括寄存器堆202、重命名器204、 保留队列208、执行单元210、及制止盒212。

寄存器堆202被配置为存储每个架构寄存器的值。例如,寄存器堆202 可以存储用于通用寄存器R0至R31、谓词寄存器P0至P7、及乘与累加 (MAC)寄存器M0至M7的值。在实施方式中,寄存器堆202包括写控 制电路,该写控制电路当来自执行管道的结果将要写入到寄存器堆的架构 寄存器时进行控制。

在实施方式中,处理器包括用于一个或多个架构寄存器的重命名器 204。重命名204可以包括飞行中的数组216、真值指针(turepointer)218、 一个或多个推测指令数(SIN)指针220、使能电路222、及验证电路224。 每个飞行中的数组216表示其对应的寄存器的那些世代当前正在被处理器 使用。例如,飞行中的数组216可表示用于R0的世代2、世代4、及世代 5当前正在被处理器使用。

因此,每个飞行中的数组216保持每个寄存器的当前正在被处理器中 的指令使用的所有世代的列表。飞行中的数组216可以是循环数组。因此, 在分配数组中的最后世代(例如世代7)之后,分配的下一个世代将是世 代0。这些世代可以在保留队列、加载/存储(L/S)队列、执行单元、制 止盒等中使用。

为了确定哪个世代是使用中的最新的世代,真值指针218用于每个架 构寄存器。每个真值指针218指向相关联的飞行中的数组216中的表示该 寄存器的用作指令的目的地的最后世代的位置。例如,在以上代码段中, 取出并重命名Inst3之后,用于R0的真值指针218将指向用于 R1的真值指针218将指向并且用于R4的真值指针218将指向 真值指针218可以以几个方式来使用。例如,当指令被解码时, 真值指针218指向正在用于指令的源的寄存器的世代。对于目的地,可以 将世代设置为真值指针之后的下一个世代。

在实施方式中,当结果引退时,可能发生几个不同的情况。用于寄存 器的该世代的值可以直通至使用当前在保留队列中的该寄存器的该世代 的所有的指令并且可以设置这些寄存器的有效位。有效位允许处理器确定 准备发射哪个指令用于执行。在实施方式中,如果值是不能推测的,例如, 值不是在结果被猜测的条件转移指令之后生成的,那么用于相关联的飞行 中的数组216中的该世代的飞行中的位被清除。

使能电路222还使用引退的结果值、引退的结果世代数、及真值指针 218来确定该结果是否应当写入寄存器堆202。真值指针218指向非推测 执行的寄存器的最后世代。即,真值指针218指向在处理器推测预测的任 何条件分支之前分配的寄存器的最后世代。如果引退的结果世代数与真值 指针218匹配,那么不存在写入该寄存器的飞行中的非推测的指令。在该 点,值可以写入寄存器堆202。因此,使能电路222可以为该寄存器设置 写入使能并且使引退的结果值写入寄存器堆202。这可以限制对寄存器堆 202进行的不必要的写入的数目。

除了真值指针218,还向每个寄存器分配一个或多个SIN指针220。 SIN指针220用于跟踪寄存器的已经分配至推测地取出、排队、或者执行 的指令的世代。例如,以下代码段从Inst0中的存储器检索一值并且执行 Inst1至Inst6等于检索的值的次数。Inst1至Inst6采用在存储器位置 0x00200020开始的数组并且使每个元素加倍:

Inst0:LdR0,[0x10]

Inst1:AddR1,0x00200020

Inst2:LDR2,[R1]

Inst3:MulR2,R2,0x2

Inst4:STR2,[R1]

Inst5:SubR0,R0,0x01

Inst6:BnzInst1.

当处理器达到Inst6时,处理器必须确定要么返回至Inst1,要么继续 执行。该确定基于尝试以位于存储位置0x10的值加载R0的R0.Inst0中 的值。从存储器检索可能需要一段时间,尤其如果值位于主存储器中而不 是缓存中。当从存储器检索到该值时,处理器可以决定推测地执行另外的 指令。处理器可以基于过去历史确定为例如,分支回到Inst1。

由于从主存储器检索信息需要时间,所以该循环可以推测地执行多 次。虽然处理器知道来自第一执行的结果是正确的,但是将推测每个另外 的迭代,直到我们从存储器接收到Inst0请求的值。

因此,对于Inst6的每个推测执行,分配新的SIN指针220。对于每 个SIN指针220,分配R1和R0的新版本(参见Inst1和Inst5),并且分 配R2的两个新版本(参见Inst2和Inst3)(存储指令–Inst4–不具有寄 存器目的地)。在循环的4次运行之后,R1和R2可以看起来像这样:

R1.

R1.

R1.

R1.

R1.

R1.InflightArray(飞行中的数组)=011111000…0

R2.

R2.

R2.

R2.

R2.

R2.InflightArray(飞行中的数组)=1111111110…0

如果在此时,至R0的加载完成并且其具有大于4的值,那么确认了 每一个推测执行的指令,用于这些寄存器的每个的SIN3指针被复制到真 值指针里,并且执行继续而无需推测。但是如果值小于4,例如2,那么 一个或多个执行必须是松散的。正确指针,例如SIN1指针,被复制到真 值指针里,新的真值指针与最近分配的SIN指针之间的,例如SIN3指针 的飞行中的位被清除,例如R1.飞行中的数组位4-5和R2.飞行中的数组位 5-8。

因为来自推测执行的指令的结果未加载到寄存器堆202里,所以无需 对寄存器堆202做出改变。

在实施方式中,重命名器204也可以确定寄存器堆中的值是否是有效 的。当指令被解码并被排队至保留队列时,存储在寄存器堆202中的该寄 存器的值也被复制到保留队列里。另外,设置表示该源寄存器值是否是有 效的有效位。验证电路224负责设置该位。如果由真值指针指向的寄存器 的世代(或者最近分配的SIN指针,如果我们推测执行该指令)是1,那 么有效位被清除,并且如果是0,那么有效位被设置。这意味着如果寄存 器的该世代的值仍然被核算(即,仍然处于飞行中),那么寄存器堆202 中的值是无效的,但是如果该值已经引退,那么寄存器堆202中的值是有 效的。一旦设置所有的源寄存器有效位,指令被准备发射用于执行。

世代重命名过程

在示例性实施方式中,处理器可以被配置为在VLIW指令被解码的同 时执行世代重命名。在另一个实施方式中,可以在解码VLIW指令之后执 行世代重命名。

在步骤302,处理器取出VLIW指令。例如,处理器取出通过程序计 数器(PC)指向的下一个缓存线。该缓存线可以包括可以由多个单独指令 构成的VLIW指令。例如,根据实现细节,VLIW指令可以由2个、4个 或者8个单独的指令构成。在其他实施方式中,如本领域的技术人员所理 解的,VLIW指令可以根据实现细节由其他数量的单独指令构成,例如3。

在步骤304,可以识别用作VLIW指令内的源和目的地的寄存器。该 信息可以提供至如以下更详细描述的其余的指令解码单元、寄存器堆、及 重命名器。作为指令解码的部分,可以识别与每个指令相关联的寄存器 (即,源寄存器和目的地寄存器)。在另一个实施方式中,寄存器可以被 识别作为分离单元的一部分并传递至指令解码单元、寄存器堆、及重命名 器。

在步骤306,可以解码VLIW指令内的一个或多个指令。在一个实施 方式中,这是指令解码单元的第二阶段的一部分,第一阶段包括识别寄存 器。进行两步骤解码的一个优势是可以简单并快速的在周期的早期发生寄 存器识别,允许其他元件处理依赖正在识别的寄存器的指令。

在步骤308,可以访问寄存器堆,例如寄存器堆202,并且可以识别 在VLIW指令中使用的任何源寄存器的世代的值。此时,识别写入寄存器 堆的源寄存器的最后世代。该值可能是有效的或者可能是无效的。因此, 推测该值与VLIW指令相关联。如以下将解决,将设置有效位来表示该值 是否是用于该VLIW指令的源寄存器需要的世代的正确值。

在步骤310,世代数与在步骤304中识别的寄存器号相关联。需要表 示哪个值与寄存器号相关联的该世代数用于完成指令。例如,如果VLIW 指令其使用寄存器R0作为源寄存器,那么当前在处理器中使用的R0的 最新的世代可以与VLIW指令相关联。这可能是R0的当前处于飞行中的 世代并且在将来的某一天变得可利用。或者这可能是R0的早先计算的并 且可以使用的世代。在另一个实例中,如果VLIW指令表示寄存器号是目 的地寄存器,那么R0的下一个可利用的非飞行中的世代与该VLIW指令 相关联。例如,如果世代3至世代6当前处于飞行中,R0世代7将与VLIW 指令相关联。

在实施方式中,指针,诸如以上论述的真值指针或者SIN指针,可以 识别当前处于飞行中的寄存器的最新的世代。例如,如果指令是当前未推 测取出的(即,所有先前的分支指令已经解决),真值指针可以用于识别 寄存器的最新有效的世代。如果指令是推测取出的,那么SIN指针可以用 于识别寄存器的最新有效的世代。

在实施方式中,源寄存器可以被加标记以表示它们使用通过该VLIW 指令产生的值。例如,第一单独指令可能增加通过第二单独指令检索的值, 其中第一单独指令和第二单独指令包含在相同的VLIW指令内。在该实施 方式中,识别用于第一单独指令的源寄存器可以包括:VLIW指令内的表 示使用来自VLIW指令内的另一个单独指令的结果的标记。如果这样加标 记,而不是与可用于寄存器的最后飞行中的世代相关联,用于第一单独指 令的源寄存器将与下一个可利用的非飞行中的世代相关联。这将是与第二 单独指令的目的地相同的世代,从而表示第二单独指令的结果在可利用时 可以直通至第一单独指令。

在步骤312,对于识别作为用于VLIW指令的源寄存器的所识别的寄 存器,确定从寄存器堆检索的值是否有效。例如,可以检查用于寄存器号 的飞行中的数组。如果至使用的最后世代的指针表示该世代当前不处于飞 行中并且使用的最后世代与用于VLIW指令的源寄存器的世代匹配,那么 可以设置有效位。从寄存器堆检索的值是用于正在使用的源寄存器的世代 的正确版本。在实施方式中,如果不存在使用的SIN指针(即,没有推测 执行的指令)并且真值指针指向识别的寄存器,将仅设置有效位。

在步骤314,单独指令被增加到保留队列。这包括增加将要执行的指 令的操作码、源寄存器号和目的地寄存器号,相关联的世代数、用于源寄 存器的值、及源有效位也增加到保留队列。

结论

应当理解,详细说明部分而不是本公开内容的摘要部分旨在用于解释 权利要求。本公开内容的摘要可阐述一个或多个而不是所有的示例性实施 方式,并且因此并不旨在以任何方式限制所附权利要求的范围。

对相关领域的技术人员显而易见的是,在不偏离本公开内容的精神和 范围的情况下,在形式和细节上可以进行各种改变。因此,本公开内容不 应由任何上述示例性实施方式来限定,而是应仅根据所附权利要求及其等 同物来定义。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号