首页> 中国专利> 一种基于RISC-V协处理器的数据处理方法及系统

一种基于RISC-V协处理器的数据处理方法及系统

摘要

本申请公开了一种基于RISC‑V协处理器的数据处理方法及系统,该方法包括:当接收到预设使能指令后,基于第一矩阵读取指令从存储单元中读取第一稀疏矩阵的非零数据写入第一存取存储器;根据第二矩阵读取指令从存储单元中读取第二稀疏矩阵中非零数据写入第二存取存储器;在获取到读取结束指令后,从第一存取存储器和第二存取存储器中提取非零数据,并基于数据对应的行列号信息进行稀疏矩阵的乘积运算,得到运算结果;对运算结果进行存储,并更新对应寄存器的标志位,以便CPU读取所述运算结果。由上可知,本申请可在CPU指令层面控制硬件实现稀疏矩阵乘积计算,避免了传统的软硬件交互方式,显著提高了稀疏矩阵乘积的计算效率。

著录项

  • 公开/公告号CN112306660A

    专利类型发明专利

  • 公开/公告日2021-02-02

    原文格式PDF

  • 申请/专利号CN202011225885.7

  • 发明设计人 张贞雷;刘同强;周玉龙;

    申请日2020-11-05

  • 分类号G06F9/48(20060101);

  • 代理机构11227 北京集佳知识产权代理有限公司;

  • 代理人王晓坤

  • 地址 250001 山东省济南市自由贸易试验区济南片区浪潮路1036号浪潮科技园S01楼35层

  • 入库时间 2023-06-19 09:46:20

说明书

技术领域

本申请涉及数据处理技术领域,更具体地说,涉及一种基于RISC-V协处理器的数据处理方法及系统。

背景技术

稀疏矩阵几乎存在于所有科学工程计算领域中,包括图像处理、边缘计算等热门领域。传统提升稀疏矩阵计算性能的方式,可通过提高CPU的性能,或利用纯硬件实现。然而,现今CPU的性能已逼近基线,很难从CPU层面实现提升计算性能的目的。而如果用纯硬件实现时,需要从软件算法中提取出矩阵计算的数据,再传递给硬件,当硬件计算完成后,再反馈给软件算法。同时在该方式下,若硬件采用专用芯片实现,则软硬件交互将会更加复杂;若硬件采用FPGA实现,受FPGA的频率限制,硬件模块的频率也不会很高。

因此,如何提供一种可行的提升稀疏矩阵计算性能的方案是本领域技术人员需要解决的问题。

发明内容

本申请的目的在于提供一种基于RISC-V协处理器的数据处理方法及系统,提高了稀疏矩阵乘积的计算效率。

为实现上述目的,本申请提供了一种基于RISC-V协处理器的数据处理方法,包括:

当接收到预设使能指令后,基于第一矩阵读取指令从存储单元中读取第一稀疏矩阵的非零数据,并写入第一存取存储器中;

根据第二矩阵读取指令从所述存储单元中读取第二稀疏矩阵中的非零数据,并写入第二存取存储器中;

在获取到表征非零数据读取完成的读取结束指令后,依次从所述第一存取存储器和所述第二存取存储器中提取非零数据,并基于数据对应的行列号信息进行稀疏矩阵的乘积运算,得到运算结果;

对所述运算结果进行存储,并更新对应寄存器的标志位用于标志存在待读取的数据,以便CPU读取所述运算结果。

可选的,所述当接收到预设使能指令后,基于第一矩阵读取指令从存储单元中读取第一稀疏矩阵的非零数据,并写入第一存取存储器中,包括:

当接收到预设使能指令后,根据第一矩阵读取指令中的行列号地址信息从存储单元中读取第一稀疏矩阵中第一类非零数据的行列号信息;

根据所述第一矩阵读取指令中的数值地址信息从所述存储单元中读取所述第一类非零数据的数值信息;

将所述第一类非零数据的行列号信息和数值信息组合生成第一目标数,并将所述第一目标数存入所述第一存取存储器中。

可选的,所述根据第二矩阵读取指令从所述存储单元中读取第二稀疏矩阵中的非零数据,并写入第二存取存储器中,包括:

根据第二矩阵读取指令中的行列号地址信息从存储单元中读取第二稀疏矩阵中第二类非零数据的行列号信息;

根据所述第二矩阵读取指令中的数值地址信息从所述存储单元中读取所述第二类非零数据的数值信息;

将所述第二类非零数据的行列号信息和数值信息组合生成第二目标数,并将所述第二目标数存入所述第二存取存储器中。

可选的,所述对所述运算结果进行存储,并更新对应寄存器的标志位用于标志存在待读取的数据,以便CPU读取所述运算结果,包括:

将第一寄存器的标志位置为第一预设数值,并将所述运算结果中的行列号信息写入第二寄存器中,将所述运算结果的具体数值写入第三寄存器中;所述第一寄存器的标志位用于标志所述第二寄存器和所述第三寄存器中存在待读取的数据。

可选的,所述在获取到表征非零数据读取完成的读取结束指令后,依次从所述第一存取存储器和所述第二存取存储器中提取非零数据,包括:

在获取到表征非零数据读取完成的读取结束指令后,从所述第一存取存储器中提取一行的第一目标非零数据;

基于提取的所述目标非零数据的行列号信息,确定在所述第二稀疏矩阵中需要读取的第二目标非零数据的列号;

根据所述列号从所述第二存取存储器中提取对应的第二目标非零数据。

可选的,所述基于数据对应的行列号信息进行稀疏矩阵的乘积运算,得到运算结果,包括:

将所述第一目标非零数据和所述第二目标非零数据输入乘积累加模块中;

当所述第一目标非零数据的数值和所述第二目标非零数据的数值相等时,将对应的非零数据相乘并对所有乘积进行累加,得到所述运算结果。

为实现上述目的,本申请提供了一种基于RISC-V协处理器的数据处理系统,包括:

第一读取模块,用于当接收到预设使能指令后,基于第一矩阵读取指令从存储单元中读取第一稀疏矩阵的非零数据,并写入第一存取存储器中;

第二读取模块,用于根据第二矩阵读取指令从所述存储单元中读取第二稀疏矩阵中的非零数据,并写入第二存取存储器中;

乘积运算模块,用于在获取到表征非零数据读取完成的读取结束指令后,依次从所述第一存取存储器和所述第二存取存储器中提取非零数据,并基于数据对应的行列号信息进行稀疏矩阵的乘积运算,得到运算结果;

结果存储模块,用于对所述运算结果进行存储,并更新对应寄存器的标志位用于标志存在待读取的数据,以便CPU读取所述运算结果。

可选的,所述第一读取模块,包括:

行列号读取单元,用于当接收到预设使能指令后,根据第一矩阵读取指令中的行列号地址信息从存储单元中读取第一稀疏矩阵中第一类非零数据的行列号信息;

数值读取单元,用于根据所述第一矩阵读取指令中的数值地址信息从所述存储单元中读取所述第一类非零数据的数值信息;

数据存储单元,用于将所述第一类非零数据的行列号信息和数值信息组合生成第一目标数,并将所述第一目标数存入所述第一存取存储器中。

可选的,所述结果存储模块,用于:将第一寄存器的标志位置为第一预设数值,并将所述运算结果中的行列号信息写入第二寄存器中,将所述运算结果的具体数值写入第三寄存器中;所述第一寄存器的标志位用于标志所述第二寄存器和所述第三寄存器中存在待读取的数据。

可选的,所述乘积运算模块,包括:

第一提取单元,用于在获取到表征非零数据读取完成的读取结束指令后,从所述第一存取存储器中提取一行的第一目标非零数据;

列号确定单元,用于基于提取的所述目标非零数据的行列号信息,确定在所述第二稀疏矩阵中需要读取的第二目标非零数据的列号;

第二提取单元,用于根据所述列号从所述第二存取存储器中提取对应的第二目标非零数据。

通过以上方案可知,本申请提供的一种基于RISC-V协处理器的数据处理方法,包括:当接收到预设使能指令后,基于第一矩阵读取指令从存储单元中读取第一稀疏矩阵的非零数据,并写入第一存取存储器中;根据第二矩阵读取指令从所述存储单元中读取第二稀疏矩阵中的非零数据,并写入第二存取存储器中;在获取到表征非零数据读取完成的读取结束指令后,依次从所述第一存取存储器和所述第二存取存储器中提取非零数据,并基于数据对应的行列号信息进行稀疏矩阵的乘积运算,得到运算结果;对所述运算结果进行存储,并更新对应寄存器的标志位用于标志存在待读取的数据,以便CPU读取所述运算结果。由上可知,本申请利用RISC-V协处理器自身具备的易扩展指令的特性,设计CPU层面的协处理器,可在CPU指令层面控制硬件实现稀疏矩阵乘积计算,避免了传统的软硬件交互方式,显著提高了稀疏矩阵乘积的计算效率。

本申请还公开了一种基于RISC-V协处理器的数据处理系统,同样能实现上述技术效果。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例公开的一种基于RISC-V协处理器的数据处理方法的流程图;

图2为本申请实施例公开的一种适用于基于RISC-V协处理器的数据处理方法的系统架构图;

图3为本申请实施例公开的一种基于RISC-V协处理器的数据处理系统的结构图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请实施例公开了一种基于RISC-V协处理器的数据处理方法,提高了稀疏矩阵乘积的计算效率。

参见图1所示,本申请实施例公开的一种基于RISC-V协处理器的数据处理方法包括:

S101:当接收到预设使能指令后,基于第一矩阵读取指令从存储单元中读取第一稀疏矩阵的非零数据,并写入第一存取存储器中;

本申请实施例中,当RISC-V协处理器接收到预设使能指令后,即准备开始工作,并基于第一矩阵读取指令从存储单元中读取第一稀疏矩阵的非零数据,将读取的非零数据写入第一存取存储器中。RISC-V协处理器,即RISC-FIVE,是基于精简指令集计算机(RISC)原理建立的开放指令集架构,V表示为第五代RISC。软件程序在编译之后,可产生预设使能指令,该指令被RISC-V协处理器中的指令解析模块解析后,协处理器即可准备开始开始工作。

需要指出的是,本实施例在接收到预设使能指令之后,可以对用于存储计算结果的寄存器进行标志位的更新,用于标志协处理器处于计算过程中,此时不可从该寄存器中读取计算结果。

作为一种具体的实施方式,上述基于第一矩阵读取指令从存储单元中读取第一稀疏矩阵的非零数据,并写入第一存取存储器中的过程可以具体包括:当接收到预设使能指令后,根据第一矩阵读取指令中的行列号地址信息从存储单元中读取第一稀疏矩阵中第一类非零数据的行列号信息;根据第一矩阵读取指令中的数值地址信息从存储单元中读取第一类非零数据的数值信息;将第一类非零数据的行列号信息和数值信息组合生成第一目标数,并将第一目标数存入第一存取存储器中。

S102:根据第二矩阵读取指令从所述存储单元中读取第二稀疏矩阵中的非零数据,并写入第二存取存储器中;

本步骤中,可以根据第二矩阵读取指令从存储单元中读取第二稀疏矩阵中的非零数据,并将读取到的非零数据写入第二存取存储器中。具体地,可以根据第二矩阵读取指令中的行列号地址信息从存储单元中读取第二稀疏矩阵中第二类非零数据的行列号信息;根据第二矩阵读取指令中的数值地址信息从存储单元中读取第二类非零数据的数值信息;将第二类非零数据的行列号信息和数值信息组合生成第二目标数,并将第二目标数存入第二存取存储器中。

S103:在获取到表征非零数据读取完成的读取结束指令后,依次从所述第一存取存储器和所述第二存取存储器中提取非零数据,并基于数据对应的行列号信息进行稀疏矩阵的乘积运算,得到运算结果;

可以理解的是,当RISC-V协处理器获取到表征非零数据读取完成的读取结束指令之后,表示可以展开稀疏矩阵的乘积运算,即可从第一存取存储器和第二存取存储器中提取相应的非零数据,并基于数据的行列号信息进行矩阵乘积运算,得到对应的运算结果。

在一种优选的实施方式中,上述在获取到表征非零数据读取完成的读取结束指令后,依次从所述第一存取存储器和所述第二存取存储器中提取非零数据的过程可以包括:在获取到表征非零数据读取完成的读取结束指令后,从第一存取存储器中提取一行的第一目标非零数据;基于提取的目标非零数据的行列号信息,确定在第二稀疏矩阵中需要读取的第二目标非零数据的列号;根据列号从第二存取存储器中提取对应的第二目标非零数据。由此,可以避免对第二稀疏矩阵中非零数据的遍历过程,直接根据第一稀疏矩阵中非零数据的行列号信息提取所需列的数据即可,加快了数据处理速度。

