用于使用预先通知技术改变程序的顺序流程的方法和设备.pdf

上传人:n****g 文档编号:4750204 上传时间:2018-11-05 格式:PDF 页数:29 大小:5.68MB
返回 下载 相关 举报
摘要
申请专利号:

CN201180028116.0

申请日:

2011.06.28

公开号:

CN102934075A

公开日:

2013.02.13

当前法律状态:

终止

有效性:

无权

法律详情:

未缴年费专利权终止IPC(主分类):G06F 9/32申请日:20110628授权公告日:20151202终止日期:20170628|||授权|||实质审查的生效IPC(主分类):G06F 9/32申请日:20110628|||公开

IPC分类号:

G06F9/32; G06F9/30; G06F9/38

主分类号:

G06F9/32

申请人:

高通股份有限公司

发明人:

詹姆斯·诺里斯·迪芬德尔费尔; 迈克尔·威廉·莫罗

地址:

美国加利福尼亚州

优先权:

2010.06.28 US 12/824,599

专利代理机构:

北京律盟知识产权代理有限责任公司 11287

代理人:

宋献涛

PDF下载: PDF下载
内容摘要

一种处理器实施用于提供间接分支地址的预先通知的设备和方法。自动地识别由指令产生的目标地址。在推测性执行利用最当前目标地址的间接分支指令之前基于所述最当前目标地址来准备下一程序地址。所述设备合适地采用寄存器,其用于保持由程序指定为间接分支指令的最当前间接地址的指令存储器地址。所述设备还采用下一程序地址选择器,其从所述寄存器选择所述最当前间接地址作为所述下一程序地址以用于在推测性执行所述间接分支指令时使用。

权利要求书

权利要求书一种用于改变程序的顺序流程的方法,其包括:
从由第一指令识别的寄存器检索程序指定的目标地址,其中所述寄存器是在指令集架构中界定;以及
在遇到第二指令之后将推测性执行流程改变到所述程序指定的目标地址,其中所述第二指令经动态地确定为间接分支指令。
根据权利要求1所述的方法,其中所述间接分支指令是在所述第一指令之后的下一遇到的间接分支指令。
根据权利要求1所述的方法,其中所述间接分支指令是指定匹配由所述第一指令识别的所述寄存器的目标寄存器的下一遇到的间接分支指令。
根据权利要求1所述的方法,其进一步包括:
将所述第一指令插入代码序列中处于所述间接分支之前至少N个程序指令,其中所述N个程序指令对应于接收所述间接分支的管线级与辨识由所述第一指令识别的所述寄存器的管线级之间的管线级的数目。
根据权利要求4所述的方法,其中接收所述间接分支的所述管线级是获取级,且辨识由所述第一指令识别的所述寄存器的所述管线级是执行级。
根据权利要求1所述的方法,其进一步包括:
在遇到对应多个间接分支指令之前接收多个预先通知(ADVN)指令,其中所述第一指令是(ADVN)指令;以及
以先入先出堆栈跟踪所述多个(ADVN)指令与所述遇到的对应多个间接分支指令之间的对应关系。
根据权利要求1所述的方法,其进一步包括:
确定存储在分支目标地址寄存器中的值是有效指令地址;以及
在对所述间接分支进行解码后即刻从所述分支目标地址寄存器选择所述值以用于识别待获取的下一指令地址。
根据权利要求1所述的方法,其进一步包括:
执行所述间接分支以确定分支目标地址;
将所述确定的分支目标地址与所述程序指定的目标地址进行比较;以及
当所述确定的分支目标地址与所述程序指定的目标地址不相同时清空处理器管线。
根据权利要求1所述的方法,其进一步包括:
在遇到所述第一指令之后超驰分支预测电路。
根据权利要求1所述的方法,其进一步包括:
将所述指令处理为具有分支历史预测电路的处理器管线中的无操作,所述分支历史预测电路具有用以跟踪在代码区段的执行期间遇到的分支的硬件资源;以及
针对超过所述分支历史预测电路可用的所述硬件资源的代码区段启用所述指令。
一种用于提供间接分支地址的预先通知的方法,其包括:
分析指令序列以识别由所述指令序列的目标地址改变指令产生的最当前目标地址;以及
在推测性执行利用所述最当前目标地址的间接分支指令之前基于所述最当前目标地址来准备下一程序地址。
根据权利要求11所述的方法,其进一步包括:
在第一次通过代码区段时自动识别所述间接分支指令的目标地址寄存器,其中所述识别的目标地址寄存器用以自动识别由所述指令产生的所述最当前目标地址。
根据权利要求11所述的方法,其中当对所述间接分支指令进行解码时准备所述下一程序地址。
根据权利要求11所述的方法,其进一步包括:
将所述指令序列中的所述目标地址改变指令移动到所述指令序列中在间接分支指令之前至少N个程序指令的位置,其中N对应于接收所述间接分支的管线级与辨识由所述目标地址改变指令识别的所述寄存器的管线级之间的管线级的数目。
根据权利要求14所述的方法,其中接收所述间接分支的所述管线级是获取级,且辨识由所述目标地址改变指令识别的所述寄存器的所述管线级是执行级。
根据权利要求11所述的方法,其进一步包括:
在第一表中在由所述间接分支指令指定的目标地址寄存器条目处加载产生所述最当前目标地址的所述指令的指令地址。
根据权利要求16所述的方法,其进一步包括:
在所述指令地址处检查有效位的关联性存储器中是否有经断言的有效位;以及
响应于经断言的有效位而用从执行由所述第一表识别的所述指令得到的值来加载分支目标地址寄存器。
根据权利要求17所述的方法,其进一步包括:
使用存储在所述分支目标地址寄存器中的所述值提供所述分支目标地址。
一种用于提供间接分支目标地址的预先通知的设备,其包括:
寄存器,其用于保持由程序指定为间接分支指令的预先通知(ADVN)间接地址的指令存储器地址;以及
下一程序地址选择器电路,其监视以所述寄存器为目标的指令,且基于所述监视的指令而从所述寄存器将在遇到所述间接分支指令之前的最当前目标地址选择为所述(ADVN)间接地址,以用于在推测性执行所述间接分支指令时用作下一程序地址。
根据权利要求19所述的设备,其进一步包括:
解码器,其用以对程序指令进行解码以识别待存储在所述寄存器中的分支目标地址。
根据权利要求19所述的设备,其进一步包括:
处理器管线,其在接收所述间接分支指令的级与辨识所述最当前目标地址的级之间具有N个级,其中所述下一程序地址选择器电路选择在所述间接分支之前至少所述N个级的所述ADVN间接地址。
根据权利要求21所述的设备,其中接收所述间接分支指令的所述管线级是获取级,且辨识所述最当前目标地址的所述管线级是执行级。
根据权利要求19所述的设备,其中所述ADVN间接地址是基于跟踪表,所述跟踪表存储所述程序的在当前执行循环之前的影响所述间接分支指令的所述分支目标地址的指令的执行状态。

说明书

说明书用于使用预先通知技术改变程序的顺序流程的方法和设备
技术领域
本发明大体上涉及用于在处理器管线中处理指令的技术,且更具体来说涉及用于产生间接分支指令的目标地址的早期指示的技术。
背景技术
许多便携式产品,例如手机、膝上型计算机、个人数据助理(PDA)或类似物,需要使用执行支持通信和多媒体应用的程序的处理器。用于这些产品的处理系统包含处理器、指令源、输入操作数源以及用于存储执行结果的存储空间。举例来说,指令和输入操作数可存储在由通用寄存器和多级高速缓冲存储器组成的阶层式存储器配置中,其包含例如指令高速缓冲存储器、数据高速缓冲存储器和系统存储器。
为了在程序的执行中提供高性能,处理器通常在管线中执行指令。处理器还可使用推测性执行来获取和执行在预测分支目标地址处开始的指令。如果分支被误预测,那么必须从管线清空推测性执行的指令,并且在正确的路径地址处重新开始管线。在许多处理器指令集中,经常有分支到从寄存器的内容导出的程序目的地地址的指令。此指令通常称为间接分支指令。由于间接分支对寄存器的内容的依赖性,通常难以预测分支目标地址,因为在每次执行间接分支指令时寄存器可能具有不同的值。由于校正误预测的间接分支通常需要对间接分支指令的反向跟踪以便在正确的分支路径上获取和执行指令,因此处理器的性能可能降低。而且,误预测指示处理器不正确地推测性获取和开始在错误分支路径上的指令处理,从而造成用于处理并不使用的指令以及用于从管线中清空所述指令的功率增加。
发明内容
在本发明的若干方面中,本发明认识到有利的是使在执行指令时可能发生的误预测的数目最少以在处理器系统中改善性能且减少功率要求。为此,本发明的实施例适用于一种用于改变程序的顺序流程的方法。所述方法从由第一指令识别的寄存器检索程序指定的目标地址,其中所述寄存器是在指令集架构中界定。在遇到第二指令之后将推测性执行流程改变到所述程序指定的目标地址,其中所述第二指令经动态地确定为间接分支指令。
本发明的另一实施例针对一种用于提供间接分支地址的预先通知的方法。分析指令序列以识别由所述指令序列的目标地址改变指令产生的最当前目标地址。在推测性执行利用所述最当前目标地址的间接分支指令之前基于所述最当前目标地址来准备下一程序地址。
本发明的另一方面针对一种用于提供间接分支目标地址的预先通知的设备。所述设备采用寄存器,其用于保持由程序指定为间接分支指令的预先通知(ADVN)间接地址的指令存储器地址。所述设备还采用下一程序地址选择器电路,其监视以所述寄存器为目标的指令,且基于所述监视的指令而从所述寄存器将在遇到所述间接分支指令之前的最当前目标地址选择为所述ADVN间接地址,以用于在推测性执行所述间接分支指令时用作下一程序地址。
从以下具体实施方式和附图将明了本发明的更完整理解以及本发明的另外特征和优点。
附图说明
图1是其中可有利地采用本发明的实施例的示范性无线通信系统的框图;
图2是根据本发明的支持间接分支指令的分支目标地址的处理器复合体的功能框图;
图3A是根据本发明的32位预先通知(ADVN)指令的一般格式,其指定具有间接分支目标地址值的寄存器;
图3B是根据本发明的16位ADVN指令的一般格式,其指定具有间接分支目标地址值的寄存器;
图4A是根据本发明的用于使用先前间接分支执行的历史的间接分支预测的方法的代码实例;
图4B是根据本发明的用于间接分支预先通知的方法的代码实例,所述方法使用图3A的ADVN指令以用于提供间接分支目标地址的预先通知;
图5说明根据本发明的示范性第一间接分支目标地址(BTA)预先通知电路;
图6是根据本发明的使用自动间接目标推断方法来提供间接分支目标地址的预先通知的方法的代码实例;
图7是根据本发明的第一间接分支预先通知(ADVN)过程,其合适地用于间接分支指令的分支目标地址;
图8A说明示范性目标跟踪表(TTT);
图8B是根据本发明的第二间接分支预先通知(ADVN)过程,其合适地用于提供间接分支指令的分支目标地址的预先通知;
图9A说明根据本发明的示范性第二间接分支目标地址(BTA)预先通知(ADVN)电路;
图9B说明根据本发明的示范性第三间接分支目标地址(BTA)预先通知(ADVN)电路;以及
图10A和10B是根据本发明的使用软件代码仿形方法来确定间接分支目标地址的预先通知的方法的代码实例。
具体实施方式
现在将参考附图更完整地描述本发明,其中展示本发明的若干实施例。然而,本发明可以各种形式体现,且不应解释为限于本文陈述的实施例。事实上,提供这些实施例以使得本发明将为详尽且完整的,且将本发明的范围完整地传达给所属领域的技术人员。
根据本发明教示的用于被操作或用于实行操作的计算机程序代码或“程序代码”可初始以高级编程语言来编写,例如C、C++、Smalltalk、TSQL、Perl或各种其它编程语言。通过将高级程序代码转换为原生汇编程序来将以这些语言中的一者编写的程序编译为目标处理器架构。用于目标处理器架构的程序也可以原生汇编语言直接编写。原生汇编程序使用机器级二进制指令的指令助记表示。如本文使用的程序代码或计算机可读媒体称为机器语言代码,例如格式可被处理器理解的目标代码。
图1说明其中可有利地采用本发明的实施例的示范性无线通信系统100。出于说明的目的,图1展示三个远程单元120、130和150以及两个基站140。将认识到,常见的无线通信系统可具有多得多的远程单元和基站。分别包含由组件125A、125C、125B和125D表示的硬件组件、软件组件或两者的远程单元120、130、150和基站140已经调适以体现如下文进一步论述的本发明。图1展示从基站140到远程单元120、130和150的前向链路信号180以及从远程单元120、130和150到基站140的反向链路信号190。
在图1中,将远程单元120展示为移动电话,将远程单元130展示为便携式计算机,且将远程单元150展示为无线本地回路系统中的固定位置远程单元。举例来说,远程单元可替代地为手机、寻呼机、对讲机、手持式个人通信系统(PCS)单元、例如个人数据助理等便携式数据单元,或例如仪表读取装备等固定位置数据单元。尽管图1说明根据本发明的教示的远程单元,但本发明不限于这些示范性所说明单元。本发明的实施例可合适地用于具有间接分支指令的任何处理器系统中。
图2是根据本发明的处理器复合体200的功能框图,其支持准备间接分支指令的分支目标地址的预先通知。处理器复合体200包含处理器管线202、通用寄存器堆(GPRF)204、控制电路206、L1指令高速缓冲存储器208、L1数据高速缓冲存储器210以及存储器阶层212。控制电路206包含程序计数器(PC)215和分支目标地址寄存器(BTAR)219,其如下文更详细描述般相互作用以用于控制包含指令获取级214的处理器管线202的目的。为了论述的清楚而未展示外围装置(其可连接到处理器复合体)。处理器复合体200可合适地用于图1的硬件组件125A到125D中以用于执行存储在L1指令高速缓冲存储器208中的程序代码,利用存储在L1数据高速缓冲存储器210中且与存储器阶层212相关联的数据。处理器管线202可在通用处理器、数字信号处理器(DSP)、专用处理器(ASP)或类似物中操作。处理器复合体200的各种组件可使用专用集成电路(ASIC)技术、现场可编程门阵列(FPGA)技术或其它可编程逻辑、离散门或晶体管逻辑或适合于既定应用的任何其它可用技术来实施。
处理器管线202包含六个主要级:指令获取级214、解码与预先通知(ADVN)级216、分派级218、读取寄存器级220、执行级222以及回写级224。虽然展示单个处理器管线202,但本发明的具有间接分支目标地址预先通知的指令处理适用于超标量设计和实施并行管线的其它架构。举例来说,为高时钟速率设计的超标量处理器可具有两个或两个以上并行管线且每一管线可将指令获取级214、具有ADVN逻辑电路217的解码与ADVN级216、分派级218、读取寄存器级220、执行级222以及回写级224划分为两个或两个以上管线式级,从而增加总体处理器管线深度以便支持高时钟速率。
以处理器管线202的第一级开始,与程序计数器(PC)215相关联的指令获取级214从L1指令高速缓冲存储器208获取指令以供稍后的级处理。如果指令获取在L1指令高速缓冲存储器208中未命中,意味着待获取的指令不在L1指令高速缓冲存储器208中,那么从存储器阶层212获取所述指令,存储器阶层212可包含多级高速缓冲存储器,例如第2级(L2)高速缓冲存储器,以及主存储器。指令可从其它源加载到存储器阶层212,例如引导只读存储器(ROM)、硬驱动器、光盘,或从例如因特网等外部接口加载到存储器阶层212。随后在具有ADVN逻辑电路217的解码与ADVN级216中解码所获取的指令,从而提供如下文更详细描述的用于间接分支目标地址值的预先通知的额外能力。与ADVN逻辑电路217相关联的是分支目标地址寄存器(BTAR)219,其可如图2所示位于控制电路206中,但不限于这种放置。举例来说,BTAR 219可合适地位于解码与ADVN级216内。
分派级218取得一个或一个以上经解码指令且将其分派到例如在超标量或多线程处理器中利用的一个或一个以上指令管线。读取寄存器级220从GPRF 204获取数据操作数或从转发网络226接收数据操作数。转发网络226在GPRF 204周围提供快速路径以在每当结果操作数从执行级可用时供应所述结果操作数。即使具有转发网络,来自深执行管线的结果操作数也可能花费三个或三个以上执行循环。在这些循环期间,读取寄存器级220中的需要来自执行管线的结果操作数数据的指令必须等待直到结果操作数可用为止。执行级222执行所分派的指令,且回写级224将结果写入到GPRF 204且也可在结果将用于随后指令中的情况下通过转发网络226将结果发送回到读取寄存器级220。由于结果可能在回写级224中是以与编程次序相比不同的次序接收的,因此在将结果写入到GPRF 204时回写级224使用处理器工具来保留编程次序。下文关于详细代码实例来提供用于提供间接分支指令的目标地址的预先通知的处理器管线202的更详细描述。
处理器复合体200可经配置以在存储在计算机可读存储媒体上的程序的控制下执行指令。举例来说,计算机可读存储媒体可直接在本地与处理器复合体200相关联,例如可从L1指令高速缓冲存储器208(用于对从L1数据高速缓冲存储器210获得的数据进行操作)和存储器阶层212可用,或者通过例如输入/输出接口(未图示)而关联。处理器复合体200还在程序的执行中从L1数据高速缓冲存储器210和存储器阶层212存取数据。计算机可读存储媒体可包含随机存取存储器(RAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(SDRAM)、快闪存储器、只读存储器(ROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、压缩光盘(CD)、数字视频光盘(DVD)、其它类型的可装卸式盘或任何其它合适的存储媒体。
图3A是根据本发明的32位ADVN指令300的一般格式,其将由编程人员或软件工具识别的寄存器指定为保持间接分支目标地址值。ADVN指令300在指定所识别寄存器的传入的间接分支指令之前向处理器复合体200通知存储在所识别寄存器中的实际分支目标地址。通过如下文更详细描述提供预先通知,可改善处理器性能。ADVN指令300经说明为具有条件代码字段304,其由若干指令集架构(ISA)利用以基于指定的一或多个旗标而指定指令将无条件地还是有条件地执行。操作码305将指令识别为具有至少一个分支目标地址寄存器字段Rm 307的分支ADVN指令。指令特定字段306允许操作码扩展和其它指令特定的编码。在具有含根据指令中的指定条件代码字段有条件地执行的指令的此ISA的处理器中,影响分支目标地址寄存器的最后指令的条件字段Rm将通常用作ADVN指令的条件字段,但不限于此指定。
本发明的教示适用于多种指令格式和架构规范。举例来说,图3B是根据本发明的16位ADVN指令350的一般格式,其指定具有间接分支目标地址值的寄存器。16位ADVN指令350类似于32位ADVN指令300,具有操作码355、分支目标地址寄存器字段Rm 357以及指令特定位356。还注意到,可利用其它位格式和指令宽度来编码ADVN指令。
间接分支型指令的一般形式可在处理器管线202中有利地使用和执行,例如依寄存器分支Rx(BX)、相加PC、移动Rx PC和类似物。为了描述本发明,在如下文进一步描述的代码序列实例中使用间接分支指令的BX Rx形式。
应注意,其它形式的分支指令通常在ISA中提供,例如具有指令指定的分支目标地址(BTA)的分支指令、具有经计算为指令指定的偏移地址与基地址寄存器的和的BTA的分支指令和类似指令。为了支持这些分支指令,处理器管线202可利用分支历史预测技术,其基于跟踪例如先前分支指令执行的条件执行状态且存储此执行状态以用于预测这些指令的未来执行。处理器管线202可支持此分支历史预测技术且另外支持使用ADVN指令来提供间接分支目标地址的预先通知。举例来说,处理器管线202可使用分支历史预测技术直到遇到ADVN指令为止,所述ADVN指令随后使用如本文描述的ADVN工具来超驰分支目标历史预测技术。
在本发明的其它实施例中,处理器管线202还可经设置以监视使用ADVN指令的准确性,且当ADVN识别的目标地址不正确一次或一次以上时对于后续遇到同一间接分支忽略ADVN指令。还应注意,对于支持具有ADVN指令的ISA的处理器的特定实施方案,处理器可将遇到的ADVN指令处理为无操作(NOP)指令或将检测到的ADVN指令标记为未定义。此外,ADVN指令可在具有动态分支历史预测电路的处理器管线中被处理为NOP,所述动态分支历史预测电路具有足够的硬件资源来跟踪在代码区段的执行期间遇到的分支且如下文描述针对超过所述动态分支历史预测电路可用的硬件资源的代码区段启用ADVN指令。而且,在动态分支历史预测电路具有用于预测间接分支目标地址的不良结果的情况下,ADVN指令可结合动态分支历史预测电路来使用以用于提供间接分支目标地址的预先通知。举例来说,从动态分支历史预测电路产生的经预测分支目标地址可由通过使用ADVN指令提供的目标地址超驰。另外,呈现有利的自动间接目标推断方法以用于提供如下文描述的间接分支目标地址的预先通知。
图4A是根据本发明的用于间接分支预测的方法的代码实例400,所述方法在未遇到ADVN指令的情况下使用一般历史方法来预测间接分支执行。代码实例400的执行是参考处理器复合体200来描述。为了此实例的目的,指令A到D401到404可为循序算术指令集,其基于指令A到D401到404的分析并不影响GPRF 204中的寄存器R0。寄存器R0由加载R0指令405用用于间接分支指令BX R0 406的目标地址加载。为了此实例的目的,指令401到406中的每一者经指定为无条件地执行。还假定,加载R0指令405在L1指令高速缓冲存储器208中可用,使得当指令A401在执行级222中完成执行时,已在获取级214中获取加载R0指令405。随后获取间接分支BX R0指令406,同时在解码与ADVN级216中解码加载R0指令405。在下一管线级中,准备加载R0指令405以经分派用于执行,且解码BX R0指令406。而且,在解码与ADVN级216中,基于先前间接分支执行的历史而做出BX R0指令406是被取得还是未被取得的预测,且还预测间接分支的目标地址。对于此实例,BX R0指令406经指定为被无条件地“取得”且ADVN逻辑电路217仅需要将间接分支目标地址预测为地址X。基于此预测,引导处理器管线202开始推测性获取从地址X开始的指令,地址X在给定“取得”状态时通常是从当前指令寻址的重定向。处理器管线202还清空管线中在间接分支BX R0指令406之后的任何指令,如果这些指令不与在地址X处开始的指令相关联。处理器管线202继续获取指令直到在执行级中可确定经预测地址X是否经正确预测为止。
在处理指令的同时,可能遇到暂停情形,例如关于加载R0指令405的执行可能发生的暂停情形。加载R0指令405的执行可在L1数据高速缓冲存储器中存在命中的情况下无延迟地返回来自L1数据高速缓冲存储器210的值。然而,加载R0指令405的执行在L1数据高速缓冲存储器210中存在未命中的情况下可能花费大量周期。加载指令可使用来自GPRF 204的寄存器来供应基地址,且随后在执行级222中将中间值加到基地址以产生有效地址。所述有效地址经由数据路径232发送到L1数据高速缓冲存储器210。在L1数据高速缓冲存储器210中的未命中的情况下,必须从可包含例如L2高速缓冲存储器和主存储器的存储器阶层212获取数据。此外,数据可能在L2高速缓冲存储器中未命中,从而导致从主存储器获取数据。举例来说,L1数据高速缓冲存储器210中的未命中、存储器阶层212中的L2高速缓冲存储器中的未命中以及对主存储器的存取可能需要数百个CPU周期来获取数据。在L1数据高速缓冲存储器未命中之后获取数据所花费的周期期间,BX R0指令406在处理器管线202中暂停直到运行中操作数可用为止。所述暂停可视为在读取寄存器级220中或执行级222的开始处发生。
应注意,在具有多个指令管线的处理器中,加载R0指令405的暂停可能并不暂停在任何其它管线中发生的推测性操作。由于L1 D高速缓冲存储器210中的未命中所造成的暂停的长度,可能推测性获取大量指令,这在存在间接分支目标地址的不正确预测的情况下可能显著影响性能和功率使用。可通过使用作为图2的控制电路206的部分的保持电路来在处理器管线中产生暂停。所述保持电路产生保持信号,其可例如用以选通管线级寄存器以暂停管线中的指令。对于图2的处理器管线202,可例如在读取寄存器级中在并非所有输入都可用的情况下激活保持信号,使得管线保持等待完成指令执行所必要的输入的到达。当所有必要的操作数变为可用时释放所述保持信号。
在未命中的解析后,将加载数据经由路径240发送到作为回写级224的部分的回写操作。随后将操作数写入到GPRF 204且也可发送到上文描述的转发网络226。现在可将R0的值与经预测地址X进行比较以确定是否需要清空推测性获取的指令。由于用以存储分支目标地址的寄存器在每次执行间接分支指令时可能具有不同的值,因此存在将使用当前预测方法清空推测性获取的指令的高概率。
图4B是根据本发明的用于间接分支预先通知的方法的代码实例420,所述方法使用图3A的ADVN指令以用于提供间接分支目标地址的预先通知。基于图4A的指令A到D401到404不影响分支目标地址寄存器R0的先前提到的分析,加载R0指令405可在指令序列中向上移动以例如在图4B的代码实例中放置于指令A421之后。另外,ADVN R0指令423,例如图3A的ADVN指令300,直接放置于加载R0指令422之后作为用于间接BX R0指令427的分支目标地址的预先通知的先行辅助。
在图4B的新指令序列421到427流过处理器管线202时,当加载R0指令422在执行级中时ADVN R0指令423将在读取级220中,且指令D426将在获取级214中。对于加载R0指令422在L1数据高速缓冲存储器210中命中的情形,R0的值在加载R0执行结束之前是已知的且与R0值一起经由转发网络226快速转发到读取级,R0值在读取级220的末尾或在用于ADVN R0指令的执行级的开始之前也是已知的。在间接分支指令进入解码与ADVN级216之前确定R0值允许ADVN逻辑电路217将确定的R0值选择为BX R0指令427的分支目标地址而不会有任何额外的周期延迟。应注意,BX R0指令427在管线中是动态识别的。虽然通常ADVN指定的寄存器(例如此代码实例中的R0)将保持与间接分支指定的目标地址寄存器相同的地址,但可能遇到异常。在针对此地址异常的一种方法中,不将ADVN指定的寄存器值与下一遇到的间接分支指令指定的寄存器值进行比较,且如果选择了不正确的目标地址,那么在管线中稍后会检测到错误且采取适当动作,例如清空管线。在一不同方法中,将ADVN指定的寄存器值与下一遇到的间接分支指令指定的寄存器值进行比较,且在找到匹配之前将不针对推测性执行做出改变,通常情况将是这样。如果未找到匹配,那么管线将如同未遇到ADVN指令那样操作。
应注意,对于处理器管线202,对于在L1数据高速缓冲存储器210中存在命中的情况,加载R0指令和ADVN R0指令可能已放置在指令B之后而不会引起任何进一步延迟。然而,如果在L1数据高速缓冲存储器中存在未命中,那么将起始暂停情形。对于L1数据高速缓冲存储器210中的未命中的此情况,加载R0和ADVN R0指令将需要基于管线深度而放置在BX R0指令之前适当数目个未命中延迟周期(如果可能的话)以避免引起任何进一步延迟。
大体上,ADVN指令在代码序列中的放置优选为在BX指令之前N个指令。在处理器管线的上下文中,N表示接收间接分支指令的级与辨识ADVN指定的分支目标地址的级(例指令获取级214和执行级222)之间的级的数目。在与转发网络226一起使用的示范性处理器管线202中,N为二,且在不使用转发网络226的情况下,N为三。对于例如使用转发网络的处理器管线,如果BX指令在ADVN指令之前N等于二个指令,那么ADVN目标地址寄存器Rm值是由于转发网络226而在读取寄存器级220的末尾处确定。在例如针对ADVN指令使用并不使用转发网络226的处理器管线的替代实施例中,如果BX指令在ADVN指令之前N等于三个指令,那么ADVN目标地址寄存器Rm值是在BX指令进入解码与ADVN级216时在执行级222的末尾处确定。指令的数目N也可取决于额外的因素,包含上部管线中的暂停(例如归因于指令获取级214中的延迟)、可能改变高达超标量处理器中发布的K个指令的指令发布宽度,以及例如在ADVN与BX指令之间出现的中断。大体上,ISA可推荐尽可能早地调度ADVN指令,以最小化这些因素的影响。
虽然图4B是以单个ADVN R0指令来说明,但在遇到任何间接分支之前可例示多个ADVN指令。所述多个ADVN指令以FIFO方式应用于接下来遇到的间接分支,例如可通过使用堆栈设备而获得。应注意,下一遇到的间接分支指令在编程次序上大体上与下一间接分支指令相同。可在确定使用多个ADVN指令是否适当之前评估可能对此一般规则引起异常的代码。
图5说明根据本发明的示范性第一间接分支目标地址(BTA)预先通知电路500。第一间接BTA预先通知电路500包含ADVN执行电路504、分支目标地址寄存器(BTAR)电路508、BX解码电路512、选择电路516,以及用于响应于影响PC地址产生的输入的下一程序计数器(PC)电路520。在ADVN执行电路504中执行ADVN Rx指令之后,将Rx的值加载到BTAR电路508中。当在BX解码电路512中解码BX指令时且如果BTAR如选择电路516所选择是有效的,那么将BTAR电路508中的BTA值由下一PC电路520用作下一获取地址。也可在BTAR有效处于作用中时使用BTAR有效指示来停止获取,从而节省原本将与获取错误地址处的指令相关联的功率。
图6是根据本发明的使用自动间接目标推断方法来提供间接分支目标地址的预先通知的方法的代码实例600。在代码序列601到607中,指令A601、B603、C604和D606与先前描述的相同,且因此不影响分支目标地址寄存器。两个指令:加载R0指令602和相加R0、R7、R8指令605影响此实例的分支目标寄存器R0。间接分支指令BX R0 607与图4A和4B的先前实例中使用的相同。在代码实例600中,即使加载R0指令602和相加R0、R7、R8指令605影响BTA寄存器R0,相加R0、R7、R8指令605也是影响BTA寄存器R0的内容的最后指令。
通过跟踪代码序列600的执行模式,自动间接目标推断方法电路可以合理的准确性提供预先通知:在BX R0指令607进入解码与ADVN级216时R0的最新值是否应用作ADVN BTA。在一个实施例中,写入到R0的最后的值将在BX R0指令进入解码与ADVN级216时用作BX R0指令的值。此实施例是基于如下评估:对于与此BX R0指令相关联的代码序列,写入到R0的最后的值可被估计为正确值历时较高百分比的时间。
图7是根据本发明的第一间接分支预先通知(ADVN)过程700,其合适地用以提供间接分支指令的分支目标地址的预先通知。第一间接分支ADVN过程700利用最后写入器表,其可通过寄存器堆编号来寻址或标引,使得与具有32个条目R0到R31的寄存器堆相关联的最后写入器表将可通过索引值0到31来寻址。类似地,如果寄存器堆具有较少条目,例如14个条目R0到R13,那么最后写入器表将可通过索引值0到13来寻址。最后写入器表中的条目中的每一者存储一指令地址。第一间接分支ADVN过程700还利用分支目标地址寄存器更新器关联性存储器(BTARU),其具有通过指令地址来存取的若干条目且每条目含有一有效位。在进入第一间接分支ADVN过程700之前,初始化最后写入器表以使指令地址无效,例如为零,其中通常将不会发现间接分支ADVN代码序列的指令地址且BTARU条目被初始化为无效状态。
第一间接分支ADVN过程700以经获取指令流702开始。在决策框704处,做出是否接收到对可能是间接分支指令的目标寄存器的任一寄存器Rm进行写入的指令的确定。举例来说,在具有14条目寄存器堆(具有寄存器R0到R13)的处理器中,将跟踪对寄存器R0到R13中的任一者进行写入的指令,作为间接分支指令的可能目标寄存器。对于监视具有间接分支指令的代码区段的多次通过的技术,可通过在第一次通过时识别间接分支指令来确定特定Rm。举例来说,在遇到指定相同Rm的间接分支之前接收具有一个以上Rm改变指令的代码序列。以多次通过过程700来处理此代码序列。在过程700的第一次通过中,在遇到间接分支指令之前,将最后的Rm改变指令的地址存储在最后写入器表中的经标引Rm地址处,从而覆写先前Rm改变指令的地址。在遇到间接分支指令之前在第一次通过时不更新BTAR,因为在第一次通过中并不知道何时已接收到最后的Rm改变指令。遇到的间接分支指令断言一有效位以指示改变了经指定Rm的最后指令是将用于存储在经指定Rm中的目标地址的预先通知的有效指令。在第二次通过过程700中,最后Rm改变指令将引起更新BTAR,且当遇到(例如在解码级中识别出)间接分支指令时,BTAR可用于分支目标地址的预先通知。
返回到框704,如果所接收的指令不影响Rm,那么第一间接分支ADVN过程700前进到决策框706。在决策框706处,做出所接收的指令是否为间接分支指令(例如BXRm指令)的确定。如果所接收的指令不是间接分支指令,那么第一间接分支ADVN过程700前进到决策框704以评估下一接收的指令。
返回到决策框704,如果所接收的指令不影响Rm,那么第一间接分支ADVN过程700在第一次通过框708、710和712中前进到框708。在框708处,在最后写入器表的Rm地址处加载影响Rm的指令的地址。在框710处,检查BTARU是否有在所述指令地址处的有效位。在决策框712处,做出在BTARU中的指令地址条目处是否发现经断言有效位的确定。如果未发现经断言有效位,例如在第一次通过过程框708、710和712中可能发生,那么第一间接分支ADVN过程返回到决策框704以评估下一接收的指令。
返回到决策框706,如果接收到间接分支指令(例如BX Rm指令),那么第一间接分支ADVN过程700前进到框714。在框714处,检查最后写入器表是否有在地址Rm处的有效指令地址。在决策框716处,做出在Rm地址处是否发现有效指令地址的确定。如果未发现有效指令地址,那么第一间接分支ADVN过程700前进到框718。在框718处,将在指令地址处的BTARU位条目设定为无效,且第一间接分支ADVN过程700返回到决策框704以评估下一接收的指令。
返回到决策框716,如果发现有效指令地址,那么第一间接分支ADVN过程700前进到框720。如果存在待决的更新,那么第一间接分支ADVN过程700可暂停直到待决的更新被解析为止。在框720处,将指令地址处的BTARU位条目设定为有效,且第一间接分支ADVN过程700前进到决策框722。在决策框722处,做出分支目标地址寄存器(BTAR)是否具有有效地址的确定。如果BTAR具有有效地址,那么第一间接分支ADVN过程700前进到框724。在框724处,使用存储的BTAR值提供间接分支指令Rm的预先通知,且第一间接分支ADVN过程700返回到决策框704以评估下一接收的指令。返回到决策框722,如果BTAR经确定为不具有有效地址,那么第一间接分支ADVN过程700返回到决策框704以评估下一接收的指令。
返回到决策框704,如果所接收的指令确实影响间接分支指令的Rm,例如在第二次通过第一间接分支ADVN过程700中可能发生,那么第一间接分支ADVN过程700在第二次通过框708、710和712中前进到框708。在框708处,在最后写入器表的Rm地址处加载影响Rm的指令的地址。在框710处,检查BTARU是否有在所述指令地址处的有效位。在决策框712处,做出在BTARU中的指令地址条目处是否发现经断言有效位的确定。如果发现经断言有效位,例如在第二次通过过程框708、710和712中可能发生,那么第一间接分支ADVN过程700前进到框726。在框726处,用存储在Rm中的执行指令的BTAR更新器结果来更新分支目标地址寄存器(BTAR),例如图2的BTAR 219。第一间接分支ADVN过程700随后返回到决策框704以评估下一接收的指令。
在图8A和8B中说明的另一自动间接分支目标地址过程确定在间接分支指令进入解码级时存储在程序寄存器中的最新值是否应用作分支目标地址(BTA)的预先通知。图8A说明示范性目标跟踪表(TTT)800,其具有TTT条目802,TTT条目802具有六个字段,包含条目有效位804、标记字段805、寄存器Rm地址806、数据有效位807,和上/下计数器值808,以及Rm数据字段809。TTT 800可存储在例如控制电路206中的存储器中,所述存储器可由解码与ADVN级216和处理器管线202的其它管级存取。举例来说,较低的管级(例如执行级222)将Rm数据写入到Rm数据字段809中。如下文更详细描述,间接分支指令在获取到TTT条目且所述TTT条目不具有已在TTT表中的有效匹配标记时分配所述TTT条目。标记字段805可为一完整指令地址或其一部分。影响寄存器值的指令检查TTT 800中的有效条目是否有如Rm地址806中指定的匹配Rm字段。如果发现匹配,那么到所述Rm中指定的地址的间接分支指令在TTT表800中具有已建立的条目,例如TTT条目802。
图8B是根据本发明的合适地用以提供间接分支指令的分支目标地址的预先通知(ADVN)的第二间接分支预先通知过程850。第二间接分支ADVN过程850以经获取指令流852开始。在决策框854处,做出是否接收到间接分支(BX Rm)指令的确定。如果未接收到BX Rm指令,那么第二间接分支ADVN过程850前进到决策框856。在决策框856处,做出所接收的指令是否影响Rm寄存器的确定。此处做出的确定是所接收的指令是否将更新可能潜在地由BX Rm指令使用的任何寄存器。大体上,影响可由间接分支指令指定的寄存器Rm的任一指令都是通过硬件标注为待检查的可能的候选指令,如下文更详细描述。如果所接收的指令不影响Rm寄存器,那么第二间接分支ADVN过程850前进到决策框854以评估下一接收的指令。
返回到决策框856,如果所接收的指令确实影响Rm寄存器,那么第二间接分支ADVN过程850前进到框858。在框858处,检查TTT 800是否存在有效条目,以查看所接收指令是否将实际上改变BX指令将需要的寄存器。在决策框860处,做出是否在TTT 800中已发现任何匹配的Rm的确定。如果在TTT 800中未发现至少一个匹配的Rm,那么第二间接分支ADVN过程850返回到决策框854以评估下一接收的指令。然而,如果在TTT 800中发现至少一个匹配的Rm,那么第二间接分支ADVN过程850前进到框862。在框862处,递增与条目相关联的上/下计数器。所述上/下计数器指示有多少在运行中的指令将改变所述特定Rm。应注意,当Rm改变指令执行时,递减条目的上/下计数器值808,设定数据有效位807,且将执行的Rm数据结果写入到Rm数据字段809。如果寄存器改变指令无序地执行,那么当提交执行结果以改变处理器状态时,呈编程次序的最新寄存器改变指令取消编程次序较老的指令对Rm数据字段的写入,进而避免了写入之后写入的危险。对于具有无分支条件指令的处理器指令集架构(ISA),无分支条件指令可具有评估为不执行状态的条件。因此,为了评估一条目的上/下计数器值808的目的,评估为不执行的无分支条件指令的目标寄存器Rm可被读取为源操作数。所读取的Rm值具有最新的目标寄存器Rm值。这样,即使不执行具有带有匹配的有效标记的Rm的无分支条件指令,也可用最新值更新Rm数据字段809,且相应地递减上/下计数器值808。第二间接分支ADVN过程850随后返回到决策框854以评估下一接收的指令。
返回到决策框854,如果所接收的指令是BX Rm指令,那么第二间接分支ADVN过程850前进到框866。在框866处,检查TTT 800是否存在有效条目。在决策框868处,做出在TTT 800中是否发现匹配的标记的确定。如果未发现匹配的标记,那么第二间接分支ADVN过程850前进到框870。在框870处,在TTT 800中建立新条目,其包含将新条目有效位804设定为有效的指示值,将BX的Rm放置于Rm字段806中,清除数据有效位807,以及清除与新条目相关联的上/下计数器。第二间接分支ADVN过程850随后返回到决策框854以评估下一接收的指令。
返回到决策框868,如果发现匹配的标记,那么第二间接分支ADVN过程850前进到决策框872。在决策框872处,做出条目的上/下计数器是否为零的确定。如果条目的上/下计数器非零,那么存在仍在运行中的Rm改变指令,且第二间接分支ADVN过程850前进到步骤874。在步骤874处,在处理器管线中暂停BX指令直到条目的上/下计数器已经递减到零为止。在框876处,将作为对Rm数据的最后改变的TTT条目的Rm数据用作间接分支BX指令的目标。第二间接分支ADVN过程850随后返回到决策框854以评估下一接收的指令。
返回到决策框872,如果条目的上/下计数器等于零,那么第二间接分支ADVN过程850前进到决策框878。在决策框878处,做出条目的数据有效位是否等于一的确定。如果条目的数据有效位等于一,那么第二间接分支ADVN过程850前进到框876。在框876处,将TTT条目的Rm数据用作间接分支BX指令的目标。第二间接分支ADVN过程850随后返回到决策框854以评估下一接收的指令。
返回到决策框878,如果条目的数据有效位不等于一,那么第二间接分支ADVN过程850返回到决策框854以评估下一接收的指令。在过程850中的此点处,存在对响应于所接收Bx指令的许多替代方案。在第一替代方案中,可将TTT条目的Rm数据用作间接分支BX指令的目标,因为BX Rm标记匹配于一有效条目且上/下计数器值为零。在第二替代方案中,引导处理器管线202根据未采取的路径来获取指令以避免沿着不正确的路径进行获取。由于Rm数据字段中的数据不是有效的,因此甚至不保证Rm数据指向可执行存储器或已经授权进行存取的存储器。沿着循序路径(未采取的路径)的获取对于被准许存取的存储器来说是最可能的。对于前两种替代方案中的任一者可能发生的不正确顺序是在处理器管线的较后的级中发现且处置。在第三替代方案中,引导处理器管线202在BX指令之后停止获取以便节省功率且等待BX校正序列重新建立获取操作。
图9A说明根据本发明的示范性第二间接分支目标地址(BTA)预先通知(ADVN)电路900。BTA ADVN电路900与图2的处理器复合体200的处理器管线202和控制电路206相关联,且根据第二间接分支ADVN过程850操作。第二间接BTA ADVN电路900包括解码电路902、检测电路904、预先通知(ADVN)电路906,以及具有展示于电路之间的基本控制信号路径的校正电路908。ADVN电路906包含确定电路910、跟踪1电路912和最当前BTA电路914。校正电路908包含跟踪2电路920和正确管电路922。
解码电路902对来自图2的指令获取级214的传入指令进行解码。检测电路904监视经解码指令是否有间接分支指令或Rm改变指令。在首次检测到间接分支指令后,ADVN电路906即刻建立新目标跟踪表(TTT)条目,例如图8A的TTT条目802,且识别由检测到的间接分支指令指定的分支目标地址(BTA)寄存器,如图8B的框870处描述。根据框862,在检测到与有效TTT条目和匹配的Rm值相关联的Rm改变指令后即刻递增上/下计数器值808,且当执行Rm改变指令时递减上/下计数器值808。在间接分支指令的连续检测后,ADVN电路906遵循图8B的框872到878描述的操作。校正电路908基于不正确的BTA预先通知而清空管线。
在ADVN电路906中,最当前BTA电路914使用例如TTT条目(例如图8A的TTT条目802)来提供间接分支指令(例如BX R0指令607)的BTA的预先通知。ADVN BTA可用以重新引导处理器管线202获取在ADVN BTA处开始的指令以用于推测性执行。
在校正电路908中,跟踪2电路920监视处理器管线202的执行级222是否有BX R0指令607的执行状态。如果正确地提供ADVN BTA,那么允许推测性获取的指令在处理器管线中继续。如果未正确地提供ADVN BTA,那么从处理器管线清空推测性获取的指令,且将管线重新引导回到正确的指令序列。还向检测电路904告知不正确的ADVN状态,且响应于此状态,检测电路904可经编程以停止识别用于预先通知的此特定间接分支指令。另外,向ADVN电路906告知不正确的ADVN状态,且响应于此状态,ADVN电路906可经编程以仅允许TTT 800的特定条目的预先通知。
图9B说明根据本发明的示范性第三间接分支目标地址(BTA)预先通知(ADVN)电路950。第三间接BTA ADVN电路950包含下一程序计数器(PC)电路952、解码电路954、执行电路956以及目标跟踪表(TTT)电路958,且说明寻址一指令高速缓冲存储器(例如图2的L1指令高速缓冲存储器208)以获取经转发到解码电路954的指令的方面。第三间接BTA ADVN电路950根据第二间接分支ADVN过程850操作。举例来说,解码电路954检测间接分支(例如BX指令)或Rm改变指令,且向TTT电路958通知已检测到BX指令或Rm改变指令且供应适当的信息,例如BX指令的Rm值。TTT电路958也含有上/下计数器,其如图8B的框862处描述般递增或递减以提供上/下计数器值808。执行电路956在执行Rm改变指令后即刻提供Rm数据值和递减指示。执行电路956还取决于预先通知的成功或失败的状态而提供分支校正地址。如框876处描述,选择TTT电路958中的条目,且将所选择条目的Rm数据字段作为目标地址的部分供应到下一PC电路952。
图10A是根据本发明的使用软件代码仿形方法来确定间接分支目标地址的预先通知的方法的代码实例1000。在代码序列1001到1007中,指令A1001、B1003、C1004和D1005与先前描述的相同,且因此不影响分支目标地址寄存器。指令1002是移动R0目标A指令1002,其无条件地将一值从目标A移动到寄存器R0。指令1006是有条件移动R0目标B指令1006,其有条件地执行大约10%的时间。用于确定指令执行的条件可从在如指令集架构中通常指定的各种算术、逻辑和其它功能指令的执行中由处理器设定的条件旗标来形成。这些条件旗标可存储在位于控制逻辑206中的程序可读旗标寄存器或条件代码(CC)寄存器中,所述寄存器也可为程序状态寄存器的部分。间接分支指令BX R0 1007与图4A和4B的先前实例中使用的相同。
在代码实例1000中,有条件移动R0目标B指令1006可取决于其是否执行而影响BTA寄存器R0。考虑如下表中所示的两种可能情形:
移动R0,目标A有条件移动R0,目标B1执行NOP2执行执行
在代码序列1000中,能够影响间接BTA的最后指令是有条件移动R0目标B指令1006,且如果其执行,那么上表中的行2、移动R0目标A指令1002的结果将被所执行的有条件移动R0目标B指令1006覆写。如图10B的代码序列1050中所示,例如仿形编译器等软件代码仿形工具可插入ADVN R0指令1053,例如图3A的ADVN指令300,其以第一格式编码以在移动R0目标A指令1052之后直接执行而无依赖性。当第一格式ADVN R0指令1053进入执行级时,将此时的目标地址寄存器R0的值用作BX R0指令的间接地址,其将允许推测性获取在大约90%的时间中为正确的。
替代地,ADVN R0指令1053可经编码以取决于跟随ADVN R0指令的有条件目标地址改变指令(例如,有条件移动R0目标指令1057)而暂停其执行。当暂停编码的ADVNR0指令1053进入执行级时,此时目标地址寄存器R0的值未确定,且当遇到间接分支指令时的推测性获取暂停直到有条件目标地址改变指令执行为止。如果有条件目标地址改变指令修改目标地址,那么经更新间接分支目标地址用于推测性获取。如果目标地址改变指令未修改目标地址,那么存储在R0中的最新间接分支目标地址值用于推测性获取。应注意,ADVN指令格式300内的条件代码字段304或其它位字段可用于对ADVN指令的此类操作进行编码。如果有条件移动R0目标指令1057的执行百分比是90%未执行且10%执行,那么可为有利的是对ADVN R0指令1053进行编码以无依赖性地执行,因为对于此情形,ADVN R0指令1053可在间接分支指令1058之前足够早地放置于程序指令流中以有利地改善性能。替代地,如果执行百分比预期不同,例如50%和50%,那么可能较有利的是对ADVN R0指令进行编码以取决于根据跟随ADVN R0指令的有条件目标地址改变指令确定结果而暂停其执行。
替代地,第二间接BTA ADVN电路900自动响应于影响寄存器R0的最后指令。举例来说,在90%的时间使用移动R0目标A指令1002的结果,且在10%的时间使用有条件移动R0目标指令1006的结果。应注意,90%和10%的执行百分比是示范性的,且可能受到其它处理器操作影响。在不正确的预先通知的情况下,图9A的校正电路908可操作以响应于所述不正确的预先通知。
虽然在用于处理器系统中的说明性实施例的上下文中揭示本发明,但将认识到,所属领域的技术人员可采用与以上论述以及所附权利要求书一致的广泛多种实施方案。举例来说,用于提供间接分支目标地址的预先通知的ADVN指令方法以及自动间接目标推断方法(例如第二间接BTA ADVN电路900)可一起使用。ADVN指令可由编程人员或软件工具(例如,仿形编译器)插入代码序列中,其中可使用此软件方法获得间接分支目标地址通知的高置信度。对于具有ADVN指令的代码序列,在检测到ADVN指令后即刻超驰自动间接目标推断方法电路。

用于使用预先通知技术改变程序的顺序流程的方法和设备.pdf_第1页
第1页 / 共29页
用于使用预先通知技术改变程序的顺序流程的方法和设备.pdf_第2页
第2页 / 共29页
用于使用预先通知技术改变程序的顺序流程的方法和设备.pdf_第3页
第3页 / 共29页
点击查看更多>>
资源描述

《用于使用预先通知技术改变程序的顺序流程的方法和设备.pdf》由会员分享,可在线阅读,更多相关《用于使用预先通知技术改变程序的顺序流程的方法和设备.pdf(29页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 102934075 A (43)申请公布日 2013.02.13 CN 102934075 A *CN102934075A* (21)申请号 201180028116.0 (22)申请日 2011.06.28 12/824,599 2010.06.28 US G06F 9/32(2006.01) G06F 9/30(2006.01) G06F 9/38(2006.01) (71)申请人 高通股份有限公司 地址 美国加利福尼亚州 (72)发明人 詹姆斯诺里斯迪芬德尔费尔 迈克尔威廉莫罗 (74)专利代理机构 北京律盟知识产权代理有限 责任公司 11287 代理人 宋献涛。

2、 (54) 发明名称 用于使用预先通知技术改变程序的顺序流程 的方法和设备 (57) 摘要 一种处理器实施用于提供间接分支地址的预 先通知的设备和方法。自动地识别由指令产生的 目标地址。在推测性执行利用最当前目标地址的 间接分支指令之前基于所述最当前目标地址来准 备下一程序地址。 所述设备合适地采用寄存器, 其 用于保持由程序指定为间接分支指令的最当前间 接地址的指令存储器地址。所述设备还采用下一 程序地址选择器, 其从所述寄存器选择所述最当 前间接地址作为所述下一程序地址以用于在推测 性执行所述间接分支指令时使用。 (30)优先权数据 (85)PCT申请进入国家阶段日 2012.12.07 。

3、(86)PCT申请的申请数据 PCT/US2011/042087 2011.06.28 (87)PCT申请的公布数据 WO2012/006046 EN 2012.01.12 (51)Int.Cl. 权利要求书 2 页 说明书 13 页 附图 13 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 2 页 说明书 13 页 附图 13 页 1/2 页 2 1. 一种用于改变程序的顺序流程的方法, 其包括 : 从由第一指令识别的寄存器检索程序指定的目标地址, 其中所述寄存器是在指令集架 构中界定 ; 以及 在遇到第二指令之后将推测性执行流程改变到所述程序指定的目标地址, 。

4、其中所述第 二指令经动态地确定为间接分支指令。 2. 根据权利要求 1 所述的方法, 其中所述间接分支指令是在所述第一指令之后的下一 遇到的间接分支指令。 3. 根据权利要求 1 所述的方法, 其中所述间接分支指令是指定匹配由所述第一指令识 别的所述寄存器的目标寄存器的下一遇到的间接分支指令。 4. 根据权利要求 1 所述的方法, 其进一步包括 : 将所述第一指令插入代码序列中处于所述间接分支之前至少 N 个程序指令, 其中所述 N 个程序指令对应于接收所述间接分支的管线级与辨识由所述第一指令识别的所述寄存器 的管线级之间的管线级的数目。 5. 根据权利要求 4 所述的方法, 其中接收所述间接。

5、分支的所述管线级是获取级, 且辨 识由所述第一指令识别的所述寄存器的所述管线级是执行级。 6. 根据权利要求 1 所述的方法, 其进一步包括 : 在遇到对应多个间接分支指令之前接收多个预先通知 (ADVN) 指令, 其中所述第一指 令是 (ADVN) 指令 ; 以及 以先入先出堆栈跟踪所述多个 (ADVN) 指令与所述遇到的对应多个间接分支指令之间 的对应关系。 7. 根据权利要求 1 所述的方法, 其进一步包括 : 确定存储在分支目标地址寄存器中的值是有效指令地址 ; 以及 在对所述间接分支进行解码后即刻从所述分支目标地址寄存器选择所述值以用于识 别待获取的下一指令地址。 8. 根据权利要求。

6、 1 所述的方法, 其进一步包括 : 执行所述间接分支以确定分支目标地址 ; 将所述确定的分支目标地址与所述程序指定的目标地址进行比较 ; 以及 当所述确定的分支目标地址与所述程序指定的目标地址不相同时清空处理器管线。 9. 根据权利要求 1 所述的方法, 其进一步包括 : 在遇到所述第一指令之后超驰分支预测电路。 10. 根据权利要求 1 所述的方法, 其进一步包括 : 将所述指令处理为具有分支历史预测电路的处理器管线中的无操作, 所述分支历史预 测电路具有用以跟踪在代码区段的执行期间遇到的分支的硬件资源 ; 以及 针对超过所述分支历史预测电路可用的所述硬件资源的代码区段启用所述指令。 11。

7、. 一种用于提供间接分支地址的预先通知的方法, 其包括 : 分析指令序列以识别由所述指令序列的目标地址改变指令产生的最当前目标地址 ; 以 及 在推测性执行利用所述最当前目标地址的间接分支指令之前基于所述最当前目标地 址来准备下一程序地址。 权 利 要 求 书 CN 102934075 A 2 2/2 页 3 12. 根据权利要求 11 所述的方法, 其进一步包括 : 在第一次通过代码区段时自动识别所述间接分支指令的目标地址寄存器, 其中所述识 别的目标地址寄存器用以自动识别由所述指令产生的所述最当前目标地址。 13. 根据权利要求 11 所述的方法, 其中当对所述间接分支指令进行解码时准备所。

8、述下 一程序地址。 14. 根据权利要求 11 所述的方法, 其进一步包括 : 将所述指令序列中的所述目标地址改变指令移动到所述指令序列中在间接分支指令 之前至少 N 个程序指令的位置, 其中 N 对应于接收所述间接分支的管线级与辨识由所述目 标地址改变指令识别的所述寄存器的管线级之间的管线级的数目。 15. 根据权利要求 14 所述的方法, 其中接收所述间接分支的所述管线级是获取级, 且 辨识由所述目标地址改变指令识别的所述寄存器的所述管线级是执行级。 16. 根据权利要求 11 所述的方法, 其进一步包括 : 在第一表中在由所述间接分支指令指定的目标地址寄存器条目处加载产生所述最当 前目标。

9、地址的所述指令的指令地址。 17. 根据权利要求 16 所述的方法, 其进一步包括 : 在所述指令地址处检查有效位的关联性存储器中是否有经断言的有效位 ; 以及 响应于经断言的有效位而用从执行由所述第一表识别的所述指令得到的值来加载分 支目标地址寄存器。 18. 根据权利要求 17 所述的方法, 其进一步包括 : 使用存储在所述分支目标地址寄存器中的所述值提供所述分支目标地址。 19. 一种用于提供间接分支目标地址的预先通知的设备, 其包括 : 寄存器, 其用于保持由程序指定为间接分支指令的预先通知 (ADVN) 间接地址的指令 存储器地址 ; 以及 下一程序地址选择器电路, 其监视以所述寄存。

10、器为目标的指令, 且基于所述监视的指 令而从所述寄存器将在遇到所述间接分支指令之前的最当前目标地址选择为所述 (ADVN) 间接地址, 以用于在推测性执行所述间接分支指令时用作下一程序地址。 20. 根据权利要求 19 所述的设备, 其进一步包括 : 解码器, 其用以对程序指令进行解码以识别待存储在所述寄存器中的分支目标地址。 21. 根据权利要求 19 所述的设备, 其进一步包括 : 处理器管线, 其在接收所述间接分支指令的级与辨识所述最当前目标地址的级之间具 有 N 个级, 其中所述下一程序地址选择器电路选择在所述间接分支之前至少所述 N 个级的 所述 ADVN 间接地址。 22. 根据权。

11、利要求 21 所述的设备, 其中接收所述间接分支指令的所述管线级是获取 级, 且辨识所述最当前目标地址的所述管线级是执行级。 23. 根据权利要求 19 所述的设备, 其中所述 ADVN 间接地址是基于跟踪表, 所述跟踪表 存储所述程序的在当前执行循环之前的影响所述间接分支指令的所述分支目标地址的指 令的执行状态。 权 利 要 求 书 CN 102934075 A 3 1/13 页 4 用于使用预先通知技术改变程序的顺序流程的方法和设备 技术领域 0001 本发明大体上涉及用于在处理器管线中处理指令的技术, 且更具体来说涉及用于 产生间接分支指令的目标地址的早期指示的技术。 背景技术 0002。

12、 许多便携式产品, 例如手机、 膝上型计算机、 个人数据助理 (PDA) 或类似物, 需要 使用执行支持通信和多媒体应用的程序的处理器。用于这些产品的处理系统包含处理器、 指令源、 输入操作数源以及用于存储执行结果的存储空间。 举例来说, 指令和输入操作数可 存储在由通用寄存器和多级高速缓冲存储器组成的阶层式存储器配置中, 其包含例如指令 高速缓冲存储器、 数据高速缓冲存储器和系统存储器。 0003 为了在程序的执行中提供高性能, 处理器通常在管线中执行指令。处理器还可使 用推测性执行来获取和执行在预测分支目标地址处开始的指令。如果分支被误预测, 那么 必须从管线清空推测性执行的指令, 并且在。

13、正确的路径地址处重新开始管线。在许多处理 器指令集中, 经常有分支到从寄存器的内容导出的程序目的地地址的指令。此指令通常称 为间接分支指令。 由于间接分支对寄存器的内容的依赖性, 通常难以预测分支目标地址, 因 为在每次执行间接分支指令时寄存器可能具有不同的值。由于校正误预测的间接分支通 常需要对间接分支指令的反向跟踪以便在正确的分支路径上获取和执行指令, 因此处理器 的性能可能降低。而且, 误预测指示处理器不正确地推测性获取和开始在错误分支路径上 的指令处理, 从而造成用于处理并不使用的指令以及用于从管线中清空所述指令的功率增 加。 发明内容 0004 在本发明的若干方面中, 本发明认识到有。

14、利的是使在执行指令时可能发生的误预 测的数目最少以在处理器系统中改善性能且减少功率要求。为此, 本发明的实施例适用于 一种用于改变程序的顺序流程的方法。 所述方法从由第一指令识别的寄存器检索程序指定 的目标地址, 其中所述寄存器是在指令集架构中界定。在遇到第二指令之后将推测性执行 流程改变到所述程序指定的目标地址, 其中所述第二指令经动态地确定为间接分支指令。 0005 本发明的另一实施例针对一种用于提供间接分支地址的预先通知的方法。 分析指 令序列以识别由所述指令序列的目标地址改变指令产生的最当前目标地址。 在推测性执行 利用所述最当前目标地址的间接分支指令之前基于所述最当前目标地址来准备下。

15、一程序 地址。 0006 本发明的另一方面针对一种用于提供间接分支目标地址的预先通知的设备。 所述 设备采用寄存器, 其用于保持由程序指定为间接分支指令的预先通知 (ADVN) 间接地址的 指令存储器地址。所述设备还采用下一程序地址选择器电路, 其监视以所述寄存器为目标 的指令, 且基于所述监视的指令而从所述寄存器将在遇到所述间接分支指令之前的最当前 目标地址选择为所述 ADVN 间接地址, 以用于在推测性执行所述间接分支指令时用作下一 说 明 书 CN 102934075 A 4 2/13 页 5 程序地址。 0007 从以下具体实施方式和附图将明了本发明的更完整理解以及本发明的另外特征 和。

16、优点。 附图说明 0008 图 1 是其中可有利地采用本发明的实施例的示范性无线通信系统的框图 ; 0009 图 2 是根据本发明的支持间接分支指令的分支目标地址的处理器复合体的功能 框图 ; 0010 图 3A 是根据本发明的 32 位预先通知 (ADVN) 指令的一般格式, 其指定具有间接分 支目标地址值的寄存器 ; 0011 图 3B 是根据本发明的 16 位 ADVN 指令的一般格式, 其指定具有间接分支目标地址 值的寄存器 ; 0012 图 4A 是根据本发明的用于使用先前间接分支执行的历史的间接分支预测的方法 的代码实例 ; 0013 图 4B 是根据本发明的用于间接分支预先通知的。

17、方法的代码实例, 所述方法使用 图 3A 的 ADVN 指令以用于提供间接分支目标地址的预先通知 ; 0014 图 5 说明根据本发明的示范性第一间接分支目标地址 (BTA) 预先通知电路 ; 0015 图 6 是根据本发明的使用自动间接目标推断方法来提供间接分支目标地址的预 先通知的方法的代码实例 ; 0016 图7是根据本发明的第一间接分支预先通知(ADVN)过程, 其合适地用于间接分支 指令的分支目标地址 ; 0017 图 8A 说明示范性目标跟踪表 (TTT) ; 0018 图 8B 是根据本发明的第二间接分支预先通知 (ADVN) 过程, 其合适地用于提供间 接分支指令的分支目标地址。

18、的预先通知 ; 0019 图 9A 说明根据本发明的示范性第二间接分支目标地址 (BTA) 预先通知 (ADVN) 电 路 ; 0020 图 9B 说明根据本发明的示范性第三间接分支目标地址 (BTA) 预先通知 (ADVN) 电 路 ; 以及 0021 图10A和10B是根据本发明的使用软件代码仿形方法来确定间接分支目标地址的 预先通知的方法的代码实例。 具体实施方式 0022 现在将参考附图更完整地描述本发明, 其中展示本发明的若干实施例。 然而, 本发 明可以各种形式体现, 且不应解释为限于本文陈述的实施例。 事实上, 提供这些实施例以使 得本发明将为详尽且完整的, 且将本发明的范围完整。

19、地传达给所属领域的技术人员。 0023 根 据 本 发 明 教 示 的 用 于 被 操 作 或 用 于 实 行 操 作 的 计 算 机 程 序 代 码 或 “程 序 代 码”可 初 始 以 高 级 编 程 语 言 来 编 写, 例 如 C、 C+、Smalltalk、 TSQL、 Perl 或各种其它编程语言。通过将高级程序代码转换 为原生汇编程序来将以这些语言中的一者编写的程序编译为目标处理器架构。 用于目标处 说 明 书 CN 102934075 A 5 3/13 页 6 理器架构的程序也可以原生汇编语言直接编写。 原生汇编程序使用机器级二进制指令的指 令助记表示。如本文使用的程序代码或计。

20、算机可读媒体称为机器语言代码, 例如格式可被 处理器理解的目标代码。 0024 图 1 说明其中可有利地采用本发明的实施例的示范性无线通信系统 100。出于说 明的目的, 图 1 展示三个远程单元 120、 130 和 150 以及两个基站 140。将认识到, 常见的无 线通信系统可具有多得多的远程单元和基站。分别包含由组件 125A、 125C、 125B 和 125D 表 示的硬件组件、 软件组件或两者的远程单元 120、 130、 150 和基站 140 已经调适以体现如下 文进一步论述的本发明。图 1 展示从基站 140 到远程单元 120、 130 和 150 的前向链路信号 180。

21、 以及从远程单元 120、 130 和 150 到基站 140 的反向链路信号 190。 0025 在图 1 中, 将远程单元 120 展示为移动电话, 将远程单元 130 展示为便携式计算 机, 且将远程单元 150 展示为无线本地回路系统中的固定位置远程单元。举例来说, 远程单 元可替代地为手机、 寻呼机、 对讲机、 手持式个人通信系统 (PCS) 单元、 例如个人数据助理 等便携式数据单元, 或例如仪表读取装备等固定位置数据单元。尽管图 1 说明根据本发明 的教示的远程单元, 但本发明不限于这些示范性所说明单元。本发明的实施例可合适地用 于具有间接分支指令的任何处理器系统中。 0026 。

22、图 2 是根据本发明的处理器复合体 200 的功能框图, 其支持准备间接分支指 令的分支目标地址的预先通知。处理器复合体 200 包含处理器管线 202、 通用寄存器堆 (GPRF)204、 控制电路 206、 L1 指令高速缓冲存储器 208、 L1 数据高速缓冲存储器 210 以及存 储器阶层 212。控制电路 206 包含程序计数器 (PC)215 和分支目标地址寄存器 (BTAR)219, 其如下文更详细描述般相互作用以用于控制包含指令获取级 214 的处理器管线 202 的目 的。为了论述的清楚而未展示外围装置 ( 其可连接到处理器复合体 )。处理器复合体 200 可合适地用于图 1。

23、 的硬件组件 125A 到 125D 中以用于执行存储在 L1 指令高速缓冲存储器 208 中的程序代码, 利用存储在 L1 数据高速缓冲存储器 210 中且与存储器阶层 212 相关联 的数据。处理器管线 202 可在通用处理器、 数字信号处理器 (DSP)、 专用处理器 (ASP) 或类 似物中操作。处理器复合体 200 的各种组件可使用专用集成电路 (ASIC) 技术、 现场可编程 门阵列 (FPGA) 技术或其它可编程逻辑、 离散门或晶体管逻辑或适合于既定应用的任何其 它可用技术来实施。 0027 处理器管线 202 包含六个主要级 : 指令获取级 214、 解码与预先通知 (ADVN。

24、) 级 216、 分派级218、 读取寄存器级220、 执行级222以及回写级224。 虽然展示单个处理器管线 202, 但本发明的具有间接分支目标地址预先通知的指令处理适用于超标量设计和实施并 行管线的其它架构。举例来说, 为高时钟速率设计的超标量处理器可具有两个或两个以上 并行管线且每一管线可将指令获取级 214、 具有 ADVN 逻辑电路 217 的解码与 ADVN 级 216、 分派级 218、 读取寄存器级 220、 执行级 222 以及回写级 224 划分为两个或两个以上管线式 级, 从而增加总体处理器管线深度以便支持高时钟速率。 0028 以处理器管线202的第一级开始, 与程序。

25、计数器(PC)215相关联的指令获取级214 从 L1 指令高速缓冲存储器 208 获取指令以供稍后的级处理。如果指令获取在 L1 指令高速 缓冲存储器 208 中未命中, 意味着待获取的指令不在 L1 指令高速缓冲存储器 208 中, 那么 从存储器阶层 212 获取所述指令, 存储器阶层 212 可包含多级高速缓冲存储器, 例如第 2 级 (L2) 高速缓冲存储器, 以及主存储器。指令可从其它源加载到存储器阶层 212, 例如引导只 说 明 书 CN 102934075 A 6 4/13 页 7 读存储器 (ROM)、 硬驱动器、 光盘, 或从例如因特网等外部接口加载到存储器阶层 212。。

26、随后 在具有 ADVN 逻辑电路 217 的解码与 ADVN 级 216 中解码所获取的指令, 从而提供如下文更 详细描述的用于间接分支目标地址值的预先通知的额外能力。与 ADVN 逻辑电路 217 相关 联的是分支目标地址寄存器 (BTAR)219, 其可如图 2 所示位于控制电路 206 中, 但不限于这 种放置。举例来说, BTAR 219 可合适地位于解码与 ADVN 级 216 内。 0029 分派级 218 取得一个或一个以上经解码指令且将其分派到例如在超标量或多线 程处理器中利用的一个或一个以上指令管线。读取寄存器级 220 从 GPRF 204 获取数据操 作数或从转发网络 2。

27、26 接收数据操作数。转发网络 226 在 GPRF 204 周围提供快速路径以 在每当结果操作数从执行级可用时供应所述结果操作数。即使具有转发网络, 来自深执行 管线的结果操作数也可能花费三个或三个以上执行循环。在这些循环期间, 读取寄存器级 220 中的需要来自执行管线的结果操作数数据的指令必须等待直到结果操作数可用为止。 执行级 222 执行所分派的指令, 且回写级 224 将结果写入到 GPRF 204 且也可在结果将用于 随后指令中的情况下通过转发网络 226 将结果发送回到读取寄存器级 220。由于结果可能 在回写级224中是以与编程次序相比不同的次序接收的, 因此在将结果写入到G。

28、PRF 204时 回写级 224 使用处理器工具来保留编程次序。下文关于详细代码实例来提供用于提供间接 分支指令的目标地址的预先通知的处理器管线 202 的更详细描述。 0030 处理器复合体 200 可经配置以在存储在计算机可读存储媒体上的程序的控制下 执行指令。举例来说, 计算机可读存储媒体可直接在本地与处理器复合体 200 相关联, 例如 可从 L1 指令高速缓冲存储器 208( 用于对从 L1 数据高速缓冲存储器 210 获得的数据进行 操作 ) 和存储器阶层 212 可用, 或者通过例如输入 / 输出接口 ( 未图示 ) 而关联。处理器 复合体 200 还在程序的执行中从 L1 数据。

29、高速缓冲存储器 210 和存储器阶层 212 存取数据。 计算机可读存储媒体可包含随机存取存储器 (RAM)、 动态随机存取存储器 (DRAM)、 同步动 态随机存取存储器 (SDRAM)、 快闪存储器、 只读存储器 (ROM)、 可编程只读存储器 (PROM)、 可 擦除可编程只读存储器 (EPROM)、 电可擦除可编程只读存储器 (EEPROM)、 压缩光盘 (CD)、 数 字视频光盘 (DVD)、 其它类型的可装卸式盘或任何其它合适的存储媒体。 0031 图 3A 是根据本发明的 32 位 ADVN 指令 300 的一般格式, 其将由编程人员或软件工 具识别的寄存器指定为保持间接分支目标。

30、地址值。 ADVN指令300在指定所识别寄存器的传 入的间接分支指令之前向处理器复合体 200 通知存储在所识别寄存器中的实际分支目标 地址。通过如下文更详细描述提供预先通知, 可改善处理器性能。ADVN 指令 300 经说明为 具有条件代码字段 304, 其由若干指令集架构 (ISA) 利用以基于指定的一或多个旗标而指 定指令将无条件地还是有条件地执行。操作码 305 将指令识别为具有至少一个分支目标地 址寄存器字段 Rm 307 的分支 ADVN 指令。指令特定字段 306 允许操作码扩展和其它指令特 定的编码。在具有含根据指令中的指定条件代码字段有条件地执行的指令的此 ISA 的处理 器。

31、中, 影响分支目标地址寄存器的最后指令的条件字段 Rm 将通常用作 ADVN 指令的条件字 段, 但不限于此指定。 0032 本发明的教示适用于多种指令格式和架构规范。举例来说, 图 3B 是根据本发明的 16 位 ADVN 指令 350 的一般格式, 其指定具有间接分支目标地址值的寄存器。16 位 ADVN 指 令 350 类似于 32 位 ADVN 指令 300, 具有操作码 355、 分支目标地址寄存器字段 Rm 357 以及 指令特定位 356。还注意到, 可利用其它位格式和指令宽度来编码 ADVN 指令。 说 明 书 CN 102934075 A 7 5/13 页 8 0033 间接。

32、分支型指令的一般形式可在处理器管线 202 中有利地使用和执行, 例如依寄 存器分支 Rx(BX)、 相加 PC、 移动 Rx PC 和类似物。为了描述本发明, 在如下文进一步描述的 代码序列实例中使用间接分支指令的 BX Rx 形式。 0034 应注意, 其它形式的分支指令通常在 ISA 中提供, 例如具有指令指定的分支目标 地址 (BTA) 的分支指令、 具有经计算为指令指定的偏移地址与基地址寄存器的和的 BTA 的 分支指令和类似指令。为了支持这些分支指令, 处理器管线 202 可利用分支历史预测技术, 其基于跟踪例如先前分支指令执行的条件执行状态且存储此执行状态以用于预测这些指 令的未。

33、来执行。处理器管线 202 可支持此分支历史预测技术且另外支持使用 ADVN 指令来 提供间接分支目标地址的预先通知。举例来说, 处理器管线 202 可使用分支历史预测技术 直到遇到 ADVN 指令为止, 所述 ADVN 指令随后使用如本文描述的 ADVN 工具来超驰分支目标 历史预测技术。 0035 在本发明的其它实施例中, 处理器管线202还可经设置以监视使用ADVN指令的准 确性, 且当 ADVN 识别的目标地址不正确一次或一次以上时对于后续遇到同一间接分支忽 略 ADVN 指令。还应注意, 对于支持具有 ADVN 指令的 ISA 的处理器的特定实施方案, 处理器 可将遇到的 ADVN 。

34、指令处理为无操作 (NOP) 指令或将检测到的 ADVN 指令标记为未定义。此 外, ADVN 指令可在具有动态分支历史预测电路的处理器管线中被处理为 NOP, 所述动态分 支历史预测电路具有足够的硬件资源来跟踪在代码区段的执行期间遇到的分支且如下文 描述针对超过所述动态分支历史预测电路可用的硬件资源的代码区段启用 ADVN 指令。而 且, 在动态分支历史预测电路具有用于预测间接分支目标地址的不良结果的情况下, ADVN 指令可结合动态分支历史预测电路来使用以用于提供间接分支目标地址的预先通知。 举例 来说, 从动态分支历史预测电路产生的经预测分支目标地址可由通过使用 ADVN 指令提供 的目。

35、标地址超驰。另外, 呈现有利的自动间接目标推断方法以用于提供如下文描述的间接 分支目标地址的预先通知。 0036 图 4A 是根据本发明的用于间接分支预测的方法的代码实例 400, 所述方法在未遇 到 ADVN 指令的情况下使用一般历史方法来预测间接分支执行。代码实例 400 的执行是参 考处理器复合体 200 来描述。为了此实例的目的, 指令 A 到 D401 到 404 可为循序算术指令 集, 其基于指令 A 到 D401 到 404 的分析并不影响 GPRF 204 中的寄存器 R0。寄存器 R0 由加 载 R0 指令 405 用用于间接分支指令 BX R0 406 的目标地址加载。为了。

36、此实例的目的, 指令 401 到 406 中的每一者经指定为无条件地执行。还假定, 加载 R0 指令 405 在 L1 指令高速 缓冲存储器 208 中可用, 使得当指令 A401 在执行级 222 中完成执行时, 已在获取级 214 中 获取加载 R0 指令 405。随后获取间接分支 BX R0 指令 406, 同时在解码与 ADVN 级 216 中解 码加载 R0 指令 405。在下一管线级中, 准备加载 R0 指令 405 以经分派用于执行, 且解码 BX R0指令406。 而且, 在解码与ADVN级216中, 基于先前间接分支执行的历史而做出BX R0指 令 406 是被取得还是未被取。

37、得的预测, 且还预测间接分支的目标地址。对于此实例, BX R0 指令 406 经指定为被无条件地 “取得” 且 ADVN 逻辑电路 217 仅需要将间接分支目标地址预 测为地址 X。基于此预测, 引导处理器管线 202 开始推测性获取从地址 X 开始的指令, 地址 X 在给定 “取得” 状态时通常是从当前指令寻址的重定向。处理器管线 202 还清空管线中在 间接分支 BX R0 指令 406 之后的任何指令, 如果这些指令不与在地址 X 处开始的指令相关 联。处理器管线 202 继续获取指令直到在执行级中可确定经预测地址 X 是否经正确预测为 说 明 书 CN 102934075 A 8 6。

38、/13 页 9 止。 0037 在处理指令的同时, 可能遇到暂停情形, 例如关于加载 R0 指令 405 的执行可能发 生的暂停情形。加载 R0 指令 405 的执行可在 L1 数据高速缓冲存储器中存在命中的情况下 无延迟地返回来自 L1 数据高速缓冲存储器 210 的值。然而, 加载 R0 指令 405 的执行在 L1 数据高速缓冲存储器 210 中存在未命中的情况下可能花费大量周期。加载指令可使用来自 GPRF 204 的寄存器来供应基地址, 且随后在执行级 222 中将中间值加到基地址以产生有效 地址。所述有效地址经由数据路径 232 发送到 L1 数据高速缓冲存储器 210。在 L1 。

39、数据高 速缓冲存储器210中的未命中的情况下, 必须从可包含例如L2高速缓冲存储器和主存储器 的存储器阶层212获取数据。 此外, 数据可能在L2高速缓冲存储器中未命中, 从而导致从主 存储器获取数据。 举例来说, L1数据高速缓冲存储器210中的未命中、 存储器阶层212中的 L2 高速缓冲存储器中的未命中以及对主存储器的存取可能需要数百个 CPU 周期来获取数 据。在 L1 数据高速缓冲存储器未命中之后获取数据所花费的周期期间, BX R0 指令 406 在 处理器管线 202 中暂停直到运行中操作数可用为止。所述暂停可视为在读取寄存器级 220 中或执行级 222 的开始处发生。 003。

40、8 应注意, 在具有多个指令管线的处理器中, 加载 R0 指令 405 的暂停可能并不暂停 在任何其它管线中发生的推测性操作。由于 L1 D 高速缓冲存储器 210 中的未命中所造成 的暂停的长度, 可能推测性获取大量指令, 这在存在间接分支目标地址的不正确预测的情 况下可能显著影响性能和功率使用。可通过使用作为图 2 的控制电路 206 的部分的保持电 路来在处理器管线中产生暂停。所述保持电路产生保持信号, 其可例如用以选通管线级寄 存器以暂停管线中的指令。 对于图2的处理器管线202, 可例如在读取寄存器级中在并非所 有输入都可用的情况下激活保持信号, 使得管线保持等待完成指令执行所必要的。

41、输入的到 达。当所有必要的操作数变为可用时释放所述保持信号。 0039 在未命中的解析后, 将加载数据经由路径 240 发送到作为回写级 224 的部分的回 写操作。随后将操作数写入到 GPRF 204 且也可发送到上文描述的转发网络 226。现在可 将 R0 的值与经预测地址 X 进行比较以确定是否需要清空推测性获取的指令。由于用以存 储分支目标地址的寄存器在每次执行间接分支指令时可能具有不同的值, 因此存在将使用 当前预测方法清空推测性获取的指令的高概率。 0040 图 4B 是根据本发明的用于间接分支预先通知的方法的代码实例 420, 所述方法 使用图 3A 的 ADVN 指令以用于提供。

42、间接分支目标地址的预先通知。基于图 4A 的指令 A 到 D401 到 404 不影响分支目标地址寄存器 R0 的先前提到的分析, 加载 R0 指令 405 可在指令 序列中向上移动以例如在图 4B 的代码实例中放置于指令 A421 之后。另外, ADVN R0 指令 423, 例如图 3A 的 ADVN 指令 300, 直接放置于加载 R0 指令 422 之后作为用于间接 BX R0 指 令 427 的分支目标地址的预先通知的先行辅助。 0041 在图 4B 的新指令序列 421 到 427 流过处理器管线 202 时, 当加载 R0 指令 422 在 执行级中时 ADVN R0 指令 42。

43、3 将在读取级 220 中, 且指令 D426 将在获取级 214 中。对于加 载 R0 指令 422 在 L1 数据高速缓冲存储器 210 中命中的情形, R0 的值在加载 R0 执行结束 之前是已知的且与 R0 值一起经由转发网络 226 快速转发到读取级, R0 值在读取级 220 的 末尾或在用于 ADVN R0 指令的执行级的开始之前也是已知的。在间接分支指令进入解码与 ADVN 级 216 之前确定 R0 值允许 ADVN 逻辑电路 217 将确定的 R0 值选择为 BX R0 指令 427 说 明 书 CN 102934075 A 9 7/13 页 10 的分支目标地址而不会有任。

44、何额外的周期延迟。 应注意, BX R0指令427在管线中是动态识 别的。虽然通常 ADVN 指定的寄存器 ( 例如此代码实例中的 R0) 将保持与间接分支指定的 目标地址寄存器相同的地址, 但可能遇到异常。 在针对此地址异常的一种方法中, 不将ADVN 指定的寄存器值与下一遇到的间接分支指令指定的寄存器值进行比较, 且如果选择了不正 确的目标地址, 那么在管线中稍后会检测到错误且采取适当动作, 例如清空管线。 在一不同 方法中, 将 ADVN 指定的寄存器值与下一遇到的间接分支指令指定的寄存器值进行比较, 且 在找到匹配之前将不针对推测性执行做出改变, 通常情况将是这样。 如果未找到匹配, 。

45、那么 管线将如同未遇到 ADVN 指令那样操作。 0042 应注意, 对于处理器管线202, 对于在L1数据高速缓冲存储器210中存在命中的情 况, 加载 R0 指令和 ADVN R0 指令可能已放置在指令 B 之后而不会引起任何进一步延迟。然 而, 如果在 L1 数据高速缓冲存储器中存在未命中, 那么将起始暂停情形。对于 L1 数据高速 缓冲存储器 210 中的未命中的此情况, 加载 R0 和 ADVN R0 指令将需要基于管线深度而放置 在 BX R0 指令之前适当数目个未命中延迟周期 ( 如果可能的话 ) 以避免引起任何进一步延 迟。 0043 大体上, ADVN指令在代码序列中的放置优。

46、选为在BX指令之前N个指令。 在处理器 管线的上下文中, N 表示接收间接分支指令的级与辨识 ADVN 指定的分支目标地址的级 ( 例 指令获取级 214 和执行级 222) 之间的级的数目。在与转发网络 226 一起使用的示范性处 理器管线 202 中, N 为二, 且在不使用转发网络 226 的情况下, N 为三。对于例如使用转发网 络的处理器管线, 如果 BX 指令在 ADVN 指令之前 N 等于二个指令, 那么 ADVN 目标地址寄存 器 Rm 值是由于转发网络 226 而在读取寄存器级 220 的末尾处确定。在例如针对 ADVN 指令 使用并不使用转发网络226的处理器管线的替代实施。

47、例中, 如果BX指令在ADVN指令之前N 等于三个指令, 那么 ADVN 目标地址寄存器 Rm 值是在 BX 指令进入解码与 ADVN 级 216 时在 执行级 222 的末尾处确定。指令的数目 N 也可取决于额外的因素, 包含上部管线中的暂停 ( 例如归因于指令获取级 214 中的延迟 )、 可能改变高达超标量处理器中发布的 K 个指令的 指令发布宽度, 以及例如在 ADVN 与 BX 指令之间出现的中断。大体上, ISA 可推荐尽可能早 地调度 ADVN 指令, 以最小化这些因素的影响。 0044 虽然图4B是以单个ADVN R0指令来说明, 但在遇到任何间接分支之前可例示多个 ADVN 。

48、指令。所述多个 ADVN 指令以 FIFO 方式应用于接下来遇到的间接分支, 例如可通过使 用堆栈设备而获得。应注意, 下一遇到的间接分支指令在编程次序上大体上与下一间接分 支指令相同。可在确定使用多个 ADVN 指令是否适当之前评估可能对此一般规则引起异常 的代码。 0045 图 5 说明根据本发明的示范性第一间接分支目标地址 (BTA) 预先通知电路 500。 第一间接 BTA 预先通知电路 500 包含 ADVN 执行电路 504、 分支目标地址寄存器 (BTAR) 电 路 508、 BX 解码电路 512、 选择电路 516, 以及用于响应于影响 PC 地址产生的输入的下一程 序计数器。

49、 (PC) 电路 520。在 ADVN 执行电路 504 中执行 ADVN Rx 指令之后, 将 Rx 的值加载 到 BTAR 电路 508 中。当在 BX 解码电路 512 中解码 BX 指令时且如果 BTAR 如选择电路 516 所选择是有效的, 那么将 BTAR 电路 508 中的 BTA 值由下一 PC 电路 520 用作下一获取地址。 也可在 BTAR 有效处于作用中时使用 BTAR 有效指示来停止获取, 从而节省原本将与获取错 误地址处的指令相关联的功率。 说 明 书 CN 102934075 A 10 8/13 页 11 0046 图 6 是根据本发明的使用自动间接目标推断方法来提供间接分支目标地址的预 先通知的方法的代码实例 600。在代码序列 601 到 607 中, 指令 A601、 B603、 C604 和 D606 与先前描述的相同, 且因此不影响分支目标地址寄存器。两个指令 : 加载 R0 指令 602 和相 加 R0、 R7、 R8 指令 605 影响此实例的分支目标寄存器 R0。间接分支指令 BX R0 607 与图 4A 和 4B 的先前实例中使用的相同。在代。

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

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


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