CN115098169B - 基于容量共享的调取指令的方法及装置 - Google Patents
基于容量共享的调取指令的方法及装置 Download PDFInfo
- Publication number
- CN115098169B CN115098169B CN202210730435.6A CN202210730435A CN115098169B CN 115098169 B CN115098169 B CN 115098169B CN 202210730435 A CN202210730435 A CN 202210730435A CN 115098169 B CN115098169 B CN 115098169B
- Authority
- CN
- China
- Prior art keywords
- instruction data
- cache
- decoded instruction
- storing
- fetch
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 59
- 238000012545 processing Methods 0.000 claims abstract description 31
- 239000000872 buffer Substances 0.000 claims description 115
- 230000004044 response Effects 0.000 claims description 26
- 238000010586 diagram Methods 0.000 description 26
- 238000001514 detection method Methods 0.000 description 12
- 238000013519 translation Methods 0.000 description 10
- 238000012549 training Methods 0.000 description 9
- 239000000203 mixture Substances 0.000 description 8
- 230000005540 biological transmission Effects 0.000 description 6
- 238000000605 extraction Methods 0.000 description 6
- 230000003139 buffering effect Effects 0.000 description 5
- 238000000638 solvent extraction Methods 0.000 description 5
- 238000012795 verification Methods 0.000 description 5
- 230000007423 decrease Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000006872 improvement Effects 0.000 description 4
- 238000005192 partition Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
-
- 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
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
一种调取指令的方法及装置、处理装置及存储介质。调取指令的方法包括:生成第一指令的取指地址;响应于第一取指模式,基于取指地址,尝试从一个或多个共享缓存单元的至少一个中获取未经译码的指令数据;响应于第二取指模式,基于取指地址,尝试从一个或多个共享缓存单元的至少一个中获取经译码的指令数据;其中,共享缓存单元中包含用于存储未经译码的指令数据的容量空间,以及用于存储经译码的指令数据的容量空间。
Description
技术领域
本发明涉及一种调取指令的方法及装置、处理装置及存储介质。
背景技术
中央处理器的结构可以分为前端架构和后端架构。处理器前端主要包括指令提取和指令译码等用于调取指令的模块。处理器后端主要包括用于执行指令的模块。为了提高处理器的运行速度,处理器前端应该尽快地提供更多的指令给处理器后端以用于执行。
目前,处理器中包含两种取指通道,一种,从指令缓存器IC(Instruction Cache)中获取未经译码的指令数据信息,另一种,从微指令缓存器OC(Micro Ops Cache)中获取经过译码的指令数据信息。当前的处理器产品中,IC或者OC都是确定的容量(一经设计确定之后,IC/OC的容量都被确定)。但是,对于不同的应用程序,其对于IC/OC的容量需求是不同的。因此,导致过多的IC Miss,去访问L2 Cache,导致指令获取的延迟。但是,其对OC的容量需求却不大,导致OC的容量存在比较大的浪费。
发明内容
本发明的实施例提供了一种调取指令的方法及装置、处理装置及存储介质,以解决现有技术中指令调取时因特定指令缓存的存储容量受限而导致的指令命中率不高的技术问题。
本发明的至少一个方面提供了一种调取指令的方法,包括:生成第一指令的取指地址;响应于启用第一模式,基于所述取指地址,尝试从一个或多个共享缓存单元的至少一个中获取未经译码的指令数据;响应于启用第二模式,基于所述取指地址,尝试从所述一个或多个共享缓存单元的至少一个中获取经译码的指令数据;其中,所述共享缓存单元中包含用于存储未经译码的指令数据的容量空间,以及用于存储经译码的指令数据的容量空间。
本发明的至少一个方面还提供了一种调取指令的装置,包括:一个或多个共享缓存单元,所述共享缓存单元中包含用于存储未经译码的指令数据的容量空间,以及用于存储经译码的指令数据的容量空间;指令缓存取指模块,被配置为响应于启用第一模式,基于所述取指地址,尝试从所述一个或多个共享缓存单元的至少一个中获取未经译码的指令数据;以及微指令缓存取指模块被配置为响应于启用第二模式,基于所述取指地址,尝试从所述一个或多个共享缓存单元的至少一个中获取经译码的指令数据。
本发明的至少一个方面还提供了一种处理装置,包括:处理器;以及非瞬态存储器,存储有可执行指令,其中,当由所述处理器执行所述可执行指令时,以实现任一项上述调取指令的方法。
本发明的至少一个方面还提供了一种计算机可读储存介质,其中储存有计算机可读指令,所述计算机可读指令包含用于执行任一项上述方法的程序代码。
本发明的至少一个方面还提供了一种处理装置,包括:微指令缓存,配置为缓存一条或多条微指令;微指令取指模块,配置为尝试从所述微指令缓存中获取目标微指令;微指令缓存容量分配模块,配置为调整微指令缓存的容量。
本发明的至少一个方面还提供了一种处理装置的操作方法,包括:获取微指令缓存容量调整指令;调整微指令缓存的容量大小,以缓存一条或多条微指令;使用容量调整后的微指令缓存执行微指令取指操作。
根据本发明所提供的实施方式可以在用于存储未经译码的指令数据的指令缓存装置和用于存储经译码的指令数据的微指令缓存装置的总容量不变的前提下,针对不同的应用来调整指令缓存装置容量和微指令缓存装置容量之间的比例,实现缓存容量充分共享的目的,解决现有技术中指令调取时因特定指令缓存的存储容量受限而导致的指令命中率不高的技术问题,从而提高取指带宽,降低传输延时,提升整体处理器的处理性能。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本发明的一些实施例,而非对本发明的限制。
图1是示出一种处理器前端架构的示意图;
图2是示出在如图1所示的处理器前端架构中调取指令的方法的流程图;
图3是根据本公开的至少一个实施例提供的处理器前端架构中调取指令的装置的示意性框图;
图4是示出图3中快表共享缓存单元的进一步的示意性框图;
图5A是示出图3中共享缓存单元的进一步的示意性框图;
图5B是示出图3中共享缓存单元中IC缓存装置和OC缓存装置容量共享示意图;
图6为根据本公开的至少一个实施例提供的对于缓存装置的共享容量的划分方法的流程示意图;
图7是根据本公开的至少一个实施例提供的调取指令的方法的流程图;
图8是根据本公开的至少一个实施例提供的处理器前端架构中调取指令的装置的示意性框图;
图9是示出图8中共享缓存单元的进一步的示意性框图;
图10是根据本公开的至少一个实施例提供的调取指令的方法的流程图;
图11是根据本公开的至少一个实施例提供的处理器前端架构中调取指令的装置的示意性框图;
图12是示出图11中共享缓存单元的进一步的示意性框图;
图13是根据本公开的至少一个实施例提供的调取指令的方法的流程图;
图14是根据本公开的至少一个实施例提供的处理装置的示意图;
图15是根据本公开的至少一个实施例提供的计算机可读存储介质的示意图;
图16是根据本公开的至少一个实施例提供的处理装置的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例的附图,对本发明实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于所描述的本发明的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其它实施例,都属于本发明保护的范围。
除非另作定义,此处使用的技术术语或者科学术语应当为本发明所属领域内具有一般技能的人士所理解的通常意义。本公开说明书以及权利要求书中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”或者“一”等类似词语也不表示数量限制,而是表示存在至少一个。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其它元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
本公开的至少一个实施例可能涉及的术语的解释如下。
关于多级缓存存储器架构介绍如下。在现代处理器(CPU)架构中,程序指令保存在内存(例如,DRAM)中。CPU核运行频率远远高于内存运行频率,因此,从内存获取指令需要上百个CPU核时钟周期,往往会造成CPU核由于无法继续运行相关指令而空转,造成性能损失。鉴于此,高性能处理器都使用包含多级缓存存储器(SRAM)(例如,第一级缓存存储器(L1C)、第二级缓存存储器(L2C)、最后一级缓存存储器(LLC)等)的架构来保存最近被访问的数据,并且在程序取指令之前提前将程序所需要的指令代码预取到缓存存储器中,从而提升处理器的执行效率。
大多数采用复杂指令集(Complex Instruction Set Computer,CISC)架构的处理器可以包括前端架构和后端架构。处理器的前端架构主要包括取指模块(InstructionFetch)、缓存模块(Cache)、译码模块(Instruction Decode)等模块,处理器后端架构可以包括主要负责执行处理的单元模块。早期处理器采用直接的指令缓存译码(IC Decode)模式,例如,指令缓存器负责将机器指令(简称“指令”)译码为一条或多条微指令(Micro-operation,Uop),并将微指令发到处理器后端执行单元以便进行后续执行操作。然而,上述指令译码过程通常会导致较高的译码时延和增加的功率需求,因此,为减少译码操作,后期,在处理器架构中引入了额外的缓存器(例如,微指令缓存器(Uop Cache,OC))来缓存最近一段时间内经常使用的指令序列,以便跳过译码器的译码操作,从而能够一定程度上改善调取指令的时延。
图1是示出一种处理器前端架构的示意图。如图1所示,处理器的前端架构10包括地址生成模块101、取指模式判断模块102、指令缓存器(IC,或简称为“指令缓存”或“机器指令缓存”)103、译码器104、微指令缓存器(OC,或简称为“微指令缓存”)105、微指令队列106以及分发模块107。在一个实施例中,指令缓存器103可以是第一级缓存存储器中的第一级指令缓存器(L1 I-Cache),并且微指令缓存器105是独立于第一级指令缓存的高速缓存器。
图2是示出在如图1所示的处理器前端架构中调取指令的方法的流程图。以下将结合图1和图2描述在处理器前端架构中调取指令的方法100。
参见图2,该调取指令的方法100开始于步骤S01。在步骤S01中,地址生成模块101生成取指地址,该取指地址可以是虚拟地址。在一个实施例中,该虚拟地址可以通过转换变为相应的物理地址。
在步骤S02中,取指模式判断模块102判断取指模式。在一个实施例中,取指模式可以包括指令缓存译码模式(IC模式)和微指令缓存提取模式(OC模式)。当取指模式判断模块102判断启用IC模式时,步骤进行到S03,而当取指模式判断模块102判断启用OC模式时,步骤进入到S05。
在步骤S03中,控制器(未示出)启用指令缓存译码模式,基于物理地址,尝试从指令缓存器103中提取该物理地址所指示的指令数据。
在一个实施例中,当能够获取相应的指令数据时,指令缓存器103可以给出指令缓存命中(IC hit)的信息,并且在步骤S04中将该指令数据发送到译码器104进行译码操作,这里,指令数据可以是连续的二进制数据。译码器104还可以将经译码的指令数据(例如,微指令组,每个微指令组可以包括一条或多条微指令(Uop))缓存到微指令缓存器105中。此时,可以在微指令缓存器105中创建用于存储微指令的微指令缓存器条目(OC entry)。微指令组中的一个或多个微指令被缓存在所创建的微指令缓存器条目中,例如,一个微指令缓存器条目可以存放8条微指令。
在一个实施例中,当无法从指令缓存器103中提取该物理地址对应的指令数据时,指令缓存器103可以给出指令缓存缺失(IC Miss)的信息,则控制器将从下一级缓存器,例如第二级缓存存储器(L2)中获取指令数据,并将所获取的指令数据缓存到指令缓存器103中。
在步骤S05中,当启用微指令缓存提取模式时,控制器可以尝试从微指令缓存器105中提取该物理地址对应的经译码的指令数据。
在一个实施例中,当能够获取相应的经译码的指令数据时,微指令缓存器105可以给出微指令缓存命中(OC Hit)的信息,由于微指令缓存器105存储的是已经译码的指令数据,因而可以直接将获取的指令数据(例如,微指令组)发送到微指令队列106缓存以等待分发(步骤S06)。
在一个实施例中,当无法从微指令缓存器105中提取该物理地址对应的经译码的指令数据时,则微指令缓存器105可以给出微指令缓存缺失(OC Miss)的信息,取指模式从微指令缓存提取模式切换回指令缓存译码模式。
在步骤S06中,在指令缓存译码模式下,经过译码器译码的指令数据被发送到微指令队列106缓存以等待分发;在微指令缓存提取模式下,来自微指令缓存器105的经译码的指令数据也将被发送到微指令队列106缓存以等待分发。
在步骤S07中,分发模块107从微指令队列106中取出经译码的指令数据发送到后端执行单元进行执行操作。
如上所述的指令调取方法通过增加其中存放有经译码的指令数据的微指令缓存模块(OC模块),能够避免部分指令进入译码器进行译码操作,从而能够减少处理器进行译码操作的功耗,在一定程度上改善了取指令的时延和带宽,因此该处理器架构被广泛应用于现代处理器产品中。然而,随着同步多线程(Simultaneous Multi-Threading,SMT)技术的发展,其对微指令缓存模块的容量的要求越来越高。主要原因在于每个线程的指令行为是不同的,当两个线程中都包含有常访问的指令的循环体时,两个线程之间的指令会不断地抢占对方的微指令缓存模块的容量资源,从而导致微指令缓存命中(OC Hit)率降低。另一方面,随着硬件上层软件应用的不断变化,产生了越来越多的较大循环体,从而也对微指令缓存容量提出了更高的要求。然而,受限于处理器整体尺寸设计的限制,较难通过增加物理面积来解决上述问题。因此,如何在有限的处理器尺寸中提高微指令缓存容量成为亟待解决的技术问题。
根据本公开的至少一个实施例提供一种基于容量共享的调取指令的方法,包括:生成第一指令的取指地址,基于取指地址生成第一指令的物理地址;响应于第一取指模式,基于物理地址,尝试从一个或多个共享缓存单元的至少一个中获取未经译码的指令数据;响应于第二取指模式,基于物理地址,尝试从一个或多个共享缓存单元的至少一个中获取经译码的指令数据;其中,共享缓存单元中包含用于存储未经译码的指令数据的容量空间,以及用于存储经译码的指令数据的容量空间。
该调取指令的方法可以在用于存储未经译码的指令数据的指令缓存装置和用于存储经译码的指令数据的微指令缓存装置的总容量不变的前提下,针对不同的应用来调整指令缓存装置容量和微指令缓存装置容量之间的比例,实现缓存容量充分共享的目的,从而提高取指带宽,降低传输延时,提升整体处理器的处理性能。
下面,将参考附图详细地说明本公开的实施例。应当注意的是,不同的附图中相同的附图标记将用于指代已描述的相同的元件。
图3是根据本公开的至少一个实施例提供的处理器前端架构中调取指令的装置30的示意图。
如图3所示的实施例中,调取指令的装置30可以包括取指单元301、缓存单元302、译码单元303和分发单元304。
进一步参考图3,在一个实施例中,取指单元301可以包括地址生成和翻译模块3010、快表缓存模块3011、取指模式判断模块3012、指令缓存(IC)取指模块3013和微指令缓存(OC)取指模块3014。在一个实施例中,快表缓存模块3011还可以进一步包括快表共享缓存单元3011a。
在一个实施例中,缓存单元302可以包括第一级缓存存储器(L1 Cache)3020和第二级缓存存储器(L2 Cache)3021。在一些实施例中,第一级缓存存储器3020还可以包括IC更新模块3020a和IC预取模块3020b。此外,缓存单元302还可以包括共享缓存单元。共享缓存单元可以位于第一级缓存存储器、第二级缓存存储器或译码单元的任一个或多个中。在图3示出的实施例中,共享缓存单元3022被示出为包含在第一级缓存存储器3020中。如将在下面详细描述的,共享缓存单元3022可以同时包含用于存储未经译码的指令数据的IC缓存装置和用于存储经译码的指令数据的OC缓存装置,使得IC缓存装置和OC缓存装置可以共享同一个物理缓存装置(例如,SRAM),从而可以根据运行程序的特性,提升IC或者OC的有效容量,提高取指效率。
此外,在一个实施例中,第二级缓存存储器3021还可以进一步包括IC数据格式化模块3021a。并且在一个实施例中,译码单元303还可以进一步包括OC数据格式化模块303a、OC更新模块303b、OC预取模块303c、OC训练模块303d和OC提取模块303e中的一个或多个。
图4是示出图3中快表共享缓存单元的进一步的示意性框图。
如图4所示,快表共享缓存单元40可以包括IC快表缓存装置402和OC快表缓存装置403,其中各自包括用于存储未经译码的指令数据的快表的容量空间和用于存储经译码的指令数据的快表的容量空间。快表共享缓存单元40可以实现IC快表缓存装置和OC快表缓存装置共享同一个物理缓存装置的技术效果。在一个实施例中,快表共享缓存单元40还可以包括快表缓存装置容量分配模块401,其被配置为对于快表共享缓存单元40中的IC快表缓存装置402的容量和OC快表缓存装置403的容量空间进行划分。
图5A是示出图3中共享缓存单元的进一步的示意性框图。
如图5A所示,在一个实施例中,共享缓存单元50中可以包含用于存储未经译码的指令数据的IC缓存装置502以及用于存储经译码的指令数据的OC缓存装置503。可选地,共享缓存单元50中还可以包含缓存容量分配模块501。应当理解的是,在另一个实施例中,缓存容量分配模块501可以不包含在共享缓存单元50中,而是包含在第一级缓存存储器或第二级缓存存储器或译码单元的任一个中。
例如,在一个实施例中,IC缓存装置502中可以包括缓存容量空间5021以用于缓存未经译码的指令数据。此外,在一个实施例中,OC缓存装置503中可以包括缓存容量空间5031以用于缓存经译码的指令数据。
IC缓存装置502和OC缓存装置503可以共享相同的存储器件(SRAM)。如图5B所示,SRAM的上半部分(深色背景的存储阵列)可以被用作IC缓存容量空间5021,SRAM的下半部分(浅色背景的存储阵列)可以被用作OC缓存容量空间5031。当OC缓存装置需要扩大容量时,可以将部分IC缓存容量空间划分给OC缓存装置,如图5B中小的虚线框所示,从而使得OC缓存容量装置的总体容量扩大(例如,扩大为所有虚线框)。类似地,当当IC缓存装置需要扩大容量时,可以将部分OC缓存容量空间划分给IC缓存装置(未示出)。如此可以灵活配置IC缓存装置和OC缓存装置的容量空间。
图6为根据本公开的至少一个实施例提供的对于缓存装置的共享容量的划分方法的流程示意图,该容量的划分方法例如可以用于图5A所示的共享缓存单元50中用于存储未经译码的指令数据的IC缓存装置502和用于存储经译码的指令数据的OC缓存装置503之间的容量划分。在一个实施例中,基于对于共享缓存单元50的容量进行划分所确定的划分结果可以应用于快表共享缓存单元40中IC快表缓存装置402和OC快表缓存装置403之间的容量划分。
在一些示例中,如图6所示,该容量的划分方法600包括如下操作。
在步骤S601中,例如,缓存装置容量分配模块501需要根据应用程序的应用特性,确定容量分配比例。在一个实施例中,应用程序可以包括一个或多个线程,每个线程中可以包括循环体指令L以及非循环体指令NL,应用程序的应用特性可以用所在线程的以下参数表征:
所有非循环体指令NL的地址空间大小的总和a,
所有n个循环体指令L1~Ln的每一个的地址空间的大小bi,i=1…n,
每一个循环体L1~Ln出现的次数pi,i=1…n。
在步骤S602中,缓存装置容量分配模块501根据应用特性对缓存容量空间5021和缓存容量空间5031进行划分。例如,在一个实施例中,可以根据以下公式(1)进行IC缓存装置502和OC缓存装置503之间容量的比例划分:
a:bi (1)
在一个实施例中,i=m,bm为地址空间大小最大的循环体指令的大小。
在一个实施例中,i=m,bm为循环次数最多的循环体指令的大小。
例如,在一个实施例中,还可以根据以下公式(2)进行IC缓存装置502和OC缓存装置503之间容量的比例划分:
其中,wi是权重系数,并且
在步骤S603中,通过缓存装置容量分配模块501对划分比例进行验证。例如,缓存装置容量分配模块501可以基于处理器中的性能检测单元(Performance Monitor Unit,PMU)(未示出)收集的性能验证信息来进行验证,缓存装置容量分配模块501基于验证结果确定是否调整划分比例。例如,缓存装置容量分配模块501可以接收性能检测单元所发送的微指令缓存命中的信息或微指令缓存未命中的信息,以及指令缓存命中的信息或指令缓存未命中的信息作为性能验证信息。缓存装置容量分配模块501可以根据微指令缓存命中的信息或微指令缓存未命中的信息来计算微指令缓存命中率(OC hit rate),并基于微指令缓存命中率对划分比例进行验证。在一个实施例中,也可以根据指令缓存命中的信息或指令缓存未命中的信息来计算指令缓存命中率(IC hit rate),并基于指令缓存命中率对划分比例进行验证。在一个实施例中,缓存装置容量分配模块501也可以根据微指令缓存命中率和指令缓存命中率之间的关系来对划分比例进行验证,并基于验证结果来确定是否调整划分比例。
在一个实施例中,根据对应用程序的调优,确定最优的微指令缓存命中率,或者,指令缓存命中率。并将该值设定为预定阈值,当微指令缓存命中率或指令缓存命中率满足预定阈值时,说明当前微指令缓存与指令缓存的容量分配是合理的,不进行比例调整。例如,微缓存命中率的阈值或指令缓存命中率可以设定为50%,例如,当微指令缓存命中率或指令缓存命中率满足50%时,可以认为对于应用程序的整体比例划分合适,因而不进行比例调整。此外,当微指令缓存命中率和指令缓存命中率之间的关系满足特定比例关系(例如,1:1)或者微指令缓存命中率和指令缓存命中率之间的差值小于预定范围(例如,小于20%)时,可以认为对于应用程序的整体比例划分合适,因而不进行比例调整。此时,流程进行到步骤S606。应当理解的是,这里设定的比例关系和差值范围的数值仅是示意性的,本领域技术人员可以根据应用的实际需要将该数值设定为比上述示例更大或更小的任何合适的数值。
在一个实施例中,当判断需要调整应用程序的整体比例划分时,流程进行到步骤S604,进行比例调整。例如,在一个实施例中,当微指令缓存命中率小于预先设定的阈值时,可以以设定的步长调整IC缓存装置502和OC缓存装置503之间容量的比例。例如,微缓存命中率的阈值可以设定为50%,并且比例调整的步长可以设定为5%。即,当微指令缓存命中率小于50%时,可以将OC缓存装置的容量增加5%,同时将IC缓存装置的容量相应减少。此外,在一个示例中,也可以根据指令缓存命中率进行比例调整。例如,当指令缓存命中率小于50%时,并且微指令缓存的命中率不高情况下,可以将IC缓存装置的容量增加5%,同时将OC缓存装置的容量相应减少。应当理解的是,这里设定的阈值和步长的数值仅是示意性的,本领域技术人员可以根据应用的实际需要将该数值设定为比上述示例更大或更小的任何合适的数值。
在一个实施例中,也可以根据微指令缓存命中率和指令缓存命中率之间的关系来对划分比例进行验证。例如,当微指令缓存命中率小于指令缓存命中率时,可以相应增加OC缓存装置的容量,同时将IC缓存装置的容量相应减少。
在步骤S605中,缓存装置容量分配模块501计算调整后的微指令缓存命中率相对于调整前的微指令缓存命中率的性能提升。在一个实施例中,可以判断调整后的微指令缓存命中率相对于调整前的微指令缓存命中率的提升率是否大于预设的阈值。例如,预设的阈值可以为10%,即,可以判断调整后的微指令缓存命中率相对于调整前的微指令缓存命中率的提升率是否大于10%。当提升率大于10%时,表示性能仍具有可提升的空间,则可以继续对于容量比例划分进行调整,流程返回到步骤S604,例如,可以继续以5%的步长对于容量的比例进行调整。在另一个实施例中,当提升率小于10%时,则可以停止划分比例的调整。流程进行到步骤S606而完成缓存容量的比例划分。应当理解的是,这里设定的命中率提升的比例数值仅是示意性的,本领域技术人员可以根据应用的实际需要将该数值设定为比上述示例更大或更小的任何合适的数值。
本领域技术人员可以理解的是,虽然图5A中的共享缓存单元示出了分别包含在IC缓存装置中的IC缓存容量空间和OC缓存装置中的OC缓存容量空间,但是以上容量划分可以按照应用的实际需求进行调整。例如,当需要将共享缓存单元中的全部容量空间用于储存OC指令时,可以将IC缓存装置/OC缓存装置的容量比例划分为0:1;类似地,例如,当需要将共享缓存单元中的全部容量空间用于储存IC指令时,可以将IC缓存装置/OC缓存装置的容量比例划分为1:0。
由于共享缓存单元中的IC缓存装置和OC缓存装置共享同一个物理缓存装置(例如,SRAM),并且共享缓存单元中的缓存装置容量分配模块能够通过上述划分方法基于不同应用程序中不同指令数据所占用的容量空间的大小来调整IC缓存装置和OC缓存装置之间不同的容量配比,从而能够更好地适配不同应用的应用特征,通过提升指令命中率来提升指令调取的处理速度,进而改善处理器的整体处理效率。
图7是根据本公开的至少一个实施例提供的调取指令的方法700的流程图。以下将结合图3和图7描述根据本公开的至少一个实施例提供的在处理器前端架构中调取指令的方法700。
如图7所示,在步骤S701中,地址生成和翻译模块3010生成取指地址。在一个实施例中,所生成的取指地址可以是虚拟地址。地址生成和翻译模块3010还可以将虚拟地址翻译为对应的物理地址,并将该物理地址发送到快表缓存模块3011。
在步骤S702中,基于物理地址在快表共享缓存模块中查询该物理地址的命中情况。在一个实施例中,分别在快表共享缓存模块中的IC快表缓存装置和OC快表缓存装置中查询该物理地址的命中情况,并将命中情况的结果发送到取指模式判断模块3012。
在步骤S703中,基于IC快表缓存装置和OC快表缓存装置的命中结果,取指模式判断模块3012确定取指模式。在一个实施例中,取指模式可以包括指令缓存译码模式(IC模式)和微指令缓存提取模式(OC模式)。当取指模式判断模块3012判断启用IC模式时,将相应的物理地址发送到IC取指模块3013,并且步骤进行到S704,而当取指模式判断模块3012判断启用OC模式时,步骤进入到S706。
在步骤S704中,响应于启用指令缓存译码模式,则IC取指模块3013将尝试从共享缓存单元3022中提取该物理地址所指示的指令数据。具体而言,IC取指模块可以从共享缓存单元3022中的IC缓存装置获取未经译码的指令数据。
在一个实施例中,当能够从共享缓存单元3022中的IC缓存装置获取相应的指令数据时,IC取指模块3013可以发送指令缓存命中(IC hit)的信息到处理器的性能检测单元,并且将该指令数据发送到译码单元303以进行译码操作。
在一个实施例中,当无法从共享缓存单元3022中的IC缓存装置中提取该物理地址对应的指令数据时,IC取指模块3013可以将指令缓存缺失(IC Miss)的信息发送到性能检测单元,并且将从下一级缓存器,例如,第二级缓存存储器3021中获取指令数据。第二级缓存存储器3021中的IC数据格式化模块3021a在将相应的指令数据格式化后将其缓存到共享缓存单元3022中的IC部分或者IC缓存单元中。
在步骤S705中,译码单元303中的OC数据格式化模块303a将译码的指令数据格式化为微指令格式的指令数据,例如,微指令组,其中每个微指令组可以包括一条或多条微指令。并且译码单元303还可以将格式化后的微指令组缓存到共享缓存单元3022中的OC缓存装置。具体而言,译码单元303的OC数据格式化模块303a可以经由OC训练模块303d将格式化后的微指令组缓存到共享缓存单元3022中的OC缓存容量空间5031。在一个实施例中,可以在OC缓存容量空间5031中创建用于存储微指令的微指令缓存器条目(OC entry)。微指令组中的一个或多个微指令被缓存在所创建的微指令缓存器条目中,例如,一个微指令缓存器条目可以存放8条微指令(Uop)。
在步骤S706中,响应于启用微指令缓存提取模式,则OC取指模块3014将尝试从共享缓存单元3022中提取该物理地址所指示的微指令数据。具体而言,OC取指模块3014可以经由共享缓存单元50中的OC缓存装置503从OC缓存容量空间5031获取经译码的指令数据。
在一个实施例中,当能够获取相应的经译码的指令数据时,OC取指模块3014可以发送微指令缓存命中(OC hit)的信息到处理器的性能检测单元,此外,由于OC缓存装置中存储的是已经译码的指令数据,因而OC取指模块3014可以直接将获取的指令数据(例如,微指令组)发送到分发单元304以等待分发(步骤S707)。
在一个实施例中,当无法从OC缓存装置中提取该物理地址对应的经译码的指令数据时,则OC取指模块3014可以将微指令缓存缺失(OC Miss)的信息发送到性能检测单元,并且取指模式可以从微指令缓存提取模式切换回指令缓存译码模式,并在此之后将通过IC取指模块进行取指。
在步骤S707中,在指令缓存译码模式下,经过译码器译码的指令数据被发送到分发单元304以等待分发;在微指令缓存提取模式下,来自OC缓存装置的经译码的指令数据也被发送到分发单元304缓存以等待分发。
在步骤S708中,分发单元304将队列中的经译码的指令数据发送到后端执行单元进行执行操作,例如,寄存器重命名、执行、退休(retire)等。
由于共享缓存单元中的IC缓存装置和OC缓存装置充分共享,因此提供了指令数据或微指令数据存储的额外的灵活性。此外,由于可以基于在指令缓存译码模式或在微指令缓存提取模式下的缓存命中或缓存缺失的信息,调整IC缓存装置和OC缓存装置之间不同的容量配比,从而能够使得处理器更好地适配不同应用程序的应用特征,从而提升了指令调取的处理速度并改善了处理器的整体处理效率。
图8是根据本公开的至少一个实施例提供的处理器前端架构中调取指令的装置80的示意图。
如图8所示,调取指令的装置80可以包括取指单元801、缓存单元802、译码单元803和分发单元804。
进一步参考图8,在一个实施例中,取指单元801可以包括地址生成和翻译模块8010、快表缓存模块8011、取指模式判断模块8012、指令缓存(IC)取指模块8013和微指令缓存(OC)取指模块8014。在一个实施例中,快表缓存模块8011还可以进一步包括快表共享缓存单元8011a。这里,快表缓存模块8011可以与如图4所示出的实施例相同,故不再赘述。
在一个实施例中,缓存单元802可以包括第一级缓存存储器(L1 Cache)8020和第二级缓存存储器(L2 Cache)8021。在一些实施例中,第一级缓存存储器8020还可以包括IC更新模块8020a和IC预取模块8020b。此外,缓存单元802还可以包括共享缓存单元8022。如上所述,共享缓存单元可以位于第一级缓存存储器、第二级缓存存储器或译码单元的任一个或多个中。在图8示出的实施例中,第一级缓存存储器8020和译码单元803被示出为在其中分别包含一个共享缓存单元。例如,在一个实施例中,第一级缓存存储器8020中包含共享缓存单元8022,译码单元803中包含共享缓存单元8031。在一个实施例中,共享缓存单元8022和共享缓存单元8031之间还可以包含缓存共享通道(如图8中虚线所示)以用于两个共享缓存单元之间数据的传输。在一个实施例中,如将在下面详细描述的,共享缓存单元8022或共享缓存单元8031中的任一个可以包含用于存储未经译码的指令数据的IC缓存装置和用于存储经译码的指令数据的OC缓存装置。从而可以实现按照应用特性而相应调整用于存储未经译码的指令数据的容量空间和用于存储经译码的指令数据的容量空间的大小的技术效果。
此外,在一个实施例中,第二级缓存存储器8021还可以进一步包括IC数据格式化模块8021a。并且在一个实施例中,译码单元803还可以进一步包括OC数据格式化模块803a、OC更新模块803b、OC预取模块803c、OC训练模块803d和OC提取模块803e中的一个或多个。
图9是示出图8中共享缓存单元的进一步的示意性框图。
图9示出了图8中的第一级缓存存储器8020和译码单元803中所各自包含的共享缓存单元8022和共享缓存单元8031的进一步组成。
如图9所示,在一个实施例中,共享缓存单元8022中可以包含缓存容量分配模块901a、用于存储未经译码的指令数据的IC缓存装置902a,以及用于存储经译码的指令数据的OC缓存装置903a。在另一个实施例中,共享缓存单元8022中可以仅包含用于存储未经译码的指令数据的IC缓存装置902a,以及用于存储经译码的指令数据的OC缓存装置903a,而不包含缓存容量分配模块901a。在另一个实施例中,当共享缓存单元8022包含缓存容量分配模块901a时,缓存共享单元8031可以仅包含用于存储未经译码的指令数据的IC缓存装置902b,以及用于存储经译码的指令数据的OC缓存装置903b,而不包含缓存容量分配模块901b。在一个实施例中,共享缓存单元8022和共享缓存单元8031的组成可以相同或不相同。在图9所示的实施例中,共享缓存单元8022和共享缓存单元8031的组成相同,因而为了便于描述,此处仅对一个共享缓存单元,例如8022进行描述,而对于共享缓存单元8031的组成将不再赘述。
在一个实施例中,IC缓存装置902a中可以包括缓存容量空间9021a以用于缓存未经译码的指令数据。此外,在一个实施例中,OC缓存装置903a中可以包括缓存容量空间9031a以用于缓存经译码的指令数据。
图10是根据本公开的至少一个实施例提供的调取指令的方法1000的流程图。以下将结合图8、图9和图10描述根据本公开的至少一个实施例提供的在处理器前端架构中调取指令的方法1000。
如图10所示,在步骤S1001中,地址生成和翻译模块8010生成取指地址。在一个实施例中,所生成的取指地址可以是虚拟地址。地址生成和翻译模块8010还可以将虚拟地址翻译为对应的物理地址,并将该物理地址发送到快表缓存模块8011。
在步骤S1002中,快表缓存模块8011基于物理地址在快表共享缓存模块8011a中查询该物理地址的命中情况并确定该取指地址对应的指令数据的位置。
例如,在一个实施例中,可以分别在快表共享缓存模块中的IC快表缓存装置和OC快表缓存装置中查询该物理地址的命中情况,并将命中情况的结果发送到取指模式判断模块8012。此外,还可以确定该物理地址对应的指令数据在第一级缓存存储器8020的共享缓存单元8022中还是在译码单元803的共享缓存单元8031中,并将所确定的位置信息发送到取指模式判断模块8012和IC取指模块8013或OC取指模块8014。
在步骤S1003中,基于IC快表缓存装置和OC快表缓存装置的命中结果,取指模式判断模块8012确定取指模式。在一个实施例中,取指模式可以包括指令缓存译码模式(IC模式)和微指令缓存提取模式(OC模式)。当取指模式判断模块8012判断启用IC模式时,将相应的物理地址发送到IC取指模块8013,并且步骤进行到S1004。此外,当取指模式判断模块8012判断启用OC模式时,步骤进入到S1006。
在一个实施例中,取指模式判断模块8012还基于所确定指令数据的位置信息,对所述指令数据进行预取操作。例如,在一个实施例中,当取指模式判断模块8012判断启用IC模式,基于指令的位置信息,查询到所需要调取的指令数据在译码单元803的共享缓存单元8031的IC缓存装置中时,可以进行预取操作,将指令数据预取到共享缓存单元8022的IC缓存装置中。例如,可以向IC预取模块8020b发送预取指令。IC预取模块8020b响应于接收到该预取指令,可以向共享缓存单元8031的IC缓存装置902b发起预取操作,从缓存容量空间9021b中取出所需的指令数据,并通过缓存共享通道将其放入到缓存容量空间9021a中以完成预取操作。应当理解的是,类似操作也可以在OC模式下进行。通过以上方式对于指令进行预取操作,可以有效地提高取指令的命中率,降低取指令的时延。
在另一个实施例中,取指模式判断模块8012也可以判断不进行预取操作。在此情况下,IC取指模块8013或OC取指模块8014可以基于所接收的指令数据的位置信息直接到相应的共享缓存单元中对应的缓存容量空间中获取指令数据。
在步骤S1004中,响应于启用指令缓存译码模式,IC取指模块8013将尝试从共享缓存单元8022或共享缓存单元8031中提取该物理地址所指示的指令数据。具体而言,当进行指令预取时,IC取指模块可以从共享缓存单元8022中的IC缓存装置获取未经译码的指令数据;当不进行指令预取时,IC取指模块可以基于指令数据的位置信息从共享缓存单元8022或共享缓存单元8031的对应的IC缓存装置中获取未经译码的指令数据。
在一个实施例中,当能够从对应的共享缓存单元中的IC缓存装置获取相应的指令数据时,IC取指模块8013可以发送指令缓存命中(IC hit)的信息到处理器的性能检测单元,并且将该指令数据发送到译码单元803以进行译码操作。
在一个实施例中,当无法从对应的共享缓存单元中的IC缓存装置中提取该物理地址对应的指令数据时,IC取指模块8013可以将指令缓存缺失(IC Miss)的信息发送到性能检测单元,并且将从下一级缓存器,例如第二级缓存存储器8021中获取指令数据。第二级缓存存储器8021中的IC数据格式化模块8021a在将相应的指令数据格式化后将其缓存到共享缓存单元8022或共享缓存单元8031中各自的IC缓存装置902a和903b中。
在一个实施例中,第二级缓存存储器8021可以首先将格式化后的指令数据缓存到缓存共享单元8022的IC缓存装置902a中。当缓存容量空间9021a已满时,IC更新模块8020a将根据最近最少使用(Least Recently Used,LRU)原则更新缓存容量空间9021a。例如,可以将缓存容量空间9021a中储存的部分指令数据经由缓存共享通道(如图9中的虚线所示)发送到缓存共享单元8031中的缓存容量空间9021b中。从而能够扩展共享缓存单元8022中IC缓存装置902a的容量空间。
在另一个实施例中,当缓存容量空间9021a已满时,第二级缓存存储器8021可以将格式化后的指令数据直接缓存到共享缓存单元8031中IC缓存装置902b中的缓存容量空间9021b,从而避免因IC缓存装置之间因数据传输而产生的时延。
在步骤S1005中,译码单元803中的OC数据格式化模块803a将译码的指令数据格式化为微指令格式的指令数据,例如,微指令组,其中每个微指令组可以包括一条或多条微指令(Uop)。并且译码单元803还可以将格式化后的译码的指令数据(微指令组)缓存到共享缓存单元8022或共享缓存单元8031中各自的OC缓存装置903a和903b。在一个实施例中,可以在OC缓存装置(例如,903a和903b)中创建用于存储微指令的微指令缓存器条目(OCentry)。微指令组中的一个或多个微指令被缓存在所创建的微指令缓存器条目中,例如,一个微指令缓存器条目可以存放8条微指令。
在一个实施例中,译码单元803可以首先将格式化后的译码的指令数据(微指令组)缓存到共享缓存单元8031中OC缓存装置903b,例如,经过OC训练模块803d而训练到缓存容量空间9031b中。当缓存容量空间9031b已满时,OC更新模块803b将根据最近最少使用(LRU)原则更新缓存容量空间9031b。例如,可以将缓存容量空间9031b中储存的部分微指令组经由缓存共享通道(如图9中的虚线所示)发送到缓存共享单元8022中的OC缓存装置903a中。从而能够扩展共享缓存单元8031中OC缓存装置903b的容量空间。
在另一个实施例中,当缓存容量空间9031b已满时,译码单元803可以经由OC训练模块803d将格式化后的译码的指令数据(微指令组)缓存到共享缓存单元8022中OC缓存装置903a,从而避免因OC缓存装置之间因数据传输而产生的时延。
在步骤S1006中,响应于启用微指令缓存提取模式,则OC取指模块8014将尝试从共享缓存单元8022或共享缓存单元8031中提取该物理地址所指示的微指令数据。具体而言,当进行指令预取时,OC取指模块可以从共享缓存单元8031中的OC缓存装置获取经译码的指令数据;当不进行指令预取时,OC取指模块可以基于指令数据的位置信息从共享缓存单元8022或共享缓存单元8031的任一个中的OC缓存装置中获取未经译码的指令数据。
在一个实施例中,当能够获取相应的经译码的指令数据时,OC取指模块8014可以发送微指令缓存命中(OC hit)的信息到处理器的性能检测单元,由于OC缓存装置中存储的是已经译码的指令数据,因而可以直接将获取的指令数据(例如,微指令组)发送到分发单元804以等待分发(步骤S1007)。
在一个实施例中,当无法从OC缓存装置中提取该物理地址对应的经译码的指令数据时,则OC取指模块8014可以将微指令缓存缺失(OC Miss)的信息发送到性能检测单元,并且可以将取指模式从微指令缓存提取模式切换回指令缓存译码模式,在之后将通过IC取指模块8013进行取指。
在步骤S1007中,在指令缓存译码模式下,经过译码器803译码的指令数据被发送到分发单元804以等待分发;在微指令缓存提取模式下,来自OC缓存装置的经译码的指令数据也被发送到分发单元804缓存以等待分发。
在步骤S1008中,分发单元804将队列中的经译码的指令数据发送到后端执行单元进行执行操作,例如,寄存器重命名、执行、退休(retire)等。
通过以上技术方案,由于将缓存单元和译码单元中的缓存单元充分共享,因此提供了指令数据或微指令数据存储的额外的空间和灵活性。此外,由于可以基于在指令缓存译码模式或在微指令缓存提取模式下的缓存命中或缓存缺失的信息,调整IC缓存装置和OC缓存装置之间不同的容量配比,从而能够使得处理器更好地适配不同应用程序的应用特征,从而提升了指令调取的处理速度并改善了处理器的整体处理效率。
图11是根据本公开的至少一个实施例提供的处理器前端架构中调取指令的装置110的示意图。
如图11所示,调取指令的装置110可以包括取指单元1101、缓存单元1102、译码单元1103和分发单元1104。
进一步参考图11,在一个实施例中,取指单元1101可以包括地址生成和翻译模块1110、快表缓存模块1111、取指模式判断模块1112、指令缓存(IC)取指模块1113和微指令缓存(OC)取指模块1114。在一个实施例中,快表缓存模块1111还可以进一步包括快表共享缓存单元1111a。这里,快表缓存模块8011可以与如图4所示出的实施例相同,故不再赘述。
在一个实施例中,缓存单元1102可以包括第一级缓存存储器(L1 Cache)1120和第二级缓存存储器(L2 Cache)1121。此外,缓存单元1102还可以包括共享缓存单元。如上所述,共享缓存单元可以位于第一级缓存存储器、第二级缓存存储器或译码单元的任一个或多个中。在图11示出的实施例中,共享缓存单元1123包含在第二级缓存存储器1121中,此外,译码单元1103中也包含共享缓存单元1122。在一个实施例中,共享缓存单元1122和共享缓存单元1123之间还可以包含缓存共享通道(如图11中虚线所示)以用于两个共享缓存单元之间数据的传输。在一个实施例中,如将在下面详细描述的,共享缓存单元1122或共享缓存单元1123中的任一个可以包含用于存储未经译码的指令数据的IC缓存装置或用于存储经译码的指令数据的OC缓存装置。从而可以实现基于应用程序的不同的应用特性而相应调整用于存储未经译码的指令数据的容量空间和用于存储经译码的指令数据的容量空间的大小的技术效果。
此外,在一个实施例中,第二级缓存存储器1121还可以进一步包括IC数据格式化模块1121a。在一些实施例中,第二级缓存存储器1121还可以包括IC更新模块1121b和IC预取模块1121c。并且在一个实施例中,译码单元1103还可以进一步包括OC数据格式化模块1103a、OC更新模块1103b、OC预取模块1103c、OC训练模块1103d和OC提取模块1103e中的一个或多个。
图12是示出图11中共享缓存单元的进一步的示意性框图。
图12示出了图11中的译码单元1103和第二级缓存存储器1121中所各自包含的共享缓存单元1122和共享缓存单元1123的进一步组成。与上述图8和图9的实施例类似,共享缓存单元1122和共享缓存单元1123的组成可以相同或不相同。在图12所示的实施例中,共享缓存单元1122和共享缓存单元1123的组成相同,因而为了便于描述,此处仅对一个共享缓存单元,例如1122进行描述,而对于共享缓存单元1123的组成将不再赘述。
如图12所示,在一个实施例中,共享缓存单元1122可以包含缓存容量分配模块1201a、用于存储未经译码的指令数据的IC缓存装置1202a,以及用于存储经译码的指令数据的OC缓存装置1203a。
在一个实施例中,IC缓存装置1202a中可以包括缓存容量空间1221a以用于缓存未经译码的指令数据。此外,在一个实施例中,OC缓存装置1203a中可以包括缓存容量空间1231a以用于缓存经译码的指令数据。
图13是根据本公开的至少一个实施例提供的调取指令的方法1300的流程图。以下将结合图11、图12和图13描述根据本公开的至少一个实施例提供的在处理器前端架构中调取指令的方法1300。
如图13所示,在步骤S1301中,地址生成和翻译模块1110生成取指地址。在一个实施例中,所生成的取指地址可以是虚拟地址。地址生成和翻译模块1110还可以将虚拟地址翻译为对应的物理地址,并将该物理地址发送到快表缓存模块1111。
在步骤S1302中,基于物理地址在快表共享缓存模块1111a中查询该物理地址的命中情况并确定该物理地址对应的指令数据的位置。
例如,在一个实施例中,分别在快表共享缓存模块1111a中的IC快表缓存装置和OC快表缓存装置中查询该物理地址的命中情况,并将命中情况的结果发送到取指模式判断模块1112。
在步骤S1303中,基于IC快表缓存装置和OC快表缓存装置的命中结果,取指模式判断模块1112确定取指模式。在一个实施例中,取指模式可以包括指令缓存译码模式(IC模式)和微指令缓存提取模式(OC模式)。当取指模式判断模块1112判断启用IC模式时,将相应的物理地址发送到IC取指模块1113,并且步骤进行到S1304。此外,当取指模式判断模块1112判断启用OC模式时,步骤进入到S1306,将相应的物理地址发送到OC取指模块1114。
在一个实施例中,取指模式判断模块1112还基于所确定指令数据的位置信息,对所述指令数据进行预取操作。例如,在一个实施例中,当取指模式判断模块1112判断启用OC模式,基于指令的位置信息,查询到所需要调取的指令数据在第二级缓存存储器1121的共享缓存单元1123的OC缓存装置中时,则取指模式判断模块1112可以向OC预取模块1103c发送预取指令。OC预取模块1103c可以基于预取指令,向OC缓存装置1203b发起预取操作,将指令数据预取到共享缓存单元1122的OC缓存装置中,即,可以从缓存容量空间1231b中取出所需的指令数据,并通过缓存共享通道将其放入到缓存容量空间1231a中以完成预取操作。通过以上方式对于指令进行预取操作,可以有效地提高取指令的命中率,降低取指令的时延。
在另一个实施例中,取指模式判断模块1112也可以判断不进行预取操作。在此情况下,IC取指模块1113或OC取指模块1114可以基于所接收的指令数据的位置信息直接到相应的共享缓存单元中对应的缓存容量空间中获取指令数据。
在步骤S1304中,响应于启用指令缓存译码模式,IC取指模块1113将尝试从第一级缓存存储器1120、共享缓存单元1123或共享缓存单元1122中提取该物理地址所指示的指令数据。具体而言,当进行指令预取时,IC取指模块可以首先从第一级缓存存储器1120中获取未经译码的指令数据。在一个实施例中,当能够从第一级缓存存储器1120获取相应的指令数据时,IC取指模块1113可以发送指令缓存命中(IC hit)的信息到处理器的性能检测单元,并且将该指令数据发送到译码单元1103以进行译码操作。
在一个实施例中,当无法从第一级缓存存储器1120中提取该物理地址对应的指令数据时,IC取指模块1113可以将指令缓存缺失(IC Miss)的信息发送到性能检测单元,并且将从第二级缓存存储器1121的共享缓存单元中的IC缓存装置获取指令数据。在一个实施例中,当能够从第二级缓存存储器1121的共享缓存单元中的IC缓存装置获取相应的指令数据时,可以将其发送到第一级缓存存储器1120;当无法从第二级缓存存储器1121的共享缓存单元中的IC缓存装置获取指令数据,IC取指模块1113将从第二级缓存存储器1121的非共享缓存单元获取指令数据;当无法从第二级缓存存储器1121的非共享缓存单元获取指令数据时,IC取指模块1113将从译码单元1103的共享缓存单元1122获取指令数据。
在另一个实施例中,当不进行指令预取时,IC取指模块可以基于指令数据的位置信息从第一级缓存存储器1120、共享缓存单元1123或共享缓存单元1122的对应的IC缓存装置中获取未经译码的指令数据。
在一个实施例中,第二级缓存存储器1121中的IC数据格式化模块1121a在将相应的指令数据格式化后,首先将其缓存到共享缓存单元1123。当共享缓存单元1123的缓存容量空间1221b已满时,IC更新模块1121b将根据最近最少使用原则更新缓存容量空间1221b,例如,可以将缓存容量空间1221b中储存的部分指令数据经由缓存共享通道(如图12中的虚线所示)发送到缓存共享单元1122中的IC缓存装置1202a中。从而能够扩展共享缓存单元1123中IC缓存装置1202b的容量空间。
在另一个实施例中,当缓存容量空间1221b已满时,第二级缓存存储器1121可以将格式化后的指令数据直接缓存到共享缓存单元1122中IC缓存装置1202a中的缓存容量空间1221a,从而避免因IC缓存装置之间因数据传输而产生的时延。
在步骤S1305中,译码单元1103中的OC数据格式化模块1103a将译码的指令数据格式化为微指令格式的指令数据,例如,微指令组,其中每个微指令组可以包括一条或多条微指令(Uop)。并且译码单元1103还可以将格式化后的译码的指令数据(微指令组)缓存到共享缓存单元1122或共享缓存单元1123中各自的OC缓存装置1203a和1203b。在一个实施例中,可以在OC缓存装置(例如,1203a和1203b)中创建用于存储微指令的微指令缓存器条目(OC entry)。微指令组中的一个或多个微指令被缓存在所创建的微指令缓存器条目中,例如,一个微指令缓存器条目可以存放8条微指令。
在一个实施例中,译码单元1103可以首先将格式化后的译码的指令数据(微指令组)缓存到共享缓存单元1122中OC缓存装置1203a。例如,经过OC训练模块1103d而训练到缓存容量空间1231a中。当缓存容量空间1231a已满时,OC更新模块1103b将根据最近最少使用(LRU)原则更新缓存容量空间1231a。例如,可以将缓存容量空间1231a中储存的部分微指令组经由缓存共享通道(如图12中的虚线所示)发送到缓存共享单元1123中的OC缓存装置1203b,并储存在缓存容量空间1231b中。从而能够扩展共享缓存单元1122中OC缓存装置1203a的容量空间。
在另一个实施例中,当缓存容量空间1231a已满时,译码单元1103可以经由OC训练模块1103d将格式化后的译码的指令数据(微指令组)缓存到共享缓存单元1123中OC缓存装置1203b,从而避免因OC缓存装置之间因数据传输而产生的时延。
在步骤S1306中,响应于启用微指令缓存提取模式,则OC取指模块1114将尝试从共享缓存单元1123或共享缓存单元1122中提取该物理地址所指示的微指令数据。具体而言,当进行指令预取时,OC取指模块可以从共享缓存单元1122中的OC缓存装置获取经译码的指令数据;当不进行指令预取时,OC取指模块可以基于指令数据的位置信息从共享缓存单元1123或共享缓存单元1122的任一个中的OC缓存装置中获取未经译码的指令数据。
在一个实施例中,当能够获取相应的经译码的指令数据时,OC取指模块1114可以发送微指令缓存命中(OC hit)的信息到处理器的性能检测单元,由于OC缓存装置中存储的是已经译码的指令数据,因而可以直接将获取的指令数据(例如,微指令组)发送到分发单元1104以等待分发(步骤S1307)。
在一个实施例中,当无法从OC缓存装置中提取该物理地址对应的经译码的指令数据时,则OC取指模块1114可以将微指令缓存缺失(OC Miss)的信息发送到性能检测单元,并且可以将取指模式从微指令缓存提取模式切换回指令缓存译码模式,在之后将通过IC取指模块1113进行取指。
在步骤S1307中,在指令缓存译码模式下,经过译码器1103译码的指令数据被发送到分发单元1104以等待分发;在微指令缓存提取模式下,来自OC缓存装置的经译码的指令数据也被发送到分发单元1104缓存以等待分发。
在步骤S1308中,分发单元1104将队列中的经译码的指令数据发送到后端执行单元进行执行操作,例如,寄存器重命名、执行、退休(retire)等。
通过以上技术方案,由于将第二级缓存存储器和译码单元中的缓存单元充分共享,因此提供了指令数据或微指令数据存储的额外的空间和灵活性。此外,由于可以基于在指令缓存译码模式或在微指令缓存提取模式下的缓存命中或缓存缺失的信息,调整IC缓存装置和OC缓存装置之间不同的容量配比,从而能够使得处理器更好地适配不同应用程序的应用特征,从而提升了指令调取的处理速度并改善了处理器的整体处理效率。
如上所述,共享缓存单元可以位于第一级缓存存储器、第二级缓存存储器或译码单元的任一个或多个中。例如,在一个实施例中,第一级缓存存储器、第二级缓存存储器或译码单元的每一个中可以均包含共享缓存单元,从而能够更加充分地共享多个缓存单元。本公开对于共享缓存单元的具体数量和位置不作限制,对于能够实现本公开中的技术效果的多种共享缓存单元的布置方式应被理解为包含在本公开保护的范围内。
图14是根据本公开的至少一个实施例提供的处理装置的示意图。如图14所示,处理装置1400包含处理器1402和非瞬态存储器1403。其中,在该非瞬态存储器1403上存储有指令1401。在一个实施例中,当处理器1402执行指令1401时,可以实现根据上文所述的调取指令的方法中的一个或多个步骤。
图15是根据本公开的至少一个实施例提供的计算机可读存储介质的示意图。如图15所示,计算机可读存储介质1500非暂时性地存储有计算机可读指令1501。例如,当计算机可读指令1501由计算机执行时可以执行根据上文所述的调取指令的方法中的一个或多个步骤。
例如,该计算机可读存储介质1500可以应用于上述用于处理装置1400中。例如,计算机可读存储介质1500可以为图14所示的处理装置1400中的非瞬态存储器1403。
图16是根据本公开的至少一个实施例提供的处理装置的示意图。如图16所示,处理装置1600包含微指令缓存1601、微指令取指模块1602和微指令缓存容量分配模块1603。在至少一个实施例中,微指令缓存1601被配置为缓存一条或多条微指令,微指令取指模块1602配置为尝试从所述微指令缓存中获取目标微指令;微指令缓存容量分配模块1603,配置为调整微指令缓存的容量。对应地,本公开的至少一个实施例提供了一种处理装置的操作方法,该操作方法包括:获取微指令缓存容量调整指令;调整微指令缓存的容量大小,以缓存一条或多条微指令;使用容量调整后的微指令缓存执行微指令取指操作。
例如,在至少一个实施例中,微指令缓存容量分配模块1603被配置为获取微指令缓存容量调整指令,并且基于微指令缓存容量调整指令而调整微指令缓存1601的容量大小,以缓存一条或多条微指令。在至少一个实施例中,微指令取指模块1602使用容量调整后的微指令缓存来执行微指令取指操作。
例如,在至少一个实施例中,处理装置包括共享缓存模块,该共享缓存模块包括微指令缓存1601以及指令缓存(图中未示出),即微指令缓存1601和指令缓存分享同一个或多个物理存储装置(例如参考图5A或图8、图9的示例),微指令缓存容量分配模块1603用于调整微指令缓存1601在该共享缓存模块中与指令缓存的容量大小比例,从而调整微指令缓存的容量,当微指令缓存1601的容量增加或减小时,则指令缓存的容量则相应地减少或增加。当微指令缓存1601和指令缓存分享多个物理存储装置时,例如,微指令缓存1601和指令缓存都分别占据该多个存储装置中每个的一部分,此情形下该多个物理存储装置(多个共享缓存)之间有缓存共享通道,以用于该多个物理存储装置之间数据的传输。
又例如,在至少一个示例中,共享缓存模块包括微指令缓存1601以及例如L2缓存(即第二级缓存),而微指令缓存1601本身属于L1缓存(即第一级缓存),即微指令缓存1601和L2缓存分享同一个或多个物理存储装置(例如参考图11、图12的示例),微指令缓存容量分配模块1603用于调整微指令缓存1601在该共享缓存模块中与L2缓存的容量大小比例,从而调整微指令缓存的容量,当微指令缓存1601的容量增加或减小时,则L2缓存的容量则相应地减少或增加。当微指令缓存1601和L2缓存分享多个物理存储装置时,例如,微指令缓存1601和L2缓存都分别占据该多个存储装置中每个的一部分,此情形下该多个物理存储装置(共享缓存)之间有缓存共享通道,以用于该多个存储装置之间数据的传输。
以上所述的方法的各个操作可以通过能够进行相应的功能的任何适当的手段而进行。该手段可以包括各种硬件和/或软件组件和/或模块,包括但不限于硬件的电路、专用集成电路(ASIC)或处理器。
可以利用被设计用于进行在此所述的功能的通用处理器、数字信号处理器(DSP)、ASIC、场可编程门阵列信号(FPGA)或其他可编程逻辑器件(PLD)、离散门或晶体管逻辑、离散的硬件组件或者其任意组合而实现或进行所述的各个例示的逻辑块、模块和电路。通用处理器可以是微处理器,但是作为替换,该处理器可以是任何商业上可获得的处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如DSP和微处理器的组合,多个微处理器、与DSP核协作的一个或多个微处理器或任何其他这样的配置。
结合本公开描述的方法或算法的步骤可以直接嵌入在硬件中、处理器执行的软件模块中或者这两种的组合中。软件模块可以存在于任何形式的有形存储介质中。可以使用的存储介质的一些例子包括随机存取存储器(RAM)、只读存储器(ROM)、快闪存储器、EPROM存储器、EEPROM存储器、寄存器、硬碟、可移动碟、CD-ROM等。存储介质可以耦接到处理器以便该处理器可以从该存储介质读取信息以及向该存储介质写信息。在替换方式中,存储介质可以与处理器是整体的。软件模块可以是单个指令或者许多指令,并且可以分布在几个不同的代码段上、不同的程序之间以及跨过多个存储介质。
因此,计算机程序产品可以进行在此给出的操作。例如,这样的计算机程序产品可以是具有有形存储(和/或编码)在其上的指令的计算机可读的有形介质,该指令可由一个或多个处理器执行以进行在此所述的操作。计算机程序产品可以包括包装的材料。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本发明。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本发明的范围。因此,本发明不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
Claims (38)
1.一种调取指令的方法,包括:
生成第一指令的取指地址;
响应于第一取指模式,基于所述取指地址,尝试从一个或多个共享缓存单元的至少一个中获取未经译码的指令数据,或者
响应于第二取指模式,基于所述取指地址,尝试从所述一个或多个共享缓存单元的至少一个中获取经译码的指令数据,其中,所述共享缓存单元中包含用于存储未经译码的指令数据的容量空间,以及用于存储经译码的指令数据的容量空间;
基于应用程序的应用特征确定所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例。
2.根据权利要求1所述的方法,还包括:
基于所述取指地址在快表共享缓存模块中查询所述取指地址的命中情况或对应的指令数据的位置信息,
其中,所述快表共享缓存模块中包含用于存储未经译码的指令数据的快表的容量空间和用于存储经译码的指令数据的快表的容量空间。
3.根据权利要求2所述的方法,其中,所述共享缓存单元包含在以下的一个或多个部件中:第一级缓存存储器、第二级缓存存储器和译码单元。
4.根据权利要求2所述的方法,其中,所述共享缓存单元包含在第一级缓存存储器和译码单元中;或者,所述共享缓存单元包含在第二级缓存存储器和译码单元中。
5.根据权利要求4所述的方法,还包括:
基于所述指令数据的位置信息,将所述指令数据预取到所述一个或多个共享缓存单元的至少一个中,
其中,所述指令数据包括所述未经译码的指令数据和所述经译码的指令数据。
6.根据权利要求5所述的方法,其中,响应于所述第一取指模式,基于所述取指地址,尝试从一个或多个共享缓存单元的至少一个中获取未经译码的指令数据包括:
从所述一个或多个共享缓存单元的至少一个中的所述用于存储未经译码的指令数据的容量空间中获取所述未经译码的指令数据。
7.根据权利要求5所述的方法,其中,响应于所述第二取指模式,基于所述取指地址,尝试从所述一个或多个共享缓存单元的至少一个中获取经译码的指令数据包括:
从所述一个或多个共享缓存单元的至少一个中的所述用于存储经译码的指令数据的容量空间中获取所述经译码的指令数据。
8.根据权利要求6所述的方法,其中,从所述一个或多个共享缓存单元的至少一个中的所述用于存储未经译码的指令数据的容量空间中获取所述未经译码的指令数据包括:
响应于从所述一个或多个共享缓存单元的至少一个中的所述用于存储未经译码的指令数据的容量空间中获取所述未经译码的指令数据,给出所述未经译码的指令数据命中的信息,
响应于无法从所述一个或多个共享缓存单元的任一个中的所述用于存储未经译码的指令数据的容量空间中获取所述未经译码的指令数据,给出所述未经译码的指令数据未命中的信息。
9.根据权利要求7所述的方法,其中,从所述一个或多个共享缓存单元的至少一个中的所述用于存储经译码的指令数据的容量空间中获取所述经译码的指令数据包括:
响应于从所述一个或多个共享缓存单元的至少一个中的所述用于存储经译码的指令数据的容量空间中获取所述经译码的指令数据,给出所述经译码的指令数据命中的信息,
响应于无法从所述一个或多个共享缓存单元的任一个中的所述用于存储经译码的指令数据的容量空间中获取所述经译码的指令数据,给出所述经译码的指令数据未命中的信息。
10.根据权利要求1所述的方法,其中,所述应用程序的所述应用特征通过所述应用程序中所在线程的以下参数表征:
所有非循环体指令的地址空间大小的总和a,
所有n个循环体指令的每一个的地址空间的大小bi,其中i=1…n,
每一个循环体出现的次数pi,其中i=1…n。
11.根据权利要求10所述的方法,其中,所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例基于以下公式确定:
a:bi
其中,i=m,bm为地址空间大小最大的循环体指令的大小或bm为循环次数最多的循环体指令的大小。
12.根据权利要求10所述的方法,其中,所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例基于以下公式确定:
其中,wi是权重系数,并且
13.根据权利要求8-9中任一项所述的方法,还包括:
基于所述未经译码的指令数据命中的信息或未经译码的指令数据未命中的信息来计算所述未经译码的指令数据的命中率,并且基于所述经译码的指令数据命中的信息或所述经译码的指令数据未命中的信息来计算所述经译码的指令数据命中率。
14.根据权利要求13所述的方法,还包括:
基于所述未经译码的指令数据的命中率、所述经译码的指令数据命中率、所述未经译码的指令数据的命中率和所述经译码的指令数据命中率之间的关系中的任一个确定是否调整所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例。
15.根据权利要求14所述的方法,还包括:
响应于确定调整所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例,计算调整后的所述经译码的指令数据命中率相对于调整前的所述经译码的指令数据命中率的提升率,并且响应于所述提升率小于阈值,停止对于所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例的调整。
16.根据权利要求15所述的方法,其中,所述快表共享缓存模块中包含的用于存储未经译码的指令数据的快表的容量空间和用于存储经译码的指令数据的快表的容量空间的比例被设置为与所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例相同。
17.根据权利要求16所述的方法,其中,响应于所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间或用于存储经译码的指令数据的容量空间中的任一个已满时,基于最近最少使用原则更新所述用于存储未经译码的指令数据的容量空间或用于存储经译码的指令数据的容量空间。
18.一种调取指令的装置,包括:
一个或多个共享缓存单元,所述共享缓存单元中包含用于存储未经译码的指令数据的容量空间,以及用于存储经译码的指令数据的容量空间;
指令缓存取指模块,被配置为响应于第一取指模式,基于生成的指令的取指地址,尝试从所述一个或多个共享缓存单元的至少一个中获取未经译码的指令数据,或者,
微指令缓存取指模块,被配置为响应于第二取指模式,基于所述取指地址,尝试从所述一个或多个共享缓存单元的至少一个中获取经译码的指令数据,
其中,所述共享缓存单元还包括缓存容量分配模块,所述缓存容量分配模块被配置为基于应用程序的应用特征确定所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例。
19.根据权利要求18所述的装置,还包括快表缓存模块,并且所述快表缓存模块还包括快表共享缓存单元,其中所述快表共享缓存单元被配置为基于所述取指地址在快表共享缓存模块中查询所述取指地址的命中情况或对应的指令数据的位置信息,其中所述快表共享缓存模块中包含用于存储未经译码的指令数据的快表的容量空间和用于存储经译码的指令数据的快表的容量空间。
20.根据权利要求19所述的装置,还包括第一级缓存存储器、第二级缓存存储器和译码单元,其中,所述共享缓存单元包含在以下的一个或多个中:所述第一级缓存存储器、所述第二级缓存存储器、所述译码单元。
21.根据权利要求20所述的装置,其中所述共享缓存单元包含在所述第一级缓存存储器和所述译码单元中;或者所述共享缓存单元包含在所述第二级缓存存储器和所述译码单元中。
22.根据权利要求21所述的装置,还包括预取模块,并且所述预取模块还被配置为基于所述指令数据的位置信息,将所述指令数据预取到所述一个或多个共享缓存单元的至少一个中,其中所述指令数据包括所述未经译码的指令数据和所述经译码的指令数据。
23.根据权利要求22所述的装置,其中,所述指令缓存取指模块还被配置为:从所述一个或多个共享缓存单元的至少一个中的所述用于存储未经译码的指令数据的容量空间中获取所述未经译码的指令数据。
24.根据权利要求22所述的装置,其中,所述微指令缓存取指模块还被配置为:从所述一个或多个共享缓存单元的至少一个中的所述用于存储经译码的指令数据的容量空间中获取所述经译码的指令数据。
25.根据权利要求23中任一项所述的装置,其中,所述指令缓存取指模块还被配置为:
响应于从所述一个或多个共享缓存单元的至少一个中的所述用于存储未经译码的指令数据的容量空间中获取所述未经译码的指令数据,给出所述未经译码的指令数据命中的信息,
响应于无法从所述一个或多个共享缓存单元的任一个中的所述用于存储未经译码的指令数据的容量空间中获取所述未经译码的指令数据,给出所述未经译码的指令数据未命中的信息。
26.根据权利要求24所述的装置,其中,所述微指令缓存取指模块还被配置为:
响应于从所述一个或多个共享缓存单元的至少一个中的所述用于存储经译码的指令数据的容量空间中获取所述经译码的指令数据,给出所述经译码的指令数据命中的信息,
响应于无法从所述一个或多个共享缓存单元的任一个中的所述用于存储经译码的指令数据的容量空间中获取所述经译码的指令数据,给出所述经译码的指令数据未命中的信息。
27.根据权利要求18所述的装置,其中,所述应用程序的所述应用特征通过所述应用程序中所在线程的以下参数表征:
所有非循环体指令的地址空间大小的总和a,
所有n个循环体指令的每一个的地址空间的大小bi,其中i=1…n,
每一个循环体出现的次数pi,其中i=1…n。
28.根据权利要求27所述的装置,其中,所述缓存容量分配模块还被配置为基于以下公式确定所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例:
a:bi
其中,i=m,bm为地址空间大小最大的循环体指令的大小或bm为循环次数最多的循环体指令的大小。
29.根据权利要求27所述的装置,其中,所述缓存容量分配模块还被配置为基于以下公式确定所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例:
其中,wi是权重系数,并且
30.根据权利要求25-26中任一项所述的装置,其中,所述缓存容量分配模块还被配置为,基于所述未经译码的指令数据命中的信息或未经译码的指令数据未命中的信息来计算所述未经译码的指令数据的命中率,并且基于所述经译码的指令数据命中的信息或所述经译码的指令数据未命中的信息来计算所述经译码的指令数据命中率。
31.根据权利要求30所述的装置,其中,所述缓存容量分配模块还被配置为,基于所述未经译码的指令数据的命中率、所述经译码的指令数据命中率、所述未经译码的指令数据的命中率和所述经译码的指令数据命中率之间的关系中的任一个确定是否调整所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例。
32.根据权利要求31所述的装置,其中,所述缓存容量分配模块还被配置为响应于确定调整所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例,计算调整后的所述经译码的指令数据命中率相对于调整前的所述经译码的指令数据命中率的提升率,并且响应于所述提升率小于阈值,停止对于所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例的调整。
33.根据权利要求32所述的装置,其中,所述快表共享缓存模块还包括快表缓存装置容量分配模块,所述快表缓存装置容量分配模块被配置为将所述快表共享缓存模块中包含的用于存储未经译码的指令数据的快表的容量空间和用于存储经译码的指令数据的快表的容量空间的比例设置为与所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例相同。
34.根据权利要求33所述的装置,还包括更新模块,并且所述更新模块还被配置为响应于所述共享缓存单元中包含的用于存储未经译码的指令数据的容量空间或用于存储经译码的指令数据的容量空间中的任一个已满时,基于最近最少使用原则更新所述用于存储未经译码的指令数据的容量空间或用于存储经译码的指令数据的容量空间。
35.一种处理装置,包括:
处理器;以及
非瞬态存储器,存储有可执行指令
其中,当由所述处理器执行所述可执行指令时,以执行权利要求1-17中任一项所述的方法。
36.一种计算机可读存储介质,其上存储有计算机可读指令,所述计算机可读指令包含用于被处理器运行时以执行权利要求1-17中任一项所述的方法的程序代码。
37.一种处理装置,包括:
微指令缓存,配置为缓存一条或多条微指令;
微指令取指模块,配置为尝试从所述微指令缓存中获取目标微指令;
微指令缓存容量分配模块,配置为基于应用程序的应用特征确定作为共享缓存单元的所述微指令缓存中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例。
38.一种处理装置的操作方法,包括:
获取微指令缓存容量调整指令;
基于应用程序的应用特征确定作为共享缓存单元的微指令缓存中包含的用于存储未经译码的指令数据的容量空间以及用于存储经译码的指令数据的容量空间之间的比例,从而调整所述微指令缓存的容量大小,以缓存一条或多条微指令;
使用容量调整后的微指令缓存执行微指令取指操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210730435.6A CN115098169B (zh) | 2022-06-24 | 2022-06-24 | 基于容量共享的调取指令的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210730435.6A CN115098169B (zh) | 2022-06-24 | 2022-06-24 | 基于容量共享的调取指令的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115098169A CN115098169A (zh) | 2022-09-23 |
CN115098169B true CN115098169B (zh) | 2024-03-05 |
Family
ID=83293501
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210730435.6A Active CN115098169B (zh) | 2022-06-24 | 2022-06-24 | 基于容量共享的调取指令的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115098169B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115525344B (zh) * | 2022-10-31 | 2023-06-27 | 海光信息技术股份有限公司 | 一种译码方法、处理器、芯片及电子设备 |
CN117093371B (zh) * | 2023-02-23 | 2024-05-17 | 摩尔线程智能科技(北京)有限责任公司 | 缓存资源分配方法、装置、电子设备和存储介质 |
CN116414463B (zh) * | 2023-04-13 | 2024-04-12 | 海光信息技术股份有限公司 | 指令调度方法、指令调度装置、处理器及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1716183A (zh) * | 2004-06-30 | 2006-01-04 | 中国科学院计算技术研究所 | 一种应用于同时多线程处理器的取指控制装置及其方法 |
WO2014178683A1 (ko) * | 2013-05-03 | 2014-11-06 | 삼성전자 주식회사 | 프리페치를 위한 캐시 제어 장치 및 그 캐시 제어 장치를 이용한 프리페치 방법 |
CN104252425A (zh) * | 2013-06-28 | 2014-12-31 | 华为技术有限公司 | 一种指令缓存的管理方法和处理器 |
CN104699627A (zh) * | 2013-12-06 | 2015-06-10 | 上海芯豪微电子有限公司 | 一种缓存系统和方法 |
CN112540789A (zh) * | 2019-09-23 | 2021-03-23 | 阿里巴巴集团控股有限公司 | 一种指令处理装置、处理器及其处理方法 |
CN114116016A (zh) * | 2022-01-27 | 2022-03-01 | 广东省新一代通信与网络创新研究院 | 指令预取方法及装置 |
CN114116533A (zh) * | 2021-11-29 | 2022-03-01 | 海光信息技术股份有限公司 | 利用共享存储器存储数据的方法 |
CN114168202A (zh) * | 2021-12-21 | 2022-03-11 | 海光信息技术股份有限公司 | 指令调度方法、指令调度装置、处理器及存储介质 |
CN114238167A (zh) * | 2021-12-14 | 2022-03-25 | 海光信息技术股份有限公司 | 信息预取方法、处理器、电子设备 |
-
2022
- 2022-06-24 CN CN202210730435.6A patent/CN115098169B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1716183A (zh) * | 2004-06-30 | 2006-01-04 | 中国科学院计算技术研究所 | 一种应用于同时多线程处理器的取指控制装置及其方法 |
WO2014178683A1 (ko) * | 2013-05-03 | 2014-11-06 | 삼성전자 주식회사 | 프리페치를 위한 캐시 제어 장치 및 그 캐시 제어 장치를 이용한 프리페치 방법 |
CN104252425A (zh) * | 2013-06-28 | 2014-12-31 | 华为技术有限公司 | 一种指令缓存的管理方法和处理器 |
CN104699627A (zh) * | 2013-12-06 | 2015-06-10 | 上海芯豪微电子有限公司 | 一种缓存系统和方法 |
CN112540789A (zh) * | 2019-09-23 | 2021-03-23 | 阿里巴巴集团控股有限公司 | 一种指令处理装置、处理器及其处理方法 |
CN114116533A (zh) * | 2021-11-29 | 2022-03-01 | 海光信息技术股份有限公司 | 利用共享存储器存储数据的方法 |
CN114238167A (zh) * | 2021-12-14 | 2022-03-25 | 海光信息技术股份有限公司 | 信息预取方法、处理器、电子设备 |
CN114168202A (zh) * | 2021-12-21 | 2022-03-11 | 海光信息技术股份有限公司 | 指令调度方法、指令调度装置、处理器及存储介质 |
CN114116016A (zh) * | 2022-01-27 | 2022-03-01 | 广东省新一代通信与网络创新研究院 | 指令预取方法及装置 |
Non-Patent Citations (2)
Title |
---|
Time and energy modeling of high–performance Level-3 BLAS on x86 architectures;Pedro Alonso;Simulation Modelling Practice and Theory;第55卷;全文 * |
基于基地址寄存器映射的数据缓存研究;沈秀红;赵朝君;孟建熠;项晓燕;;计算机工程(第05期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN115098169A (zh) | 2022-09-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115098169B (zh) | 基于容量共享的调取指令的方法及装置 | |
US9015422B2 (en) | Access map-pattern match based prefetch unit for a processor | |
US8347039B2 (en) | Programmable stream prefetch with resource optimization | |
TWI545435B (zh) | 於階層式快取處理器中之協調預取 | |
EP3129890B1 (en) | Set associative cache memory with heterogeneous replacement policy | |
US8667225B2 (en) | Store aware prefetching for a datastream | |
EP3055775B1 (en) | Cache replacement policy that considers memory access type | |
US10303609B2 (en) | Independent tuning of multiple hardware prefetchers | |
EP3066572B1 (en) | Cache memory budgeted by chunks based on memory access type | |
EP3066571B1 (en) | Cache memory budgeted by ways on memory access type | |
CN106569958B (zh) | 以内存访问类型来分配的全关联快取内存 | |
EP3676713B1 (en) | Utilization-based throttling of hardware prefetchers | |
US10387320B2 (en) | Integrated confirmation queues | |
CN109983538B (zh) | 存储地址转换 | |
US20030131218A1 (en) | Method and apparatus for mapping software prefetch instructions to hardware prefetch logic | |
US9367466B2 (en) | Conditional prefetching | |
EP2562652B1 (en) | System and method for locking data in a cache memory | |
CN115427932A (zh) | 为处理器中的微操作高速缓存过滤微操作 | |
US11442863B2 (en) | Data processing apparatus and method for generating prefetches | |
TW202225978A (zh) | 用於具有大的碼覆蓋區的工作負載的動態共享快取劃分 | |
Sawant et al. | Memory hierarchies-basic design and optimization techniques |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |