CN116627505A - 指令缓存及操作方法、处理器核及指令处理方法 - Google Patents
指令缓存及操作方法、处理器核及指令处理方法 Download PDFInfo
- Publication number
- CN116627505A CN116627505A CN202310673851.1A CN202310673851A CN116627505A CN 116627505 A CN116627505 A CN 116627505A CN 202310673851 A CN202310673851 A CN 202310673851A CN 116627505 A CN116627505 A CN 116627505A
- Authority
- CN
- China
- Prior art keywords
- cache
- instruction
- micro
- data
- group
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 50
- 238000003672 processing method Methods 0.000 title claims abstract description 13
- 238000012545 processing Methods 0.000 claims description 16
- 230000004044 response Effects 0.000 claims description 5
- 238000011017 operating method Methods 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 34
- 238000013507 mapping Methods 0.000 description 14
- 238000004891 communication Methods 0.000 description 9
- 238000004590 computer program Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000008521 reorganization Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本公开的实施例提供了一种指令缓存及操作方法、处理器核及指令处理方法。该指令缓存包括多个组,其中,每个组包括分别对应于多个路的多个缓存项以及冗余标识字段,每个缓存项配置为存储对象指令数据以及对象指令数据的地址信息,冗余标识字段配置为用于标识多个缓存项中至少哪一项中存储的对象数据被认为是冗余的。该指令缓存降低微指令缓存与指令缓存的冗余、提高指令缓存的有效容量、最终提升CPU核的整体性能。
Description
技术领域
本公开的实施例涉及一种指令缓存及操作方法、处理器核及指令处理方法。
背景技术
处理器核(或简称“CPU核”)是可以独立完成中央处理器(CPU)操作步骤的核心(Core)。例如,CPU可能包含至少一个CPU核,根据所包括的CPU核的多少,CPU可以为单核处理器(CPU)或多核处理器(CPU)。通常每个CPU核不包含二级和三级缓存(如果有三级缓存)。
单核处理器或多核处理器的处理器核(CPU核)通过流水线技术提高指令执行效率。流水线技术将CPU核的完整操作步骤分为多个子步骤,并将这些子步骤按照流水线的形式执行以提高效率。图1示出了示例性的标量中央处理器(CPU)的指令流水线,该指令流水线包括五阶段流水线,其中,每条指令可以在每个时钟周期发出并在固定的时间(例如,5个时钟周期)内执行。每条指令的执行分成5步:取指(IF)阶段1001、译码阶段(ID)1002、执行阶段(EX)1003、访存(MEM)阶段1004和写回(WB)阶段1005。在IF阶段1001中,从指令高速缓存器中取出指定指令。所取出的指定指令的一部分用于指定可用于执行指令的源寄存器。在ID阶段1002中,译码并生成控制逻辑,将所指定的源寄存器的内容取出。根据控制逻辑,使用所取出的内容在EX阶段1003中执行算术或逻辑运算。在MEM阶段1004中,执行指令可读/写数据高速缓存器中的存储器。最后,在WB阶段1005中,通过执行指令而获得的值可以写回到某个寄存器中。
在CPU核架构中,程序和数据都保存在内存(例如DRAM)中,所以程序中存在大量的内存读取指令(Load指令)。由于CPU核运行频率远远高于内存运行频率,因此,从内存获取数据需要上百个CPU核时钟,往往会造成CPU核由于无法继续运行相关指令而空转,造成性能损失。高性能CPU核通常都包含多级高速缓存(Cache)去缩短内存访问的延迟,加快CPU核的运行速度,但是当读取从未被访问的数据或是由于缓存大小限制被踢出的数据时,CPU核仍然需要等待数十甚至上百个时钟周期,这将造成性能损失。
发明内容
本公开的至少一个实施例提供了一种指令缓存,所述指令缓存包括多个组,其中,每个所述组包括分别对应于多个路的多个缓存项以及冗余标识字段,每个所述缓存项配置为存储对象指令数据以及所述对象指令数据的地址信息,所述冗余标识字段配置为用于标识所述多个缓存项中至少哪一项中存储的对象数据被认为是冗余的。
例如,在根据本公开的至少一个实施例的指令缓存中,每个所述缓存项包括数据字段、标签字段和有效位,所述数据字段用于存储所述对象指令数据,所述标签字段用于存储所述对象指令数据的地址信息,所述有效位用于标识所述缓存项是否有效。
例如,在根据本公开的至少一个实施例的指令缓存中,每个所述缓存项还包括第一替换参数字段,所述第一替换参数字段用于指示所述缓存项的被替换属性,或者,每个所述组还包括第二替换参数字段,所述第二替换参数字段用于指示所述组中的多个缓存项的被替换属性。
本公开的至少一个实施例提供了一种处理器核,包括:如上任一实施例所述的指令缓存、微指令缓存和解码单元,其中,所述解码单元配置为:从所述指令缓存中的对象组中的对象缓存项中获取对象指令;对所述对象指令进行解码得到至少一条微指令;将所述至少一条微指令的每条微指令写入微指令缓存时,判断是否需要将所述对象组中的冗余标识字段修改为指向所述对象缓存项。
例如,在根据本公开的至少一个实施例的处理器核中,所述解码单元还包括缓存队列,由所述对象指令进行解码得到的至少一条微指令在被提供至所述微指令缓存之前被暂存在所述缓存队列中。
本公开的至少一个实施例提供了一种指令缓存的操作方法,该操作方法包括:获取对象指令数据;根据所述对象指令数据的地址信息,得到所述目标指令数据要填入所述指令缓存的多组中的对象组;获取所述对象组内分别对应于多个路的多个缓存项的有效性;响应于所述对象组内的多个缓存项都有效,获取所述对象组的冗余标识字段,响应于所述对象组的冗余标识字段指向所述对象组内的多个缓存项中的第一缓存项,将所述对象指令数据写入所述第一缓存项。
例如,根据本公开的至少一个实施例的操作方法,还包括:在所述对象指令数据写入所述第一缓存项之后将所述对象组的冗余标识字段复位。
例如,根据本公开的至少一个实施例的操作方法中,所述指令缓存采用LRU替换算法,所述方法还包括:在所述对象指令数据写入所述第一缓存项之后将所述第一缓存项的LRU字段设置为最高,且将所述对象组内当前有效的缓存项的LRU字段递减设置的步长。
例如,根据本公开的至少一个实施例的操作方法中,所述指令缓存采用PLRU替换算法,所述方法还包括:在所述对象指令数据写入所述第一缓存项之后基于所述第一缓存项对应的路序号更新所述对象组的PLRU字段的内容。
本公开的至少一个实施例提供了一种指令处理方法,包括:从指令缓存的多个组中的对象组中的对象缓存项中获取对象指令;对所述对象指令进行解码得到至少一条微指令;将所述至少一条微指令的每条微指令写入微指令缓存时,判断是否需要将所述对象组中的冗余标识字段修改为指向所述对象缓存项。
例如,根据本公开的至少一个实施例的指令处理方法中,判断是否需要将所述对象组中的冗余标识字段修改为指向所述对象缓存项,包括:根据所述至少一条微指令中每条微指令是否为所述对象缓存项的缓存块对应的最后一条微指令,来判断是否需要将所述对象组中的冗余标识字段修改为指向所述对象缓存项。
例如,根据本公开的至少一个实施例的指令处理方法中,判断所述至少一条微指令中的对象微指令的访问终止偏移加1的结果是否大于等于所述对象微指令的首地址偏移,如果是,则所述对象微指令为所述对象缓存项的缓存块对应的最后一条微指令,否则不是。
例如,根据本公开的至少一个实施例的指令处理方法中,对所述对象指令进行解码得到至少一条微指令之后,将所述至少一条微指令暂存在缓存队列中,并且在将所述至少一条微指令中每条微指令从所述缓存队列读出以写入到所述微指令缓存时,判断是否需要将所述对象组中的冗余标识字段修改为指向所述对象缓存项。
例如,根据本公开的至少一个实施例的指令处理方法中,将所述至少一条微指令暂存在缓存队列中时,还在所述缓存队列中保存所述对象缓存项在所述对象组中的路信息,以供需要将所述对象组中的冗余标识字段修改为指向所述对象缓存项时使用。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1示出了一种处理器核的流水线的示意图。
图2为一个处理器的基本结构划分示意图。
图3是一种CPU核的前端构成示例的示意图。
图4示出了在处理器核中对指令进行解码的操作的示意图。
图5示出了访问微指令缓存得到相应的微指令组数据的操作的示意图。
图6示出了4路-256组的组相联映射缓存的示意图。
图7为4路缓存中的LRU位的硬件结构的示意图。
图8示出了缓存中使用LRU算法的操作的流程示意图。
图9为4路缓存中的PLRU位的硬件结构的示意图。。
图10示出了PLRU位的数字与“路”的对应关系以及PLRU位的更新方式。
图11示出了缓存中使用PLRU算法的操作的流程示意图。
图12示出了更新PLRU数字遵循的原则。
图13示出了将解码后的微指令填充到微指令缓存中的操作的示意图,以及示出了示例性的微指令缓存硬件结构的示意图。
图14示出了根据本公开一实施例的4路指令缓存中的结构的示意图。
图15示出了图14所示的缓存中使用LRU算法的操作的流程示意图。
图16示出了根据本公开另一实施例的4路指令缓存中的结构的示意图。
图17示出了图16所示的缓存中使用PLRU算法的操作的流程示意图。
图18示出了对示例性的指令缓存中的冗余标识字段进行更新的流程示意图。
图19示出了根据本公开至少一实施例的判断微指令是否为对应的指令缓存块对应的最后一个微指令的流程图。
图20示出了示例性的指令缓存块对应的最后一个微指令的示意图。
图21示出了图20的指令缓存块对应的最后一个微指令的地址信息的示意图。
图22示出了“非冗余”的指令数据被替换的一个例子。
图23示出了图22所示情形的流程图。
图24为本公开至少一个实施例提供的一种电子装置的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另作定义,此处使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
通常将CPU中靠前的流水线步骤划分为前端,例如以五级流水线为例,用于取指阶段、译码阶段的模块被划为CPU前端;对应地,将CPU中靠后的流水线步骤划分为后端,例如以五级流水线为例,用于执行阶段、访存阶段和写回阶段的模块被划为CPU后端。
为了支持高运行频率,每一个流水阶段又可能包含多个(子)流水级(时钟周期)。虽然每个流水级执行有限的操作,但是这样每个时钟可以做到最短,通过提高CPU的运行频率来提高CPU核的性能。每个流水级也可以通过容纳更多条指令(即超标量(superscalar)技术)来进一步提高处理器核的性能。超标量指在一个周期内并行执行多条指令的方法,具有增加的指令级并行度,能够在一个周期内处理多条指令的处理器就被称为超标量处理器。例如,超标量处理器还可以进一步支持乱序执行(out-of-order execution)。乱序执行指CPU采用允许将多条指令不按程序规定的顺序分开发送给相应电路单元处理的技术。
处理器核在微架构内将每一条架构指令(instruction,简称“指令”)翻译为一条或者多条微指令(micro-op,uOp),每条微指令只执行有限的操作,这样可以保证每个流水级很短,以提高处理器核运行频率。比如一条内存读指令(load),可以被翻译为一条地址生成微指令以及一条内存读微指令,第二条微指令会依赖第一条微指令的结果,因此只有第一条微指令执行完后,第二条微指令才会开始执行。微指令包含多个微架构相关的域,用来在流水级间传递相关信息。
预测执行(Speculative Execution)是提高处理器性能的另一种技术。该技术在一条指令还未完成执行之前,执行它后面的指令。一个预测执行的技术是分支预测。如上所述,取指单元负责向处理器提供接下来要执行的指令。在取指阶段,除了需要取出多条指令,同时还需决定下个周期的取指地址,因此在该阶段判断是否存在分支指令、如果存在分支是否跳转(方向)以及目标地址。取指单元包括分支预测单元(分支预测器)来执行分支预测。处理器核前端的分支预测单元(分支预测器)对分支指令的跳转方向进行预测、预取、执行该方向的指令。另一个预测执行的技术是在前面的所有内存写指令的地址都获得前,执行一个内存读指令。
预测执行进一步提高了指令间并行度,从而大幅提高处理器核性能。当出现预测执行错误,比如发现分支预测错误,或者内存读指令前的某一条写指令改写了同一个地址,犯错指令其后的所有流水线中的指令需要被冲刷(或称为“清除”)(flush),然后程序跳转到出错点重新执行,以保证程序执行的正确性。
图2为一个处理器的基本结构划分示意图。处理器100包括至少一个CPU核(处理器核)和至少一级缓存,例如,该CPU核包括前端101和后端102,例如,该至少一级缓存包括设置在CPU核内的一级缓存(图中未示出)、CPU核外的二级缓存103,这里,二级缓存103作为一个单独的结构。
图3是一种CPU核的前端构成示例的示意图。该CPU核的前端101包括取指单元、解码单元和发射单元。该取指单元包括分支预测201和选择逻辑202;该解码单元包括指令缓存203、指令解码204、微指令缓存205和微指令队列206;发射单元207与微指令队列206连接。该CPU核同时具有指令缓存和微指令缓存,因此具有微架构优化。取指单元取得的指令地址通过分支预测201进行预测,以得到下一次要执行的指令地址。同时,指令地址通过选择逻辑202,以决定是否需要对该指令地址对应的指令进行指令解码。如果“是”,则走图3中左边的通路,需要对指令进行解码;如果“否”,则走图3中右边的通路,不需要对指令进行解码,而是访问微指令缓存得到相应的微指令组数据。
指令缓存203和微指令缓存205可以被视为一种并行缓存结构
图4示出了在处理器核中对指令进行解码的操作的示意图。结合图3,根据指令地址A,查询指令缓存203得到指令地址A对应的未解码的指令数据(例如一条或多条指令),再通过指令解码204将指令数据解码为多个微指令(这些微指令可以称为微指令组,例如包括微指令1、微指令2、微指令3等)。所得到的微指令组一方面被送到微指令队列206,以等待发射单元207将其分配、发射到该CPU核的后端中相应的执行单元以执行,另一方面在满足一定条件的情况下(比如该微指令组是常用的一组微指令)被保存到微指令缓存205,等待之后可能的再次访问。
图5示出了访问微指令缓存得到相应的微指令组数据的操作的示意图。结合图3,根据指令地址,访问微指令缓存205得到相应的微指令组数据(例如包括微指令1、微指令2、微指令3),将得到的微指令组数据直接送到微指令队列206,以等待发射单元207将其分配与发射到该CPU核的后端中相应的执行单元以执行。由于访问微指令缓存的延迟低,且减少了解码带来的功耗,选择逻辑202会尽可能选择访问微指令缓存205。
通常,缓存(Cache)的容量很小,缓存保存的内容只是主存内容的一个子集,且缓存与主存的数据交换是以块为单位的,主存的内存块与缓存的缓存块(cache line或cacheblock)的大小相同。为了把主存中的数据缓存到缓存中,必须应用某种函数把主存地址定位到缓存中,这称为地址映射。在将主存中的指令数据按这种映射关系缓存到缓存(指令缓存)中后,CPU核执行程序时,会将程序的指令中的主存地址变换成缓存地址。缓存的地址映射方式通常有直接映射、全相联映射和组相联映射。
每个缓存项包括缓存块,即对应于一个缓存块;更具体而言,每个缓存项还包括有效位(Valid)、标签(Tag)字段和数据字段等,其中,数据字段包括缓存块,用于存储被缓存的数据(例如指令数据或被操作数据),而标签字段存储被缓存的数据的内存地址的标签部分。
对于全相联映射,缓存中所有的缓存项被组织为多个组(set),处理器核使用内存地址访问缓存时,需要利用标签(tag)和逐一与缓存项中的标签进行对比,在命中时利用偏移(offset)在缓存块中定位到对应的字节。对于直接映射,缓存中所有的缓存项被组织为多个组,但是每个组内仅有一个缓存项,即仅有一“路”(way),处理器核使用内存地址访问缓存时,先通过内存地址的索引部分(index)找到相应的“组”,然后利用标签和与该组内的这个缓存项中的标签进行对比,在命中时利用偏移在缓存块中定位到对应的字节。对于组相联映射,缓存中所有的缓存项被组织为多个组,每个组内包括多个缓存项,组内各个缓存项各占据一“路”,即有多个路,处理器核使用内存地址访问缓存时,先通过内存地址的索引部分找到相应的“组”,然后在该“组”内,利用标签和保存在每一“路”中的缓存项中的标签进行对比,如果在某一路中找到相同的标签,则缓存查询命中,否则,则缓存查询缺失,在命中时利用偏移在缓存块中定位到对应的字节。
如上所述,对于全相联映射的情形,内存地址包括标签和偏移两部分而不包括索引;对于直接映射以及组相联映射的情形,内存地址包括标签、索引和偏移三部分。
图6示出了4路-256组的组相联映射缓存的示意图。图中的“地址”指内存地址,为了对该缓存进行访问,内存地址从高位到低位分别包括标签(tag)、索引(index)和偏移(offset)等部分。如图6所示,4个拥有相同索引的缓存项,每个缓存项包括最小缓存数据访问单元(缓存块),这4个缓存项被称组织为一“组”,该组内的4个缓存项分别通过4个通道(“路”)被访问,并且这4个通道的数据通过“4转1多路转换器”被选择输出。这里,索引就对应为“组”的编号,例如取值从0开始递增。对于图6,计算机系统的内存地址为32位,索引取内存地址的第4到第11位;标签取内存地址的第12到第31位;偏移取内存地址的第0到第3位,这表明该缓存中缓存项划分为256(28)组,组序号分别为0~255,而每个缓存块的大小的单位是16(24)字节。在每个缓存项包括用于保存的标签信息的标签字段,通常无需包括索引信息,因为索引通常与组的序号对应,因此通过寻址操作即可得到索引对应的组。
这里,假设对于CPU核仅提供有一级缓存,且内存拥有所需要的所有数据。处理器运行开始时,该一级缓存是空的,这时候处理器访问一级缓存,就会发生缓存缺失(miss)。此时,处理器需要进一步向内存发出访问请求,并回填数据给一级缓存。在对一级缓存进行回填时,首先计算索引,拥有相同索引的数据只能回填到相同的一“组”里。在同一“组”内,选择一个空的缓存项(即有效位为0的“路”)放置被回填的数据。在对缓存进行回填时,当这个“组”已经被填满,则需要通过替换策略挑出应该组中被替换的数据,将回填数据放置到将要被踢掉的数据所占的缓存项的位置。
替换策略(算法)决定缓存中同一“组”中各路缓存项中的数据应优先被新数据替换。一种替换策略是最久没被使用(Least Recently Used,LRU)算法。这种算法需要给每个数据保存一个数字(LRU位),使用LRU位决定同一组数据中的哪“路”数据优先被替换。
图7为4路缓存中的LRU位的硬件结构的示意图。如图7所示,同一“组”中的每一“路”都包括一个最近访问信息(即LRU位),并且该LRU位的数字越大,则代表最近被使用过的时间越近,并且当数字为0时,则代表该“路”数据最久未被使用,应该优先被替换。
图8示出了缓存中使用LRU算法的操作的流程示意图。如图8所示,处理器使用内存地址访问缓存,如果该访问命中缓存的某一组中的某一“路”数据,则将该“路”的LRU位置为最大值(例如3),该组内其余有效位为1的“路”的LRU位则被减1,例如在后续操作中一直减到0为止;如果访问缺失,则向下级缓存或者内存发送访问请求且等到被请求的数据返回。在从下级缓存或者内存写入(回填)被请求的新数据时,计算索引,找到要填入的“组”,确定该组中是否存在有效位为0的“路”。这里,需要优先替换该组中LRU位为0的“路”。如果存在有效位为0的“路”,则选择有效位为0的“路”写入新数据,将该路的有效位置1且同时将该路的LRU位置为最大值(例如3);如果不存在有效位为0的“路”,则选择LRU位为0的路作为被替换的路,在被替换的路中写入新数据,将该“路”的LRU位置为最大值(例如3),该组内其余有效位为1的“路”的LRU位则被减1,例如在后续操作中一直减到0为止。
另一种替换策略是伪最久未被使用算法(Pseudo Least Recently Used,PLRU)。这种算法是LRU算法的一种近似,其硬件开销更小。
图9为4路缓存中的PLRU位的硬件结构的示意图。如图9所示,每“组”缓存项包含一个访问信息(即PLRU位),访问信息的每个数字值对应一个即将被写入的“路”。
图10示出了PLRU位的数字与“路”的对应关系以及PLRU位的更新方式。图10中左上部分为PLRU位的二进制数字与“路”的对应关系。最上层灰色数字为PLRU位二进制数字的第一位,这个数字指向第二层的PLRU位的二进制数字的第二位和第三位(第二层灰色数字)。PLRU位二进制数字的第二位指向0路和1路(相当于同一“组”数据中的第一路和第二路),PLRU位二进制数字的第三位指向2路和3路(相当于同一“组”数据中的第三路和第四路)。对于所有灰色数字,当其为0时,指向下一层左边的节点,当其为1时,指向下一层右边的节点,指向关系为图中实线。从最上层节点链接到最下层“路”的不间断实线,就是这个PLRU位和“路”的指向关系(如图中粗实线)。图10中右上部分为PLRU位的二进制转换位十进制,以及十进制和“路”的对应关系。当PLRU位更新时,实线的出发节点的二进制数字发生0和1反转。反转过程如图10的下半部分所示,第一位和第二位PLRU数字都发生了反转,PLRU位由010转化为100。
图11示出了缓存中使用PLRU算法的操作的流程示意图。如图11所示,处理器使用内存地址访问缓存,如果该访问命中缓存的某一组中的某一“路”数据,则将该“路”代表的PLRU数字作为起点更新PLRU;如果访问缺失,则向下级缓存或者内存发送访问请求且等到被请求的数据返回。在从下级缓存或者内存写入(回填)被请求的新数据时,计算索引,找到要填入的“组”,例如选中PLRU代表的数字的“路”,将数据写入,之后更新该组的PLRU数字。并且,最后一步中更新PLRU数字遵循图12的原则。
图12示出了更新PLRU数字遵循的原则。如图12所示,每个PLRU十进制数,对应一个“路”,每次写入哪一“路”,PLRU数字则更新到下一“路”对应的PLRU十进制数。图12的对应关系根据图10的规则制定,不是所有的4路缓存的PLRU位都按照此种方式转换。
用于缓存的其他替换策略还包括随机算法(Random)、访问间隔预测算法(Re-Reference Interval Prediction,RRIP)等。虽然RRIP算法是一种比PLRU效果更好的算法,但硬件开销更大。
如上所述,对指令解码得到的微指令(例如常用的微指令)会被保存到微指令缓存205,如图3和图4所示。另一方面,刚被解码的指令在指令缓存中也刚被访问过,因此通常不会立刻被替换出指令缓存203。但是,由于由该指令解码得到的微指令组已经保存到了微指令缓存205,因此对该指令的访问将转向微指令缓存,则最近不会在指令缓存203访问该指令。这相当于在一段时间内指令缓存中保存了不会被访问到的冗余数据。
图13示出了将解码后的微指令填充到微指令缓存中的操作的示意图,并且该图13还示出了示例性的微指令缓存硬件结构的示意图。如图13所示,解码后的多条微指令(例如图中的微指令2-微指令12)填充到至少一个微指令缓存项(条目)中;并且,一条指令解码后的微指令数目通常小于一个微指令缓存条目可以容纳的微指令数目,所以填充过程需要对微指令重构(重组)以得到微指令组。解码后得到的多条微指令先被逐条填充到一个FIFO(先入先出队列)中。从FIFO出来的多条微指令将被用于构建满足微指令缓存填充条件的微指令组。
如图13所示,微指令2到微指令4恰好满足一组(微指令组)填充条件,则依次被填充到同一个微指令缓存项(例如图中的索引为63的组)中。在计算出这一微指令组的索引、标签、首地址偏移以及终止地址偏移之后,将这些微指令缓存的信息以及微指令组本身填入索引为63的微指令缓存项的组中。
Bit Map方式是一种利用一个二进制数字表示多个序号的方式。Bit Map的第x位数字为1则表示序号为x的信息有效,数字为0则表示序号为x的信息无效。以4路缓存为例,对应一组缓存项的Bit Map为0011时,则表示0路、1路信息有效,2路、3路信息无效。Bit方式只能用一个二进制数字表示一个序号。同样以4路缓存为例,Bit为0011(十进制数对应3)时,则表示3路信息有效,相应地0路、1路、2路信息无效。在表示信息个数较多时,Bit所用二进制数位数较少。比如32位信息,Bit方式需要6位,但是Bit Map方式需要32位。
如上所述,微指令缓存一般保存指令缓存中在一段时间中经常被用到的指令段,也即指令缓存和微指令缓存互有一定的冗余,而该冗余降低了两个缓存的有效容量。目前所有缓存替换算法都仅考虑单个缓存里面的现有内容,而未考虑微指令缓存与指令缓存的冗余特性。有鉴于此,本公开的至少一个实施例提出一种降低微指令缓存与指令缓存的冗余、提高指令缓存有效容量、最终提升CPU核的整体性能的指令缓存和指令缓存的操作方法。
在下面对于本公开一些实施例的示例性所述的描述中以LRU和PLRU替换算法为例,但是本公开的实施例不以此为限,同样可以用于其他算法,例如RRIP算法等。
本公开的至少一实施例提供了一种指令缓存,该指令缓存包括多个组,每个组包括分别对应于多个路的多个缓存项以及冗余标识字段,每个缓存项配置为存储对象指令数据以及对象指令数据的地址信息,冗余标识字段配置为用于标识多个缓存项中至少哪一项中存储的对象数据被认为是冗余的。
因此,根据本公开上述实施例的指令缓存为分组映射方式的缓存。“对象指令数据”用于当前被作为描述对象的指令数据,该指令数据的具体内容则可以根据操作时机等相应改变。例如,冗余标识字段可以采用Bit Map方式或Bit方式来表示序号,本公开的实施例对此不作限制。
例如,每个缓存项包括数据字段、标签(tag)字段和有效位。数据字段用于存储对象指令数据,标签字段用于存储对象指令数据的地址信息,有效位用于标识缓存项是否有效。
例如,每个缓存项还包括第一替换参数字段(例如用于LRU算法的LRU位),第一替换参数字段用于指示缓存项的被替换属性,或者,每个组还包括第二替换参数字段(例如用于PLRU算法的PLRU位),第二替换参数字段用于指示组中的多个缓存项的被替换属性。
本公开的至少一实施例提供了一种处理器核,该处理器核包括如上的任一实施例的指令缓存,还包括微指令缓存、解码单元等。该解码单元配置为:从指令缓存中的对象组中的对象缓存项中获取对象指令;对对象指令进行解码得到至少一条微指令;将至少一条微指令的每条微指令写入微指令缓存时,判断是否需要将对象组中的冗余标识字段修改为指向对象缓存项。
同样地,这里“对象指令”用于描述作为描述对象的指令,该指令的内容则根据操作或应用而可以改变。
例如,解码单元还可以包括缓存队列(例如,FIFO队列),由对象指令进行解码得到的至少一条微指令在被提供至微指令缓存之前被暂存在该缓存队列中。
此外,该处理器核还可以包括例如取指单元、执行单元、寄存器重名单元等。例如,取指单元从程序计数器(PC)取得的指令地址,根据该取得的指令地址例如从指令缓存获取需要执行的指令,并且该取指单元可以包括分支预测,因此取得的指令地址例如可以通过分支预测,以预测得到下一次要执行的指令地址。访问指令缓存得到指令地址对应的未解码的指令,解码单元将指令解码为例如多个微指令,该多个微指令通过一个缓存队列(例如先进先出队列),然后如果需要与其他指令解码得到的微指令重新编组得到微指令组。所得到的微指令组一方面被送到微指令队列,以等待发射单元将其分配与发射到处理器核的后端中的相应的执行单元以执行,另一方面在满足一定条件的情况下(比如该微指令组是常用的一组微指令)被保存到微指令缓存中缓存,等待之后可能的再次访问。
本公开的至少一实施例还提供了一种指令缓存的操作方法,该方法包括:获取对象指令数据;根据对象指令数据的地址信息,得到目标指令数据要填入指令缓存的多组中的对象组;获取对象组内分别对应于多个路的多个缓存项的有效性;响应于对象组内的多个缓存项都有效,获取对象组的冗余标识字段,响应于对象组的冗余标识字段指向对象组内的多个缓存项中的第一缓存项,将对象指令数据写入第一缓存项。
例如,该操作方法还包括:在对象指令数据写入第一缓存项之后将对象组的冗余标识字段复位。
例如,指令缓存采用LRU替换算法的情形,方法还包括:在对象指令数据写入第一缓存项之后将第一缓存项的LRU字段设置为最高,且将对象组内当前有效的缓存项的LRU字段递减设置的步长。
或者,指令缓存采用PLRU替换算法的情形,方法还包括:在对象指令数据写入第一缓存项之后基于第一缓存项对应的路序号更新对象组的PLRU字段的内容。
本公开的至少一实施例还提供了一种指令处理方法,该方法包括:从指令缓存的多个组中的对象组中的对象缓存项中获取对象指令;对对象指令进行解码得到至少一条微指令;将至少一条微指令的每条微指令写入微指令缓存时,判断是否需要将对象组中的冗余标识字段修改为指向对象缓存项。
例如,判断是否需要将对象组中的冗余标识字段修改为指向对象缓存项,包括:根据至少一条微指令中每条微指令是否为对象缓存项的缓存块对应的最后一条微指令,来判断是否需要将对象组中的冗余标识字段修改为指向对象缓存项。
例如,判断至少一条微指令中的对象微指令的访问终止偏移加1的结果是否大于等于对象微指令的首地址偏移,如果是,则对象微指令为对象缓存项的缓存块对应的最后一条微指令,否则不是。
例如,对对象指令进行解码得到至少一条微指令之后,将至少一条微指令暂存在缓存队列(FIFO)中,并且在将至少一条微指令中每条微指令从缓存队列读出以写入到微指令缓存时,判断是否需要将对象组中的冗余标识字段修改为指向对象缓存项。
例如,将至少一条微指令暂存在缓存队列(FIFO)中时,还在缓存队列中保存对象缓存项在对象组中的路(Way)信息,以供需要将对象组中的冗余标识字段修改为指向对象缓存项时使用。
本公开的实施例对于处理器核所采用的微架构类型不做限制,例如可以采用CISC微架构或RISC微架构,例如,可以采用X86类型的微架构、ARM类型的微架构、RISC-V类型的微架构等。
本公开的至少一实施例还提供了一种处理器(或处理装置),该处理器包括上述任一实施例的处理器核,该处理器可以为单核处理器(即包括单个上述处理器核)或者多核处理器(即包括多个上述处理器核)。
下面结合具体示例对本公开的实施例的指令缓存及操作方法、处理器核以及指令操作方法进行说明。
图14示出了根据本公开一实施例的4路指令缓存中的结构的示意图。如图14所示,该指令缓存包括多个组(256组),每一组包括4个缓存项,分别对应于4路,每个缓存项具有有效位和标签(tag)字段。同一“组”中的每一“路”都包括一个最近访问信息(即LRU位),例如该LRU位的数字越大,则代表最近被使用过的时间越近,并且当数字为0时,则代表该“路”数据最久未被使用,应该优先被替换。与图7所示的结构相比,该指令缓存为每组还提供了一个冗余标识字段,这里将其称为“dead位”,该冗余标识字段在图中的最右一列,其内容指示了将要优先被替换的“路”。例如,该“dead位”的初始值为0,即表示不存在需要被优先替换的路,如果为其他值则表示可以被优先替换的路,例如,值1表示第1路可以被优先替换。
图15示出了图14所示的缓存中使用LRU算法的操作的流程示意图。如图15所示,处理器使用内存地址访问缓存,如果该访问命中缓存的某一组中的某一“路”数据,则将该“路”的LRU位置为最大值(例如3),该组内其余有效位为1的“路”的LRU位则被减1,例如在后续操作中一直减到0为止;如果访问缺失,则向下级缓存或者内存发送访问请求且等到被请求的数据返回。在从下级缓存或者内存写入(回填)被请求的新数据时,计算索引,找到要填入的“组”,确定该组中是否存在有效位为0的“路”。这里,需要优先替换该组中LRU位为0的“路”。如果存在有效位为0的“路”,则选择有效位为0的“路”写入新数据,将该路的有效位置1且同时将该路的LRU位置为最大值(例如3);如果不存在有效位为0的“路”,则查询该组的dead位是否为“0”。如果dead位的值为0,则选择LRU位为0的路作为被替换的路,在被替换的路中写入新数据,将该“路”的LRU位置为最大值(例如3),该组内其余有效位为1的“路”的LRU位则被减1,例如在后续操作中一直减到0为止。反之,如果dead位的值为非0值,则表示对应的某一路为可以被优先替换,则选中dead位数字代表的路作为被替换的路,在被替换的路中写入新数据,将该“路”的LRU位置为最大值(例如3),同时将该组的dead位置为0(即复位为初始值),该组内其余有效位为1的“路”的LRU位则被减1,例如在后续操作中一直减到0为止。
与图8所示的流程相比,当没有有效位为0的路时(相当于该“组”数据已经被填满,没有无效数据),图14所示的新的流程先访问dead位;如果dead位不为0,则优先替换dead位数字所代表的“路”,如果dead位为0,则遵循LRU替换算法。
该新的流程优先替换出指令缓存中的冗余数据,避免非冗余数据的替换,增大了指令缓存的有效容量,同时还提高了命中率。具体地,以图14所示的情形为例,索引为125的组中的dead位指示的第4“路”保存了指令缓存中的冗余数据(该第4“路”中的指令数据已经被解码并将解码得到的微指令保存到了微指令缓存),而该组中的其余“路”例如保存的是非冗余数据。根据图8所示的流程,LRU算法应该替换索引为125中LRU位为0的这个“路”,也就是该“组”数据的第3“路”(虽然其中保持的指令数据是非冗余的)。假设这条“非冗余”指令数据在刚被替换之后就会被访问,这次访问就会导致缓存丢失。丢失意味着需要额外时间到下级缓存或者内存取数据,这带来了处理器的性能损失。但是,根据图14所示的新的流程,优先替换dead位代表的“路”,也就是第4“路”(保持的指令数据是冗余的)。按照上述假设,之后如果再访问第3“路”的数据,就可以直接命中缓存,不需要额外时间到下级缓存或者内存取数据,这带来了处理器性能的提升。
图16示出了根据本公开另一实施例的4路指令缓存中的结构的示意图。图16示出了根据本公开一实施例的4路指令缓存中的结构的示意图。如图14所示,该指令缓存包括多个组(256组),每“组”缓存项包含一个访问信息(即PLRU位),访问信息的每个数字值对应一个即将被写入的“路”,图中PLRU位的值为2,参考图10,这表示下一个即将被写入的“路”为第1路。与图9所示的结构相比,该指令缓存为每组还提供了一个冗余标识字段,同样地这里将其称为“dead位”,该冗余标识字段在图中的最右一列,其内容指示了将要优先被替换的“路”。例如,该“dead位”的初始值为0,即表示不存在需要被优先替换的路,如果为其他值则表示可以被优先替换的路,例如,值4表示第4路可以被优先替换。
图17示出了图16所示的缓存中使用PLRU算法的操作的流程示意图。如图17所示,处理器使用内存地址访问缓存,处理器使用内存地址访问缓存,如果该访问命中缓存的某一组中的某一“路”数据,则将该“路”代表的PLRU数字作为起点更新PLRU;如果访问缺失,则向下级缓存或者内存发送访问请求且等到被请求的数据返回。在从下级缓存或者内存写入(回填)被请求的新数据时,计算索引,找到要填入的“组”。然后,查询该组的dead位的值。如果dead位为0,则选中PLRU代表的数字的“路”,将数据写入,之后更新该组的PLRU数字;如果dead位为1,则选中该dead位数字代表的“路”,将数据写入,将dead位代表的数值作为起点更新PLRU数字,并且将该组的dead位置位为0。更新PLRU数字遵循图12所示的原则。
与图11所示的流程相比,图17所示的新的流程中,如果dead位不为0,则优先替换dead位数字代表的“路”,并按照图12找到被替换的“路”指向的下一“路”对应的PLRU的值,将PLRU位更新为这个值。
同样地,该新的流程优先替换出指令缓存中的冗余数据,避免非冗余数据的替换,增大了指令缓存的有效容量,同时还提高了命中率。以图16所示的情形为例,在指令缓存中,索引为125的组中的dead位指示的“路”(即第4路)保存了冗余数据(该“路”中的指令数据在解码之后已经被保存到了微指令缓存中),其余“路”保存了非冗余的指令数据。根据PLRU算法,索引值为125的组中应该替换的路为PLRU位中的值2所指示的路,根据图12的对应关系,即第1“路”数据(其中的指令数据为非冗余的)。假设这条“非冗余”的指令数据在刚被替换之后就被访问,那么后面这次访问就会导致缓存丢失。丢失意味着需要额外时间到下级缓存或者内存取数据,这带来了处理器的性能损失。但是,采用图17所示的新的流程优先替换dead位代表的“路”(其中的指令数据是冗余的),也就是第4“路”。按照上述假设,此时如果后面再访问第1“路”的数据(其中的指令数据为非冗余的),就可以直接访问命中,不需要额外时间到下级缓存或者内存取数据,这带来了处理器的性能提升。
下面对指令缓存中被选择的一组(对象组)的冗余标识字段(dead位)的更新过程进行说明。
图18示出了对示例性的指令缓存中的冗余标识字段进行更新的流程示意图。如图18所示,在对某一指令(“对象指令”)解码之后,将解码后的微指令(如图所示的微指令5到微指令8)随同该指令在指令缓存中所在组中的“路”编号(如图所示的2)填充到缓冲队列(例如FIFO队列)中,然后构建微指令组,并将微指令组填充到微指令缓存中。如图所示的微指令2到微指令4构成一个微指令组,且将被填充到微指令缓存中;又例如微指令5到微指令8可构成一个微指令组,且将被填充到微指令缓存中。
在将微指令组从缓冲队列填充到微指令缓存的过程中判断是否要更新指令缓存中对应组的冗余标识字段的值,即判断被填充的微指令组对应的指令在指令缓存中的缓存项(“对象缓存项”)中存储的指令数据是否变得冗余,如果是,则满足修改指令缓存中对应组的冗余标识字段的值的条件,需要进行对应的修改,否则不满足条件,不需要进行对应的修改。
例如,可以通过判断被填充的微指令(如图18所示当前被判断的是微指令5)是否为相应的缓存项(指令缓存块)中存储的指令数据对应的最后一个微指令,如果是,则表示该微指令对应的指令所在的缓存项将是冗余的,即与该微指令一同被传输的路编号(即2)指示的指令缓存的组中的第2路将是冗余的,因此将该指令缓存的组中的冗余标识字段的值设置为2(即dead位被设置为2)。
图19示出了根据本公开至少一实施例的判断微指令是否为对应的指令缓存块对应的最后一个微指令的流程图。如图19所示,将被判断的微指令的访问地址终止偏移+1,将得到的值与微指令的偏移进行比较,如果小于,则表示该微指令是最后一条微指令,反之则该微指令不是最后一条微指令。
图20示出了示例性的指令缓存块对应的最后一个微指令的示意图;图21示出了图20的指令缓存块对应的最后一个微指令的地址信息的示意图。
如图20所示,假设指令缓存中的缓存块(指令缓存块)的大小为64字节,即,表示偏移大小的低位共有6个位。需要说明的是,在指令缓存的缓存块中缓存的是指令数据,该指令数据被解码后可以得到1条或多条微指令,解码得到的1条或多条微指令将被缓存在微指令缓存的一个或多个微指令缓存块中。图20是出于简化和方便说明的目的,将指令缓存的缓存块与其中缓存的指令解码得到的1条或多条微指令进行重叠绘制,以方便理解解码所得到的微指令和指令边界(最后一个字节)的关系,图20并非表示在指令缓存块中缓存有微指令。例如,指令缓存块和微指令缓存块的大小相同。
在情况1中,指令缓存块缓存的指令数据对应地解码得到微指令1到微指令5,其中微指令5为这些解码得到的微指令中的最后一个微指令,微指令5的偏移(微指令5的第一个字节的偏移)为0x3A,而该微指令的访问地址终止偏移为0x3F,恰好在该指令缓存块的边界。这里将微指令5的访问地址终止偏移0x3F加1(+1),结果为0x0,小于该微指令5的偏移0x3F,因此判断微指令5是指令缓存块对应的最后一个微指令。
在情况2中,指令缓存块缓存的指令数据对应地解码得到有微指令6到微指令9,但是微指令9前一部分存储在一个微指令缓存块而后一部分存储在另一个微指令缓存块中,微指令9的偏移(微指令9的第一个字节的偏移)为0x3C,而该微指令的访问地址终止偏移为0x03。这里将微指令9的访问地址终止偏移0x3加1(+1),结果为0x04,小于该微指令的偏移0x3C,因此判断微指令9是指令缓存块对应的最后一个微指令。
在上述实施例中,使用指令缓存块对应的“最后一个微指令”作为dead位更新条件可以最大限度地避免非冗余数据的替换。根据图16可知,在判断某个微指令是否为某一指令缓存块缓存的指令对应地解码得到的“最后一个微指令”时,其前序微指令就已经或正在被填充到微指令缓存中。如果判断成功,说明这个指令缓存块对应的“最后一个微指令”也将要被填充到微指令缓存中,因此这个指令缓存块的指令数据对应的全部微指令都将被填充的微指令缓存中。这样指令缓存块被替换时,就最大程度保证了替换掉的是冗余的指令数据。另一方面,如果将dead位的更新条件修改为“中间某个微指令”,当满足这一dead位更新条件时,当前被判断的微指令的后续微指令还没有被填入到微指令缓存中。这样,对应的指令缓存块被替换时,就可能替换掉非冗余的指令数据。如果随后访问了指令缓存中被替换掉的非冗余部分,就会导致缓存访问丢失,这仍然损害了处理器性能。
图22示出了“非冗余”的指令数据被替换的一个例子;图23示出了图22所示情形的流程图。
图22示出了指令缓存块1、指令缓存块2和指令缓存块3,这3个指令缓存块是指令缓存块的示例,并非同时存在于指令缓存中,可以是先后被从例如内存(以内存块的形式)读入到指令缓存中。这里,微指令1到5对应的指令数据保存在指令缓存块1中,微指令6到9对应的指令数据保存在指令缓存块2中,微指令10到13对应的指令数据保存在指令缓存块3中。假设在程序运行过程中,指令访问顺序分别为指令缓存块1(微指令1到4)对应的内存块、指令缓存块3(微指令11到13)对应的内存块再到指令缓存块1(微指令5)对应的内存块。例如,灰色微指令为常用微指令,在解码后会被填充到微指令缓存中,而与它们同由指令缓存块1中的指令数据得到的微指令5并没有被填充到微指令缓存中。因此,如果替换掉指令缓存块1,就相当于同时丢弃了微指令5这个“非冗余”的指令数据,这样微指令5既不能由指令缓存得到,也没有缓存在微指令缓存中。如果程序需要访问微指令5,就会导致访问缓存(指令缓存或微指令缓存)丢失,需要从下级缓存或内存读入相应的指令数据并进行缓存回填,这导致处理器性能降低。
如图23所示,假设处理流程如下所述,程序访问指令缓存,获得指令缓存块1所对应的指令数据,对该指令缓存块1中的指令数据进行解码得到微指令1到微指令4,将常用的微指令1到4保存到微指令缓存中,同时更新当指令缓存块1在指令缓存中所在的组的dead位为指令缓存块1所在的“路”;此外,并行地微指令1到4被提供至发射单元以进行后续程序,之后程序跳转需要使用上面所示的指令缓存块3对应的指令数据,先访问指令缓存,但是对指令缓存访问缺失,因此从下级缓存或内存读入所需的指令数据,读入的指令数据进地址计算而需要存入之前的指令缓存块1所在的组中,通过该查询该组的dead位,将指令缓存块1的内容替换对应于读入的指令数据,由此得到指令缓存块3;之后,程序继续执行,然后又需要访问原来被替换的指令缓存块1中的指令数据中对应于微指令5的部分,则此时访问指令缓存将出现指令访问丢失的结果,因此需要再从下级缓存或内存读入所需的原来的指令缓存块1中缓存的指令数据并进行缓存回填,这导致处理器性能降低。
本公开的至少一实施例还提供了一种计算机程序的处理装置,包括处理单元和存储器,在该存储器上存储有一个或多个计算机程序模块,其中,所述一个或多个计算机程序模块被配置为由所述处理单元执行时实现如上述任一实施例的指令缓存的操作方法或任一实施例的指令处理方法。
本公开的至少一实施例还提供了一种非瞬时可读存储介质,其中,所述非瞬时可读存储介质上存储有计算机指令,其中,所述计算机指令被处理器执行时实现如上述任一实施例的指令缓存的操作方法或任一实施例的指令处理方法。
本公开的一些实施例还提供了一种电子装置,该电子装置包括上述任一实施例的处理装置或者可执行上述任一实施例的指令处理方法。
图24为本公开至少一个实施例提供的一种电子装置的示意图。本公开实施例中的电子装置可以包括但不限于诸如笔记本电脑、PDA(个人数字助理)、PAD(平板电脑)等的移动终端以及诸如台式计算机等固定终端。
图24示出的电子装置1000仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。例如,如图24所示,在一些示例中,电子装置1000包括本公开至少一实施例的处理装置(处理器),该处理装置可以根据存储在只读存储器(ROM)1002中的程序或者从存储装置1008加载到随机访问存储器(RAM)1003中的程序而执行各种适当的动作和处理,例如本公开实施例的计算机程序的处理方法。在RAM 1003中,还存储有计算机系统操作所需的各种程序和数据。处理器1001、ROM 1002以及RAM 1003通过总线1004被此相连。输入/输出(I/O)接口1005也连接至总线1004。
例如,以下部件可以连接至I/O接口1005:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置1006;包括诸如液晶显示器(LCD)、扬声器、振动器等的输出装置1007;包括例如磁带、硬盘等的存储装置1008;例如还可以包括诸如LAN卡、调制解调器等的网络接口卡的通信装置1009。通信装置1009可以允许电子装置1000与其他设备进行无线或有线通信以交换数据,经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1005。可拆卸存储介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储装置1008。
虽然图24示出了包括各种装置的电子装置1000,但是应理解的是,并不要求实施或包括所有示出的装置。可以替代地实施或包括更多或更少的装置。
例如,该电子装置1000还可以进一步包括外设接口(图中未示出)等。该外设接口可以为各种类型的接口,例如为USB接口、闪电(lighting)接口等。该通信装置1009可以通过无线通信来与网络和其他设备进行通信,该网络例如为因特网、内部网和/或诸如蜂窝电话网络之类的无线网络、无线局域网(LAN)和/或城域网(MAN)。无线通信可以使用多种通信标准、协议和技术中的任何一种,包括但不局限于全球移动通信系统(GSM)、增强型数据GSM环境(EDGE)、宽带码分多址(W-CDMA)、码分多址(CDMA)、时分多址(TDMA)、蓝牙、Wi-Fi(例如基于IEEE 802.11a、IEEE 802.11b、IEEE 802.11g和/或IEEE 802.11n标准)、基于因特网协议的语音传输(VoIP)、Wi-MAX,用于电子邮件、即时消息传递和/或短消息服务(SMS)的协议,或任何其他合适的通信协议。
对于本公开,还有以下几点需要说明:
(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上仅是本公开的示范性实施方式,而非用于限制本公开的保护范围,本公开的保护范围由所附的权利要求确定。
Claims (14)
1.一种指令缓存,包括多个组,
其中,每个所述组包括分别对应于多个路的多个缓存项以及冗余标识字段,
每个所述缓存项配置为存储对象指令数据以及所述对象指令数据的地址信息,所述冗余标识字段配置为用于标识所述多个缓存项中至少哪一项中存储的对象数据被认为是冗余的。
2.根据权利要求1所述的指令缓存,其中,每个所述缓存项包括数据字段、标签字段和有效位,
所述数据字段用于存储所述对象指令数据,所述标签字段用于存储所述对象指令数据的地址信息,所述有效位用于标识所述缓存项是否有效。
3.根据权利要求1所述的指令缓存,其中,每个所述缓存项还包括第一替换参数字段,所述第一替换参数字段用于指示所述缓存项的被替换属性,或者,
每个所述组还包括第二替换参数字段,所述第二替换参数字段用于指示所述组中的多个缓存项的被替换属性。
4.一种处理器核,包括:
如权利要求1-3任一所述的指令缓存;
微指令缓存;
解码单元,其中,所述解码单元配置为:
从所述指令缓存中的对象组中的对象缓存项中获取对象指令;
对所述对象指令进行解码得到至少一条微指令;
将所述至少一条微指令的每条微指令写入微指令缓存时,判断是否需要将所述对象组中的冗余标识字段修改为指向所述对象缓存项。
5.根据权利要求4所述的处理器核,其中,所述解码单元还包括缓存队列,由所述对象指令进行解码得到的至少一条微指令在被提供至所述微指令缓存之前被暂存在所述缓存队列中。
6.一种指令缓存的操作方法,包括:
获取对象指令数据;
根据所述对象指令数据的地址信息,得到所述目标指令数据要填入所述指令缓存的多组中的对象组;
获取所述对象组内分别对应于多个路的多个缓存项的有效性;
响应于所述对象组内的多个缓存项都有效,获取所述对象组的冗余标识字段,响应于所述对象组的冗余标识字段指向所述对象组内的多个缓存项中的第一缓存项,将所述对象指令数据写入所述第一缓存项。
7.根据权利要求6的操作方法,还包括:
在所述对象指令数据写入所述第一缓存项之后将所述对象组的冗余标识字段复位。
8.根据权利要求6的操作方法,其中,所述指令缓存采用LRU替换算法,所述方法还包括:
在所述对象指令数据写入所述第一缓存项之后将所述第一缓存项的LRU字段设置为最高,且将所述对象组内当前有效的缓存项的LRU字段递减设置的步长。
9.根据权利要求6的操作方法,其中,所述指令缓存采用PLRU替换算法,所述方法还包括:
在所述对象指令数据写入所述第一缓存项之后基于所述第一缓存项对应的路序号更新所述对象组的PLRU字段的内容。
10.一种指令处理方法,包括:
从指令缓存的多个组中的对象组中的对象缓存项中获取对象指令;
对所述对象指令进行解码得到至少一条微指令;
将所述至少一条微指令的每条微指令写入微指令缓存时,判断是否需要将所述对象组中的冗余标识字段修改为指向所述对象缓存项。
11.根据权利要求10所述的指令处理方法,其中,判断是否需要将所述对象组中的冗余标识字段修改为指向所述对象缓存项,包括:
根据所述至少一条微指令中每条微指令是否为所述对象缓存项的缓存块对应的最后一条微指令,来判断是否需要将所述对象组中的冗余标识字段修改为指向所述对象缓存项。
12.根据权利要求11所述的指令处理方法,其中,判断所述至少一条微指令中的对象微指令的访问终止偏移加1的结果是否大于等于所述对象微指令的首地址偏移,如果是,则所述对象微指令为所述对象缓存项的缓存块对应的最后一条微指令,否则不是。
13.根据权利要求11所述的指令处理方法,其中,对所述对象指令进行解码得到至少一条微指令之后,将所述至少一条微指令暂存在缓存队列中,并且在将所述至少一条微指令中每条微指令从所述缓存队列读出以写入到所述微指令缓存时,判断是否需要将所述对象组中的冗余标识字段修改为指向所述对象缓存项。
14.根据权利要求13所述的指令处理方法,其中,将所述至少一条微指令暂存在缓存队列中时,还在所述缓存队列中保存所述对象缓存项在所述对象组中的路信息,以供需要将所述对象组中的冗余标识字段修改为指向所述对象缓存项时使用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310673851.1A CN116627505A (zh) | 2023-06-08 | 2023-06-08 | 指令缓存及操作方法、处理器核及指令处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310673851.1A CN116627505A (zh) | 2023-06-08 | 2023-06-08 | 指令缓存及操作方法、处理器核及指令处理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116627505A true CN116627505A (zh) | 2023-08-22 |
Family
ID=87602467
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310673851.1A Pending CN116627505A (zh) | 2023-06-08 | 2023-06-08 | 指令缓存及操作方法、处理器核及指令处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116627505A (zh) |
-
2023
- 2023-06-08 CN CN202310673851.1A patent/CN116627505A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7707397B2 (en) | Variable group associativity branch target address cache delivering multiple target addresses per cache line | |
US9824016B2 (en) | Device and processing method | |
US6151662A (en) | Data transaction typing for improved caching and prefetching characteristics | |
US7437537B2 (en) | Methods and apparatus for predicting unaligned memory access | |
US9367471B2 (en) | Fetch width predictor | |
US5774710A (en) | Cache line branch prediction scheme that shares among sets of a set associative cache | |
CN112579175B (zh) | 分支预测方法、分支预测装置和处理器核 | |
CN110806900B (zh) | 一种访存指令处理方法及处理器 | |
US7769954B2 (en) | Data processing system and method for processing data | |
EP1974254B1 (en) | Early conditional selection of an operand | |
JP2002527798A (ja) | ストアアドレス生成およびユニバーサルな依存性ベクトルに基づくロードブロックのためのメカニズム | |
CN116414458A (zh) | 指令处理方法以及处理器 | |
CN115934170A (zh) | 预取方法及装置、预取训练方法及装置、存储介质 | |
US9342303B2 (en) | Modified execution using context sensitive auxiliary code | |
EP4020187A1 (en) | Segmented branch target buffer based on branch instruction type | |
EP4020167A1 (en) | Accessing a branch target buffer based on branch instruction information | |
CN116627505A (zh) | 指令缓存及操作方法、处理器核及指令处理方法 | |
JP2003510685A (ja) | キャッシュ置換方法および装置 | |
CN116627506A (zh) | 微指令缓存及操作方法、处理器核及指令处理方法 | |
CN112559389A (zh) | 存储控制装置、处理装置、计算机系统和存储控制方法 | |
CN113795823A (zh) | 处理器资源的可编程控制 | |
CN117289995B (zh) | 指令处理方法以及处理器 | |
EP4250098A1 (en) | Multi-indexed micro-operations cache for a processor | |
EP4276607A1 (en) | Affinity groups in a micro-operations cache of a processor | |
US20240118896A1 (en) | Dynamic branch capable micro-operations cache |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |