具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它形式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本文中使用以下术语。
处理器:计算机系统的运算和控制核心。处理器可以是复杂指令集计算机(Complex Instruction Set Computer,CISC)架构、精简指令集计算机(ReducedInstruction Set Computer,RISC)架构、超长指令字计算机(Very Long InstructionWord,VLIW)架构或者上述指令集组合的架构。
处理器核:处理器中用于处理和执行指令的内核计算引擎。一个处理器可以包括一个处理器核,也可以包括多个处理器核。
寄存器相关:对于顺序执行的指令A和指令B,如果指令B的源寄存器是指令A的目的寄存器,则指令A和指令B存在寄存器相关的情况。
矢量运算指令:矢量运算是能够并行产生多个元素的执行结果的运算,用于执行上述矢量运算的指令即为矢量运算指令。矢量运算指令的一些示例包括矢量加法指令、矢量浮点乘法指令、矢量浮点算数逻辑(Arithmetic Logic Unit,ALU)指令。矢量运算指令的操作数中包括矢量操作数。
访存加载(load)指令:处理器根据加载指令的内存地址操作数将存储于存储器或高速缓存存储器中的数据读取至处理器的寄存器中。
操作数:即指令执行的对象,操作数指出了指令执行所需数据的来源,如立即数、寄存器地址或内存地址。
索引(index):指定参与运算的标量元素的位置。
index乘累加运算:矢量运算的一个典型应用为矩阵乘法,如快速傅里叶变化、卷积运算、科学计算等。传统算法库以及现代算法库都针对矩阵乘法提供了各个层次的优化,其核心(kernel)一般抽象为向量(矢量)级别的运算。在矩阵乘法中,比较常见的运算为矢量操作数中的某个浮点元素与另一个矢量操作数中的所有元素进行乘累加。通过index指定参与乘累加运算的浮点元素的位置,即为index乘累加运算。
融合:从两条或两条以上的指令的编码信息中,提取有效编码信息,放弃无效编码信息,从而得到融合后的编码信息。其中,无效编码信息为对于系统来说明确已知的信息,如访存加载指令编码信息中的指令功能编码信息。
融合指令:融合后的编码信息即为融合指令。在指令发射阶段,融合指令仅占用一条指令的发射带宽。
RVV指令集:RISC-V指令集的矢量(Vector)扩展指令集。
LMUL:矢量寄存器组中寄存器的数量,属于一种矢量参数。RVV指令集支持矢量寄存器分组设置,通过软件配置LMUL,将多个矢量寄存器构成矢量寄存器组。例如:LMUL最大可配置为8,只需要通过矢量参数配置指令改变LMUL的大小即可。
实施例一
在RVV指令集中,矢量寄存器的位宽不固定,为了便于硬件配置参数,矢量指令需要支持不同的寄存器位宽。以寄存器位宽为1024为例,对于半精度浮点数据类型,一个矢量寄存器最多存储64个半精度浮点数据,需要的索引(index)位宽为6-bit。此外,RVV指令集还支持矢量寄存器分组设置位,通过软件配置矢量寄存器组中寄存器的数量(LMUL),可以将多个矢量寄存器构成矢量寄存器组,其中LMUL最大可配置为8,此时对应的index需要增加到9-bit,需要按最大支持的矢量寄存器位宽为index提供编码空间。而在RVV指令集中,矢量运算指令包含3个矢量操作数,不存在额外能够提供给index的编码空间,因此,如果实现index与矢量操作数之间的矢量运算,将面临编码空间不足的问题。
而本申请实施例旨在提供一种新的矢量运算类型的实现方式,能够兼容现有指令集架构,且不需要改变指令本身含义,也不需要增加新的指令类型,更不需要增加额外的指令执行单元,以克服指令编码空间不够的技术问题。下文中将详细描述本申请实施例的具体实施方式。
图1示出根据本申请实施例的计算装置100的结构示意图。该计算装置100例如为一个计算机系统,可基于目前市场上各种型号的处理器构建,并由诸如WINDOWSTM操作系统版本、UNIX操作系统、Linux操作系统这样的操作系统驱动。计算装置100可以为膝上型计算机、台式计算机、工作台、个人数字助理(Personal Digital Assistant PDA)、服务器、刀片式服务器、大型计算机和移动通信装置等。本申请实施例中的计算装置100不限于硬件电路和软件的任何特定组合。
参考图1所示,计算装置100包括处理器101。处理器101具有本领域所公知的数据处理能力。处理器101可以是CISC架构、RISC架构、VLIW架构,或者上述指令集组合的架构,或者是任何为了专用目标构建的处理器设备。示例性地,处理器101包括中央处理器(Central Processing Unit,CPU)、图形处理器(Graphics Processing Unit,GPU)或通用图形处理器(General-Purpose computing on Graphics Processing Units,GPGPU)。处理器101还包括根据本申请实施例提供的技术方案进行改进的处理器核1011,其具体细节将在下文提供。处理器核1011可以是一个,也可以是多个,用于处理和执行指令,指令的处理和执行是可以被用户(例如通过应用程序)和/或系统平台控制的。
处理器101耦合至系统总线102,系统总线102可以是用于连接处理器101和各种其他组件的互联电路,且该互联电路可以支持包括各种互联协议和接口电路,从而实现处理器101和各个组件之间的通信关系。
计算装置100还包括存储器103,用于存储由数字信号表示的指令信息和/或数据信息。存储器102可以是动态随机存取存储器(Dynamic Random Access Memory,DRAM)、静态随机存取存储器(Static Random-Access Memory,SRAM)、闪存或其他存储器。
计算装置100还包括:输入设备104,例如键盘、鼠标等;输出单元105,例如各种类型的显示器、扬声器等;存储设备106,例如磁盘、光盘等;以及通信设备107,例如网卡、调制解调器、无线通信收发机等。通信设备107允许计算装置100通过诸如因特网的计算机网络和/或各种电信网络与其他装置或系统交换信息或数据。
当然,不同的计算装置根据主板、操作系统和指令集架构的不同,其结构也可能有所变化。例如目前很多计算装置设置有连接在系统总线101和各个输入设备104或输出设备105之间的输入输出控制中心,且该输入输出控制中心可以集成于处理器101之内或独立于处理器101。本申请实施例对此不作限定。
图2示出根据本申请实施例的片上系统200的结构示意图。其中,片上系统(System-on-a-chip,SOC)既可以作为一个独立器件生产和销售,也可以和其他组件结合,形成新的器件进行生产和销售。片上系统200可以使用目前市场上多种型号的处理器制造,并可由诸如WINDOWSTM、UNIX、Linux、Android、RTOS这样的操作系统进行驱动。片上系统200可以在计算机设备、手持设备和嵌入式设备中实现。手持设备的一些示例包括蜂窝电话、互联网协议设备、数字摄像机、PDA和手持计算机(Personal Computer,PC)。嵌入式设备的一些示例可以包括网络计算机(Net PC)、机顶盒、网络集线器、广域网(Wide Area Network,WAN)交换机等,嵌入式设备也可以是执行一个或多个指令的任何其它系统。
参考图2所示,片上系统200包括处理器201。处理器201具有本领域所公知的数据处理能力。它可以是CISC架构、RISC架构、VLIW架构,或者是上述指令集组合的架构,或者是任何为了专用目标构建的处理器设备。示例性地,处理器201具体包括CPU、GPU或GPGPU。处理器201还包括根据本申请实施例提供的技术方案进行改进的处理器核2011,其具体细节将在下文提供。处理器核2011可以是一个,也可以是多个,用于处理和执行指令,指令的处理和执行是可以被用户(例如通过应用程序)和/或系统平台控制的。
处理器201耦合至系统总线202,系统总线202可以是用于连接处理器201和各种其他组件的互联电路,且该互联电路可以支持各种互联协议和接口电路,从而实现处理器201和各个组件之间的通信关系。示例性地,系统总线202可以是高级高性能总线(AdvancedHigh performance Bus,AHB),也可以是高级可扩展总线(Advanced eXtensibleInterface,AXI)。随着SOC设计复杂性的增加以及处理器能力的不断提升,SOC对于系统总线的选择可以是多种多样的,本申请对此不作限定。
静态随机存取存储器204和闪存205用于存储由数字信号表示的指令信息和/或数据信息。例如,静态随机存取存储器205可以作为各种应用程序(Application,APP)的运行空间,为各种应用程序创建堆、栈、存储中间数据等,闪存206可以存储各种应用程序的可执行代码和操作系统的可执行代码。
片上系统200还可以包括与系统总线202耦接的各种输入/输出(Input/Output,I/O)接口203,各种I/O接口203包括但不限于以下接口类型:高容量SD存储卡(SecureDigital High Capacity,SDHC)接口、两线式串行总线(Inter-Integrated Circuit,I2C)、串行外设接口(Serial Peripheral Interface,SPI)、通用异步收发传输器(UniversalAsynchronous Receiver Transmitter,UART)、通用串行总线(Universal Serial Bus,USB)、通用型之输入输出(General-purpose input/output,GPIO)和蓝牙UART。基于I/O接口203,片上系统200可以与相应接口类型的外围设备耦接,如USB设备、存储卡、报文收发传输器、蓝牙设备等。
需要说明的是,图1所示的计算装置100和图2所示的片上系统200仅用于示例性描述本申请实施例的一些应用场景,但不作为对本申请实施例的限制。本申请实现的是对现有的处理器或者处理器核的改进,因此理论上可以适用于具有任意处理器架构和指令集架构的装置或系统。
图3A和图3B示出根据本申请实施例的处理器核300的结构示意图。该处理器核300可以与上述的处理器核1011、2011具有相同或相类似的结构。
参考图3A和图3B所示,处理器核300包括流水线结构。为了提高执行指令的效率,把一条指令的操作分成多个细小的步骤,每个步骤由专门的电路完成,实现指令流水线的软件硬件组合称为指令流水线结构。具体到本实施例中,处理器核300的流水线结构包括指令提取单元301、指令译码单元302、指令发射单元303、访存执行单元304和矢量执行单元305。
指令提取单元301作为处理单元12的启动引擎,用于在应用程序或系统平台的控制下,从处理器核300外部的存储器(例如图1中的存储器103)或处理器核300内部的高速缓冲存储器18或处理器核300内部可能设置的其它存储单元中提取出访存加载指令的编码信息和矢量运算指令的编码信息。具体到本实施例中,指令提取单元301包括指令融合单元3011,用于融合访存加载指令的编码信息和矢量运算指令的编码信息,得到融合指令编码信息。
本申请实施例中,编码信息的“融合”可以理解为按照预设的融合逻辑,从访存加载指令的编码信息和矢量运算指令的编码信息,提取有效编码信息,放弃无效编码信息。本实施例中,无效编码信息可以理解为对于系统来说明确已知的信息,如访存加载指令的无效编码信息包括指令功能编码。其中,融合逻辑可以包括具体的融合操作,如定义需要提取的有效编码信息以及需要放弃的无效编码信息。
示例性地,访存加载指令的有效编码信息通常可以包括元素位宽、目的寄存器信息和访存地址(地址偏移量),还可以包括源寄存器信息等。矢量运算指令的有效编码信息包括源操作数的源寄存器信息、目的操作数的目的寄存器信息以及操作类型信息(操作码)。其中,寄存器信息可以是寄存器编号,用于表征寄存器地址。
图4示出根据本实施例的融合指令编码信息的格式的示例图。其中,前半段表示从矢量运算指令的编码信息中提取出的有效编码信息,如源寄存器信息、目的寄存器信息以及操作码,后半段表示从访存加载指令的编码信息中提取出的有效编码信息,如元素位宽、目的寄存器以及访存地址。需要说明的是,融合指令编码信息的格式可以根据处理器架构进行调整,本申请对此不作限定。
指令译码单元302按照预定的指令格式,对融合指令编码信息进行译码(解码),得到融合指令译码信息。
指令发射单元303用于指令的调度和控制。具体到本实施例中,指令发射单元303向访存执行单元304和矢量执行单元305发射融合指令译码信息。因此,在指令发射阶段,融合指令译码信息仅占用一条指令的传输带宽(发射带宽),即两条指令仅占用了一条指令的发射带宽,从而可以减少对发射带宽的占用。在不改变处理器核架构的基础上,如果原本指令发射单元可以同时发送两条指令的话,那基于本申请实施例的方案,指令发射单元可以同时发送三条指令,相当于增加了处理器核的发射带宽。
融合指令译码信息中包括有访存加载指令的部分译码信息和矢量运算指令的部分译码信息,因此,基于融合指令译码信息可以分别得到访存加载指令的译码信息和矢量运算指令的译码信息。
进一步地,访存加载指令的译码信息中包括访存地址,矢量运算指令的译码信息中包括矢量操作数。访存执行单元304根据访存地址加载浮点操作数,矢量执行单元305执行浮点操作数与矢量操作数之间的矢量运算。从而,实现了访存地址所指示的浮点操作数与矢量操作数之间的矢量运算。
根据本申请实施例的技术方案,通过融合访存加载指令和矢量运算指令,用访存加载指令中的访存地址确定矢量运算指令中的浮点操作数,并将该浮点操作数与矢量运算指令中的矢量操作数进行运算,从而在兼容现有指令集架构的基础上,提供新的矢量运算类型,且不需要改变指令本身含义,也不需要增加新的指令类型,更不需要增加额外的指令执行单元,克服了指令编码空间不够的技术问题。并且,由于在指令发射阶段,两条指令融合为融合指令进行发射,即两条指令仅占用一条指令的发射带宽,从而可以减少对处理器核发射带宽的占用,间接增加了处理器核的发射带宽,并可以抵消因执行访存加载指令的开销,提高指令处理效率,提升处理器核的性能。
在一种实施方式中,如图3B所示,在融合指令译码信息到达访存执行单元304的情况下,指令发射单元303根据融合指令译码信息确定出访存加载指令的译码信息(访存加载指令译码信息),并将访存加载指令的译码信息分配至访存执行单元304;在融合指令译码信息到达矢量执行单元305的情况下,根据融合指令译码信息确定矢量运算指令的译码信息(矢量运算指令译码信息),并将矢量运算指令的译码信息分配至矢量执行单元305。
也就是说,访存加载指令的译码信息和矢量运算指令的译码信息可以由指令发射单元生成。从而,访存执行单元304接收到的是访存加载指令译码信息,并能够基于访存加载指令译码信息独立执行访存加载指令;矢量执行单元305接收到的是矢量运算指令译码信息,并能够基于矢量运算指令译码信息独立执行矢量运算指令。
示例性地,在流水线结构中,每个单元的指令操作按照预设的执行时序进行。例如指令发射单元每周期发送两条指令,每条指令占用一个传输带宽。在发射周期结束时,指令发射单元303根据融合指令译码信息确定出两条译码信息,即访存加载指令的译码信息和矢量运算指令的译码信息。
当然,随着处理器技术的更新,也可以由访存执行单元303根据融合指令信息确定访存加载指令的译码信息,由矢量执行单元305根据融合指令信息确定矢量运算指令的译码信息,本实施例对此不作限定。
在一种实施方式中,如图5所示,指令提取单元301可以包括预译码单元3012和融合检测单元3013。预译码单元3012在指令融合单元3011融合访存加载指令的编码信息和矢量运算指令的编码信息之前,对访存加载指令的编码信息和矢量运算指令的编码信息分别进行预译码,得到访存加载指令的预译码信息和矢量运算指令的预译码信息。融合检测单元3013检测访存加载指令的预译码信息和矢量运算指令的预译码信息是否符合预设的融合条件,并在符合融合条件的情况下,向指令融合单元3011发送访存加载指令的编码信息和矢量运算指令的编码信息。
也就是说,并非所有的访存加载指令和矢量运算指令都可以融合,需要根据处理器架构预设融合条件。预译码单元3012基于预设的融合条件进行预译码,提取用于融合检测的预译码信息。融合检测单元3013进行融合检测,在符合融合条件的情况下,融合访存加载指令和矢量运算指令,在不符合融合条件的情况下,按照原来的流水线分别处理访存加载指令和矢量运算指令。
其中,按照原来的流水线分别处理访存加载指令和矢量运算指令包括:指令译码单元320分别对访存加载指令的编码信息和矢量运算指令的编码信息进行译码;指令发射单元303将译码后得到的访存加载指令的译码信息和矢量运算指令的译码信息分别发射至访存执行单元304和矢量执行单元305;访存执行单元304根据访存地址加载浮点操作数,矢量执行单元305执行浮点操作数与矢量操作数之间的矢量运算。
在一种实施方式中,访存加载指令的预译码信息包括至少一项第一寄存器信息,矢量运算指令的预译码信息包括至少一项第二寄存器信息,融合条件包括各第一寄存器信息和各第二寄存器信息之间不存在寄存器相关。
也就是说,当访存加载指令和矢量运算指令之间存在寄存器相关时,不能融合这两条指令。例如:第一寄存器信息包括访存加载指令的目的寄存器信息,第二寄存器信息包括矢量运算指令的源寄存器信息。当访存加载指令的目的寄存器信息与矢量运算指令的源寄存器信息存在寄存器相关时,不能融合访存加载指令和矢量运算指令,反之可以融合。
在一种实施方式中,指令发射单元303从融合指令译码信息中获取与访存执行单元304对应的有效译码信息,并补全与访存执行单元304对应的无效译码信息,得到访存加载指令的译码信息。
访存执行单元304在执行访存加载指令时,需要遵循指令集架构的指令格式,当访存加载指令的译码信息符合访存加载指令的格式时,能够被访存执行单元304执行。在指令融合阶段,为了降低冗余,融合指令编码信息放弃了访存加载指令编码信息中的无效编码信息,如指令功能编码等信息,因此,融合指令译码信息中会缺失访存加载指令的无效译码信息,需要对其进行补全,如图6所示,在融合指令译码信息中提取有效译码信息,并补全了无效译码信息x后,得到访存加载指令译码信息。需要说明的是,在图6中,相同图案代表同样的译码信息,方框长度代表了占用的编码/译码空间的大小。
在一种实施方式中,指令发射单元303从融合指令译码信息中获取与矢量执行单元305对应的有效译码信息,得到矢量运算指令的译码信息。
矢量执行单元305在执行矢量运算指令时,需要遵循指令集架构的指令格式,当矢量运算指令的译码信息符合矢量运算指令的格式时,能够被矢量执行单元305执行。如图6所示,在融合指令译码信息中提取有效译码信息后,得到矢量运算指令译码信息。
在一种实施方式中,访存地址用于标识索引(index)地址,矢量运算指令为矢量浮点乘累加指令。其中,矢量浮点乘累加指令的源操作数为矢量操作数和浮点操作数,该浮点操作数通过执行访存加载指令得到,而index体现在访存地址上,因此执行矢量浮点乘累加指令,即可实现index与矢量操作数的乘累加。
基于此,通过访存加载指令与矢量浮点乘累加指令的融合,在指令发射阶段,两条指令仅占用一条指令的发射带宽,而指令执行占用不同的指令执行单元,在不需要增加新的指令类型、不改变原有指令含义、不增加额外寄存器读写口、不增加额外执行单元且兼容现有指令集生态的基础上,提供矩阵乘法核心的index乘累加运算,并且能够克服指令编码空间不够的问题。
示例性地,如下表所示,在访存加载指令flw中,“ft0”表示目的寄存器信息,0(%[PB])的“0”表示立即数,“%[PB]”表示寄存器地址,“0(%[PB])”表示将寄存器地址偏移立即数后的地址作为访存地址,访存地址体现了index。访存执行单元304执行访存加载指令flw,实现以该访存地址从存储器或高速缓存中加载浮点操作数,并将浮点操作数存入浮点寄存器ft0中。在矢量浮点乘累加指令vfmacc.vf中,源操作数为浮点操作数和矢量操作数,“v0”表示该矢量操作数的寄存器信息,“ft0”表示该浮点操作数的寄存器信息,“v16”表示目的寄存器信息。矢量执行单元305执行矢量浮点乘累加指令vfmacc.vf,实现矢量寄存器v0中的矢量操作数与浮点寄存器ft0中的浮点操作数之间的乘累加运算,即实现index指示的浮点操作数与矢量操作数之间的乘累加运算,乘累加运算的结果即目的操作数存入矢量寄存器v16中。
访存加载指令flw |
矢量浮点乘累加指令vfmacc.vf |
ft0,0(%[PB]) |
v16,ft0,v0 |
在一种实施方式中,矢量运算指令还可以为矢量浮点乘法指令,从而实现index所指示的浮点操作数与矢量浮点乘法指令中的矢量操作数之间的乘法运算。在又一种实施方式中,矢量运算指令还可以为矢量浮点ALU指令,从而实现index所指示的浮点操作数与矢量浮点ALU指令中的矢量操作数之间的ALU运算。
实施例二
在RVV指令集中,矢量立即数整型元素根据索引聚合指令(vrgather)可以通过标量寄存器或者5-bit立即数指定矢量运算指令中标量源操作数的index,进而从矢量寄存器中读取一个数据,将读取的数据写入目的寄存器中,达到获取并复制矢量寄存器中标量数据作为矢量运算指令中标量源操作数的目的。然后,再基于立即数加法指令(addi)和覆盖被乘数矢量浮点乘累加指令(vfmacc.vv)实现index乘累加。但这种方式需要两条矢量运算指令(vrgather.vi和vfmacc.vv)才能够实现index乘累加的功能,矢量指令数加倍,造成了硬件性能损失。
而本申请实施例旨在提供一种新的矢量运算类型的实现方式,能够兼容现有指令集架构,且不需要改变指令本身含义,也不需要增加新的指令类型,更不需要增加额外的指令执行单元,以减少矢量指令的数量。下文中将详细描述本申请实施例的具体实施方式。
图7示出根据本申请实施例的处理器核700的结构示意图。该处理器核700可以与上述的处理器核1011、2011具有相同或相类似的结构。
请参考图7所示,处理器核700包括指令提取单元701、指令译码单元702、指令发射单元703、访存执行单元704和矢量执行单元705。
指令提取单元701作为处理单元12的启动引擎,用于在应用程序或系统平台的控制下,从处理器核700外部的存储器(例如图1中的存储器103)或处理器核700内部的高速缓冲存储器18或处理器核700内部可能设置的其它存储单元中提取出访存加载指令的编码信息和矢量运算指令的编码信息。
指令译码单元702按照预定的指令格式,分别对访存加载指令的编码信息和矢量运算指令的编码信息进行译码,得到访存加载指令的译码信息和矢量运算指令的译码信息。指令发射单元703将访存加载指令的译码信息和矢量运算指令的译码信息分别发送至访存执行单元704和矢量执行单元705。
进一步地,访存加载指令的译码信息中包括访存地址,矢量运算指令的译码信息中包括矢量操作数。访存执行单元704根据访存地址加载浮点操作数,矢量执行单元705执行浮点操作数与矢量操作数之间的矢量运算。
基于此,通过访存加载指令和矢量运算指令,不需要改变指令本身的含义,也不需要增加额外的指令执行单元,在兼容现有指令集架构的基础上,即可提供新的矢量运算类型,提升了处理器核的性能,克服了指令编码空间不够的技术问题。
在一种实施方式中,访存地址用于标识索引地址,矢量运算指令为矢量浮点乘累加指令,从而提供矩阵乘法核心的index乘累加运算。
此外,关于本申请上述实施例的处理器核300/700的其他构成,如寄存器组、高速缓存、指令回退单元可以采用本领域普通技术人员现在和未来知悉的各种技术方案,这里不再详细描述。
实施例三
图8示出根据本申请实施例的指令处理方法的流程图。该指令处理方法与处理器核300的结构相对应,即该指令处理方法可以由处理器核300执行。因此,下文将结合上文各实施例中所描述的处理器核300来对本实施例的指令处理方法进行详细说明。
参考图8所示,该指令处理方法包括:
步骤S801:融合访存加载指令的编码信息和矢量运算指令的编码信息,得到融合指令编码信息;
步骤S802:对融合指令编码信息进行译码,得到融合指令译码信息;
步骤S803:发射融合指令译码信息;
步骤S804:根据访存地址加载浮点操作数,其中,访存地址来自于访存加载指令的译码信息,访存加载指令的译码信息基于融合指令译码信息得到;
步骤S805:执行浮点操作数与矢量操作数之间的矢量运算,其中,矢量操作数基于矢量运算指令的译码信息得到,矢量运算指令的译码信息基于融合指令译码信息得到。
在一种实施方式中,在步骤S801之前还包括:对访存加载指令的编码信息和矢量运算指令的编码信息分别进行预译码,得到访存加载指令的预译码信息和矢量运算指令的预译码信息;检测访存加载指令的预译码信息和矢量运算指令的预译码信息是否符合预设的融合条件,并在符合融合条件的情况下,发送访存加载指令的编码信息和矢量运算指令的编码信息。
在一种实施方式中,访存加载指令的预译码信息包括至少一项第一寄存器信息,矢量运算指令的预译码信息包括至少一项第二寄存器信息,融合条件包括各第一寄存器信息和各第二寄存器信息之间不存在寄存器相关。
在一种实施方式中,在步骤S803之后还包括:在融合指令译码信息到达访存执行单元304的情况下,根据融合指令译码信息确定访存加载指令的译码信息,并将访存加载指令的译码信息分配至访存执行单元304;在融合指令译码信息到达矢量执行单元305的情况下,根据融合指令译码信息确定矢量运算指令的译码信息,并将矢量运算指令的译码信息分配至矢量执行单元305。
在一种实施方式中,根据融合指令译码信息确定访存加载指令的译码信息,包括:从融合指令译码信息中获取与访存执行单元对应的有效译码信息,并补全与访存执行单元对应的无效译码信息,得到访存加载指令的译码信息;
在一种实施方式中,根据融合指令译码信息确定矢量运算指令的译码信息,包括:从融合指令译码信息中获取与矢量执行单元对应的有效译码信息,得到矢量运算指令的译码信息。
在一种实施方式中,访存地址用于标识索引地址,矢量运算指令为矢量浮点乘累加指令。
在一种实施方式中,矢量运算指令为矢量浮点乘法指令或矢量浮点算术逻辑指令。
示例性地,指令融合单元3011可用于执行步骤S801,指令译码单元302可用于执行步骤S802,指令发射单元803可用于执行步骤S803,访存加载单元304可用于执行步骤S804,矢量执行单元305可用于执行步骤S805;预译码单元3012用于执行预译码步骤;融合检测单元3013用于执行融合检测步骤。因此,该指令处理方法的实现细节可以参考前面对处理器核300的详细描述。其与处理核300的实施例的实现类似,只是描述角度不同。为了节约篇幅,不再赘述。
实施例四
图9示出根据本申请实施例的指令处理方法的流程图。该指令处理方法与处理器核700的结构相对应,即该指令处理方法可以由处理器核700执行。因此,下文将结合上文各实施例中所描述的处理器核300来对本实施例的指令处理方法进行详细说明。
参考图9所示,该指令处理方法包括:
步骤S901:提取访存加载指令的编码信息和矢量运算指令的编码信息;
步骤S902:分别对访存加载指令的编码信息和矢量运算指令的编码信息进行译码,得到访存加载指令的译码信息和矢量运算指令的译码信息;其中,访存加载指令的译码信息中包括访存地址,矢量运算指令的译码信息中包括矢量操作数;
步骤S903:发射访存加载指令的译码信息和矢量运算指令的译码信息;
步骤S904:根据访存地址加载浮点操作数;
步骤S905:执行浮点操作数与矢量操作数之间的矢量运算。
在一种实施方式中,访存地址用于标识索引地址,矢量运算指令为矢量浮点乘累加指令。
示例性地,指令提取单元701可用于执行步骤S901,指令译码单元702可用于执行步骤S902,指令发射单元703可用于执行步骤S903,访存加载单元704可用于执行步骤S704,矢量执行单元705可用于执行步骤S905。因此,该指令处理方法的实现细节可以参考前面对处理器核700的详细描述。其与处理核700的实施例的实现类似,只是描述角度不同。为了节约篇幅,不再赘述。
在本说明书的描述中,参考术语“实施例”、“一种实施方式”、“示例”等的描述意指结合该实施例或实施方式或示例描述的具体特征、结构或者特点包括于本申请的至少一个实施例或实施方式或示例中。而且,描述的具体特征、结构或者特点可以在任一个或多个实施例或实施方式或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或实施实施方式或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分。并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。
应理解的是,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。并且,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到其各种变化或替换,这些都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。