具体地,在基于数据对应的行列号信息进行稀疏矩阵的乘积运算得到运算结果时,可以先将上述提取的第一目标非零数据和第二目标非零数据输入乘积累加模块中,当第一目标非零数据的数值和第二目标非零数据的数值相等时,将对应的非零数据相乘并对所有乘积进行累加,得到稀疏矩阵对应的运算结果。也即,矩阵计算过程为:设矩阵

S104:对所述运算结果进行存储,并更新对应寄存器的标志位用于标志存在待读取的数据,以便CPU读取所述运算结果。

在得到稀疏矩阵的运算结果之后,可以对其进行保存,并通过更新对应寄存器的标志位以便CPU获知寄存器中存在待读取的数据,进而可从寄存器中读取稀疏矩阵的运算结果。

在具体实施中,可以先将第一寄存器的标志位置为第一预设数值,并将运算结果中的行列号信息写入第二寄存器中,将运算结果的具体数值写入第三寄存器中;其中,上述第一寄存器的标志位用于标志第二寄存器和第三寄存器中存在待读取的数据。

通过以上方案可知,本申请提供的一种基于RISC-V协处理器的数据处理方法,包括:当接收到预设使能指令后,基于第一矩阵读取指令从存储单元中读取第一稀疏矩阵的非零数据,并写入第一存取存储器中;根据第二矩阵读取指令从所述存储单元中读取第二稀疏矩阵中的非零数据,并写入第二存取存储器中;在获取到表征非零数据读取完成的读取结束指令后,依次从所述第一存取存储器和所述第二存取存储器中提取非零数据,并基于数据对应的行列号信息进行稀疏矩阵的乘积运算,得到运算结果;对所述运算结果进行存储,并更新对应寄存器的标志位用于标志存在待读取的数据,以便CPU读取所述运算结果。由上可知,本申请利用RISC-V协处理器自身具备的易扩展指令的特性,设计CPU层面的协处理器,可在CPU指令层面控制硬件实现稀疏矩阵乘积计算,避免了传统的软硬件交互方式,显著提高了稀疏矩阵乘积的计算效率。

下面通过一种具体的实施场景对本申请实施例提供的基于RISC-V协处理器的数据处理方法进行介绍。具体地,本申请实施例利用RISC-V协处理器本身具有的易扩展指令的特性,设计CPU层面的协处理器,在编译器层面生成特定的用于协处理器的指令,添加到传统的CPU指令,进而在CPU指令层通过硬件实现稀疏矩阵乘积。而CPU芯片的主频普遍很高,由此本实施例避免了传统方式中的软硬件交互,极大提高了稀疏矩阵乘积的效率。并且RISC-V协处理器本身具有开源的特性,可以进行自主设计,因此本实施例提供的方案在提高效率的基础上还具备自主可控的优势,在边缘计算、图像处理,尤其是实时性要求较高的场景下,具有广阔的应用场景。

首先对本申请实施例设计的32位RISC-V协处理器指令的编码格式进行介绍,具体可参考下表1所示:

表1

其中,Opcode[6:0],用于根据opcode编码表确定属于custom0-3中的哪一组指令类型;rd[4:0],指目标寄存器;xs1,xs2,rd(各1bit),分别表示该指令是否需要读取源寄存器rs1和rs2及写回目标寄存器rd,值为1,则表示需要,值为0则表示不需要;rs1[4:0],表示源寄存器1;rs2[4:0],表示源寄存器2;funct7[6:0],表示额外的编码空间,由此一个custom指令组(0-3)最多对应128条扩展指令。

下面对本申请实施例设计的用于协处理器的指令进行介绍,具体可参考下表2所示:

表2

(接上表)

参见图2所示,本实施例提供了一种适用于基于RISC-V协处理器的数据处理方法的系统架构,其中包括CPU内部的执行单元(execute unit,EXU),写回单元(write back,WB),存储单元(Load/Store unit,LSU)。RISC-V协处理器与执行单元、存储单元和写回单元之间的接口均可采用ROCC(Rocket Custom Coprocesser)接口。

基于图2所提供的系统架构,本实施例提供的基于RISC-V协处理器的数据处理方法的具体流程可包括:

步骤1:软件程序在编译之后产生SETUP指令,该指令将目标寄存器4写0,当INS_ANA(指令解析模块)解析SETUP指令后,RISC-V协处理器准备开始工作。

步骤2:指令解析模块解析并运行A_INFO_PASS指令。

步骤2.1:根据操作数rs1的地址信息,从存储单元中读取对应的数据,该数据高16bits(可修改)为当前非零数据在矩阵A中的行号A_LINE_NUM,低16bits(可修改)为当前非零数据在矩阵A中的列号A_ROW_NUM,同时将当前非零数据的行/列号信息输入至控制模块;

步骤2.2:根据操作数rs2的地址信息,从存储单元读取对应的数据,该数据为当前非零数据的具体数值,默认32位;

步骤2.3:同时将当前非零数据的行/列号信息及数据信息组合成一个数A_INFO={A_LINE_NUM,A_ROW_NUM,A_DATA}并输入至RAM_A中。

需要指出的是,A_INFO_PASS指令是修改后的编译器根据A矩阵中具体的信息产生的,即存在多少个非零A数据,就会产生对应次数的该指令。

步骤3:指令解析模块解析并运行B_INFO_PASS指令。

步骤3.1:根据操作数rs1的地址信息,从存储单元中读取对应的数据,该数据中高16bits为当前非零数据在矩阵B中的行号(B_LINE_NUM),低16bits为当前非零数据在矩阵B中的列号(B_ROW_NUM),同时将当前非零数据的行/列号信息输入至控制模块;

步骤3.2:根据操作数rs2的地址信息,从存储单元读取对应的数据,该数据为当前非零数据的具体数值,默认32位;

步骤3.3:同时将当前非零数据的行/列号信息及数据信息组合成一个数B_INFO={B_LINE_NUM,B_ROW_NUM,B_DATA}并输入至RAM_B中。

需要指出的是,B_INFO_PASS指令是修改后的编译器根据B矩阵中具体的信息产生的,即存在多少个非零B数据,就会产生对应次数的该指令。

步骤4:运行INFO_PASS_END指令,该指令被指令解析模块解析后,RISC-V协处理器即可获知当前A/B矩阵的非零数据已传递完毕。

步骤5:RISC-V协处理器开始执行计算过程。

步骤5.1:首先读取RAM_A中一行的非零数据,即连续读取RAM_A,获得A_INFO,直到读出的A_INFO中的A_LINE_NUM字段不一致;

例如,若第一次读出A_INFO为{5,2,10},第二次读出的是{5,7,3},第三次读出的是{6,8,5},则表示前两次读出的是一行的数据,即A矩阵中第5行第2列和第5行第7列的数据是非零的,可以分别表示为cur_A_line_num,cur_A_row_num_0,cur_A_row_num_1……,非零数据分别为10,3),同时暂存第三次下一行的读出结果。

步骤5.2:利用地址产生模块,生成需要读取的RAM_B的地址;

由于指令解析模块已经将非零数据的行/列号信息传递给了控制模块,进而控制模块需要将行列号传递给地址产生模块,并在B矩阵找到对应数据的位置。例如,根据上述矩阵A的非零数据得知,矩阵A的非零数据为第5行第2列和第5行第7列的数据,因此需要在B矩阵中找到第2行以及第7行中为非零数据的列,也即,需要从RAM_B中找到B_LINE_NUM为cur_A_row_num_0或者是cur_A_row_num_1……的所有列。由此不需要遍历B矩阵中所有的列,可以极大地加快查询速度,进而加快稀疏矩阵的乘积计算。

步骤5.3:读取RAM_B的返回值B_INFO,将与B_ROW_NUM字段一致的B_INFO和A_INFO输入到乘积累加模块,当A_INFO中A_ROW_NUM和B_INFO中的B_LINE_NUM相等时,将对应的非零数据相乘,然后将多次的乘积进行累加,并将最终的乘积累加结果RESULT_DATA写入存储模块中,并且为写入的数据添加行列号信息,即包括行列号信息和具体的数值。例如,行号为A_INFO的A_LINE_NUM,列号为B_INFO的B_ROW_NUM,最终写入存储模块的结果数据为RESULT_INFO={A_LINE_NUM,B_ROW_NUM,RESULT_DATA}。

步骤5.4:更新B_INFO,即更新B_ROW_NUM字段,重复5.3,直至读返回的B_INFO全部输入至MUL_ADD模块,并完成计算。

例如,若RAM_B的返回值B_INFO中第3列第2行和第3列第7行为非零,第5列第2行为非零,第11列第7行为非零数据,则顺序输入第3列的两个非零数据、第5列的1个非零数据、第11列的1个非零数据至乘积累加模块进行计算。

