具有世代重命名的计算机处理器的制造方法_6

文档序号:9287722阅读:来源:国知局
实施例中,从处理器的通用寄存器堆或者从指令管线中 的另一地方获得n的值。如果在不知道"n"的值的情况下,取出、解码、并且执行循环指令 和循环体,则将循环计数称之为"推测计数"。当通过从处理器中的通用寄存器堆访问循环 计数或者从处理器中的另一位置访问循环计数而确定其值时,可以将循环计数"n"称为"被 解析"。可以推测性地执行循环指令。当确定猜测执行或者不执行循环指令时,则将循环指 令称之为"被解析"。
[0378] 在常规架构中,编译器可合成并且执行与上面所示循环实例等同的下列汇编语 S:
[0379] MOV R0, n
[0380] 循环开始BREQZ R0,循环结束
[0381] SUB R0, R0, 1 ;
[0382] INST 1;
[0383] INST 2;
[0384] INST 3;
[0385] BR循环开始
[0386] 循环结束INST4 ;
[0387] INSTN;
[0388] 在上述实施例中,为了执行循环,编译器首先产生使循环计数n(如果可用)传送 至寄存器(例如,寄存器R0)中的传送(MOV)指令。编译器还产生诸如等于零分支(BREQZ)、 减法(SUB)指令、以及分支(BR)指令等额外指令。BREQZ、SUB、以及BR指令增加了这些指 令的原循环体的大小。
[0389] 通过编译器将BREQZR0,循环结束插入到循环开始地址。在上述实施例中,"循环 开始"指"标签"。标签是被分配给代码内的固定位置的名称或者编号,并且通过在代码中 其他地方出现的其他指令可以参考标签。除了标记代码中的指令的一部分之外,标签不具 有任何影响。如此处使用的,"循环开始"或者"循环开始地址"指循环体中的第一指令的地 址。在该实施例中,循环开始地址指通过编译器可生成的BREQZ指令。如此处使用的,"循 环结束"或者"循环结束地址"指循环体之后的第一指令的地址。在上述实施例中,循环结 束指循环体之后的第一指令INST4。当R0中的值不等于0时,BREQZ指令将退出循环并且 将执行程序转换至循环结束地址处的INST4。可替代地,如果推测性地执行循环并且之后 在管线中确定不应执行该循环,则再次将执行程序转换至INST4。在另一实施例中,如果 R0中的原始值是〇 (即,其是空循环),则再次将执行程序转换成INST4。
[0390] 除MOV和BREQZ指令之外,编译器生成在每次执行循环体时使R0中的值以中间值 "1"递减的减法(SUB)指令subR0,R0,#1。而且,在INST3之后,编译器还生成分支指令 BR循环开始。BR循环开始将执行程序转换回至循环开始地址。在常规汇编语言代码的实 施例中,BREQZ指令、SUB指令、以及BR指令代表附加指令或者执行循环所需的"开销"。使 用这些开销指令保存执行循环的次数、循环开始的转换、以及何时退出循环。
[0391] BREQZ、SUB、以及BR指令是每次执行循环体时需要执行的开销指令。在常规处理 器中,这些开销指令在每次执行循环体时添加三个额外周期。对于短循环,诸如上述所示仅 具有三个指令INST1、INST2、以及INST3的一个指令,开销指令几乎使执行循环体所需 的周期数目加倍。因此,此处所示出的实施方式提供被称之为明显减少执行循环所需的开 销的"ZL00P"的零开销循环指令。根据本公开的实施方式,下面示出了程序员利用ZL00P 指令编写的示例性高级程序代码:
[0392] ZL00Pn,循环开始
[0393]INST1;
[0394]INST2;
[0395]INST3;
[0396] 循环结束INST 4;
[0397] ____
[0398]INSTN;
[0399] 根据本公开的实施方式,如下面汇编语言等同物所示,由程序员合成并且执行上 述高级程序代码:
[0400]MOVR0,n;
[0401]BREQZR0,循环结束:SUB循环计数,R0, #1
[0402] 循环开始INST1;
[0403]INST2;
[0404] 循环匹配INST 3:BRNEZ循环计数,循环开始:SUB循环计数,
[0405] 循环计数,#1 ;
[0406] 循环结束INST4;
[0407]INSTN;
[0408] 示例性合成代码中的":"指在同一周期中取出通过":"分离的指令。当与上述 常规汇编语言相比较时,循环开始地址之前的上述代码仅具有MOV和BREQZ指令的一次执 行开销。BREQZ指令检查循环是否为空,S卩,R0等于0,并且不应被执行。如下进一步所述, 上述指令中的"循环计数"指图17中存储循环计数值(如果是具有循环计数的中间值或者 解析值的循环指令)或者推测循环计数值(如果是未解析出循环计数)的循环计数寄存器 1700〇
[0409] 在示出性实施方式中,由编译器生成指示循环中的最后指令的"循环匹配"标签或 者循环匹配地址。循环匹配地址指循环体中的最后指令的地址,即,INST3。在管线的DE1 阶段,一旦检测表示循环体中的最后指令的循环匹配地址,与程序编译器相反的指令解码 器106则生成并且排队BRNEZ计数,分支预留队列112中的循环开始指令同时将INST3和 SUBR0,R0,#1排队在一个或者多个预留队列114A中。可替代地,INST3可以被排队在加 载/存储预留队列116中。因为通过与编译器或者程序员相反的指令解码器106生成分支 指令,所以此处该分支指令被称之为"合成"分支。因为同时将合成BRNEZ指令与INST3 以及SUB指令一起排队,所以不需要附加时钟周期排队生成的BRNEZ指令和SUB指令,从而 产生循环指令的零开销处理。在实施例中,循环体中的最后指令(即,上述实施例中的INST 3)不可以是另一分支指令。尽管在此处提供的实施例中,合成分支指令的生成发生在DEI 阶段,然而,应当认识到,合成分支指令的生成应发生在管线的其他阶段并且通过除指令解 码器之外的其他单元而生成。
[0410] 根据本公开的进一步实施方式,如果未解析出循环计数,则将继续取出并且推测 性地执行循环体,直至解析出循环计数。如果执行的循环体的次数(即,循环计数)小于取 出循环体的迭代次数,则撤消与连续取出的循环体迭代相关联的指令。撤消指令必须将其 驱逐出管线并且不使由其产生的任何结果处于处理器的架构状态。基本上,撤消指令指从 管线中移除该指令,如同从未取出或者执行过该执行。如果在指令中将循环计数编码成中 间值,则获知循环计数并且不需要解析出循环计数。在该实施例中,不存在连续取出的循环 体迭代。此处,包括中间循环计数值的循环指令被称之为"LOOP"指令。如果循环计数是带 符号的值(即,不是中间值),则该指令被称之为"ZL00P"指令。下面参考图17和图18中 的实施例提供用于实现此处所示出的实施方式的进一步细节。
[0411] 图17示出了用于实现根据本公开的实施方式的零开销循环的架构的一部分。图 17示出了指令取出单元1701、指令解码器106、SIN分配器107、程序计数寄存器1703、分支 预留队列112、以及分支单元118。指令取出单元1701耦接至指令解码器106、SIN分配器 107、程序计数寄存器1703、以及分支单元118。在实施例中,程序计数寄存器1703存储可 替代地被称之为"程序计数值"的"程序计数器"。在可替代的实施方式中,从除程序计数寄 存器1703之外的管线中的其他地方可接收程序计数值。分支单元118耦接至指令解码器 106〇
[0412] 指令取出单元1701包括指令高速缓存(Icache) 102、循环计数寄存器1700、循环 开始寄存器1702、以及循环匹配寄存器1704。循环计数寄存器1700存储循环计数值(如 果是具有循环计数的中间值或者解析值的循环指令)或者推测循环计数值(如果是未解析 处循环计数的情况)。当解析出循环计数时(例如,当在EX1阶段,在分支单元118中执行 分支时),则以循环计数取代推测循环计数值。循环开始寄存器1702存储循环开始地址并 且循环匹配寄存器1704存储循环匹配地址。
[0413] 现将结合图18描述图17。图18中的列是管线阶段。IC1是指令取出阶段。DE1 和DE2是解码阶段。RS1和RS2是预留队列阶段。EX1是执行阶段。应当认识到,可以存 在一个或者多个1(:、0£、1?、以及£乂阶段。图18中的行表示时钟周期。命名法乂 :¥表示管 线阶段:时钟周期。
[0414] 例如,在IC1:0中,由指令取出单元1701从Icache102取出ZL00P指令。在DE1:1 中,由指令解码器106接收ZL00P指令。一旦接收ZL00P指令,指令解码器106则将循环开 始地址存储在循环开始寄存器1702中、将循环匹配地址存储在循环匹配寄存器1704中、并 且将循环计数寄存器1700中的值设置为-1。计数当前是指示在未知实际循环计数时推测 性地执行循环体的负数。这是因为循环计数可被存储在寄存器R0中或者处理器的另一地 方并且尚不可用或者不可访问。直至在分支单元118中解析出循环,才可解析出循环计数。 在实施例中,指令解码器106利用图17中的Zl〇〇p_检测信号1706设置循环计数寄存器 1700、循环开始寄存器1702、以及循环匹配寄存器1704中的值。在DE1:1中,指令解码器 106还将SIN_发生_信号1712发送至SIN分配器107,以生成循环体中的ZL00P指令(或 者多个指令)的SIN编号。尽管循环计数具有推测性,然而,指令取出单元1701还判断指 示SIN分配器107的循环_计数_推测信号1714应在循环计数具有推测性时继续生成SIN 编号。
[0415] 在DE2:2中,因为通过指令取出单元1701推测性地取出ZL00P指令自身,所以将 SIN#0分配给ZL00P指令。通过SIN分配器107生成SIN#1,以分配给循环体中的指令(即, INST1、INST2、以及INST3),以用于循环体的第一次迭代。例如,当INST1达到DE2:3 时,将SIN#1分配给INST1,当INST2达到DE2:4时,将SIN#1分配给INST2,并且当INST 3达到DE2:4时,将SIN#1分配给INST3。
[0416] 当循环匹配标签和INST3达到DEI: 4时,指令取出单元1702通过将循环匹配标 签与存储在循环匹配寄存器1704中的值相比较而检测循环匹配标签并且将循环匹配信号 1701发送至指令解码器106,以生成合成的BRNEZ指令,如上所述,循环匹配标签指循环体 中的最后指令,即,INST3。响应接收循环匹配信号1710,指令解码器106生成用于在将 INST3排队到预留队列114A至114D中的一个中的相同周期内而排队到分支预留队列112 中的合成分支指令BRNEZ。可替代地,INST3可以被排队到加载/存储预留队列116中。 在实施例中,指令解码器106利用信号1720将合成分支指令排队到分支预留队列112中。 例如,如果INST3是算术指令,则将其排队到预留队列114A至114D中的一个中,并且如果 INST3是加载/存储指令,则将其排队到加载/存储预留队列116中的一个中,而同时将合 成的BRNEZ指令排队到分支预留队列112中。应当认识到,尽管在此处所示出的实施例中, 合成分支BRNEZ是不等于零的分支,然而,在其他实施例中,可代替生成等于零(BREQZ)分 支指令、分支小于零(BRLEZ)指令、或者大于零(BRGTZ)分支指令。
[0417] 在DE1:4中,一旦检测到指循环体中的最后指令的循环匹配标签(S卩,实施例中的 INST3),则指令解码器106再次设置Zloop检测信号1706,以设置循环计数寄存器1700中 的计数值为-2,从而指示将执行二次推测性地取出并且执行循环体。
[0418] 当带有循环匹配标签的INST3达到DE2:5时,指令解码器106响应循环匹配标签 再次将SIN_发生_信号1712发送至SIN分配器107,以生成分配给用于二次推测性地执行 循环体的指令的SIN#2。
[0419] 当ZL00P指令达到EX1:5时,由分支单元118执行ZL00P指令并且解析出循环。如 果循环为空,即,确定实际循环计数(如R0中的实际值所示)为0,则退出循环,并且由分 支单元118利用重定向信号1717将程序计数器重定向为由循环结束标签指示的指令,即, INST4,并且撤消从循环体推测性地取出的指令。如果循环不为空,S卩,R0大于0,则经由循 环_计数_实际信号1715将R0的值发送至指令取出单元1701,其中,将R0中的值添加到 存储在循环计数寄存器1700中的值,以确定循环计数。在该实施例中,R0是10, 8卩,10与-2 相加并且结果值为循环计数8。这表明已经执行循环两次并且仍需要执行循环体8次以上 迭代。
[0420] 一旦通过确定EX1:5中的R0的值解析出计数,则解除认定循环匹配_推测信号 1714。响应正被解除认定的循环匹配_推测信号1714,SIN分配器107停止分配进一步的 SIN编号。因此,在该实施例中,仅生成两个SIN编号。如果循环计数(由R0指示)为指示 空循环的〇,则撤消具有SIN编号#1和#2的所有指令以及具有SIN编号#0的推测性取出 的ZL00P指令。如果在另一实施例中,确定R0为1,则循环中的第一推测性迭代有效,并且 具有SIN#2的循环的第二迭代无效并且从管线中驱逐出去。
[0421] 在EX1:5中,在分支单元118中执行循环开始指令,S卩,具有BRNEZ循环计数的 INST3,以确定是否执行分支。例如,如果由R0指示的循环计数为0或者小于0或如果错 误地推测执行ZL00P自身,则分支单元118可发送重定向信号1717,以将程序计数器寄存器 1703重定向为由循环结束地址(即,INST4)指示的指令,并且撤消与SIN#1和#2相关联 的所有指令以及与SIN#0相关联的ZL00P指令。如果确定执行该分支并且由R0指示的循 环计数不是〇,则"释放"相应的SIN编号。此处所提及的释放SIN编号指将执行循环体中 具有释放SIN编号的指令并且将不从管线中驱逐出其值。在该实施例中,如果R0是2或者 大于2,则将释放SIN#1和SIN#2。如果R0是1,则将释放SIN#1并且SIN#2无效,从而驱逐 出与SIN#2相关联的指令。
[0422] 结论
[0423] 应当认识到,细节描述部分而非本公开的摘要旨在用于对权利要求进行说明。本 公开的摘要可设定一种或者多种、而非所有的示例性实施方式并且由此并不旨在以任一方 式限制增补的权利要求。
[0424] 相关领域技术人员应当认识到,在不背离本公开的实质和范围的情况下,可以从 形式和细节上做出各种改变。
【主权项】
1. 一种处理器,包括: 预留队列; 重命名器,所述重命名器耦接至所述预留队列并且被配置为产生世代号且将所述世代 号通信至所述预留队列; 寄存器,所述寄存器耦接至所述预留队列并且被配置为存储值; 执行管线,所述执行管线耦接至所述预留队列;以及 缓冲器,所述缓冲器耦接至所述执行管线并且被配置为接收所述执行管线的输出,并 且所述缓冲器进一步耦接至所述预留队列且被配置为将所述执行管线的所述输出通信至 所述预留队列。2. 根据权利要求1所述的处理器,进一步包括: 小型重置DHL Gshare分支预测单元。3. 根据权利要求1所述的处理器,进一步包括: 加载/存储单元,所述加载/存储单元被配置为针对多个排队等待的加载和存储指令 中的每个调度对内存的访问; 其中,所述加载/存储单元包括被配置为防止冲突的内存操作被同时调度的资源锁定 电路。4. 一种处理器,包括: 指令高速缓存; 指令解码器,所述指令解码器耦接至所述指令高速缓存; 预留队列,所述预留队列耦接至所述指令解码器; 寄存器,所述寄存器耦接至所述预留队列并且被配置为存储值; 小型重置DHL Gshare分支预测单元,所述小型重置DHL Gshare分支预测单元親接至 所述指令高速缓存并且被配置为生成地址且将所述地址通信至所述指令高速缓存; 执行管线,所述执行管线耦接至所述预留队列; 缓冲器,所述缓冲器耦接至所述执行管线并且被配置为接收所述执行管线的输出,并 且所述缓冲器进一步耦接至所述预留队列且被配置为将所述执行管线的所述输出通信至 所述预留队列。5. -种处理器,包括: 指令高速缓存; 指令解码器,所述指令解码器耦接至所述指令高速缓存; 分支预测单元,所述分支预测单元耦接至所述指令高速缓存并且被配置为生成指令地 址且将所述指令地址提供至所述指令高速缓存; 寄存器堆,所述寄存器堆被耦接为接收寄存器地址; 重命名器单元,所述重命名器单元耦接至所述指令高速缓存并且耦接至所述指令解码 器; 多个预留队列,所述多个预留队列中的每个预留队列均耦接至所述寄存器堆、所述指 令解码器、以及所述重命名器单元; 多个执行管线,所述多个执行管线中的每个执行管线均耦接至所述多个预留队列中的 相应一个,并且被配置为从所述多个预留队列中的所述相应一个接收指令和数据且执行所 述指令; 解读机构,所述解读机构耦接至所述多个执行管线中的每个执行管线并且被配置为接 收所述多个执行管线中的每个执行管线的输出; 其中,响应于所述指令解码器的输出,所述寄存器堆被配置为提供指令中指定为来源 的寄存器的内容;并且响应于所述指令解码器的所述输出,所述重命名器被配置为同时提 供世代号。6. 根据权利要求5所述的处理器,其中,所述解读机构的输出耦接至所述多个执行管 线中的每个执行管线的输入,并且进一步耦接至所述多个预留队列中的每个预留队列的输 入。7. 根据权利要求5所述的处理器,其中,所述多个预留队列中的每个预留队列均被配 置为存储指令操作码、目的地寄存器地址、以及目的地寄存器世代号。8. 根据权利要求5所述的处理器,进一步包括指令取出单元。9. 根据权利要求8所述的处理器,其中,所述指令取出单元包括: 循环计数寄存器,所述循环计数寄存器被配置为存储循环计数值或者存储推测性循环 计数值; 循环开始寄存器,所述循环开始寄存器被配置为存储循环开始地址;以及 循环匹配寄存器,所述循环匹配寄存器被配置为存储循环匹配地址。10. 根据权利要求8所述的处理器,其中,所述指令取出单元耦接至所述指令解码器和 SIN分配器,并且所述指令取出单元被配置为将指示表示推测性循环执行的循环计数值的 信号提供给所述SIN分配器。
【专利摘要】本公开涉及一种具有世代重命名的计算机处理器,该处理器包括寄存器堆,寄存器堆具有多个寄存器并且被配置用于乱序指令,该处理器进一步包括重命名器单元,重命名器单元产生与寄存器堆地址相关联的号,以提供从现有版本的寄存器临时偏移的重命名版本的寄存器,而非指定非程序员可见的物理寄存器作为重命名寄存器。该处理器包括耦接至指令高速缓存并且被配置为将推测性地址提供给指令高速缓存的小型重置DHL?Gshare分支预测单元。
【IPC分类】G06F9/30, G06F13/38
【公开号】CN105005463
【申请号】CN201510206131
【发明人】索菲·威尔逊, 约翰·雷德福, 杰弗里·巴雷特, 塔里克·库尔德
【申请人】美国博通公司
【公开日】2015年10月28日
【申请日】2015年4月27日
【公告号】EP2937776A2, EP2937776A3, US20150309797
当前第6页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1