RISC-V矢量store硬件资源释放方法及装置与流程

专利2025-06-20  20


本说明书涉及计算机,特别涉及一种risc-v矢量store硬件资源释放方法及装置。


背景技术:

1、一个指令集中的store指令用于将数据写入内存中,其在高性能、乱序执行的cpu内核中的实现与其他指令不太相同:其他非store指令的执行可以乱序(也就是还有更老的指令未执行时)、在推测状态(该指令有可能在错误分支路径上)下执行,其结果写入物理寄存器中;若推测出现错误,则物理寄存器文件中的内容可以被恢复到正确状态后再从正确分支路径开始执行。但是store指令一旦将数据写入内存/缓存中,就很难/无法恢复。因此,一条store指令仅在其被retire后,也就是进入架构状态后,它的数据才会被写入内存/缓存中。而从store指令执行到其写数据入内存中间可能有多个时钟周期,在此期间该store的内存地址及写入数据一般都保存在一个硬件资源store buffer(sb)中。为了保证程序正确性,store写内存必须严格按照程序顺序,因此store buffer一般是一个first in firstout(fifo)的circular buffer。由于store buffer项的分配与释放都是顺序的,因此其分配必须在cpu内核流水线的前端顺序阶段,比如dispatch流水级。

2、一个store操作包含两个独立的子操作:1)sta:计算出写内存地址;2)std:从寄存器读取写入内存的数据。在一个高性能、乱序执行的cpu内核中,这两个操作通常会被分解为两个独立的微指令来执行。由于一级数据缓存(level 1data cache,l1d)是被sb与其他(比如load与二级缓存读写等)流水线共享的,需要竞争获得。因此,sb项从被允许写入l1d(即retire该sb项)到其真正写入l1d并释放该sb项往往有数个时钟周期的间隔。sb写入l1d操作由sb内部逻辑电路负责。大部分risc-v矢量指令都可支持掩模计算(maskedcomputing),也就是该指令仅写入目标寄存器中masked(即对应mask位为1)的字段,而maskoff(即对应mask位为0)的字段的值不发生变化。对这些指令,其opcode中的vm位标识是否进行掩模计算:vm=1:无掩模计算,所有字段计算结果都会被写入寄存器中。vm=0:掩模计算,掩模(mask)值来自于架构寄存器v0。此时v0中从低位开始的每一位标识一个字段。当v0[i]为1,则计算结果可以写入对应字段,否则不写入。

3、在有掩模(vm=0)的情况下,一个矢量store指令中一对sta与std微指令的mask值在执行阶段获得,若mask off(v0[i]=0),则这两个微指令都被转换为nop,其数据不会被写入内存中。由于store操作的sb项的分配是在更早的dispatch流水级进行,此时并不知道mask寄存器内的值,因此需要为每一个store操作分配一个sb项,尽管mask off store操作并不使用其分配的sb项。

4、在一个高性能、乱序执行的cpu内核中,尽管指令执行是乱序的,但是指令retire是顺序的,这样能够保证程序执行的正确性。指令顺序retire是通过reorder buffer(rob)来实现的。rob是一个先入先出(first in first out)的circular buffer,一条指令在顺序执行的dispatch流水级被在有效rob项末尾(rob tail)被分配一个rob项,而retire则总是从rob有效项的其实位置(rob head)处开始。在risc-v cpu内部,指令往往被解码成为一条或者多条微指令(micro-op)或者宏指令(macro-op)。相对应的,rob每一项可以选择保存指令、微指令、或者宏指令。为了提高rob的效率,大部分rob架构采用每一项对应一条指令的方式。

5、简单扩展现有标量rob及sb以支持risc-v矢量store指令的方案,sb分配、retire、释放仍是以指令为粒度进行的。但是这个方案扩展至risc-v矢量指令时会面临如下问题:

6、sb项分配问题:仅支持标量指令的cpu架构中,sb往往不需要太多项,一般16-48项就足够了。但是如前面提到的,vlen=128b时,一条矢量store指令有可能需要最多128项sb(而vlen更大时需要更多sb项),否则该指令无法被dispatch。增加sb项数以满足单条矢量指令的最大需求的方案,会造成sb过大,造成硬件资源浪费及访问sb延迟加长,最终造成cpu整条性能下降、面积功耗增加。

7、sb项retire及释放问题:由于一条矢量store指令需占用多条sb项,若等到该指令retire时才能释放这些sb项,则该指令会占用多项sb过长时间,叠加一条矢量store指令需要多个sb项,会造成由于sb项短缺而停顿(stall)cpu前端流水线,从而造成cpu性能下降。

8、mask off的store操作仍然占用sb项,叠加上面store指令retire时sb项才释放,进一步造成sb资源浪费。