步骤5.5:跳回至5.1,读取A矩阵中新一行的非零数据,重复步骤5.2-5.4。

步骤6:当存储模块有数据时,通过回写单元将CPU内部的目标寄存器1的标志位置为1,同时将计算结果的行/列信息写入目标寄存器2,具体可利用高16位存行号,低16位存列号,并将计算结果写入目标寄存器3。后续CPU可以运行RESULT_RD_READY指令以查询目标寄存器。当返回值为1时,即表示存在数据可读取,可运行RESULT_RD_INFO和RESULT_RD_DATA指令。当存储模块的数据传递完成之后,可通过写回单元将目标寄存器1、2、3置0。

然后通过WB模块,将目标寄存器4写1

步骤7:运行RESULT_RD_INFO指令,读取计算结果的行/列号信息。

步骤8:运行RESULT_RD_DATA指令,读取计算结果的具体数值。

步骤9:若RESULT_RD_END指令对应的返回值为1时,则表示计算结果已全部读完,当前AxB的计算过程结束,可进行下一组矩阵的计算。

本申请实施例中,利用RISC-V协处理器易扩展指令的特点,设计指令SETUP,A_INFO_PASS,B_INFO_PASS,INFO_PASS_END,RESULT_RD_REA DY,RESULT_RD_INFO,RESULT_RD_DATA,RESULT_RD_END,实现稀疏矩阵在CPU指令层面的硬件实现,极大地加快了稀疏矩阵的处理速度,满足实时计算的要求。

下面对本申请实施例提供的一种基于RISC-V协处理器的数据处理系统进行介绍,下文描述的一种基于RISC-V协处理器的数据处理系统与上文描述的一种基于RISC-V协处理器的数据处理方法可以相互参照。

参见图3所示,本申请实施例提供的一种基于RISC-V协处理器的数据处理系统包括:

第一读取模块201,用于当接收到预设使能指令后,基于第一矩阵读取指令从存储单元中读取第一稀疏矩阵的非零数据,并写入第一存取存储器中;

第二读取模块202,用于根据第二矩阵读取指令从所述存储单元中读取第二稀疏矩阵中的非零数据,并写入第二存取存储器中;

乘积运算模块203,用于在获取到表征非零数据读取完成的读取结束指令后,依次从所述第一存取存储器和所述第二存取存储器中提取非零数据,并基于数据对应的行列号信息进行稀疏矩阵的乘积运算,得到运算结果;

结果存储模块204,用于对所述运算结果进行存储,并更新对应寄存器的标志位用于标志存在待读取的数据,以便CPU读取所述运算结果。

关于上述模块201至204的具体实施过程可参考前述实施例公开的相应内容,在此不再进行赘述。

在上述实施例的基础上,作为一种优选实施方式,所述第一读取模块可以具体包括:

行列号读取单元,用于当接收到预设使能指令后,根据第一矩阵读取指令中的行列号地址信息从存储单元中读取第一稀疏矩阵中第一类非零数据的行列号信息;

数值读取单元,用于根据所述第一矩阵读取指令中的数值地址信息从所述存储单元中读取所述第一类非零数据的数值信息;

数据存储单元,用于将所述第一类非零数据的行列号信息和数值信息组合生成第一目标数,并将所述第一目标数存入所述第一存取存储器中。

在上述实施例的基础上,作为一种优选实施方式,所述结果存储模块可以具体用于:将第一寄存器的标志位置为第一预设数值,并将所述运算结果中的行列号信息写入第二寄存器中,将所述运算结果的具体数值写入第三寄存器中;所述第一寄存器的标志位用于标志所述第二寄存器和所述第三寄存器中存在待读取的数据。

在上述实施例的基础上,作为一种优选实施方式,所述乘积运算模块可以具体包括:

第一提取单元,用于在获取到表征非零数据读取完成的读取结束指令后,从所述第一存取存储器中提取一行的第一目标非零数据;

列号确定单元,用于基于提取的所述目标非零数据的行列号信息,确定在所述第二稀疏矩阵中需要读取的第二目标非零数据的列号;

第二提取单元,用于根据所述列号从所述第二存取存储器中提取对应的第二目标非零数据。

本申请利用RISC-V协处理器自身具备的易扩展指令的特性,设计CPU层面的协处理器,可在CPU指令层面控制硬件实现稀疏矩阵乘积计算,避免了传统的软硬件交互方式,显著提高了稀疏矩阵乘积的计算效率。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号