CN117194283A - 基于risc-v指令集的向量读写指令的处理方法 - Google Patents
基于risc-v指令集的向量读写指令的处理方法 Download PDFInfo
- Publication number
- CN117194283A CN117194283A CN202210602866.4A CN202210602866A CN117194283A CN 117194283 A CN117194283 A CN 117194283A CN 202210602866 A CN202210602866 A CN 202210602866A CN 117194283 A CN117194283 A CN 117194283A
- Authority
- CN
- China
- Prior art keywords
- read
- data
- write
- write instruction
- vector
- 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
- 238000003672 processing method Methods 0.000 title abstract description 4
- 238000000034 method Methods 0.000 claims abstract description 54
- 230000004044 response Effects 0.000 claims abstract description 31
- 238000012545 processing Methods 0.000 claims description 43
- 230000000295 complement effect Effects 0.000 claims description 27
- 239000012634 fragment Substances 0.000 claims description 25
- 238000005520 cutting process Methods 0.000 claims description 17
- 238000004590 computer program Methods 0.000 description 16
- 238000003860 storage Methods 0.000 description 12
- 238000010586 diagram Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 11
- 230000006870 function Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明实施例公开了一种基于RISC‑V指令集的向量读写指令的处理方法和装置。本发明实施例通过获取向量读写指令,将向量读写指令按照设定的粒度生成至少一个读写指令分量;根据读写指令分量获取对应的写回数据;响应于获取到与读写指令分量查询地址相同的第一候选请求,将写回数据写入到所述读写指令分量以及第一候选请求分别指示的向量寄存器中;响应于与读写指令分量写入地址相同的第二候选请求,将写回数据写入读写指令分量以及第二候选请求共同对应的内存中。通过上述方法,将查询地址相同或写入地址相同的请求进行合并操作,减少读写内存时的延迟,提高读写效率。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种基于RISC-V指令集的向量读写指令的处理方法。
背景技术
第五代精简指令集计算机RISC-V(Reduced Instruction Set Computer-V)结合了x86和ARM指令集的优点,RISC-V中指令简单、指令条数少、代码小并且功耗低,因此,RISC-V的使用范围越来越广泛。RISC-V包括现有基本指令集和扩展指令集,其中,所述V扩展即向量扩展指令集(RISC-V Vector);所述RISC-V通过Vector处理器实现,所述向量扩展指令集中包括向量读写指令,所述向量读写指令在数据处理的过程中需要读写内存,由于向量读写指令数据量大,因此对内存具有较高的带宽需求,并且存在读写内存时延迟的问题。
现有技术中,为了解决读写内存时延迟的问题,处理器采用了高速缓存(Cache)技术,使用更短延时的存储单元用于存放中央处理器(Central Processing Unit,CPU)在近期使用过的数据,利用程序的局部性原理减少读写内存时的延迟,提高程序运行效率;使用高速缓存(Cache)技术后,内存数据按照地址被划分成多个固定大小的缓存行(cacheline),在Cache模块中进行管理和维护;但是上述高速缓存技术比较适用于标量读写指令,具体是因为每一条标量读写指令和对应的内存地址的cache line一一对应,每完成一条标量读写指令,只需要一次访存即可;但是由于向量读写指令的数据需求大于标量读写指令的数据需求,因此,适用于标量读写指令的数据带宽不适用于向量读写指令,即向量读写指令与内存地址的cache line无法一一对应,向量读写指令的执行过程中,每条向量读写指令可能需要访问多个cache line,每一个cache line又有可能被多个向量读写指令所访问,造成读写内存时延迟较大,效率较低的问题。
综上所述,如何在向量读写指令的执行过程中,减少读写内存时的延迟,提高效率,是目前需要解决的问题。
发明内容
有鉴于此,本发明实施例提供了一种基于RISC-V指令集的向量指令读取方法和装置,可以减少读写内存时的延迟,提高读写效率。
第一方面,本发明实施例提供了一种基于RISC-V指令集的向量读写指令的处理方法,该方法包括:
获取向量读写指令,其中,所述向量读写指令用于从内存中读取数据写入向量寄存器,或者用于从向量寄存器中读取数据写入内存;
将所述向量读写指令按照设定的粒度生成至少一个读写指令分量;
根据所述读写指令分量获取对应的写回数据;
响应于获取到与所述读写指令分量查询地址相同的第一候选请求,将所述写回数据写入到所述读写指令分量以及所述第一候选请求分别指示的向量寄存器中;或者,
响应于与所述读写指令分量写入地址相同的第二候选请求,将所述写回数据写入所述读写指令分量以及所述第二候选请求共同对应的内存中。
可选的,所述将所述向量读写指令按照设定的粒度生成至少一个读写指令分量,具体包括:
将所述向量读写指令按照高速缓存行的大小生成至少一个读写指令分量,其中,所述每个读写指令分量中包含独立片段标记,所述独立片段标记用于判断所述读写指令分量所要访问的数据是否获取。
可选的,该方法还包括:
获取所述读写指令分量所要访问的数据;
响应于已获取的数据的长度小于一个高速缓存行的长度,将所述获取的数据进行拼接补位,将补位后的数据确定为写回数据,其中,补位后的数据的长度等于所述高速缓存行的长度;或者,
响应于所述已获取的数据的长度等于一个高速缓存行的长度,将所述获取的数据确定为写回数据。
可选的,所述拼接补位包括前置补位和后置补位。
可选的,该方法还包括:
获取所述读写指令分量所要写回的数据,其中,已获取的数据的长度等于一个高速缓存行的长度;
响应于所述已获取的数据的长度大于需要写回的数据的长度,将所述已获取的数据进行切割,将所述需要写回的数据的长度对应的已获取的数据确定为写回数据;或者,
响应于所述已获取的数据的长度等于需要写回的数据的长度,将所述获取的数据确定为写回数据。
可选的,所述切割包括前置切割和后置切割。
可选的,所述每个读写指令分量中包含独立片段标记的格式和长度相同。
可选的,该方法还包括:
所述读写指令分量完成后发送请求完成信息。
可选的,该方法还包括:
响应于接收到所述向量读写指令生成的每个所述读写指令分量发送的请求完成信息,向重排序缓存发送退出信息或者提交信息。
第二方面,本发明实施例提供了一种基于RISC-V指令集的向量读写指令的处理装置,该装置包括:
获取单元,用于获取向量读写指令,其中,所述向量读写指令用于从内存中读取数据写入向量寄存器,或者用于从向量寄存器中读取数据写入内存;
生成单元,用于将所述向量读写指令按照设定的粒度生成至少一个读写指令分量;
所述获取单元还用于,根据所述读写指令分量获取对应的写回数据;
处理单元,响应于获取到与所述读写指令分量查询地址相同的第一候选请求,用于将所述写回数据写入到所述读写指令分量以及所述第一候选请求分别指示的向量寄存器中,或者;
响应于与所述读写指令分量写入地址相同的第二候选请求,将所述写回数据写入所述读写指令分量以及所述第二候选请求共同对应的内存中。
可选的,所述生成单元具体用于:
将所述向量读写指令按照高速缓存行的大小生成至少一个读写指令分量,其中,所述每个读写指令分量中包含独立片段标记,所述独立片段标记用于判断所述读写指令分量所要访问的数据是否获取。
可选的,所述获取单元还用于:
获取所述读写指令分量所要访问的数据;
所述处理单元还用于:
响应于已获取的数据的长度小于一个高速缓存行的长度,将所述获取的数据进行拼接补位,将补位后的数据确定为写回数据,其中,补位后的数据的长度等于所述高速缓存行的长度;或者,
响应于所述已获取的数据的长度等于一个高速缓存行的长度,将所述获取的数据确定为写回数据。
可选的,所述拼接补位包括前置补位和后置补位。
可选的,所述获取单元还用于:
获取所述读写指令分量所要写回的数据,其中,已获取的数据的长度等于一个高速缓存行的长度;
所述处理单元还用于:
响应于所述已获取的数据的长度大于需要写回的数据的长度,将所述已获取的数据进行切割,将所述需要写回的数据的长度对应的已获取的数据确定为写回数据;或者,
响应于所述已获取的数据的长度等于需要写回的数据的长度,将所述获取的数据确定为写回数据。
可选的,所述切割包括前置切割和后置切割。
可选的,所述每个读写指令分量中包含独立片段标记的格式和长度相同。
可选的,该装置还包括:
发送单元,用于所述读写指令分量完成后发送请求完成信息。
可选的,所述处理单元还用于:
响应于接收到所述向量读写指令生成的每个所述读写指令分量发送的请求完成信息,向重排序缓存发送退出信息或者提交信息。
第三方面,本发明实施例提供了一种计算机程序指令,所述计算机程序指令在被处理器执行时实现如第一方面或第一方面任一种可能中任一项所述的方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,其上存
储计算机程序指令,所述计算机程序指令在被处理器执行时实现如第一方面或第一方面任一种可能中任一项所述的方法。
第五方面,本发明实施例提供了一种芯片,包括存储器和处理核,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理核执行以实现如第一方面或第一方面任一种可能中任一项所述的方法。
第六方面,本发明实施例提供了一种板卡,所述板卡上包括所述第五方面的芯片。
第七方面,本发明实施例提供了一种服务器,所述服务器上包括所述第六方面的板卡。
本发明实施例通过获取向量读写指令,其中,所述向量读写指令用于从内存中读取数据写入向量寄存器,或者用于从向量寄存器中读取数据写入内存;将所述向量读写指令按照设定的粒度生成至少一个读写指令分量;根据所述读写指令分量获取对应的写回数据;响应于获取到与所述读写指令分量查询地址相同的第一候选请求,将所述写回数据写入到所述读写指令分量以及所述第一候选请求分别指示的向量寄存器中;或者,响应于与所述读写指令分量写入地址相同的第二候选请求,将所述写回数据写入所述读写指令分量以及所述第二候选请求共同对应的内存中。通过上述方法,将查询地址相同或者写入地址相同的请求进行合并操作,减少读写内存时的延迟,提高读写效率。
附图说明
通过以下参照附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
图1是本发明实施例的一种基于RISC-V指令集的向量读写指令的处理方法流程图;
图2是本发明实施例的一种数据结构示意图;
图3是本发明实施例的一种基于RISC-V指令集的向量读写指令的处理方法流程图;
图4是本发明实施例的一种数据结构示意图;
图5是本发明实施例的一种基于RISC-V指令集的向量读写指令的处理方法流程图;
图6是本发明实施例的一种数据结构示意图;
图7是本发明实施例的一种基于RISC-V指令集的向量读写指令的处理方法流程图;
图8是本发明实施例的另一种基于RISC-V指令集的向量读写指令的处理方法流程图;
图9是本发明实施例的一种基于RISC-V指令集的向量读写指令的处理装置示意图。
具体实施方式
以下基于实施例对本发明公开进行描述,但是本发明公开并不仅仅限于这些实施例。在下文对本发明公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明公开。为了避免混淆本发明公开的实质,公知的方法、过程、流程、元件和电路并没有详细叙述。
此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。
除非上下文明确要求,否则整个申请文件中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
在本发明公开的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明公开的描述中,除非另有说明,“多个”的含义是两个或两个以上。
现有技术中,RISC-V(Reduced Instruction Set Computer-V)包括现有基本指令集和扩展指令集,其中,所述基本指令集包括RV32I,RV32E,RV64I和RV128I,所述扩展指令集包括M,A,F,D,C和V扩展;以V扩展为例,所述V扩展即向量扩展指令集(RISC-V Vector),所述RISC-V通过Vector处理器实现,所述向量扩展指令集中包括向量读写指令,所述向量读写指令在数据处理的过程中需要读写内存,由于向量读写指令数据量大,因此对内存具有较高的带宽需求,并且存在读写内存时延迟;为了解决读写内存时延迟,处理器采用了高速缓存(Cache)技术,使用更短延时的存储单元用于存放中央处理器(Central ProcessingUnit,CPU)在近期使用过的数据,利用程序的局部性原理减少读写内存时的延迟,提高程序运行效率;使用高速缓存(Cache)技术后,内存数据按照地址被划分成多个固定大小的高速缓存行(cache line),在Cache模块中进行管理和维护;但是上述高速缓存技术比较适用于标量读写指令,具体是因为每一条标量读写指令和对应的内存地址的cache line一一对应,每完成一条标量读写指令,只需要一次访存即可;但是由于向量读写指令的数据需求大于标量读写指令的数据需求,因此,适用于标量读写指令的数据带宽不适用于向量读写指令,即向量读写指令与内存地址的cache line无法一一对应,向量读写指令的执行过程中,每条向量读写指令可能需要访问多个cache line,每一个cache line又有可能被多个向量读写指令所访问,造成读写内存时延迟较大,效率较低的问题。
本发明实施例中,为了解决上述问题,提出了一种基于RISC-V指令集的向量读写指令的处理方法,具体如图1所示,图1是本发明实施例的一种基于RISC-V指令集的向量读写指令的处理方法流程图,具体包括:
步骤S100、获取向量读写指令,其中,所述向量读写指令用于从内存中读取数据写入向量寄存器,或者用于从向量寄存器中读取数据写入内存。
在一种可能的实现方式中,所述向量读写指令包括向量读(Load)指令和向量写(Store)指令,其中,所述向量读指令用于从内存中读取数据写入向量寄存器,在内存的角度,所述向量读指令是从内存中读取数据;所述向量写指令用于从向量寄存器中读取数据写入内存,在内存的角度,所述向量写指令是向内存中写入数据。
在一种可能的实现方式中,获取向量读写指令后,可按照指令的读写类型将获取到的指令分别存储在不同的队列里。具体的,向量读写单元(Vector load store unit,VLSU)接收到每一个来自CPU流水线调度(dispatch)阶段的指令后,按照指令的类型分配到读队列或者写队列,即向量读指令分配到所述读队列,向量写指令分配到所述写队列。
在一种可能的实现方式中,由于向量读写指令可以并行处理,因此,所述读队列中包括多个向量读指令,所述写队列中包括多个向量写指令,所述多个向量读指令或所述多个向量写指令都要经过仲裁器,获胜的指令会先行下发至下一阶段,以进行下一步的处理。
寄存器分为向量寄存器和标量寄存器,具体的,所述向量寄存器的宽度为128bit到1024bit,而一个标量寄存器的宽度是64bit,因此,向量寄存器的数据需求大于标量寄存器的数据需求,则适用于标量寄存器的高速缓存行的数据带宽无法直接应用于向量寄存器,因此,需要对向量读写指令进行处理,在一种可能的实现方式中,处理方式如下步骤S101所述。
步骤S101、将所述向量读写指令按照设定的粒度生成至少一个指令分量。
在一种可能的实现方式中,所述设定的粒度为所述内存的高速缓存行的大小。具体的,将所述向量读写指令按照高速缓存行的大小生成至少一个读写指令分量,其中,所述每个读写指令分量中包含独立片段标记,所述独立片段标记用于判断所述读写指令分量所要访问的数据是否获取。以及,所述向量读写指令包括向量读指令和向量写指令,所述读写指令分量包括读指令分量和写指令分量。也就是说,向量读指令按照高速缓存行的大小生成至少一个读指令分量,向量写指令按照高速缓存行的大小生成至少一个写指令分量。
在一种可能的实现方式中,在生成读写指令分量后,将生成的读写指令分量存放到缓冲区,其中,所述缓冲区保存所有尚未提交(commit)的读写指令分量。
在一种可能的实现方式中,所述读指令分量存放到读指令缓冲区,由于所述读指令缓冲区中保存多个读指令分量,经过仲裁器确定出获胜的读指令分量发送到下一个阶段;同样的,
所述写指令分量存放到写指令缓冲区,由于所述写指令缓冲区中保存多个读指令分量,经过仲裁器确定出获胜的写指令分量发送到下一个阶段。
下面对向量读指令按照高速缓存行的大小生成至少一个读指令分量进行详细说明。
具体的,向量读指令用于从内存中读取数据写入向量寄存器,如图2所示,vlen为向量寄存器宽度,即需要读取并写入向量寄存器的数据的长度,单位为比特;图2中line2、line1和line0分别为固定大小的高速缓存行(cache line)的三个单元,即需要读取的数据在内存中以cache line为基础的对应情况,具体的,图2中示出的向量读指令需要读取的数据的长度为vlen,以及,该需要读取的数据的头部(head)存储在line0,数据的身体部(body)存储在line1,数据的尾部(tail)存储在line2中。由图2可知,通过一个向量读指令获取数据长度满足向量寄存器宽度的数据,需要访问内存的三个cache line,因此,向量读指令生成三个读指令分量,其中,每个读指令分量都携带独立片段标记,其中,每个读指令分量携带的独立片段标记的格式以及长度(即比特位数)是相同的,初始状态下,每个读指令分量的独立片段标记的所有位都是0,表示拆分的读指令分量所要访问的数据还没有读取完成,当所述读指令分量所要访问的数据读取完成后,会通知存放在读队列中对应的读指令分量,将其独立片段标记更新为1,具体如图2所示,所述line0对应的头部(head)读取完成后,将其对应的独立片段标记更新为1,即图2中的头部独立片段标记(head Snippet)中从右向左的方向上前3组包括的比特位都为1,其中,每组4个比特位;所述line1对应的身体部(body)读取完成后,将其对应的独立片段标记更新为1,即图2中的身体部独立片段标记(body Snippet)中从右向左的方向上第4组至第7组包括的比特位都为1,其中,每组4个比特位;所述line2对应的尾部(tail)读取完成后,将其对应的独立片段标记更新为1,即图2中的尾部独立片段标记(tail Snippet)中从右向左的方向上最后一组包括的比特位都为1,其中,每组4个比特位。
在一种可能的实现方式中,当三个读指令分量所要访问的数据全部读取完成后,将所述头部、身体部和尾部对应的独立片段标记都新到同一列字节掩码(byte Mask)中,当所述字节掩码全是1,说明上述三个读指令分量对应的向量读指令完成,可以提交到一下阶段。
步骤S102、根据所述读写指令分量获取对应的写回数据。
具体的,由于所述读写指令分量分为所述读指令分量和所述写指令分量,下面通过两个具体实施例对如何根据所述读指令分量和所述写指令分量获取对应的写回数据进行详细说明。
具体实施例一
根据所述读指令分量获取对应的写回数据,具体处理步骤如图3所示,具体如下:
步骤S300、获取每个读指令分量所要访问的数据,其中,已获取的数据的长度等于一个高速缓存行的长度。
本发明实施例中,由于所述读指令分量是从内存中读取数据,每次根据一个读指令分量读取到对应的高速缓存行的数据,由图4可知,获取到的一个高速缓存行的长度对应的数据可能不是需要都写入向量寄存器中的数据,因此,需要对上述从内存中读取到的数据进行处理;在图4中,根据读指令分量获取到的数据中的长度大于头部需要写回的数据的长度;根据读指令分量获取到的数据中的长度等于身体部需要写回的数据的长度;根据读指令分量获取到的数据中的长度大于尾部需要写回的数据的长度。
步骤S301、判断已获取的数据的长度是否大于需要写回的数据的长度,若是,则执行步骤S3021,若否,则执行步骤S3022。
步骤S3021、响应于所述已获取的数据的长度大于需要写回的数据的长度,将所述已获取的数据进行切割,将所述需要写回的数据的长度对应的已获取的数据确定为写回数据。
在一种可能的实现方式中,由图4可知,头部和尾部需要写回的数据长度都小于一个高速缓存行的长度,而写入寄存器的写回数据的长度要与vlen相同,因此,需要对以获取的数据进行切割,使写回数据的长度与需要写回的数据长度相同,例如,图4中头部独立片段标记对应的写回数据需要把获取到的一个高速缓存行的数据的左侧切割掉offset长度的数据,所述左侧切割即前置切割;保证写回数据的头部不会超过vlen的左侧头部;同样的,尾部独立片段标记对应的写回数据需要把获取到的一个高速缓存行的数据的右侧切割掉,即后置切割,剩余offset长度的数据,保证写回数据的尾部不会超过vlen的右侧尾部。
步骤S3022、响应于所述已获取的数据的长度等于需要写回的数据的长度,将所述获取的数据确定为写回数据。
本发明实施例中,如图4所示,身体部需要写回的数据的长度等于一个高速缓存行的长度,即从该高速缓存行获取的数据都可以作为写回数据写入到向量寄存器中,不需要进行切割处理。
具体实施例二
根据所述写指令分量获取对应的写回数据,具体处理步骤如图5所示,具体如下:
步骤S500、获取所述写指令分量所要写回的数据。
本发明实施例中,由于从向量寄存器中读取到一个长度为vlen的数据写入内存,由图6可知,每一个写指令分量由数据段(lineData)和掩码段(lineMask)构成,掩码段负责标记数据段中需要被真正写回的数据,例如,图6中,头部独立片段标记对应的掩码段由3组11111比特组成,所述数据段位与所述掩码段的1111对应的位置为真正的写回数据;身体部独立片段标记对应的掩码段由4组11111比特组成,所述数据段位与所述掩码段的1111对应的位置为真正的写回数据;尾部独立片段标记对应的掩码段由1组11111比特组成,所述数据段位与所述掩码段的1111对应的位置为真正的写回数据;由于需要写回的数据可能并不是跟cache line的起始地址或终止地址对齐,例如,图6中头部独立片段标记对应的数据段并未与line0的起始地址对齐,尾部独立片段标记对应的数据段并未与line2的终止地址对齐,因此,在构造cache line的数据和mask的时候需要按照地址偏移和cache line在向量寄存器中的位置进行数据拼接补位操作。
步骤S501、判断已获取的数据的长度是否小于一个高速缓存行的长度,若是,则执行步骤S5021,若否,则执行步骤S5022。
步骤S5021、响应于已获取的数据的长度小于一个高速缓存行的长度,将所述获取的数据进行拼接补位,将补位后的数据确定为写回数据,其中,补位后的数据的长度等于所述高速缓存行的长度。
具体的,所述拼接补位包括前置补位和后置补位。
在一种可能的实现方式中,由图6可知,头部和尾部的独立片段标记对应的数据都小于一个高速缓存行的长度,而写入内存的写回数据的长度要与vlen相同,因此,需要对以获取的数据进行拼接补位,使写回数据的长度与独立片段标记的长度相同,例如,图6中头部独立片段标记对应的写回数据需要把获取到的数据从左侧进行拼接补位,使其长度等于一个高速缓存行的数据的长度,所述左侧拼接补位即前置补位;同样的,尾部独立片段标记对应的写回数据需要把获取到的数据从右侧进行拼接补位,使其长度等于一个高速缓存行的数据的长度,即后置补位。
步骤S5022、响应于所述已获取的数据的长度等于一个高速缓存行的长度,将所述获取的数据确定为写回数据。
本发明实施例中,如图6所示,身体部独立片段标记的长度等于一个高速缓存行的长度,即从该高速缓存行获取的数据都可以作为写回数据写入到内存中,不需要进行补位处理。
步骤S103、响应于获取到与所述读写指令分量查询地址相同的第一候选请求,将所述写回数据写入到所述读写指令分量以及所述第一候选请求分别指示的向量寄存器中;或者,响应于与所述读写指令分量写入地址相同的第二候选请求,将所述写回数据写入所述读写指令分量以及所述第二候选请求共同对应的内存中。
本发明实施例中,由于CPU流水线可以同时处理多个向量读写指令,即可能同时处理多个读指令分量或多个写指令分量,由于每个单独的读指令分量之间可能存在查询地址的情况,在上述情况下,本发明实施例通过设置回写控制(write back controller)模块对查询地址相同的读写指令分量进行了广播操作,具体的,每当一个读指令分量获得了写回数据,回写控制模块会在所有的请求中查找到查询地址相同的请求(即第一候选请求),将上述数据写回到所述查询地址相同的请求所指示的向量寄存器中;同样的,由于每个单独的写指令分量之间可能存在写入地址的情况,在上述情况下,本发明实施例通过设置写回合并(store merger)模块对写入地址相同的读写指令分量进行了同步写回的操作,具体的,每当一个写指令分量获得了写回数据,写回合并模块会在所有的请求中查找到写入地址相同的请求(即第二候选请求),将上述写入地址相同的请求合并操作,将所述写回数据写入所述读写指令分量以及所述候选请求共同对应的内存中,可以提高VLSU的读写效率。
在一种可能的实现方式中,每个读写指令分量可以乱序执行。
在一种可能的实现方式中,在步骤S103之后,还包括如下步骤,如图7所示,具体如下:
步骤S104、所述读写指令分量完成后发送请求完成信息。
步骤S105、响应于接收到所述向量读写指令生成的每个所述读写指令分量发送的请求完成信息,向重排序缓存发送退出信息或者提交信息。
本发明实施例中,由于设置了以cache line为粒度进行读写操作,在满足了向量读写指令的同时也兼顾了标量独写指令,极大提高向量访存的效率,减少访存延时,提高向量程序的运行效率。
下面通过一个完整的实施例对上述处理过程进行详细的说明,具体如图8所示,包括:
1、地址生成(Address Generate)阶段。
具体的,向量读写单元(VLSU)接收到每一个来自CPU流水线调度(dispatch)阶段发射来的指令后,按照所述指令的读写类型分配到读队列或者写队列,即向量读指令分配到所述读队列(VLdQHandler),向量写指令分配到所述写队列(VStQHandler);由于向量读写指令可以并行处理,因此,所述读队列的条目(entry)保存完整的向量读指令,所述写队列的条目(entry)保存完整的向量写指令,所述向量读指令或向量写指令在每一拍生成一个访存请求(即读写指令分量)放入对应的req_buffer中,其中,所述向量读指令生成的访存请求保存到vld_req_buffer,所述向量写指令生成的访存请求保存到vst_req_buffer;所述访存请求的粒度为cache line的大小,所有的访存请求会经过仲裁器(reqArb),获胜的访存请求会先行下发至下一阶段,其中,所述访问请求中携带虚拟地址(vaddress,简写为vaddr)。
2、地址读取(Address Read)阶段。
针对向量读指令生成的访存请求,上一阶段获胜的访存请求进入到所述地址读取阶段后,对向量转译后备缓冲区(vector translation lookaside buffer,vTLB)进行查询,其中,所述vTLB存储一部分虚拟地址与物理地址的对应关系,如果所述获胜的访存请求的虚拟地址在所述vTLB中查询到相同的虚拟地址(即vTLB命中),则返回所述虚拟地址对应的物理地址,其中,所述物理地址由物理页号和页内偏移地址拼接而成,将所述物理地址发送给读写单元,根据所述物理地址访问Dcache(缓存)、VLdQHandler(读队列)和VStQHandler(写队列);如果所述获胜的访存请求的虚拟地址在所述vTLB中没有查询到相同的虚拟地址,则返回上一阶段的vst_req_buffer。
针对向量写指令生成的访存请求,为了节省硬件资源,向量写指令生成的访存请求对应的数据存放在向量寄存器中,获得胜利的向量写指令生成的访存请求会在所述地址读取阶段访问向量寄存器;如果发现vTLB丢失则直接抛弃读出的数据;若vTLB命中则会将读取的数据存放在分配的存储丢失状态处理程序寄存器(Store Miss Status HandlerRegister,Smshr)中等待写回内存。
3、地址匹配(Address Match)阶段。
针对向量读指令对应的访存请求,当读写单元返回数据之后,从缓存Dcache、VStQHandler中的entry、vst_req_buffer中检查可能的前递(Forward,fwd)数据;在地址核对模块(vldAddrChecker)的比对过程时,当前正在等待数据的加载丢失状态处理程序寄存器(Load Miss Status Handler Register,Lmshr)当中的地址也会参与比对,如果地址相同,则合并地址相同的访存请求,将当前请求压入未完成outstanding_req_buffer,在所述Lmshr返回时,同时应答多个访存请求;所述vst_req_buffer中并没有等待写回的数据,而实际的数据存放在VRF中,如果在这一阶段检查到前递数据,则在下一拍由回写控制模块(Write back Controller,wb_ctrl)访问VRF并负责写回;若vLSU的Dcache因为繁忙没有回复(即,ready信号为低)则通过配置选项stall(搁置)当前阶段或是直接当作丢失(miss)处理。
针对向量写指令对应的访存请求,当虚拟地址返回时,直接读取当前Smshr序列中尚未下发的向量写指令对应的访存请的地址进行比对,如果有相同的地址,则合并数据;如果没有相同的地址,则安排一个Smshr,Smshr会在一个可配置的时间后向缓冲发送所述向量写指令对应的访存请求。
4、数据前递(Data Forward)阶段。
若地址匹配(Address Match)阶段中地址比对成功或者有Lmshr返回数据,则数据在所述数据前递阶段被送到前递网络(Forwarding Network)上供其他流水线的寄存器-读(register-read)阶段读取数据;每个Lmshr会将在等待数据返回期间所有命中该地址的向量读指令对应的访存请求存入outstanding_req_buffer,并依次将寄存器号以及数据索引信息压入wb_Q,每拍对一个向量寄存器发起一次写操作,同时vLSU的vld_req_buffer并查询是否有相同地址的向量读指令对应的访存请求等待处理;若上一拍发现当前向量读指令对应的访存请求能够从向量写指令对应的访存请求操作中获取前递数据,则会在这一阶段访问VRF,下一拍复制数据到向量读指令对应的访存请求对应的目标寄存器中。
5、回写(Write Back)阶段。
所述回写阶段是对VRF进行写回,一个cacheline的数据可以向多个向量寄存器中写入,以满足不同指令对于同一个内存地址的访存请求,同时向vLdQ和vStQ发送完成消息;所述vLdQ和vStQ完成所有需要拆解的访存请求后向ROB发送退出(retire)信息或提交(commit)信息。
图9是本发明实施例的一种基于RISC-V指令集的向量读写指令的处理装置示意图。如图9所示,本实施例的装置包括获取单元901、生成单元902和处理单元903。
其中,获取单元901,用于获取向量读写指令,其中,所述向量读写指令用于从内存中读取数据写入向量寄存器,或者用于从向量寄存器中读取数据写入内存;生成单元902,用于将所述向量读写指令按照设定的粒度生成至少一个读写指令分量;所述获取单901元还用于,根据所述读写指令分量获取对应的写回数据;处理单元903,响应于获取到与所述读写指令分量查询地址相同的第一候选请求,用于将所述写回数据写入到所述读写指令分量以及所述第一候选请求分别指示的向量寄存器中;或者,响应于与所述读写指令分量写入地址相同的第二候选请求,将所述写回数据写入所述读写指令分量以及所述第二候选请求共同对应的内存中。
可选的,所述生成单元具体用于:
将所述向量读写指令按照高速缓存行的大小生成至少一个读写指令分量,其中,所述每个读写指令分量中包含独立片段标记,所述独立片段标记用于判断所述读写指令分量所要访问的数据是否获取。
可选的,所述获取单元还用于:
获取所述读写指令分量所要访问的数据;
所述处理单元还用于:
响应于已获取的数据的长度小于一个高速缓存行的长度,将所述获取的数据进行拼接补位,将补位后的数据确定为写回数据,其中,补位后的数据的长度等于所述高速缓存行的长度;或者,
响应于所述已获取的数据的长度等于一个高速缓存行的长度,将所述获取的数据确定为写回数据。
可选的,所述拼接补位包括前置补位和后置补位。
可选的,所述获取单元还用于:
获取所述读写指令分量所要写回的数据,其中,已获取的数据的长度等于一个高速缓存行的长度;
所述处理单元还用于:
响应于所述已获取的数据的长度大于需要写回的数据的长度,将所述已获取的数据进行切割,将所述需要写回的数据的长度对应的已获取的数据确定为写回数据;或者,
响应于所述已获取的数据的长度等于需要写回的数据的长度,将所述获取的数据确定为写回数据。
可选的,所述切割包括前置切割和后置切割。
可选的,所述每个读写指令分量中包含独立片段标记的格式和长度相同。
可选的,该装置还包括:
发送单元,用于所述读写指令分量完成后发送请求完成信息。
可选的,所述处理单元还用于:
响应于接收到所述向量读写指令生成的每个所述读写指令分量发送的请求完成信息,向重排序缓存发送退出信息或者提交信息。
本发明实施例中,还提供了一种计算机程序指令,所述计算机程序指令在被处理器执行时实现上述实施例中任一项所述的方法。
本发明实施例中,还提供了一种计算机可读存储介质,其上存储计算机程序指令,所述计算机程序指令在被处理器执行时实现上述实施例中任一项所述的方法。
本发明实施例提供了一种芯片,包括存储器和处理核,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理核执行以实现上述实施例中任一项所述的方法。
本发明实施例提供了一种板卡,所述板卡上包括所述芯片。
本发明实施例提供了一种服务器,所述服务器上包括所述板卡。
如本领域技术人员将意识到的,本发明实施例的各个方面可以被实现为系统、方法或计算机程序产品。因此,本发明实施例的各个方面可以采取如下形式:完全硬件实施方式、完全软件实施方式(包括固件、常驻软件、微代码等)或者在本文中通常可以都称为“电路”、“模块”或“系统”的将软件方面与硬件方面相结合的实施方式。此外,本发明实施例的各个方面可以采取如下形式:在一个或多个计算机可读介质中实现的计算机程序产品,计算机可读介质具有在其上实现的计算机可读程序代码。
可以利用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是如(但不限于)电子的、磁的、光学的、电磁的、红外的或半导体系统、设备或装置,或者前述的任意适当的组合。计算机可读存储介质的更具体的示例(非穷尽列举)将包括以下各项:具有一根或多根电线的电气连接、便携式计算机软盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪速存储器)、光纤、便携式光盘只读存储器(CD-ROM)、光存储装置、磁存储装置或前述的任意适当的组合。在本发明实施例的上下文中,计算机可读存储介质可以为能够包含或存储由指令执行系统、设备或装置使用的程序或结合指令执行系统、设备或装置使用的程序的任意有形介质。
计算机可读信号介质可以包括传播的数据信号,所述传播的数据信号具有在其中如在基带中或作为载波的一部分实现的计算机可读程序代码。这样的传播的信号可以采用多种形式中的任何形式,包括但不限于:电磁的、光学的或其任何适当的组合。计算机可读信号介质可以是以下任意计算机可读介质:不是计算机可读存储介质,并且可以对由指令执行系统、设备或装置使用的或结合指令执行系统、设备或装置使用的程序进行通信、传播或传输。
可以使用包括但不限于无线、有线、光纤电缆、RF等或前述的任意适当组合的任意合适的介质来传送实现在计算机可读介质上的程序代码。
用于执行针对本发明实施例各方面的操作的计算机程序代码可以以一种或多种编程语言的任意组合来编写,所述编程语言包括:面向对象的编程语言如Java、Smalltalk、C++等;以及常规过程编程语言如“C”编程语言或类似的编程语言。程序代码可以作为独立软件包完全地在用户计算机上、部分地在用户计算机上执行;部分地在用户计算机上且部分地在远程计算机上执行;或者完全地在远程计算机或服务器上执行。在后一种情况下,可以将远程计算机通过包括局域网(LAN)或广域网(WAN)的任意类型的网络连接至用户计算机,或者可以与外部计算机进行连接(例如通过使用因特网服务供应商的因特网)。
上述根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图图例和/或框图描述了本发明实施例的各个方面。将要理解的是,流程图图例和/或框图的每个块以及流程图图例和/或框图中的块的组合可以由计算机程序指令来实现。这些计算机程序指令可以被提供至通用计算机、专用计算机或其它可编程数据处理设备的处理器,以产生机器,使得(经由计算机或其它可编程数据处理设备的处理器执行的)指令创建用于实现流程图和/或框图块或块中指定的功能/动作的装置。
还可以将这些计算机程序指令存储在可以指导计算机、其它可编程数据处理设备或其它装置以特定方式运行的计算机可读介质中,使得在计算机可读介质中存储的指令产生包括实现在流程图和/或框图块或块中指定的功能/动作的指令的制品。
计算机程序指令还可以被加载至计算机、其它可编程数据处理设备或其它装置上,以使在计算机、其它可编程设备或其它装置上执行一系列可操作步骤来产生计算机实现的过程,使得在计算机或其它可编程设备上执行的指令提供用于实现在流程图和/或框图块或块中指定的功能/动作的过程。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于RISC-V指令集的向量读写指令的处理方法,其特征在于,该方法包括:
获取向量读写指令,其中,所述向量读写指令用于从内存中读取数据写入向量寄存器,或者用于从向量寄存器中读取数据写入内存;
将所述向量读写指令按照设定的粒度生成至少一个读写指令分量;
根据所述读写指令分量获取对应的写回数据;
响应于获取到与所述读写指令分量的查询地址相同的第一候选请求,将所述写回数据写入到所述读写指令分量以及所述第一候选请求分别指示的向量寄存器中;或者,
响应于与所述读写指令分量的写入地址相同的第二候选请求,将所述写回数据写入所述读写指令分量以及所述第二候选请求共同对应的内存中。
2.如权利要求1所述的方法,其特征在于,所述将所述向量读写指令按照设定的粒度生成至少一个读写指令分量,具体包括:
将所述向量读写指令按照高速缓存行的大小生成至少一个读写指令分量,其中,所述每个读写指令分量中包含独立片段标记,所述独立片段标记用于判断所述读写指令分量所要访问的数据是否获取。
3.如权利要求2所述的方法,其特征在于,该方法还包括:
获取所述读写指令分量所要访问的数据;
响应于已获取的数据的长度小于一个高速缓存行的长度,将所述获取的数据进行拼接补位,将补位后的数据确定为写回数据,其中,补位后的数据的长度等于所述高速缓存行的长度;或者,
响应于所述已获取的数据的长度等于一个高速缓存行的长度,将所述获取的数据确定为写回数据。
4.如权利要求3所述的方法,其特征在于,所述拼接补位包括前置补位和后置补位。
5.如权利要求2所述的方法,其特征在于,该方法还包括:
获取所述读写指令分量所要写回的数据,其中,已获取的数据的长度等于一个高速缓存行的长度;
响应于所述已获取的数据的长度大于需要写回的数据的长度,将所述已获取的数据进行切割,将所述需要写回的数据的长度对应的已获取的数据确定为写回数据;或者,
响应于所述已获取的数据的长度等于需要写回的数据的长度,将所述获取的数据确定为写回数据。
6.如权利要求5所述的方法,其特征在于,所述切割包括前置切割和后置切割。
7.如权利要求2所述的方法,其特征在于,所述每个读写指令分量中包含独立片段标记的格式和长度相同。
8.如权利要求1所述的方法,其特征在于,该方法还包括:
所述读写指令分量完成后发送请求完成信息。
9.如权利要求8所述的方法,其特征在于,该方法还包括:
响应于接收到所述向量读写指令生成的每个所述读写指令分量发送的请求完成信息,向重排序缓存发送退出信息或者提交信息。
10.一种基于RISC-V指令集的读写指令的处理装置,其特征在于,该装置包括:
获取单元,用于获取向量读写指令,其中,所述向量读写指令用于从内存中读取数据写入向量寄存器,或者用于从向量寄存器中读取数据写入内存;
生成单元,用于将所述向量读写指令按照设定的粒度生成至少一个读写指令分量;
所述获取单元还用于,根据所述读写指令分量获取对应的写回数据;
处理单元,响应于获取到与所述读写指令分量查询地址相同的第一候选请求,用于将所述写回数据写入到所述读写指令分量以及所述第一候选请求分别指示的向量寄存器中;或者,
响应于与所述读写指令分量写入地址相同的第二候选请求,将所述写回数据写入所述读写指令分量以及所述第二候选请求共同对应的内存中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210602866.4A CN117194283A (zh) | 2022-05-30 | 2022-05-30 | 基于risc-v指令集的向量读写指令的处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210602866.4A CN117194283A (zh) | 2022-05-30 | 2022-05-30 | 基于risc-v指令集的向量读写指令的处理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117194283A true CN117194283A (zh) | 2023-12-08 |
Family
ID=88992871
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210602866.4A Pending CN117194283A (zh) | 2022-05-30 | 2022-05-30 | 基于risc-v指令集的向量读写指令的处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117194283A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117827284A (zh) * | 2024-03-04 | 2024-04-05 | 芯来智融半导体科技(上海)有限公司 | 向量处理器访存指令处理方法、系统、设备及存储介质 |
-
2022
- 2022-05-30 CN CN202210602866.4A patent/CN117194283A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117827284A (zh) * | 2024-03-04 | 2024-04-05 | 芯来智融半导体科技(上海)有限公司 | 向量处理器访存指令处理方法、系统、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5787629B2 (ja) | マシンビジョン用マルチプロセッサシステムオンチップ | |
US6336168B1 (en) | System and method for merging multiple outstanding load miss instructions | |
US6038646A (en) | Method and apparatus for enforcing ordered execution of reads and writes across a memory interface | |
US7243200B2 (en) | Establishing command order in an out of order DMA command queue | |
EP0514024B1 (en) | Method and apparatus for an improved memory architecture | |
US8190825B2 (en) | Arithmetic processing apparatus and method of controlling the same | |
JP2012038293A5 (zh) | ||
JPH06318177A (ja) | キャッシュ・ミス・ペナルティを減少させる方法、装置及びコンピュータ・システム | |
WO2006072064A2 (en) | System and method for cache coherency in a cache with different cache location lengths | |
US7069394B2 (en) | Dynamic data routing mechanism for a high speed memory cloner | |
CN100530141C (zh) | 用于互连网络上高效的有序储存的方法和装置 | |
JP2575219B2 (ja) | データ処理システム及びその命令実行を促進する方法 | |
CN114238167B (zh) | 信息预取方法、处理器、电子设备 | |
CN117194283A (zh) | 基于risc-v指令集的向量读写指令的处理方法 | |
US20200371827A1 (en) | Method, Apparatus, Device and Medium for Processing Data | |
JP4990262B2 (ja) | バッファ装置 | |
CN116820579A (zh) | 访存指令的调度方法、装置、电子设备和存储介质 | |
EP4124963A1 (en) | System, apparatus and methods for handling consistent memory transactions according to a cxl protocol | |
US11275589B2 (en) | Method for managing the supply of information, such as instructions, to a microprocessor, and a corresponding system | |
US20110083030A1 (en) | Cache memory control device, cache memory device, processor, and controlling method for storage device | |
US20090327614A1 (en) | Cache tentative read buffer | |
EP0271187B1 (en) | Split instruction and operand cache management | |
US6928524B2 (en) | Data processing system with naked cache line write operations | |
JPH05158793A (ja) | 並列キャッシュメモリ | |
JP2001229074A (ja) | メモリ制御装置と情報処理装置及びメモリ制御チップ |
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 |