CN115640047B - 指令操作方法及装置、电子装置及存储介质 - Google Patents
指令操作方法及装置、电子装置及存储介质 Download PDFInfo
- Publication number
- CN115640047B CN115640047B CN202211097568.0A CN202211097568A CN115640047B CN 115640047 B CN115640047 B CN 115640047B CN 202211097568 A CN202211097568 A CN 202211097568A CN 115640047 B CN115640047 B CN 115640047B
- Authority
- CN
- China
- Prior art keywords
- instruction
- source memory
- read
- register
- type instruction
- 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 111
- 238000012512 characterization method Methods 0.000 claims abstract description 27
- 238000013507 mapping Methods 0.000 claims description 86
- 238000004590 computer program Methods 0.000 claims description 12
- 230000004044 response Effects 0.000 claims description 8
- 230000004048 modification Effects 0.000 claims description 4
- 238000012986 modification Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 19
- 238000004364 calculation method Methods 0.000 description 16
- 230000007246 mechanism Effects 0.000 description 13
- 238000012545 processing Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 10
- 230000006870 function Effects 0.000 description 8
- 230000008859 change Effects 0.000 description 5
- 238000006073 displacement reaction Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 238000011010 flushing procedure Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 1
- 238000011017 operating method Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
Abstract
本公开提供了一种指令操作方法及装置、电子装置及存储介质,该指令操作方法包括:为第一读类型指令中的第一源内存操作数分配源内存架构寄存器;将第一源内存操作数加载到源内存架构寄存器;将在第一读类型指令之后的第二读类型指令中的第二源内存操作数的地址表征信息更改为源内存架构寄存器的编号,以执行第二读类型指令,其中,第二读类型指令的第二源内存操作数与第一读类型指令的第一源内存操作数相同。该指令操作方法可以使得对数据的后续读类型指令可以从前序读类型指令旁路该数据,从而加速该后续读类型指令的执行。
Description
技术领域
本公开的实施例涉及一种指令操作方法及装置、电子装置及存储介质。
背景技术
处理器可以通过例如取指、译码、分配、执行、结果写入的整个过程来对指令进行操作,以进行各种数据处理。要被处理的数据被存储在诸如物理寄存器堆、缓存或者物理内存的存储架构中。处理器可以响应于对指令的操作来从这些存储架构中获取相应的数据来进行处理,以得到指令的操作的结果。
发明内容
本公开的至少一个实施例提供了一种指令操作方法,该指令操作方法包括:为第一读类型指令中的第一源内存操作数分配源内存架构寄存器;将第一源内存操作数加载到源内存架构寄存器;将在第一读类型指令之后的第二读类型指令中的第二源内存操作数的地址表征信息更改为源内存架构寄存器的编号,以执行第二读类型指令。这里,第二读类型指令的第二源内存操作数与第一读类型指令的第一源内存操作数相同。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,第一读类型指令为纯读指令,并且指令操作方法还包括:将第一读类型指令的目的架构寄存器和源内存架构寄存器重命名为同一目的物理寄存器,其中,将第一源内存操作数加载到源内存架构寄存器包括:执行第一读类型指令,以将第一源内存操作数存储到目的物理寄存器。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,第一读类型指令为类读指令,并且第一读类型指令被译码为多条微指令,多条微指令包括第一纯读微指令,第一纯读微指令包括第一源内存操作数,其中,为第一读类型指令中的第一源内存操作数分配源内存架构寄存器包括:为第一纯读微指令中的第一源内存操作数分配源内存架构寄存器;将第一纯读微指令的目的架构寄存器和源内存架构寄存器重命名为同一目的物理寄存器,其中,将第一源内存操作数加载到源内存架构寄存器包括:执行第一纯读微指令,以将第一源内存操作数存储到目的物理寄存器。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,还包括:维护源内存架构寄存器和目的物理寄存器之间的映射关系;以及维护目的架构寄存器和目的物理寄存器之间的映射关系。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,源内存架构寄存器和目的物理寄存器之间的映射关系以及目的架构寄存器和目的物理寄存器之间的映射关系均维护在寄存器重命名映射表中。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,第一读类型指令为纯读指令,并且将第一源内存操作数加载到源内存架构寄存器包括:将第一源内存操作数搬运到第一读类型指令的目的物理架构寄存器;以及将搬运到目的物理架构寄存器的第一源内存操作数搬运到源内存架构寄存器。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,第一读类型指令为类读指令,并且第一读类型指令被译码为多条微指令,多条微指令包括第一纯读微指令,第一纯读微指令包括第一源内存操作数,其中,为第一读类型指令中的第一源内存操作数分配源内存架构寄存器包括:为第一纯读微指令中的第一源内存操作数分配源内存架构寄存器;其中,将第一源内存操作数加载到源内存架构寄存器包括:将第一源内存操作数搬运到第一纯读微指令的目的物理架构寄存器;以及将搬运到目的物理架构寄存器的第一源内存操作数搬运到源内存架构寄存器。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,源内存架构寄存器的分配和释放由硬件管理。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,第一读类型指令的第一指令地址和第二读类型指令的第二指令地址相同。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,第一读类型指令和第二读类型指令为指令循环体中的同一指令。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,还包括:获取包括第一读类型指令的第一指令地址与源内存架构寄存器的映射关系的数据结构;以及查找数据结构,以检查第二读类型指令的第二指令地址是否命中数据结构中的第一指令地址,其中,响应于第二读类型指令的第二指令地址命中数据结构中的第一指令地址,执行将在第一读类型指令之后的第二读类型指令中的第二源内存操作数的地址表征信息更改为源内存架构寄存器的编号。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,数据结构为映射表。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,源内存架构寄存器的编号被复用为映射表的索引序号并且不存在于映射表的表项中;或者源内存架构寄存器的编号存在于映射表的表项中。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,执行第二读类型指令包括:从源内存架构寄存器读取第一源内存操作数来作为第二源内存操作数。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,还包括:检查从源内存架构寄存器读取的第一源内存操作数的正确性;以及响应于从源内存架构寄存器读取第一源内存操作数不正确,刷新流水线,以重新执行第二读类型指令。
例如,根据本公开的至少一个实施例提供的一种指令操作方法,还包括:阻止第二读类型指令通过访问缓存来获取第二源内存操作数。
本公开的至少一个实施例提供了一种指令操作装置,该指令操作装置包括:分配单元,被配置为为第一读类型指令中的第一源内存操作数分配源内存架构寄存器;加载单元,被配置为将第一源内存操作数加载到源内存架构寄存器;更改单元,被配置为将在第一读类型指令之后的第二读类型指令中的第二源内存操作数的地址表征信息更改为源内存架构寄存器的编号,以执行第二读类型指令。这里,第二读类型指令的第二源内存操作数与第一读类型指令的第一源内存操作数相同。
本公开的至少一个实施例提供了一种指令操作装置,该指令操作装置包括:处理器;存储器,包括一个或多个计算机程序模块;其中,该一个或多个计算机程序模块被存储在该存储器中并被配置为由该处理器执行,该一个或多个计算机程序模块包括用于执行如上所述的实施例的指令操作方法的指令。
本公开的至少一个实施例提供了一种电子装置,包括如上所述的实施例的指令操作装置。
本公开的至少一个实施例提供了一种非瞬时可读存储介质,该非瞬时可读存储介质上存储有计算机指令,其中,该计算机指令被处理器执行时,使得处理器执行如上所述的实施例的指令操作方法。
如此,本公开的至少一个实施例提供的指令操作方法及装置、电子装置及存储介质可以使得对数据的后续读类型指令可以从前序读类型指令旁路该数据,从而加速该后续读类型指令的执行。
附图说明
为了更清楚地说明本公开的实施例的技术方案,下面将对本公开的实施例的附图作简单地介绍。明显地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1示出了示例性的处理器中的存储数据的结构的示意图;
图2示出了示例性的处理器核心的微架构的示意图;
图3示出了与寄存器重命名相关的示例性结构的示意图;
图4示出了根据本公开的至少一实施例的指令操作方法的流程图;
图5示出了根据本公开的至少一实施例的映射表的示意图;
图6示出了根据本公开的至少一实施例的另一映射表示意图;
图7示出了根据本公开的至少一实施例的寄存器重命名表的示意图;
图8示出了根据本公开的至少一实施例的指令操作装置的示意图;
图9示出了根据本公开至少一实施例的另一指令操作装置的示意图;
图10示出了根据本公开的至少一实施例的电子装置的示意图;
图11示出了根据本公开至少一实施例的非瞬时可读存储介质的示意图。
具体实施方式
现在将详细参考本公开的具体实施例,在附图中例示了本公开的示例。尽管将结合具体实施例描述本公开,但将理解,不是想要将本公开限于描述的实施例。相反,想要覆盖由所附权利要求限定的在本公开的精神和范围内包括的变更、修改和等价物。应注意,本文描述的方法操作都可以由任何功能块或功能布置来实现,且任何功能块或功能布置可被实现为物理实体或逻辑实体、或者两者的组合。
为了使本领域技术人员更好地理解本公开,下面结合附图和具体实施方式对本公开作进一步详细说明。
注意,接下来要介绍的示例仅是具体的示例,而不作为限制本公开的实施例必须为示出和描述的具体的外形、硬件、连接关系、操作、数值、条件、数据、顺序等等。本领域技术人员可以通过阅读本说明书来运用本公开的构思来构造本说明书中未提到的更多实施例。
本公开中使用的术语是考虑到关于本公开的功能而在本领域中当前广泛使用的那些通用术语,但是这些术语可以根据本领域普通技术人员的意图、先例或本领域新技术而变化。此外,特定术语可以由申请人选择,并且在这种情况下,其详细含义将在本公开的详细描述中描述。因此,说明书中使用的术语不应理解为简单的名称,而是基于术语的含义和本公开的总体描述。
本公开中使用了流程图来说明根据本申请的实施例的系统所执行的操作。应当理解的是,前面或下面操作不一定按照顺序来精确地执行。相反,根据需要,可以按照倒序或同时处理各种步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
图1示出了示例性的处理器(例如,CPU)中的存储数据的结构的示意图100。
参见图1,处理器包括多个处理器核心(CPU核心)101、114等,该处理器中的存储数据的结构可以包括物理寄存器堆102、缓存以及物理内存112。
物理寄存器堆102存在于CPU核心101中,并且通常由触发器(flip-flop)构成。一般地,CPU核心101可以包含几百个物理寄存器。与缓存以及物理内存112相比,物理寄存器堆102中的物理寄存器访问速度最快,并且所有CPU核心的运算部件的源操作数都直接来自于物理寄存器。
缓存通常由SRAM构成,一般分为多级。图1示出了包括L1指令缓存104、L1数据缓存106、L2缓存108以及L3缓存110的三级缓存。在多级缓存中,越靠近CPU核心的缓存的容量越小,但访问速度越快。例如,指令缓存104和L1数据缓存106的访问速度大于L2缓存108,并且L2缓存108的访问速度大于L3缓存110。缓存的大小一般在几十KB到几十MB之间。
物理内存112通常由DRAM构成。与物理寄存器堆102和缓存相比,物理内存112的访问速度最慢。
物理内存112可以经由一级或多级缓存与CPU核心101(例如CPU核心101中的物理寄存器堆102)进行通信。与此类似地,物理内存112也可以经由缓存与其他CPU核心114(例如其他CPU核心114中的物理寄存器堆)进行通信以及数据交换。例如,参见图3,物理内存112可以经由L3缓存与其他CPU核心114进行通信。
图2示出了示例性的处理器核心的微架构200的示意图。
参见图2,取指单元202与L1指令缓存交互,根据取指地址在命中的情况下从L1指令缓存或在缺失的情况下从其他缓存或物理内存中取出指令(在本公开中“指令”即指代“机器指令”),并发送给译码单元204。译码单元204对输入的指令进行译码从而产生微指令(micro-op),并将微指令发送给分配单元206(也被称为分发单元)。
分配单元206根据微指令类别,将其分配给不同的调度队列。如果微指令为定点计算操作,则将该微指令发送给算术逻辑单元(Arithmetic Logic Unit,ALU)调度队列210。如果微指令为浮点计算操作,则将该微指令发送给浮点运算器(Floating Point Unit,FPU)调度队列212。如果微指令为访存操作,则将该微指令发送给地址生成单元(AddressGeneration Unit,AGU)调度队列214,以进行访存地址计算,同时将该微指令发送给访存单元220,以进行访存地址计算后的访存操作。如果访存操作是定点写操作,还同时发送给ALU调度队列210,用于产生写的源操作数;如果访存操作是浮点写操作,还同时发送给FPU调度队列212,用于产生写的源操作数。
定点重命名单元208/浮点重命名单元209在微指令写入ALU调度队列210、FPU调度队列212或AGU调度队列214之前,对源架构寄存器和目的架构寄存器进行重命名操作。
ALU调度队列210、FPU调度队列212以及AGU调度队列214对所有接收到的微指令进行排队和乱序调度,从中挑选出源操作数已经准备好从而可执行的微指令进行发射。
被发射出的微指令从物理寄存器堆中读出源操作数,然后由对应的执行单元进行执行。参见图2,执行单元包括定点执行单元222(由图2的左侧虚线框示出)和浮点执行单元224(由图2的右侧虚线框示出)。物理寄存器堆可以包括定点物理寄存器堆215和浮点物理寄存器堆216。对于定点/访问微指令,定点执行单元222从定点物理寄存器堆215中读出源操作数。对于浮点/访问微指令,浮点执行单元224从浮点物理寄存器堆216中读出源操作数。
ALU 217负责执行定点计算微指令和定点写微指令。对于定点计算微指令,其执行结果(即ALU执行结果)写回定点物理寄存器堆215;对于定点写微指令,其执行结果发送给访存单元220。
AGU 218负责从访存微指令的操作数中生成指向一个内存空间的指针,得到访存微指令的访存地址,其执行结果(即访存地址)发送给访存单元220。
FPU 219负责执行浮点计算微指令和浮点写微指令。对于浮点计算微指令,其执行结果(即FPU执行结果)写回浮点物理寄存器堆216;对于浮点写微操作,其执行结果发送给访存单元220。
访存单元220接收分配单元206发送的微指令,进行排队和调度执行。访存单元220可以接收AGU 218产生的访存地址,然后与L1数据缓存交互。访存单元220可以接收ALU 217或FPU 219产生的写数据,进行写微指令的后续执行。访存单元220可以将读微指令的结果(读数据)发送给定点执行单元222或浮点执行单元224。
图3示出了与寄存器重命名相关的示例性结构300的示意图。
在处理器核心中,通过寄存器重命名技术来解决WAW(写后写)和WAR(读后写)导致的流水线冲突。参见图3,分配单元302可以将寄存器重名前的微指令(携带架构寄存器编号信息)发送给重命名单元304。
重命名单元304维护架构寄存器(也可以称为“逻辑寄存器”)到物理寄存器映射关系的寄存器重命名表306以及物理寄存器空闲队列308。在寄存器重命名表中,每个架构寄存器对应一个表项。
对于每一条微指令的源架构寄存器,重命名单元304使用其架构寄存器编号(图3中示出的Arn0~ArnN-1)查找寄存器重命名表306,得到其对应的物理寄存器编号。例如,在图3中,可以使用架构寄存器编号Arn0查找到对应的物理寄存器编号P3,可以使用架构寄存器编号Arn1查找到对应的物理寄存器编号P10,等等。
对于每一条微指令的目的架构寄存器,重命名单元304一方面使用其架构寄存器编号查找寄存器重命名表,得到其对应的原始的物理寄存器编号,原始的物理寄存器编号可以在后续提交(retire)阶段释放并被写入空闲队列;另一方面,从物理寄存器空闲队列308中找到一个处于空闲状态的物理寄存器,将该物理寄存器的编号写入寄存器重命名表306中的该架构寄存器编号对应的表项,从而建立该物理寄存器与目的架构寄存器之间的映射关系。
上述得到的寄存器重命名后的微指令(携带物理寄存器编号信息)可以一起填入重排序单元310,等到这条微指令被执行完成从而被提交后,并且该微指令的目的架构寄存器对应的物理寄存器(旧的寄存器编号)也不再被其他微指令占用时,那么该物理寄存器就可以被释放掉而处于空闲状态,即将其编号放入物理寄存器空闲队列308。
寄存器重命名后的微指令(携带物理寄存器编号信息)还可以被发送到其他单元312,以进行其他后续处理。
结合图1至图3的实施例,处理器可以通过例如取指、译码、分配、执行、结果写入的整个过程来对指令进行操作,以进行各种数据处理。要被处理的数据被存储在诸如物理寄存器堆、缓存或者物理内存的存储架构中。处理器可以响应于对指令的操作来从这些存储架构中获取相应的数据来进行处理,以得到指令的操作的结果。
鉴于诸如物理寄存器堆、缓存或者物理内存的存储架构具有不同的访问速度,为了应对存储器访问的高成本(例如,延迟导致的时间成本),现代处理器架构提供了大量的通用寄存器,这些寄存器在处理器内提供了一组密集的短期存储,以避免访问存储器,从而提高读指令获取相应的数据的速度。
在一种加速读微指令(load)的方案中,使用了一种内存文件高速缓存(Memfile)的结构。例如,在执行写微指令时,将写入内存的数据的访存地址映射为一个“存储器相关架构寄存器”(MdArn),且将该访存地址的基数(Base)、索引(Index)和位移(Displacement)以及且将MdArn的编号写入内存文件高速缓存中,该存储器相关架构寄存器被进行寄存器重命名操作以指向存储该数据的物理寄存器。例如,在读微指令执行时,将需要被读入的数据的访存地址的基数、索引和位移在内存文件高速缓存中进行匹配查找,如果命中,则可以获得相应的存储器相关架构寄存器的编号,由此可以直接从存储器相关架构寄存器(MdArn)对应的物理寄存器中存储的数据旁路(bypass)给读微指令作为被读入的数据,从而不再需要由访存单元访问L1数据缓存或内存来返回读数据。访存单元只需要验证上述旁路过程是否合法,如果合法,则上述读微指令提前拿到了读数据,提高了性能;如果不合法,则产生刷新请求,重新执行该读微指令。
然而,上述方案只能把对同一地址的前面写指令的数据旁路给后续的读指令,避免了该读指令访问缓存(甚至内存)。事实上,由于架构寄存器数量有限,总是不能避免一部分经常使用的数据仍然被放置在内存中,进而每次使用都需要先从内存中加载到架构寄存器。但是,这部分数据可能是只读的,并没有任何写指令修改它们。因此,使用将前面写指令的数据旁路给读指令的机制无法使对这部分数据的读指令得到加速。
不同于上述利用基数、索引和位移发现写指令和读指令间属于同一地址的关系的方法,在另一种使用内存重命名的方法中,在地址计算之后,直接比较地址,并用地址查找内存重命名表,以发现读和写、读和读之间的关系。然而,该方法在地址计算之后查找内存重命名表,会导致重命名的顺序存在乱序。虽然可以一系列机制解决乱序的问题,然而这些机制都往往过于复杂,并且无法很好的适配到现有的通用架构中,限制了该方案的可用性。
本公开的发明人意识到,由于架构寄存器的数量有限,总是不能避免一部分经常使用的数据仍然被放置在内存中,进而每次使用都需要先从内存中加载到架构寄存器。然而,这部分经常使用的数据中有很大一部分是只读的,无法很好的利用相关技术进行加速。
本公开的发明人还注意到,当前程序中存在大量循环,即同一条读指令会被反复访问,如果每次访问这条读指令的地址和数据都不变,那么使用这条读指令的程序计数器(Program Counter,PC)就可以建立读指令旁路数据的映射关系,或者在一些数据处理场景中,可能会在短时间内被反复访问同一个(存在缓存或内存中)数据,那么也可以建立读指令旁路数据的映射关系。在本公开的实施例中,指令计数器用于标识指令在程序中的位置,因此,也被称为指令地址或者简称为PC。
例如,本公开的至少一个实施例旨在提供一种机制,使得针对某一数据的后续读指令可以从操作该数据的前序读指令旁路来获取该数据,从而加速该后续读指令的执行。
需要说明的是,本公开实施例中的“读指令”是指读类型指令,即该指令涉及从缓存或内存读取数据到寄存器,而无论其是否还进行其他操作(例如,加、减、乘、除等)的指令。例如,读类型指令包括纯读指令(mov,load等)和类读指令(add,sub,mul等)。在本公开中,读指令与读类型指令可以互换使用。
本公开的至少一实施例提供了一种指令操作方法及装置、电子装置及存储介质,从而使后续读类型指令可以直接从涉及同一操作数(例如,对应于同一内存地址)的前序读类型指令旁路数据,从而加速后续读类型指令执行。
首先,下面介绍根据本公开的至少一实施例的指令操作方法,该指令操作方法可以应用于如下文进一步描述的指令操作方法装置、电子装置、其他合适的软件或硬件、或硬件和软件的结合中。
图4示出了根据本公开的至少一实施例的指令操作方法400的流程图。该指令操作方法可以包括步骤S410至S430。
在步骤S410中,为第一读类型指令中的第一源内存操作数分配源内存架构寄存器。
如上所述,读类型指令为只要涉及从内存读取数据到寄存器,而无论是否存在其他操作(例如,加、减、乘、除等)的指令。因此,读类型指令至少包括涉及读操作的指令。例如,读类型指令包括纯读指令和类读指令。纯读指令仅涉及读操作,例如mov、load等指令。类读指令不仅涉及读操作,还涉及其他运算操作(例如加、减、乘、除等),例如add、sub、mul等指令。
在指令或微指令中,源操作数可以指示对其进行运算操作的对象,例如数据等。对于不同类型的指令集(ISA),源操作数的数量取决于操作码所指示的运算操作,可以为1、2、3或者其他合适的数量。在一些情况下,源操作数可以分为寄存器源操作数和内存操作数。寄存器操作数是从寄存器获取的操作数,而内存操作数是从内存获取的操作数。
在步骤S420中,将第一源内存操作数加载到源内存架构寄存器。
在步骤S430中,将在第一读类型指令之后的第二读类型指令中的第二源内存操作数的地址表征信息更改为源内存架构寄存器的编号,以执行第二读类型指令。本文的地址表征信息可以是表征地址的任何信息,换句话说,地址表征信息可以表征相应的地址,或者与相应的地址相对应。例如,上面的第二源内存操作数的地址表征信息可以表征第二源内存操作数的地址。又例如,针对下面这条x86指令来说,
Mov rax,[rbx+8*rdi+0xffe0]
其中,[rbx+8*rdi+0xffe0]是内存操作数的“地址表征信息”,rbx为地址表征信息中的基地址寄存器,rdi为地址表征信息中的索引寄存器,0xffe0为地址表征信息中的偏移量,8为地址表征信息中的单位(scale),rbx和rdi由于是寄存器,统称为这条指令计算地址的源寄存器,需要等他们都准备好时,才能进行地址计算,得到地址。例如,假设rbx和rdi都准备好,上述rbx+8*rdi+0xffe0计算出的值为0xf78eade0,这个值称之为“地址”。可以理解的是,该示例只是一种地址表征信息,每个指令集通常会定义多种不同的地址表征信息。
这里,第二读类型指令的第二源内存操作数与第一读类型指令的第一源内存操作数相同。
如此,根据本公开的至少一实施例的指令操作方法可以使得后续读类型指令(第二读类型指令)的可以直接从涉及同一操作数的前序读类型指令(第一读类型指令)旁路该操作数,这个操作数从源内存架构寄存器读取,而不是从缓存或者内存读取,从而加速了后续读类型指令的执行。
另外,例如与上述另一种使用内存重命名的方法相比,上述另一种使用内存重命名的方法是在计算出地址之后,对地址进行的替换,换句话说,上述另一种使用内存重命名的方法是在完成地址计算之后,使用地址本身去查找内存重命名表。
本公开的发明人意识到,上述另一种使用内存重命名的方法存在诸多缺陷。例如,地址计算阶段在现代CPU中通常是乱序的,在此阶段进行内存重命名的实现机制更为复杂。程序要求乱序执行的实际执行结果同顺序执行是一致的,因此乱序执行的CPU通常有复杂的机制来保证上述要求。而在乱序地址计算阶段进行内存重命名,同样需要类似复杂的机制保证乱序结果的正确性。又例如,地址计算阶段在流水线更靠后的位置,需要参与地址计算的所有源操作数都准备好之后,才能开始进行地址计算,这之前通常存在因为源操作数未准备好而导致的等待,导致内存重命名优化的时机更晚。
相比之下,根据本公开的至少一实施例的指令操作方法可以是在地址计算之前,对“地址表征信息”的替换。换句话说,根据本公开的至少一实施例的指令操作方法是在地址计算之前,在没有得到地址本身的情况下,可以使用指令地址查找存储映射关系的数据结构。
因此,上述另一种使用内存重命名的方法是在指令乱序执行的过程中,对其中一个步骤的改变,需要对相关的实现机制进行修改,实现复杂度高,而根据本公开的至少一实施例的指令操作方法可以是在对指令本身进行简单更改后,再让定例如定点/浮点执行单元去进行乱序执行,不改变定点/浮点执行单元内部的实现机制(改变定点/浮点执行单元内部的实现机制是复杂的)。相比之下,本发明在流水线的更早期就可以发现内存重命名的机会,无需等待参与地址计算的源操作数准备好,可以更早的进行优化。
下面描述根据本公开的至少一实施例的指令操作方法的附加方面。
在一些实施例中,根据本公开的至少一实施例的指令操作方法适用于支持寄存器重命名的处理器架构和不支持寄存器重命名的处理器架构中。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,第一读类型指令为纯读指令,并且指令操作方法还包括:将第一读类型指令的目的架构寄存器和源内存架构寄存器重命名为同一目的物理寄存器,其中,将第一源内存操作数加载到源内存架构寄存器包括:执行第一读类型指令,以将第一源内存操作数存储到目的物理寄存器。以这种方式,可以在支持寄存器重命名的处理器架构中促进作为纯读指令的第一读类型指令的内存操作数加载到源内存架构寄存器。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,第一读类型指令为类读指令,并且第一读类型指令被解析为多条微指令,多条微指令包括第一纯读微指令,第一纯读微指令包括第一源内存操作数,其中,为第一读类型指令中的第一源内存操作数分配源内存架构寄存器包括:为第一纯读微指令中的第一源内存操作数分配源内存架构寄存器;将第一纯读微指令的目的架构寄存器和源内存架构寄存器重命名为同一目的物理寄存器,其中,将第一源内存操作数加载到源内存架构寄存器包括:执行第一纯读微指令,以将第一源内存操作数存储到目的物理寄存器。以这种方式,可以在支持寄存器重命名的处理器架构中促进作为类读指令的第一读类型指令的内存操作数加载到源内存架构寄存器。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,还包括:维护源内存架构寄存器和目的物理寄存器之间的映射关系;以及维护目的架构寄存器和目的物理寄存器之间的映射关系。以这种方式,可以在支持寄存器重命名的处理器架构中实现源内存架构寄存器与目的物理寄存器之间的映射,由此可以基于源内存架构寄存器索引到目的物理寄存器并从目的物理寄存器中获取数据。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,源内存架构寄存器和目的物理寄存器之间的映射关系以及目的架构寄存器和目的物理寄存器之间的映射关系均维护在寄存器重命名映射表中。以这种方式,可以通过扩展维护有目的架构寄存器和目的物理寄存器之间的映射关系的寄存器重命名表,例如,将源内存架构寄存器的编号(本文也称为源内存架构寄存器编号或MsArn)写入寄存器重命名表,并且将目的物理寄存器编号写入源内存架构寄存器编号对应的表项,来实现源内存架构寄存器与目的物理寄存器之间的映射。该方式复用处理器中已经存在的寄存器重命名映射表,减少了硬件开销,提高了处理效率。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,第一读类型指令为纯读指令,并且将第一源内存操作数加载到源内存架构寄存器包括:将第一源内存操作数搬运到第一读类型指令的目的物理架构寄存器;以及将搬运到目的物理架构寄存器的第一源内存操作数搬运到源内存架构寄存器。在一些示例中,可以将搬运到目的物理架构寄存器的第一源内存操作数搬运到源内存架构寄存器对应的物理寄存器。以这种方式,可以在不支持寄存器重命名的处理器架构中促进作为纯读指令的第一读类型指令的内存操作数加载到源内存架构寄存器。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,第一读类型指令为类读指令,并且第一读类型指令被译码为多条微指令,多条微指令包括第一纯读微指令,第一纯读微指令包括第一源内存操作数,其中,为第一读类型指令中的第一源内存操作数分配源内存架构寄存器包括:为第一纯读微指令中的第一源内存操作数分配源内存架构寄存器;其中,将第一源内存操作数加载到源内存架构寄存器包括:将第一源内存操作数搬运到第一纯读微指令的目的物理架构寄存器;以及将搬运到目的物理架构寄存器的第一源内存操作数搬运到源内存架构寄存器。在一些示例中,可以将搬运到目的物理架构寄存器的第一源内存操作数搬运到源内存架构寄存器对应的物理寄存器。以这种方式,可以在支持寄存器重命名的处理器架构中促进作为类读指令的第一读类型指令的内存操作数加载到源内存架构寄存器。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,当不存在空闲的源内存架构寄存器时,释放源内存架构寄存器。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,源内存架构寄存器的分配和释放由硬件管理。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,第一读类型指令的第一指令地址和第二读类型指令的第二指令地址相同。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,第一读类型指令和第二读类型指令为指令循环体中的同一指令。换句话说,第一读类型指令和第二读类型指令可以为同一指令的多次执行。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,还包括:获取包括第一读类型指令的第一指令地址与源内存架构寄存器的映射关系的数据结构;以及查找数据结构,以检查第二读类型指令的第二指令地址是否命中数据结构中的第一指令地址,其中,响应于第二读类型指令的第二指令地址命中数据结构中的第一指令地址,执行将在第一读类型指令之后的第二读类型指令中的第二源内存操作数的地址表征信息更改为源内存架构寄存器的编号。以这种方式,可以通过具有指令地址与源内存架构寄存器的映射关系的数据结构中来查找到命中的指令地址的源内存架构寄存器,促进第二读类型指令的内存操作数到源内存架构寄存器的更改,以便执行第二读类型指令。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,数据结构可以为映射表、查找表、映射图、或者能够根据指令地址索引到对应的MsArn的任何数据形式。以这种方式,可以提供灵活的数据结构的形式来实现指令地址与源内存架构寄存器的映射关系。
例如,在一些实施例中,数据结构为映射表,以此可以通过简单、低成本的硬件开销来实现指令地址与源内存架构寄存器的映射关系。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,源内存架构寄存器的编号被复用为映射表的索引(Index)序号并且不存在于映射表的表项中;或者源内存架构寄存器的编号存在于映射表的表项中。以这种方式,可以提供灵活的映射表的形式来实现指令地址与源内存架构寄存器的映射关系。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,执行第二读类型指令包括:从源内存架构寄存器读取第一源内存操作数来作为第二源内存操作数。以这种方式,可以从源内存架构寄存器获取第二读类型指令所需的操作数,而不是从缓存中获取第二读类型指令所需的操作数,因而可以提高第二读类型指令的执行速度。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,还包括:检查从源内存架构寄存器读取的第一源内存操作数的正确性;以及响应于从源内存架构寄存器读取第一源内存操作数不正确,刷新流水线,以重新执行第二读类型指令。以这种方式,可以促进第二读类型指令获取正确的操作数。
在一些实施例中,根据本公开的至少一实施例的指令操作方法,还包括:阻止第二读类型指令通过访问缓存来获取第二源内存操作数。例如,可以通过更改第二读类型指令,例如将load r1,mem(这里r1标识寄存器操作数,mem标识内存操作数)更改为Mov r1,MsArn来阻止第二读类型指令通过访问缓存来获取第二源内存操作数。以这种方式,第二读类型指令不需要再从缓存或内存获取所需要的操作数,进一步节省了相应的开销。
下面结合具体示例对根据本公开的至少一实施例的指令操作方法进行说明。可以理解的,下面描述的具体示例仅是示例性的,以便于在具体处理器的架构中实现根据本公开的至少一实施例的指令操作方法的一个或多个方面,并且下面描述的具体示例可以与根据本公开的至少一实施例的指令操作方法相结合。
本公开的实施例的指令操作方法可以在支持寄存器重命名的处理器架构和不支持寄存器重命名的处理器架构中实现。
下面首先描述在支持寄存器重命名的处理器架构中实现本公开的实施例的指令操作方法的示例性方面。首先描述在支持寄存器重命名的处理器架构中操作前序读类型指令(对应于本文的第一读类型指令)的示例。
在分配阶段,可以为前序读类型指令分配源内存架构寄存器。这里,源内存架构寄存器可以通过其相应的编号(本文也称为源内存架构寄存器编号(MsArn))来标识或体现,因此下面描述的MsArn可以标识相应的源内存架构寄存器。
在执行该前序读类型指令以将内存操作数读取到目的寄存器的同时,将该内存操作数读取到MsArn。
在一个示例中,该前序读类型指令为load r1,mem,其中r1为该指令的寄存器编号,用于标识寄存器操作数,mem为该指令的源内存操作数的地址表征信息,用于标识内存操作数(可以对应于本文的源内存操作数),例如,在执行load r1,mem时,另外还执行新生成的指令load MsArn,mem,或者,另外还执行新生成的指令Mov MsArn,r1,由此将内存操作数还读取到MsArn。
在另一个示例中,对于前序读类型指令为纯读指令,例如mov r1,mem,其中mem标识内存操作数,r1标识寄存器操作数。在分配阶段,mov r1,mem将更改为Mov r1/MsArn,mem。这样,mem具有两个目标位置,在执行前序读类型指令时,mem在被加载到r1的同时,mem也被加载到MsArn。
在另一个示例中,对于前序读类型指令为类读指令,例如add r1,mem。需要说明的是,在至少一个实施例中,该类读指令可以是一种复杂指令,一般在X86这样的复杂指令集里支持。这种复杂指令在具体实现上需要解析或译码为多个微指令。例如add r1,mem可以译码为两个微指令:(1)纯读微指令load t1,mem,用于读数据,因此该纯读微指令也可以被称为该类读指令的读操作部分;(2)运算操作微指令add r1,t1,用于执行运算操作。这里t1可以为架构寄存器或者其他合适的寄存器。因此,在分配阶段,译码得到的纯读微指令loadt1,mem被更改为Mov t1/MsArn,mem。
此外,例如,在至少一个实施例中,在分配阶段,可以将MsArn与前序读类型指令的PC的映射关系写入映射表,以促进经由PC查找MsArn。关于该映射表的示例方面将在下文中结合图5和图6进行详细描述。
在该示例中,MsArn与原有的架构寄存器在功能上类似,每个MsArn在寄存器重命名表中对应一个表项。例如,MsArn与原有的架构寄存器区别是将MsArn设置为对软件不可见,MsArn的分配和释放由硬件来管理,例如,通过处理器核心的控制器来进行管理。
在重命名阶段,为前序读类型指令的目的架构寄存器分配物理寄存器编号(Prn),更新寄存器重命名表。如果还同时将新分配的Prn编号写入MsArn对应的表项,则将前序读类型指令的目的架构寄存器和源内存架构寄存器映射为同一个物理寄存器。这样在前序读类型指令的执行阶段,当前序读类型指令将源操作数读取到物理寄存器中,相当于同时加载到了目的架构寄存器和新的源内存架构寄存器。关于寄存器重命名表的示例方面将在下文中结合图7进行详细描述。
下面描述在处理器架构中操作后续读类型指令(对应于上述第二读类型指令)的示例。操作后续读类型指令的过程中,将该后续读类型指令从缓存或内存获取数据的过程更改为从源内存架构寄存器获取数据或从源内存架构寄存器移动数据。
在一个示例中,在分配阶段,在确定后续读类型指令的内存源操作数与前序读类型指令的内存源操作数相同,即指向同一访存地址且数据内容本身尚未改变(例如被其他写指令写入新的数据),则找到对应的MsArn,将后续读类型指令原有的内存源操作数的地址表征信息mem更换为MsArn,由此在实际执行该后续读类型指令时经由MsArn从源内存架构寄存器中旁路数据,而不再从内存或缓存中读取该数据。
此外,例如,在至少一个实施例中,在分配阶段,可以使用后续读类型指令的PC查找映射表,如果命中,则找到对应的MsArn,将后续读类型指令原有的内存操作数的地址表征信息mem更换为MsArn。指示后续读类型指令可以从源内存架构寄存器中旁路该数据。
继续上述前序读类型指令为纯读指令的示例,在后续读类型指令为mov r1,mem的示例中,在分配阶段,mov r1,mem被更改为mov r1,MsArn,表示将MsArn标识的源内存架构寄存器中的数据加载到r1标识的寄存器,代替了将mem标识的内存操作数加载到r1标识的寄存器。
继续上述前序读类型指令为类读指令的示例,在后续读类型指令为add r1,mem的示例中,与前续读类型指令一样,该后续读类型指令仍然可以译码为两个微指令load t1,mem;add r1,t1。在分配阶段,在一些情况下,load t1,mem可以被更改为mov t1,MsArn,并且add r1,t1保持不变。在另一些情况下,add r1,mem可以被直接更改为add r1,MsArn,而不再需要使用t1。
此时,操作数存在于对应于MsArn的物理寄存器中,在寄存器重命名表中,其编号Prn保存在MsArn对应的表项中。
在重命名阶段,对于可以从源架构寄存器中旁路数据的读类型指令(其原有的内存操作数的地址表征信息mem已经被更改为MsArn),对其源操作数的地址表征信息进行重命名时,得到MsArn对应的Prn,即其中保存由前序读类型指令的结果的Prn。
在支持寄存器重命名的处理器中,寄存器重命名可以将架构寄存器映射到物理寄存器。同一个架构寄存器每次作为目标寄存器,就会分配一个新的物理寄存器,填入寄存器重命名表。每次作为源寄存器,就从最新的寄存器重命名表中读出最新的物理寄存器编号。执行单元实际执行的是重命名后的指令,使用的是物理寄存器编号来确定数据的位置。为便于理解,结合上述的示例示出寄存器重命名前后的指令关系。
在寄存器重命名之前,前序读类型指令包括:
Mov r1,mem
Add r3,r1,r2
…
后续读类型指令包括:
Mov r1,mem。例如,该后续读类型指令为前序读类型指令被循环执行的指令,换句话说,该后续读类型指令和前序读类型指令为指令循环体中的同一指令。
在寄存器重命名之后,对于前序读类型指令:
Mov p1,mem(在寄存器重命名表中,同时将物理寄存器编号p1填入架构寄存器r1和MsArn的寄存器重命名项中,即将目的架构寄存器r1重命名为物理寄存器p1)
Add p101,p1,p2(将目的架构寄存器r3重命名为物理寄存器p101,将r1更改为对应的物理寄存器p1,将r2更改为对应的物理寄存器p2)
…
对于后续读类型指令:
Mov p201,p1(将架构寄存器r1重命名为物理寄存器p201,但是将mem更改为MsArn,并进一步重名为对应的物理寄存器p1)。
更进一步的,在另一个示例中,在支持Mov elimination的微架构下,上述后续读类型指令Mov r1,mem在被更改为Mov r1,MsArn之后,也可以不再需要对目的寄存器r1分配新的物理寄存器p201,而只需要更改寄存器重命名表,使得该后续读类型指令中的目的寄存器r1指向MsArn对应的物理寄存器p1,由此等同于执行了上述更改后的指令,而不再执行p1到p201的数据移动操作。
可以理解的是,上面以支持寄存器重命名的处理器为例描述了操作前序读类型指令和后续读类型指令。
接下来描述在不支持寄存器重命名的处理器架构中实现本公开的实施例的指令操作方法的示例性方面。可以理解的是,下面仅描述了与支持寄存器重命名的处理器架构的不同部分的示例,并且其它部分可以与支持寄存器重命名的处理器架构相同或类似。
在不支持寄存器重命名的CPU中,没有重命名阶段,架构寄存器和物理寄存器存在固定的映射关系,因此架构寄存器编号直接对应数据的存储位置。执行单元实际执行的是原始的指令,使用的是架构寄存器编号来确定数据的位置。在这种情况下,例如,对于Movr1/MsArn,mem(mem有两个目标位置)的实现可以转化为下面两个微指令:
Mov r1,mem
Mov MsArn,r1。
如上所述,在支持寄存器重命名的CPU中,可以通过重命名一次性将源内存操作数同时加载到目的架构寄存器和源内存架构寄存器。相比之下,在不支持寄存器重命名的CPU中,需要通过两个步骤将源内存操作数加载到MsArn。
因此,基于上述结合支持和不支持寄存器重命名的处理器架构的示例实现,可以在访存单元执行之前,即从缓存或内存获取后续读类型指令的内存操作数之前,成功获得从前序读类型指令旁路的操作数。
在访存单元执行阶段,由于后续读类型指令已经获得了旁路的数据,因此不需要再访问缓存。另外,访存单元可以对旁路的数据做必要的正确性检测。如果旁路的数据没有问题,那么该后续读类型指令的访存指令部分就可以完成。否则,可以刷新流水线,重新执行该后续读类型指令的访存指令部分。
图5示出了根据本公开的至少一实施例的映射表500的示意图。
参见图5,映射表500维护有MsArn与PC的映射关系。例如,MsArn0与0x110033的指令地址相互映射,MsArn1与0x42092e的指令地址相互映射,MsArn2与0xefd0002的指令地址相互映射,MsArn1与0x7fffd32的指令地址相互映射,……,等等。因此,可以在映射表500中根据PC找到对应的MsArn。
地址映射表500的项数等于MsArn的数量M。另外,映射表500的每个表项的序号等同于MsArn,换句话说,MsArn可以被复用为映射表的索引(Key)序号并且不存在于映射表的表项中,在这种情况下,在使用指令地址查找映射表时,命中的表项序号就是MsArn。
图6示出了根据本公开的至少一实施例的另一映射表600示意图。
参见图6,与参见图5描述的映射表500类似,映射表600同样维护有MsArn与PC的映射关系,并且可以在映射表600中根据PC找到对应的MsArn。
与参见图5描述的映射表500不同的是,映射表600的项数可以不等于MsArn的数量M。另外,MsArn存在于映射表600的表项中,在这种情况下,使用PC查找映射表500,命中的表项中存储了MsArn。
虽然结合图5和图6示例性地描述了映射表,然而,映射表的表项的数量可以是由微结构具体实现决定的参数。例如,映射表的表项的数量可以大于、等于或小于MsArn的数量。在映射表的表项的数量大于MsArn的数量的情况下,存在部分的表项无法分配到MsArn,因而这些无法分配到MsArn的表项将无法实现数据的旁路。在映射表的表项的数量等于MsArn的数量的情况下,MsArn和映射表都得到充分的利用。在映射表的表项的数量小于MsArn的数量的情况下,存在部分MsArn闲置。在实际运用中,映射表的表项的数量与MsArn的数量的关系可以取决于实现映射表和MsArn的硬件实现成本。
另外,映射表中维护的MsArn与PC的映射关系可以被更新,例如添加新的MsArn与PC的映射关系、删除MsArn与PC的映射关系或者修改MsArn与PC的映射关系等。
图7示出了根据本公开的至少一实施例的寄存器重命名表700的示意图。寄存器重命名表700加入了关于MsArn的表项,因而可以理解为扩展的寄存器重命名表。
参见图7,寄存器重命名表700中的每个MsArn(MsArn0~MsArnM-1)对应一个表项。寄存器重命名表700中维护有架构寄存器(由Arn标识)与物理寄存器(由物理寄存器编号标识)的映射关系,以及维护有源内存架构寄存器(由MsArn标识)的映射关系与物理寄存器的映射关系,因此可以将架构寄存器与源内存架构寄存器相关联。例如,为Arn3和MsArn1对应于同一物理寄存器编号P1,因而可以实现Arn3和MsArn1的映射,并且可以经由MsArn1从物理寄存器编号P1所标识的物理寄存器中获取数据。
MsArn的数量M可以根据微结构的具体实现决定,并且可以是任意值,例如可以是大于或等于1的正整数。
与本公开的至少一实施例提供的指令操作方法相对应,本公开还提供了一种指令操作装置。
图8示出了根据本公开的至少一实施例的指令操作装置800的示意图。如图8所示,该指令操作装置800包括分配单元810、加载单元820和更改单元830。
分配单元810被配置为为第一读类型指令中的第一源内存操作数分配源内存架构寄存器。
加载单元820被配置为将第一源内存操作数加载到源内存架构寄存器。
更改单元830被配置为将在第一读类型指令之后的第二读类型指令中的第二源内存操作数的地址表征信息更改为源内存架构寄存器的编号,以执行第二读类型指令。
这里,第二读类型指令的第二源内存操作数与第一读类型指令的第一源内存操作数相同。
如此,根据本公开的至少一实施例的指令操作装置可以使得后续读类型指令(第二读类型指令)的可以直接从涉及同一操作数的前序读类型指令(第一读类型指令)的旁路该操作数,这个操作数从源内存架构寄存器读取,而不是从缓存读取,从而加速了后续读类型指令的执行。
以上仅结合图8描述了根据本公开的至少一实施例的指令操作装置的部分,并且指令操作装置800可以对本公开的结合图4描述的指令操作方法400及其附加方面进行参考和引用,例如,可以修改指令操作装置800中的一个或多个单元来实现结合图4描述的指令操作方法400及其附加方面,并且根据本公开的结合图4描述的指令操作方法400及其附加方面同样可以映射到本公开的结合图8描述的指令操作装置800及其附件方面,在此不在赘述。
图9示出了根据本公开至少一实施例的另一指令操作装置900的示意图。如图9所示,指令操作装置900包括处理器910和存储器920。存储器920包括一个或多个计算机程序模块921。一个或多个计算机程序模块921被存储在存储器920中并被配置为由处理器910执行,该一个或多个计算机程序模块921包括用于执行根据本公开的至少一实施例的指令操作方法的指令,其被处理器910执行时,可以执行根据本公开的至少一实施例的指令操作方法及其附加方面的一个或多个步骤。存储器920和处理器910可以通过总线系统和/或其他形式的连接机构(未示出)互连。
例如,处理器910可以是中央处理单元(CPU)、数字信号处理器(DSP)或者具有数据处理能力和/或程序执行能力的其他形式的处理单元,例如现场可编程门阵列(FPGA)等;例如,中央处理单元(CPU)可以为X86或ARM架构、RISC-V架构等。处理器910可以为通用处理器或专用处理器,可以控制指令操作装置900中的其他组件以执行期望的功能。
例如,存储器920可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序模块921,处理器910可以运行一个或多个计算机程序模块921,以实现指令操作装置900的各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据以及应用程序使用和/或产生的各种数据等。该指令操作装置900例如可以是片上系统(SOC)或者包括该SOC的计算机、电视、显示器等。该指令操作装置900的具体功能和效果可以参考上文中关于根据本公开的至少一实施例的指令操作法及其附加方面的描述,此处不再赘述。
图10示出了根据本公开的至少一实施例的电子装置1000的示意图。
如图10所示,根据本公开的至少一实施例的电子装置1000包括指令操作装置1010。指令操作装置1010可以为以上结合图8描述的指令操作装置800或者以上结合图9描述的指令操作装置900。
因此,上述指令操作装置800和指令操作装置900的各个方面同样可以映射到结合图10描述的电子装置1000,在此不在赘述。
图11示出了根据本公开至少一实施例的非瞬时可读存储介质1100的示意图。如图11所示,非瞬时可读存储介质1100上存储有计算机指令1110,该计算机指令1110被处理器执行时执行如上所述的指令操作方法及其附加方面中的一个或多个步骤。
例如,该非瞬时可读存储介质1100可以是一个或多个计算机可读存储介质的任意组合,例如,一个计算机可读存储介质包含用于为第一读类型指令中的第一源内存操作数分配源内存架构寄存器的程序代码、用于将第一源内存操作数加载到源内存架构寄存器的程序代码、以及用于将在第一读类型指令之后的第二读类型指令中的第二源内存操作数的地址表征信息更改为源内存架构寄存器的编号以执行第二读类型指令的程序代码。
例如,当该程序代码由计算机读取时,计算机可以执行该计算机存储介质中存储的程序代码,执行例如根据本公开的至少一实施例的指令操作方法及其附加方面。
例如,存储介质可以包括智能电话的存储卡、平板电脑的存储部件、个人计算机的硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、闪存、或者上述存储介质的任意组合,也可以为其他适用的存储介质。
本公开的至少一实施例提供了一种在读类型指令之间旁路数据的机制,使用PC建立读类型指令之间的关联关系,可以在例如分配和重命名阶段完成旁路数据,缩短了读类型指令获得数据的延迟,提升了性能。另外,该机制可以促进减少了对数据缓存的访问,降低了功耗。另外,该机制对现有CPU核心结果改动较小,最大程度复用现有通路,具有很高的实用性。
在上文的详细描述中,出于解释而非限制的目的,阐述了具体细节,以便提供对本公开中描述的各个方面和实施例的透彻理解。在一些情况下,省略了对众所周知的设备、组件、电路和方法的详细描述,以免用不必要的细节来模糊本文公开的实施例的描述。本文列举本文公开的原理、方面和实施例的所有声明,以及其具体示例,旨在涵盖其结构等同物和功能等同物两者。另外,这种等同物旨在包括当前已知的等同物以及将来开发的等同物,即,开发的执行相同功能的任何元件,而不管结构如何。因此,例如,可以理解,本文的框图可以表示体现所描述的实施例的原理的说明性电路系统或其他功能单元的概念图。这样的功能和所示的功能块将被理解为是硬件实施的和/或计算机实施的。
本说明书中的各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
需要说明的是,在本文中,诸如第一、第二等的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且进一步包括没有明确列出的其他要素,或者是进一步包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本公开的优选实施例,并不用于限制本公开;本公开的范围由权利要求确定。
Claims (20)
1.一种指令操作方法,包括:
为第一读类型指令中的第一源内存操作数分配源内存架构寄存器;
将所述第一源内存操作数加载到所述源内存架构寄存器;
将在所述第一读类型指令之后的第二读类型指令中的第二源内存操作数的地址表征信息更改为所述源内存架构寄存器的编号,以执行所述第二读类型指令,
其中,所述第二读类型指令的第二源内存操作数与所述第一读类型指令的第一源内存操作数相同。
2.根据权利要求1所述的指令操作方法,其中,所述第一读类型指令为纯读指令,并且所述指令操作方法还包括:
将所述第一读类型指令的目的架构寄存器和所述源内存架构寄存器重命名为同一目的物理寄存器,
其中,将所述第一源内存操作数加载到所述源内存架构寄存器包括:
执行所述第一读类型指令,以将所述第一源内存操作数存储到所述目的物理寄存器。
3.根据权利要求1所述的指令操作方法,其中,所述第一读类型指令为类读指令,并且所述第一读类型指令被译码为多条微指令,所述多条微指令包括第一纯读微指令,所述第一纯读微指令包括所述第一源内存操作数,
其中,为所述第一读类型指令中的第一源内存操作数分配所述源内存架构寄存器包括:
为所述第一纯读微指令中的第一源内存操作数分配所述源内存架构寄存器;
将所述第一纯读微指令的目的架构寄存器和所述源内存架构寄存器重命名为同一目的物理寄存器,
其中,将所述第一源内存操作数加载到所述源内存架构寄存器包括:
执行所述第一纯读微指令,以将所述第一源内存操作数存储到所述目的物理寄存器。
4.根据权利要求2或3所述的指令操作方法,还包括:
维护所述源内存架构寄存器和所述目的物理寄存器之间的映射关系;以及
维护所述目的架构寄存器和所述目的物理寄存器之间的映射关系。
5.根据权利要求4所述的指令操作方法,其中,所述源内存架构寄存器和所述目的物理寄存器之间的映射关系以及所述目的架构寄存器和所述目的物理寄存器之间的映射关系均维护在寄存器重命名映射表中。
6.根据权利要求1所述的指令操作方法,其中,所述第一读类型指令为纯读指令,并且将所述第一源内存操作数加载到所述源内存架构寄存器包括:
将所述第一源内存操作数搬运到所述第一读类型指令的目的物理架构寄存器;以及
将搬运到所述目的物理架构寄存器的第一源内存操作数搬运到所述源内存架构寄存器。
7.根据权利要求1所述的指令操作方法,其中,所述第一读类型指令为类读指令,并且所述第一读类型指令被译码为多条微指令,所述多条微指令包括第一纯读微指令,所述第一纯读微指令包括所述第一源内存操作数,
其中,为所述第一读类型指令中的第一源内存操作数分配所述源内存架构寄存器包括:
为所述第一纯读微指令中的第一源内存操作数分配所述源内存架构寄存器;
其中,将所述第一源内存操作数加载到所述源内存架构寄存器包括:
将所述第一源内存操作数搬运到所述第一纯读微指令的目的物理架构寄存器;以及
将搬运到所述目的物理架构寄存器的第一源内存操作数搬运到所述源内存架构寄存器。
8.根据权利要求1所述的指令操作方法,其中,所述源内存架构寄存器的分配和释放由硬件管理。
9.根据权利要求1-8任一项所述的指令操作方法,其中,所述第一读类型指令的第一指令地址和所述第二读类型指令的第二指令地址相同。
10.根据权利要求9所述的指令操作方法,其中,所述第一读类型指令和所述第二读类型指令为指令循环体中的同一指令。
11.根据权利要求9所述的指令操作方法,还包括:
获取包括所述第一读类型指令的第一指令地址与所述源内存架构寄存器的映射关系的数据结构;以及
查找所述数据结构,以检查所述第二读类型指令的第二指令地址是否命中所述数据结构中的第一指令地址,
其中,响应于所述第二读类型指令的第二指令地址命中所述数据结构中的第一指令地址,执行将在所述第一读类型指令之后的第二读类型指令中的第二源内存操作数的地址表征信息更改为所述源内存架构寄存器的编号。
12.根据权利要求11所述的指令操作方法,其中,所述数据结构为映射表。
13.根据权利要求12所述的指令操作方法,其中,
所述源内存架构寄存器的编号被复用为所述映射表的索引序号并且不存在于所述映射表的表项中;或者
所述源内存架构寄存器的编号存在于所述映射表的表项中。
14.根据权利要求1所述的指令操作方法,其中,执行所述第二读类型指令包括:
从所述源内存架构寄存器读取所述第一源内存操作数来作为所述第二源内存操作数。
15.根据权利要求14所述的指令操作方法,还包括:
检查从所述源内存架构寄存器读取的所述第一源内存操作数的正确性;以及
响应于从所述源内存架构寄存器读取所述第一源内存操作数不正确,刷新流水线,以重新执行所述第二读类型指令。
16.根据权利要求1所述的指令操作方法,还包括:
阻止所述第二读类型指令通过访问缓存来获取所述第二源内存操作数。
17.一种指令操作装置,包括:
分配单元,被配置为:为第一读类型指令中的第一源内存操作数分配源内存架构寄存器;
加载单元,被配置为:将所述第一源内存操作数加载到所述源内存架构寄存器;
更改单元,被配置为:将在所述第一读类型指令之后的第二读类型指令中的第二源内存操作数的地址表征信息更改为所述源内存架构寄存器的编号,以执行所述第二读类型指令,
其中,所述第二读类型指令的第二源内存操作数与所述第一读类型指令的第一源内存操作数相同。
18.一种指令操作装置,包括:
处理器;
存储器,包括一个或多个计算机程序模块;
其中,所述一个或多个计算机程序模块被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个计算机程序模块包括用于执行根据权利要求1-16中任一项所述的指令操作方法的指令。
19.一种电子装置,包括根据权利要求17或18所述的指令操作装置。
20.一种非瞬时可读存储介质,其上存储有指令,
其中,所述指令在被处理器读取时,使得所述处理器执行根据权利要求1-16中任一项所述的指令操作方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211097568.0A CN115640047B (zh) | 2022-09-08 | 2022-09-08 | 指令操作方法及装置、电子装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211097568.0A CN115640047B (zh) | 2022-09-08 | 2022-09-08 | 指令操作方法及装置、电子装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115640047A CN115640047A (zh) | 2023-01-24 |
CN115640047B true CN115640047B (zh) | 2024-01-19 |
Family
ID=84942505
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211097568.0A Active CN115640047B (zh) | 2022-09-08 | 2022-09-08 | 指令操作方法及装置、电子装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115640047B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117891509A (zh) * | 2024-03-18 | 2024-04-16 | 芯来智融半导体科技(上海)有限公司 | 数据访存方法、装置、计算机设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5764943A (en) * | 1995-12-28 | 1998-06-09 | Intel Corporation | Data path circuitry for processor having multiple instruction pipelines |
US6101597A (en) * | 1993-12-30 | 2000-08-08 | Intel Corporation | Method and apparatus for maximum throughput scheduling of dependent operations in a pipelined processor |
US6145074A (en) * | 1997-08-19 | 2000-11-07 | Fujitsu Limited | Selecting register or previous instruction result bypass as source operand path based on bypass specifier field in succeeding instruction |
US6442677B1 (en) * | 1999-06-10 | 2002-08-27 | Advanced Micro Devices, Inc. | Apparatus and method for superforwarding load operands in a microprocessor |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7139899B2 (en) * | 1999-09-03 | 2006-11-21 | Cisco Technology, Inc. | Selected register decode values for pipeline stage register addressing |
US20040139299A1 (en) * | 2003-01-14 | 2004-07-15 | International Business Machines Corporation | Operand forwarding in a superscalar processor |
US7395415B2 (en) * | 2004-09-30 | 2008-07-01 | Intel Corporation | Method and apparatus to provide a source operand for an instruction in a processor |
US9575754B2 (en) * | 2012-04-16 | 2017-02-21 | Apple Inc. | Zero cycle move |
US9430243B2 (en) * | 2012-04-30 | 2016-08-30 | Apple Inc. | Optimizing register initialization operations |
-
2022
- 2022-09-08 CN CN202211097568.0A patent/CN115640047B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6101597A (en) * | 1993-12-30 | 2000-08-08 | Intel Corporation | Method and apparatus for maximum throughput scheduling of dependent operations in a pipelined processor |
US5764943A (en) * | 1995-12-28 | 1998-06-09 | Intel Corporation | Data path circuitry for processor having multiple instruction pipelines |
US6145074A (en) * | 1997-08-19 | 2000-11-07 | Fujitsu Limited | Selecting register or previous instruction result bypass as source operand path based on bypass specifier field in succeeding instruction |
US6442677B1 (en) * | 1999-06-10 | 2002-08-27 | Advanced Micro Devices, Inc. | Apparatus and method for superforwarding load operands in a microprocessor |
Non-Patent Citations (3)
Title |
---|
Bypass aware instruction scheduling for register file power reduction;Sanghyun Park;《ACM SIGPLAN Notices》;第41卷(第7期);173-181 * |
Energy-Efficient Register Access;Jessica H. Tseng;《MIT Laboratory for Computer Science》;377-382 * |
面向高性能计算的众核处理器结构级高能效技术;郑方,;《计算机学报》;第37卷(第10期);2177-2186 * |
Also Published As
Publication number | Publication date |
---|---|
CN115640047A (zh) | 2023-01-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10146737B2 (en) | Gather using index array and finite state machine | |
CN106648843B (zh) | 用于改善连续的事务性存储器区的吞吐量的系统、方法和装置 | |
US9870209B2 (en) | Instruction and logic for reducing data cache evictions in an out-of-order processor | |
US9626333B2 (en) | Scatter using index array and finite state machine | |
US9292288B2 (en) | Systems and methods for flag tracking in move elimination operations | |
KR102478874B1 (ko) | 비순차적 하드웨어 소프트웨어 공동 설계된 프로세서에서 스택 동기화 명령어를 갖는 술어 값의 스택을 구현하고 유지하기 위한 방법 및 장치 | |
US9740623B2 (en) | Object liveness tracking for use in processing device cache | |
US9652234B2 (en) | Instruction and logic to control transfer in a partial binary translation system | |
US20190310845A1 (en) | Tracking stores and loads by bypassing load store units | |
US9454371B2 (en) | Micro-architecture for eliminating MOV operations | |
US10296343B2 (en) | Hybrid atomicity support for a binary translation based microprocessor | |
US11068271B2 (en) | Zero cycle move using free list counts | |
US10540178B2 (en) | Eliminating redundant stores using a protection designator and a clear designator | |
US10394595B2 (en) | Method to manage guest address space trusted by virtual machine monitor | |
US10073789B2 (en) | Method for load instruction speculation past older store instructions | |
US9329865B2 (en) | Context control and parameter passing within microcode based instruction routines | |
WO2013096629A1 (en) | Providing hint register storage for a processor | |
EP3333699A1 (en) | System and method to improve nested virtual machine monitor performance | |
WO2018009378A1 (en) | Register reclamation | |
CN115640047B (zh) | 指令操作方法及装置、电子装置及存储介质 | |
CN107924442B (zh) | 用于轻量级虚拟化上下文的方法和设备 | |
US6425074B1 (en) | Method and apparatus for rapid execution of FCOM and FSTSW | |
US20180203703A1 (en) | Implementation of register renaming, call-return prediction and prefetch | |
US9336156B2 (en) | Method and apparatus for cache line state update in sectored cache with line state tracker | |
WO2005010750A2 (en) | Store-to-load forwarding buffer using indexed lookup |
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 |