一种处理器及其运行方法
技术领域
本发明属于处理器技术领域,涉及带有能为数据高速缓存(Data Cache)提供通路预测(Way-prediction)的循环检测单元和循环缓冲器的处理器及其运行方法。
背景技术
在当前微处理器的中,高速缓存存储器(cache,简称为“高速缓存”)是其必不可少的部件,其设置在主存储器(memory, 简称“主存储器”)和CPU之间,以便减少指令的等待处理时间。可以预测到,到2014年,高速缓存占用处理器的芯片面积可以达到94%。由于位线的充电和放电、灵敏放大和标签比较的功能,高性能的高速缓存消耗非常多的开关功耗量。据报道,Intel Pentium Pro处理器中,高速缓存的功耗大概占到33%。并且,最新研发的Niagara处理器中,数据高速缓存子系统消耗芯片总功耗的约15%。
当前微处理器的架构中,一般使用两个高速缓存子系统:数据高速缓存和指令高速缓存。在数据高速缓存中,其可以采用组-关联高速缓存(set-associative cache)来降低缓存存储器中数据缺失率,并且,组-关联高速缓存中普遍地执行并行访问方案(parallel access scheme)。在并行访问方案中,数据高速缓存的数据阵列(data array)和地址标记阵列(tag array)同时被访问。例如,在4通路组-关联高速缓存中,数据阵列的4通路同时被访问以提取相应4块数据,根据地址标记阵列的输出结果,4块数据中至多只有一个被选择输出。这种方案的执行可以获得较高性能。但是,也可以观察到,由于额外访问了没有被输出的块数据对应通路的组-关联高速缓存(例如3路),需要消耗大量的额外功耗。
并行访问方案之外,还有一种顺序访问方案(sequential access scheme)。在顺序访问方案中,数据阵列访问被延期到直至得知地址标记阵列的输出结果,因此,在该方案中,只需要访问数据阵列的1通路并最终将其数据输出。顺序访问方案虽然可以节省功耗,但是,其大大增加了高速缓存延迟,这导致这种方案仅限于在低功耗低性能的设计中应用。
发明内容
本发明的目的之一,降低处理器中的高速数据缓存的功耗并且基本不增加高速数据缓存的延迟。
本发明的还一目的在于,降低处理器中的指令提取单元和/或指令解码单元的功耗。
为实现以上目的或者其他目的,本发明提供以下技术方案。
按照本公开的一方面,提供一种处理器,包括指令高速缓存、指令提取单元、指令解码单元、重新数列缓冲器、保留站、执行单元和数据读取存储单元;其特征在于,所述数据读取存储单元中的数据高速缓存为n通路的组-关联数据高速缓存;该处理器还包括:
循环检测单元,和
循环缓冲器;
其中,所述循环检测单元用于从所述指令解码单元的输出的解码指令中检测出循环体,并且,至少将该循环体对应的解码指令和所述数据高速缓存的关联通路信息存储至所述循环缓冲器;
在该循环体的迭代运行过程中,所述循环检测单元中止所述指令提取单元和/或指令解码单元的运行,所述循环缓冲器基于其存储的所述关联通路信息为所述数据高速缓存提供通路预测;
n为大于或等于2的整数。
按照本发明一实施例的处理器,其中,在该循环体的迭代运行过程中,所述循环缓冲器将其存储的所述解码指令输出至所述重新数列缓冲器,所述解码指令为微操作。
按照本发明一实施例的处理器,其中,所述数据高速缓存包括:地址标签阵列和数据阵列;
在所述循环检测单元未检测出所述循环体时,所述地址标签阵列用于控制数据阵列的n个数据通路的访问的选择输出;
在该循环体的迭代运行过程中,所述循环检测单元中止所述地址标签阵列的运行。
具体地,所述数据读取存储单元中设置有多路选择器。
优选地,所述处理器为服务器中的处理器。
按照本公开的又一方面,提供一种以上所述处理器的运行方法,其包括步骤:
循环检测单元从所述指令解码单元的输出的解码指令中检测是否为循环体;
如果检测为循环体并且该循环体为新循环体,至少将该循环体对应的解码指令和所述数据高速缓存的关联通路信息存储至所述循环缓冲器;
如果检测为循环体并且该循环体为正迭代运行的循环体,所述循环检测单元中止所述指令提取单元和/或指令解码单元的运行,所述循环缓冲器基于其存储的所述关联通路信息为所述数据高速缓存提供通路预测。
按照本发明一实施例的运行方法,其中,所述循环检测单元中止所述指令提取单元和/或指令解码单元的运行时,所述循环缓冲器将其存储的所述解码指令输出至所述重新数列缓冲器。
按照本发明一实施例的运行方法,其中,所述循环缓冲器基于其存储的所述关联通路信息为所述数据高速缓存提供通路预测时,所述循环检测单元中止所述地址标签阵列的运行。
按照本发明一实施例的运行方法,其中,如果检测不是为循环体,基于所述地址标签阵列控制数据阵列的n个数据通路的访问的选择输出。
按照本发明一实施例的运行方法,其中,所述检测步骤中,循环堆栈被用来检测当前阶段执行的所有循环体,在该循环堆栈中,循环体被标记为[T ,B],其中,T为目标指令的程序计数指令指针,B为跳转目标程序指令指针;
所述检测步骤包括以下步骤:
检测所述循环堆栈结构是否为“空”;
如果判断为“是”,其表示当前执行的指令属于该循环堆栈中的正迭代运行的循环体;
如果判断为“否”,其进一步判断该指令是否为改变程序指令指针的分支或跳转指令;
如果是分支或跳转指令,通过将目标地址T记录并将其与当前循环堆栈的条目作比较,判断目标地址T是否存在于当前循环堆栈中,以判断是否为新循环体。
本发明的技术效果是,通过循环检测单元检测出循环体,并存储该循环体的相关信息,在该循环体的迭代运行过程中,循环检测单元可以中止指令提取单元和/或指令解码单元的运行,并且为数据高速缓存提供通路预测,因此,可以降低处理器中的高速数据缓存的功耗并且基本不增加高速数据缓存的延迟,指令提取单元和/或指令解码单元运行时间减少、功耗降低,处理器整体功耗小。
附图说明
从结合附图的以下详细说明中,将会使本发明的上述和其他目的及优点更加完全清楚,其中,相同或相似的要素采用相同的标号表示。
图1是现有的处理器的微架构示意图。
图2是按照本发明一实施例的处理器的微架构示意图。
图3是循环检测单元检测循环体的流程示意图。
具体实施方式
下面介绍的是本发明的多个可能实施例中的一些,旨在提供对本发明的基本了解,并不旨在确认本发明的关键或决定性的要素或限定所要保护的范围。容易理解,根据本发明的技术方案,在不变更本发明的实质精神下,本领域的一般技术人员可以提出可相互替换的其他实现方式。因此,以下具体实施方式以及附图仅是对本发明的技术方案的示例性说明,而不应当视为本发明的全部或者视为对本发明技术方案的限定或限制。
下面的描述中,为描述的清楚和简明,并没有对图中所示的所有多个部件进行描述。附图中示出的多个部件提供了本领域普通技术人员完全能够实现本发明的公开内容。
图1所示为现有的处理器的微架构示意图。如图1所示,处理器100中,指令提取(Instruction Fetch)单元110首先从高速缓存中的指令高速缓存190提取目标指令代码,进一步,通过指令提取单元110和指令解码单元120,将该指令代码解码成微操作(micro-operation)(例如微指令)。该微操作进一步被分派至队列重排缓冲器(Reorder Buffer)130,在队列重排缓冲器130中对微操作进行重新排序后,进一步被分派至保留站(Reservation Station)140,微操作在保留站中等待执行处理。执行单元150根据微操作的类型,在保留站的微操作被执行以生成结果。数据读取存储(Load Store and Data Cache, LSDC)单元160提供访问数据高速缓存层级的机制,处理数据高速缓存的访问操作(Data Cache Access Operation,DCAO)。其中,LSDC160包括加载存储单元和数据高速缓存,由加载存储单元访问数据高速缓存,并且,加载存储单元为驻留在存储器访问地址处的数据搜索数据高速缓存。在图1所示实施例中,LSDC单元160中的数据高速缓存为组-关联结构的数据高速缓存,该数据缓存示例地为2通路组-关联高速缓存,其被配置为地址标记阵列(Tag Array)168和数据阵列两部分,其中,地址标记阵列168用于存储地址标记,该地址标记用于与存储在数据阵列中的数据字节对应。通常每个标记条目与数据阵列条目相关联,其中每个标记条目存储涉及每个数据阵列条目的索引信息。数据阵列中设置为第一数据通路161和第二数据通路162,具体地,数据阵列或地址标记阵列168中的列可以定义为组-关联数据高速缓存的通路(例如,2通路),图中示出了通路中的数据阵列部分的数据通路部分(161和162)。
在该实施例中,处理器100的数据高速缓存的访问采用并行访问方案,地址相关信号被同时送至地址标记阵列168、第一数据通路161和第二数据通路162;进一步,第一数据通路161和第二数据通路162对应的两块数据分别被访问,第一数据通路161和第二数据通路162对应的2块数据可以通过数据高速缓存线输出至LSDC单元160的多路选择器169;同时,输入地址标记阵列168的地址与存储在地址标记阵列168中的地址相比较,并基于比较结果控制多路选择器169;从而选择正确的一块数据输出(没有选择到正确数据时,报告缺失)。
从背景技术的描述中可知,这种结构的处理器在采取并行访问方案操作时,数据阵列的部分访问操作是冗余的,能量效率低,功耗大。
另外,在指令高速缓存190中,指令字节被提取并且然后被解码成简单的微操作(micro-operation),从而可以在执行单元中利用简单的流水线(pipeline)执行。由于遗留问题,普通指令组(例如,x86)的指令并没有直接解码。因此,大量的能量消耗在处理器100的指令解码单元120中。一些只读存储器(ROM)被运行以存储难以解码的指令,以便减少在指令解码器件的功耗。因此,图1所示实施例的处理器在动态运行过程中,指令解码单元120的功耗也是非常大的。
图2所示为按照本发明一实施例的处理器的微架构示意图。在该实施例中处理器200的数据高速缓存的访问仍然采用并行访问方案。如图2所示,处理器200中设置有指令高速缓存290、指令提取单元210、指令解码单元220、队列重排缓冲器(Reorder Buffer)230、保留站(Reservation Station)240、执行单元(Execution Unit)250、和数据读取存储单元(LSDC单元)260。其中,指令提取单元210用于从指令高速缓存290中提取指令,然后指令解码单元220将指令解码并输出解码指令,在该实施例中,其被解码成微操作以供流水线执行。指令解码单元220输出该微操作至队列重排缓冲器230,队列重排缓冲器230中对微操作进行重新排序后,进一步被分派至保留站240,微操作在保留站中等待执行处理。执行单元250根据微操作的类型,至保留站的微操作被执行以生成结果。
数据读取存储单元(LSDC)单元260在执行单元250运行时处理数据高速缓存的访问操作。在该实施例中,数据读取存储单元(LSDC单元)260包括加载存储单元和高速数据缓存,由加载存储单元访问数据高速缓存,并且,加载存储单元为驻留在存储器访问地址处的数据搜索数据高速缓存。该高速数据缓存为n通路的组-关联数据高速缓存,其访问采用并行访问方案。如图2所示,高速数据缓存中包括地址标记阵列268和数据阵列两部分,其中形成的通路的数量为2个,但是,这不是限制性的,例如,还可以为4通路结构。数据阵列在该实例中被设置为第一数据通路261和第二数据通路262,具体地,数据阵列或地址标记阵列268中的列可以定义为组-关联数据高速缓存的通路,该通路对应的数据阵列的存储单元即为数据通路。在正常工作时(循环检测单元270未检测到循环体指令时),地址标记阵列268可以用于存储地址标记,该地址标记用于与存储在数据阵列中的数据字节对应;执行单元250同时输出地址至地址标记阵列268和数据阵列,二者同时被访问;一方面,2通路的第一数据阵列261和第二数据阵列262对应的2块数据均被访问;另一方面,地址标记阵列268根据输入的地址,将其与存储在地址标记阵列168中的地址相比较,根据地址标记阵列268的输出结果(比较结果),输出至多路选择器269,从而选择输出某一数据通路的数据访问。
继续如图2所示,该处理器200还包括循环检测单元270和循环缓冲器280,在图示实施例中,循环检测单元270分别与指令提取单元210、指令解码单元220、标签阵列268、循环缓冲器280耦接,循环缓冲器280也分别与队列重排缓冲器230、多路选择器269耦接。通常地,在指令高速缓存290的指令中,包括许多循环指令,因此,处理器200很大一部分时间在执行循环(loop)操作,特别是在服务器的处理器中,执行循环操作的比例非常大。循环检测单元270用于检测出循环体,指令解码单元220输出的解码指令(微操作)被同时输入至循环检测单元270,进而对其进行检测。
图3所示为循环检测单元检测循环体的流程示意图。在该实施例中,循环体可以通过以下方式定义:循环首先通过分支或跳转(Branch Or Jump,简称BOJ)指令发起(记为地址B),然后改变当前程序指令指针(Program Counter,PC)至某一目标指令(记为地址T),然后在地址[T ,B]的范围内的指令组成循环体。在地址[T ,B]的范围内的指令在该循环体的迭代运行过程中均被执行。
由于在一循环体中可能还嵌套其他小循环体,在该实施例中,当前循环堆栈(Current Loop Stack,简称CLS)被用来检测当前阶段执行的所有循环体。在CLS中,循环体被标记为[T ,B],其中,T为目标指令的程序计数指令指针,B为BOJ指令的跳转目标程序指令指针。在该实施例中,循环体的检测过程如下:
首先,步骤S311,检测CLS结构是否为“空”,如果判断为“否”,进入步骤S312,其表示当前执行的指令属于CLS中的迭代运行的循环体,从而运用循环体的迭代运行过程的工作模式(提供通路预测和指令预测,其在以下说明);
如果判断为“是”,进入步骤S313,判断该指令是否为改变程序指令指针的BOJ指令。
如果判断为“否”,则结束循环体检测过程;如果判断为“是”,进入步骤S315,通过将目标地址T记录并将其与CLS的存储条目(entry)作比较,判断目标地址T是否存在于CLS中。该比较判断步骤检查该指令是否为一新循环体(新循环体是指循环指令的第一次执行,其是相对迭代运行的循环体来定义的)的发起,或者是否属于循环体的迭代;
如果进一步判断为“否”(T未存在于CLS中),进入步骤S320,判断该分支是否被转移,进一步,该分支被转移走的情况下进入步骤S321,以起始地址T和结束地址PC进栈当前循环体至CLS,这表明其为一个新发起的循环体(新循环体);
如果判断为“是”(T存在于CLS中),进入步骤S316,判断该分支是否被转移走;如果已经转移走,进入步骤S317,终止嵌套的小循环体;如果未转移走,进入步骤S318,终止该循环体以及嵌套的小循环体。
步骤S317之后,进一步判断当前程序的指令指针(PC)是否大于CLS的顶部条目的末端地址(步骤S319);如果判断为“是”,进入步骤S323,上托CLS的顶部条目并以起始地址T和结束地址PC进栈当前循环体至CLS;如果判断为“否”,进入步骤S322,增加CLS的顶部条目的迭代数。
因此,以上循环检测单元270可以在执行代码期间动态地检测循环体。
继续参阅图2,在循环检测单元270检测出新循环体以后,至少将该循环体对应的解码指令(微操作)和数据高速缓存的关联通路信息存储至循环缓冲器280;在该循环体迭代运行之前,循环体相关指令在执行时,其采用以上正常工作时的方法来控制数据通路的访问的选择输出,地址标签阵列268的输出信息即反应了关联通路信息,其被存储在循环缓冲器280中,以便该循环体在其后的迭代运行过程中,直接基于该关联通路信息提供通路预测。如图2所示, 在循环体的迭代运行过程中,循环缓冲器280输出指令至多路选择器269,从而提供通路预测,直接访问相应通路的数据阵列(262或261)。这样,避免了数据阵列的部分冗余访问操作,循环检测单元270也可以输出信号至标签阵列以中止其运行,并且不会产生顺序访问方案中的延迟问题,降低了高速数据缓存的功耗。
进一步,根据循环体的指令特征,在循环体的迭代运行过程中,指令提取单元210和指令解码单元220的运行是基本相同的,指令解码单元220输出的微操作也相同,因此,可以通过循环检测单元270发生指令至指令提取单元210和/或指令解码单元220, 以中止指令提取单元210和/或指令解码单元220的运行。优选地,二者均同时中止运行。同时,重新数列缓冲器230所需要的微操作通过循环缓冲器280将其存储的该循环体对应的微操作发送,这样也为来自指令高速缓存290的微操作提供了预测。指令提取单元210和/或指令解码单元220的中止运行也大大降低了处理器200的功耗。
基于循环体提供通路预测功能和微操作预测,可以减少数据高速缓存、指令提取单元、指令解码单元的功耗,从而降低处理器的功耗,需要理解的是,其具体减少功耗的多少与程序中的循环指令的比例相关。图2所示实施例的处理器尤其适合于指令中循环指令比例较大的情形下运行,例如,服务器运行的程序指令中,属于循环体的微操作的比例较大,因此,其优选地在服务器中运行。但是,其具体应用范围并不限于该实例。
以上例子主要说明了本发明的处理器及其运行方法过程。尽管只对其中一些本发明的实施方式进行了描述,但是本领域普通技术人员应当了解,本发明可以在不偏离其主旨与范围内以许多其他的形式实施。因此,所展示的例子与实施方式被视为示意性的而非限制性的,在不脱离如所附各权利要求所定义的本发明精神及范围的情况下,本发明可能涵盖各种的修改与替换。