CN112667289B - 一种cnn推理加速系统、加速方法及介质 - Google Patents
一种cnn推理加速系统、加速方法及介质 Download PDFInfo
- Publication number
- CN112667289B CN112667289B CN202011519581.1A CN202011519581A CN112667289B CN 112667289 B CN112667289 B CN 112667289B CN 202011519581 A CN202011519581 A CN 202011519581A CN 112667289 B CN112667289 B CN 112667289B
- Authority
- CN
- China
- Prior art keywords
- instruction
- module
- vector
- register
- execution
- 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
- 230000001133 acceleration Effects 0.000 title claims abstract description 50
- 238000000034 method Methods 0.000 title claims description 25
- 239000013598 vector Substances 0.000 claims abstract description 247
- 238000013500 data storage Methods 0.000 claims abstract description 29
- 238000012545 processing Methods 0.000 claims abstract description 14
- 238000011176 pooling Methods 0.000 claims abstract description 7
- 238000007781 pre-processing Methods 0.000 claims abstract description 7
- 230000004913 activation Effects 0.000 claims abstract description 6
- 238000004590 computer program Methods 0.000 claims description 6
- 238000006243 chemical reaction Methods 0.000 claims description 5
- 238000009825 accumulation Methods 0.000 claims description 4
- 238000013527 convolutional neural network Methods 0.000 description 26
- 230000008569 process Effects 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 238000011161 development Methods 0.000 description 3
- 230000002457 bidirectional effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000011010 flushing procedure Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 101150103933 VMAC gene Proteins 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
Landscapes
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
本发明公开了一种CNN推理加速系统,包括指令操作模块、数据存储模块、IMC指令模块、向量指令模块和向量寄存器模块;指令操作模块存储指令,并将指令进行译码解析,将解析后的指令发送至IMC指令模块和向量指令模块;数据存储模块存储系统数据;IMC指令模块接收指令模块发送的解析后的指令,并执行图像预处理、激活处理和池化处理;向量指令模块,执行向量指令,将向量指令的执行结果写入向量寄存器模块中;向量寄存器模块存储执行向量指令的结果;本发明能够满足CNN加速的需求,并且还具有开放、模块化和可扩展的特点,此外在软件方面可以做二次开发构建完整的软件工具链,从而满足用户个性化的需求。
Description
技术领域
本发明涉及CNN推理加速领域,特别是涉及一种CNN推理加速系统、加速方法及介质。
背景技术
GPU(Graphics Processing Unit,图形处理器)单指令流多数据流的结构对矢量运算的支持较好,可以用来加速CNN(卷积神经网络,Convolutional Neural Networks)。但是GPU并不是为实现CNN加速专门设计的,运行CNN算法的能效较低。
ASIC(Application Specific Integrated Circuit,特殊应用集成电路)是为了满足特定的要求而定制的芯片,定制的特点有助于提高性能功耗比,基于ASIC实现CNN加速相比于GPU具有明显的能效优势,但是如果设计ASIC时采用无指令的方式则会导致灵活性不足且无法利用现有的软件生态。
目前业界占据市场份额最大的指令集是x86和ARM(Advanced RISC Machines,微处理器)指令集,x86架构在桌面和服务器领域占优,而ARM架构则在移动手持领域和嵌入式领域占优,x86和ARM都是受专利保护的商业指令集,使用这些指令集需要授权,在指令集发展过程中为了向下兼容导致现在的x86和ARM指令集已经比较复杂,此外用户难以对x86和ARM指令集进行自定义扩展从而满足个性化需求。
发明内容
本发明主要解决的是现有ASIC实现CNN加速会导致灵活性不足,无法利用现有软件生态,以及x86和ARM无法进行自定义扩展的问题。
为解决上述技术问题,本发明采用的一个技术方案是:提供一种CNN推理加速系统,包括:指令操作模块、数据存储模块、IMC指令模块、向量指令模块和向量寄存器模块;
所述指令操作模块存储指令,并将指令进行译码解析,将解析后的所述指令发送至所述IMC指令模块和所述向量指令模块;
所述数据存储模块存储系统数据;
所述IMC指令模块接收所述指令操作模块发送的解析后的所述指令,并执行图像预处理、激活处理和池化处理;
所述向量指令模块接收所述指令操作模块发送的解析后的所述指令,并执行向量指令,将所述向量指令的执行结果写入所述向量寄存器模块中;
所述向量寄存器模块存储所述执行向量指令的结果。
进一步,所述指令操作模块包括指令存储模块、取指令模块、译码模块和指令派遣模块;
所述指令存储模块存储所述指令;所述取指令模块从所述指令存储模块中读取所述指令,并发送给所述译码模块;所述译码模块接收所述取指令模块发送的所述指令,并将所述指令解析;所述指令派遣模块将解析后的所述指令发送至所述IMC指令模块和所述向量指令模块;
所述取指令模块包括地址生成模块和接口协议转换模块;所述地址生成模块生成所述指令的访问地址;所述接口协议转换模块将地址生成模块中接口进行转换并通过转换后的所述接口连接所述指令存储模块。
进一步,所述向量指令模块包括向量指令执行模块和向量指令回写模块;
所述向量指令执行模块执行所述指令派遣模块发送的解析后的所述指令;所述向量指令回写模块将所述向量指令执行模块执行所述指令的结果写入所述向量寄存器模块中。
进一步,所述向量指令执行模块包括装载存储模块和向量乘累加模块;
所述装载存储模块执行向量装载指令和向量存储指令;
所述向量乘累加模块中设有乘累加器,用于执行向量乘累加指令。
本发明还提供一种CNN推理加速系统的加速方法,包括以下步骤:所述取指令模块读取所述指令存储模块中存储的指令,并通过所述取指令模块中所述地址生成模块生成所述指令的访问地址,以及将所述指令发送给所述译码模块;
所述译码模块接收指令后,将所述指令进行解析,解析出的信息包括指令的类型、指令的操作数和控制指令执行的信息,并将解析后的信息发送至所述指令派遣模块;
所述指令派遣模块接收解析后的所述信息后,读取所述向量指令模块中状态,根据所述状态控制取指令与分发指令,并将指令分发至所述IMC指令模块和所述向量指令模块;
所述IMC指令模块执行图像预处理、激活处理和池化处理;所述向量指令模块执行分发的所述指令,并将执行的结果写入所述向量寄存器模块中。
进一步,所述通过所述取指令模块中所述地址生成模块生成所述指令的访问地址包括以下步骤:
判断是否为首次取指令,若是,则将取指令的地址设为起始地址;
若不是,则判断所述取指令模块取出的所述指令是否失效,若失效,则所述向量指令执行模块发送标志信号,所述标志信号中包含重新取指令的地址,根据重新取指令的地址,重新取指令;
若未失效,则判断取出的所述指令是否为分支跳转指令,若为所述分支跳转指令,则计算所述分支跳转指令中的参数;
若不为所述分支跳转指令,则判断所述指令的位宽是否小于所述指令存储模块的位宽,若小于所述指令存储模块的所述位宽,则根据所述位宽判断取出的所述指令的数量,并根据所述指令的数量判断是否包含下一条取出的指令,若不小于所述指令存储模块的位宽,则计算下一条取出的指令的地址。
进一步,所述将指令进行解析包括根据所述指令中的操作码判断指令的类型、操作数和操作数的类型;所述操作数的类型包含向量进行运算的数量和立即数;
所述指令的类型包括目录指令、装载存储指令和向量乘累加指令;
所述目录指令进行解析的信息包含目录指令的标志信号、配置状态和控制寄存器的向量长度的值和向量类型的值;
所述装载存储指令进行解析的信息包含向量装载指令的标志信号、向量存储指令的标志信号、寻址模式、寻址地址、向量元素的位宽、向量元素的数量、所述向量寄存器模块中负责所述向量装载指令的向量寄存器的标号和负责所述向量存储指令的向量寄存器的标号;
所述向量乘累加指令进行解析的信息包含向量乘累加指令的标志信号、向量运算的标志、所述向量寄存器模块中负责运算乘累加的向量寄存器的标号和负责存储执行结果的向量寄存器的标号。
进一步,所述读取向量指令模块中状态,根据所述状态控制取指令与分发指令包括以下步骤:若所述向量指令执行模块中正在执行所述指令,则获取所述向量执行模块的工作状态,若所述工作状态为忙状态,则不进行所述取指令和所述分发指令,若所述工作状态为闲状态,则进行所述取指令和所述分发指令。
进一步,所述向量指令模块执行分发的所述指令包括以下步骤:
计算存取一个向量寄存器需要访问数据存储模块的次数,以及需要存储的向量寄存器的个数;
若分发的所述指令为所述向量装载指令,则将所述向量指令模块中装载信号拉高;
执行所述向量装载指令,执行完成后,将所述装载信号拉低;
若分发的所述指令为所述向量存储指令,则将所述向量指令模块中存储信号拉高;
执行所述向量存储指令,执行完成后,将所述存储信号拉低;
若分发的所述指令为向量乘累加指令,则通过乘累加器进行乘累加运算,所述执行向量乘累加指令。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行上述的一种CNN推理加速系统的加速方法步骤。
本发明的有益效果是:
1、本发明所述的CNN推理加速系统使用RISC-V指令集中的向量扩展指令子集提供的向量计算能力可以满足CNN加速的需求,并且还具有开放、模块化和可扩展的特点且用户可以灵活的选择指令集。
2、本发明所述的CNN推理加速系统的加速方法通过读取不同的向量指令进行不同的操作,并且使用专用乘累加器的方式在满足算力要求的同时具有较强的灵活性,能够针对不同情况使用不同的乘累加器,更高效便捷的完成加速;
3、本发明所述的计算机可读存储介质能够通过软件代码自动对指令进行解析,且在软件方面可以基于RISC-V开源的编译器和开发工具做二次开发构建完整的软件工具链,从而满足用户个性化的需求。
附图说明
图1是本发明实施例1记载的CNN推理加速系统架构示意图;
图2是本发明实施例1记载的CNN推理加速系统中取指令模块示意图;
图3是本发明实施例2记载的CNN推理加速系统的加速方法流程图。
具体实施方式
下面结合附图对本发明的较佳实施例进行详细阐述,以使本发明的优点和特征能更易于被本领域技术人员理解,从而对本发明的保护范围做出更为清楚明确的界定。
在本发明的描述中,需要说明的是SRAM为静态随机存取存储器(Static Random-Access Memory,SRAM)是随机存取存储器的一种;
Cache存储器是电脑中为高速缓冲存储器,是位于CPU和主存储器DRAM(DynamicRandom Access Memory)之间,规模较小,但速度很高的存储器;
AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA3.0中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线;
IMC(Intelligent management center)是智能管理中心;
VALID/READY(有效/就绪)握手机制为双向流控机制,VALID/READY机制可以使发送接收双方都有能力控制传输速率;
发送方置高VALID(有效)信号表示发送方已经将数据,地址或者控制信息放到的写总线上,并保持;接收方置高READY(就绪)信号表示接收方已经做好接收的准备。
双向流控机制,指的是发送方通过VALID信号置起控制发送速度的同时,接收方也可以通过READY信号的置起与否控制接收速度,反压发送方的发送速度;
CSR(Control and Status Register,控制和状态寄存器);VL(vector length,向量长度)和vtype(vector type,向量类型);mask在此实施例中表示标志,根据向量乘累加指令vmacc标志来进行判断向量是否进行乘累加运算。
Bit(binary digit)是比特,表示信息的最小单位;vsetvli为目录;load_busy为装载信号,store_busy为存储信号;load/store装载/存储,VLEN为位宽。
本发明实施例包括:
实施例1:
见图1,本实施例提供一种CNN推理加速系统,包括:指令存储模块、取指令模块、译码模块、指令派遣模块、数据存储模块、IMC指令模块、向量指令模块和向量寄存器模块;
指令存储模块、取指令模块、译码模块、指令派遣模块、数据存储模块、IMC指令模块和向量指令模块之间采用AXCI总线进行连接,并通过VALID/READY握手机制进行交互;
指令存储模块存储指令,数据存储模块存储系统运行时产生的所有数据,都采用片上SRAM或cache存储器实现,指令存储模块的交互接口采用AXI接口,通过AXI接口连接AXI总线;
当系统中源码代码规模较少,运行量少时,控制简单,访问延时固定,指令存储模块采用SRAM;
当系统中源码代码规模较大,运行量大时,因为cache存储器存储空间较大,所以指令存储模块采用cache存储器;
本实施例中采用的数据存储模块和指令存储模块用SRAM实现。
取指令模块从指令存储模块中读取指令编码并传递给译码模块;
见图2,取指令模块中包含地址生成模块和接口协议转换模块;
地址生成模块生成下条指令的访问地址,具体包括以下步骤:
第一步,判断是不是启动之后首次取指令,如果是,就将指令地址设置为初始值(也就是指令存储的起始地址),如果不是,继续执行后续步骤计算指令地址;
第二步,因为取指令在执行指令的上一步,所以取指令模块得到的指令比执行的指令要新,在某些情况下执行完当前指令之后不会顺序执行取指模块取出的下一条指令(比如执行到了非法指令就需要跳转到异常处理程序去执行),此时相当于取指令模块取出的指令作废需要重新取指令,这就是所谓的流水线冲刷;如果需要流水线冲刷,则向量指令模块中的向量指令执行模块给出一个标志信号,并且将重新取指令的地址一并给出,此时取指模块就根据标志信号和地址得出新的取指地址;如果不需要流水线冲刷就继续执行后续步骤计算指令地址;
第三步,判断当前指令是否为分支跳转指令,分支跳转指令为下一条指令的地址根据分支预测的结果不同有不同的处理方式,因此单独处理(正常顺序取指是取完一条指令接着取下一条,前后指令的地址是连续的,分支跳转指令之后的取值地址可能不是连续的);分支跳转指令中会给出计算下一条指令需要的参数,根据参数计算即可;如果不是分支跳转指令继续执行后续步骤;
第四步,如果指令的位宽小于指令存储模块的数据位宽,读取一次指令存储模块得到的数据相当于包含了多条指令,访问一次指令存储模块可以取出多条指令,因此需要判断下一条指令是否已经被取出并缓存,如果是则不需要再次读取,否则需要重新计算下一条指令的地址。
以指令存储位宽是64bit,指令宽度是32bit为例,访问一次指令存储模块取出的64bit数据实际上是两条指令(这64bit数据会被缓存,不会丢失),第一次执行一个32bit对应的指令之后,另一个32bit可以不用从指令存储模块中读取而是直接拿来用;因此在这一步需要判断是否有必要从指令存储模块中读取指令,如果需要就将指令地址递增,这就是下一条指令的地址。
接口协议转换模块将地址生成模块中接口转换为AXCI接口并通过AXCI总线连接指令存储模块;
译码模块接收取指令模块发送的指令,并进行解析指令,解析出的信息包括指令的类型、指令的操作数和其他控制指令执行的信息,解析指令包括以下步骤:
指令中含有若干bit信息,其中指令中固定几个位置的bit信息为操作码信息;
根据指令中的操作码判断指令的类型,然后判断指令类型中需要操作数和类型,指令类型中的操作数的类型为向量进行运算的操作数量或立即数;
若为向量进行运算的操作数量,则访问指令类型解析出的其他控制指令执行的信息,通过其他控制指令执行的信息确定需要访问的向量寄存器;
若为立即数,则不用访问向量寄存器,直接进行解析结果;
指令的类型包括vsetvli目录指令,向量load/store装载/存储指令,向量乘累加指令vmacc;
vsetvli目录指令用于配置CSR寄存器的VL和Vtype,并将配置vl的值写入IMC指令模块的通用寄存器中,解析vsetvli目录指令需要解析出指令类型的标志信号dec_vsetvli、配置给CSR寄存器vl和vtype的值dec_csr_vl和dec_csr_vtype、IMC指令模块中通用寄存器的标号;
向量load/store装载/存储指令用于向量寄存器模块和数据存储模块间传递数据,从数据存储模块中读取数据存入向量寄存器模块或将向量寄存器模块中的数据写入数据存储模块,向量load/store指令需要解析出标志信号dec_rvv_load/dec_rvv_store、寻址模式、寻址stride地址、向量元素的位宽、向量元素的数量、在向量寄存器模块中负责load指令目的向量寄存器的标号和store指令源向量寄存器的标号;
向量乘累加指令vmacc用于完成两组向量之间的乘累加运算;vmacc指令需要解析出标志信号dev_rvv_vmacc、是否进行运算的标志mask以及负责乘累加的向量寄存器,也就是源寄存器和和负责存储执行结果的向量寄存器也就是目的寄存器的标号。
指令派遣模块接收译码模块解析后的指令,将指令分发给IMC指令模块和向量指令模块;
指令派遣模块的作用是将指令分发给向量指令模块中向量执行模块执行,但是向量执行模块可能正在执行上一条指令而无法执行别的指令,因此指令派遣模块需要了解向量执行模块的工作状态;向量指令执行模块的状态主要是表示是否有指令正在执行的忙状态或闲状态;取指令进程是指取指令模块是否可继续取下一条指令,若状态为忙状态,则取指令的进程不继续去下一条指令;若为闲状态,则取指令的进程继续取下一条指令。
因为指令存储模块和数据存储模块采用SRAM实现,所以对于两者的访问只能是串行的,因此当前如果有一条向量load/store指令正在执行则指令派遣模块需要阻塞后续向量load/store指令的分发,直到当前指令执行完成;
具体实现时向量执行单元会输出标志信号load_busy/store_busy给指令派遣模块,若标志信号地址为高则表示当前有load/store指令正在执行。
IMC指令模块中包括IMC指令执行模块、IMC指令回写模块和通用寄存器模块,并且采用开源项目代码,实现图像预处理、激活处理和池化处理等对算力要求不高的部分,通用寄存器模块中包含通用寄存器,通用寄存器的作用是的提示用户当前指令的执行到底有多少个向量元素参与。
指令派遣模块读取向量指令模块中状态,并根据状态控制取指令的进程;
向量寄存器模块中包括向量寄存器、源寄存器和目的寄存器,源寄存器为是存储输入数据的向量寄存器,目的寄存器为存储源寄存器运算结果的寄存器,其中向量寄存器的位宽可自定义,每个向量寄存器中有3个读端口,可以访问不同的寄存器,以及一个写端口,用于向量指令执行结果写回。
向量指令模块执行指令派遣模块传输来的指令并将指令的执行结果写入向量寄存器;
向量指令模块执行向量load/store指令和向量乘累加指令vmacc;
向量指令模块包括向量指令执行模块和向量指令写回模块;
向量指令执行模块中包含若干个CSR寄存器,若干CSR寄存器中包含VL寄存器和VTYPE寄存器;VL寄存器中存储了向量的长度,VTYPE寄存器存储了向量的类型;
向量指令执行的基本单位是向量元素,首先需要根据向量元素的数量和位宽确定参与指令执行的向量寄存器的数量,其中向量元素的数量由VL寄存器的vl决定,向量元素的位宽由vtype寄存器vtype中的字段sew决定,向量寄存器的个数vreg_num=ceil(vl*sew/VLEN)。
向量指令执行模块包括load-store装载存储模块和向量乘累加模块;
load-store装载存储模块执行向量load/store指令;
load-store装载存储模块执行load指令时,需要多次访问数据存储模块,当获取到数据为VLEN,则写入向量寄存器;其中VLEN为向量寄存器的位宽,当获取到的数据满足向量寄存器的位宽时,才将获取的数据写入向量寄存器中,
执行Store指令时,需要多次写入数据存储模块;向量寄存器的个数vreg_num=ceil(vl*sew/VLEN)
计算存取一个向量寄存器需要访问数据存储模块的次数cmd_num=VLEN/DW,DW为数据存储模块的位宽;
load指令的执行过程如下:
第一步,等待Load指令,收到load指令之后将load_busy信号拉高表示正在执行load指令;
第二步,向数据存储模块发出读请求,读请求被接收后将读地址递增;
第三步,等待接收数据存储模块返回的数据并计数,将收到的数据按照从低到高的顺序依次存入模块内部位宽为VLEN的寄存器wbck_data;
第四步,当收到cmd_num个返回数据时表示wbck_data已经存满,发出写回请求将wbck_data写入向量寄存器,此时暂停接收数据存储模块返回的数据,直到写回完成,将写回向量寄存器的标号递增,并写回递增标号后的向量寄存器;
第五步,返回第二步执行,并对重复执行的次数计数,当重复执行vreg_num次之后load指令执行完成,将load_busy拉低,此后不再发出读请求,直到下一次接收到load指令。
假如数据存储的宽度是32bit,也就是每个数据在存储空间中占用4byte,下一个数据相对于当前数据在数据存储中的地址增加4,地址递增就是指取下一个数据时需要在当前地址上加一个数据占用的存储空间(以byte为单位),比如当前从地址1000读了一个数据,读取下一个数据时地址需要变成1004;对返回数据计数是为了知道一共收到了多少个数据,计数值从0开始,每收到一个数计数值加一;当当前向量寄存器数据写满后,将向量寄存器的标号递增,写入下一个向量寄存器,重复执行,至将vreg_num个向量寄存器写满。
Store指令的执行过程与load指令的执行过程类型,具体过程如下:
第一步,等待store指令,当收到store指令之后将store_busy拉高表示正在执行store指令;
第二步,向数据存储模块发出写请求并计数,写出数据是向量寄存器vs3中从低位开始依次取出的DW位,写请求被接收后写地址递增;
第三步,当发出cmd_num个写请求之后当前向量寄存器的数据已经写入数据存储模块,将向量寄存器标号递增以获取下一个向量寄存器的数据;
第四步,返回第二步执行,并对重复执行的次数计数,执行vreg_num次之后store指令执行完成,将store_busy拉低,此后不再发出写请求,直到下一次接收到store指令。
向量乘累加模块执行向量乘累加指令vmacc;
Vmacc指令用于完成CNN卷积中的乘累加运算;进行乘累加运算时,进行乘累加运算的向量操作数最多可以从向量寄存器模块中提取8个向量寄存器作为输入,向量乘累加模块中有8*VLEN/sew个乘累加器,通过乘累加器可以实现乘累加运算,在运算时选择不同的VLEN可以获得不同的运算能力,VLEN越大,运算能力越好;
vmacc指令的执行过程如下:
第一步,等待接收到vmacc指令;
第二步,将参与运算的指令中的源操作数vs1、vs2和vd从向量寄存器中读出并存入模块内部的寄存器;
第三步,对所有的向量元素做乘累加运算vd=vd+vs1*vs2,将计算结果存入向量乘累加模块内部的寄存器;
第四步,将计算结果写回向量寄存器模块中的向量寄存器,因为一次只能写回一个向量寄存器,完成写回需要vreg_num个时钟周期;此时可以同时执行第二步加载下一次运算的操作数;
第五步,返回第二步重复执行直到完成全部乘累加计算。
向量指令写回模块将指令执行结果写回向量寄存器模块中的向量寄存器,将向量load指令从数据存储模块中读取的数据以及vmacc指令的计算结果写入向量寄存器模块中目的寄存器;
由于向量load指令的执行周期无法确定,可能会出现向量load指令和vmacc指令在同一个时钟周期发出写回请求的情况,为了解决对向量寄存器的访问冲突,采用优先级机制,出现同时写回的情况时优先执行向量load指令的写回,此时需要暂时阻塞vmacc指令的写回,直到冲突解除。
实施例2
见图3,基于与前述实施例中一种CNN推理加速系统同样的发明构思,本说明书实施例还提供一种CNN推理加速系统的加速方法,包括,
S10,取指令模块读取指令存储模块中存储的指令,并通过取指令模块中地址生成模块生成指令的访问地址,以及将指令发送给译码模块;
S11,译码模块接收指令后,将指令进行解析,解析出的信息包括指令的类型、指令的操作数和控制指令执行的信息,并将解析后的信息发送至指令派遣模块;
S12,指令派遣模块接收解析后的信息后,读取向量指令模块中状态,根据状态控制取指令与分发指令,并将指令分发至IMC指令模块和向量指令模块;
S13,IMC指令模块执行图像预处理、激活和池化功能;向量指令模块执行分发的指令,并将执行的结果写入向量寄存器模块中。
实施例3
基于与前述实施例中一种CNN推理加速系统同样的发明构思,本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行上述的一种CNN推理加速系统的加速方法步骤。
上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种CNN推理加速系统,其特征在于,包括:指令操作模块、数据存储模块、IMC指令模块、向量指令模块和向量寄存器模块;
所述指令操作模块存储指令,并将指令进行译码解析,将解析后的所述指令发送至所述IMC指令模块和所述向量指令模块;
所述数据存储模块存储系统数据;
所述IMC指令模块接收所述指令操作模块发送的解析后的所述指令,并执行图像预处理、激活处理和池化处理;
所述向量指令模块接收所述指令操作模块发送的解析后的所述指令,并执行向量指令,将所述向量指令的执行结果写入所述向量寄存器模块中;
所述向量寄存器模块存储所述执行向量指令的结果。
2.根据权利要求1所述的一种CNN推理加速系统,其特征在于:所述指令操作模块包括指令存储模块、取指令模块、译码模块和指令派遣模块;
所述指令存储模块存储所述指令;所述取指令模块从所述指令存储模块中读取所述指令,并发送给所述译码模块;所述译码模块接收所述取指令模块发送的所述指令,并将所述指令解析;所述指令派遣模块将解析后的所述指令发送至所述IMC指令模块和所述向量指令模块;
所述取指令模块包括地址生成模块和接口协议转换模块;所述地址生成模块生成所述指令的访问地址;所述接口协议转换模块将地址生成模块中接口进行转换并通过转换后的所述接口连接所述指令存储模块。
3.根据权利要求2所述的一种CNN推理加速系统,其特征在于:所述向量指令模块包括向量指令执行模块和向量指令回写模块;
所述向量指令执行模块执行所述指令派遣模块发送的解析后的所述指令;所述向量指令回写模块将所述向量指令执行模块执行所述指令的结果写入所述向量寄存器模块中。
4.根据权利要求3所述的一种CNN推理加速系统,其特征在于:所述向量指令执行模块包括装载存储模块和向量乘累加模块;
所述装载存储模块执行向量装载指令和向量存储指令;
所述向量乘累加模块中设有乘累加器,用于执行向量乘累加指令。
5.用于权利要求4所述的一种CNN推理加速系统的加速方法,其特征在于,包括以下步骤:所述取指令模块读取所述指令存储模块中存储的指令,并通过所述取指令模块中所述地址生成模块生成所述指令的访问地址,以及将所述指令发送给所述译码模块;
所述译码模块接收指令后,将所述指令进行解析,解析出的信息包括指令的类型、指令的操作数和控制指令执行的信息,并将解析后的信息发送至所述指令派遣模块;
所述指令派遣模块接收解析后的所述信息后,读取所述向量指令模块中状态,根据所述状态控制取指令与分发指令,并将指令分发至所述IMC指令模块和所述向量指令模块;
所述IMC指令模块执行图像预处理、激活处理和池化处理;所述向量指令模块执行分发的所述指令,并将执行的结果写入所述向量寄存器模块中。
6.根据权利要求5所述的一种CNN推理加速系统的加速方法,其特征在于:所述通过所述取指令模块中所述地址生成模块生成所述指令的访问地址包括以下步骤:
判断是否为首次取指令,若是,则将取指令的地址设为起始地址;
若不是,则判断所述取指令模块取出的所述指令是否失效,若失效,则所述向量指令执行模块发送标志信号,所述标志信号中包含重新取指令的地址,根据重新取指令的地址,重新取指令;
若未失效,则判断取出的所述指令是否为分支跳转指令,若为所述分支跳转指令,则计算所述分支跳转指令中的参数;
若不为所述分支跳转指令,则判断所述指令的位宽是否小于所述指令存储模块的位宽,若小于所述指令存储模块的所述位宽,则根据所述位宽判断取出的所述指令的数量,并根据所述指令的数量判断是否包含下一条取出的指令,若不小于所述指令存储模块的位宽,则计算下一条取出的指令的地址。
7.根据权利要求5所述的一种CNN推理加速系统的加速方法,其特征在于:所述将指令进行解析包括根据所述指令中的操作码判断指令的类型、操作数和操作数的类型;所述操作数的类型包含向量进行运算的数量和立即数;
所述指令的类型包括目录指令、装载存储指令和向量乘累加指令;
所述目录指令进行解析的信息包含目录指令的标志信号、配置状态和控制寄存器的向量长度的值和向量类型的值;
所述装载存储指令进行解析的信息包含向量装载指令的标志信号、向量存储指令的标志信号、寻址模式、寻址地址、向量元素的位宽、向量元素的数量、所述向量寄存器模块中负责所述向量装载指令的向量寄存器的标号和负责所述向量存储指令的向量寄存器的标号;
所述向量乘累加指令进行解析的信息包含向量乘累加指令的标志信号、向量运算的标志、所述向量寄存器模块中负责运算乘累加的向量寄存器的标号和负责存储执行结果的向量寄存器的标号。
8.根据权利要求5所述的一种CNN推理加速系统的加速方法,其特征在于:所述读取所述向量指令模块中状态,根据所述状态控制取指令与分发指令包括以下步骤:若所述向量指令执行模块中正在执行所述指令,则获取所述向量执行模块的工作状态,若所述工作状态为忙状态,则不进行所述取指令和所述分发指令,若所述工作状态为闲状态,则进行所述取指令和所述分发指令。
9.根据权利要求5所述的一种CNN推理加速系统的加速方法,其特征在于:所述向量指令模块执行分发的所述指令包括以下步骤:
计算存取一个向量寄存器需要访问数据存储模块的次数,以及需要存储的向量寄存器的个数;
若分发的所述指令为所述向量装载指令,则将所述向量指令模块中装载信号拉高;
执行所述向量装载指令,执行完成后,将所述装载信号拉低;
若分发的所述指令为所述向量存储指令,则将所述向量指令模块中存储信号拉高;
执行所述向量存储指令,执行完成后,将所述存储信号拉低;
若分发的所述指令为向量乘累加指令,则通过乘累加器进行乘累加运算,执行所述向量乘累加指令。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行上述权利要求5-9任一项所述的一种CNN推理加速系统的加速方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011519581.1A CN112667289B (zh) | 2020-12-21 | 2020-12-21 | 一种cnn推理加速系统、加速方法及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011519581.1A CN112667289B (zh) | 2020-12-21 | 2020-12-21 | 一种cnn推理加速系统、加速方法及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112667289A CN112667289A (zh) | 2021-04-16 |
CN112667289B true CN112667289B (zh) | 2023-01-10 |
Family
ID=75406966
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011519581.1A Active CN112667289B (zh) | 2020-12-21 | 2020-12-21 | 一种cnn推理加速系统、加速方法及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112667289B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112988238A (zh) * | 2021-05-06 | 2021-06-18 | 成都启英泰伦科技有限公司 | 一种基于可扩展指令集cpu内核的扩展运算装置及方法 |
CN115248701B (zh) * | 2022-09-21 | 2022-12-20 | 进迭时空(杭州)科技有限公司 | 一种处理器寄存器堆之间的零拷贝数据传输装置及方法 |
CN115393174B (zh) * | 2022-10-27 | 2023-03-24 | 之江实验室 | 一种粗粒度的图像神经网络加速器指令集架构方法及装置 |
CN117093268B (zh) * | 2023-10-19 | 2024-01-30 | 超睿科技(长沙)有限公司 | 一种向量处理方法、系统、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107003988A (zh) * | 2014-12-19 | 2017-08-01 | 英特尔公司 | 用于执行卷积运算的存储设备和方法 |
WO2020024093A1 (en) * | 2018-07-30 | 2020-02-06 | Intel Corporation | Method and apparatus for keeping statistical inference accuracy with 8-bit winograd convolution |
-
2020
- 2020-12-21 CN CN202011519581.1A patent/CN112667289B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107003988A (zh) * | 2014-12-19 | 2017-08-01 | 英特尔公司 | 用于执行卷积运算的存储设备和方法 |
WO2020024093A1 (en) * | 2018-07-30 | 2020-02-06 | Intel Corporation | Method and apparatus for keeping statistical inference accuracy with 8-bit winograd convolution |
Non-Patent Citations (1)
Title |
---|
一种神经网络指令集扩展与代码映射机制;娄文启等;《软件学报》;20201014(第10期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112667289A (zh) | 2021-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112667289B (zh) | 一种cnn推理加速系统、加速方法及介质 | |
CN109522254B (zh) | 运算装置及方法 | |
EP3776229A1 (en) | Apparatuses, methods, and systems for remote memory access in a configurable spatial accelerator | |
US6564313B1 (en) | System and method for efficient instruction prefetching based on loop periods | |
EP2372530A1 (en) | Data processing method and device | |
JP2010532905A (ja) | スレッドに最適化されたマルチプロセッサアーキテクチャ | |
US6202143B1 (en) | System for fetching unit instructions and multi instructions from memories of different bit widths and converting unit instructions to multi instructions by adding NOP instructions | |
CN109997109B (zh) | 具有提取提前滞后的流引擎 | |
CN110427337B (zh) | 基于现场可编程门阵列的处理器内核及其运行方法 | |
CN112633505B (zh) | 一种基于risc-v的人工智能推理方法和系统 | |
CN110908716B (zh) | 一种向量聚合装载指令的实现方法 | |
WO2021115208A1 (zh) | 神经网络处理器、芯片和电子设备 | |
WO2022142479A1 (zh) | 一种硬件加速器、数据处理方法、系统级芯片及介质 | |
EP0952528A2 (en) | Information processing apparatus and storage medium | |
WO2021115149A1 (zh) | 神经网络处理器、芯片和电子设备 | |
WO2006124170A2 (en) | Method and apparatus for controlling data transfer in a processing system | |
KR20090023418A (ko) | 프로세서 및 코프로세서를 인터페이싱하는 방법 및 장치 | |
CN114924792A (zh) | 指令译码单元、指令执行单元及相关装置和方法 | |
US8631173B2 (en) | Semiconductor device | |
CN114691597A (zh) | 自适应远程原子操作 | |
US6957319B1 (en) | Integrated circuit with multiple microcode ROMs | |
US9411724B2 (en) | Method and apparatus for a partial-address select-signal generator with address shift | |
Vieira et al. | Processing convolutional neural networks on cache | |
CN111459872A (zh) | 一种多核并行计算的快速核间数据同步方法 | |
CN112214443A (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 |