CN116627506A - 微指令缓存及操作方法、处理器核及指令处理方法 - Google Patents

微指令缓存及操作方法、处理器核及指令处理方法 Download PDF

Info

Publication number
CN116627506A
CN116627506A CN202310674269.7A CN202310674269A CN116627506A CN 116627506 A CN116627506 A CN 116627506A CN 202310674269 A CN202310674269 A CN 202310674269A CN 116627506 A CN116627506 A CN 116627506A
Authority
CN
China
Prior art keywords
instruction
cache
micro
micro instruction
offset
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
Application number
CN202310674269.7A
Other languages
English (en)
Inventor
赵春尧
胡世文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Haiguang Information Technology Co Ltd
Original Assignee
Haiguang Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Haiguang Information Technology Co Ltd filed Critical Haiguang Information Technology Co Ltd
Priority to CN202310674269.7A priority Critical patent/CN116627506A/zh
Publication of CN116627506A publication Critical patent/CN116627506A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本公开的实施例提供了一种微指令缓存及微指令缓存操作方法、处理器核及指令处理方法。该微指令缓存包括多个缓存项;每个缓存项包括数据字段、地址信息字段,并且每个缓存项配置为:响应于数据字段中存储的对象微指令组包括多个微指令,在地址信息字段中存储对象微指令组的各微指令的微指令起始地址偏移。该微指令缓存可以减少冗余微指令的保存,相应地增加了微指令缓存的有效容量,因此降低了微指令缓存的访问丢失率,提高了处理器性能。

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核仍然需要等待数十甚至上百个时钟周期,这将造成性能损失。
发明内容
本公开的至少一个实施例提供了一种微指令缓存,其包括多个缓存项,其中,每个所述缓存项包括数据字段、地址信息字段。每个所述缓存项配置为:响应于所述数据字段中存储的对象微指令组包括多个微指令,在所述地址信息字段中存储所述对象微指令组的各微指令的微指令起始地址偏移。
例如,在本公开的至少一个实施例的微指令缓存中,每个所述缓存项还包括标签字段和有效位,所述标签字段配置为用于存储所述数据字段中存储的对象微指令组的访问地址中的标签部分,所述有效位配置为用于存储所述数据字段中存储的对象微指令组的有效性信息。
例如,本公开的至少一个实施例的微指令缓存还包括选择逻辑处理电路,其中,所述选择逻辑处理电路配置为:比较所述微指令缓存接收的访问请求中的访问地址信息的标签部分与目标缓存项的标签字段的内容是否匹配以得到第一比较结果,比较所述访问请求中的访问地址信息的访问起始地址偏移部分与所述目标缓存项的地址信息字段存储的任一微指令起始地址偏移是否匹配以得到第二比较结果,并且根据所述第一比较结果和所述第二比较结果,确定所述访问请求是否访问命中或访问缺失。
例如,在本公开的至少一个实施例的微指令缓存中,每个所述缓存项还配置为:在所述地址信息字段中存储所述数据字段中存储的对象微指令组的微指令组终止地址偏移。所述选择逻辑处理电路还配置为:比较所述访问请求中的访问终止地址偏移部分与所述目标缓存项的地址信息字段保存的微指令组终止地址偏移是否匹配以得到第三比较结果,并且在根据所述第一比较结果和所述第二比较结果之外还根据所述第三比较结果,确定输出结果。
例如,在本公开的至少一个实施例的微指令缓存中,所述选择逻辑处理电路还配置为:响应于所述访问缺失且响应于所述第一比较结果为匹配以及所述起始访问地址偏移与小于所述目标缓存项中保存的微指令组中首个微指令的微指令起始地址偏移,将所述访问请求所针对的目标微指令组填充到所述微指令缓存中。
例如,在本公开的至少一个实施例的微指令缓存中,所述选择逻辑处理电路还配置为:将所述访问请求所针对的目标微指令组填充到所述微指令缓存中不同于所述目标缓存项的缓存项中,且将所述目标缓存项的有效位设置为表示无效,或者,将所述访问请求所针对的目标微指令组填充到所述目标缓存项中。
本公开的至少一个实施例提供了一种处理器核,其包括:解码单元以及微指令缓存,该微指令缓存包括多个缓存项,其中,每个所述缓存项包括数据字段、地址信息字段。所述解码单元配置为:获取待解码的对象指令;将所述对象指令解码以得到多个微指令,且记录所述多个微指令中每个的微指令起始地址偏移;至少部分基于所述多个微指令得到对象微指令组;将所述对象微指令组存储在微指令缓存的目标缓存项的数据字段中,在所述目标缓存项的地址信息字段中存储所述对象微指令组的各微指令的微指令起始地址偏移。
例如,在本公开的至少一个实施例的处理器核中,所述解码单元还配置为:在将所述对象指令解码以得到所述多个微指令时,还记录所述多个微指令中每个的微指令结束地址偏移。
例如,在本公开的至少一个实施例的处理器核中,所述解码单元还配置为:在所述目标缓存项的地址信息字段中存储所述对象微指令组的各微指令的微指令起始地址偏移时,还在所述目标缓存项的地址信息字段中存储所述对象微指令组的最后一条微指令的微指令结束地址偏移,作为所述对象微指令组的访问结束地址偏移。
例如,本公开的至少一个实施例的处理器核还包括指令缓存,其中,所述解码单元还配置为从所述指令缓存中接收待解码的所述对象指令。
例如,本公开的至少一个实施例的处理器核还包括取指单元,其中,所述取指单元配置为,响应于在所述指令缓存的指令缓存块中从起始地址至结束偏移之间取指时所述结束偏移小于被操作的所述指令缓存块的边界且结束位置为条件分支指令,将所述结束偏移延长至新的结束偏移,并将所述起始地址至所述新的结束偏移之间的指令部分作为所述对象指令提供至所述解码单元,所述新的结束偏移至多到被操作的所述指令缓存块的边界。
例如,在本公开的至少一个实施例的处理器核中,所述解码单元还配置为将所述起始地址至所述新结束偏移之间的指令部分作为所述对象指令解码,并且将所述起始地址至所述结束偏移之间的指令部分解码得到的微指令标注为非激进解码,将所述结束偏移和所述新的结束偏移之间的指令部分解码的得到的微指令标注为激进解码。
例如,本公开的至少一个实施例的处理器核还包括微指令队列,其中,所述解码单元还配置为将被标注为非激进解码的微指令提供至所述微指令队列以等待被发射,并且还将所述被标注为非激进解码的微指令以及所述被标注为激进解码的微指令都提供至所述微指令缓存。
本公开的至少一个实施例提供了一种微指令缓存的操作方法,其包括:在所述微指令缓存包括的多个缓存项中选择目标缓存项;在所述目标缓存项的数据字段中存储对象微指令组,其中,所述对象微指令组包括多个微指令,在所述目标缓存项的地址信息字段中存储所述对象微指令组的各微指令的微指令起始地址偏移。
例如,本公开的至少一个实施例的操作方法还包括:在所述目标缓存项的标签字段存储所述对象微指令组的访问地址中的标签部分;在所述目标缓存项的有效位存储所述对象微指令组的有效性信息。
例如,本公开的至少一个实施例的操作方法还包括:接收对于所述微指令缓存的访问请求;比较在所述访问请求中的访问地址信息的标签部分与所述目标缓存项的标签部分中存储的标签信息是否匹配以得到第一比较结果,比较所述访问请求的访问地址信息的访问起始地址偏移部分与所述目标缓存项的地址信息字段中存储的任一微指令起始地址偏移相匹配以得到第二比较结果,根据所述第一比较结果和所述第二比较结果,确定所述访问请求访问命中,否则确定为访问缺失。
例如,本公开的至少一个实施例的操作方法还包括:在所述目标缓存项的地址信息字段中存储所述对象微指令组的微指令组终止访问地址偏移;还比较访问请求地址中的访问终止地址偏移部分与所述目标缓存项的地址信息字段保存的微指令组终止地址偏移是否匹配以得到第三比较结果,并且在根据所述第一比较结果和所述第二比较结果之外还根据所述第三比较结果,确定输出结果。
例如,本公开的至少一个实施例的操作方法还包括:响应于所述访问缺失且响应于所述第一比较结果为匹配且所述起始访问地址偏移与小于所述目标缓存项中保存的所述对象微指令组中首个微指令的微指令起始地址偏移,将所述访问请求所针对的目标微指令组填充到所述微指令缓存中。
例如,在本公开的至少一个实施例的操作方法中,将所述访问请求所针对的目标微指令组填充到所述微指令缓存中,包括:将所述访问请求所针对的目标微指令组填充到所述微指令缓存中不同于所述目标缓存项的缓存项中,且将所述目标缓存项的有效位设置为表示无效;或者,将所述访问请求所针对的目标微指令组填充到所述目标缓存项中。
本公开的至少一个实施例提供了一种指令处理方法,其包括:获取待解码的对象指令;将所述对象指令解码以得到多个微指令,且记录所述多个微指令中每个的微指令起始地址偏移;至少部分基于所述多个微指令得到对象微指令组;将所述对象微指令组存储在微指令缓存的目标缓存项的数据字段中,在所述目标缓存项的地址信息字段中存储所述对象微指令组的各微指令的微指令起始地址偏移。
例如,在本公开的至少一个实施例的指令处理方法中,在将所述对象指令解码以得到所述多个微指令时,还记录所述多个微指令中每个的微指令结束地址偏移。
例如,在本公开的至少一个实施例的指令处理方法中,在所述目标缓存项的地址信息字段中存储所述对象微指令组的各微指令的微指令起始地址偏移时,还在所述目标缓存项的地址信息字段中存储所述对象微指令组的最后一条微指令的微指令结束地址偏移,作为所述对象微指令组的访问结束地址偏移。
例如,在本公开的至少一个实施例的指令处理方法中,所述获取待解码的所述对象指令,包括:从指令缓存中获取所述对象指令。
例如,本公开的至少一个实施例的指令处理方法还包括:响应于在所述指令缓存的指令缓存块中从起始地址至结束偏移之间取指时所述结束偏移小于被操作的所述指令缓存块的边界且结束位置为条件分支指令,将所述结束偏移延长至新的结束偏移,并将所述起始地址至所述新的结束偏移之间的指令部分作为所述对象指令提供至所述解码单元,其中,所述新的结束偏移至多到被操作的所述指令缓存块的边界。
例如,在本公开的至少一个实施例的指令处理方法中,将所述对象指令解码以得到多个微指令,包括:将所述起始地址至所述新结束偏移之间的指令部分作为所述对象指令解码,并且将所述起始地址至所述结束偏移之间的指令部分解码得到的微指令标注为非激进解码,将所述结束偏移和所述新的结束偏移之间的指令部分解码的得到的微指令标注为激进解码。
例如,在本公开的至少一个实施例的指令处理方法中,被标注为非激进解码的微指令被提供至微指令队列以等待被发射,并且所述被标注为非激进解码的微指令以及所述被标注为激进解码的微指令被都提供至所述微指令缓存。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1示出了一种处理器核的流水线的示意图。
图2为一个处理器的基本结构划分示意图。
图3是一种CPU核的前端构成示例的示意图。
图4示出了在处理器核中对指令进行解码的操作的示意图。
图5示出了访问微指令缓存得到相应的微指令组数据的操作的示意图。
图6示出了4路-256组的组相联映射缓存的示意图。
图7为4路缓存中的LRU位的硬件结构的示意图。
图8示出了缓存中使用LRU算法的操作的流程示意图。
图9示出了对指令缓存中缓存块进行部分解码的操作的示意图。
图10示出了将解码后的微指令填充到微指令缓存中的操作的示意图。
图11示出了对于指令缓存和微指令缓存的访问命中的区别的示意图。
图12示出了微指令缓存命中的三种示例性的情况。
图13示出了微指令缓存缺失的两种示例性的情况。
图14为微指令缓存某个“路”的硬件结构以及命中机制的示意图。
图15为根据本公开至少一实施例的示例性微指令缓存的示意图。
图16示出了根据本公开至少一实施例的示例性微指令缓存操作方法的流程图。
图17到图19示出了与图16中的步骤对应的示例性示意图。
图20示出了示例性的“激进解码”操作的示意图。
图21示出了示例性的“激进填充”操作的示意图。
图22示出了根据本公开至少一实施例的处理器核的示意图。
图23为本公开至少一个实施例提供的一种电子装置的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另作定义,此处使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
通常将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中右边的通路,不需要对指令进行解码,而是访问微指令缓存得到相应的微指令组数据。
图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为止。
图9示出了对指令缓存中缓存块进行部分解码的操作的示意图。由于在指令解码过程中,可能不是恰好从存储指令的缓存块(Cache Line或Cache Block)的第一个字节开始,也可能不是恰好到这个缓存块的最后一个字节结束。所以,指令解码204可能只解码存储指令数据的缓存块中的部分内容;而且,可能起始地址不对齐(不是缓存块第一个字节),也可能结束地址不对齐(不是缓存块的最后一个字节),也可能两者都不对齐(如图9所示)。解码后得到的微指令组(如图9所示的示例性微指令组包括微指令2到微指令4),如果为常用微指令组,则会被填入到微指令缓存205中,以备后续使用。
继续参考图9,由解码起始地址计算得到标签和首地址偏移(即被解码部分的第一个字节的偏移),由解码起始地址和结束偏移计算得到终止地址偏移。如果解码结束位置等于结束偏移,则终止地址偏移就等于结束偏移,或者,如果解码结束位小于或等于结束偏移,则终止地址偏移就等于被解码的部分的最后一个字节的偏移。标签、首地址偏移以及终止地址偏移这三个信息将被保存,例如随同微指令组一同保存到微指令缓存205中。
图10示出了将解码后的微指令填充到微指令缓存中的操作的示意图,并且该图10还示出了示例性的微指令缓存硬件结构的示意图。如图10所示,解码后的多条微指令(例如图中的微指令2-微指令12)填充到至少一个微指令缓存项(条目)中;并且,一条指令解码后的微指令数目通常小于一个微指令缓存条目可以容纳的微指令数目,所以填充过程需要对微指令重构(重组)以得到微指令组。解码后得到的多条微指令先被逐条填充到一个FIFO(先入先出队列)中。从FIFO出来的多条微指令将被用于构建满足微指令缓存填充条件的微指令组。
如图10所示,微指令2到微指令4恰好满足一组(微指令组)填充条件,则依次被填充到同一个微指令缓存项(例如图中的索引为63的组)中。在计算出这一微指令组的索引、标签、首地址偏移以及终止地址偏移之后,将这些微指令缓存的信息以及微指令组本身填入索引为63的微指令缓存项的组中。
处理器在查询指令缓存时的访问命中机制与在查询微指令缓存时的访问命中机制不同。
图11示出了对于指令缓存和微指令缓存的访问命中的区别的示意图。假设指令缓存的缓存块的大小和微指令缓存的缓存块的大小为16字节,指令缓存块保存了完整的16字节数据,然而微指令缓存中的存储的微指令组则可能只占据了微指令缓存块的一部分,如图11的虚线部分所示。因此,对于指令缓存,访问地址只要指向指令缓存块中的任一字节,就可以命中指令缓存块;但是,对于微指令缓存,访问请求中的访问地址必须是指向微指令组的第一个字节的情形,才可以命中微指令缓存块。
图12示出了微指令缓存命中的三种示例性的情况;图13示出了微指令缓存缺失的两种示例性的情况。在图12和图13中,每种情况中第一个向下的箭头是起始访问地址,第二个箭头是结束访问地址,并且图13中第二个箭头均为虚线,代表结束访问地址可以在起始访问地址后的任意微指令结束位置;灰色填充的部分(例如微指令2、微指令3、微指令4)为目标微指令组保存的内容,虚线未填充部分为其他虚拟微指令所在位置。
对于图12中的情况1,起始访问地址=微指令组第一个字节地址,结束访问地址=微指令组最后一个字节的地址,则此时访问命中。
对于图12中的情况2,起始访问地址=微指令组第一个字节地址,结束访问地址<微指令组最后一个字节的地址,则此时访问部分命中(对微指令缓存而言)。
对于图12中的情况3,起始访问地址=微指令组第一个字节地址,结束访问地址>微指令组最后一个字节地址时,则此时访问命中。另一方面,新的访问地址从微指令5的第一个字节开始,这次访问则被认为微指令缓存访问缺失。
对于图13中的情况4,起始访问地址<微指令组第一个字节地址,则访问缺失。
对于图13中的情况5,起始访问地址>微指令组第一个字节地址,则访问缺失。
图14为微指令缓存某个“路”的硬件结构以及命中机制的示意图。如图14所示,微指令缓存的每个微指令缓存项中保存了有效位、标签(假设为0xFFFF_F)、首地址偏移、终止地址偏移以及微指令组数据;该微指令缓存还包括例如3个比较器、两个与门以及选择逻辑(即选择逻辑处理电路)。当通过访问地址中的索引定位到某一微指令缓存项,该微指令缓存项有效、该访问地址中的标签和该微指令缓存项中保存的标签匹配并且该访问地址中的偏移和微指令缓存中保存的首地址偏移匹配时(即左侧2个比较器的结果均为真且通过两个与门进行逻辑运算),则访问命中,否则,访问缺失。对于选择逻辑,命中与否决定了是否要提取微指令缓存项中保存的数据,终止地址偏移的对比(右侧1个比较器)决定了数据要取多长。如果访问命中且访问地址的终止偏移大于或等于微指令缓存中保存的终止地址偏移,则选择逻辑输出数据为微指令缓存保存的完整微指令组。如果访问命中且访问地址的终止偏移小于微指令缓存中保存的终止地址偏移,则选择逻辑输出数据为部分微指令组(从首地址偏移到访问地址终止偏移之间的微指令)。如果微指令缓存丢失,则需要重新访问指令缓存。这个过程增加了额外的时间。
在图13的情况4和情况5中,微指令缓存需要保存新的微指令组才能满足命中条件。对情况4,新的微指令组必须从微指令1开始,包含了微指令1到微指令4;对应地,原有微指令组也包含了微指令2到微指令4。因此,微指令2到微指令4为冗余微指令。对情况5,新的微指令组必须从微指令3开始,包含了微指令3到微指令4;对应地,原有微指令组包含了微指令2到微指令4。因此,微指令3到微指令4为冗余微指令。在上述两种情况中,冗余微指令组占据了额外的微指令缓存的空间,相当于微指令缓存的有效空间减小了。如果冗余微指令组挤占了非冗余微指令组本应占据的微指令缓存空间,就可能使这组非冗余微指令组的访问发生微指令缓存访问缺失。
本公开的至少一实施例提供一种新的微指令缓存以及相应的新的微指令缓存命中机制,该命中机制考虑了在微指令缓存项中存储的微指令组的每条微指令的首地址偏移,可以减少冗余微指令的保存,相应地增加了微指令缓存的有效容量,因此降低了微指令缓存的访问丢失率,提高了处理器性能。
本公开的至少一实施例提供一种微指令缓存,该微指令缓存包括多个缓存项;每个缓存项包括数据字段、地址信息字段,并且每个缓存项配置为:响应于数据字段中存储的对象微指令组包括多个微指令,在地址信息字段中存储对象微指令组的各微指令的微指令起始地址偏移。
例如,每个缓存项还包括标签(tag)字段和有效位(valid),该标签字段配置为用于存储数据字段中存储的对象微指令组的访问地址中的标签部分,该有效位配置为用于存储数据字段中存储的对象微指令组的有效性信息。
例如,根据本公开至少一实施例的微指令缓存的地址映射方式可以为直接映射、全相联或组相联映射,虽然下面的具体示例采用组相联映射进行描述,但是本公开的实施例对地址映射方式不作限制。
例如,根据本公开的至少一实施例的微指令缓存还包括选择逻辑处理电路(或简称为“选择逻辑”),其中,该选择逻辑处理电路配置为:比较微指令缓存接收的访问请求中的访问地址信息的标签部分与目标缓存项的标签字段的内容是否匹配以得到第一比较结果,比较访问请求中的访问地址信息的访问起始地址偏移部分与目标缓存项的地址信息字段存储的任一微指令起始地址偏移是否匹配以得到第二比较结果,并且根据第一比较结果和第二比较结果,确定访问请求是否访问命中或访问缺失。
例如,根据本公开的至少一实施例中,每个缓存项还配置为:在地址信息字段中存储数据字段中存储的对象微指令组的微指令组终止地址偏移;对应地,选择逻辑处理电路还配置为:比较访问请求中的访问终止地址偏移部分与目标缓存项的地址信息字段保存的微指令组终止地址偏移是否匹配以得到第三比较结果,并且在根据第一比较结果和第二比较结果之外还根据第三比较结果,确定访问请求是否访问命中或访问缺失。
图15为根据本公开至少一实施例的示例性微指令缓存的示意图,该示例性微指令缓存为一种4路微指令缓存。
具体地,如图15所示,该示例性微指令缓存中同一“组”包括4个(“路”)拥有相同索引的缓存项,每个缓存项包括缓存块,该组内的4个缓存项分别通过4个通道访问。如图15所示,为了对该微指令缓存进行访问,访问请求中的内存地址从高位到低位分别包括标签、索引和偏移等。并且,该内存地址为32位,索引取内存地址的第4位到第11位;标签取内存地址的第12位到第31位;偏移取内存地址的第0位到第3位。这表明该微指令缓存中缓存项划分为256(28)组,组序号分别为0~255,而每个缓存块的大小的单位是16(24)字节。
如上所述,该示例性的微指令缓存包括256个组,每个组对应的索引值分别为0~255,每组包括4个缓存项;每个缓存项包括数据字段、地址信息字段、标签(tag)字段和有效位。例如,缓存项的数据字段的大小为单个缓存块,用于存储对应的数据,这里为指令数据,即微指令组,对应于作为描述对象的某个具体微指令组,在本文简称“对象微指令组”,对象微指令组包括至少一个微指令,即包括一个或多个微指令;缓存项的地址信息字段用于存储该缓存项中存储的对象微指令组的地址信息;缓存项的标签字段配置为用于该缓存项中存储的对象微指令组的访问地址中的标签部分;缓存项的有效位配置为用于存储该缓存项中存储的对象微指令组的有效性信息。
并且,当缓存项的数据字段中存储的对象微指令组包括多个微指令时,即,响应于缓存项的数据字段中存储的对象微指令组包括多个微指令,在该缓存项的地址信息字段中存储对象微指令组的各微指令的微指令起始地址偏移。微指令起始地址偏移指代对应的微指令的内存地址中对应于偏移的低位部分。
例如,如图15所示,索引为63的“组”中的一个缓存项的数据字段中存储的微指令组包括4个微指令(即第一个微指令至第四个微指令),在该缓存项的地址信息字段存储了微指令组的首地址偏移(0x3)以及第二个微指令的微指令起始地址偏移(0x7)、第三个微指令的微指令起始地址偏移(0x9)、第四个微指令各自的微指令起始地址偏移(0xB)。这里,微指令组的首地址偏移(0x3)就是该微指令组中第一个微指令的微指令起始地址偏移。同时,该缓存项的标签为0XFFFF_F,且该缓存项的有效位为1(表示当前缓存项有效,反之0则表示无效)。
需要指出的是,微指令组的首地址偏移未必等于该微指令组所在缓存项的缓存行中的第一个字节的地址偏移,而微指令组的结束地址偏移也未必等于该微指令组所在缓存项的缓存行中最后一个字节的地址偏移。
本公开的实施例对于每个缓存项中存储的微指令组包括的微指令的个数没有限制,例如可以根据构成该微指令组的微指令各自的大小进行判断或选择,例如,如果相比图15的示例中示出的缓存项,某个缓存项中存储的微指令组包括了较长的微指令,则该缓存组可以包括更少的(例如3个)微指令;又或者,如果相比图15的示例中示出的缓存项,某个缓存项中存储的微指令组包括了更短的微指令,则该缓存组可以包括更多的(例如5个)微指令。下面以每个缓存项中存储的微指令组可以包括最多4个微指令为例进行说明。
如图15所示,该示例性的微指令缓存还包括选择逻辑处理电路,例如,该选择逻辑处理电路包括多个比较器、多个与门、多个或门以及选择逻辑处理电路(也简称“选择逻辑”)。例如,选择逻辑处理电路可以通过数字电路实现。
例如,如图15所示,在该多个比较器从左到右分别为第一比较器至第六比较器。这里,第一比较器用于比较微指令缓存接收的访问请求中的访问地址信息的标签部分与目标缓存项的标签字段的内容是否匹配以得到第一比较结果,如果匹配,则第一比较结果为“1”,否则为“0”;第二比较器至第五比较器用于比较访问请求中的访问地址信息的访问起始地址偏移部分与目标缓存项的地址信息字段存储的任一微指令起始地址偏移是否匹配以得到第二比较结果,如果任一匹配,则第二比较结果为“1”,否则为“0”。
具体而言,例如,第二比较器至第五比较器根据当前被访问的目标缓存项的地址信息字段存储的微指令起始地址偏移的数量被相应地激活,并分别输出多个第二子比较结果。例如,当目标缓存项的地址信息字段存储的微指令起始地址偏移的数量为2时(即对象微指令组包括2个微指令时),则第二比较器和第三比较器分别用于比较访问请求中的访问地址信息的访问起始地址偏移部分与目标缓存项的地址信息字段存储的第一个微指令的微指令起始地址偏移和第二个微指令的微指令起始地址偏移是否匹配,且得到2个第二子比较结果,且对于第二比较器和第三比较器中每个,如果匹配,则相应的第二子比较结果为“1”,否则为0。例如,当目标缓存项的地址信息字段存储的微指令起始地址偏移的数量为4时(即对象微指令组包括4个微指令时),则第二比较器至第五比较器分别用于比较访问请求中的访问地址信息的访问起始地址偏移部分与目标缓存项的地址信息字段存储的第一个微指令的微指令起始地址偏移至第四个微指令的微指令起始地址偏移是否匹配,且得到4个第二子比较结果,且对于第二比较器至第五比较器中每个,如果匹配,则相应的第二子比较结果为“1”,否则为0。
第一比较结果分别与第二比较器至第五比较器输出的第二子比较结果(如果某个比较器没有被激活,则无结果输出)通过4个与门进行“与”运算,得到4个第一运算结果,该4个第一运算结果与目标缓存项的有效位(“1”表示有效而“0”表示无效)再通过4个与门分别进行与运算得到4个第二运算结果,将该4个第二运算结果通过多个或门进行“或”运算,得到第三运算结果,由第三运算结果确定是否访问命中,例如第三运算结果为“1”则表示访问命中,为“0”则表示访问缺失。
因此,本公开的至少一实施例提供了对应于上述微指令缓存的新的命中机制,该新的命中机制,除了将访问请求中的起始访问地址偏移与缓存项中存储的微指令组的第一个微指令的微指令起始地址偏移进行比较之外,还会与微指令组中的其他微指令(例如在微指令组包括4个微指令的情形,第二、第三以及第四微指令)的微指令起始地址偏移进行比较。如果访问请求中的访问地址的标签和微指令缓存的缓存项中存储的标签匹配,且访问请求中的访问地址中的起始访问地址偏移和微指令缓存中保存的第一、第二、第三以及第四个微指令的微指令起始地址偏移中任一偏移匹配时,就被认为访问命中。
并且,不同的微指令起始地址偏移导致的访问命中会使得微指令组输出的微指令的个数不同。例如,第二个微指令的微指令起始地址偏移被匹配而导致访问命中,则会使得从对象微指令组中从第二个微指令开始输出,这与如图14等所示的原有命中机制所要求的必须从对象微指令组中的第一个微指令输出不同。另一方面,微指令组输出的微指令的个数还取决于访问请求中的访问地址包括的访问终止地址偏移。
例如,在图15所示的示例中,访问请求还包括访问终止地址偏移,而缓存项的地址信息字段还存储有该缓存项中存储的对象微指令组的终止地址偏移。
4个第二运算结果被提供至选择逻辑处理电路进行处理,例如选择逻辑处理电路在访问命中的情况下确定是对象微指令组中的哪个微指令的微指令起始地址偏移与访问请求中的访问地址信息的访问起始地址偏移部分相匹配,并且根据被匹配上的微指令起始地址偏移和访问请求中的访问终止地址偏移确定从目标缓存项中读取的微指令,即将被匹配上的微指令起始地址偏移和访问请求中的访问终止地址偏移之间的微指令输出。
又例如,在该多个比较器中,第六比较器用于比较访问请求中的访问终止地址偏移与目标缓存项的地址信息字段保存的微指令组终止地址偏移是否匹配,以得到第三比较结果,如果前者小于等于后者,则第三比较结果为“1”,表示在访问命中的情况下为例如图12所示的情况1或2,即命中或部分命中且不需要继续操作,反之,则为如图12所示的情况3,即虽然命中但是之后还需要继续操作以访问本次操作未覆盖的指令部分(即微指令5)。因此,上述第三比较结果也被提供至选择逻辑处理电路进行处理,例如由选择逻辑处理电路结合前述根据第一比较结果和第二比较结果得到的4个第二运算结果,确定输出结果,即确定对象微指令组中要输出的微指令以及是否需要继续操作。
例如,在根据本公开的至少一实施例的微指令缓存中,选择逻辑处理电路还配置为:响应于访问缺失且响应于第一比较结果为匹配以及起始访问地址偏移与小于目标缓存项中保存的微指令组中首个微指令的微指令起始地址偏移,将访问请求所针对的目标微指令组填充到微指令缓存中。
例如,在根据本公开的至少一实施例的微指令缓存中,选择逻辑处理电路还配置为:将访问请求所针对的目标微指令组填充到微指令缓存中不同于目标缓存项的缓存项中,且将目标缓存项的有效位设置为表示无效,或者,将访问请求所针对的目标微指令组填充到目标缓存项中。
根据本公开的至少一实施例的微指令缓存可以克服前述的微指令缓存的冗余的情况。
例如,对于在图13中的情况4,在新的命中机制下,长的微指令组(即包括微指令1到微指令4的微指令组)可以保证短的微指令组(即包括微指令2到微指令4的微指令组)的访问命中,因此可以让短的微指令组被优先替换出微指令缓存,由此可以避免微指令缓存中的冗余。例如,在本公开的至少一实施例中,在存在长的微指令组包含短的微指令组的情形时,可以将短的微指令组所在缓存项无效,即设置该缓存项的有效位为0,由此使得基于微指令缓存的替换算法来使得该缓存项被优先替换。
对于图13中的情况5,由于新的命中机制已经保证了短的微指令组(即包括微指令3到微指令4的微指令组)在访问时通过访问长的微指令组的方式来实现访问命中,因此本身也不再需要保存短的微指令组(不再出现由于访问缺失而单独在微指令缓存中填充该短的微指令组的情形)。
另一方面,当微指令缓存中已经存储有短的微指令组而当前需要访问长的微指令组(包含短的微指令组)时,那么对于访问长的微指令组的访问请求则出现访问缺失,在访问缺失的情况下则可以将要访问的长的微指令组读入到微指令缓存中,此时可以将之前已经存储有短的微指令组的缓存项无效(即将对应的缓存项的有效性置位为“0”)以使得该缓存项可以更快地被替换,或者直接可以将长的微指令组写入到之前已经存储有短的微指令组的缓存项中以覆盖短的微指令组。
图16示出了根据本公开至少一实施例的示例性微指令缓存操作方法的流程图,图17到图19示出了与图16中的步骤对应的示例性示意图。下面结合图16到图19说明根据本公开至少一实施例的示例性微指令缓存操作方法。
根据图16的步骤1601以及图17所示,当前微指令缓存中例如索引为125的组中的一个缓存项中存储的微指令组(短的微指令组)包括微指令2到微指令4,且该微指令组中的第一个微指令(即微指令2)的微指令起始地址偏移(即该微指令组的首地址偏移)为0x7、微指令3的微指令起始地址偏移为0x9、微指令4的微指令起始地址偏移为0xB,相应的微指令组的终止地址偏移为0xC。
根据图16的步骤1602和步骤1603,访问请求要求访问包括微指令1到微指令4的微指令组(长的微指令组),但是当前的微指令缓存中并没有存储有该微指令组的缓存项,且访问前述索引为125的缓存项导致访问缺失。
根据图16的步骤1604,由于访问缺失,因此到指令缓存中读取所需要的指令并将该指令解码得到长的微指令组(包括微指令1到微指令4)。
根据图16的步骤1605以及图18所示,将该长的微指令组读入到微指令缓存中,并填充到例如索引为63的组中的一个缓存项中,并且将该缓存项的有效位置位为1(有效)。
根据图16的步骤1606以及图19所示,在将长的微指令组填充到索引为63的组中的一个缓存项中之后,将索引为125的组中存储短的微指令组的缓存项的有效位置位为0(无效)。
这样上述示例就在微指令缓存中实现了“保长(微指令组)舍短(微指令组)”的机制,减少或避免了微指令缓存的冗余现象。
在本公开的至少一个实施例还涉及“激进解码”操作。图20示出了示例性的“激进解码”操作的示意图。
如图20所示,当取指单元根据程序计数器(PC)的取指地址(例如由该取指单元中的分支预测所给出的预测取指地址等)访问指令缓存时,如果对指令缓存块的访问的结束位置(结束偏移)恰好是一条“条件分支指令”时,则可以将解码结束位置从原有的结束位置延长以例如至少包括该条件分支指令后的一条指令(例如通常为该条件分支指令所指向的指令),例如延长至该指令缓存块的边界位置,通过延长得到的结束偏移被称为“激进解码偏移”。因此,实际访问的指令包括了原本要解码的指令以及额外需要解码的指令。如此,额外解码得到的微指令(如图20所示的微指令5)和原本要解码得到的微指令(如图20所示的微指令2到微指令4)一并填充到微指令缓存中,但是,在发射时,这些额外解码得到的微指令(微指令5)并不会进入微指令队列,即不会执行额外解码得到的微指令。这种额外解码的方式被称为“激进解码”,相应地,额外填充的方式被称为“微指令缓存激进填充”。
为了适应“激进解码”,在本公开的上述实施例中,对处理器核中的取指单元进行修改,修改后的取指单元可以实现激进解码偏移功能(如图20所示),即,如果结束偏移小于指令缓存块的边界且结束位置恰好为条件分支指令时,则将结束偏移修改为指令缓存块的边界(例如,如果缓存块大小为64字节(Byte),则用于激进解码的修改后的结束偏移为0x3f)。
为了适应“激进解码”,在上述实施例中,对处理器核中的解码单元进行修改,在修改后的解码单元中记录激进解码标识;并且,解码单元将额外解码得到的微指令判定为“激进微指令”,即,将原有的结束偏移和激进解码偏移之间的指令进行解码得到的微指令判定为激进微指令(如图20深灰色部分所示),解码单元将这些激进微指令的激进解码标识位例如设置为1,对应地将其他非激进解码得到的微指令(原有微指令或非激进微指令)的激进解码标识位设置为0。
图21示出了示例性的“激进填充”操作的示意图。解码单元在解码后得到包括激进微指令在内的多条微指令之后,则将激进微指令(例如微指令5)和原有微指令(微指令2到微指令4)送入缓冲队列(例如FIFO)中缓冲,然后将激进微指令和原有微指令都填充到微指令缓存(如图21右半部分所示的微指令2-微指令5)中,但是仅将原有微指令提供至微指令队列以等待被发射而不将激进微指令提供至微指令队列(如图21左半部分所示的微指令2-微指令4),因此激进微指令(即微指令5)不会通过微指令队列被发射到执行单元。以上这种对于微指令缓存的填充方式被称为“激进填充”。
激进解码和激进填充具有如下所述的优势。以图12情况3为例,假设微指令4是条件分支指令且没有采用激进填充的方式,因此与微指令4对应跳转的微指令5没有被读入到微指令缓存中;如果当前访问是从微指令2到微指令5,则对于微指令2到微指令4为访问命中,但是对于微指令5为访问丢失。由于对于微指令缓存存在访问丢失,因此需要访问指令缓存以读入所需的指令并解码出所需要的微指令,然而这增加了处理器核运行时间,也增加了功耗。但是,如果采用了上述实施例的激进解码和激进填充,则微指令2到微指令5全部被保存到了微指令缓存(以供后续访问);例如,在后续对于微指令缓存的访问中,需要访问微指令2-微指令5,则对微指令5的访问就不会丢失,因此这可以减少访问指令缓存,避免了额外运行时间的增加,节省了功耗。
本公开的至少一实施例还提供了一种处理器核,图22示出了该处理器核的示意图,如图22所示,该处理器核2100包括解码单元2105以及微指令缓存2104。该微指令缓存2104包括多个缓存项,其中,每个缓存项包括数据字段、地址信息字段(图20中未示出,可参考图15)。例如,该微指令缓存为上述任一实施例的微指令缓存。
这里,解码单元2105配置为:获取待解码的对象指令;将对象指令解码以得到多个微指令,且记录该多个微指令中每个的微指令起始地址偏移;至少部分基于多个微指令得到对象微指令组;将对象微指令组存储在微指令缓存2104的目标缓存项的数据字段中,在目标缓存项的地址信息字段中存储对象微指令组的各微指令的微指令起始地址偏移。这里,“对象指令”用于表示作为描述对象的任一指令且该指令在解码后得到多个微指令;例如,对象微指令组可以包括由对象指令解码获得的多个微指令中的一个或多个,即包括由对象指令解码获得的多个微指令中的至少部分,例如包括由对象指令解码获得的多个微指令中的全部。
例如,在根据本公开至少一实施例的处理器核中,解码单元2105还配置为:在将对象指令解码以得到多个微指令时,还记录多个微指令中每个的微指令结束地址偏移。
例如,在根据本公开至少一实施例的处理器核中,解码单元2105还配置为:在目标缓存项的地址信息字段中存储对象微指令组的各微指令的微指令起始地址偏移时,还在目标缓存项的地址信息字段中存储对象微指令组的最后一条微指令的微指令结束地址偏移,作为对象微指令组的访问结束地址偏移。
例如,根据本公开至少一实施例的处理器核2100还可以包括指令缓存2103,解码单元2105还配置为从指令缓存2103中获取待解码的对象指令。
除了上述指令缓存2103、微指令缓存2104和解码单元2105,处理器核2100还可以包括例如取指单元2102、微指令队列2106等,取指单元2102从程序计数器(PC)取得的指令地址,根据该取得的指令地址例如从指令缓存获取需要执行的指令,并且该取指单元可以包括分支预测,因此取得的指令地址例如可以通过分支预测,以预测得到下一次要执行的指令地址。访问指令缓存2103得到指令地址对应的未解码的指令,解码单元2104将指令解码为多个微指令,该多个微指令例如通过一个先进先出(FIFO)队列,然后如果需要与其他指令解码得到的微指令重新编组得到微指令组(例如参考图10)。所得到的微指令组一方面被送到微指令队列2106,以等待发射单元将其分配与发射到处理器核的后端中的相应的执行单元以执行,另一方面在满足一定条件的情况下(比如该微指令组是常用的一组微指令)被保存到微指令缓存2105中缓存,等待之后可能的再次访问。
如上所述,在本公开的实施例中,在将微指令组存储在微指令缓存2104的目标缓存项的数据字段中,在目标缓存项的地址信息字段中存储该微指令组的各微指令的微指令起始地址偏移。
例如,根据本公开至少一实施例的处理器核2100还可以实现激进解码以及激进填充,对此该处理器核2100还可以包括取指单元,其中,该取指单元配置为,响应于在指令缓存的指令缓存块中从起始地址至结束偏移之间取指时结束偏移小于被操作的指令缓存块的边界且结束位置为条件分支指令,将结束偏移延长至新的结束偏移,并将起始地址至新的结束偏移之间的指令部分作为对象指令提供至解码单元;其中,该新的结束偏移至多到被操作的指令缓存块的边界。
例如,根据本公开至少一实施例的处理器核2100中,解码单元还配置为将起始地址至新结束偏移之间的指令部分作为对象指令解码,并且将起始地址至结束偏移之间的指令部分解码得到的微指令标注为非激进解码,将结束偏移和新的结束偏移之间的指令部分解码的得到的微指令标注为激进解码。
例如,根据本公开至少一实施例的处理器核2100还可以包括微指令队列,其中,解码单元还配置为将被标注为非激进解码的微指令提供至微指令队列以等待被发射,并且还将被标注为非激进解码的微指令以及被标注为激进解码的微指令都提供至微指令缓存。
例如,根据需要,本公开至少一实施例的处理器核2100还可以包括寄存器重名单元、各种类型的执行单元等,这里不再一一赘述,且这些部件不构成对本公开实施例的限制。
本公开的实施例对于处理器核所采用的微架构类型不做限制,例如可以采用CISC微架构或RISC微架构,例如,可以采用X86类型的微架构、ARM类型的微架构、RISC-V类型的微架构等。
本公开的至少一实施例还提供了一种处理器(或处理装置),该处理器包括上述任一实施例的处理器核,该处理器可以为单核处理器(即包括单个上述处理器核)或者多核处理器(即包括多个上述处理器核)。
本公开的至少一实施例还提供一种微指令缓存的操作方法,该操作方法对应于上述实施例的微指令缓存,该操作方法包括:在微指令缓存包括的多个缓存项中选择目标缓存项;在目标缓存项的数据字段中存储对象微指令组,其中,对象微指令组包括多个微指令;在目标缓存项的地址信息字段中存储对象微指令组的各微指令的微指令起始地址偏移。
例如,根据至少一实施例的微指令缓存的操作方法还包括:在目标缓存项的标签字段存储对象微指令组的访问地址中的标签部分;在目标缓存项的有效位存储对象微指令组的有效性信息。
例如,根据至少一实施例的微指令缓存的操作方法还包括:接收对于微指令缓存的访问请求;比较在访问请求中的访问地址信息的标签部分与目标缓存项的标签部分中存储的标签信息是否匹配以得到第一比较结果,比较访问请求的访问地址信息的访问起始地址偏移部分与目标缓存项的地址信息字段中存储的任一微指令起始地址偏移相匹配以得到第二比较结果;根据第一比较结果和第二比较结果,确定访问请求访问命中,否则确定为访问缺失。
例如,根据至少一实施例的微指令缓存的操作方法还包括:在目标缓存项的地址信息字段中存储对象微指令组的微指令组终止访问地址偏移;还比较访问请求地址中的访问终止地址偏移部分与目标缓存项的地址信息字段保存的微指令组终止地址偏移是否匹配以得到第三比较结果,并且在根据第一比较结果和第二比较结果之外还根据第三比较结果,确定输出结果。
例如,根据至少一实施例的微指令缓存的操作方法还包括:响应于访问缺失且响应于第一比较结果为匹配且起始访问地址偏移与小于目标缓存项中保存的对象微指令组中首个微指令的微指令起始地址偏移,将访问请求所针对的目标微指令组填充到微指令缓存中。
例如,根据至少一实施例的微指令缓存的操作方法中,将访问请求所针对的目标微指令组填充到微指令缓存中,包括:将访问请求所针对的目标微指令组填充到微指令缓存中不同于目标缓存项的缓存项中,且将目标缓存项的有效位设置为表示无效;或者,将访问请求所针对的目标微指令组填充到目标缓存项中。
对于本公开实施例的微指令缓存的操作方法可以参考前述对于本公开各个实施例的微指令缓存的描述,这里不再赘述。
此外,本公开的至少一实施例还提供一种指令处理方法,该指令处理方法对应于上述实施例的处理器核,该指令处理方法包括:获取待解码的对象指令;将对象指令解码以得到多个微指令,且记录多个微指令中每个的微指令起始地址偏移;至少部分基于多个微指令得到对象微指令组;将对象微指令组存储在微指令缓存的目标缓存项的数据字段中,在目标缓存项的地址信息字段中存储对象微指令组的各微指令的微指令起始地址偏移。
例如,根据至少一实施例的指令处理方法中,在将对象指令解码以得到多个微指令时,还记录多个微指令中每个的微指令结束地址偏移。
例如,根据至少一实施例的指令处理方法中,在目标缓存项的地址信息字段中存储对象微指令组的各微指令的微指令起始地址偏移时,还在目标缓存项的地址信息字段中存储对象微指令组的最后一条微指令的微指令结束地址偏移,作为对象微指令组的访问结束地址偏移。
例如,根据至少一实施例的指令处理方法中,获取待解码的对象指令,包括:从指令缓存中获取对象指令。
例如,根据至少一实施例的指令处理方法还包括:响应于在指令缓存的指令缓存块中从起始地址至结束偏移之间取指时结束偏移小于被操作的指令缓存块的边界且结束位置为条件分支指令,将结束偏移延长至新的结束偏移,并将起始地址至新的结束偏移之间的指令部分作为对象指令提供至解码单元,其中,新的结束偏移至多到被操作的指令缓存块的边界。
例如,根据至少一实施例的指令处理方法中,将对象指令解码以得到多个微指令,包括:将起始地址至新结束偏移之间的指令部分作为对象指令解码,并且将起始地址至结束偏移之间的指令部分解码得到的微指令标注为非激进解码,将结束偏移和新的结束偏移之间的指令部分解码的得到的微指令标注为激进解码。
例如,根据至少一实施例的指令处理方法中,被标注为非激进解码的微指令被提供至微指令队列以等待被发射,并且被标注为非激进解码的微指令以及被标注为激进解码的微指令被都提供至微指令缓存。
对于本公开实施例的指令处理方法可以参考前述对于本公开各个实施例的处理器核的描述,这里不再赘述。
本公开的至少一实施例还提供了一种计算机程序的处理装置,包括处理单元和存储器,在该存储器上存储有一个或多个计算机程序模块,其中,所述一个或多个计算机程序模块被配置为由所述处理单元执行时实现如上述任一实施例的微指令缓存的操作方法或任一实施例的指令处理方法。
本公开的至少一实施例还提供了一种非瞬时可读存储介质,其中,所述非瞬时可读存储介质上存储有计算机指令,其中,所述计算机指令被处理器执行时实现如上述任一实施例的微指令缓存的操作方法或任一实施例的指令处理方法。
本公开的一些实施例还提供了一种电子装置,该电子装置包括上述任一实施例的处理装置或者可执行上述任一实施例的指令处理方法。
图23为本公开至少一个实施例提供的一种电子装置的示意图。本公开实施例中的电子装置可以包括但不限于诸如笔记本电脑、PDA(个人数字助理)、PAD(平板电脑)等的移动终端以及诸如台式计算机等固定终端。
图23示出的电子装置1000仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。例如,如图23所示,在一些示例中,电子装置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。
虽然图23示出了包括各种装置的电子装置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 (26)