9、针对上述问题,目前尚未提出有效的解决方案。


技术实现思路

1、本说明书实施例提供了一种risc-v矢量store硬件资源释放方法及装置,优化的sb分配/retire方案以更好的支持risc-v矢量store指令,并对mask off store操作的sb项提前retire进行了专门优化。以使用更少硬件资源及更少项数的sb达到与简单扩展方案相同的性能。

2、本说明书实施例提供了一种risc-v矢量store硬件资源释放方法,包括:

3、响应于矢量store指令,按store操作个数译码生成多个矢量sta和std微指令对,对每一矢量sta和std微指令对分配一个硬件资源项;通过预设矢量存储退役表格协助重排序缓存以矢量存储退役表格中的矢量存储退役项为粒度退役所述硬件资源项,以释放所述硬件资源项对应的硬件资源;其中,通过所述矢量存储退役项中存放的连续的无掩膜store操作项数,以在退役所述矢量存储退役项对应的所述硬件资源项时,退役所述矢量存储退役项之后所述矢量store指令的所有无掩膜store操作的所述硬件资源项。

4、在一个实施例中,根据所述矢量store指令按store操作个数译码生成多个sta和std微指令对包含:

5、于所述矢量store指令生成的矢量sta微指令中增加is_last域,通过is_last域的取值定义所述矢量sta微指令在所述矢量store指令的末位信息。

6、在一个实施例中,所述方法还包含:

7、于重排序缓存项中设置矢量存储退役项标识域、矢量sta微指令数量域和矢量std微指令数量域;其中,所述矢量存储退役项标识域用于根据所述矢量store指令或非矢量store指令配置不同数值;所述矢量sta微指令数量域和所述矢量std微指令数量域分别用于记录所述矢量store指令生成的矢量sta微指令数量和矢量std微指令数量,并根据矢量sta微指令和矢量std微指令的执行情况调整对应记录的矢量sta微指令数量和矢量std微指令数量。

8、在一个实施例中,所述方法还包含:

9、当所述矢量sta微指令的源物理寄存器值存在,且有空闲矢量存储退役项时,所述矢量存储退役表格为所述矢量sta微指令顺序分配一个空闲的矢量存储退役项;在退役无掩膜store操作的矢量sta微指令时释放对应的所述矢量存储退役项;在执行掩膜store操作的矢量sta微指令完毕时释放对应的所述矢量存储退役项;其中,所述矢量存储退役项包含矢量存储退役索引域、与重排序缓存对应的矢量store指令索引域、矢量store指令中的store操作索引域、store操作对应硬件资源项的索引域、store操作异常记录标识域和store操作前掩膜store操作数量域。

10、在一个实施例中,所述矢量存储退役表格为所述矢量sta微指令顺序分配一个空闲的矢量存储退役项包含:当创建或写一个矢量存储退役项时,对应有效store操作与相邻前一项有效store操作之间的无掩膜store操作项数被写入所述矢量存储退役项的store操作前掩膜store操作数量域;当释放或读一个矢量存储退役项时,且通过store操作前掩膜store操作数量域确定相邻下一项存在有效数据,读取相邻下一项的store操作前掩膜store操作数量域,以在退役所述矢量存储退役项对应的所述硬件资源项时,退役所述矢量存储退役项之后所述矢量store指令的所有无掩膜store操作的所述硬件资源项。

11、在一个实施例中,所述矢量存储退役表格为所述矢量sta微指令顺序分配一个空闲的矢量存储退役项包含:当所述矢量存储退役项标志异常时,将所述矢量存储退役项的矢量store指令中的store操作索引域中对应字段及store操作异常记录标识域中异常类型提供至重排序缓存进行异常处理。

12、在一个实施例中,通过预设矢量存储退役表格协助重排序缓存以矢量存储退役表格中的矢量存储退役项为粒度退役所述硬件资源项包含:每个时钟周期通过预设矢量存储指针头所指项开始顺序释放硬件资源项;每个时钟周期通过预设矢量存储指针尾所指项开始顺序分配硬件资源项;其中,所述矢量存储指针头指向矢量存储退役表格中时间最长的有效项,所述矢量存储指针尾指向矢量存储退役表格中第一项无效项。

13、在一个实施例中,通过预设矢量存储退役表格协助重排序缓存以矢量存储退役表格中的矢量存储退役项为粒度退役所述硬件资源项包含:当所述矢量store指令的所有矢量sta微指令对应的矢量存储退役项均被释放时,所述矢量存储退役表格向所述重排序缓存提供通知信号;当所述矢量store指令的所有矢量std微指令执行完毕,所述重排序缓存根据所述通知信号释放所述矢量store指令对应的重排序缓存项。

