CN111857830A - 一种提前转发指令数据的通路设计方法、系统及存储介质 - Google Patents

一种提前转发指令数据的通路设计方法、系统及存储介质 Download PDF

Info

Publication number
CN111857830A
CN111857830A CN202010504662.8A CN202010504662A CN111857830A CN 111857830 A CN111857830 A CN 111857830A CN 202010504662 A CN202010504662 A CN 202010504662A CN 111857830 A CN111857830 A CN 111857830A
Authority
CN
China
Prior art keywords
instruction
data
forwarding
advance
buffer
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.)
Granted
Application number
CN202010504662.8A
Other languages
English (en)
Other versions
CN111857830B (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.)
Shanghai Saifang Technology Co ltd
Original Assignee
Shanghai Saifang 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 Shanghai Saifang Technology Co ltd filed Critical Shanghai Saifang Technology Co ltd
Priority to CN202010504662.8A priority Critical patent/CN111857830B/zh
Publication of CN111857830A publication Critical patent/CN111857830A/zh
Application granted granted Critical
Publication of CN111857830B publication Critical patent/CN111857830B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

本发明涉及微电子技术领域,具体涉及一种提前转发指令数据的通路设计方法、系统及存储介质;本发明首先确定与数据相关的这类指令的数据;并在指令间提前转发条件检测及提前转发指令间的数据;最后提前转发若干周期前指令的数据,加速指令从保留站中发射到执行单元,同时加速后续流水线中的指令;本发明的方法能够提前快速的得到指令的依赖数据,使依赖指令提前满足发射的条件。加速指令从保留站中发射到执行单元,同时也加速了后续流水线中的指令。

Description