1.一种微指令缓存,包括多个缓存项,
其中,每个所述缓存项包括数据字段、地址信息字段,
每个所述缓存项配置为:响应于所述数据字段中存储的对象微指令组包括多个微指令,在所述地址信息字段中存储所述对象微指令组的各微指令的微指令起始地址偏移。
2.根据权利要求1所述的微指令缓存,其中,每个所述缓存项还包括标签字段和有效位,
所述标签字段配置为用于存储所述数据字段中存储的对象微指令组的访问地址中的标签部分,所述有效位配置为用于存储所述数据字段中存储的对象微指令组的有效性信息。
3.根据权利要求2所述的微指令缓存,还包括选择逻辑处理电路,
其中,所述选择逻辑处理电路配置为:比较所述微指令缓存接收的访问请求中的访问地址信息的标签部分与目标缓存项的标签字段的内容是否匹配以得到第一比较结果,比较所述访问请求中的访问地址信息的访问起始地址偏移部分与所述目标缓存项的地址信息字段存储的任一微指令起始地址偏移是否匹配以得到第二比较结果,并且根据所述第一比较结果和所述第二比较结果,确定所述访问请求是否访问命中或访问缺失。
4.根据权利要求3所述的微指令缓存,其中,每个所述缓存项还配置为:在所述地址信息字段中存储所述数据字段中存储的对象微指令组的微指令组终止地址偏移,
所述选择逻辑处理电路还配置为:比较所述访问请求中的访问终止地址偏移部分与所述目标缓存项的地址信息字段保存的微指令组终止地址偏移是否匹配以得到第三比较结果,并且在根据所述第一比较结果和所述第二比较结果之外还根据所述第三比较结果,确定输出结果。
5.根据权利要求3所述的微指令缓存,其中,所述选择逻辑处理电路还配置为:
响应于所述访问缺失且响应于所述第一比较结果为匹配以及所述起始访问地址偏移与小于所述目标缓存项中保存的微指令组中首个微指令的微指令起始地址偏移,将所述访问请求所针对的目标微指令组填充到所述微指令缓存中。
6.根据权利要求5所述的微指令缓存,其中,所述选择逻辑处理电路还配置为:
将所述访问请求所针对的目标微指令组填充到所述微指令缓存中不同于所述目标缓存项的缓存项中,且将所述目标缓存项的有效位设置为表示无效,或者
将所述访问请求所针对的目标微指令组填充到所述目标缓存项中。
7.一种处理器核,包括:
解码单元,以及
微指令缓存,包括多个缓存项,其中,每个所述缓存项包括数据字段、地址信息字段,
所述解码单元配置为:
获取待解码的对象指令;
将所述对象指令解码以得到多个微指令,且记录所述多个微指令中每个的微指令起始地址偏移;
至少部分基于所述多个微指令得到对象微指令组;
将所述对象微指令组存储在所述微指令缓存的目标缓存项的数据字段中,在所述目标缓存项的地址信息字段中存储所述对象微指令组的各微指令的微指令起始地址偏移。
8.根据权利要求7所述的处理器核,其中,所述解码单元还配置为:在将所述对象指令解码以得到所述多个微指令时,还记录所述多个微指令中每个的微指令结束地址偏移。
9.根据权利要求8所述的处理器核,其中,所述解码单元还配置为:在所述目标缓存项的地址信息字段中存储所述对象微指令组的各微指令的微指令起始地址偏移时,还在所述目标缓存项的地址信息字段中存储所述对象微指令组的最后一条微指令的微指令结束地址偏移,作为所述对象微指令组的访问结束地址偏移。
10.根据权利要求7所述的处理器核,还包括指令缓存,
其中,所述解码单元还配置为从所述指令缓存中接收待解码的所述对象指令。
11.根据权利要求10所述的处理器核,还包括取指单元,
其中,所述取指单元配置为,响应于在所述指令缓存的指令缓存块中从起始地址至结束偏移之间取指时所述结束偏移小于被操作的所述指令缓存块的边界且结束位置为条件分支指令,将所述结束偏移延长至新的结束偏移,并将所述起始地址至所述新的结束偏移之间的指令部分作为所述对象指令提供至所述解码单元,
所述新的结束偏移至多到被操作的所述指令缓存块的边界。
12.根据权利要求11所述的处理器核,其中,所述解码单元还配置为将所述起始地址至所述新结束偏移之间的指令部分作为所述对象指令解码,并且将所述起始地址至所述结束偏移之间的指令部分解码得到的微指令标注为非激进解码,将所述结束偏移和所述新的结束偏移之间的指令部分解码的得到的微指令标注为激进解码。
13.根据权利要求12所述的处理器核,还包括微指令队列,
其中,所述解码单元还配置为将被标注为非激进解码的微指令提供至所述微指令队列以等待被发射,并且还将所述被标注为非激进解码的微指令以及所述被标注为激进解码的微指令都提供至所述微指令缓存。
14.一种微指令缓存的操作方法,包括:
在所述微指令缓存包括的多个缓存项中选择目标缓存项;
在所述目标缓存项的数据字段中存储对象微指令组,其中,所述对象微指令组包括多个微指令,
在所述目标缓存项的地址信息字段中存储所述对象微指令组的各微指令的微指令起始地址偏移。
15.根据权利要求14所述的操作方法,还包括:
在所述目标缓存项的标签字段存储所述对象微指令组的访问地址中的标签部分;
在所述目标缓存项的有效位存储所述对象微指令组的有效性信息。
16.根据权利要求15所述的操作方法,还包括:
接收对于所述微指令缓存的访问请求;
比较在所述访问请求中的访问地址信息的标签部分与所述目标缓存项的标签部分中存储的标签信息是否匹配以得到第一比较结果,比较所述访问请求的访问地址信息的访问起始地址偏移部分与所述目标缓存项的地址信息字段中存储的任一微指令起始地址偏移相匹配以得到第二比较结果,
根据所述第一比较结果和所述第二比较结果,确定所述访问请求访问命中,否则确定为访问缺失。
17.根据权利要求16所述的操作方法,还包括:
在所述目标缓存项的地址信息字段中存储所述对象微指令组的微指令组终止访问地址偏移;
还比较访问请求地址中的访问终止地址偏移部分与所述目标缓存项的地址信息字段保存的微指令组终止地址偏移是否匹配以得到第三比较结果,并且在根据所述第一比较结果和所述第二比较结果之外还根据所述第三比较结果,确定输出结果。
18.根据权利要求16所述的操作方法,还包括:
响应于所述访问缺失且响应于所述第一比较结果为匹配且所述起始访问地址偏移与小于所述目标缓存项中保存的所述对象微指令组中首个微指令的微指令起始地址偏移,将所述访问请求所针对的目标微指令组填充到所述微指令缓存中。
19.根据权利要求18所述的操作方法,其中,将所述访问请求所针对的目标微指令组填充到所述微指令缓存中,包括:
将所述访问请求所针对的目标微指令组填充到所述微指令缓存中不同于所述目标缓存项的缓存项中,且将所述目标缓存项的有效位设置为表示无效;或者
将所述访问请求所针对的目标微指令组填充到所述目标缓存项中。
20.一种指令处理方法,包括:
获取待解码的对象指令;
将所述对象指令解码以得到多个微指令,且记录所述多个微指令中每个的微指令起始地址偏移;
至少部分基于所述多个微指令得到对象微指令组;
将所述对象微指令组存储在微指令缓存的目标缓存项的数据字段中,在所述目标缓存项的地址信息字段中存储所述对象微指令组的各微指令的微指令起始地址偏移。
21.根据权利要求20所述的指令处理方法,其中,在将所述对象指令解码以得到所述多个微指令时,还记录所述多个微指令中每个的微指令结束地址偏移。
22.根据权利要求21所述的指令处理方法,其中,在所述目标缓存项的地址信息字段中存储所述对象微指令组的各微指令的微指令起始地址偏移时,还在所述目标缓存项的地址信息字段中存储所述对象微指令组的最后一条微指令的微指令结束地址偏移,作为所述对象微指令组的访问结束地址偏移。
23.根据权利要求20所述的指令处理方法,其中,所述获取待解码的所述对象指令,包括:
从指令缓存中获取所述对象指令。
24.根据权利要求23所述的指令处理方法,还包括:
响应于在所述指令缓存的指令缓存块中从起始地址至结束偏移之间取指时所述结束偏移小于被操作的所述指令缓存块的边界且结束位置为条件分支指令,将所述结束偏移延长至新的结束偏移,并将所述起始地址至所述新的结束偏移之间的指令部分作为所述对象指令提供至所述解码单元,
其中,所述新的结束偏移至多到被操作的所述指令缓存块的边界。
25.根据权利要求24所述的指令处理方法,其中,将所述对象指令解码以得到多个微指令,包括:
将所述起始地址至所述新结束偏移之间的指令部分作为所述对象指令解码,并且将所述起始地址至所述结束偏移之间的指令部分解码得到的微指令标注为非激进解码,将所述结束偏移和所述新的结束偏移之间的指令部分解码的得到的微指令标注为激进解码。
26.根据权利要求25所述的指令处理方法,其中,被标注为非激进解码的微指令被提供至微指令队列以等待被发射,并且所述被标注为非激进解码的微指令以及所述被标注为激进解码的微指令被都提供至所述微指令缓存。
CN202310674269.7A 2023-06-08 2023-06-08 微指令缓存及操作方法、处理器核及指令处理方法 Pending CN116627506A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310674269.7A CN116627506A (zh) 2023-06-08 2023-06-08 微指令缓存及操作方法、处理器核及指令处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310674269.7A CN116627506A (zh) 2023-06-08 2023-06-08 微指令缓存及操作方法、处理器核及指令处理方法