14、本说明书实施例还提供了一种risc-v矢量store硬件资源释放装置,所述装置包含:分配模块和释放模块;所述分配模块用于响应于矢量store指令,按store操作个数译码生成多个矢量sta和std微指令对,对每一矢量sta和std微指令对分配一个硬件资源项;所述释放模块用于通过预设矢量存储退役表格协助重排序缓存以矢量存储退役表格中的矢量存储退役项为粒度退役所述硬件资源项,以释放所述硬件资源项对应的硬件资源;其中,通过所述矢量存储退役项中存放的连续的无掩膜store操作项数,以在退役所述矢量存储退役项对应的所述硬件资源项时,退役所述矢量存储退役项之后所述矢量store指令的所有无掩膜store操作的所述硬件资源项。

15、本说明书实施例还提供了一种中央处理装置,所述中央处理装置包含基于指令、微指令和宏指令的重排序缓存的中央处理内核,所述中央处理装置应用上述的risc-v矢量store硬件资源释放方法。

16、对一个实现risc-v矢量扩展的risc-v cpu内核,本说明书实施例所提供的risc-v矢量store硬件资源释放方法及装置,提供了一种扩展rob及sb以支持risc-v矢量store指令的优化方案。相对于传统方案,本技术无需大幅增加sb项所需硬件资源,并通过尽快retire sb项达到尽快释放sb项的目的。同时,本技术也能尽快释放mask off store操作对应的sb项,从而进一步提高sb利用效率。

17、参照后文的说明和附图,详细公开了本发明的特定实施方式,指明了本发明的原理可以被采用的方式。应该理解,本发明的实施方式在范围上并不因而受到限制。针对一种实施方式描述和/或示出的特征可以以相同或类似的方式在一个或更多个其它实施方式中使用,与其它实施方式中的特征相组合,或替代其它实施方式中的特征。

18、应当强调,术语“包含/包括”在本文使用时指特征、部件、步骤或组件的存在,但并不排除一个或更多个其他特征、部件、步骤或组件的存在或附加。


技术特征:

1.一种risc-v矢量store硬件资源释放方法,其特征在于,所述方法包含:

2.根据权利要求1所述的risc-v矢量store硬件资源释放方法,其特征在于,按store操作个数译码生成多个sta和std微指令对包含:

3.根据权利要求1所述的risc-v矢量store硬件资源释放方法,其特征在于,所述方法还包含:

4.根据权利要求1所述的risc-v矢量store硬件资源释放方法,其特征在于,所述方法还包含:

5.根据权利要求4所述的risc-v矢量store硬件资源释放方法,其特征在于,所述矢量存储退役表格为所述矢量sta微指令顺序分配一个空闲的矢量存储退役项包含:

6.根据权利要求4所述的risc-v矢量store硬件资源释放方法,其特征在于,所述矢量存储退役表格为所述矢量sta微指令顺序分配一个空闲的矢量存储退役项包含:

7.根据权利要求1所述的risc-v矢量store硬件资源释放方法,其特征在于,通过预设矢量存储退役表格协助重排序缓存以矢量存储退役表格中的矢量存储退役项为粒度退役所述硬件资源项包含:

8.根据权利要求1所述的risc-v矢量store硬件资源释放方法,其特征在于,通过预设矢量存储退役表格协助重排序缓存以矢量存储退役表格中的矢量存储退役项为粒度退役所述硬件资源项包含:

9.一种risc-v矢量store硬件资源释放装置,其特征在于,所述装置包含:分配模块和释放模块;

10.一种中央处理装置,所述中央处理装置包含基于指令、微指令和宏指令的重排序缓存的中央处理内核,其特征在于,所述中央处理装置应用权利要求1至8中任一项所述的risc-v矢量store硬件资源释放方法。


技术总结
本说明书涉及计算机技术领域,具体地公开了一种RISC‑V矢量store硬件资源释放方法及装置,所述方法包含:响应于矢量store指令,根据矢量store指令按store操作个数译码生成多个矢量STA和STD微指令对,对每一矢量STA和STD微指令对分配一个硬件资源项;通过预设矢量存储退役表格协助重排序缓存以矢量存储退役表格中的矢量存储退役项为粒度退役硬件资源项,以释放硬件资源项对应的硬件资源。以此,无需大幅增加SB项所需硬件资源,通过尽快retire SB项达到尽快释放SB项的目的。

技术研发人员:胡世文
受保护的技术使用者:成都群芯微电子科技有限公司
技术研发日:
技术公布日:2024/12/17
转载请注明原文地址:https://xbbs.6miu.com/read-25524.html