CN116339832A - 数据处理装置、方法及处理器 - Google Patents
数据处理装置、方法及处理器 Download PDFInfo
- Publication number
- CN116339832A CN116339832A CN202310339483.7A CN202310339483A CN116339832A CN 116339832 A CN116339832 A CN 116339832A CN 202310339483 A CN202310339483 A CN 202310339483A CN 116339832 A CN116339832 A CN 116339832A
- Authority
- CN
- China
- Prior art keywords
- instruction
- micro
- operand
- current instruction
- instructions
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000012545 processing Methods 0.000 title claims abstract description 30
- 238000000034 method Methods 0.000 title claims abstract description 29
- 238000013500 data storage Methods 0.000 claims description 12
- 238000003672 processing method Methods 0.000 claims description 6
- 230000008569 process Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 14
- 238000012805 post-processing Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- 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
- G06F9/3842—Speculative instruction execution
- G06F9/3848—Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
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
技术领域
本公开涉及数据处理技术领域,更具体地,涉及一种数据处理装置、方法及处理器。
背景技术
随着信息技术的高速发展,信息技术正推动着人类社会的发展进程,以及改变着人们的生产方式和生活方式。以高性能处理器(High Performance Processor)为代表的新一代信息处理终端成为了信息时代的技术基石。
第五代精简指令处理器(Reduced Instruction Set Computer-Five,RISC-V)和进阶精简指令集机器(Advanced RISC Machine,ARM)因具备完全开源、架构简单、易于移植等优势,逐渐被广泛应用于高性能处理器中。基于RISC-V精简指令集架构下的传统前端流水线被称为宏指令翻译引擎(Macro Instruction Translation Engine,MITE)。MITE前端流水线包括取指令、译码、寄存器重命名、派遣、发射等过程。根据处理器不同的实现方式,取指令过程可以包括二级到四级流水线。
相关技术中,MITE前端流水线的功耗约占整个处理器功耗的28%左右。由于分支指令的存在,冗长的前端流水线会使得流水线延迟变得更高,同时也会增加处理器的额外功耗。
发明内容
本公开提出了一种数据处理装置、方法及处理器。
根据本公开的第一方面,提出了一种数据处理装置,包括取指令单元,配置为获取多个指令;译码单元,配置为对多个指令依次进行译码,得到与多个指令中的各指令相对应的微操作数;分支预测单元,配置为存储与多个指令中的各跳转指令相对应的跳转指令信息,并根据跳转指令信息,对当前指令执行预测操作,得到预测结果;以及微操作数存储单元,配置为存储与多个指令的各指令相对应的指令信息和微操作数,以及在预测结果指示当前指令在分支预测单元中命中的情况下,将与当前指令对应的微操作数发送至微操作数队列,以执行当前指令。
例如,微操作数存储单元包括标签存储子单元,配置为存储与多个指令中的各指令对应的微操作数有效位、与多个指令中的各指令对应的虚拟地址和与多个指令中的各指令对应的缓存行的有效位;以及数据存储子单元,配置为存储与多个指令中的各指令对应的微操作数。
例如,微操作数存储单元还配置为:在预测结果指示当前指令在分支预测单元中命中的情况下,从标签存储子单元中读取与当前指令相对应的虚拟地址;以及在与当前指令相对应的缓存行的有效位为高电平的情况下,从数据存储子单元中读取与虚拟地址相对应的微操作数。
例如,分支预测单元包括分支目标缓冲器,配置为存储多个指令中各跳转指令的执行地址以及与跳转指令对应的跳转地址。
例如,分支预测单元还配置为确定当前指令是否为跳转指令;以及在当前指令为跳转指令的情况下,根据当前指令的执行地址和标签,确定分支目标缓冲器中是否存在与当前指令的标签相对应的目标标签,得到预测结果。
例如,预测结果包括当前指令在分支预测单元中命中或当前指令在分支预测单元中未命中;其中,当前指令在分支预测单元中命中,指示分支目标缓冲器中存在与当前指令的标签相对应的目标标签;以及当前指令在分支预测单元中未命中,指示分支目标缓冲器中不存在与当前指令的标签相对应的目标标签。
例如,跳转指令包括条件跳转指令、无条件跳转指令和系统调用指令。
例如,分支预测单元还配置为在当前指令为条件跳转指令的情况下,根据模式信息历史表,得到与当前指令相对应的跳转方向,其中,模式信息历史表配置为存储各跳转指令的历史指令信息;以及根据跳转方向和模式信息历史表,得到当前指令的后序指令的执行地址。
例如,分支预测单元还配置为在当前指令为无条件跳转指令的情况下,根据分支目标缓冲器,得到与当前指令相对应的跳转地址。
例如,分支预测单元还配置为在当前指令为系统调用指令的情况下,根据返回地址栈,得到当前指令的后序指令的执行地址。
根据本公开实施例的第二方面,提供了一种数据处理方法,该方法可应用于本公开的第一方面提供的数据处理装置,该方法包括获取多个指令;对多个指令依次进行译码,得到与多个指令中的各指令相对应的微操作数;存储与多个指令的各指令相对应的指令信息和微操作数,以及与多个指令中的各跳转指令相对应的跳转指令信息;根据跳转指令信息,对当前指令进行预测,得到预测结果;以及在预测结果指示当前指令在分支预测单元中命中的情况下,将与当前指令对应的微操作数发送至微操作数队列,以执行当前指令。
根据本公开实施例的第三方面,提供了一种处理器,包括本公开的第一方面提供的数据处理装置。
根据公开实施例的技术方案,提供了一种数据处理装置。该装置通过微操作数存储单元分别对各指令相对应的指令信息和微操作数进行存储,以及分支预测单元对多个指令中的各跳转指令相对应的跳转指令信息进行存储和对当前指令进行预测,以使当前指令在分支预测单元中命中的情况下,由微操作数存储单元将与当前指令对应的微操作数直接发送至微操作数队列。该过程可以避免命中的当前指令经过取指令单元和译码单元的多周期取指和译码过程,缩短了指令的执行周期,提高了处理器的运行效率。
附图说明
通过下面结合附图说明本公开实施例,将使本公开实施例的上述及其它目的、特征和优点更加清楚。应注意,贯穿附图,相同的元素由相同或相近的附图标记来表示。图中:
图1示出了根据相关技术中前端流水线的结构示意图;
图2示出了根据本公开一实施例的数据处理装置的结构示意图;
图3示出了根据本公开另一实施例的数据处理装置的结构示意图;
图4示出了根据本公开一实施例的读取微操作数的流程示意图;
图5A~5D和图6A~6D分别示出了根据本公开一实施例的微操作数存储单元中存储数据的示意图;
图7示出了根据本公开一实施例的微操作数队列的结构示意图;以及
图8根据本公开一实施例的数据处理方法的流程图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部。基于所描述的本公开实施例,本领域普通技术人员在无需创造性劳动的前提下获得的所有其他实施例都属于本公开保护的范围。在以下描述中,一些具体实施例仅用于描述目的,而不应该理解为对本公开有任何限制,而只是本公开实施例的示例。在可能导致对本公开的理解造成混淆时,将省略常规结构或构造。应注意,图中各部件的形状和尺寸不反映真实大小和比例,而仅示意本公开实施例的内容。
除非另外定义,本公开实施例使用的技术术语或科学术语应当是本领域技术人员所理解的通常意义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
图中示出了一些方框图和/或流程图。应理解,方框图和/或流程图中的一些方框或其组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和/或流程图中所说明的功能/操作的装置。本公开的技术可以硬件和/或软件(包括固件、微代码等)的形式来实现。另外,本公开的技术可以采取存储有指令的计算机可读存储介质上的计算机程序产品的形式,该计算机程序产品可供指令执行系统使用或者结合指令执行系统使用。
图1示出了根据相关技术中前端流水线的结构示意图。
如图1所示,该前端流水线100包括指令缓冲单元(Instruction Cache)110、取指令单元(Instruction Fetch)120和译码单元(Decoder)130。
指令缓冲单元110配置为存储多个指令。
取指令单元120配置为从指令缓冲单元110中依次读取多个指令。
译码单元130配置为对取指令单元120读取的指令依次进行译码,得到与各指令对应的指令信息。
在图1的示例中,取指令单元120包括四级流水线,分别为第一指令取指阶段121、第二指令取指阶段122、第三指令取指阶段123和第四指令取指阶段124。
例如,在第一指令取指阶段121,确定与各指令对应的执行地址(ProgramCounter,PC)的值。
例如,在第二指令取指阶段122,完成对指令缓冲区的访问,以及可以完成分支目标缓冲器(Branch Target Buffer,BTB)的部分工作。由于程序中的指令地址为虚拟地址,需要通过页表缓冲器(Translation Lookaside Buffer,TLB)将虚拟地址转换为物理地址,并根据物理地址访问指令缓冲。以及根据PC值查询BTB的表项,确定是否为分支指令,且是否跳转(Taken)和跳转地址。
例如,第三指令取指阶段123,获取指令缓冲单元110的响应结果,并将响应结果放入指令存储(Instruction Memory,IMem)响应队列。
例如,在第四指令取指阶段124,从IMem响应队列中取出取指数据包(FetchPacket),并进行快速译码(BR Decode)。根据译码结果可以判断该指令是否为分支跳转指令,以及跳转的地址。接着对译码得到的分支跳转地址、BTB的表项以及后备预测器(Backing Predictor,BPD)的结果进行比较(BR Checker),以更新BTB的表项。最后将取指数据包存储至取指缓冲器(Fetch Buffer)中,PC值以及分支预测的信息放入预取目标队列(Fetch Target Queue,FTQ)中。
相关技术中,在各指令的取指过程,基于四级流水线的取指过程严重降低了处理器对各指令的执行效率,提高了处理器的功耗。尤其在分支指令存在的情况下,冗长的前端流水线会使得流水线延迟变得更高,同时也会增加额外的功耗。另外,由于传统的前端流水线吞吐量不足,这也会引起后端流水线部件闲置的情况。
针对相关技术中存在的问题,本公开实施例提供了一种数据处理装置,包括取指令单元,配置为获取多个指令;译码单元,配置为对多个指令依次进行译码,得到与多个指令中的各指令相对应的微操作数;分支预测单元,配置为存储与多个指令中的各跳转指令相对应的跳转指令信息,并根据跳转指令信息,对当前指令执行预测操作,得到预测结果;以及微操作数存储单元,配置为存储与多个指令的各指令相对应的指令信息和微操作数,以及在预测结果指示当前指令在分支预测单元中命中的情况下,将与当前指令对应的微操作数发送至微操作数队列,以执行当前指令。
本公开实施例提供的一种数据处理装置。该装置通过微操作数存储单元分别对各指令相对应的指令信息和微操作数进行存储,以及分支预测单元对多个指令中的各跳转指令相对应的跳转指令信息进行存储和对当前指令进行预测,以使当前指令在分支预测单元中命中的情况下,由微操作数存储单元将与当前指令对应的微操作数直接发送至微操作数队列。该过程可以避免命中的当前指令经过取指令单元和译码单元的多周期取指和译码过程,缩短了指令的执行周期,提高了处理器的运行效率。
图2示出了根据本公开一实施例的数据处理装置的结构示意图。
如图2所示,该数据处理装置200可以包括取指令单元210、译码单元220、分支预测单元(Branch Prediction Unit,BPU)230、微操作数存储单元240和微操作数队列(UopsQueue)250。
取指令单元210,配置为获取多个指令。
译码单元220,配置为对多个指令依次进行译码,得到与多个指令中的各指令相对应的微操作数。
分支预测单元230,配置为存储与多个指令中的各跳转指令相对应的跳转指令信息,并根据跳转指令信息,对当前指令执行预测操作,得到预测结果。
微操作数存储单元240,配置为存储与多个指令的各指令相对应的指令信息和微操作数。以及在预测结果指示当前指令在分支预测单元230中命中的情况下,将与当前指令对应的微操作数发送至微操作数队列250,以执行当前指令。
在本公开实施例中,多个指令为处理器指令(即CPU指令)。
例如,各指令可以为跳转指令、逻辑指令(如,与操作、或操作、非操作)、算术指令(如,加法操作、减法操作)、乘法指令、除法指令等。
例如,取指令单元210可以包括二级流水线、三级流水线或四级流水线等,以完成对各指令的取指过程。
例如,在取指令单元210包括四级流水线的情况下,取指令单元210的结构可以与如图1所示的取指令单元120的结构相同。为了简明,本公开对取指令单元的结构不再赘述。
例如,取指令单元210可以配置为从指令缓冲单元中依次读取各指令。
例如,译码单元220配置为对各指令依次进行译码,得到与多个指令中的各指令相对应的指令信息。
例如,指令信息可以包括寄存器索引、立即数大小、指令对应的PC的值、指令类型、源寄存器信息、目标寄存器信息等信息。
在本公开实施例中,分支预测单元230配置为存储与多个指令中的各跳转指令相对应的跳转指令信息。并根据跳转指令信息,对当前指令执行预测操作,得到预测结果。
例如,各跳转指令相对应的跳转指令信息可以包括跳转指令类型、标签(Tag)、跳转地址(即跳转指令对应的后序指令对应的PC值)和有效位信息(Valid)等。
例如,跳转指令类型包括条件跳转指令、无条件跳转指令和系统调用指令等。
例如,标签表示各跳转指令的部分虚拟地址,用于与译码单元220得到的各指令的虚拟地址进行匹配,以确定各跳转指令是否在分支预测单元230中命中。
例如,有效位信息表示各跳转指令存储在分支预测单元230中所在的缓存行是否有效。
例如,有效位信息可以为1位(bit),可以为低电平“0”或高电平“1”。
例如,在有效位信息在高电平“1”的情况下,指示各跳转指令存储在分支预测单元230中所在的缓存行有效。
例如,在有效位信息在低电平“0”的情况下,指示各跳转指令存储在分支预测单元230中所在的缓存行无效。
可以理解,本公开实施例中所示的“命中”指的是分支预测单元230中是否存储有与各跳转指令对应的跳转指令信息。
在本公开实施例中,微操作数存储单元240配置为存储由译码单元220译码得到的与各指令相对应的指令信息和微操作数,以及在分支预测单元230输出的预测结果指示当前指令在分支预测单元230中命中的情况下,将与当前指令对应的微操作数发送至微操作数队列250,以便后续流水线执行当前指令。
可以理解,在当前指令在分支预测单元230中命中的情况下,则微操作数存储单元240中也必定存在与当前指令相对应的指令信息和微操作数,通过微操作数存储单元240直接将与当前指令相对应的指令信息和微操作数发送至微操作数队列250,缩短了处理器对指令的处理周期。
根据本公开的实施例,在当前指令在分支预测单元中命中的情况下,由微操作数存储单元将与当前指令对应的微操作数直接发送至微操作数队列。该过程可以避免命中的当前指令经过取指令单元和译码单元的多周期取指和译码过程,缩短了指令的执行周期,提高了处理器的运行效率。
图3示出了根据本公开另一实施例的数据处理装置的结构示意图。
如图3所示,该数据处理装置300包括程序计数器生成单元310、指令缓冲单元320、取指令单元330、译码单元340、分支预测单元350、微操作数存储单元360和微操作数队列370。
程序计数器生成单元310配置为在处理器开启工作后,依次产生多个PC地址。
指令缓冲单元320配置为根据多个PC地址,得到与多个PC地址的各PC地址相对应的指令。
取指令单元330配置为从指令缓冲单元320依次获取多个指令。
译码单元340配置为依次对各指令进行译码处理,得到与多个指令中的各指令相对应的指令信息,并将各指令相对应的指令信息输出至微操作数存储单元360和微操作数队列370。
分支预测单元350配置为存储与多个指令中的各跳转指令相对应的跳转指令信息,并根据跳转指令信息,对当前指令执行预测操作,得到预测结果。
微操作数存储单元360配置为存储与各指令相对应的指令信息和微操作数,以及在预测结果指示当前指令在分支预测单元350中命中的情况下,将与当前指令对应的微操作数发送至微操作数队列370,以执行当前指令。
例如,程序计数器生成单元310生成的多个PC地址为根据初始地址(如0x80000000)依次递增的PC地址。
例如,多个PC地址可以分别为0x8000 0000、0x8000 0004、0x8000 0008、...。
例如,取指令单元330包括多级流水线。每级流水线用于完成一个指令取指阶段,依次完成对各指令的取指过程。
例如,取指令单元330可以包括二级流水线、三级流水线和四级流水线等。本公开的实施例对取指令单元330的结构不作限定,可以根据实际需求对取指令单元330的结构进行设定。
例如,译码单元340对各指令进行译码,得到与各指令相对应的指令信息包括但不仅限于寄存器索引、立即数大小、指令对应的PC的值、指令类型、源寄存器信息、目标寄存器信息等。
在本公开实施例中,分支预测单元350包括分支目标缓冲器。分支目标缓冲器配置为存储多个指令中各跳转指令的执行地址(即PC地址)、标签、跳转指令类型、有效位信息以及与跳转指令对应的跳转地址(当前指令的后序指令的PC地址,即Next PC)。
例如,分支预测单元350还配置为确定当前指令是否为跳转指令。以及在当前指令为跳转指令的情况下,根据当前指令的PC地址和标签,确定分支目标缓冲器中是否存在与当前指令的执行地址和标签相对应的目标标签,得到预测结果。
例如,在当前指令为条件跳转指令、无条件跳转指令或系统调用指令的情况下,分支预测单元350根据当前指令的PC地址和标签,确定分支目标缓冲器中是否存在与当前指令的执行地址和标签相对应的目标标签,得到预测结果。
例如,预测结果包括当前指令在分支预测单元350中命中或当前指令在分支预测单元350中未命中。
例如,当前指令在分支预测单元350中命中,指示分支目标缓冲器中存在与当前指令的标签相对应的目标标签。
例如,当前指令在分支预测单元350中未命中,指示分支目标缓冲器中不存在与当前指令的标签相对应的目标标签。
例如,当前指令对应的标签和与其对应的目标标签可以相同,或目标标签为与当前指令的标签的部分标签。
需说明的是,本公开实施例中的各标签表示与各PC地址相对应的部分虚拟地址或全部虚拟地址。
例如,分支预测单元350还包括模式信息历史表(Pattern historytable,PHT)和返回地址栈(Return Address Stack,RAS)。
例如,模式信息历史表用于存储与各跳转指令的分支历史信息。
例如,返回地址栈用于存储各系统调用指令的历史信息。
例如,分支预测单元350还配置为在当前指令为无条件跳转指令的情况下,根据分支目标缓冲器,得到与当前指令相对应的跳转地址,以执行指令跳转。
例如,分支预测单元350还配置为在当前指令为条件跳转指令的情况下,根据模式信息历史表,得到与当前指令相对应的跳转方向。以及根据跳转方向和模式信息历史表,得到当前指令的后序指令的执行地址(Next PC)。
例如,分支预测单元350还配置为在当前指令为系统调用指令的情况下,根据返回地址栈,得到当前指令的后序指令的执行地址。
可以理解,本公开实施例中的分支预测单元的结构仅为示例性说明,并不构成本公开实施例的限定。
在本公开实施例中,微操作数存储单元360包括标签存储子单元(Tag RAM)和数据存储子单元(Data RAM)。
标签存储子单元,配置为存储与多个指令中的各指令对应的微操作数有效位、与多个指令中的各指令对应的虚拟地址和与多个指令中的各指令对应的缓存行的有效位。
数据存储子单元,配置为存储与多个指令中的各指令对应的微操作数。
例如,微操作数存储单元360可以包括64个缓存行(Cache Line)。每个缓存行可以存储3个微操作数(Uop)。
例如,标签存储子单元中的每个缓存行的长度可以为35位(bit)。标签存储子单元的每个缓存行的格式可以表示为:
表1
Uop_Vld | Uop_Tag | Uop 0_Vld | Uop 1_Vld | Uop 2_Vld | |
位 | 34 | 33:3 | 2 | 1 | 0 |
在表1的示例中,Uop_Vld表示每个缓存行的有效位。Uop_Vld可以为1位的二进制来表示,如“1”或“0”。Uop_Tag表示各指令的部分虚拟地址。Uop_Vld可以为31位的二进制来表示。Uop 0_Vld、Uop1_Vld和Uop 2_Vld分别表示每个缓存行存储的第一个微操作数的有效位、第二个微操作数的有效位和第三个微操作数的有效位。Uop0_Vld、Uop 1_Vld和Uop2_Vld均可以为1位的二进制来表示,如“1”或“0”。
例如,数据存储子单元中的每个缓存行的长度可以为363位(bit)。标签存储子单元的每个缓存行的内部格式可以表示为:
表2
Uop 2 | Uop1 | Uop 0 | |
位 | 362:242 | 241:121 | 120:0 |
在表2的示例中,Uop表示微操作数,如第一微操作数Uop 0、第二微操作数Uop 1和第三微操作数Uop 2。每个微操作数的长度均为121位。
例如,每个指令对应的虚拟地址为40位。每个指令对应的虚拟地址可以表示为:
表3
Tag | Index | Offset | |
位 | 39:9 | 8:3 | 2:0 |
在表3的示例中,Tag表示每个指令对应的部分虚拟地址。Index表示每个指令对应的索引。Offset表示偏移量,Offset指示各指令是否为压缩指令。Offset的最低位默认为“0”。
需说明的是,本公开实施例中标签存储子单元的缓存行、数据存储子单元的缓存行和每个PC地址的结构仅为示例性的说明,并不构成本公开实施例的限定。
根据本公开的实施例,微操作数存储单元360还配置为在预测结果指示当前指令在分支预测单元350中命中的情况下,从标签存储子单元中读取与当前指令相对应的虚拟地址。以及在与当前指令相对应的缓存行的有效位为高电平的情况下,从数据存储子单元中读取与虚拟地址相对应的微操作数。
图4示出了根据本公开一实施例的读取微操作数的流程示意图。
如图4所示,执行地址410表示与各指令地址对应的虚拟地址。执行地址410包括偏移量(Offset)、索引(Index)和标签(Tag)。
以执行地址410为40位为例说明。偏移量的长度为3位,且偏移量的最低位默认为“0”。索引的长度为6位。索引表示的是缓存行的序号,其数值范围为0~63。标签表示执行地址410的部分虚拟地址。
在图4的示例中,以执行地址410为40位为例,对微操作数存储单元中存储的各微操作数进行读取举例说明。可以理解,该读取过程仅为示例性的说明,并不构成本公开实施例的限定。
例如,在读取微操作数存储单元中存储的各微操作数的过程中,根据当前指令的执行地址410的索引值,在标签存储子单元420中读取与该索引值相对应的目标标签。
例如,在当前指令的执行地址410的索引值为“60”的情况下,读取标签存储子单元420中序号为“60”的缓存行中存储的目标标签“001F 5678”。以及,确定当前指令的执行地址410的标签与读取的目标标签“001F 5678”是否相等。
例如,在当前指令的执行地址410的标签与读取的目标标签“001F5678”相等的情况下,输出匹配信号(Match Vld)的有效位为高电平“1”。否则,Match Vld的有效位为低电平“0”。
例如,将Match Vld与序号为“60”的缓存行的有效位进行逻辑与操作,得到与操作后的结果。
例如,在序号为“60”的缓存行的有效位为高电平“1”,以及Match Vld的有效位为高电平“1”的情况下,经过逻辑与操作后的结果信号为高电平“1”,指示可以从数据存储子单元中读取与当前指令相对应的微操作数。
例如,根据当前指令的虚拟地址的索引值,在数据存储子单元430中读取与当前指令相对应的微操作数。以及将该微操作数输出至微操作数队列。
在本公开实施例中,在数据存储子单元中读取与虚拟地址相对应的微操作数的过程,需在当前指令在分支预测单元中命中之后执行,以避免当前指令为跳转指令的情况下经过传统流水线的取指令过程和译码过程,缩短了对命中的跳转指令的处理周期,提高了处理器的执行效率。
图5A~5D和图6A~6D分别示出了根据本公开一实施例的微操作数存储单元中存储数据的示意图。
可以理解,为简化微操作数的存储过程,可以将两个跳转指令之间的微操作数存储在微操作数存储单元中的相同缓存行或多个相邻的缓存行。
例如,在当前指令在微操作数存储单元中未命中任何一个缓存行,以及待写入的微操作数中不存在跳转指令,此时在微操作数存储单元中空闲的缓存行中依次写入各微操作数。
如图5A所示,微操作数存储单元的第一缓存行Cache Line 0已存储第一微操作数Mul。第二微操作数和第三微操作数均为空(Empty)。
在在后处理周期中,通过译码单元得到的微操作数分别为微操作数Add、微操作数Sub和微操作数OR。由于微操作数Add、微操作数Sub和微操作数OR中不存在跳转指令,此时依次将微操作数Add、微操作数Sub和微操作数OR存储至微操作数存储单元的第一缓存行Cache Line 1。
如图5B所示,微操作数存储单元的第一缓存行Cache Line 0已存储第一微操作数Mul和第二微操作数Div。第三微操作数为空。
在在后处理周期中,通过译码单元得到的微操作数分别为微操作数Add、微操作数Sub和微操作数OR。由于微操作数Add、微操作数Sub和微操作数OR中不存在跳转指令,此时依次将微操作数Add、微操作数Sub和微操作数OR存储至微操作数存储单元的第一缓存行Cache Line 1。
如图5C所示,微操作数存储单元的第一缓存行Cache Line 0已存储第一微操作数Mul和第二微操作数Div。第三微操作数为空。
在在后处理周期中,通过译码单元得到的微操作数分别为微操作数Add、微操作数BR和微操作数OR。由于微操作数Add、微操作数BR和微操作数OR中不存在跳转指令,此时依次将微操作数Add、微操作数BR和微操作数OR存储至微操作数存储单元的第一缓存行CacheLine 1。
如图5D所示,微操作数存储单元的第一缓存行Cache Line 0已存储第一微操作数Mul和第二微操作数Div。第三微操作数为空。
在在后处理周期中,通过译码单元得到的微操作数分别为微操作数BR、微操作数Add和微操作数OR。由于微操作数BR、微操作数Add和微操作数OR中不存在跳转指令,此时依次将微操作数BR、微操作数Add和微操作数OR存储至微操作数存储单元的第一缓存行CacheLine 1。
例如,在当前指令在微操作数存储单元中未命中任何一个缓存行,以及待写入的微操作数中存在无条件跳转指令(JAL),此时在微操作数存储单元中的空闲的缓存行中依次写入无条件跳转对应的微操作数和在无条件跳转之前的微操作数。
如图6A所示,微操作数存储单元的第一缓存行Cache Line 0已存储第一微操作数Mul和第二微操作数Div。第三微操作数为空。
在在后处理周期中,通过译码单元得到的微操作数分别为微操作数JAL、微操作数Add和微操作数OR。由于微操作数JAL、微操作数Add和微操作数OR中存在无条件跳转指令JAL,此时将微操作数JAL存储至微操作数存储单元的第一缓存行Cache Line 1,微操作数JAL之后的微操作数Add、OR不存储至第一缓存行Cache Line 1。
如图6B所示,微操作数存储单元的第一缓存行Cache Line 0已存储第一微操作数Mul和第二微操作数Div。第三微操作数为空。
在在后处理周期中,通过译码单元得到的微操作数分别为微操作数Add、微操作数JAL和微操作数OR。由于微操作数Add、微操作数JAL和微操作数OR中存在无条件跳转指令JAL,此时将微操作数Add和微操作数JAL存储至微操作数存储单元的第一缓存行CacheLine 1,微操作数JAL之后的微操作数OR不存储至第一缓存行Cache Line 1。
如图6C所示,微操作数存储单元的第一缓存行Cache Line 0已存储第一微操作数Mul和第二微操作数BR。第三微操作数为空。
在在后处理周期中,通过译码单元得到的微操作数分别为微操作数JAL、微操作数Add和微操作数OR。由于微操作数JAL、微操作数Add和微操作数OR中存在无条件跳转指令JAL,此时将微操作数JAL存储至微操作数存储单元的第一缓存行Cache Line 1,微操作数JAL之后的微操作数Add、OR不存储至第一缓存行Cache Line 1。
如图6D所示,微操作数存储单元的第一缓存行Cache Line 0已存储第一微操作数Mul、第二微操作数Div和第三微操作数Add。
在在后处理周期中,通过译码单元得到的微操作数分别为微操作数JAL、微操作数JAL和微操作数JAL。由于微操作数JAL、微操作数JAL和微操作数JAL均为无条件跳转指令,此时将微操作数JAL、微操作数JAL和微操作数JAL依次存储至微操作数存储单元的第一缓存行Cache Line1。
例如,在当前指令在分支预测单元中未命中的情况下,当前指令在微操作数存储单元中未命中任何一个缓存行,以及各微操作数中存在条件跳转指令和系统调用指令,此时在微操作数存储单元中的空闲的缓存行中依次写入条件跳转指令和系统调用指令,系统调用指令之后的微操作数不存储至微操作数存储单元中。
需说明的是,在图5A~5D和图6A~6D的示例中,Cache Line 0表示微操作数存储单元的第一缓存行。Cache Line 1表示微操作数存储单元的第二缓存行。Mul表示乘法操作数。Sub表示减法操作数。OR表示或操作操作数。Div表示除法操作数。JAL表示无条件跳转指令操作数。另外,本公开的实施例适用于包括但不仅限于如图5A~5D和图6A~6D所示的各微操作数,本公开的实施例对各微操作数的类型不作限定。
图7示出了根据本公开一实施例的微操作数队列的结构示意图。
如图7所示,微操作数队列700包括缓存单元710、读指针720和写指针730。
缓存单元710配置为对译码单元和微操作数存储单元输出的指令信息进行存储。例如,指令信息包括索引、微操作数等。
例如,缓存单元710可以包括64个缓存行。每个缓存行用于存储3个微操作数。
在图7的示例中,微操作数队列700是一个大容量的先进先出(FirstInputFirstOutput,FIFO)队列。微操作数队列700可以用于每一个时钟写入3个微操作数,以及每一个时钟读取3个微操作数。
例如,根据读指针720的位置,读取与读指针720的位置相对应的缓存行存储的微操作数。
例如,根据写指针730的位置,将各微操作数写入与写指针730的位置相对应的缓存行中。
例如,在微操作数队列700不为空,且微操作数队列700的在后流水线不发生堵塞的情况下,读指针720所处的位置加“1”,根据读指针720的位置读取对应的微操作数。
例如,在微操作数队列700为空,或微操作数队列700的在后流水线发生堵塞的情况下,读指针720所处的位置不加“1”,此时不读取微操作数。
例如,在译码单元或微操作数存储单元存在有效的微操作数输出,且微操作数队列700存储的信息未满的情况下,写指针730所处的位置加“1”,根据写指针730的位置写入对应的微操作数。
例如,在译码单元或微操作数存储单元不存在有效的微操作数输出,或微操作数队列700已满的情况下,写指针730所处的位置不加“1”,此时不写入微操作数。
需说明的是,本公开实施例中的微操作数队列仅为示例性的说明,并不构成本公开实施例的限定。在其他一些实施例中,微操作数队列的缓存单元可以包括其他数量的缓存行,每个缓存行可以存储其他数量的微操作数,本公开的实施例对此不作限定。
图8示出了根据本公开一实施例的数据处理方法的流程图。如图8所示,根据本公开实施例的数据处理方法可以包括以下步骤。应注意,以下方法中各个步骤的序号仅作为该步骤的表示以便描述,而不应被看作表示该各个步骤的执行顺序。除非明确指出,否则该方法不需要完全按照所示顺序来执行。
如图8所示,该数据处理方法800,应用于数据处理装置,包括步骤S810~步骤S850。可以理解,该方法可以应用于如图2或图3所示的数据处理装置。为了简明,本公开对数据处理装置不再赘述。
在步骤S810,获取多个指令。
可以理解,步骤S810可以由图2所示的取指令单元或图3所示的取指令单元执行。为了简明,本公开对图2所示的取指令单元或图3所示的取指令单元不再赘述。
在步骤S820,对多个指令依次进行译码,得到与多个指令中的各指令相对应的微操作数。
可以理解,步骤S820可以由图2所示的译码单元或图3所示的译码单元执行。为了简明,本公开对图2所示的译码单元或图3所示的译码单元不再赘述。
在步骤S830,存储与多个指令的各指令相对应的指令信息和微操作数,以及与多个指令中的各跳转指令相对应的跳转指令信息。
可以理解,步骤S830可以由图2所示的分支预测单元和微操作数存储单元或图3所示的分支预测单元和微操作数存储单元执行。为了简明,本公开对图2所示的分支预测单元和微操作数存储单元或图3所示的分支预测单元和微操作数存储单元不再赘述。
在步骤S840,根据跳转指令信息,对当前指令进行预测,得到预测结果。
可以理解,步骤S840可以由图2所示的分支预测单元或图3所示的分支预测单元执行。为了简明,本公开对图2所示的分支预测单元或图3所示的分支预测单元不再赘述。
在步骤S850,在预测结果指示当前指令在分支预测单元中命中的情况下,将与当前指令对应的微操作数发送至微操作数队列,以执行当前指令。
可以理解,步骤S850可以由图2所示的微操作数存储单元或图3所示的微操作数存储单元执行。为了简明,本公开对图2所示的微操作数存储单元或图3所示的微操作数存储单元不再赘述。
本公开另一方面,还提供一种处理器,包括数据处理装置。
例如,该数据处理装置可以为如图2或图3所示的数据处理装置。为了简明,本公开对数据处理装置不再赘述。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
尽管已经参照本公开的特定示例性实施例示出并描述了本公开,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本公开的精神和范围的情况下,可以对本公开进行形式和细节上的多种改变。因此,本公开的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。
Claims (12)
1.一种数据处理装置,包括:
取指令单元,配置为获取多个指令;
译码单元,配置为对多个指令依次进行译码,得到与多个指令中的各指令相对应的微操作数;
分支预测单元,配置为存储与所述多个指令中的各跳转指令相对应的跳转指令信息,并根据所述跳转指令信息,对当前指令执行预测操作,得到预测结果;以及
微操作数存储单元,配置为存储与所述多个指令的各指令相对应的指令信息和微操作数,以及在所述预测结果指示所述当前指令在所述分支预测单元中命中的情况下,将与所述当前指令对应的微操作数发送至微操作数队列,以执行所述当前指令。
2.根据权利要求1所述的装置,其中,所述微操作数存储单元包括:
标签存储子单元,配置为存储与所述多个指令中的各指令对应的微操作数有效位、与所述多个指令中的各指令对应的虚拟地址和与所述多个指令中的各指令对应的缓存行的有效位;以及
数据存储子单元,配置为存储与所述多个指令中的各指令对应的微操作数。
3.根据权利要求2所述的装置,其中,所述微操作数存储单元还配置为:
在所述预测结果指示所述当前指令在所述分支预测单元中命中的情况下,
从所述标签存储子单元中读取与所述当前指令相对应的虚拟地址;以及
在与所述当前指令相对应的缓存行的有效位为高电平的情况下,从所述数据存储子单元中读取与所述虚拟地址相对应的微操作数。
4.根据权利要求1所述的装置,其中,所述分支预测单元包括:
分支目标缓冲器,配置为存储所述多个指令中各跳转指令的执行地址以及与所述跳转指令对应的跳转地址。
5.根据权利要求4所述的装置,其中,所述分支预测单元还配置为:
确定所述当前指令是否为跳转指令;以及
在所述当前指令为跳转指令的情况下,根据所述当前指令的执行地址和标签,确定所述分支目标缓冲器中是否存在与所述当前指令的标签相对应的目标标签,得到所述预测结果。
6.根据权利要求5所述的装置,其中,所述预测结果包括所述当前指令在所述分支预测单元中命中或所述当前指令在所述分支预测单元中未命中;其中,
所述当前指令在所述分支预测单元中命中,指示所述分支目标缓冲器中存在与所述当前指令的标签相对应的目标标签;以及
所述当前指令在所述分支预测单元中未命中,指示所述分支目标缓冲器中不存在与所述当前指令的标签相对应的目标标签。
7.根据权利要求5所述的装置,其中,所述跳转指令包括条件跳转指令、无条件跳转指令和系统调用指令。
8.根据权利要求7所述的装置,其中,所述分支预测单元还配置为:
在所述当前指令为条件跳转指令的情况下,
根据模式信息历史表,得到与所述当前指令相对应的跳转方向,其中,所述模式信息历史表配置为存储各跳转指令的历史指令信息;以及
根据所述跳转方向和所述模式信息历史表,得到所述当前指令的后序指令的执行地址。
9.根据权利要求7所述的装置,其中,所述分支预测单元还配置为:
在所述当前指令为无条件跳转指令的情况下,
根据所述分支目标缓冲器,得到与所述当前指令相对应的跳转地址。
10.根据权利要求7所述的装置,其中,所述分支预测单元还配置为:
在所述当前指令为系统调用指令的情况下,
根据返回地址栈,得到所述当前指令的后序指令的执行地址。
11.一种数据处理方法,该方法可应用于如权利要求1所述的装置,该方法包括:
获取多个指令;
对所述多个指令依次进行译码,得到与所述多个指令中的各指令相对应的微操作数;
存储与所述多个指令的各指令相对应的指令信息和微操作数,以及与所述多个指令中的各跳转指令相对应的跳转指令信息;
根据所述跳转指令信息,对当前指令进行预测,得到预测结果;以及
在所述预测结果指示所述当前指令在所述分支预测单元中命中的情况下,将与所述当前指令对应的微操作数发送至微操作数队列,以执行所述当前指令。
12.一种处理器,包括:
如权利要求1~10中任一项所述的装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310339483.7A CN116339832A (zh) | 2023-03-31 | 2023-03-31 | 数据处理装置、方法及处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310339483.7A CN116339832A (zh) | 2023-03-31 | 2023-03-31 | 数据处理装置、方法及处理器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116339832A true CN116339832A (zh) | 2023-06-27 |
Family
ID=86880384
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310339483.7A Pending CN116339832A (zh) | 2023-03-31 | 2023-03-31 | 数据处理装置、方法及处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116339832A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117389629A (zh) * | 2023-11-02 | 2024-01-12 | 北京市合芯数字科技有限公司 | 分支预测方法、装置、电子设备及介质 |
-
2023
- 2023-03-31 CN CN202310339483.7A patent/CN116339832A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117389629A (zh) * | 2023-11-02 | 2024-01-12 | 北京市合芯数字科技有限公司 | 分支预测方法、装置、电子设备及介质 |
CN117389629B (zh) * | 2023-11-02 | 2024-06-04 | 北京市合芯数字科技有限公司 | 分支预测方法、装置、电子设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1442364B1 (en) | System and method to reduce execution of instructions involving unreliable data in a speculative processor | |
CN101916180B (zh) | Risc处理器中执行寄存器类型指令的方法和其系统 | |
US6029240A (en) | Method for processing instructions for parallel execution including storing instruction sequences along with compounding information in cache | |
US7473293B2 (en) | Processor for executing instructions containing either single operation or packed plurality of operations dependent upon instruction status indicator | |
CN104657110B (zh) | 具有固定数量的可变长度指令的指令高速缓存器 | |
EP1886217B1 (en) | Caching instructions for a multiple-state processor | |
EP1849061A2 (en) | Unaligned memory access prediction | |
US20120204008A1 (en) | Processor with a Hybrid Instruction Queue with Instruction Elaboration Between Sections | |
JP2010524088A (ja) | 適切なプレデコーディングにより可変長命令セットから命令をプレロードするシステム、方法およびソフトウェア | |
US12153925B2 (en) | Alternate path decode for hard-to-predict branch | |
JP2014182817A (ja) | 条件付きショート前方分岐の計算的に等価な述語付き命令への変換 | |
JP5335440B2 (ja) | オペランドの早期の条件付き選択 | |
US20210089305A1 (en) | Instruction executing method and apparatus | |
CN116339832A (zh) | 数据处理装置、方法及处理器 | |
CN112540792A (zh) | 指令处理方法及装置 | |
US20240118898A1 (en) | Selective use of branch prediction hints | |
US12112173B2 (en) | Context-based loop branch prediction | |
US7346737B2 (en) | Cache system having branch target address cache | |
US20220197661A1 (en) | Context-based memory indirect branch target prediction | |
CN113568663A (zh) | 代码预取指令 | |
CN111813447A (zh) | 一种数据拼接指令的处理方法和处理装置 | |
US20230091167A1 (en) | Core-based speculative page fault list | |
CN119396472A (zh) | 分支预测方法、分支预测器及电子设备 | |
CA2040637C (en) | Compounding preprocessor for cache | |
CN118057308A (zh) | 指令处理优化方法及相关装置 |
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 |