CN117289995B - 指令处理方法以及处理器 - Google Patents

指令处理方法以及处理器 Download PDF

Info

Publication number
CN117289995B
CN117289995B CN202311332336.3A CN202311332336A CN117289995B CN 117289995 B CN117289995 B CN 117289995B CN 202311332336 A CN202311332336 A CN 202311332336A CN 117289995 B CN117289995 B CN 117289995B
Authority
CN
China
Prior art keywords
instruction
register
data item
physical register
access address
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
Application number
CN202311332336.3A
Other languages
English (en)
Other versions
CN117289995A (zh
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 CN202311332336.3A priority Critical patent/CN117289995B/zh
Publication of CN117289995A publication Critical patent/CN117289995A/zh
Application granted granted Critical
Publication of CN117289995B publication Critical patent/CN117289995B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/30098Register arrangements
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

本公开的实施例提供一种指令处理方法以及处理器。该指令处理方法包括:响应于在对象存储指令的译码阶段获得对象存储指令中作为目的操作数的第一内存访问地址,使用第一内存访问地址查询对象内存文件;在对象内存文件中维护对应第一内存访问地址的第一数据项,且为对象存储指令记载对应于第一内存访问地址的第一对象物理寄存器。该指令处理方法可以减少数据就绪的延迟以及缓存的访问次数,在提高处理性能的同时,还有助于降低处理器以及系统的功耗。

Description

指令处理方法以及处理器
技术领域
本公开的实施例涉及一种指令处理方法以及处理器。
背景技术
应用程序在计算机系统中运行的过程,通常需要代码、栈、堆、数据段,并且在运行过程中经常在短时间内需要对同一数据进行存储和读取。代码段主要存放可执行文件中的代码;数据段存放程序中全局变量和静态变量等数据;堆中是程序的动态内存区域,例如,当程序使用malloc或new得到的内存来自堆;栈维护函数调用的上下文,离开了栈就不可能实现函数的调用。
发明内容
本公开的至少一个实施例提供了一种指令处理方法,其包括:响应于在对象存储指令的译码阶段获得所述对象存储指令中作为目的操作数的第一内存访问地址,使用所述第一内存访问地址查询对象内存文件;在所述对象内存文件中维护对应所述第一内存访问地址的第一数据项,且为所述对象存储指令记载对应于所述第一内存访问地址的第一对象物理寄存器。
例如,在根据本公开的至少一个实施例的方法中,所述对象内存文件包括至少一个数据项,所述至少一个数据项包括所述第一数据项,所述至少一个数据项每个包括有效位、内存访问地址字段和物理寄存器字段,所述有效位用于指示所属的数据项是否有效,所述内存访问地址字段用于记载所属的数据项被关联存储指令创建时所述关联存储指令中作为目的操作数的内存访问地址,所述物理寄存器字段用于记载在所述对象存储指令的寄存器重命名阶段中为所述关联存储指令的源寄存器分配的物理寄存器的编号。
例如,在根据本公开的至少一个实施例的方法中,所述至少一个数据项每个还包括线程标号字段,所述线程标号字段用于记载所属的数据项被所述关联存储指令创建时所述关联存储指令所在的线程的标号。
例如,在根据本公开的至少一个实施例的方法中,所述至少一个数据项每个还包括数据宽度字段。
例如,在根据本公开的至少一个实施例的方法中,所述对象存储指令为定点指令类型或浮点指令类型,相应地所述对象内存文件用于定点指令类型或浮点指令类型;或者,所述至少一个数据项每个还包括类型字段,所述类型字段用于指示所属的数据项是定点指令类型或浮点指令类型。
例如,在根据本公开的至少一个实施例的方法还包括:响应于在所述对象存储指令进入处理器流水线后所述处理器流水线发生了冲刷事件,清空所述对象内存文件;或者,响应于所述对象存储指令为栈操作指令,以及响应于在所述对象存储指令进入处理器流水线后在译码阶段维护的当前栈顶值被无效,清空所述对象内存文件。
例如,在根据本公开的至少一个实施例的方法中,所述在所述对象内存文件中维护对应所述第一内存访问地址的第一数据项,包括:响应于在所述对象内存文件中没有查询到所述第一内存访问地址,在所述对象内存文件中创建对应于第一内存访问地址的所述第一数据项;或者,响应于在所述对象内存文件中查询到第一内存地址,在所述对象内存文件中更新对应于所述第一内存访问地址的所述第一数据项。
例如,在根据本公开的至少一个实施例的方法中,所述对象内存文件包括按照先进先出方式创建的至少一个数据项,所述在所述对象内存文件中更新对应于所述第一内存访问地址的所述第一数据项,包括:将所述对象内存文件中查找到的对应于所述第一内存访问地址的在先数据项无效,以及在所述对象内存文件中创建对应于所述第一内存访问地址的所述第一数据项。
例如,在根据本公开的至少一个实施例的方法还包括:为所述对象存储指令附加所述第一数据项在所述对象内存文件中的第一索引,其中,所述第一索引用于在所述对象内存文件中定位所述第一数据项。
例如,在根据本公开的至少一个实施例的方法还包括:响应于所述对象存储指令的源操作数存在于第一源寄存器中,在所述对象存储指令的寄存器重命名阶段,使用所述第一索引来将所述第一源寄存器映射的物理寄存器设置为所述第一对象物理寄存器;或者,响应于所述对象存储指令的源操作数不存在于任何寄存器中,在所述对象存储指令的寄存器重命名阶段将所述第一对象物理寄存器保持为对应非有效物理寄存器。
例如,在根据本公开的至少一个实施例的方法还包括:在将所述第一源寄存器映射的物理寄存器设置为所述第一对象物理寄存器之后,将所述第一对象物理寄存器设置为就绪;或者,在将所述第一源寄存器映射的物理寄存器设置为所述第一对象物理寄存器,且将所述对象存储指令的源操作数写入所述第一对象物理寄存器之后,将所述第一对象物理寄存器设置为就绪。
例如,在根据本公开的至少一个实施例的方法还包括:响应于在对象读取指令的译码阶段获得所述对象读取指令中作为源操作数的第二内存访问地址,使用所述第二内存访问地址查询所述对象内存文件;响应于在所述对象内存文件中查找到对应所述第二内存访问地址且有效的第二数据项且所述第二数据项记载了第二对象物理寄存器,为所述对象读取指令附加对应于所述第二对象物理寄存器的指引信息,其中,所述指引信息用于所述对象读取指令的寄存器重命名。
例如,在根据本公开的至少一个实施例的方法中,响应于在所述对象内存文件中查找到对应所述第二内存访问地址且有效的第二数据项且所述第二数据项记载了第二对象物理寄存器,为所述对象读取指令附加对应于所述第二对象物理寄存器的指引信息,包括:响应于在所述对象内存文件中查找到对应所述第二内存访问地址且有效的第二数据项且所述对象读取指令的源操作数的数据宽度小于等于所述第二数据项的数据宽度字段的值,为所述对象读取指令附加对应于所述第二对象物理寄存器的指引信息。
例如,在根据本公开的至少一个实施例的方法还包括:响应于所述对象读取指令用于将第一内存数据加载到所述对象读取指令的第一架构目的寄存器,在所述对象读取指令的寄存器重命名阶段将所述第一架构目的寄存器映射到所述第二对象物理寄存器。
例如,在根据本公开的至少一个实施例的方法中,在所述对象读取指令的寄存器重命名阶段中将所述第一架构目的寄存器映射到所述第二对象物理寄存器,包括:使用对应于所述第二对象物理寄存器的指引信息来将所述第一架构目的寄存器映射到所述第二对象物理寄存器。
例如,在根据本公开的至少一个实施例的方法中,所述对象存储指令和所述对象读取指令为栈操作指令。
例如,在根据本公开的至少一个实施例的方法中,响应于指令分派阶段在同一组中分派多条指令,所述对象存储指令和所述对象读取指令属于同一组。
例如,在根据本公开的至少一个实施例的方法还包括:在所述第一对象物理寄存器被释放时,将所述对象内存文件中的对应于所述对象存储指令的第一数据项设置为无效。
本公开的至少一个实施例提供了一种处理器,其包括译码单元和指令分派单元,其中,所述译码单元配置为对接收的指令进行译码;以及所述指令分派单元配置为:响应于所述译码单元在对象存储指令的译码阶段获得所述对象存储指令中作为目的操作数的第一内存访问地址,使用所述第一内存访问地址查询对象内存文件,以及在所述对象内存文件中维护对应所述第一内存访问地址的第一数据项,且为所述对象存储指令记载对应于所述第一内存访问地址的第一对象物理寄存器。
例如,在根据本公开的至少一个实施例的处理器还包括执行单元,其中,
所述执行单元配置为:在将所述第一源寄存器映射的物理寄存器设置为所述第一对象物理寄存器之后,将所述第一对象物理寄存器设置为就绪;或者,在将所述第一源寄存器映射的物理寄存器设置为所述第一对象物理寄存器,且将所述对象存储指令的源操作数写入所述第一对象物理寄存器之后,将所述第一对象物理寄存器设置为就绪。
例如,在根据本公开的至少一个实施例的处理器中,所述指令分派单元还配置为:响应于所述译码单元在对象读取指令的译码阶段获得所述对象读取指令中作为源操作数的第二内存访问地址,使用所述第二内存访问地址查询所述对象内存文件;以及,响应于在所述对象内存文件中查找到对应所述第二内存访问地址且有效的第二数据项且所述第二数据项记载了第二对象物理寄存器,为所述对象读取指令附加对应于所述第二对象物理寄存器的指引信息,其中,所述指引信息用于所述对象读取指令的寄存器重命名。
例如,在根据本公开的至少一个实施例的处理器还包括重命名单元,其中,所述重命名单元配置为:响应于所述对象存储指令的源操作数存在于第一源寄存器中,在所述对象存储指令的寄存器重命名阶段,将所述第一源寄存器映射的物理寄存器设置为所述第一对象物理寄存器;或者,响应于所述对象存储指令的源操作数不存在于任何寄存器中,在所述对象存储指令的寄存器重命名阶段,将所述第一对象物理寄存器保持为对应非有效物理寄存器。
例如,在根据本公开的至少一个实施例的处理器中,所述重命名单元还配置为:响应于所述对象读取指令用于将第一内存数据加载到所述对象读取指令的第一架构目的寄存器,在所述对象读取指令的寄存器重命名阶段将所述第一架构目的寄存器映射到所述第二对象物理寄存器。
例如,在根据本公开的至少一个实施例的处理器中,所述指令分派单元还配置为:为所述对象存储指令附加所述第一数据项在所述对象内存文件中的第一索引,其中,所述第一索引用于在所述对象内存文件中定位所述第一数据项。
例如,在根据本公开的至少一个实施例的处理器中,所述重命名单元还配置为:响应于所述对象存储指令的源操作数存在于所述第一源寄存器中,在所述对象存储指令的寄存器重命名阶段,使用所述第一索引来将所述第一源寄存器映射的物理寄存器设置为所述第一对象物理寄存器,以及,使用对应于所述第二对象物理寄存器的指引信息来将所述第一架构目的寄存器映射到所述第二对象物理寄存器。
例如,在根据本公开的至少一个实施例的处理器还包括退休单元,其中,所述退休单元配置为:在所述第一对象物理寄存器被释放时,将所述对象内存文件中的对应于所述对象存储指令的第一数据项设置为无效。
本公开的至少一个实施例提供了一种电子设备,该电子设备包括上述任一实施例的处理器。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1示出了应用程序虚拟内存分配的示意图;
图2示出了一种处理器核的流水线的示意图;
图3示出了一种处理器核的流水线的示意图;
图4示出了本公开一实施例的示例性的内存文件的数据项;
图5示出了根据已经生成内存访问地址的存储指令操作内存文件的示例的流程图;
图6示出了对已经生成内存访问地址的读取指令根据内存文件进行操作的示例的流程图;
图7示出了对已经生成内存访问地址的存储指令根据内存文件进行内存重命名的示例的流程图;
图8示出了对已经生成内存访问地址的读取指令根据内存文件进行内存重命名的示例的流程图;
图9示出了根据本公开一实施例的处理器的示意图;
图10为本公开至少一个实施例提供的一种电子装置的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另作定义,此处使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
计算机操作系统一个重要职能是内存管理。在多进程操作系统中,每个进程都有自己的虚拟地址空间,可以使用任意系统规定范围内的虚拟地址。CPU执行一个应用程序时所使用的地址就是虚拟地址。操作系统给一个进程分配内存时,需要把使用到的虚拟地址映射到物理地址,物理地址才是真正的物理内存访问地址。这样做有几个好处,首先,简化程序编译,编译器可以基于一个连续的、充足的虚拟地址空间来编译程序。其次,不同进程的虚拟地址被分配到不同的物理地址,使得系统能够同时运行多个进程,从而提高整个计算机系统的运行效率。最后,由于应用程序可以使用但无法更改地址翻译,因此一个进程无法访问到另一个进程的内存内容,从而增加了系统的安全性。
在计算机系统中,内存访问指令的内存访问虚拟地址通常是动态生成的,生成地址的过程中会使用一个或者多个架构寄存器。
每一个运行在计算机系统中的应用程序的数据地址空间都包括栈(Stack)与堆(Heap),栈和堆由应用程序二进制接口(Application Binary Interface,ABI)定义。图1示出了一种应用程序虚拟内存分配的示意图。
如图1所示,应用程序栈由操作系统自动分配释放,用来存放函数参数值、寄存器的值、局部变量的值等。栈的操作方式类似于通常的数据结构中的栈,采用后入先出(LastIn First Out,LIFO)的方式,数据读出、写入只能在发生在栈顶。因此,栈可以只需一个栈指针(Stack Pointer,SP)来标识当前的栈顶位置(栈顶值),该栈顶值存放在栈顶寄存器。对于栈,可以有如下两个基本操作:
·压入(push)(又称为压栈):调整栈顶寄存器值(即栈顶值)并在新的栈顶写入数据;
·弹出(pop)(又称为出栈):从栈顶中取出数据并调整栈顶寄存器值。
当程序调用(call)一个函数时,返回地址被压入栈中;该函数执行完毕后,从栈中取出(ret)该返回地址,然后程序调转到该地址继续执行。
应用程序栈的另一个作用是缓存寄存器的值,这使得这些寄存器可以在不同函数中被使用。
在一些硬件架构中,应用程序栈是从地址高端向低端增长的,比如X86-64(64位X86)硬件架构。同时,X86-64每个push/pop操作都是64位(即8个字节),所以一个push操作将栈顶值减8,而一个pop操作将栈顶值加8。
在本公开中,通常针对“处理器核”进行描述,为了方便,也将“处理器核”简称为“处理器”,也即在本公开中至少就流水线而言“处理器”和“处理器核”是等价的。
图2示出了一种处理器核的流水线的示意图,图中的带箭头的虚线表示重新定向的指令流。如图2所示,单核处理器或多核处理器的处理器核(例如CPU核)通过流水线技术提高指令间并行度(Instruction Level Parallelism)。处理器核内部包括多个流水阶段,比如,在流水线送入各种来源的程序计数器,通过多路选择器(Mux)选择出下一程序计数器(PC)之后,该程序计数器对应的指令要经过分支预测(Branch prediction)、指令提取(Instruction fetch)、指令译码(Decode)、指令分派与重命名(Dispatch and Rename)、指令执行(Execute)、指令结束(Retire)等。在各个流水级之间根据需要设置等待队列,这些队列通常是先入先出(FIFO)队列。例如,在分支预测单元之后,设置有分支预测(BP)FIFO队列,以存储分支预测结果;在指令提取单元之后,设置有指令缓存(Instruction Cache,IC)FIFO,以缓存所取得的指令;在指令译码单元之后,设置有译码(DE)FIFO,以缓存译码后的指令;在指令分派与重命名单元之后,设置有结束(RT)FIFO以缓存执行之后等待确认结束的指令。同时处理器核的流水线还包括指令队列,以在指令分派与重命名之后缓存等待指令执行单元执行指令。
标量(scalar)处理器(CPU)指令流水线包括五阶段流水线,其中,每条指令可以在每个时钟周期发出并在固定的时间(例如,5个时钟周期)内执行。每条指令的执行分成5步:取指(IF)阶段、译码阶段、执行阶段、访存(MEM)阶段和写回(WB)阶段。
为了支持高运行频率,每一个流水阶段又可能包含多个流水级(时钟周期)。虽然每个流水级执行有限的操作,但是这样每个时钟可以做到最短,通过提高CPU的运行频率来提高CPU核的性能。每个流水级也可以通过容纳更多条指令(即超标量(superscalar)技术)来进一步提高处理器核的性能。超标量指在一个周期内并行执行多条指令的方法,具有增加的指令级并行度,能够在一个周期内处理多条指令的处理器就被称为超标量处理器。超标量处理器在通常的标量处理器的基础上增加额外的资源,创建多条流水线(pipeline),每条管线执行分配给自己的指令,以此来实现并行化。
例如,超标量处理器还可以进一步支持乱序执行(out-of-order execution)技术。乱序执行指CPU采用允许将多条指令不按程序规定的顺序分开发送给相应电路单元处理的技术。
目前影响流水线主要可以分为三类:资源冲突(结构相关)、数据冲突(数据相关)和控制冲突(控制相关)。数据相关根据冲突访问中读和写的次序可以分为三种情况:RAW(写后读)、WAW(写后写)、WAR(读后写)。可以通过寄存器重命名技术解决WAW(写后写)和WAR(读后写)可能的流水线冲突。
同样为了提高并行度,处理器还可以采用同时多线程(SMT)技术,处理器的用于指令执行的流水线结构(也简称“流水线”)支持两个或多个(例如4个或8个等)线程同时执行。在支持同时多线程技术的处理器的流水线中,计算资源被多个线程共享,例如,每个线程具有各自独立的逻辑寄存器;在流水线的各种控制性功能的队列中,有的是多个线程共享的,如指令调度队列,有的是在多个线程间静态划分的,如指令重排序队列。同时多线程技术可以利用线程间并行性提升流水线资源利用率。
处理器核在微架构内将每一条架构指令(instruction)翻译为一条或者多条微指令(micro-op,uOp),每条微指令只执行有限的操作,这样可以保证每个流水级很短,以提高处理器核运行频率。比如一条内存读指令(load),可以被翻译为一条地址生成微指令以及一条内存读微指令,第二条微指令会依赖第一条微指令的结果,因此只有第一条微指令执行完后,第二条微指令才会开始执行。微指令包含多个微架构相关的域,用来在流水级间传递相关信息。
预测执行(Speculative Execution)是提高处理器性能的另一种技术。该技术在一条指令还未完成执行之前,执行它后面的指令。处理器核前端的分支预测单元(分支预测器),对分支指令的跳转方向进行预测,预取、执行该方向的指令;另一个预测执行的技术是在前面的所有内存写指令的地址都获得前,执行一个内存读指令。预测执行进一步提高了指令间并行度,从而大幅提高处理器核性能。当出现预测执行错误,比如发现分支预测错误,或者内存读指令前的某一条写指令改写了同一个地址,犯错指令其后的所有流水线中的指令需要被冲刷(或称为“清除”)(flush),然后程序跳转到出错点重新执行,以保证程序执行的正确性。为支持预测执行,处理器核微架构也需要支持架构寄存器恢复机制,以保证架构寄存器在预测执行时总有正确的值。
很多内存访问指令的内存访问地址是动态生成的,使用一个或者多个寄存器。处理器核中可以包含单独的执行阶段硬件(称为AGEN)来进行这些地址运算。一个内存访问指令只有通过AGEN获得其地址,才能开始内存访问操作,这增加了这些指令的时延。某些指令集支持多种复杂的地址生成方式,比如X86-64,其AGEN也较复杂,有更多功耗及需要多个时钟获得结果。另外,很多指令都在指令数据中包括一个立即数(imm)用作地址生成的偏移量。
应用程序二进制接口(Application Binary Interface,ABI)规定了软件调用接口,其中包括对于应用程序栈的使用的规范。通常而言,应用程序栈的数据增删只在栈顶进行,只需一个栈顶寄存器(比如X86-64的RSP寄存器)来标识应用程序栈的栈顶位置。
例如,对于应用程序栈的访问往往有专属的指令,比如X86-64中栈操作指令包括call、ret、push、pop指令。如上所述,call指令与push指令先增加栈顶位置,然后将新的数据压入栈;ret/pop指令从栈顶读出数据,然后回退栈顶位置。此外call指令与ret指令还可以包含指令流跳转操作。此外,也可以使用正常的内存读写指令来访问应用程序栈中任意位置的数据,这些应用程序栈读写操作往往使用栈顶寄存器作为唯一或者多个地址计算寄存器之一。
在一个高性能、多流水线级的处理器核中,内存读写指令往往需要多个流水级来获得其数据,而它们的地址生成是导致长延时的一部分原因。上述应用程序栈的访问,不论是通过专有指令还是普通内存访问指令来操作的,其地址生成也是在指令执行阶段动态生成的,需要用到AGEN及至少一个时钟周期完成。
由于应用程序栈的特性,其访问规律比较简单,利用这些规律提前获得对于应用程序栈的访问地址能够降低这些指令的延迟,从而进一步提高处理器的性能;而且,这也可以降低访问寄存器文件及使用AGEN造成的功耗。对应用程序栈的读写及栈顶寄存器的值(栈顶值)的改变大都发生在当前的栈顶位置附近,这意味:
(1)大多数改变应用程序栈的栈顶值的指令,在译码阶段就可以获得其偏移值,从而可以在译码阶段更新当前栈顶值。
(2)很多对于应用程序栈进行读写的访问地址使用固定偏移(比如X86-64中call/push指令的偏移值为8,ret/pop指令的偏移值为0),或者使用保存在指令立即数中的偏移。
在申请人之前的中国专利申请CN114281411A中提供了一种指令处理方法、指令执行方法以及对应的处理器。在指令译码阶段维护该阶段的当前的栈顶值(简称SP@DE),并用该当前的栈顶值来在指令译码阶段获得应用程序栈专有指令(如X86-64中的call/ret/push/pop等指令)及一些访问应用程序栈的普通内存读写指令的访问地址。因此,这些指令可以免除指令执行阶段的地址生成、寄存器文件与AGEN访问及相应时延,从而提高处理器性能并降低系统功耗。
例如,上述专利申请中的指令处理方法可以包括:在对象指令的译码阶段,获取对象指令对于应用程序栈的访问地址;在对象指令的执行阶段,利用访问地址访问应用程序栈。这里的“对象指令”指代该方法中当前被处理的指令。
例如,上述专利申请中的处理器可以包括译码单元和执行单元,其中,该译码单元配置为在对象指令的译码阶段,获取对象指令对于应用程序栈的访问地址;该执行单元配置为在对象指令的执行阶段,使用访问地址访问应用程序栈。
例如,上述专利申请中的指令执行方法可以包括:响应于发生处理器核的流水线冲刷,将处理器核的流水线冲刷后得到的应用程序栈的栈指针的栈顶值提供给处理器核的流水线的译码单元;响应于非发生处理器核的流水线冲刷,执行对象指令的译码后指令并将对象指令被执行所得到的应用程序栈的栈指针的栈顶值提供给处理器核的流水线的译码单元,其中,对象指令被标注为,在被执行后需要反馈应用程序栈的栈指针的栈顶值。
例如,上述专利申请中的处理器可以包括执行单元和译码单元,其中,执行单元配置为:响应于发生处理器核的流水线冲刷(flush),将处理器核的流水线冲刷后得到的应用程序栈的栈指针的栈顶值提供给译码单元;响应于非发生处理器核的流水线冲刷,执行对象指令的译码后指令并将对象指令被执行所得到的应用程序栈的栈指针的栈顶值提供给译码单元,其中,对象指令被标注为,在对象指令的执行阶段后,需要反馈对应于对象指令被执行所得到的应用程序栈的栈指针的栈顶值。
在中国专利申请CN114281411A中所公开的处理器核的流水线如图3所示,图3中的带箭头的虚线表示重新定向的指令流。该处理器核可以是单核处理器或多核处理器的处理器核(例如CPU核)。例如,该处理器核可以通过流水线技术提高指令间并行度(InstructionLevel Parallelism)。
与图2相比,如图3所示的处理器核的流水线还可以包括一个缓存DESP,用于记录译码阶段的当前的栈顶值SP@DE。缓存DESP可以通过寄存器等方式实现,例如,该缓存可以设置在指令译码单元中,也可以单独设置。并且,与图2相比,如图3所示的处理器核的流水线还可以进一步包括从指令执行单元向译码单元传递执行了消息的数据通路(如图中的带箭头的实线所示),以传递执行阶段更新的SP值(SP@EX)以及产生该执行阶段更新的SP值(SP@EX)的指令的指令序号(INST_SN)。
例如,获取对象指令对于应用程序栈的访问地址,包括:确定在对象指令的译码阶段时第一栈顶值是否为有效值;响应于第一栈顶值为有效值,使用第一栈顶值获取访问地址。
这里,“第一栈顶值”为由处理器核的流水线的译码单元维护的用于记录应用程序栈的栈指针的数值,即译码阶段当前的栈顶值(SP@DE)。例如,在至少一个示例中,响应于第一栈顶值为有效值,使用第一栈顶值获取访问地址,包括:
·响应于对象指令是call指令或push指令,使用第一栈顶值减去系统架构参数值得到访问地址;或者
·响应于对象指令是ret或pop指令,使用第一栈顶值作为访问地址;或者
·响应于在对象指令是访问应用程序栈的指令且为使用栈指针和立即数之和进行地址编码的方式,使用第一栈顶值加上立即数得到访问地址。
在上述指令处理方法中,需要判断译码阶段当前的栈顶值(SP@DE)的有效性是否为有效,如果是无效,则结束该方法的流程。
本公开的发明人注意到,可以在指令派遣阶段使用指令中已获得的内存读写地址(例如虚拟地址)维护一个内存文件(Memory File),使用该内存文件来预测指令序列中针对内存进行操作的读取指令(Load指令)和存储指令(Store指令)之间的依赖关系,并在寄存器重命名阶段使用参考内存文件所得到的预测结果对读取指令和存储指令中所涉及的内存读写地址通过虚拟的额外架构寄存器进行内存重命名。这样,读取指令在就可以直接从对应的存储指令获得相应的数据,从而避免先由存储指令将数据存储到缓存/内存,然后再由读取指令从缓存/内存将该数据读出的这一过程,因此可以减少等待数据的延迟以及对于缓存的访问次数,从而提供处理器的性能并减小处理器以及系统的功耗。例如,该内存文件可以在处理器核的工作过程中创建并保持在缓存中,该缓存可以使用处理器核中已有的缓存(例如L1缓存)或者单独为内存文件提供的缓存。
例如,专门用于栈操作存储指令和读取指令的内存文件也可以称为栈内存文件(Stack Memory File)。
并且,在指令派遣阶段,已知指令中的内存读写地址(例如虚拟地址)不限于上述用于栈操作的存储指令和读取指令,也可以为其他在指令派遣阶段就已经确定了其中所涉及的内存读写地址(例如作为源操作数或目标操作数)的存储指令和读取指令。这里,存储指令的目的操作数为内存操作数,该内存操作数给出存储目的内存单元的物理地址;读取指令的源操作数为内存操作数,该内存操作数给出数据源内存单元的物理地址。在指令中,物理地址根据指令的相应寻址方式得到,例如寻址方式包括直接寻址、间接寻址、寄存器寻址等。
如上所述,在本公开的至少一个实施例中,提供了内存文件用于在指令分派阶段预测指令序列中针对内存进行操作的读取指令(Load指令)和存储指令(Store指令)之间的依赖关系,并在寄存器重命名阶段使用参考内存文件所得到的预测结果进行内存重命名,将指令中以及生成的内存访问地址使用物理寄存器替代,例如使用内存文件的数据项中的物理寄存器段中记载的物理寄存器(编号)来传递信息,由此可以在不增加新的架构寄存器以及物理寄存器压力的情况下,增加了被预测进行内存重命名的读取指令(Load指令)的数量,减少了数据就绪的延迟以及缓存的访问次数,在提高了处理器的性能的同时,也有助于降低处理器的功耗。
例如,在本公开的实施例中,上述内存文件是一个数组,该数组例如为先进先出(FIFO)的队列,进一步地例如为以创建时间排序的循环存储结构,具体项数可以视情况而定。例如,内存文件可以共包含X项,X为正整数,例如X的优选值可以根据处理器核的性能、资源等进行调整;例如,如果处理器核的性能较高(例如主频高、多线程)、资源较多(例如缓存容量大)等,X的取值可以较大,反之可以较小。例如,内存文件可以存储在适当的缓存中,例如一级缓存或单独设置的寄存器阵列等。
图4示出了本公开一实施例的示例性的内存文件的数据项。如图4所示,该内存文件包括多个数据项,每个数据项可以包括有效位(Valid)、内存访问地址字段(Va)和物理寄存器字段(Prn)。
有效位(Valid)用于指示所属的数据项是否有效。该有效位的大小例如为1位(bit),当其为1时代表此数据项有效,而为0时则代表此数据项无效。有效位的初始值为0。
内存访问地址字段(Va)用于记载所属的数据项被关联存储指令创建时(将在下面描述相关流程)该关联存储指令中作为目的操作数的内存访问地址。该内存访问地址字段例如包括N个位,例如N为当前架构支持的虚拟地址比特数,例如,X86-64架构、ARM64架构等可以支持48位或52位的虚拟地址,那么此时相应地N=48或52。该内存访问地址字段的初始值可以设置为-1。
物理寄存器字段(Prn)用于记载在寄存器重命名阶段中为关联存储指令的源寄存器分配的物理寄存器的编号。该字段例如包括多个位,具体位宽例如取决于处理器中的物理寄存器数量,例如处理器中共有64个物理寄存器,则位宽可以设置为6(即26=64)。在内存文件中,当所属的数据项被关联存储指令创建时,该字段的初始值被设置为-1,即指向非有效的物理寄存器。
例如,在至少一个示例中,为了支持浮点/定点的内存重命名,同时提供、维护两个彼此独立的内存文件,其中一个内存文件用于定点指令,另一个内存文件用于浮点指令。
或者,在至少一个示例中,为了支持浮点/定点的内存重命名,内存文件中的每个数据项还可以包括类型字段(Fp),该类型字段用于指示所属的数据项是定点指令类型或浮点指令类型。例如,对于定点指令类型,该类型字段的取值为0,而对于浮点指令类型,该类型字段的取值为1。
例如,在至少一个涉及同时多线程(SMT)处理器核的示例中,内存文件中的每个数据项还可以包括线程标号字段(TID),该线程标号字段用于记载所属的数据项被关联存储指令创建时关联存储指令所在的线程的标号,即,同一内存文件同时用于在处理器核中执行的多个线程,而为了区分不同线程中的存储指令和读取指令,则在内存文件中对于每个数据项记载相应的线程标号字段(TID)。在处理器核中同时执行的多个线程的线程标号彼此不同。同样地,对于SMT处理器核的示例中,还可以同时提供、维护两个彼此独立的内存文件,以分别用于定点指令和浮点指令。在该示例中,线程标号字段(TID)的大小可以根据系统中所采用的线程标号的大小确定。
在上述示例中,例如无论是用于定点指令的内存文件还是用于浮点指令的内存文件,抑或包括类型字段(Fp)的内存文件,默认创建数据项的存储指令的目的操作数的数据宽度和读取指令的源操作数的数据宽度相同;然而,在至少另一个示例中,内存文件的每个数据项还可以包括数据宽度字段(Wd),用于表示对应操作数的位宽,例如,数据宽度可以为8位、16位、32位、64位等。
本公开的至少一实施例提供了一种指令处理方法,该指令处理方法包括:响应于在对象存储指令的译码阶段获得对象存储指令中作为目的操作数的第一内存访问地址,使用第一内存访问地址查询对象内存文件;在对象内存文件中维护对应第一内存访问地址的第一数据项,且为对象存储指令记载对应于所述第一内存访问地址的第一对象物理寄存器。该实施例的指令处理方法针对在译码阶段已经产生内存访问地址的存储指令,在内存文件中记录相应的信息,以预测该存储指令和后续的读取指令之间的依赖关系,这增加了被预测进行内存重命名的读取指令的数量,减少了数据就绪的延迟以及缓存的访问次数,在提高处理性能的同时,还有助于降低处理器以及系统的功耗。
这里,“对象存储指令”用于表示作为当前描述对象的存储指令,“对象物理寄存器”用于表示作为当前描述对象的物理寄存器;这里的第一数据项、第一内存访问地址、第一对象物理寄存器等中的“第一”仅用于与其他同类(例如另一个数据项等)进行区分而非表示实际的顺序。该对象存储指令包括源操作数和目的操作数,且目的操作数包括内存访问地址(即“第一内存访问地址”),例如该第一内存访问地址为用于访问内存的虚拟地址,从而在该内存地址写入数据。“对象内存文件”用于表示当前描述对象的内存文件;例如在系统中还可能同时存在其他内存文件,例如,当对象存储指令为定点指令时,则对象内存文件为定点内存文件,或者当对象存储指令为浮点指令时,则对象内存文件为浮点内存文件。
在使用第一内存访问地址查询对象内存文件,使用第一内存访问地址与对象内存文件中的数据项中的内存访问地址字段(Va)进行比较,从而判断是否查询命中(hit)或缺失(miss);又例如,在其他示例中,如果需要,还需要比较线程标号字段(TID)。之后,在对象内存文件中维护对应第一内存访问地址的第一数据项,且为对象存储指令记载对应于第一内存访问地址的第一对象物理寄存器,在创建该第一数据项时,该第一数据项的物理寄存器段被设置为-1,指向无效的(或虚拟的)物理寄存器。例如,第一数据项的内存访问地址字段(Va)对应于第一内存访问地址,从而在使用第一内存访问地址进行查询时可以命中第一数据项。
例如,在至少一个实施例中,上述指令处理方法还包括:响应于在对象存储指令进入处理器流水线后处理器流水线发生了冲刷(flush)事件,清空对象内存文件;或者,响应于对象存储指令为栈操作指令,以及响应于在对象存储指令进入处理器流水线后在译码阶段维护的当前栈顶值(SP@DE)被无效,清空对象内存文件。如前所述,比如X86-64中栈操作指令例如包括call、ret、push和pop指令,其他指令集也包括类似的栈操作指令。
处理器流水线发生了冲刷事件时,此时在处理器流水线上尚未提交的指令都需要被清除,因此对应地需要清空对象内存文件,将其恢复到初始状态;在对象存储指令为栈操作指令时(例如该示例中上述指令处理方法仅针对栈操作指令),如果在对象存储指令进入处理器流水线后在译码阶段维护的当前栈顶值(SP@DE)被无效,则基于当前栈顶值的内存访问地址不再有意义,因此对应地需要清空对象内存文件,将其恢复到初始状态。在清空对象内存文件时,之前对应于对象内存文件中的各个数据项分配的附加架构寄存器也被回收(或清除)。
例如,在至少一个实施例中,上述指令处理方法中,在对象内存文件中维护对应第一内存访问地址的第一数据项,包括如下情形:响应于在对象内存文件中没有查询到第一内存访问地址,在对象内存文件中创建对应于第一内存访问地址的第一数据项;或者,响应于在对象内存文件中查询到第一内存地址,在对象内存文件中更新对应于第一内存访问地址的第一数据项。
在上述操作之后在对象内存文件中存在对应于第一内存访问地址的第一数据项,且该第一数据项对应当前的对象存储指令。此时,该对象存储指令为前述描述的针对第一数据项的“关联存储指令”。
例如,对象内存文件包括按照先进先出(FIFO)方式创建的至少一个数据项;则在该情形中,在对象内存文件中更新对应于第一内存访问地址的第一数据项,包括:将对象内存文件中查找到的对应于第一内存访问地址的在先数据项无效,以及在对象内存文件中创建对应于第一内存访问地址的第一数据项。由此,虽然在前的存储指令和当前的对象存储指令针对同一内存访问地址(即前述第一内存访问地址)先后分别创建了在前的数据项和第一数据项,但是经过上述操作之后,以及在在前的存储指令和当前的对象存储指令被执行之后,第一内存访问地址存储的数据为对象存储指令操作的数据,对应的对象内存文件中对应于第一内存访问地址的仅有第一数据项是有效的,因此仅与第一数据项相应的第一对象物理寄存器可以用于后续的内存重命名操作。
例如,在至少一个实施例中,为对象存储指令附加第一数据项在对象内存文件中的第一索引,其中,该第一索引用于在对象内存文件中定位第一数据项。例如,该第一索引可以为第一数据项在对象内存文件中的编号(即序号)。例如,该第一索引保存在对象存储指令的附加部分(例如附加域或附加字段)中,并随着对象存储指令在处理器的流水线被传递时一起被传递。例如,对于某一存储指令,如果在对象内存文件中为其创建数据项,该存储指令的附加部分则可以设置为无效,例如取值为-1。相对于常规指令集中的存储指令,除了操作码、源操作数、目的操作数等域(或字段)之外,在本公开上述的示例中的存储指令还包括了上述附加部分(附加域或字段)。
例如,在至少一个实施例中,在对象存储指令的寄存器重命名阶段,上述指令处理方法还包括:响应于对象存储指令的源操作数存在于第一源寄存器中,使用第一索引来将第一源寄存器映射的物理寄存器设置为第一对象物理寄存器;或者,响应于对象存储指令的源操作数不存在于任何寄存器中,将第一对象物理寄存器保持为对应非有效物理寄存器,即,不对第一数据项中的物理寄存器段中记载的初始值(-1)保持不变,而该初始值指向无效的物理寄存器。例如,使用第一索引来在对象内存文件中找到第一数据项,从第一数据项获取第一物理寄存器的编号,由此可以在寄存器重命名阶段将第一源寄存器映射到分配的物理寄存器,然后使用该分配的物理寄存器来设置第一对象物理寄存器,即将第一数据项中的物理寄存器字段的值设置为该分配的物理寄存器的编号。例如,可以在处理器中设置对应的信号通路,以便在对象存储指令的寄存器重命名阶段,使用对象存储指令的附加部分中记载的第一索引在对象内存文件中定位第一数据项。并将第一数据项的物理寄存器字段的值设置为对象存储指令分配的物理寄存器。
在对象存储指令的源操作数存在于某一寄存器(即第一源寄存器)中的情形,即第一源寄存器中的数据在对象存储指令执行后将被写入到第一内存访问地址,此时第一源寄存器是指令集中规定的架构寄存器,将第一源寄存器映射的物理寄存器设置为第一对象物理寄存器,这样访问第一源寄存器对应的物理寄存器,就相当于访问第一对象物理寄存器,而无需再从存储了该数据的第一内存访问地址读取该数据。
在对象存储指令的源操作数不存在于任何寄存器中的情形,即对于对象存储指令没有被分配新的物理寄存器或需要新增分配的物理寄存器的情形,例如对象存储指令的源操作数为立即数或计算的中间结果的情形,则本公开的实施例对此不进行处理或操作。
例如,在至少一个实施例中,对于上述两种情形,上述指令处理方法还包括:在将第一源寄存器映射的物理寄存器设置为第一对象物理寄存器之后,将第一对象物理寄存器设置为就绪;或者,在将第一源寄存器映射的物理寄存器设置为第一对象物理寄存器,且将对象存储指令的源操作数写入第一物理寄存器之后,将第一对象物理寄存器设置为就绪。将第一对象物理寄存器设置为就绪之后,则处理器核将通知后续需要用到该第一对象物理寄存器的指令(例如下面说明的使用该第一对象物理寄存器进行内存重命名的对象读取指令),以便于后续的使用该第一对象物理寄存器的指令在其他执行前置条件(例如其他源操作数就绪)时可以被执行。
例如,在至少一个实施例中,上述指令处理方法还包括:在第一对象物理寄存器被释放时,将对象内存文件中的对应于对象存储指令的第一数据项设置为无效。在将对象存储指令进行内存重命名之后,将实际执行该对象存储指令,将其中源操作数写入第一内存访问地址对应的内存位置中;例如,当使用第一对象物理寄存器的其他指令(后续的读取指令)也执行完成之后,由此可以释放第一对象物理寄存器时,即在指令结束(Retire)阶段,将对象内存文件中的对应于对象存储指令的第一数据项设置为无效,从而避免资源浪费,以及避免之后可能出现的误操作。例如,可以在处理器中设置对应的信号通路,以便在释放第一对象物理寄存器之后传输将对象内存文件中的对应于对象存储指令(即对应于第一对象物理寄存器)的第一数据项设置为无效的控制信号。
例如,在至少一个实施例中,上述指令处理方法还包括:响应于在对象读取指令的译码阶段获得对象读取指令中作为源操作数的第二内存访问地址,使用第二内存访问地址查询对象内存文件;响应于在对象内存文件中查找到对应第二内存访问地址的第二数据项且所述第二数据项记载了第二对象物理寄存器,为所述对象读取指令附加对应于所述第二对象物理寄存器的指引信息,其中,所述指引信息用于所述对象读取指令的寄存器重命名。例如,该指引信息为第二对象物理寄存器的编号。例如,该指引信息保存在对象读取指令的附加部分(例如附加域或附加字段)中,并随着对象读取指令在处理器的流水线被传递时一起被传递。例如,对于某一读取指令,如果不能执行本公开的实施例的处理方法以进行内存重命名,则该读取指令的附加部分可以设置为无效,例如取值为-1。相对于常规指令集中的读取指令,除了操作码、源操作数、目的操作数等域(或字段)之外,在本公开上述的示例中的读取指令还包括了上述附加部分(附加域或字段)。
这里,“对象读取指令”用于表示当前作为描述对象的读取指令;同样地,这里的第二数据项、第二内存访问地址中的“第二”仅用于区分而非表示实际的顺序。该对象读取指令包括源操作数和目的操作数,且源操作数包括内存访问地址(即“第二内存访问地址”),例如该第二内存访问地址为用于访问内存的虚拟地址。
在使用第二内存访问地址查询对象内存文件,使用第二内存访问地址与对象内存文件中的数据项中的内存访问地址字段(Va)进行比较,从而判断是否查询命中(hit)或缺失(miss);例如,在其他示例中,如果需要,还需要比较线程标号字段(TID)。在对象内存文件中查找到对应第二内存访问地址的第二数据项,则将对象读取指令的第二内存访问地址重命名为第二数据项对应的第二附加架构寄存器。例如,当第一内存访问地址和第二内存访问地址相同时,则第一数据项和第二数据项为对象内存文件中的同一数据项,且第一附加架构寄存器和第二附加架构寄存器为同一附加架构寄存器。
在上述实施例中,上述指令处理方法中,默认对象读取指令的源操作数的数据宽度等于第二数据项的数据宽度字段的值,因此响应于在对象内存文件中查找到对应第二内存访问地址的第二数据项且所述第二数据项记载了第二对象物理寄存器,为所述对象读取指令附加对应于所述第二对象物理寄存器的指引信息。在另外一些示例中,对于上述操作,如果内存文件的每个数据项还包括数据宽度字段,则响应于在对象内存文件中查找到对应第二内存访问地址的第二数据项且对象读取指令的源操作数的数据宽度小于等于第二数据项的数据宽度字段的值,为所述对象读取指令附加对应于所述第二对象物理寄存器的指引信息。
在上述示例中,对象读取指令的源操作数的数据宽度小于等于第二数据项的数据宽度字段的值,则意味着之前创建第二数据项的关联存储指令的目的操作数包含对象读取指令的源操作数。在对象读取指令的源操作数的数据宽度小于第二数据项的数据宽度字段的值的情形中,由于在对象内存文件中查找到对应第二内存访问地址的第二数据项,则意味着对象读取指令的源操作数的内存地址与之前创建第二数据项的关联存储指令的目的操作数的内存地址相同,此时仍然可以进行内存重命名并进行后续的操作。因此,本公开实施例不限于对象读取指令的源操作数的数据宽度等于第二数据项的数据宽度字段的值。
例如,在至少一个实施例中,上述指令处理方法还包括:响应于对象读取指令用于将第一内存数据加载到对象读取指令的第一架构目的寄存器,在所述对象读取指令的寄存器重命名阶段将第一架构目的寄存器映射到第二对象物理寄存器。或者,响应于对象读取指令加载第二内存数据并使用第二内存数据执行运算后将运算结果存储到对象读取指令的第一架构目的寄存器,不进行处理。
在将将第一架构目的寄存器映射到第二对象物理寄存器之后,则无需再实际访问第二内存访问地址就可以从该被映射的物理寄存器获取到需要的操作数,相当于该独权指令已经被执行,即已经将第二内存访问地址的数据读入到寄存器中,可以用于后续操作,由此减小了数据就绪的延迟以及缓存的访问次数,提高了系统性能,降低处理器以及系统的功耗。
例如,在至少一个实施例中,在对象读取指令的寄存器重命名阶段中将第一架构目的寄存器映射到第二对象物理寄存器,包括:使用对应于第二对象物理寄存器的指引信息来将第一架构目的寄存器映射到第二对象物理寄存器。从对象读取指令的附加部分获取指引信息,获取第二对象物理寄存器的编号,由此在该寄存器重命名阶段可以将第一架构目的寄存器映射到第二对象物理寄存器。
例如,在至少一个实施例中,上述对象存储指令和对象读取指令为栈操作指令,例如上述指令处理方法仅涉及栈操作指令,例如栈操作指令包括的存储指令和读取指令,由此加快了栈操作的效率。
例如,在至少一个实施例中,响应于指令分派阶段在同一组中分派多条指令,上述对象存储指令和对象读取指令属于同一组。在处理器核为超标量类型时,可以一次性分派多个指令,该多个指令属于同一组,则上述指令处理方法对同一组中的存储指令和读取指令,这样可以简化操作和设计,无需维护较大的内存文件。
图5示出了根据已经生成内存访问地址的存储指令操作内存文件的示例的流程图。
如图5所示,在步骤501,进行指令分派(dispatch),分派包括存储指令在内的各种指令。
在步骤502,判断当前的指令是否为已经生成内存访问地址的存储指令(“对象存储指令”),如果不是,则结束本流程,如果是,则前进到步骤503。
在步骤503,使用对象存储指令的内存访问地址(“第一内存访问地址”)查询内存文件(“对象内存文件”),以确定是否与内存文件中更老的数据项重合,如果重合,即查询命中,则前进到步骤504,否则前进到步骤505。
在步骤504,将在内存文件中查询命中的更老的(已有的)数据项的有效位设置为无效(即“0”)。
在步骤505,在内存文件中创建对应于内存访问地址的新的数据项(“第一数据项”),且将该新的数据项的有效位设置为有效(即“1”)。
在步骤506,将内存访问地址填充入该第一数据项的内存访问地址字段,且将该第一数据项的物理寄存器字段设置为初始值(例如-1,指向无效的物理寄存器)(“第一对象物理寄存器”)。
在步骤507,判断该对象存储指令是否为浮点指令类型。
在步骤508,如果该对象存储指令为浮点指令类型,将该对象指令的类型字段设置为1,反之如果该对象存储指令为定点指令类型,该类型字段的取值为0。
至此,本流程结束。在该示例中,如果需要还可以对线程标号字段(TID)进行填写。
图6示出了已经生成内存访问地址的读取指令根据内存文件进行操作的示例的流程图。
如图6所示,在步骤601,进行指令分派,分派包括读取指令在内的各种指令。
在步骤602,判断当前的指令是否为已经生成内存访问地址的读取指令(“对象读取指令”),如果不是,则结束本流程,如果是,则前进到步骤603。
在步骤603,将内存文件(“对象内存文件”)中的读指针指向内存文件中已有数据项中的最新项。例如,内存文件为队列。
在步骤604,判断读指针循环是否结束,如果是,则结束本流程,否则前进到步骤605。
在步骤605,在对象内存文件中读取当前读指针指向的数据项。
在步骤606,判断当前数据项的有效位是否有效(有效位=1?)且(&&)存储的数据是否包含读取的数据(例如对象读取指令的内存访问地址(“第二内存访问地址”)是否等于当前数据项的内存访问地址字段且对象读取指令的源操作数的数据宽度小于等于当前数据项的数据宽度字段的值),如果不是,则前进到步骤607,否则前进到步骤608。
在步骤607,将对象内存文件的读指针指向更老的一个数据项,然后返回到步骤604。
在步骤608,判断对象读取指令和当前数据项对应的存储指令的类型是否相同(例如是否都是定点指令或都是浮点数据),如果不是,则结束本流程,如果是,则前进到步骤609。例如通过内存数据项的类型字段(Fp)来进行判断。
在步骤609,判断当前数据项的物理寄存器字段是否指向无效的物理寄存器(即该字段的取值是否为初始值-1),如果是则前进到步骤610,否则结束本流程。
在步骤610,确定对象读取指令可以进行内存重命名且在对象读取指令的附加部分存储当前数据项的物理寄存器字段记载的物理寄存器的指引信息(例如编号)。
至此,本流程结束。同样地,在该示例中,如果需要还可以对线程标号字段(TID)进行比较和判断。
在上述流程中,该内存文件例如是以创建时间排序的循环存储结构。
图7示出了已经生成内存访问地址的存储指令根据内存文件进行内存重命名的示例的流程图。例如,该读取指令的附加部分记载了在内存文件中对应的数据项对应的索引信息(例如编号)。
如图7所示,在步骤701,进入寄存器重命名阶段,对指令的寄存器以及已经生成的内存访问地址进行重命名。
在步骤702,判断当前的指令是否为已经生成内存访问地址的存储指令(“对象存储指令”),如果不是,则结束本流程,如果是,则前进到步骤703。
在步骤703,判断对象存储指令所需存储的数据是否在源寄存器中,如果是,则前进到步骤704,否则结束本流程。
在步骤704,为对象存储指令的源寄存器分配(映射)物理寄存器,并将该分配的物理寄存器的编号写入到内存文件中该对象存储指令对应的数据项(“第一数据项”)的物理寄存器字段中。例如使用该对象存储指令的附加部分记载的索引信息在内存文件中定位该对象存储指令对应的数据项。
至此,本流程结束。
图8示出了已经生成内存访问地址的读取指令根据内存文件进行内存重命名的示例的流程图。例如,该读取指令的附加部分记载了在内存文件中对应的数据项对应的物理寄存器的编号。
如图8所示,在步骤801,进入寄存器重命名阶段。
在步骤802,判断当前的指令是否为已经生成内存访问地址的读取指令(“对象读取指令”),如果不是,则结束本流程,如果是,则前进到步骤803。
在步骤803,判断对象读取指令是否加载数据并运算后写入目的寄存器,如果不是,则前进到步骤804,否则结束本流程。
在步骤804,判断对象读取指令是否仅将数据加载到目的寄存器,如果不是,则结束本流程,如果是,则前进到步骤805。
在步骤805,将该对象读取指令的目的寄存器映射到该对象读取指令的附加部分所指向的物理寄存器。
至此,本流程结束。
图9示出了本公开至少一实施例提供的处理器的示意图。
如图9所示,本公开的实施例提供的处理器900包括译码单元901和指令分派单元902,其中,译码单元901配置为对接收的指令进行译码;该指令分派单元902配置为:响应于译码单元901在对象存储指令的译码阶段获得对象存储指令中作为目的操作数的第一内存访问地址,使用第一内存访问地址查询对象内存文件;在对象内存文件中维护对应第一内存访问地址的第一数据项,且为所述对象存储指令记载对应于所述第一内存访问地址的第一对象物理寄存器。该处理器可以用于实现本公开实施例的上述指令处理方法,可以在指令的译码阶段获得指令中作为目的操作数或源操作数的内存访问地址。
例如,在至少一个实例中,上述处理器900可以参考图3所示的情形,可以针对栈操作指令实施本公开实施例的上述指令处理方法。
例如,本公开实施例的处理器还可以进一步包括但不限于分支预测(Branchprediction)、指令提取(Instruction fetch)、寄存器重命名(Rename)、指令执行(Execute)、指令结束(Retire)等结构;并且,本公开实施例的处理器例如可以基于X86架构、ARM架构、RISC-V架构等,对应地支持X86指令集、ARM指令集、RISC-V指令集等。本公开实施例的处理器可以是标量处理器或超标量处理器,可以是单线程处理器或多线程处理器。本公开的实施例对上述可选方式不作限制。
例如,在至少一个示例中,该指令分派单元902还配置为:响应于译码单元在对象读取指令的译码阶段获得对象读取指令中作为源操作数的第二内存访问地址,使用第二内存访问地址查询对象内存文件;以及,响应于在对象内存文件中查找到对应第二内存访问地址且有效的第二数据项且第二数据项记载了第二对象物理寄存器,为对象读取指令附加对应于第二对象物理寄存器的指引信息,其中,指引信息用于对象读取指令的寄存器重命名。
例如,在至少一个示例中,上述处理器还包括执行单元904,其中,该执行单元904配置为:在将第一源寄存器映射的物理寄存器设置为第一对象物理寄存器之后,将第一对象物理寄存器设置为就绪;或者,在将第一源寄存器映射的物理寄存器设置为第一对象物理寄存器,且将对象存储指令的源操作数写入第一对象物理寄存器之后,将第一对象物理寄存器设置为就绪。
例如,在至少一个示例中,上述处理器还包括重命名单元903,其中,该重命名单元903配置为:响应于对象存储指令的源操作数存在于第一源寄存器中,在对象存储指令的寄存器重命名阶段,将第一源寄存器映射的物理寄存器设置为第一对象物理寄存器;或者,响应于对象存储指令的源操作数不存在于任何寄存器中,在对象存储指令的寄存器重命名阶段,将第一对象物理寄存器保持为对应非有效物理寄存器。
或者,在至少在一个示例中,该重命名单元903还可以配置为:响应于对象读取指令用于将第一内存数据加载到对象读取指令的第一架构目的寄存器,在对象读取指令的寄存器重命名阶段将第一架构目的寄存器映射到第二对象物理寄存器。
例如,在至少一个示例中,该指令分派单元902还配置为:为对象存储指令附加第一数据项在对象内存文件中的第一索引,其中,第一索引用于在对象内存文件中定位第一数据项。
例如,在至少一个示例中,该重命名单元903还配置为:响应于对象存储指令的源操作数存在于第一源寄存器中,在对象存储指令的寄存器重命名阶段,使用第一索引来将第一源寄存器映射的物理寄存器设置为第一对象物理寄存器,以及,使用对应于第二对象物理寄存器的指引信息来将第一架构目的寄存器映射到第二对象物理寄存器。
例如,在至少一个示例中,上述指令分派单元902和重命名单元903可以合并或集成为指令分派与重命名(Dispatch and Rename)单元。
例如,在至少一个示例中,上述处理器还包括退休单元,其中,该退休单元配置为:在第一对象物理寄存器被释放时,将对象内存文件中的对应于对象存储指令的第一数据项设置为无效。
在至少在一个示例中,对象内存文件包括至少一个数据项,至少一个数据项包括第一数据项,至少一个数据项每个包括有效位、内存访问地址字段和物理寄存器字段,有效位用于指示所属的数据项是否有效,内存访问地址字段用于记载所属的数据项被关联存储指令创建时关联存储指令中作为目的操作数的内存访问地址,物理寄存器字段用于记载在对象存储指令的寄存器重命名阶段中为关联存储指令的源寄存器分配的物理寄存器的编号。
在至少在一个示例中,至少一个数据项每个还包括线程标号字段,线程标号字段用于记载所属的数据项被关联存储指令创建时关联存储指令所在的线程的标号。
在至少在一个示例中,至少一个数据项每个还包括数据宽度字段。
在至少在一个示例中,对象存储指令为定点指令类型,对象内存文件用于定点指令类型,或者,对象存储指令为浮点指令类型,对象内存文件用于浮点指令类型;或者,至少一个数据项每个还包括类型字段,类型字段用于指示所属的数据项是定点指令类型或浮点指令类型。
在至少在一个示例中,上述译码单元901还配置为:响应于在对象存储指令进入处理器流水线后处理器流水线发生了冲刷事件,清空对象内存文件;或者响应于对象存储指令为栈操作指令,以及响应于在对象存储指令进入处理器流水线后在译码阶段维护的当前栈顶值被无效,清空对象内存文件。
在至少在一个示例中,指令分派单元902还配置为:响应于在对象内存文件中没有查询到第一内存访问地址,在对象内存文件中创建对应于第一内存访问地址的第一数据项;或者,响应于在对象内存文件中查询到第一内存地址,在对象内存文件中更新对应于第一内存访问地址的第一数据项。
在至少在一个示例中,对象内存文件包括按照先进先出方式创建的至少一个数据项,在对象内存文件中更新对应于第一内存访问地址的第一数据项,包括:将对象内存文件中查找到的对应于第一内存访问地址的在先数据项无效,以及在对象内存文件中创建对应于第一内存访问地址的第一数据项。
在至少在一个示例中,上述重命名单元903还配置为:在将第一源寄存器映射的物理寄存器设置为第一对象物理寄存器之后,将第一对象物理寄存器设置为就绪;或者,在将第一源寄存器映射的物理寄存器设置为第一对象物理寄存器,且将对象存储指令的源操作数写入第一对象物理寄存器之后,将第一对象物理寄存器设置为就绪。
例如,在至少一个示例中,该重命名单元903还配置为:响应于对象读取指令用于将第一内存数据加载到对象读取指令的第一架构目的寄存器,将第一架构目的寄存器映射到第二附加架构寄存器所对应的物理寄存器;或者,响应于对象读取指令加载第二内存数据并使用第二内存数据执行运算后将运算结果存储到对象读取指令的第一架构目的寄存器,将对象读取指令的第二附加架构寄存器作为源寄存器用于参与运算。
例如,在至少一个示例中,对象存储指令和对象读取指令为栈操作指令。
例如,在至少一个示例中,响应于指令分派阶段在同一组中分派多条指令,对象存储指令和对象读取指令属于同一组。
在上述实施例中,译码单元、指令分派单元和执行单元还可以进一步用于在上面描述指令处理方法中的其他对应的步骤或操作,为了简单起见,这就不再赘述。
在本公开的至少一实施例中,上述指令处理方法和处理器适用于任何基于寄存器进行提前生成内存访问地址的存储(store)指令和读取(load)指令;上述指令处理方法和处理器适用于在拥有一个源寄存器/数据和目的内存地址的存储指令,以及适用于拥有一个目的寄存器以及一个源内存地址的读取指令,在这些存储指令和读取指令之间进行内存重命名。例如,本公开的至少一实施例中,可以使用X86-64处理器核作为示例,但是本公开的各个实施例适用于所有类型的可用的处理器核。
本公开的一些实施例还提供了一种电子装置,该电子装置包括上述任一实施例的处理器或者可执行上述任一实施例的指令处理方法。
图10为本公开至少一个实施例提供的一种电子装置的示意图。本公开实施例中的电子装置可以包括但不限于诸如笔记本电脑、PDA(个人数字助理)、PAD(平板电脑)等的移动终端以及诸如台式计算机等固定终端。
图10示出的电子装置1000仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。例如,如图10所示,在一些示例中,电子装置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。
虽然图10示出了包括各种装置的电子装置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.根据权利要求2所述的指令处理方法,其中,所述至少一个数据项每个还包括数据宽度字段。
5.根据权利要求2所述的指令处理方法,其中,所述对象存储指令为定点指令类型或浮点指令类型,相应地所述对象内存文件用于定点指令类型或浮点指令类型;或者
所述至少一个数据项每个还包括类型字段,所述类型字段用于指示所属的数据项是定点指令类型或浮点指令类型。
6.根据权利要求1所述的指令处理方法,还包括:
响应于在所述对象存储指令进入处理器流水线后所述处理器流水线发生了冲刷事件,清空所述对象内存文件;或者,
响应于所述对象存储指令为栈操作指令,以及响应于在所述对象存储指令进入处理器流水线后在译码阶段维护的当前栈顶值被无效,清空所述对象内存文件。
7.根据权利要求1所述的指令处理方法,其中,所述在所述对象内存文件中维护对应所述第一内存访问地址的第一数据项,包括:
响应于在所述对象内存文件中没有查询到所述第一内存访问地址,在所述对象内存文件中创建对应于所述第一内存访问地址的所述第一数据项;或者,
响应于在所述对象内存文件中查询到所述第一内存访问地址,在所述对象内存文件中更新对应于所述第一内存访问地址的所述第一数据项。
8.根据权利要求7所述的指令处理方法,其中,所述对象内存文件包括按照先进先出方式创建的至少一个数据项,
所述在所述对象内存文件中更新对应于所述第一内存访问地址的所述第一数据项,包括:
将所述对象内存文件中查找到的对应于所述第一内存访问地址的在先数据项无效,以及
在所述对象内存文件中创建对应于所述第一内存访问地址的所述第一数据项。
9.根据权利要求1所述的指令处理方法,还包括:
为所述对象存储指令附加所述第一数据项在所述对象内存文件中的第一索引,其中,所述第一索引用于在所述对象内存文件中定位所述第一数据项。
10.根据权利要求9所述的指令处理方法,还包括:
响应于所述对象存储指令的源操作数存在于第一源寄存器中,在所述对象存储指令的寄存器重命名阶段,使用所述第一索引来将所述第一源寄存器映射的物理寄存器设置为所述第一对象物理寄存器;或者,
响应于所述对象存储指令的源操作数不存在于任何寄存器中,在所述对象存储指令的寄存器重命名阶段将所述第一对象物理寄存器保持为对应非有效物理寄存器。
11.根据权利要求10所述的指令处理方法,还包括:
在将所述第一源寄存器映射的物理寄存器设置为所述第一对象物理寄存器之后,将所述第一对象物理寄存器设置为就绪;或者,
在将所述第一源寄存器映射的物理寄存器设置为所述第一对象物理寄存器,且将所述对象存储指令的源操作数写入所述第一对象物理寄存器之后,将所述第一对象物理寄存器设置为就绪。
12.根据权利要求1-11任一项所述的指令处理方法,还包括:
响应于在对象读取指令的译码阶段获得所述对象读取指令中作为源操作数的第二内存访问地址,使用所述第二内存访问地址查询所述对象内存文件;
响应于在所述对象内存文件中查找到对应所述第二内存访问地址且有效的第二数据项且所述第二数据项记载了第二对象物理寄存器,为所述对象读取指令附加对应于所述第二对象物理寄存器的指引信息,其中,所述指引信息用于所述对象读取指令的寄存器重命名。
13.根据权利要求12所述的指令处理方法,其中,响应于在所述对象内存文件中查找到对应所述第二内存访问地址且有效的第二数据项且所述第二数据项记载了第二对象物理寄存器,为所述对象读取指令附加对应于所述第二对象物理寄存器的指引信息,包括:
响应于在所述对象内存文件中查找到对应所述第二内存访问地址且有效的第二数据项且所述对象读取指令的源操作数的数据宽度小于等于所述第二数据项的数据宽度字段的值,为所述对象读取指令附加对应于所述第二对象物理寄存器的指引信息。
14.根据权利要求12所述的指令处理方法,还包括:
响应于所述对象读取指令用于将第一内存数据加载到所述对象读取指令的第一架构目的寄存器,在所述对象读取指令的寄存器重命名阶段将所述第一架构目的寄存器映射到所述第二对象物理寄存器。
15.根据权利要求14所述的指令处理方法,其中,在所述对象读取指令的寄存器重命名阶段中将所述第一架构目的寄存器映射到所述第二对象物理寄存器,包括:
使用所述第二对象物理寄存器的指引信息来将所述第一架构目的寄存器映射到所述第二对象物理寄存器。
16.根据权利要求12所述的指令处理方法,其中,所述对象存储指令和所述对象读取指令为栈操作指令。
17.根据权利要求12所述的指令处理方法,其中,响应于指令分派阶段在同一组中分派多条指令,所述对象存储指令和所述对象读取指令属于同一组。
18.根据权利要求13所述的指令处理方法,还包括:
在所述第一对象物理寄存器被释放时,将所述对象内存文件中的对应于所述对象存储指令的第一数据项设置为无效。
19.一种处理器,包括译码单元和指令分派单元,其中,
所述译码单元配置为对接收的指令进行译码;以及
所述指令分派单元配置为:
响应于所述译码单元在对象存储指令的译码阶段获得所述对象存储指令中作为目的操作数的第一内存访问地址,使用所述第一内存访问地址查询对象内存文件;以及
在所述对象内存文件中维护对应所述第一内存访问地址的第一数据项,且为所述对象存储指令记载对应于所述第一内存访问地址的第一对象物理寄存器。
20.根据权利要求19所述的处理器,还包括执行单元,其中,
所述执行单元配置为:
在将第一源寄存器映射的物理寄存器设置为所述第一对象物理寄存器之后,将所述第一对象物理寄存器设置为就绪;或者,
在将所述第一源寄存器映射的物理寄存器设置为所述第一对象物理寄存器,且将所述对象存储指令的源操作数写入所述第一对象物理寄存器之后,将所述第一对象物理寄存器设置为就绪。
21.根据权利要求19所述的处理器,其中,
所述指令分派单元还配置为:
响应于所述译码单元在对象读取指令的译码阶段获得所述对象读取指令中作为源操作数的第二内存访问地址,使用所述第二内存访问地址查询所述对象内存文件;以及
响应于在所述对象内存文件中查找到对应所述第二内存访问地址且有效的第二数据项且所述第二数据项记载了第二对象物理寄存器,为所述对象读取指令附加对应于所述第二对象物理寄存器的指引信息,其中,所述指引信息用于所述对象读取指令的寄存器重命名。
22.根据权利要求21所述的处理器,还包括重命名单元,其中,
所述重命名单元配置为:
响应于所述对象存储指令的源操作数存在于第一源寄存器中,在所述对象存储指令的寄存器重命名阶段,将所述第一源寄存器映射的物理寄存器设置为所述第一对象物理寄存器;或者,
响应于所述对象存储指令的源操作数不存在于任何寄存器中,在所述对象存储指令的寄存器重命名阶段,将所述第一对象物理寄存器保持为对应非有效物理寄存器。
23.根据权利要求22所述的处理器,其中,
所述重命名单元还配置为:
响应于所述对象读取指令用于将第一内存数据加载到所述对象读取指令的第一架构目的寄存器,在所述对象读取指令的寄存器重命名阶段将所述第一架构目的寄存器映射到所述第二对象物理寄存器。
24.根据权利要求23所述的处理器,其中,
所述指令分派单元还配置为:
为所述对象存储指令附加所述第一数据项在所述对象内存文件中的第一索引,其中,所述第一索引用于在所述对象内存文件中定位所述第一数据项。
25.根据权利要求24所述的处理器,其中,
所述重命名单元还配置为:
响应于所述对象存储指令的源操作数存在于所述第一源寄存器中,在所述对象存储指令的寄存器重命名阶段,使用所述第一索引来将所述第一源寄存器映射的物理寄存器设置为所述第一对象物理寄存器,以及
使用所述第二对象物理寄存器的指引信息来将所述第一架构目的寄存器映射到所述第二对象物理寄存器。
26.根据权利要求19所述的处理器,还包括退休单元,其中,
所述退休单元配置为:在所述第一对象物理寄存器被释放时,将所述对象内存文件中的对应于所述对象存储指令的第一数据项设置为无效。
CN202311332336.3A 2023-10-11 2023-10-11 指令处理方法以及处理器 Active CN117289995B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311332336.3A CN117289995B (zh) 2023-10-11 2023-10-11 指令处理方法以及处理器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311332336.3A CN117289995B (zh) 2023-10-11 2023-10-11 指令处理方法以及处理器

Publications (2)

Publication Number Publication Date
CN117289995A CN117289995A (zh) 2023-12-26
CN117289995B true CN117289995B (zh) 2024-05-10

Family

ID=89256965

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311332336.3A Active CN117289995B (zh) 2023-10-11 2023-10-11 指令处理方法以及处理器

Country Status (1)

Country Link
CN (1) CN117289995B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118568011B (zh) * 2024-07-31 2024-10-01 国网上海市电力公司 一种自适应栈高速缓存方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101446891A (zh) * 2007-11-27 2009-06-03 上海高性能集成电路设计中心 一种高性能微处理器结构寄存器保留恢复指令的实现方法
CN116414458A (zh) * 2023-04-14 2023-07-11 海光信息技术股份有限公司 指令处理方法以及处理器

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9430243B2 (en) * 2012-04-30 2016-08-30 Apple Inc. Optimizing register initialization operations

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101446891A (zh) * 2007-11-27 2009-06-03 上海高性能集成电路设计中心 一种高性能微处理器结构寄存器保留恢复指令的实现方法
CN116414458A (zh) * 2023-04-14 2023-07-11 海光信息技术股份有限公司 指令处理方法以及处理器

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
快速地址计算的自适应栈高速缓存;郇丹丹;李祖松;王剑;章隆兵;胡伟武;刘志勇;;计算机研究与发展;20070128(第01期);全文 *

Also Published As

Publication number Publication date
CN117289995A (zh) 2023-12-26

Similar Documents

Publication Publication Date Title
CN106716362B (zh) 用于将微指令序列重排序为优化的微指令序列以实现指令集不可知的运行时架构的分配和发出级
JP3871884B2 (ja) 記憶からロードへの転送のための機構
JP3977015B2 (ja) リネームタグのスワッピングにより転送を行なうレジスタリネーミング
US7024537B2 (en) Data speculation based on addressing patterns identifying dual-purpose register
US7437537B2 (en) Methods and apparatus for predicting unaligned memory access
US9286072B2 (en) Using register last use infomation to perform decode-time computer instruction optimization
US7089400B1 (en) Data speculation based on stack-relative addressing patterns
US9146740B2 (en) Branch prediction preloading
US20130086367A1 (en) Tracking operand liveliness information in a computer system and performance function based on the liveliness information
CN106716363B (zh) 使用转换后备缓冲器来实现指令集不可知的运行时架构
JP2014002735A (ja) ゼロサイクルロード
JP2007515715A (ja) 命令キャッシュからラベル境界上のトレースキャッシュに遷移させる方法
WO2005111794A1 (en) System and method for validating a memory file that links speculative results of load operations to register values
US10310859B2 (en) System and method of speculative parallel execution of cache line unaligned load instructions
JPH10283181A (ja) プロセッサ内で命令を発行するための方法および装置
JP2017526059A (ja) 複数の変換テーブルを用いた命令セットアグノスティックランタイムアーキテクチャの実施
JPH10283180A (ja) プロセッサ内で命令をディスパッチする方法および装置
CN117289995B (zh) 指令处理方法以及处理器
JP2017521798A (ja) ロードが同じアドレスに対する他のロードの前にディスパッチしないことを確実にするjit最適化を通じたリオーダリングプロセスを実施するシステム変換器
JP2001229022A (ja) コンピュータ処理システムにおけるスタック・リファレンスのリネーム方法およびそのプログラム記憶装置
JP2017527020A (ja) ゲストイメージからのコードを実行するための実行時オプティマイザを実行するシステム変換器
EP1974254B1 (en) Early conditional selection of an operand
CN116414458A (zh) 指令处理方法以及处理器
JP2009524167A5 (zh)
JP2020536310A (ja) アドレス変換なしで動作する読み込み/格納ユニットでの実効アドレスのシノニムの処理

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