一种提前转发指令数据的通路设计方法、系统及存储介质
技术领域
本发明涉及微电子技术领域,具体涉及一种提前转发指令数据的通路设计方法、系统及存储介质。
背景技术
微处理器的发展在短短的几十年里,取得了巨大的进步。从硬件架构,工艺和软硬件结合多个方面不断提高处理器的性能。硬件架构经历了从单发射标量到多发射超标量;从最初的3级流水线到几十级流水线;从顺序执行指令到乱序执行指令;从无cache到3级cache存储结构;从物理单核到物理多核(CMP,ChipMulti-Processors)及逻辑单核到逻辑多核(SMT,SimultaneousMulti-Threading);甚至用于超级运算的集群系统,处理器的指令级并行和线程级并行执行得到了极致的发展。单核微处理器的指令级并行带宽要求越来越高,芯片实现逻辑复杂度程倍数增加。
目前,服务器的流水线处理带宽最多达到8条指令每个时钟周期。在终端领域,指令处理带宽也有6条指令每个时钟周期。CPU通过设计高带宽的处理能力,希望得到更好的性能。每个时钟周期的指令之间可能存在相关,或者与之前某个时钟周期的指令存在相关。由于在指令集中存在一类与数据相关的指令,这类指令在decoder或者之前的某个阶段可以得到数据。
传统的设计方法,指令需要从寄存器堆读数据,或者指令比较在执行单元执行完成的指令结果。传统方法执行这类指令不能提升流水线的执行效率。
在图1中是一个N个物理核共享L3和内存的多核CPU,每个物理核可以是单线程或者是多线程架构。每个core适用于所有的指令集,架构及工艺。
在图2中是一个单物理核,物理核可以是单线程或者是多线程架构。该核的模块划分在表1中给出功能描述。
传统的设计方法,指令需要从寄存器堆读数据,或者指令比较在执行单元执行完成的指令结果。传统方法执行这类指令不能提升流水线的执行效率。
发明内容
针对现有技术的不足,本发明公开了一种提前转发指令数据的通路设计方法、系统及存储介质,用于解决目前,多条发射指令读数据都是通过读物理寄存器或者取从执行单元执行完成指令返回结果;不能对在进入保留站之前已经确定指令的数据转发,从而不能更早唤醒依赖的指令的问题。
本发明通过以下技术方案予以实现:
第一方面,本发明公开一种提前转发指令数据的通路设计方法,所述方法首先确定与数据相关的这类指令的数据;并在指令间提前转发条件检测及提前转发指令间的数据;最后提前转发若干周期前指令的数据,加速指令从保留站中发射到执行单元,同时加速后续流水线中的指令。
更进一步的,对这类指令的数据选择RISC-V指令集的部分整数指令类型并通过写CACHE之前、取指阶段、predecoder或者指令队列等阶段判断某条指令是否可以得到数据的过程。
更进一步的,所述RISC-V指令集中除了立即数外,x0是一个特殊的寄存器,该寄存器一直固定为0,对该寄存器写操作无效,因此,当指令中的出现x0的时候,判断该寄存器的值是0,相当于立即数为0的一种特殊形式。
更进一步的,这类指令先在指令之间进行数据转发,为了更大范围的支持提前转发数据,指令进行重命名,每条指令的目的寄存器分配一个物理寄存器,指令在dispatch阶段进入保留站的同时,同时进入一个缓存fw_buffer[N-1:0],该fw_buffer保存最近N个周期满足提前转发数据指令的立即数和物理寄存器等控制信号。
更进一步的,所述fw_buffer的深度为N,宽度M,N表示当前周期的前N个周期指令状态,如果这个前N个周期中存在满足提前转发数据的指令时,通过比较物理寄存器号,转发数据到依赖指令,这N个周期的指令可能还在保留站中没有发射到执行单元,也可能在执行单元执行,或者在执行单元的转发数据通道。
更进一步的,经过重命名之后的指令,通过源寄存器的物理寄存器比较fw_buffer中指令的目的寄存器的物理寄存器,如果命中,则提前得到该源寄存器的数据。
更进一步的,所述设计方法使用指令的优化方法,包括如何得到立即数指令的方法,其根据不同指令集的特点进行类似的优化,适用于任何指令集。
更进一步的,所述指令的优化方法包括立即数在指令之间的转发思想及原理、数据转发提前到读物理寄存器之前,及指令在执行单元执行之前转发数据的方法、通过一个缓存,转发N个周期之前,依赖指令数据的方法和转发数据的判断逻辑及判断方法。
第二方面,本发明公开一种提前转发指令数据的通路设计系统,包括处理器以及存储有执行指令的存储器,当所述处理器执行所述存储器存储的所述执行指令时,所述处理器硬件执行第一方面所述的提前转发指令数据的通路设计方法。
第三方面,本发明公开一种可读介质,包括执行指令,当提前转发指令数据的通路设计系统的处理器执行所述执行指令时,所述提前转发指令数据的通路设计系统执行第一方面所述的提前转发指令数据的通路设计方法。
本发明的有益效果为:
本发明的方法能够提前快速的得到指令的依赖数据,使依赖指令提前满足发射的条件。加速指令从保留站中发射到执行单元,同时也加速了后续流水线中的指令。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是背景技术中N个物理核共享L3和内存的多核CPU图;
图2是背景技术单物理核图;
图3是立即数转发条件检测图;
图4是提前转发若干周期前指令的数据图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
本实施例公开一种提前转发指令数据的通路设计方法,所述方法首先确定与数据相关的这类指令的数据;并在指令间提前转发条件检测及提前转发指令间的数据;最后提前转发若干周期前指令的数据,加速指令从保留站中发射到执行单元,同时加速后续流水线中的指令。
更进一步的,对这类指令的数据选择RISC-V指令集的部分整数指令类型并通过写CACHE之前、取指阶段、predecoder或者指令队列等阶段判断某条指令是否可以得到数据的过程。
更进一步的,所述RISC-V指令集中除了立即数外,x0是一个特殊的寄存器,该寄存器一直固定为0,对该寄存器写操作无效,因此,当指令中的出现x0的时候,判断该寄存器的值是0,相当于立即数为0的一种特殊形式。
更进一步的,这类指令先在指令之间进行数据转发,为了更大范围的支持提前转发数据,指令进行重命名,每条指令的目的寄存器分配一个物理寄存器,指令在dispatch阶段进入保留站的同时,同时进入一个缓存fw_buffer[N-1:0],该fw_buffer保存最近N个周期满足提前转发数据指令的立即数和物理寄存器等控制信号。
更进一步的,所述fw_buffer的深度为N,宽度M,N表示当前周期的前N个周期指令状态,如果这个前N个周期中存在满足提前转发数据的指令时,通过比较物理寄存器号,转发数据到依赖指令,这N个周期的指令可能还在保留站中没有发射到执行单元,也可能在执行单元执行,或者在执行单元的转发数据通道。
更进一步的,经过重命名之后的指令,通过源寄存器的物理寄存器比较fw_buffer中指令的目的寄存器的物理寄存器,如果命中,则提前得到该源寄存器的数据。
更进一步的,所述设计方法使用指令的优化方法,包括如何得到立即数指令的方法,其根据不同指令集的特点进行类似的优化,适用于任何指令集。
更进一步的,所述指令的优化方法包括立即数在指令之间的转发思想及原理、数据转发提前到读物理寄存器之前,及指令在执行单元执行之前转发数据的方法、通过一个缓存,转发N个周期之前,依赖指令数据的方法和转发数据的判断逻辑及判断方法。
实施例2
为了便于阐述原理,本实施例主要以RISC-V指令集的部分整数指令类型为实例进行说明。需要判断某条指令是否可以得到数据的过程,可以在写CACHE之前、取指阶段、predecoder或者指令队列等阶段。RISC-V指令集中除了立即数外,x0是一个特殊的寄存器,该寄存器一直固定为0,对该寄存器写操作无效。因此,当指令中的出现x0的时候,可以判断该寄存器的值是0,相当于立即数为0的一种特殊形式。
部分指令的优化如下表所示:
rs1为第一个源寄存器。rs2为第二个源寄存器。rd为目的寄存器。imm为指令的立即数,该立即数可能是指令中的立即数,也可能是由于指令优化得到的值。pc为指令地址。
表格1指令优化描述
Figure BDA0002526099800000061
Figure BDA0002526099800000071
其他乘法、除法等指令可以得到类似的优化,不再赘述。这些指令经过优化后,得到满足向目的寄存器写立即数的一类指令的条件和立即数。本发明针对这类指令的数据提前转发到依赖指令,使依赖指令提前发射,而不需要等待执行单元返回结果。
实施例3
本实施例阐述指令间提前转发条件检测及提前转发指令间的数据,为了便于描述,以8条指令带宽为例进行说明,分别表示为inst0、inst1、inst2、inst3、inst4、inst5、inst6和inst7。假设8条指令存在目的寄存器标志分别为:rd_val_0、rd_val_1、rd_val_2、rd_val_3、rd_val_4、rd_val_5、rd_val_6和rd_val_7。每条指令在第一阶段可以得到每条指令是否属于这类指令的标志及对应的立即数。假设8条指令的标志分别为:fw_0、fw_1、fw_2、fw_3、fw_4、fw_5、fw_6和fw_7。假设8条指令的立即数分别为:fw_imm0、fw_imm1、fw_imm2、fw_imm3、fw_imm4、fw_imm5、fw_imm6和fw_imm7。当fw_0为1时,表示指令1属于这类指令,立即数fw_imm0可以提前转到依赖指令。其它指令依此类推。每个时钟周期的8条指令之间进行检测,如图3所示。
不妨,以第8条指令为例进行说明。指令8可以从指令1、指令2、指令3、指令4、指令5、指令6或者指令7提前得到操作数。
1,指令8的第1个源寄存器rs1取指令7立即数的条件为fw_76_rs1_val:指令8的rs1等于指令7的rd,并且指令7为写立即数指令。
fw_76_rs1_val=((inst7.rs1==inst6.rd)&rd_val_6)&fw_6
指令8的第2个源寄存器rs2也可得到类似的条件fw_76_rs2_val。
2,指令8的第1个源寄存器rs1取指令6立即数的条件为fw_75_rs1_val:指令8的rs1等于指令6的rd,并且指令6为写立即数指令。
fw_75_rs1_val=(~((inst7.rs1==inst6.rd)&rd_val_6))&
((inst7.rs1==inst5.rd)&rd_val_5)&fw_5
指令8的第2个源寄存器rs2也可得到类似的条件fw_75_rs2_val。
3,指令8的第1个源寄存器rs1取指令5立即数的条件为fw_74_rs1_val:指令8的rs1等于指令5的rd,并且指令5为写立即数指令。
fw_74_rs1_val=(~((inst7.rs1==inst6.rd)&rd_val_6))&
(~((inst7.rs1==inst5.rd)&rd_val_5))&
((inst7.rs1==inst4.rd)&rd_val_4)&fw_4
指令8的第2个源寄存器rs2也可得到类似的条件fw_74_rs2_val。
4,指令8的第1个源寄存器rs1取指令4立即数的条件为fw_73_rs1_val:指令8的rs1等于指令4的rd,并且指令4为写立即数指令。
fw_73_rs1_val=(~((inst7.rs1==inst6.rd)&rd_val_6))&
(~((inst7.rs1==inst5.rd)&rd_val_5))&
(~((inst7.rs1==inst4.rd)&rd_val_4))&
((inst7.rs1==inst3.rd)&rd_val_3)&fw_3
指令8的第2个源寄存器rs2也可得到类似的条件fw_73_rs2_val。
5,指令8的第1个源寄存器rs1取指令3立即数的条件为fw_72_rs1_val:指令8的rs1等于指令3的rd,并且指令3为写立即数指令。
fw_72_rs1_val=(~((inst7.rs1==inst6.rd)&rd_val_6))&
(~((inst7.rs1==inst5.rd)&rd_val_5))&
(~((inst7.rs1==inst4.rd)&rd_val_4))&
(~((inst7.rs1==inst3.rd)&rd_val_3))&
((inst7.rs1==inst2.rd)&rd_val_2)&fw_2
指令8的第2个源寄存器rs2也可得到类似的条件fw_72_rs2_val。
6,指令8的第1个源寄存器rs1取指令2立即数的条件为fw_71_rs1_val:指令8的rs1等于指令2的rd,并且指令2为写立即数指令。
fw_71_rs1_val=(~((inst7.rs1==inst6.rd)&rd_val_6))&
(~((inst7.rs1==inst5.rd)&rd_val_5))&
(~((inst7.rs1==inst4.rd)&rd_val_4))&
(~((inst7.rs1==inst3.rd)&rd_val_3))&
(~((inst7.rs1==inst2.rd)&rd_val_2))&
((inst7.rs1==inst1.rd)&rd_val_1)&fw_1
指令8的第2个源寄存器rs2也可得到类似的条件fw_71_rs2_val。
7,指令8的第1个源寄存器rs1取指令1立即数的条件为fw_70_rs1_val:指令8的rs1等于指令1的rd,并且指令1为写立即数指令。
fw_70_rs1_val=(~((inst7.rs1==inst6.rd)&rd_val_6))&
(~((inst7.rs1==inst5.rd)&rd_val_5))&
(~((inst7.rs1==inst4.rd)&rd_val_4))&
(~((inst7.rs1==inst3.rd)&rd_val_3))&
(~((inst7.rs1==inst2.rd)&rd_val_2))&
(~((inst7.rs1==inst1.rd)&rd_val_1))&
((inst7.rs1==inst0.rd)&rd_val_0)&fw_0
指令8的第2个源寄存器rs2也可得到类似的条件fw_70_rs2_val。
因此,可以得到指令8的第1个源寄存器rs1的值fw_8_rs1。设立即数的宽度为WIDTH。
fw_8_rs1=({WIDTH{fw_70_rs1_val}}&fw_imm0)|
({WIDTH{fw_71_rs1_val}}&fw_imm1)|
({WIDTH{fw_72_rs1_val}}&fw_imm2)|
({WIDTH{fw_73_rs1_val}}&fw_imm3)|
({WIDTH{fw_74_rs1_val}}&fw_imm4)|
({WIDTH{fw_75_rs1_val}}&fw_imm5)|
({WIDTH{fw_76_rs1_val}}&fw_imm6)
指令8的源寄存器rs1可以通过提前得到数据的有效信号fw_8_rs1_val为:
fw_8_rs1_val=fw_70_rs1_val|
fw_71_rs1_val|
fw_72_rs1_val|
fw_73_rs1_val|
fw_74_rs1_val|
fw_75_rs1_val|
fw_76_rs1_val
同理,可以得到指令8的第2个源寄存器rs2的值fw_8_rs2和数据的有效信号fw_8_rs2_val。
其他指令可以得到类似的条件及数据,不再赘述。
举例:
下面3条指令中,指令1的目的寄存器x5写立即数imm1,满足转发到指令2的源寄存器rs1的条件。
表格23条指令间满足数据转发条件
指令 rs1 rs2 imm rd
1 addi x0 - imm1 x5
2 addi x5 - imm2 x7
3 addi x7 - imm3 x8
表格33条指令间数据转发
指令 rs1 rs2 imm rd
1 addi x0 - imm1 x5
2 addi x5=imm1 - imm2 x7
3 addi x7 - imm3 x8
rs1通过提前转发通路,得到源寄存器rs1的值imm1。而不需要等指令1在执行单元执行完成后才取到数据imm1。
实施例4
本实施例阐述提前转发若干周期前指令的数据,这类指令先在指令之间进行数据转发,为了更大范围的支持提前转发数据,即支持提前转发不同周期指令间的数据。指令在进行重命名后,每条指令的目的寄存器分配一个物理寄存器。指令在dispatch阶段进入保留站的同时,同时进入一个缓存fw_buffer[N-1:0]。该fw_buffer保存最近N个周期满足提前转发数据指令的立即数和物理寄存器等控制信号,如图4所示。
fw_buffer的深度为N,宽度M。N表示当前周期的前N个周期指令状态。如果这个前N个周期中存在满足提前转发数据的指令时,通过比较物理寄存器号,转发数据到依赖指令。这N个周期的指令可能还在保留站中没有发射到执行单元,也可能在执行单元执行,或者在执行单元的转发数据通道。经过重命名之后的指令,通过源寄存器的物理寄存器比较fw_buffer中指令的目的寄存器的物理寄存器,如果命中,则提前得到该源寄存器的数据。M为8条指令的所有数据宽度。
表格4 fw_buffer
Figure BDA0002526099800000111
Figure BDA0002526099800000121
fw_buffer中N个周期前的指令状态如上表所示。
如果在分派阶段有如下3条指令:
表格5发射3条指令
Figure BDA0002526099800000122
mul的rs1的物理寄存器和前1个周期的addi指令的目的寄存器的物理寄存器相同,并且该addi指令满足数据转发条件,因此mul的rs1提前得到数据imm3。同理,div的rs2的物理寄存器和前3个周期的xori指令的目的寄存器的物理寄存器相同,并且该xori指令满足数据转发条件,因此div的rs2提前得到数据imm6。
表格6 3条指令与前N个周期前的指令数据转发
Figure BDA0002526099800000131
3条指令从fw_buffer中得到数据后,再分派到保留站。
在fw_buffer中比较物理寄存器,第1条指令mul的rs1转发数据的逻辑如下所示
fw_1_rs1=({WIDTH{((mul.rs1_phy==fw_buffer[0].[1].fw_phy_reg)&fw_buffer[0].[1].fw_val)}}&fw_buffer[0].[1].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[0].[2].fw_phy_reg)&fw_buffer[0].[2].fw_val)}}&fw_buffer[0].[2].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[0].[3].fw_phy_reg)&fw_buffer[0].[3].fw_val)}}&fw_buffer[0].[3].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[0].[4].fw_phy_reg)&fw_buffer[0].[4].fw_val)}}&fw_buffer[0].[4].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[0].[5].fw_phy_reg)&fw_buffer[0].[5].fw_val)}}&fw_buffer[0].[5].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[0].[6].fw_phy_reg)&fw_buffer[0].[6].fw_val)}}&fw_buffer[0].[6].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[0].[7].fw_phy_reg)&fw_buffer[0].[7].fw_val)}}&fw_buffer[0].[7].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[0].[8].fw_phy_reg)&fw_buffer[0].[8].fw_val)}}&fw_buffer[0].[8].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[1].[1].fw_phy_reg)&fw_buffer[1].[1].fw_val)}}&fw_buffer[1].[1].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[1].[2].fw_phy_reg)&fw_buffer[1].[2].fw_val)}}&fw_buffer[1].[2].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[1].[3].fw_phy_reg)&fw_buffer[1].[3].fw_val)}}&fw_buffer[1].[3].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[1].[4].fw_phy_reg)&fw_buffer[1].[4].fw_val)}}&fw_buffer[1].[4].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[1].[5].fw_phy_reg)&fw_buffer[1].[5].fw_val)}}&fw_buffer[1].[5].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[1].[6].fw_phy_reg)&fw_buffer[1].[6].fw_val)}}&fw_buffer[1].[6].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[1].[7].fw_phy_reg)&fw_buffer[1].[7].fw_val)}}&fw_buffer[1].[7].fw_imm)|
({WIDTH{((mul.rs1_phy==fw_buffer[1].[8].fw_phy_reg)&fw_buffer[1].[8].fw_val)}}&fw_buffer[1].[8].fw_imm)|
……
同理,mul的rs2也可以得到类似的表达式。
其他指令也可以得到类似的逻辑表达式,不再赘述。
在fw_buffer中比较物理寄存器,第1条指令mul的rs1转发数据有效的逻辑如下所示:
fw_1_rs1_val=((mul.rs1_phy==fw_buffer[0].[1].fw_phy_reg)&fw_buffer[0].[1].fw_val)|
((mul.rs1_phy==fw_buffer[0].[2].fw_phy_reg)&fw_buffer[0].[2].fw_val)|
((mul.rs1_phy==fw_buffer[0].[3].fw_phy_reg)&fw_buffer[0].[3].fw_val)|
((mul.rs1_phy==fw_buffer[0].[4].fw_phy_reg)&fw_buffer[0].[4].fw_val)|
((mul.rs1_phy==fw_buffer[0].[5].fw_phy_reg)&fw_buffer[0].[5].fw_val)|
((mul.rs1_phy==fw_buffer[0].[6].fw_phy_reg)&fw_buffer[0].[6].fw_val)|
((mul.rs1_phy==fw_buffer[0].[7].fw_phy_reg)&fw_buffer[0].[7].fw_val)|
((mul.rs1_phy==fw_buffer[0].[8].fw_phy_reg)&fw_buffer[0].[8].fw_val)|
((mul.rs1_phy==fw_buffer[1].[1].fw_phy_reg)&fw_buffer[1].[1].fw_val)|
((mul.rs1_phy==fw_buffer[1].[2].fw_phy_reg)&fw_buffer[1].[2].fw_val)|
((mul.rs1_phy==fw_buffer[1].[3].fw_phy_reg)&fw_buffer[1].[3].fw_val)|
((mul.rs1_phy==fw_buffer[1].[4].fw_phy_reg)&fw_buffer[1].[4].fw_val)|
((mul.rs1_phy==fw_buffer[1].[5].fw_phy_reg)&fw_buffer[1].[5].fw_val)|
((mul.rs1_phy==fw_buffer[1].[6].fw_phy_reg)&fw_buffer[1].[6].fw_val)|
((mul.rs1_phy==fw_buffer[1].[7].fw_phy_reg)&fw_buffer[1].[7].fw_val)|
((mul.rs1_phy==fw_buffer[1].[8].fw_phy_reg)&fw_buffer[1].[8].fw_val)|
……
同理,mul的rs2也可以得到类似的表达式。其他指令也可以得到类似的逻辑表达式,不再赘述。
实施例5
本实施例公开一种提前转发指令数据的通路设计系统,包括处理器以及存储有执行指令的存储器,当所述处理器执行所述存储器存储的所述执行指令时,所述处理器硬件执行提前转发指令数据的通路设计方法。
实施例6
本实施例公开一种可读介质,包括执行指令,当提前转发指令数据的通路设计系统的处理器执行所述执行指令时,所述提前转发指令数据的通路设计系统执行提前转发指令数据的通路设计方法。
综上所述本发明的方法能够提前快速的得到指令的依赖数据,使依赖指令提前满足发射的条件。加速指令从保留站中发射到执行单元,同时也加速了后续流水线中的指令。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种提前转发指令数据的通路设计方法,其特征在于,所述方法首先确定与数据相关的这类指令的数据;并在指令间提前转发条件检测及提前转发指令间的数据;最后提前转发若干周期前指令的数据,加速指令从保留站中发射到执行单元,同时加速后续流水线中的指令。
2.根据权利要求1所述的提前转发指令数据的通路设计方法,其特征在于,对这类指令的数据选择RISC-V指令集的部分整数指令类型并通过写CACHE之前、取指阶段、predecoder或者指令队列等阶段判断某条指令是否可以得到数据的过程。
3.根据权利要求2所述的提前转发指令数据的通路设计方法,其特征在于,所述RISC-V指令集中除了立即数外,x0是一个特殊的寄存器,该寄存器一直固定为0,对该寄存器写操作无效,因此,当指令中的出现x0的时候,判断该寄存器的值是0,相当于立即数为0的一种特殊形式。
4.根据权利要求1所述的提前转发指令数据的通路设计方法,其特征在于,这类指令先在指令之间进行数据转发,为了更大范围的支持提前转发数据,指令进行重命名,每条指令的目的寄存器分配一个物理寄存器,指令在dispatch阶段进入保留站的同时,同时进入一个缓存fw_buffer[N-1:0],该fw_buffer保存最近N个周期满足提前转发数据指令的立即数和物理寄存器等控制信号。
5.根据权利要求4所述的提前转发指令数据的通路设计方法,其特征在于,所述fw_buffer的深度为N,宽度M,N表示当前周期的前N个周期指令状态,如果这个前N个周期中存在满足提前转发数据的指令时,通过比较物理寄存器号,转发数据到依赖指令,这N个周期的指令可能还在保留站中没有发射到执行单元,也可能在执行单元执行,或者在执行单元的转发数据通道。
6.根据权利要求5所述的提前转发指令数据的通路设计方法,其特征在于,经过重命名之后的指令,通过源寄存器的物理寄存器比较fw_buffer中指令的目的寄存器的物理寄存器,如果命中,则提前得到该源寄存器的数据。
7.根据权利要求1所述的提前转发指令数据的通路设计方法,其特征在于,所述设计方法使用指令的优化方法,包括如何得到立即数指令的方法,其根据不同指令集的特点进行类似的优化,适用于任何指令集。
8.根据权利要求7所述的提前转发指令数据的通路设计方法,其特征在于,所述指令的优化方法包括立即数在指令之间的转发思想及原理、数据转发提前到读物理寄存器之前,及指令在执行单元执行之前转发数据的方法、通过一个缓存,转发N个周期之前,依赖指令数据的方法和转发数据的判断逻辑及判断方法。
9.一种提前转发指令数据的通路设计系统,包括处理器以及存储有执行指令的存储器,当所述处理器执行所述存储器存储的所述执行指令时,所述处理器硬件执行如权利要求1至8中任一所述的提前转发指令数据的通路设计方法。
10.一种可读介质,包括执行指令,当提前转发指令数据的通路设计系统的处理器执行所述执行指令时,所述提前转发指令数据的通路设计系统执行如权利要求1至8中任一所述的提前转发指令数据的通路设计方法。
CN202010504662.8A 2020-06-05 2020-06-05 一种提前转发指令数据的通路设计方法、系统及存储介质 Active CN111857830B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010504662.8A CN111857830B (zh) 2020-06-05 2020-06-05 一种提前转发指令数据的通路设计方法、系统及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010504662.8A CN111857830B (zh) 2020-06-05 2020-06-05 一种提前转发指令数据的通路设计方法、系统及存储介质

Publications (2)

Publication Number Publication Date
CN111857830A true CN111857830A (zh) 2020-10-30
CN111857830B CN111857830B (zh) 2023-09-22

Family

ID=72985907

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010504662.8A Active CN111857830B (zh) 2020-06-05 2020-06-05 一种提前转发指令数据的通路设计方法、系统及存储介质

Country Status (1)

Country Link
CN (1) CN111857830B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117008977A (zh) * 2023-08-08 2023-11-07 上海合芯数字科技有限公司 一种可变执行周期的指令执行方法、系统和计算机设备

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4365312A (en) * 1978-08-30 1982-12-21 Mitsubishi Denki Kabushiki Kaisha Sequence controller
US5742783A (en) * 1990-12-21 1998-04-21 Inmos Limited System for grouping instructions for multiple issue using plural decoders having forward and backward propagation of decoding information
US6505293B1 (en) * 1999-07-07 2003-01-07 Intel Corporation Register renaming to optimize identical register values
CN101447911A (zh) * 2007-11-27 2009-06-03 上海高性能集成电路设计中心 一种通过分布控制扩展访存队列容量的装置
CN101566942A (zh) * 2009-06-03 2009-10-28 上海高性能集成电路设计中心 一种超标量微处理器中控制乱序发射的飞行记分牌装置
CN101582025A (zh) * 2009-06-25 2009-11-18 浙江大学 片上多处理器体系架构下全局寄存器重命名表的实现方法
CN101593096A (zh) * 2009-05-22 2009-12-02 西安交通大学 一种共享寄存器相关性消除的实现方法
CN101894013A (zh) * 2010-07-16 2010-11-24 中国科学院计算技术研究所 处理器内指令级流水线控制方法及其系统
US20140122843A1 (en) * 2011-04-07 2014-05-01 G. Glenn Henry Conditional store instructions in an out-of-order execution microprocessor
US20140181482A1 (en) * 2012-12-20 2014-06-26 Advanced Micro Devices, Inc. Store-to-load forwarding
CN106990941A (zh) * 2015-12-24 2017-07-28 Arm 有限公司 使用寄存器重命名处理移动指令

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4365312A (en) * 1978-08-30 1982-12-21 Mitsubishi Denki Kabushiki Kaisha Sequence controller
US5742783A (en) * 1990-12-21 1998-04-21 Inmos Limited System for grouping instructions for multiple issue using plural decoders having forward and backward propagation of decoding information
US6505293B1 (en) * 1999-07-07 2003-01-07 Intel Corporation Register renaming to optimize identical register values
CN101447911A (zh) * 2007-11-27 2009-06-03 上海高性能集成电路设计中心 一种通过分布控制扩展访存队列容量的装置
CN101593096A (zh) * 2009-05-22 2009-12-02 西安交通大学 一种共享寄存器相关性消除的实现方法
CN101566942A (zh) * 2009-06-03 2009-10-28 上海高性能集成电路设计中心 一种超标量微处理器中控制乱序发射的飞行记分牌装置
CN101582025A (zh) * 2009-06-25 2009-11-18 浙江大学 片上多处理器体系架构下全局寄存器重命名表的实现方法
CN101894013A (zh) * 2010-07-16 2010-11-24 中国科学院计算技术研究所 处理器内指令级流水线控制方法及其系统
US20140122843A1 (en) * 2011-04-07 2014-05-01 G. Glenn Henry Conditional store instructions in an out-of-order execution microprocessor
US20140181482A1 (en) * 2012-12-20 2014-06-26 Advanced Micro Devices, Inc. Store-to-load forwarding
CN106990941A (zh) * 2015-12-24 2017-07-28 Arm 有限公司 使用寄存器重命名处理移动指令

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
张昆等: "以访存为中心的阵列众核处理器核心流水线设计", vol. 39, no. 12, pages 2167 - 2175 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117008977A (zh) * 2023-08-08 2023-11-07 上海合芯数字科技有限公司 一种可变执行周期的指令执行方法、系统和计算机设备
CN117008977B (zh) * 2023-08-08 2024-03-19 上海合芯数字科技有限公司 一种可变执行周期的指令执行方法、系统和计算机设备

Also Published As

Publication number Publication date
CN111857830B (zh) 2023-09-22

Similar Documents

Publication Publication Date Title
US20170083319A1 (en) Generation and use of block branch metadata
US20160378491A1 (en) Determination of target location for transfer of processor control
KR20180021812A (ko) 연속하는 블록을 병렬 실행하는 블록 기반의 아키텍쳐
US10175988B2 (en) Explicit instruction scheduler state information for a processor
CN108027733B (zh) 在目标字段中存储无效
TWI719501B (zh) 中央處理單元(cpu)、中央處理單元(cpu)控制器與在中央處理單元(cpu)中執行指令的方法
EP3265909A1 (en) Register renaming in multi-core block-based instruction set architecture
CN112214241B (zh) 一种分布式指令执行单元的方法及系统
US11829187B2 (en) Microprocessor with time counter for statically dispatching instructions
US11726912B2 (en) Coupling wide memory interface to wide write back paths
US7047397B2 (en) Method and apparatus to execute an instruction with a semi-fast operation in a staggered ALU
CN111857830B (zh) 一种提前转发指令数据的通路设计方法、系统及存储介质
CN116737241B (zh) 一种指令融合方法、处理器核、处理器和计算机系统
CN111078289B (zh) 用于执行多线程系统的子线程的方法和多线程系统
CN115668142A (zh) 一种处理器、处理方法及相关设备
CN114996017A (zh) 一种基于指令相关性的指令分派方法与装置
US20150074378A1 (en) System and Method for an Asynchronous Processor with Heterogeneous Processors
JP2001051845A (ja) アウトオブオーダー実行方式
US11314505B2 (en) Arithmetic processing device
CN110347400B (zh) 编译加速方法、路由单元和缓存
US20240020122A1 (en) Executing phantom loops in a microprocessor
US20150074379A1 (en) System and Method for an Asynchronous Processor with Token-Based Very Long Instruction Word Architecture
US20210042111A1 (en) Efficient encoding of high fanout communications
CN115080121A (zh) 指令处理方法、装置、电子设备及计算机可读存储介质
CN115269011A (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
GR01 Patent grant
GR01 Patent grant