Publications (1)

Publication Number Publication Date
CN116627506A true CN116627506A (zh) 2023-08-22

Family

ID=87602470

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310674269.7A Pending CN116627506A (zh) 2023-06-08 2023-06-08 微指令缓存及操作方法、处理器核及指令处理方法

Country Status (1)

Country Link
CN (1) CN116627506A (zh)

Similar Documents

Publication Publication Date Title
US9367471B2 (en) Fetch width predictor
US6151662A (en) Data transaction typing for improved caching and prefetching characteristics
US7437537B2 (en) Methods and apparatus for predicting unaligned memory access
US9092346B2 (en) Speculative cache modification
CN112579175B (zh) 分支预测方法、分支预测装置和处理器核
JP5745638B2 (ja) 分岐命令の中に符号化されたバイモーダル分岐予測子
US7895422B2 (en) Selective postponement of branch target buffer (BTB) allocation
CN110806900B (zh) 一种访存指令处理方法及处理器
US7769954B2 (en) Data processing system and method for processing data
EP1974254B1 (en) Early conditional selection of an operand
CN116302106A (zh) 用于促进分支预测单元的改善的带宽的设备、方法和系统
JP2009524167A5 (zh)
CN116414458A (zh) 指令处理方法以及处理器
CN112559389A (zh) 存储控制装置、处理装置、计算机系统和存储控制方法
CN115934170A (zh) 预取方法及装置、预取训练方法及装置、存储介质
US9342303B2 (en) Modified execution using context sensitive auxiliary code
CN114924792A (zh) 指令译码单元、指令执行单元及相关装置和方法
CN116627506A (zh) 微指令缓存及操作方法、处理器核及指令处理方法
US20220197657A1 (en) Segmented branch target buffer based on branch instruction type
CN116627505A (zh) 指令缓存及操作方法、处理器核及指令处理方法
CN117289995B (zh) 指令处理方法以及处理器
CN112540937A (zh) 一种缓存、数据访问方法和指令处理装置
EP4250098A1 (en) Multi-indexed micro-operations cache for a processor
EP4250097A1 (en) Processor micro-operations cache architecture
EP4276607A1 (en) Affinity groups in a micro-operations cache of a processor

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