CN113721985B - Risc-v向量寄存器分组设置方法、装置及电子设备 - Google Patents
Risc-v向量寄存器分组设置方法、装置及电子设备 Download PDFInfo
- Publication number
- CN113721985B CN113721985B CN202111286967.7A CN202111286967A CN113721985B CN 113721985 B CN113721985 B CN 113721985B CN 202111286967 A CN202111286967 A CN 202111286967A CN 113721985 B CN113721985 B CN 113721985B
- Authority
- CN
- China
- Prior art keywords
- vector register
- instruction
- value
- vector
- grouping
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 60
- 230000008569 process Effects 0.000 claims abstract description 33
- 238000004519 manufacturing process Methods 0.000 claims abstract description 9
- 238000004590 computer program Methods 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 12
- 238000004891 communication Methods 0.000 description 10
- 230000008901 benefit Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 210000003934 vacuole Anatomy 0.000 description 2
- 230000003993 interaction Effects 0.000 description 1
- 230000037361 pathway Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30138—Extension of register space, e.g. register cache
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/342—Extension of operand address space
-
- 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
-
- 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/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
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)
- Complex Calculations (AREA)
Abstract
本发明一个或多个实施例提供一种RISC‑V向量寄存器分组设置方法、装置及电子设备,包括:完成流水线中的取指令,对所述指令进行译码并判断所述指令的指令类型;根据所述指令类型从向量寄存器分组解析器、向量寄存器分组值历史表以及Vtype寄存器中的其中一个获取向量寄存器分组值,并设置到向量寄存器分组值缓存中,其中所述向量寄存器分组值历史表用于记录不同进程的向量寄存器分组历史值,所述向量寄存器分组解析器用于从所述指令的指令编码中解析设置的向量寄存器分组值。本发明能够减少因为等待向量寄存器分组导致的流水线停顿,提高处理器性能。
Description
技术领域
本发明属于一种处理器微体系结构技术领域,具体是涉及到一种RISC-V向量寄存器分组设置方法、装置及电子设备。
背景技术
第五代精简指令集(Reduced Instruction Set Computing-five,RISC-V)是目前使用较广泛的一种精简指令集。RISC-V向量指令集提出了一种可变长的向量指令集。可变长的向量有两个方面:按该指令集编写的程序可以不经过修改运行在不同向量寄存器长度的处理器上;指令操作的向量长度可以超过体系结构中实现的寄存器长度。
RISC-V向量扩展指令集中,通过vsetvl/vsetvli指令设置向量寄存器的分组,可以使用一条指令操作多达8个寄存器,相当于可操作的寄存器宽度变为硬件寄存器宽度的8倍。这样的特性使得程序编写更简洁,执行的代码量大幅减少。例如,在循环开头用vsetvli执行设置了当前的指令分组数。在vsetvli执行后,Vtype寄存器中就存放了向量寄存器的分组数量,向量存储数据装载指令vle32.v就知道当前的指令需要操作的目的向量寄存器个数。如果vsetvli使用m8参数设置了每条指令处理8个连续的向量寄存器,则vle32.v指令操作的目的寄存器是从v0开始的8个寄存器,即v0、v1、v2、v3、v4、v5、v6、v7。此后的向量指令都和vle32.v一样操作的寄存器受到向量寄存器分组的影响。
参见图1,其中图a)为先一步执行的指令的执行流程示意图,图b)为后一步执行的指令的执行流程示意图,乱序执行的处理器划分了多个执行阶段,连续的两个指令a和b可以在流水线中流水执行。但是如果第一条指令a为vsetvli指令,第二条指令b为vle32.v,那么在进入寄存器重命名阶段时,由于不知道当前的指令分组数,就不能确定vle32.v的目的操作数是多少个,从而需要等待vsetvli指令执行完成,才能继续vle32.v的重命名过程,参见图2,其中图a)为先一步执行的vsetvli指令的执行流程示意图,图b)为后一步执行的vle32.v指令的执行流程示意图。如此流水线中可能会产生多个空泡,造成了性能损失,在流水线划分更细的处理器中,这种性能损失更为显著。
发明内容
本发明要解决的技术问题是提供一种RISC-V向量寄存器分组设置方法、装置及电子设备,以解决因为等待向量寄存器分组导致的流水线停顿,性能损失严重的问题。
基于上述目的,本发明一个或多个实施例提供了一种RISC-V向量寄存器分组设置方法,包括:完成流水线中的取指令,对所述指令进行译码并判断所述指令的指令类型;根据所述指令类型从向量寄存器分组解析器、向量寄存器分组值历史表以及Vtype寄存器中的其中一个获取向量寄存器分组值,并设置到向量寄存器分组值缓存中,其中所述向量寄存器分组值历史表用于记录不同进程的向量寄存器分组历史值,所述向量寄存器分组解析器用于从所述指令的指令编码中解析设置的向量寄存器分组值。
可选的,所述根据所述指令类型从向量寄存器分组解析器、向量寄存器分组值历史表以及Vtype寄存器中的其中一个获取向量寄存器分组值设置到向量寄存器分组值缓存中,包括:如果所述指令类型为第一类型向量指令,则应用所述向量寄存器分组解析器对所述指令进行寄存器分组参数解析获取所述向量寄存器分组值;如果所述指令类型为不同于所述第一类型向量指令的其他向量指令,则根据向量指令的等待状态获取并设置所述向量寄存器分组值;如果所述指令类型为非向量指令,则获取所述指令执行完成后存储在所述Vtype寄存器中的所述向量寄存器分组值;将所述向量寄存器分组值设置到所述向量寄存器分组值缓存中。
可选的,所述根据向量指令的等待状态获取所述向量寄存器分组值,包括:如果当前处于向量指令等待状态,则等待所述指令执行完成后,获取存储在所述Vtype寄存器中的所述向量寄存器分组值;如果当前不处于向量指令等待状态,则读取所述Vtype寄存器中的当前的所述向量寄存器分组值。
可选的,所述如果所述指令类型为不同于所述第一类型向量指令的其他向量指令,则根据向量指令的等待状态获取并设置所述向量寄存器分组值,还包括:如果所述指令类型为第二类型向量指令,则从所述向量寄存器分组值历史表中索引与当前进程匹配的向量寄存器分组历史值;如果当前向量寄存器分组值可推测,则将当前的所述向量寄存器分组值设置为所述向量寄存器分组历史值,并将当前的所述向量寄存器分组值置为推测状态;如果当前向量寄存器分组值不可推测,则设置向量指令等待状态,以等待所述指令执行完成后获取存储在所述Vtype寄存器中的向量寄存器分组值。
可选的,所述从所述向量寄存器分组值历史表中索引与当前进程匹配的向量寄存器分组历史值,包括:根据当前进程的地址空间标识符或虚拟机标识符索引所述向量寄存器分组值历史表,查找所述地址空间标识符或所述虚拟机标识符相同的所述向量寄存器分组历史值。
可选的,所述将当前的所述向量寄存器分组值设置为所述向量寄存器分组历史值,并将当前的所述向量寄存器分组值置为推测状态之后,包括:在所述第二类型向量指令执行完成后,根据所述Vtype寄存器中当前的所述向量寄存器分组值判断所述向量寄存器分组历史值是否正确,并清除所述向量寄存器分组值的所述推测状态;如果所述向量寄存器分组历史值不正确,则清空流水线,返回所述完成流水线中的取指令的步骤;将当前设置的所述向量寄存器分组值、当前进程的所述地址空间标识符或所述虚拟机标识符存储到所述向量寄存器分组值历史表中,并更新所述向量寄存器分组值缓存。
可选的,所述根据向量指令的等待状态获取并设置所述向量寄存器分组值之后,还包括:如果当前处于向量指令等待状态,则在所述指令执行完成后,清除所述向量指令等待状态。
可选的,所述方法还包括:根据所述寄存器分组值对寄存器进行重命名,并在所述流水线中完成所述指令的执行;如果发生flush,则将所述向量寄存器分组值缓存中的向量寄存器分组值更新为Vtype寄存器中的向量寄存器分组值,返回所述完成流水线中的取指令的步骤。
基于同一发明构思,本发明一个或多个实施例还提出了一种RISC-V向量寄存器分组设置装置,包括:指令译码部件,用于完成流水线中的取指令,对所述指令进行译码并判断所述指令的指令类型;向量寄存器分组值选择器,用于根据所述指令类型从向量寄存器分组解析器、向量寄存器分组值历史表以及Vtype寄存器中的其中一个获取向量寄存器分组值,并设置到向量寄存器分组值缓存中,其中所述向量寄存器分组值历史表用于记录不同进程的向量寄存器分组历史值,所述向量寄存器分组解析器用于从所述指令的指令编码中解析设置的向量寄存器分组值。
基于同一发明构思,本发明一个或多个实施例还提出了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上任意一项中所述的方法。
从上面所述可以看出,本发明一个或多个实施例提供的一种RISC-V向量寄存器分组设置方法、装置及电子设备,通过完成流水线中的取指令,对所述指令进行译码并判断所述指令的指令类型;根据所述指令类型从向量寄存器分组解析器、向量寄存器分组值历史表以及Vtype寄存器中的其中一个获取向量寄存器分组值,并设置到向量寄存器分组值缓存中,其中所述向量寄存器分组值历史表用于记录不同进程的向量寄存器分组历史值,所述向量寄存器分组解析器用于从所述指令的指令编码中解析设置的向量寄存器分组值,能够减少因为等待向量寄存器分组导致的流水线停顿,提高处理器性能。
附图说明
为了更清楚地说明本发明一个或多个实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明一个或多个实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中的普通指令的流水线示意图;
图2为现有技术中的等待vsetvli指令执行完成的流水线示意图;
图3为本发明一个或多个实施例中的RISC-V向量寄存器分组设置装置的结构示意图;
图4为本发明一个或多个实施例中的又一RISC-V向量寄存器分组设置装置的结构示意图;
图5为本发明一个或多个实施例中的RISC-V向量寄存器分组设置方法的流程示意图;
图6为本发明一个或多个实施例中的RISC-V向量寄存器分组设置方法的示例图;
图7为本发明一个或多个实施例中电子设备示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
需要说明的是,除非另外定义,本发明一个或多个实施例使用的技术术语或者科学术语应当为本发明所属领域内具有一般技能的人士所理解的通常意义。本发明一个或多个实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
本发明一个或多个实施例提供了一种RISC-V向量寄存器分组设置装置。如附图3所示,RISC-V向量寄存器分组设置装置包括:指令译码部件和向量寄存器分组值选择器。
指令译码部件,用于完成流水线中的取指令,对所述指令进行译码并判断所述指令的指令类型。向量寄存器分组值选择器,用于根据所述指令类型从向量寄存器分组解析器、向量寄存器分组值历史表以及Vtype寄存器中的其中一个获取向量寄存器分组值,并设置到向量寄存器分组值缓存中,其中所述向量寄存器分组值历史表用于记录不同进程的向量寄存器分组历史值,所述向量寄存器分组解析器用于从所述指令的指令编码中解析设置的向量寄存器分组值。本发明实施例通过在译码阶段发现设置向量寄存器分组的指令后,立即获取该指令设置的目标寄存器分组值,如此后面的向量指令就可以在译码后,使用该寄存器分组值,得到指令操作的硬件寄存器数量,开始寄存器重命名等流水线阶段,无需等待,从而解决由等待分组寄存器设置而导致的流水线空泡和带来的性能损失。
参见图4,RISC-V向量寄存器分组设置装置包括:指令译码部件、向量寄存器分组解析器、Vtype寄存器、向量寄存器分组值缓存、寄存器重命名部件、向量寄存器分组值历史表以及向量寄存器分组值选择器。
指令译码部件是处理器流水线中原有的部件,用于RISC-V指令的译码。可选地,完成流水线中的取指令,对所述指令进行译码并判断所述指令的指令类型。向量寄存器分组解析器用于从指令编码中解析设置的向量寄存器分组值。Vtype寄存器是RISC-V向量扩展的寄存器,该寄存器中存放了当前设置的向量寄存器分组值等信息。Vtype寄存器使用Vsetvli/vsetivli/Vsetvl 指令进行更新,Vsetvli/vsetivli/Vsetvl 指令的目的寄存器就是vtype寄存器。向量寄存器分组值缓存用于记录在指令译码阶段应该使用的向量寄存器分组值,指导后面的向量寄存器译码和寄存器重命名。寄存器重命名部件是处理器流水线中原有的部件,用于物理寄存器的分配和管理。向量寄存器分组值历史表用于记录不同进程的向量寄存器分组值的历史,每个进程只记录最后一个设置的值。向量寄存器分组值选择器用于从三个源头中选择一个,用于设置向量寄存器分组值缓存。
在本发明实施例中,如果所述指令类型为第一类型向量指令,则向量寄存器分组值选择器应用所述向量寄存器分组解析器对所述指令进行寄存器分组参数解析获取所述向量寄存器分组值。如果所述指令类型为非向量指令,则向量寄存器分组值选择器获取所述指令执行完成后存储在所述Vtype寄存器中的所述向量寄存器分组值。如果所述指令类型为不同于所述第一类型向量指令的其他向量指令,则向量寄存器分组值选择器根据向量指令的等待状态获取并设置所述向量寄存器分组值。可选地,如果当前处于向量指令等待状态,则向量寄存器分组值选择器等待所述指令执行完成后,获取存储在所述Vtype寄存器中的所述向量寄存器分组值;如果当前不处于向量指令等待状态,则向量寄存器分组值选择器读取所述Vtype寄存器中的当前的所述向量寄存器分组值。然后向量寄存器分组值选择器将选择的向量寄存器分组值设置到所述向量寄存器分组值缓存中。其中第一类型指令为Vsetvli/vsetivli指令。
在本发明实施例中,如果所述指令类型为第二类型向量指令,则向量寄存器分组值选择器从所述向量寄存器分组值历史表中索引与当前进程匹配的向量寄存器分组历史值;如果当前向量寄存器分组值可推测,则将当前的所述向量寄存器分组值设置为所述向量寄存器分组历史值,并将当前的所述向量寄存器分组值置为推测状态;如果当前向量寄存器分组值不可推测,则设置向量指令等待状态,以等待所述指令执行完成后获取存储在所述Vtype寄存器中的向量寄存器分组值。向量寄存器分组值选择器从向量寄存器分组值历史表中索引与当前进程匹配的向量寄存器分组历史值时,可选地,根据当前进程的地址空间标识符或虚拟机标识符索引所述向量寄存器分组值历史表,查找所述地址空间标识符或所述虚拟机标识符相同的所述向量寄存器分组历史值。
在本发明实施例中,在所述第二类型向量指令执行完成后,向量寄存器分组值选择器根据所述Vtype寄存器中当前的所述向量寄存器分组值判断所述向量寄存器分组历史值是否正确,并清除所述向量寄存器分组值的所述推测状态;如果所述向量寄存器分组历史值不正确,则清空流水线,返回所述完成流水线中的取指令的步骤,即指令译码部件重新进行取指令和进行指令译码;将当前设置的所述向量寄存器分组值、当前进程的所述地址空间标识符或所述虚拟机标识符存储到所述向量寄存器分组值历史表中,并更新所述向量寄存器分组值缓存。如果当前处于向量指令等待状态,则在所述第二类型向量指令执行完成后,清除所述向量指令等待状态。
向量寄存器分组值选择器完成向量寄存器分组值选择并设置到向量寄存器分组值缓存中后,寄存器重命名部件根据所述寄存器分组值对寄存器进行重命名,并在所述流水线中完成所述指令的执行。如果发生flush,则向量寄存器分组值选择器将所述向量寄存器分组值缓存中的向量寄存器分组值更新为Vtype寄存器中的向量寄存器分组值,返回所述完成流水线中的取指令的步骤,即指令译码部件重新进行取指令和进行指令译码。
本发明实施例通过在已有的处理器中增加少量的硬件资源和控制逻辑,不需修改原有的处理器流水线,可以方便地集成到各种处理器的实现中,实现简单,能够解决由等待分组寄存器设置而导致的流水线空泡和带来的性能损失的问题,减少因为等待向量寄存器分组导致的流水线停顿,提高处理器性能。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本发明一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
基于同一发明构思,本发明一个或多个实施例还提供了一种RISC-V向量寄存器分组设置方法。如附图5所示,RISC-V向量寄存器分组设置方法包括:
步骤S11:完成流水线中的取指令,对所述指令进行译码并判断所述指令的指令类型。
在本发明实施例中,从存储或者指令Cache中,按照程序指针所指的地址,将指令取出,送到流水线的下一个阶段。然后按照RISC-V指令集的编码格式,进行指令译码,并判断指令类型。
步骤S12:根据所述指令类型从向量寄存器分组解析器、向量寄存器分组值历史表以及Vtype寄存器中的其中一个获取向量寄存器分组值,并设置到向量寄存器分组值缓存中,其中所述向量寄存器分组值历史表用于记录不同进程的向量寄存器分组历史值,所述向量寄存器分组解析器用于从所述指令的指令编码中解析设置的向量寄存器分组值。
在本发明实施例中,向量寄存器分组值为1/8、1/4、1/2、1、2、4、8的其中一种。如果所述指令类型为第一类型向量指令,则应用所述向量寄存器分组解析器对所述指令进行寄存器分组参数解析获取所述向量寄存器分组值。其中第一类型向量指令优选为Vsetvli/vsetivli指令。Vsetvli/vsetivli指令设置寄存器分组值时,使用的是立即数,该立即数存放在指令编码中。使用图4中的向量寄存器分组解析器从指令操作码中提取向量寄存器分组值的信息。这部分的信息可以直接从编码的立即数域获得。指令中的vmul域的3个bit就是向量寄存器分组值的信息,向量寄存器分组共有1/8、1/4、1/2、1、2、4、8种。应用向量寄存器分组解析器从指令操作码中提取向量寄存器分组值后,设置提取的当前的向量寄存器分组值,具体将获取的向量寄存器分组值放到一个用于指令译码和寄存器重命名部件的向量寄存器分组值缓存中。如此,在Vsetvli/vsetivli指令译码后就获得了从该指令开始的寄存器分组值。
如果所述指令类型为不同于所述第一类型向量指令的其他向量指令,则根据向量指令的等待状态获取并设置所述向量寄存器分组值。如果当前处于向量指令等待状态,则等待所述指令执行完成后,获取存储在所述Vtype寄存器中的所述向量寄存器分组值。即需要停在寄存器重命名阶段,直到向量指令等待状态消除。如果当前不处于向量指令等待状态,则读取所述Vtype寄存器中的当前的所述向量寄存器分组值。
可选地,如果所述指令类型为第二类型向量指令,则从所述向量寄存器分组值历史表中索引与当前进程匹配的向量寄存器分组历史值;如果当前向量寄存器分组值可推测,则将当前的所述向量寄存器分组值设置为所述向量寄存器分组历史值,并将当前的所述向量寄存器分组值置为推测状态;如果当前向量寄存器分组值不可推测,则设置向量指令等待状态,以等待所述指令执行完成后获取存储在所述Vtype寄存器中的向量寄存器分组值。其中,第二类型向量指令优选为Vsetvl指令。Vsetvl指令在设置向量寄存器分组值时,使用的是寄存器,寄存器值在译码时不可得。通过寄存器方式设置向量寄存器分组值,通常用于进程切换和恢复时,从存储中获得该程序上次执行时的向量寄存器分组情况。
从向量寄存器分组值历史表中索引与当前进程匹配的向量寄存器分组历史值时,可选地,根据当前进程的地址空间标识符(Address Space Identifier,ASID)或虚拟机标识符(Virtual Machine Identifier,VMID)索引所述向量寄存器分组值历史表,查找所述地址空间标识符或所述虚拟机标识符相同的所述向量寄存器分组历史值。即使用当前进程的ASID和VMID去向量寄存器分组值历史表中进行索引,看是否有匹配的向量寄存器分组历史值。其中当处理器实现了虚拟化扩展时,才会有VMID,没有实现虚拟化时,不可用VMID。如果当前向量寄存器分组值没有处于推测状态,并且查到了和当前进程匹配的向量寄存器分组值,则设置当前的向量寄存器分组值为查出的向量寄存器分组历史值,并将当前的向量寄存器分组值置为推测状态。如果当前向量寄存器分组值不可推测,则设置向量指令等待状态,所有受向量寄存器分组影响的指令,在该等待状态下都要在寄存器重命名阶段等待。
如此,如果指令类型为第二类型向量指令,可以对向量寄存器分组值做是否可推测判断,也可以不做向量寄存器分组值的是否可推测判断,直接使处理器直接进入向量指令等待状态,其他指令等待vsetvl指令执行完后,继续向下执行。不做是否可推测判断的优点是可以减少向量寄存器分组值历史表的存储空间和相关的操作,简化流水线的实现。缺点是在vsetvl指令较多的程序中性能可能会受影响。
如果所述指令类型为非向量指令,则获取所述指令执行完成后存储在所述Vtype寄存器中的所述向量寄存器分组值。即需要停在寄存器重命名阶段,直到向量指令等待状态消除。
根据不同的指令类型获取到向量寄存器分组值后,将所述向量寄存器分组值设置到所述向量寄存器分组值缓存中。然后依流水线后续根据所述寄存器分组值对寄存器进行重命名,并在所述流水线中完成所述指令的执行。对寄存器进行重命名时,对于普通指令,只需要重命名一个目的寄存器就可以了。对于寄存器分组的指令,如果每组寄存器大于1,那么需要对多个目的寄存器进行重命名,同时源寄存器也要进行相应的映射。寄存器重命名后,指令在流水线中继续执行,包括指令分派、指令发射、指令执行和操作数结果写回。
在本发明实施例中,指令执行结果除了更新相应的目的寄存器之外,还需要对一些结构进行更新。可选地,如果当前处于向量指令等待状态,则在所述指令执行完成后,清除所述向量指令等待状态。如果发生清空(flush),也就是程序执行发生了分支预测、异常等情况,导致流水线清空,则将所述向量寄存器分组值缓存中的向量寄存器分组值更新为Vtype寄存器中的向量寄存器分组值,返回所述完成流水线中的取指令的步骤。
在所述第二类型向量指令,如vsetvl指令,执行完成后,根据所述Vtype寄存器中当前的所述向量寄存器分组值判断所述向量寄存器分组历史值是否正确,并清除所述向量寄存器分组值的所述推测状态;如果所述向量寄存器分组历史值不正确,则清空流水线,返回所述完成流水线中的取指令的步骤。第二类型向量指令执行完成后,需要将当前设置的所述向量寄存器分组值、当前进程的所述地址空间标识符或所述虚拟机标识符存储到所述向量寄存器分组值历史表中,并更新所述向量寄存器分组值缓存。
以下举例说明本发明实施例的RISC-V向量寄存器分组设置方法,如图6所示,包括:
步骤201:取指令。
即从存储或者指令Cache中,按照程序指针所指的地址,将指令取出。
步骤202:指令译码,判断指令类型。
按照RISC-V指令集的编码格式,进行指令译码,并判断指令类型。指令类型包括代表第一类型指令的vsetvli指令、代表第二类型指令的vsetvl指令、其他向量指令以及非向量指令。
步骤203:寄存器分组参数解析。
如果指令类型为第一类型向量指令,则进行寄存器分组参数解析。具体可以应用向量寄存器分组解析器对指令进行寄存器分组参数解析获取向量寄存器分组值。
步骤204:设置向量寄存器分组值。然后执行步骤212。
应用向量寄存器分组解析器解析并获取向量寄存器分组值后,将该向量寄存器分组值设置到向量寄存器分组值缓存中,完成向量寄存器分组值的设置。
步骤205:查找向量寄存器历史表。
如果指令类型为第二类型向量指令,则查找向量寄存器历史表,索引与当前进程匹配的向量寄存器分组历史值。
步骤206:判断向量寄存器分组历史值是否可猜测。如果是,则执行步骤207;否则执行步骤209。
判断向量寄存器分组历史值是否可猜测。如果向量寄存器分组历史值可猜测,说明可用步骤205查找的向量寄存器分组历史值作为当前的向量寄存器分组值。如果向量寄存器分组历史值不可猜测,说明即便步骤205查找到向量寄存器分组历史值,也是不可用的。
步骤207:设置向量寄存器分组值。
向量寄存器分组历史值可猜测,将当前的向量寄存器分组值设置为步骤205查找的向量寄存器分组历史值。
步骤208:设置向量寄存器分组值猜测状态。然后执行步骤212。
在步骤207之后,将当前的向量寄存器分组值置为推测状态。
步骤209:设置向量指令等待信号。然后执行步骤212。
向量寄存器分组历史值不可猜测,此时设置向量指令等待状态,以等待指令执行完成后获取存储在Vtype寄存器中的向量寄存器分组值。
步骤210:查看向量指令等待信号。
如果指令类型为不同于第一类型向量指令和第二指令类型的其他向量指令,则查看向量指令等待信号,以根据向量指令的等待状态获取并设置向量寄存器分组值。可选地,如果当前处于向量指令等待状态,则等待指令执行完成后,获取存储在Vtype寄存器中的向量寄存器分组值。即需要停在寄存器重命名阶段,直到向量指令等待状态消除。
步骤211:读取寄存器分组值。然后执行步骤212。
如果当前不处于向量指令等待状态,则读取Vtype寄存器中的当前的向量寄存器分组值。
步骤212:寄存器重命名。
根据指令的指令类型获取到对应的向量寄存器分组值后,进行寄存器重命名。可选地,对于普通指令,只需要重命名一个目的寄存器就可以了。对于寄存器分组的指令,如果每组寄存器大于1,那么需要对多个目的寄存器进行重命名,同时源寄存器也要进行相应的映射。
步骤213:指令分派、发射、执行、写回结果。
寄存器重命名后,指令在流水线中继续执行,包括指令分派、指令发射、指令执行和操作数结果写回。
本发明实施例在已有的流水线中优化向量寄存器分组值设置的实现方式,减少流水线空泡的产生,提高处理器的性能,并具有实现简单、使用灵活的优点。
本发明实施例通过完成流水线中的取指令,对所述指令进行译码并判断所述指令的指令类型;根据所述指令类型从向量寄存器分组解析器、向量寄存器分组值历史表以及Vtype寄存器中的其中一个获取向量寄存器分组值,并设置到向量寄存器分组值缓存中,其中所述向量寄存器分组值历史表用于记录不同进程的向量寄存器分组历史值,所述向量寄存器分组解析器用于从所述指令的指令编码中解析设置的向量寄存器分组值,能够减少因为等待向量寄存器分组导致的流水线停顿,提高处理器性能。
上述对本发明特定实施例进行了描述。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于同一发明构思,本发明一个或多个实施例还提供了一种电子设备,该电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上任意一实施例所述的方法。
图7示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器701、存储器702、输入/输出接口703、通信接口704和总线705。其中处理器701、存储器702、输入/输出接口703和通信接口704通过总线705实现彼此之间在设备内部的通信连接。
处理器701可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本发明实施例所提供的技术方案。
存储器702可以采用ROM(Read Only Memory,只读存储器)、RAM(RandomAccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器702可以存储操作系统和其他应用程序,在通过软件或者固件来实现本发明实施例所提供的技术方案时,相关的程序代码保存在存储器702中,并由处理器701来调用执行。
输入/输出接口703用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口704用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线705包括一通路,在设备的各个组件(例如处理器701、存储器702、输入/输出接口703和通信接口704)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器701、存储器702、输入/输出接口703、通信接口704以及总线705,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本发明实施例方案所必需的组件,而不必包含图中所示的全部组件。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明的范围被限于这些例子;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本申请中一个或多个实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
凡在本申请中一个或多个实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种RISC-V向量寄存器分组设置方法,其特征是,所述方法包括:
完成流水线中的取指令,对所述指令进行译码并判断所述指令的指令类型;
根据所述指令类型从向量寄存器分组解析器、向量寄存器分组值历史表以及Vtype寄存器中的其中一个获取向量寄存器分组值,并设置到向量寄存器分组值缓存中,其中所述向量寄存器分组值历史表用于记录不同进程的向量寄存器分组历史值,所述向量寄存器分组解析器用于从所述指令的指令编码中解析设置的向量寄存器分组值;
所述方法还包括:根据所述寄存器分组值对寄存器进行重命名,并在所述流水线中完成所述指令的执行;如果发生flush,则将所述向量寄存器分组值缓存中的向量寄存器分组值更新为Vtype寄存器中的向量寄存器分组值,返回所述完成流水线中的取指令的步骤。
2.如权利要求1所述的方法,其特征是,所述根据所述指令类型从向量寄存器分组解析器、向量寄存器分组值历史表以及Vtype寄存器中的其中一个获取向量寄存器分组值设置到向量寄存器分组值缓存中,包括:
如果所述指令类型为第一类型向量指令,则应用所述向量寄存器分组解析器对所述指令进行寄存器分组参数解析获取所述向量寄存器分组值;
如果所述指令类型为不同于所述第一类型向量指令的其他向量指令,则根据向量指令的等待状态获取并设置所述向量寄存器分组值;
如果所述指令类型为非向量指令,则获取所述指令执行完成后存储在所述Vtype寄存器中的所述向量寄存器分组值;
将所述向量寄存器分组值设置到所述向量寄存器分组值缓存中。
3.如权利要求2所述的方法,其特征是,所述根据向量指令的等待状态获取所述向量寄存器分组值,包括:
如果当前处于向量指令等待状态,则等待所述指令执行完成后,获取存储在所述Vtype寄存器中的所述向量寄存器分组值;
如果当前不处于向量指令等待状态,则读取所述Vtype寄存器中的当前的所述向量寄存器分组值。
4.如权利要求2所述的方法,其特征是,所述如果所述指令类型为不同于所述第一类型向量指令的其他向量指令,则根据向量指令的等待状态获取并设置所述向量寄存器分组值,还包括:
如果所述指令类型为第二类型向量指令,则从所述向量寄存器分组值历史表中索引与当前进程匹配的向量寄存器分组历史值;如果当前向量寄存器分组值可推测,则将当前的所述向量寄存器分组值设置为所述向量寄存器分组历史值,并将当前的所述向量寄存器分组值置为推测状态;如果当前向量寄存器分组值不可推测,则设置向量指令等待状态,以等待所述指令执行完成后获取存储在所述Vtype寄存器中的向量寄存器分组值。
5.如权利要求4所述的方法,其特征是,所述从所述向量寄存器分组值历史表中索引与当前进程匹配的向量寄存器分组历史值,包括:
根据当前进程的地址空间标识符或虚拟机标识符索引所述向量寄存器分组值历史表,查找所述地址空间标识符或所述虚拟机标识符相同的所述向量寄存器分组历史值。
6.如权利要求5所述的方法,其特征是,所述将当前的所述向量寄存器分组值设置为所述向量寄存器分组历史值,并将当前的所述向量寄存器分组值置为推测状态之后,包括:
在所述第二类型向量指令执行完成后,根据所述Vtype寄存器中当前的所述向量寄存器分组值判断所述向量寄存器分组历史值是否正确,并清除所述向量寄存器分组值的所述推测状态;
如果所述向量寄存器分组历史值不正确,则清空流水线,返回所述完成流水线中的取指令的步骤;
将当前设置的所述向量寄存器分组值、当前进程的所述地址空间标识符或所述虚拟机标识符存储到所述向量寄存器分组值历史表中,并更新所述向量寄存器分组值缓存。
7.如权利要求2-4中任一项所述的方法,其特征是,所述根据向量指令的等待状态获取并设置所述向量寄存器分组值之后,还包括:
如果当前处于向量指令等待状态,则在所述指令执行完成后,清除所述向量指令等待状态。
8.一种RISC-V向量寄存器分组设置装置,其特征是,所述装置包括:
指令译码部件,用于完成流水线中的取指令,对所述指令进行译码并判断所述指令的指令类型;
向量寄存器分组值选择器,用于根据所述指令类型从向量寄存器分组解析器、向量寄存器分组值历史表以及Vtype寄存器中的其中一个获取向量寄存器分组值,并设置到向量寄存器分组值缓存中,其中所述向量寄存器分组值历史表用于记录不同进程的向量寄存器分组历史值,所述向量寄存器分组解析器用于从所述指令的指令编码中解析设置的向量寄存器分组值;
寄存器重命名部件根据所述寄存器分组值对寄存器进行重命名,并在所述流水线中完成所述指令的执行;如果发生flush,则所述向量寄存器分组值选择器将所述向量寄存器分组值缓存中的向量寄存器分组值更新为Vtype寄存器中的向量寄存器分组值,返回所述完成流水线中的取指令的步骤。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征是,所述处理器执行所述程序时实现如权利要求1至7任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111286967.7A CN113721985B (zh) | 2021-11-02 | 2021-11-02 | Risc-v向量寄存器分组设置方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111286967.7A CN113721985B (zh) | 2021-11-02 | 2021-11-02 | Risc-v向量寄存器分组设置方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113721985A CN113721985A (zh) | 2021-11-30 |
CN113721985B true CN113721985B (zh) | 2022-02-08 |
Family
ID=78686386
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111286967.7A Active CN113721985B (zh) | 2021-11-02 | 2021-11-02 | Risc-v向量寄存器分组设置方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113721985B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117093268B (zh) * | 2023-10-19 | 2024-01-30 | 超睿科技(长沙)有限公司 | 一种向量处理方法、系统、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101477455A (zh) * | 2009-01-22 | 2009-07-08 | 浙江大学 | 无预测延时的分支预测控制方法 |
CN101529378A (zh) * | 2006-11-03 | 2009-09-09 | 高通股份有限公司 | 用于使用工作全局历史寄存器的系统及方法 |
CN106155636A (zh) * | 2015-05-11 | 2016-11-23 | Arm 有限公司 | 用于寄存器重命名的可用寄存器控制 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7890735B2 (en) * | 2004-08-30 | 2011-02-15 | Texas Instruments Incorporated | Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture |
US20140156978A1 (en) * | 2012-11-30 | 2014-06-05 | Muawya M. Al-Otoom | Detecting and Filtering Biased Branches in Global Branch History |
US10698691B2 (en) * | 2016-08-30 | 2020-06-30 | Advanced Micro Devices, Inc. | Method and device for determining branch prediction history for branch prediction by partially combining shifted branch prediction history with branch signature |
US10437592B2 (en) * | 2017-08-24 | 2019-10-08 | Qualcomm Incorporated | Reduced logic level operation folding of context history in a history register in a prediction system for a processor-based system |
-
2021
- 2021-11-02 CN CN202111286967.7A patent/CN113721985B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101529378A (zh) * | 2006-11-03 | 2009-09-09 | 高通股份有限公司 | 用于使用工作全局历史寄存器的系统及方法 |
CN101477455A (zh) * | 2009-01-22 | 2009-07-08 | 浙江大学 | 无预测延时的分支预测控制方法 |
CN106155636A (zh) * | 2015-05-11 | 2016-11-23 | Arm 有限公司 | 用于寄存器重命名的可用寄存器控制 |
Non-Patent Citations (1)
Title |
---|
RSIC-V——指令集spec阅读笔记——向量扩展0.9;KGback;《https://blog.csdn.net/qq_39815222/article/details/109570539》;20201109;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113721985A (zh) | 2021-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101642556B1 (ko) | 이진 번역을 수행하기 위한 방법 및 시스템 | |
US6029240A (en) | Method for processing instructions for parallel execution including storing instruction sequences along with compounding information in cache | |
US20160378499A1 (en) | Verifying branch targets | |
WO2016210030A1 (en) | Determination of target location for transfer of processor control | |
JPH0926878A (ja) | データ処理装置 | |
JP2834292B2 (ja) | データ・プロセッサ | |
EP4152146A1 (en) | Data processing method and device, and storage medium | |
CN104346132B (zh) | 应用于智能卡虚拟机运行的控制装置及智能卡虚拟机 | |
KR100379837B1 (ko) | 확장명령어 축약장치 | |
CN113721985B (zh) | Risc-v向量寄存器分组设置方法、装置及电子设备 | |
EP1974254B1 (en) | Early conditional selection of an operand | |
US8095775B1 (en) | Instruction pointers in very long instruction words | |
CN114579312A (zh) | 一种指令处理方法、处理器、芯片和电子设备 | |
JP2001034471A (ja) | Vliw方式プロセッサ | |
EP2577464B1 (en) | System and method to evaluate a data value as an instruction | |
CN111443948B (zh) | 指令执行方法、处理器和电子设备 | |
KR100267089B1 (ko) | 스칼라/벡터연산이조합된단일명령복수데이터처리 | |
CN110704108B (zh) | 解释执行字节码指令流的方法及装置 | |
CN117008975A (zh) | 一种指令融合分割方法、处理器核和处理器 | |
CN115048334A (zh) | 可编程阵列处理器控制装置 | |
CN111124499B (zh) | 一种兼容多指令系统的处理器及其运行方法 | |
US20190384608A1 (en) | Arithmetic processor and control method of arithmetic processor | |
CN117591184B (zh) | Risc-v向量压缩乱序执行的实现方法及装置 | |
TWI493450B (zh) | 用於在微碼呼叫程式與微碼次常式之間傳遞別名參數的設備、方法、物件及系統 | |
CN107133081B (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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220527 Address after: 201210 room 2fa222, block a, building 1, No. 800, Naxian Road, Pudong New Area, Shanghai Patentee after: Chaorui Technology (Shanghai) Co.,Ltd. Address before: 410006 ka-657, 7th floor, Yannong complex building, Dongfanghong community, No. 459, lushong Road, high tech Development Zone, Changsha, Hunan Patentee before: Transcendence information technology (Changsha) Co.,Ltd. |