CN109104197B - 应用于卷积神经网络的非还原稀疏数据的编译码电路及其编译码方法 - Google Patents
应用于卷积神经网络的非还原稀疏数据的编译码电路及其编译码方法 Download PDFInfo
- Publication number
- CN109104197B CN109104197B CN201811340018.0A CN201811340018A CN109104197B CN 109104197 B CN109104197 B CN 109104197B CN 201811340018 A CN201811340018 A CN 201811340018A CN 109104197 B CN109104197 B CN 109104197B
- Authority
- CN
- China
- Prior art keywords
- data
- bit
- jth
- current period
- code
- 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
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3059—Digital compression and data reduction techniques where the original information is represented by a subset or similar information, e.g. lossy compression
- H03M7/3062—Compressive sampling or sensing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了一种应用于卷积神经网络的非还原稀疏数据的编译码电路及其编译码方法,其中,编码电路包括:k个压缩单元、多路选择器、选择控制器、尾地址缓存队列ain和动态随机存取存储器;译码电路包括:数据读取单元和数据计算单元;数据读取单元包括:两组数据传输模块、读写控制器和地址缓存队列afifo;数据计算单元包括:0/1编码缓存队列br_fifo、有效值存储器iram、权重存储器wram、移位寄存器、窗口寄存器、有效值累加器、位置判断器、权重地址生成器、首位比较器、数据暂存块、乘法器和加法器。本发明能降低数据的存取功耗、读取功耗和时间及传输功耗和时间,缩减计算量和计算功耗,同时提高PE的利用率。
Description
技术领域
本发明属于集成电路卷积神经网络的数据压缩技术领域,尤其涉及一种应用于卷积神经网络的非还原稀疏数据编译码电路及其编译码方法。
背景技术
由于卷积神经网络的数据量很大,而且随着层数的增加,数据量在不断地激增。从LeNet、AlexNet、VGG-16、GoogLeNet到ResNet,卷积层不断上升,数据量与计算量也在不断地增加,这大大加重了卷积神经网络硬件化的难度。数据“0”的数量所占的比例随着层数的增加而增加,相应的其计算量在总计算量中占比也不断增加。但是数据“0”在整个过程中其实可以不做任何计算,它占用了大量的存储空间、读写功耗、消耗传输周期和计算周期。因此数据压缩就显得十分的重要。
针对数据“0”的问题,目前已经有很多机构和研究人员提出一系列解决方法。简单游程编码方式虽然可以对连续的数据“0”进行压缩,但对于不连续的数据“0”仍起不到压缩作用;若仅采用0/1对权重与输出编码的方式,如(1,0,0,4)编码为1001,这样压缩率确实大大提高了,但为了能够将数据与编码一一对应的传输到计算单元,并没有将大量的数据“0”计算舍去,并且这些压缩的“0”数据仍需还原,需要一定的还原时间和能耗,同时也会占用一定的传输时间。
发明内容
本发明为了解决现有技术的不足之处,提出一种应用于卷积神经网络的非还原稀疏数据的编译码电路及其编译码方法,以期能降低数据的存取功耗、读取功耗和时间以及传输功耗和时间,并缩减计算量,减少计算功耗,同时提高数据计算单元的利用率。
本发明为达到上述目的所采用的技术方案是:
本发明一种应用于卷积神经网络的非还原稀疏数据的编译码电路,所述卷积神经网络包含M层卷积层,由任意第i层卷积层得到边长为Li的第i组输出特征图并存入输出特征图暂存块中,其中,Li为正整数,表示输出特征图的行数和列数;i=1,2,…M;所述第i组输出特征图分批传输到k个通道中,任意第j个通道接收每批中的一张输出特征图;其特点是,
令编码电路包括:k个压缩单元、多路选择器、选择控制器、尾地址缓存队列ain和动态随机存取存储器;且所述动态随机存取存储器中将M层卷积层的各个16位的权重进行配置,使得每4个16位的权重组成一个64位计算权重weight_cal并进行存储;
任意第j个压缩单元包括:第j个零比较器、第j个长度计数器、第j个位置计数器、第j个总数计数器、第j个输入暂存块、第j个编码生成块、第j个有效值暂存块、第j个编码拼接块、第j个编码缓存队列bin、第j个数据缓存队列din;其中,j为正整数;j=1,2,…k;
第j个通道在每个周期均发送输出特征图中16位数据给所述第j个输入暂存块,并在每个周期产生第j个使能信号coding_j传递给所述第j个长度计数器和第j个位置计数器;同时在每个周期产生偏置长度p并传递给所述第j个位置计数器;
所述第j个输入暂存块将当前周期的16位数据传递给所述第j个零比较器,由第j个零比较器将当前周期的16位数据与“0”进行比较,若16位数据大于“0”,则令当前周期的比较结果为“1”并传递给所述第j个编码生成块,同时产生当前周期的数据有效信号d_en给所述第j个输入暂存块和第j个总数计数器;若16位数据小于等于“0”,则令当前周期的比较结果为“0”并传递给所述第j个编码生成块;
所述第j个输入暂存块根据当前周期的数据有效信号d_en将当前周期的16位数据确定为有效值传递给所述第j个有效值暂存块;当所述第j个有效值暂存块第四次接收到16位有效值后,将前四次所接收到的16位有效值拼接为一个64位有效值组并发送给所述第j个数据缓存队列din中;
所述第j个总数计数器根据当前周期的数据有效信号d_en对每行的16位有效值个数进行计数,得到当前周期的计数结果total;
所述第j个位置计数器根据当前周期的第j个使能信号coding_j将当前周期自身存储的位数length传递给所述第j个编码生成块,再将当前周期的位数length减“1”后得到下一周期的位数length并存储;所述位数length初始值为31-p;
所述第j个编码生成块根据当前周期的位数length所指向的0/1编码brand中的相应位置,将所接收到的当前周期的比较结果存入所述0/1编码brand中;
所述第j个长度计数器根据当前周期的第j个使能信号coding_j对每行中16位数据的接收次数进行计数,得到当前周期的统计结果;当所述当前周期的统计结果等于Li时,将当前周期的统计结果清零后,产生next_brand置位信号分别发送给第j个位置计数器、所述第j个编码生成块和所述第j个总数计数器;
所述第j个位置计数器根据所接收到的next_brand置位信号将所述位数length置为初始值;
所述第j个编码生成块根据所接收到的next_brand置位信号将Li个周期所存储的0/1编码brand发送给所述第j个编码拼接块后,再将Li个周期所存储的0/1编码brand清零;
所述第j个总数计数器根据所接收到的next_brand置位信号将Li个周期的计数结果total发送给所述第j个编码拼接块后,再将Li个周期的计数结果total清零;
所述第j个编码拼接块将Li个周期所存储的0/1编码brand和Li个周期的计数结果total拼接为64位的压缩码CODE后发送给所述第j个编码缓存队列bin;
当所述k个编码缓存队列bin和k个数据缓存队列din均存入数据后,所述选择控制器控制所述多路选择器按照先读取编码缓存队列bin后读取数据缓存队列din的顺序,依次读取k个编码缓存队列bin和k个数据缓存队列din中存储的数据构成k个输出特征图的压缩数据并作为译码电路的k个输入特征图的压缩数据,发送给所述动态随机存取存储器依次存储;由动态随机存取存储器将k个输出特征图的压缩数据所产生的k个尾地址addr发送给所述尾地址缓存队列ain;
所述选择控制器控制所述多路选择器读取所述尾地址缓存队列ain中的k个尾地址addr并发送给所述动态随机存取存储器;
令译码电路包括:数据读取单元和数据计算单元;
所述数据读取单元包括:两组数据传输模块、读写控制器和地址缓存队列afifo;
每组数据传输模块包括:编码拆分模块、数据通道、编码缓存队列bfifo、有效值缓存队列ififo、权重缓存队列wfifo;
所述读写控制器检测所述地址缓存队列afifo是否为空,若为空,则从所述动态随机存取存储器中读取k个尾地址addr中的8个尾地址并存入所述地址缓存队列afifo中,若不为空,则判断任意一组数据传输模块中的编码缓存队列bfifo中的数据个数是否达到阈值,若达到,则所述读写控制器依次读取所述地址缓存队列afifo中的尾地址;若没达到,则不操作;
所述读写控制器根据所读取的尾地址addr_v,从所述动态随机存取存储器中取出第v张输入特征图所对应的压缩数据,并将第v张输入特征图所对应的所有压缩码CODE存入所述编码缓存队列bfifo中,将第v张输入特征图所对应的所有64位有效值组idata存入所述有效值缓存队列ififo中;v=1,2,…8;
所述读写控制器检测所述权重缓存队列wfifo中的数据个数是否达到阈值,若达到,则从所述动态随机存取存储器中读取第v张输入特征图对应的64位计算权重weight_cal并发送给权重缓存队列wfifo;由所述权重缓存队列wfifo将第v张输入特征图对应的64位计算权重weight_cal经过所述数据通道发送给所述数据计算单元;
所述编码拆分模块读取编码缓存队列bfifo中一个压缩码CODE并拆分为0/1编码brand和计数结果total后分别发送给所述数据通道和所述有效值缓存队列ififo;
所述数据通道将所拆分的0/1编码brand传递给所述数据计算单元;
所述有效值缓存队列ififo根据所拆分的计数结果total输出对应的64位有效值组idata给数据通道用于发送给所述数据计算单元;
所述数据计算单元包括:0/1编码缓存队列br_fifo、有效值存储器iram、权重存储器wram、移位寄存器、窗口寄存器、有效值累加器、位置判断器、权重地址生成器、首位比较器、数据暂存块、4个乘法器和4个加法器;
所述0/1编码缓存队列br_fifo接收所拆分的0/1编码brand,所述有效值存储器iram接收所述64位有效值组idata,所述权重存储器wram接收所述64位计算权重weight_cal;
所述移位寄存器从所述0/1编码缓存队列br_fifo读取一个所拆分的0/1编码brand并存储作为当前周期的计算行编码brand_cur;
所述窗口寄存器读取当前周期的计算行编码brand_cur的高5位并存储作为当前周期的卷积窗口编码brand_dec;
所述有效值累加器对当前周期的卷积窗口编码brand_dec中“1”的个数进行累加,得到当前周期的计算结果rd_cnt,并将发送给所述数据暂存块和所述权重地址生成器;rd_cnt≤5;
所述位置判断器对当前周期的卷积窗口编码brand_dec中每一个“1”的位置进行记录,得到多个位置标识rank_n,n={1,2,…,rd_cnt};
所述权重地址生成器在当前周期判断内置的计数器的值rd_num是否小于等于rd_cnt,若是,则将当前周期的计数器的值rd_num所对应的位置标识rank_rd_num的值赋给权重选择地址w_addr并将其发送给所述权重存储器wram,再将rd_num+1赋值rd_num后继续在下一个周期判断;若不是,则将当前周期的计数器的值rd_num置“1”,并产生译码启动信号next_dec发送给所述移位寄存器和所述数据暂存块;
所述首位比较器读取窗口寄存器中当前周期的卷积窗口编码brand_dec的最高位并与“0”比较,若不等于“0”,则发送指针变动信号ptr_add给所述数据暂存块,若等于“0”,则不发送;
所述数据暂存块从所述有效值存储器iram中读取2个64位有效值组idata并拼接成128位窗口数据data_i作为初始数据;
设置一指针ptr,根据指针ptr值的大小从高位到低位分别指向窗口数据data_i中一个16位有效值,ptr=0,1,2…7,并初始化所述指针ptr的值为0,即指向窗口数据data_i中最低位数的16位有效值;
所述数据暂存块在当前周期判断是否接收到译码启动信号next_dec,若未收到,则指针ptr的值在当前周期加1,即指针ptr在当前周期指向高一级位置的16位有效值作为计算数据data_cal,发送给所述4个乘法器;若接收到译码启动信号next_dec,则指针ptr的值在当前周期内减去当前周期的计算结果rd_cnt的值,再判断是否接收到指针变动信号ptr_add;若接收到指针变动信号ptr_add且指针ptr的值大于等于3,则发送有效值请求信号next_i给所述有效值存储器iram,再将指针ptr清零,若接收到指针变动信号ptr_add但指针ptr的值小于3,则令指针ptr的值加1;若在当前周期未接收到指针变动信号ptr_add,则指针ptr保持不变;
当所述有效值存储器iram在当前周期接收到所述有效值请求信号next_i信号时,则将一个64位有效值组idata发送给所述数据暂存块;
所述数据暂存块在当前周期接收到64位有效值组idata后,将所述128位窗口数据data_i右移64位后,将64位有效值组idata写入所述128位窗口数据data_i的高64位中,从而得到当前周期新的窗口数据data_i;
所述权重存储器wram根据在当前周期的权重选择地址w_addr选择对应64位计算权重weight_cal并拆分为4个权重weight后分别发给4个乘法器;
每个乘法器在当前周期将收到的16位计算数据data_cal与16位权重weight相乘,得到当前周期的乘积mul发往相应的一个加法器;
每个加法器将当前周期所接收的乘积mul与下一层路由器中相应加法器的卷积结果result_low相加,得到当前路由器中一个卷积结果result_cur并发送到上一层路由器所对应的加法器中。
本发明一种应用于卷积神经网络的非还原稀疏数据的编译码方法,所述卷积神经网络包含M层卷积层,由任意第i层卷积层得到边长为Li的第i组输出特征图并存入输出特征图暂存块中,其中,Li为正整数,表示输出特征图的行数和列数;i=1,2,…M;所述第i组输出特征图分批传输到k个通道中,任意第j个通道接收每批中的一张输出特征图;其特点是,
所述编译码方法是应用于由k个压缩单元、多路选择器、选择控制器、尾地址缓存队列ain和动态随机存取存储器所组成的编码电路以及由数据读取单元和数据计算单元所组成的译码电路中,且所述动态随机存取存储器中将M层卷积层的各个16位的权重进行配置,使得每4个16位的权重组成一个64位计算权重weight_cal并进行存储;
所述编译码方法是按如下步骤进行:
步骤1、k个通道同时向k个压缩单元发送相应的输出特征图,其中,第j个通道当前周期将输出特征图中16位数据发送给第j个压缩单元,并产生第j个使能信号coding_j也发送给第j个压缩单元;
步骤2、所述第j个压缩单元将当前周期的16位数据与“0”进行比较,若16位数据大于“0”,则令当前周期的比较结果为“1”;并对每行的有效值个数进行计数,得到当前周期的计数结果total;若16位数据小于等于“0”,则令当前周期的比较结果为“0”;
步骤3、每当所述第j个压缩单元获得的比较结果为“1”的次数达到4次时,所述第j个压缩单元将前四次所接收到的16位有效值拼接为一个64位有效值组并存储;
步骤4、所述第j个压缩单元根据当前周期的位数length所指向的0/1编码brand中的相应位置,将所接收到的当前周期的比较结果存入所述0/1编码brand中;所述位数length初始值为31-p;
步骤5、所述第j个压缩单元根据当前周期的第j个使能信号coding_j将当前周期自身存储的位数length减“1”后得到下一周期的位数length并存储;
步骤6、所述第j个压缩单元根据当前周期的第j个使能信号coding_j对每行中16位数据的接收次数进行计数,得到当前周期的统计结果;当所述当前周期的统计结果等于Li时,将当前周期的统计结果清零后,产生next_brand置位信号;
步骤7、所述第j个压缩单元根据next_brand置位信号将所述位数length置为初始值;
步骤8、所述第j个压缩单元将Li个周期所存储的0/1编码brand和Li个周期的计数结果total拼接为64位的压缩码CODE并存储;由所有64位有效值组和所有行的64位的压缩码CODE构成第j个输出特征图的压缩数据;
步骤9、所述第j个压缩单元将Li个周期所存储的0/1编码brand清零,并将Li个周期的计数结果total清零;
步骤10、所述选择控制器控制所述多路选择器按照先读64位的压缩码CODE后读取64位有效值组的顺序,依次读取k个输出特征图的压缩数据并作为译码电路的k个输入特征图的压缩数据后,发送给所述动态随机存取存储器依次存储;由动态随机存取存储器将k个输出特征图的压缩数据所产生的k个尾地址发送给所述尾地址缓存队列ain;
步骤11、所述选择控制器控制所述多路选择器读取所述尾地址缓存队列ain中的k个尾地址并发送给所述动态随机存取存储器;
步骤12、所述数据读取单元检测自身存储的尾地址是否为空,若为空,则从所述动态随机存取存储器中读取k个尾地址中的8个尾地址并存储;若不为空,则判断自身所存储的64位的压缩码CODE的数据个数是否达到阈值,若达到,则所述数据读取单元根据所读取的尾地址addr_v,从所述动态随机存取存储器中取出第v张输入特征图所对应的压缩数据并存储;若没达到,则不操作;v=1,2,…8;
步骤13、所述数据读取单元检测自身存储的计算权重的数据个数是否达到阈值,若达到,则从所述动态随机存取存储器中读取第v张输入特征图对应的64位计算权重weight_cal发送给所述数据计算单元;
步骤14、所述数据读取单元将一个压缩码CODE并拆分为0/1编码brand和计数结果total;
步骤15、所述数据读取单元将所拆分的0/1编码brand传递给所述数据计算单元;并根据所拆分的计数结果total输出对应的64位有效值组idata发送给所述数据计算单元;
步骤16、所述数据计算单元读取一个所拆分的0/1编码brand并存储作为当前周期的计算行编码brand_cur;再将当前周期的计算行编码brand_cur的高5位进行存储并作为当前周期的卷积窗口编码brand_dec;
步骤17、所述数据计算单元对当前周期的卷积窗口编码brand_dec中“1”的个数进行累加,得到当前周期的计算结果rd_cnt;rd_cnt≤5;
步骤18、所述数据计算单元对当前周期的卷积窗口编码brand_dec中每一个“1”的位置进行记录,得到多个位置标识rank_n,n={1,2,…,rd_cnt};
步骤19、所述数据计算单元在当前周期判断内置的计数器的值rd_num是否小于等于rd_cnt,若是,则将当前周期的计数器的值rd_num所对应的位置标识rank_rd_num的值赋给权重选择地址w_addr,再将rd_num+1赋值rd_num后继续在下一个周期判断;若不是,则将当前周期的计数器的值rd_num置“1”,并产生译码启动信号next_dec;
步骤20、所述数据计算单元读取当前周期的卷积窗口编码brand_dec的最高位并与“0”比较,若不等于“0”,则产生指针变动信号ptr_add,若等于“0”,则不产生;
步骤21、所述数据计算单元读取2个64位有效值组idata并拼接成128位窗口数据data_i作为初始数据;
步骤22、设置一指针ptr,根据指针ptr的值的大小从高位到低位分别指向窗口数据data_i中一个16位有效值,ptr=0,1,2…7,并初始化所述指针ptr的值为0,即指向窗口数据data_i中最低位数的16位有效值;
步骤23、所述数据计算单元在当前周期判断是否接收到译码启动信号next_dec,若未收到,则指针ptr的值在当前周期加1,即指针ptr在当前周期指向高一级位置的16位有效值作为计算数据data_cal;若接收到译码启动信号next_dec,则指针ptr的值在当前周期内减去当前周期的计算结果rd_cnt的值,再判断是否接收到指针变动信号ptr_add;若接收到指针变动信号ptr_add且指针ptr的值大于等于3,则产生有效值请求信号next_i;再将指针ptr清零,若接收到指针变动信号ptr_add但指针ptr的值小于3,则令指针ptr的值加1;若在当前周期未接收到指针变动信号ptr_add,则指针ptr保持不变;
步骤24、当所述数据计算单元产生所述有效值请求信号next_i信号时,则读取一个64位有效值组idata;
步骤25、所述数据计算单元将所述128位窗口数据data_i右移64位后,将读取的一个64位有效值组idata写入所述128位窗口数据data_i的高64位中,从而得到当前周期新的窗口数据data_i;
步骤26、所述数据计算单元根据在当前周期的权重选择地址w_addr选择对应64位计算权重weight_cal并拆分为4个权重weight;
步骤27、将收到的16位计算数据data_cal与16位权重weight相乘,得到当前周期的乘积mul;
步骤28、将当前周期所接收的乘积mul与下一层路由器中的卷积结果data_low相加,得到当前路由器中一个卷积结果result_cur并发送到上一层路由器中。
与现有技术相比,本发明的有益技术效果体现在:
1、本发明使用非还原稀疏数据的编码方法对输出特征图进行压缩,对每行数据执行0/1编码,并记录每行非0数据个数,与0/1编码拼接在一起;同时保留其中的非0数据,且对每张输出特征图的压缩数据在动态随机存取存储器的地址进行记录;对比原输入数据大小,经过编码后的输入数据被大大压缩,在写入动态随机存取存储器时功耗更低。
2、在本发明译码电路中,对输入数据的读取可分为4步。首先从地址存储区中读取每张输入特征图的压缩数据在动态随机存取存储器的尾地址;然后根据尾地址读取每张输出特征图的对应压缩码;读取每行的压缩码,再根据其中的total部分读取对应个数的有效值;最后将每行图片的brand与非0数据发往计算单元;这样的译码方法不必将稀疏“0”数据再还原,也不必对应0/1编码brand依次读取有效值,这样大大减少了读取的次数,节约了读取时间和功耗。
3、通过本发明编码方法,原输入数据变成了对应的编码、有效值数据及地址,无用的“0”数据也全部清除,数据量大大减少,这使得在数据传输时的时间被大大缩减,且传输功耗也显著下降。
4、在原来未经压缩时,原输入图像与权重进行卷积的过程中存在大量的稀疏“0”数据,而0乘累加的结果全都是0,故原计算中存在许多重复且无用的0计算;经过本发明译码电路后,最终得到了每行图像压缩码的brand部分与非0数据,将其发往计算单元与权重进行乘加计算。在计算单元中brand为0的位置无需与权重进行乘累加,直接得到结果0,brand为1的位置再用相应的非0数据与权重进行计算;此时的计算对比起未经压缩的数据计算,减少了大量不必要的0乘累加,大大缩减了计算量,降低了计算单元功耗。
附图说明
图1为现有技术AlexNet网络中每层输入数据中0的数量示意图;
图2为现有技术AlexNet网络中每层0与非0的乘累加计算量示意图;
图3为本发明编码方法示意图;
图4为本发明动态随机存取存储器内部数据存储示意图;
图5为本发明编码电路示意图;
图6为本发明译码方法示意图;
图7为本发明译码电路中数据读取模块示意图;
图8为本发明译码电路中数据计算单元;
图9为实例输入图片;
图10为实例编码图;
图11为压缩前后AlexNet每层中输入图像大小对比图;
图12为压缩前后VGG16每层中动态随机存取存储器的读写量对比图。
具体实施方式
由于卷积神经网络的数据量很大,而且随着层数的增加,数据量与计算量也在不断地增加,这大大加重了卷积神经网络硬件化的难度。如图1所示,AlexNet每层输入数据中“0”的数量所占的比例随着层数的增加而增加,0乘累加的计算量在总计算量中的占比也不断增加如图2所示。但是数据“0”在整个过程中其实可以不做任何计算,它占用了大量的存储空间、读写功耗、消耗传输周期和计算周期。因此数据压缩就显得十分的重要。
本实施例中,一种应用于卷积神经网络的非还原稀疏数据的编译码电路中的卷积神经网络包含M层卷积层,由任意第i层卷积层得到边长为Li的第i组输出特征图并存入输出特征图暂存块中,其中,Li为正整数,表示输出特征图的行数和列数;i=1,2,…M;第i组输出特征图分批传输到k个通道中,任意第j个通道接收每批中的一张输出特征图;
如图5所示,令编码电路包括:k个压缩单元、多路选择器、选择控制器、尾地址缓存队列ain和动态随机存取存储器;且动态随机存取存储器中将M层卷积层的各个16位的权重进行配置,使得每4个16位的权重组成一个64位计算权重weight_cal并进行存储;
任意第j个压缩单元包括:第j个零比较器、第j个长度计数器、第j个位置计数器、第j个总数计数器、第j个输入暂存块、第j个编码生成块、第j个有效值暂存块、第j个编码拼接块、第j个编码缓存队列bin、第j个数据缓存队列din;其中,j为正整数;j=1,2,…k;
第j个通道在每个周期均发送输出特征图中16位数据给第j个输入暂存块,并在每个周期产生第j个使能信号coding_j传递给第j个长度计数器和第j个位置计数器;同时在每个周期产生偏置长度p并传递给第j个位置计数器;
第j个输入暂存块将当前周期的16位数据传递给第j个零比较器,由第j个零比较器将当前周期的16位数据与“0”进行比较;由于经过卷积层得到的输出特征图会经过激活函数ReLU的处理,使图中大于“0”的数据保存而小于等于“0”的数据全部置“0”,而后稀疏数据“0”会造成大量无用计算,故若16位数据大于“0”,则令当前周期的比较结果为“1”并传递给第j个编码生成块,同时产生当前周期的数据有效信号d_en给第j个输入暂存块和第j个总数计数器;若16位数据小于等于“0”,则令当前周期的比较结果为“0”并传递给第j个编码生成块;
第j个输入暂存块根据当前周期的数据有效信号d_en将当前周期的16位数据确定为有效值传递给第j个有效值暂存块;为了使要存入的数据符合存储空间的大小,需将4个16位的有效值拼接为64位数据再发送至存储单元;当第j个有效值暂存块第四次接收到16位有效值后,将前四次所接收到的16位有效值拼接为一个64位有效值组并发送给第j个数据缓存队列din中;
第j个总数计数器根据当前周期的数据有效信号d_en对每行的16位有效值个数进行计数,得到当前周期的计数结果total;
第j个位置计数器根据当前周期的第j个使能信号coding_j将当前周期自身存储的位数length传递给第j个编码生成块,再将当前周期的位数length减“1”后得到下一周期的位数length并存储;位数length初始值为31-p;brand[31:31-p+1]的位置即为所添加的偏置;
第j个编码生成块根据当前周期的位数length所指向的0/1编码brand中的相应位置,将所接收到的当前周期的比较结果存入0/1编码brand中;这样即实现了编码和数据的一一对应;
第j个长度计数器根据当前周期的第j个使能信号coding_j对每行中16位数据的接收次数进行计数,得到当前周期的统计结果;当当前周期的统计结果等于Li时,表示该行数据已全部输入完成,需要结束该行编码并开始下一行编码,将当前周期的统计结果清零后,产生next_brand置位信号分别发送给第j个位置计数器、第j个编码生成块和第j个总数计数器;
第j个位置计数器根据所接收到的next_brand置位信号将位数length置为初始值;
第j个编码生成块根据所接收到的next_brand置位信号将Li个周期所存储的0/1编码brand发送给第j个编码拼接块后,再将Li个周期所存储的0/1编码brand清零;
第j个总数计数器根据所接收到的next_brand置位信号将Li个周期的计数结果total发送给第j个编码拼接块后,再将Li个周期的计数结果total清零;total宽度为32位;
有效值暂存块也受next_brand置位信号的影响,当next_brand置位信号产生,有效值暂存块判断当前存储的有效值个数是否达到“4”,若达到则将其拼接为64位有效值组idata直接发送到有效值缓存队列din;若未达到则在剩下的位置补16位的“0”再拼接发送;
第j个编码拼接块将Li个周期所存储的0/1编码brand和Li个周期的计数结果total拼接为64位的压缩码CODE后发送给第j个编码缓存队列bin;
当k个编码缓存队列bin和k个数据缓存队列din均存入数据后,选择控制器控制多路选择器按照先读取编码缓存队列bin后读取数据缓存队列din的顺序,依次读取k个编码缓存队列bin和k个数据缓存队列din中存储的数据构成k个输出特征图的压缩数据并作为译码电路的k个输入特征图的压缩数据,发送给动态随机存取存储器依次存储;由动态随机存取存储器将k个输出特征图的压缩数据所产生的k个尾地址addr发送给尾地址缓存队列ain;
选择控制器控制多路选择器读取尾地址缓存队列ain中的k个尾地址addr并发送给动态随机存取存储器;图4即为编码完成后动态随机存取存储器中的数据分布,这样就可以在译码时通过寻址每张图片压缩数据的尾地址来定位并读取图片的压缩数据,再执行译码操作;
如图3所示,本编码方法的核心思想就是对每张输入图片进行基于行的0/1编码,并计数每行的有效值个数,同时保留所有有效值而去除会被ReLU函数置为“0”的无效值,将以上数据送入动态随机存取存储器中进行保存并记录其存储的尾地址以方便寻址;图9、图10为编码实例,图9为一张13×13的输出特征图,图10左边为该图片的13行brand,中间为每一行的total,将每一行的brand和total拼接起来即为每一行图像的压缩码CODE,而图10右边为该图像每一行的有效值;这三类数据即为一张图编码后得到的全部压缩数据,只要用尾地址addr标记好这些数据在动态随机存储器中的位置,就可以在计算前对应译码,既能得到正确的结果又能减少计算量。
译码电路对编码方法压缩后的数据进行译码,实现图片与权重的对应计算,令译码电路包括:数据读取单元和数据计算单元;
如图7所示,数据读取单元包括:两组数据传输模块、读写控制器和地址缓存队列afifo;
每组数据传输模块包括:编码拆分模块、数据通道、编码缓存队列bfifo、有效值缓存队列ififo、权重缓存队列wfifo;
读写控制器检测地址缓存队列afifo是否为空,若为空,则从动态随机存取存储器中读取k个尾地址addr中的8个尾地址并存入地址缓存队列afifo中,若不为空,则判断任意一组数据传输模块中的编码缓存队列bfifo中的数据个数是否达到阈值,若达到,则读写控制器依次读取地址缓存队列afifo中的尾地址;若没达到,则不操作;
读写控制器根据所读取的尾地址addr_v,从动态随机存取存储器中取出第v张输入特征图所对应的压缩数据即为上一尾地址到当前尾地址之间存储的数据,并将第v张输入特征图所对应的所有压缩码CODE即为上一尾地址开始的L个64位数据存入编码缓存队列bfifo中,将第v张输入特征图所对应的所有64位有效值组idata即压缩码CODE之后直至当前尾地址的所有数据存入有效值缓存队列ififo中;v=1,2,…8;
读写控制器检测权重缓存队列wfifo中的数据个数是否达到阈值,若达到,则从动态随机存取存储器中读取第v张输入特征图对应的64位计算权重weight_cal并发送给权重缓存队列wfifo;由权重缓存队列wfifo将第v张输入特征图对应的64位计算权重weight_cal经过数据通道发送给数据计算单元;
编码拆分模块读取编码缓存队列bfifo中一个压缩码CODE并拆分为0/1编码brand和计数结果total后分别发送给数据通道和有效值缓存队列ififo;
数据通道将所拆分的0/1编码brand传递给数据计算单元;
有效值缓存队列ififo根据所拆分的计数结果total输出对应的64位有效值组idata给数据通道用于发送给数据计算单元;当total的值为“4”的倍数时,直接输出(total/4)个64位有效值组idata;若total的值不是“4”的倍数,则输出(total/4+1)个64位有效值组idata;
如图8所示,数据计算单元包括:0/1编码缓存队列br_fifo、有效值存储器iram、权重存储器wram、移位寄存器、窗口寄存器、有效值累加器、位置判断器、权重地址生成器、首位比较器、数据暂存块、4个乘法器和4个加法器;令数据计算单元中的卷积核长度为5,步长为1;
0/1编码缓存队列br_fifo接收所拆分的0/1编码brand,有效值存储器iram接收64位有效值组idata,权重存储器wram接收64位计算权重weight_cal;
移位寄存器从0/1编码缓存队列br_fifo读取一个所拆分的0/1编码brand并存储作为当前周期的计算行编码brand_cur;
窗口寄存器读取当前周期的计算行编码brand_cur的高5位并存储作为当前周期的卷积窗口编码brand_dec;
有效值累加器对当前周期的卷积窗口编码brand_dec中“1”的个数进行累加,具体操作为直接将brand_dec的各个位置上的数相加,得到当前周期的计算结果rd_cnt,并将发送给数据暂存块和权重地址生成器;rd_cnt≤5;如brand_dec=10011时,rd_cnt=1+0+0+1+1=3;
位置判断器对当前周期的卷积窗口编码brand_dec中每一个“1”的位置进行记录,得到多个位置标识rank_n,n={1,2,…,rd_cnt};如brand_dec=10011时,rank_1=1,rank_2=4,rank_3=5;
权重地址生成器在当前周期判断内置的计数器的值rd_num是否小于等于rd_cnt,若是,则将当前周期的计数器的值rd_num所对应的位置标识rank_rd_num的值赋给权重选择地址w_addr并将其发送给权重存储器wram,再将rd_num+1赋值rd_num后继续在下一个周期判断;若不是,则将当前周期的计数器的值rd_num置“1”,并产生译码启动信号next_dec发送给移位寄存器和数据暂存块;如brand_dec=10011时,若rd_num=1,判断得到rd_num≤rd_cnt,故w_addr=rank_1=1,rd_num加1;若rd_num=2≤rd_cnt,w_addr=rank_2=4,且rd_num加1;若rd_num=3≤3=rd_cnt,故w_addr=rank_3=5,rd_num加1;若rd_num=4>rd_cnt,则rd_num置“1”,并发送next_dec,开始新一轮译码;
首位比较器读取窗口寄存器中当前周期的卷积窗口编码brand_dec的最高位并与“0”比较,若不等于“0”,则发送指针变动信号ptr_add给数据暂存块,若等于“0”,则不发送;如brand_dec=10011时,最高位brand_dec[4]=1≠0,则ptr_add信号有效;
数据暂存块从有效值存储器iram中读取2个64位有效值组idata并拼接成128位窗口数据data_i作为初始数据;
设置一指针ptr,根据指针ptr值的大小从高位到低位分别指向窗口数据data_i中一个16位有效值,ptr=0,1,2…7,并初始化指针ptr的值为0,即指向窗口数据data_i中最低位数的16位有效值;ptr=0时指向data_i[15:0],ptr=1时指向data_i[31:16],ptr=2时指向data_i[47:32],ptr=3时指向data_i[63:48],ptr=4时指向data_i[79:64],ptr=5时指向data_i[95:80],ptr=6时指向data_i[111:96],ptr=7时指向data_i[127:112];
数据暂存块在当前周期判断是否接收到译码启动信号next_dec,若未收到,则指针ptr的值在当前周期加1,即指针ptr在当前周期指向高一级位置的16位有效值作为计算数据data_cal,发送给4个乘法器;若接收到译码启动信号next_dec,则指针ptr的值在当前周期内减去当前周期的计算结果rd_cnt的值,再判断是否接收到指针变动信号ptr_add;若接收到指针变动信号ptr_add且指针ptr的值大于等于3,则发送有效值请求信号next_i给有效值存储器iram,再将指针ptr清零,若接收到指针变动信号ptr_add但指针ptr的值小于3,则令指针ptr的值加1;若在当前周期未接收到指针变动信号ptr_add,则指针ptr保持不变;
当有效值存储器iram在当前周期接收到有效值请求信号next_i信号时,则将一个64位有效值组idata发送给数据暂存块;
数据暂存块在当前周期接收到64位有效值组idata后,将128位窗口数据data_i右移64位后,将64位有效值组idata写入128位窗口数据data_i的高64位中,从而得到当前周期新的窗口数据data_i;
权重存储器wram根据在当前周期的权重选择地址w_addr选择对应64位计算权重weight_cal并拆分为4个权重weight后分别发给4个乘法器;
每个乘法器在当前周期将收到的16位计算数据data_cal与16位权重weight相乘,得到当前周期的乘积mul发往相应的一个加法器;
每个加法器将当前周期所接收的乘积mul与下一层路由器中相应加法器的卷积结果result_low相加,得到当前路由器中一个卷积结果result_cur并发送到上一层路由器所对应的加法器中作为下一层路由器中相应加法器的卷积结果result_low。
本译码方法如图6所示,通过对地址的读取来得到对应的压缩码CODE和64位有效值组idata,拆分压缩码CODE得到对应的brand和total,根据total的值读取对应idata,将brand、idata与weight经过网络发往路由器挂载的计算单元中;再根据brand选择对应的16位有效值和weight,进行乘累加计算;其中,一个16位有效值与四个weight进行乘累加,使用图像复用的方法,这样对于每张图片可以生成四张不同的输出特征图。
本实施例中,一种应用于卷积神经网络的非还原稀疏数据的编译码方法是应用于由k个压缩单元、多路选择器、选择控制器、尾地址缓存队列ain和动态随机存取存储器所组成的编码电路以及由数据读取单元和数据计算单元所组成的译码电路中,且动态随机存取存储器中将M层卷积层的各个16位的权重进行配置,使得每4个16位的权重组成一个64位计算权重weight_cal并进行存储;该编译码方法是按如下步骤进行:
步骤1、k个通道同时向k个压缩单元发送相应的输出特征图,其中,第j个通道当前周期将输出特征图中16位数据发送给第j个压缩单元,并产生第j个使能信号coding_j也发送给第j个压缩单元;
步骤2、第j个压缩单元将当前周期的16位数据与“0”进行比较,若16位数据大于“0”,则令当前周期的比较结果为“1”;并对每行的有效值个数进行计数,得到当前周期的计数结果total;若16位数据小于等于“0”,则令当前周期的比较结果为“0”;
步骤3、每当第j个压缩单元获得的比较结果为“1”的次数达到4次时,第j个压缩单元将前四次所接收到的16位有效值拼接为一个64位有效值组并存储;
步骤4、第j个压缩单元根据当前周期的位数length所指向的0/1编码brand中的相应位置,将所接收到的当前周期的比较结果存入0/1编码brand中;位数length初始值为31-p;
步骤5、第j个压缩单元根据当前周期的第j个使能信号coding_j将当前周期自身存储的位数length减“1”后得到下一周期的位数length并存储;
步骤6、第j个压缩单元根据当前周期的第j个使能信号coding_j对每行中16位数据的接收次数进行计数,得到当前周期的统计结果;当当前周期的统计结果等于Li时,将当前周期的统计结果清零后,产生next_brand置位信号;
步骤7、第j个压缩单元根据next_brand置位信号将位数length置为初始值;
步骤8、第j个压缩单元将Li个周期所存储的0/1编码brand和Li个周期的计数结果total拼接为64位的压缩码CODE并存储;由所有64位有效值组和所有行的64位的压缩码CODE构成第j个输出特征图的压缩数据;
步骤9、第j个压缩单元将Li个周期所存储的0/1编码brand清零,并将Li个周期的计数结果total清零;
步骤10、选择控制器控制多路选择器按照先读64位的压缩码CODE后读取64位有效值组的顺序,依次读取k个输出特征图的压缩数据并作为译码电路的k个输入特征图的压缩数据后,发送给动态随机存取存储器依次存储;由动态随机存取存储器将k个输出特征图的压缩数据所产生的k个尾地址发送给尾地址缓存队列ain;
步骤11、选择控制器控制多路选择器读取尾地址缓存队列ain中的k个尾地址并发送给动态随机存取存储器;
步骤12、数据读取单元检测自身存储的尾地址是否为空,若为空,则从动态随机存取存储器中读取k个尾地址中的8个尾地址并存储;若不为空,则判断自身所存储的64位的压缩码CODE的数据个数是否达到阈值,若达到,则数据读取单元根据所读取的尾地址addr_v,从动态随机存取存储器中取出第v张输入特征图所对应的压缩数据并存储;若没达到,则不操作;v=1,2,…8;
步骤13、数据读取单元检测自身存储的计算权重的数据个数是否达到阈值,若达到,则从动态随机存取存储器中读取第v张输入特征图对应的64位计算权重weight_cal发送给数据计算单元;
步骤14、数据读取单元将一个压缩码CODE并拆分为0/1编码brand和计数结果total;
步骤15、数据读取单元将所拆分的0/1编码brand传递给数据计算单元;并根据所拆分的计数结果total输出对应的64位有效值组idata发送给数据计算单元;
步骤16、数据计算单元读取一个所拆分的0/1编码brand并存储作为当前周期的计算行编码brand_cur;再将当前周期的计算行编码brand_cur的高5位进行存储并作为当前周期的卷积窗口编码brand_dec;
步骤17、数据计算单元对当前周期的卷积窗口编码brand_dec中“1”的个数进行累加,得到当前周期的计算结果rd_cnt;rd_cnt≤5;
步骤18、数据计算单元对当前周期的卷积窗口编码brand_dec中每一个“1”的位置进行记录,得到多个位置标识rank_n,n={1,2,…,rd_cnt};
步骤19、数据计算单元在当前周期判断内置的计数器的值rd_num是否小于等于rd_cnt,若是,则将当前周期的计数器的值rd_num所对应的位置标识rank_rd_num的值赋给权重选择地址w_addr,再将rd_num+1赋值rd_num后继续在下一个周期判断;若不是,则将当前周期的计数器的值rd_num置“1”,并产生译码启动信号next_dec;
步骤20、数据计算单元读取当前周期的卷积窗口编码brand_dec的最高位并与“0”比较,若不等于“0”,则产生指针变动信号ptr_add,若等于“0”,则不产生;
步骤21、数据计算单元读取2个64位有效值组idata并拼接成128位窗口数据data_i作为初始数据;
步骤22、设置一指针ptr,根据指针ptr的值的大小从高位到低位分别指向窗口数据data_i中一个16位有效值,ptr=0,1,2…7,并初始化指针ptr的值为0,即指向窗口数据data_i中最低位数的16位有效值;
步骤23、数据计算单元在当前周期判断是否接收到译码启动信号next_dec,若未收到,则指针ptr的值在当前周期加1,即指针ptr在当前周期指向高一级位置的16位有效值作为计算数据data_cal;若接收到译码启动信号next_dec,则指针ptr的值在当前周期内减去当前周期的计算结果rd_cnt的值,再判断是否接收到指针变动信号ptr_add;若接收到指针变动信号ptr_add且指针ptr的值大于等于3,则产生有效值请求信号next_i;再将指针ptr清零,若接收到指针变动信号ptr_add但指针ptr的值小于3,则令指针ptr的值加1;若在当前周期未接收到指针变动信号ptr_add,则指针ptr保持不变;
步骤24、当数据计算单元产生有效值请求信号next_i信号时,则读取一个64位有效值组idata;
步骤25、数据计算单元将128位窗口数据data_i右移64位后,将读取的一个64位有效值组idata写入128位窗口数据data_i的高64位中,从而得到当前周期新的窗口数据data_i;
步骤26、数据计算单元根据在当前周期的权重选择地址w_addr选择对应64位计算权重weight_cal并拆分为4个权重weight;
步骤27、将收到的16位计算数据data_cal与16位权重weight相乘,得到当前周期的乘积mul;
步骤28、将当前周期所接收的乘积mul与下一层路由器中的卷积结果data_low相加,得到当前路由器中一个卷积结果result_cur并发送到上一层路由器中。
表一
卷积层数 | 压缩前图片大小(MB) | 压缩后图片大小(MB) | 压缩率 |
1 | 0.88 | 0.88 | 0.00% |
2 | 0.39 | 0.27 | 30.77% |
3 | 0.41 | 0.20 | 51.22% |
4 | 0.62 | 0.24 | 61.29% |
5 | 0.41 | 0.16 | 60.98% |
合计 | 2.71 | 1.75 | 35.42% |
表一为AlexNet每一层卷积层图片压缩前后所占空间大小及压缩率,其中,压缩率=(压缩前图片大小-压缩后图片大小)/压缩前图片大小*100%,图11为表一的柱状图表示;从表一中可以看出实行本发明的编译码方法可压缩原输入数据大小。
表二
卷积层数 | 压缩前DRAM读写量 | 压缩后DRAM读写量 | 压缩率 |
Conv1_1 | 7.53 | 7.53 | 0.00% |
Conv1_2 | 13.64 | 10.70 | 21.55% |
Conv2_1 | 7.77 | 7.47 | 3.86% |
Conv2_2 | 9.13 | 7.90 | 13.47% |
Conv3_1 | 6.12 | 5.66 | 7.52% |
Conv3_2 | 10.00 | 8.23 | 17.7% |
Conv3_3 | 8.74 | 7.06 | 19.22% |
Conv4_1 | 5.36 | 4.47 | 16.60% |
Conv4_2 | 9.35 | 6.92 | 25.99% |
Conv4_3 | 8.72 | 6.16 | 29.36% |
Conv5_1 | 5.98 | 5.24 | 12.37% |
Conv5_2 | 5.98 | 5.17 | 13.55% |
Conv5_3 | 5.81 | 4.96 | 14.63% |
合计 | 104.13 | 87.47 | 16.00% |
表二为VGG16每一层压缩前后动态随机存取存储器(DRAM)的读写量,其中包括未经压缩处理的权重数据读写量。压缩率=(压缩前DRAM读写量-压缩后DRAM读写量)/压缩前DRAM读写量*100%,图12为表二的柱状图表示;从表二中可以看出对比原输入数据,经本发明编码可降低读写动态随机存取存储器次数。
深度卷积神经网络的总功耗Energy由式(1)进行计算:
Energy=MADRAM·EDRAM+MAbuffer·Ebuffer+Operations·Eoperation (1)
由式(1)可知,总功耗Energy由三部分组成:DRAM读写功耗、buffer读写功耗以及计算功耗。其中MADRAM、MAbuffer分别为DRAM和buffer的读写次数,Operations为总计算量,EDRAM、Ebuffer为每次读写DRAM或buffer所消耗的能量,Eoperation为单位计算功耗。
由表一、表二可知,经本发明编码可降低数据大小从而降低DRAM的读写量,buffer的读写次数也可相应减少,且由于大量“0”乘累加被消除而降低了总计算量,由上面的公式可得出总功耗也会得到一定程度的降低。
Claims (2)
1.一种应用于卷积神经网络的非还原稀疏数据的编译码电路,所述卷积神经网络包含M层卷积层,由任意第i层卷积层得到边长为Li的第i组输出特征图并存入输出特征图暂存块中,其中,Li为正整数,表示输出特征图的行数和列数;i=1,2,…M;所述第i组输出特征图分批传输到k个通道中,任意第j个通道接收每批中的一张输出特征图;其特征是,
令编码电路包括:k个压缩单元、多路选择器、选择控制器、尾地址缓存队列ain和动态随机存取存储器;且所述动态随机存取存储器中将M层卷积层的各个16位的权重进行配置,使得每4个16位的权重组成一个64位计算权重weight_cal并进行存储;
任意第j个压缩单元包括:第j个零比较器、第j个长度计数器、第j个位置计数器、第j个总数计数器、第j个输入暂存块、第j个编码生成块、第j个有效值暂存块、第j个编码拼接块、第j个编码缓存队列bin、第j个数据缓存队列din;其中,j为正整数;j=1,2,…k;
第j个通道在每个周期均发送输出特征图中16位数据给所述第j个输入暂存块,并在每个周期产生第j个使能信号coding_j传递给所述第j个长度计数器和第j个位置计数器;同时在每个周期产生偏置长度p并传递给所述第j个位置计数器;
所述第j个输入暂存块将当前周期的16位数据传递给所述第j个零比较器,由第j个零比较器将当前周期的16位数据与“0”进行比较,若16位数据大于“0”,则令当前周期的比较结果为“1”并传递给所述第j个编码生成块,同时产生当前周期的数据有效信号d_en给所述第j个输入暂存块和第j个总数计数器;若16位数据小于等于“0”,则令当前周期的比较结果为“0”并传递给所述第j个编码生成块;
所述第j个输入暂存块根据当前周期的数据有效信号d_en将当前周期的16位数据确定为有效值传递给所述第j个有效值暂存块;当所述第j个有效值暂存块第四次接收到16位有效值后,将前四次所接收到的16位有效值拼接为一个64位有效值组并发送给所述第j个数据缓存队列din中;
所述第j个总数计数器根据当前周期的数据有效信号d_en对每行的16位有效值个数进行计数,得到当前周期的计数结果total;
所述第j个位置计数器根据当前周期的第j个使能信号coding_j将当前周期自身存储的位数length传递给所述第j个编码生成块,再将当前周期的位数length减“1”后得到下一周期的位数length并存储;所述位数length初始值为31-p;
所述第j个编码生成块根据当前周期的位数length所指向的0/1编码brand中的相应位置,将所接收到的当前周期的比较结果存入所述0/1编码brand中;
所述第j个长度计数器根据当前周期的第j个使能信号coding_j对每行中16位数据的接收次数进行计数,得到当前周期的统计结果;当所述当前周期的统计结果等于Li时,将当前周期的统计结果清零后,产生next_brand置位信号分别发送给第j个位置计数器、所述第j个编码生成块和所述第j个总数计数器;
所述第j个位置计数器根据所接收到的next_brand置位信号将所述位数length置为初始值;
所述第j个编码生成块根据所接收到的next_brand置位信号将Li个周期所存储的0/1编码brand发送给所述第j个编码拼接块后,再将Li个周期所存储的0/1编码brand清零;
所述第j个总数计数器根据所接收到的next_brand置位信号将Li个周期的计数结果total发送给所述第j个编码拼接块后,再将Li个周期的计数结果total清零;
所述第j个编码拼接块将Li个周期所存储的0/1编码brand和Li个周期的计数结果total拼接为64位的压缩码CODE后发送给所述第j个编码缓存队列bin;
当所述k个编码缓存队列bin和k个数据缓存队列din均存入数据后,所述选择控制器控制所述多路选择器按照先读取编码缓存队列bin后读取数据缓存队列din的顺序,依次读取k个编码缓存队列bin和k个数据缓存队列din中存储的数据构成k个输出特征图的压缩数据并作为译码电路的k个输入特征图的压缩数据,发送给所述动态随机存取存储器依次存储;由动态随机存取存储器将k个输出特征图的压缩数据所产生的k个尾地址addr发送给所述尾地址缓存队列ain;
所述选择控制器控制所述多路选择器读取所述尾地址缓存队列ain中的k个尾地址addr并发送给所述动态随机存取存储器;
令译码电路包括:数据读取单元和数据计算单元;
所述数据读取单元包括:两组数据传输模块、读写控制器和地址缓存队列afifo;
每组数据传输模块包括:编码拆分模块、数据通道、编码缓存队列bfifo、有效值缓存队列ififo、权重缓存队列wfifo;
所述读写控制器检测所述地址缓存队列afifo是否为空,若为空,则从所述动态随机存取存储器中读取k个尾地址addr中的8个尾地址并存入所述地址缓存队列afifo中,若不为空,则判断任意一组数据传输模块中的编码缓存队列bfifo中的数据个数是否达到阈值,若达到,则所述读写控制器依次读取所述地址缓存队列afifo中的尾地址;若没达到,则不操作;
所述读写控制器根据所读取的尾地址addr_v,从所述动态随机存取存储器中取出第v张输入特征图所对应的压缩数据,并将第v张输入特征图所对应的所有压缩码CODE存入所述编码缓存队列bfifo中,将第v张输入特征图所对应的所有64位有效值组idata存入所述有效值缓存队列ififo中;v=1,2,…8;
所述读写控制器检测所述权重缓存队列wfifo中的数据个数是否达到阈值,若达到,则从所述动态随机存取存储器中读取第v张输入特征图对应的64位计算权重weight_cal并发送给权重缓存队列wfifo;由所述权重缓存队列wfifo将第v张输入特征图对应的64位计算权重weight_cal经过所述数据通道发送给所述数据计算单元;
所述编码拆分模块读取编码缓存队列bfifo中一个压缩码CODE并拆分为0/1编码brand和计数结果total后分别发送给所述数据通道和所述有效值缓存队列ififo;
所述数据通道将所拆分的0/1编码brand传递给所述数据计算单元;
所述有效值缓存队列ififo根据所拆分的计数结果total输出对应的64位有效值组idata给数据通道用于发送给所述数据计算单元;
所述数据计算单元包括:0/1编码缓存队列br_fifo、有效值存储器iram、权重存储器wram、移位寄存器、窗口寄存器、有效值累加器、位置判断器、权重地址生成器、首位比较器、数据暂存块、4个乘法器和4个加法器;
所述0/1编码缓存队列br_fifo接收所拆分的0/1编码brand,所述有效值存储器iram接收所述64位有效值组idata,所述权重存储器wram接收所述64位计算权重weight_cal;
所述移位寄存器从所述0/1编码缓存队列br_fifo读取一个所拆分的0/1编码brand并存储作为当前周期的计算行编码brand_cur;
所述窗口寄存器读取当前周期的计算行编码brand_cur的高5位并存储作为当前周期的卷积窗口编码brand_dec;
所述有效值累加器对当前周期的卷积窗口编码brand_dec中“1”的个数进行累加,得到当前周期的计算结果rd_cnt,并将发送给所述数据暂存块和所述权重地址生成器;rd_cnt≤5;
所述位置判断器对当前周期的卷积窗口编码brand_dec中每一个“1”的位置进行记录,得到多个位置标识rank_n,n={1,2,…,rd_cnt};
所述权重地址生成器在当前周期判断内置的计数器的值rd_num是否小于等于rd_cnt,若是,则将当前周期的计数器的值rd_num所对应的位置标识rank_rd_num的值赋给权重选择地址w_addr并将其发送给所述权重存储器wram,再将rd_num+1赋值rd_num后继续在下一个周期判断;若不是,则将当前周期的计数器的值rd_num置“1”,并产生译码启动信号next_dec发送给所述移位寄存器和所述数据暂存块;
所述首位比较器读取窗口寄存器中当前周期的卷积窗口编码brand_dec的最高位并与“0”比较,若不等于“0”,则发送指针变动信号ptr_add给所述数据暂存块,若等于“0”,则不发送;
所述数据暂存块从所述有效值存储器iram中读取2个64位有效值组idata并拼接成128位窗口数据data_i作为初始数据;
设置一指针ptr,根据指针ptr值的大小从高位到低位分别指向窗口数据data_i中一个16位有效值,ptr=0,1,2…7,并初始化所述指针ptr的值为0,即指向窗口数据data_i中最低位数的16位有效值;
所述数据暂存块在当前周期判断是否接收到译码启动信号next_dec,若未收到,则指针ptr的值在当前周期加1,即指针ptr在当前周期指向高一级位置的16位有效值作为计算数据data_cal,发送给所述4个乘法器;若接收到译码启动信号next_dec,则指针ptr的值在当前周期内减去当前周期的计算结果rd_cnt的值,再判断是否接收到指针变动信号ptr_add;若接收到指针变动信号ptr_add且指针ptr的值大于等于3,则发送有效值请求信号next_i给所述有效值存储器iram,再将指针ptr清零,若接收到指针变动信号ptr_add但指针ptr的值小于3,则令指针ptr的值加1;若在当前周期未接收到指针变动信号ptr_add,则指针ptr保持不变;
当所述有效值存储器iram在当前周期接收到所述有效值请求信号next_i信号时,则将一个64位有效值组idata发送给所述数据暂存块;
所述数据暂存块在当前周期接收到64位有效值组idata后,将所述128位窗口数据data_i右移64位后,将64位有效值组idata写入所述128位窗口数据data_i的高64位中,从而得到当前周期新的窗口数据data_i;
所述权重存储器wram根据在当前周期的权重选择地址w_addr选择对应64位计算权重weight_cal并拆分为4个权重weight后分别发给4个乘法器;
每个乘法器在当前周期将收到的16位计算数据data_cal与16位权重weight相乘,得到当前周期的乘积mul发往相应的一个加法器;
每个加法器将当前周期所接收的乘积mul与下一层路由器中相应加法器的卷积结果result_low相加,得到当前路由器中一个卷积结果result_cur并发送到上一层路由器所对应的加法器中。
2.一种应用于卷积神经网络的非还原稀疏数据的编译码方法,所述卷积神经网络包含M层卷积层,由任意第i层卷积层得到边长为Li的第i组输出特征图并存入输出特征图暂存块中,其中,Li为正整数,表示输出特征图的行数和列数;i=1,2,…M;所述第i组输出特征图分批传输到k个通道中,任意第j个通道接收每批中的一张输出特征图;其特征是,
所述编译码方法是应用于由k个压缩单元、多路选择器、选择控制器、尾地址缓存队列ain和动态随机存取存储器所组成的编码电路以及由数据读取单元和数据计算单元所组成的译码电路中,且所述动态随机存取存储器中将M层卷积层的各个16位的权重进行配置,使得每4个16位的权重组成一个64位计算权重weight_cal并进行存储;
所述编译码方法是按如下步骤进行:
步骤1、k个通道同时向k个压缩单元发送相应的输出特征图,其中,第j个通道当前周期将输出特征图中16位数据发送给第j个压缩单元,并产生第j个使能信号coding_j也发送给第j个压缩单元;
步骤2、所述第j个压缩单元将当前周期的16位数据与“0”进行比较,若16位数据大于“0”,则令当前周期的比较结果为“1”;并对每行的有效值个数进行计数,得到当前周期的计数结果total;若16位数据小于等于“0”,则令当前周期的比较结果为“0”;
步骤3、每当所述第j个压缩单元获得的比较结果为“1”的次数达到4次时,所述第j个压缩单元将前四次所接收到的16位有效值拼接为一个64位有效值组并存储;
步骤4、所述第j个压缩单元根据当前周期的位数length所指向的0/1编码brand中的相应位置,将所接收到的当前周期的比较结果存入所述0/1编码brand中;所述位数length初始值为31-p;
步骤5、所述第j个压缩单元根据当前周期的第j个使能信号coding_j将当前周期自身存储的位数length减“1”后得到下一周期的位数length并存储;
步骤6、所述第j个压缩单元根据当前周期的第j个使能信号coding_j对每行中16位数据的接收次数进行计数,得到当前周期的统计结果;当所述当前周期的统计结果等于Li时,将当前周期的统计结果清零后,产生next_brand置位信号;
步骤7、所述第j个压缩单元根据next_brand置位信号将所述位数length置为初始值;
步骤8、所述第j个压缩单元将Li个周期所存储的0/1编码brand和Li个周期的计数结果total拼接为64位的压缩码CODE并存储;由所有64位有效值组和所有行的64位的压缩码CODE构成第j个输出特征图的压缩数据;
步骤9、所述第j个压缩单元将Li个周期所存储的0/1编码brand清零,并将Li个周期的计数结果total清零;
步骤10、所述选择控制器控制所述多路选择器按照先读64位的压缩码CODE后读取64位有效值组的顺序,依次读取k个输出特征图的压缩数据并作为译码电路的k个输入特征图的压缩数据后,发送给所述动态随机存取存储器依次存储;由动态随机存取存储器将k个输出特征图的压缩数据所产生的k个尾地址发送给所述尾地址缓存队列ain;
步骤11、所述选择控制器控制所述多路选择器读取所述尾地址缓存队列ain中的k个尾地址并发送给所述动态随机存取存储器;
步骤12、所述数据读取单元检测自身存储的尾地址是否为空,若为空,则从所述动态随机存取存储器中读取k个尾地址中的8个尾地址并存储;若不为空,则判断自身所存储的64位的压缩码CODE的数据个数是否达到阈值,若达到,则所述数据读取单元根据所读取的尾地址addr_v,从所述动态随机存取存储器中取出第v张输入特征图所对应的压缩数据并存储;若没达到,则不操作;v=1,2,…8;
步骤13、所述数据读取单元检测自身存储的计算权重的数据个数是否达到阈值,若达到,则从所述动态随机存取存储器中读取第v张输入特征图对应的64位计算权重weight_cal发送给所述数据计算单元;
步骤14、所述数据读取单元将一个压缩码CODE并拆分为0/1编码brand和计数结果total;
步骤15、所述数据读取单元将所拆分的0/1编码brand传递给所述数据计算单元;并根据所拆分的计数结果total输出对应的64位有效值组idata发送给所述数据计算单元;
步骤16、所述数据计算单元读取一个所拆分的0/1编码brand并存储作为当前周期的计算行编码brand_cur;再将当前周期的计算行编码brand_cur的高5位进行存储并作为当前周期的卷积窗口编码brand_dec;
步骤17、所述数据计算单元对当前周期的卷积窗口编码brand_dec中“1”的个数进行累加,得到当前周期的计算结果rd_cnt;rd_cnt≤5;
步骤18、所述数据计算单元对当前周期的卷积窗口编码brand_dec中每一个“1”的位置进行记录,得到多个位置标识rank_n,n={1,2,…,rd_cnt};
步骤19、所述数据计算单元在当前周期判断内置的计数器的值rd_num是否小于等于rd_cnt,若是,则将当前周期的计数器的值rd_num所对应的位置标识rank_rd_num的值赋给权重选择地址w_addr,再将rd_num+1赋值rd_num后继续在下一个周期判断;若不是,则将当前周期的计数器的值rd_num置“1”,并产生译码启动信号next_dec;
步骤20、所述数据计算单元读取当前周期的卷积窗口编码brand_dec的最高位并与“0”比较,若不等于“0”,则产生指针变动信号ptr_add,若等于“0”,则不产生;
步骤21、所述数据计算单元读取2个64位有效值组idata并拼接成128位窗口数据data_i作为初始数据;
步骤22、设置一指针ptr,根据指针ptr的值的大小从高位到低位分别指向窗口数据data_i中一个16位有效值,ptr=0,1,2…7,并初始化所述指针ptr的值为0,即指向窗口数据data_i中最低位数的16位有效值;
步骤23、所述数据计算单元在当前周期判断是否接收到译码启动信号next_dec,若未收到,则指针ptr的值在当前周期加1,即指针ptr在当前周期指向高一级位置的16位有效值作为计算数据data_cal;若接收到译码启动信号next_dec,则指针ptr的值在当前周期内减去当前周期的计算结果rd_cnt的值,再判断是否接收到指针变动信号ptr_add;若接收到指针变动信号ptr_add且指针ptr的值大于等于3,则产生有效值请求信号next_i;再将指针ptr清零,若接收到指针变动信号ptr_add但指针ptr的值小于3,则令指针ptr的值加1;若在当前周期未接收到指针变动信号ptr_add,则指针ptr保持不变;
步骤24、当所述数据计算单元产生所述有效值请求信号next_i信号时,则读取一个64位有效值组idata;
步骤25、所述数据计算单元将所述128位窗口数据data_i右移64位后,将读取的一个64位有效值组idata写入所述128位窗口数据data_i的高64位中,从而得到当前周期新的窗口数据data_i;
步骤26、所述数据计算单元根据在当前周期的权重选择地址w_addr选择对应64位计算权重weight_cal并拆分为4个权重weight;
步骤27、将收到的16位计算数据data_cal与16位权重weight相乘,得到当前周期的乘积mul;
步骤28、将当前周期所接收的乘积mul与下一层路由器中的卷积结果data_low相加,得到当前路由器中一个卷积结果result_cur并发送到上一层路由器中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811340018.0A CN109104197B (zh) | 2018-11-12 | 2018-11-12 | 应用于卷积神经网络的非还原稀疏数据的编译码电路及其编译码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811340018.0A CN109104197B (zh) | 2018-11-12 | 2018-11-12 | 应用于卷积神经网络的非还原稀疏数据的编译码电路及其编译码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109104197A CN109104197A (zh) | 2018-12-28 |
CN109104197B true CN109104197B (zh) | 2022-02-11 |
Family
ID=64870196
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811340018.0A Active CN109104197B (zh) | 2018-11-12 | 2018-11-12 | 应用于卷积神经网络的非还原稀疏数据的编译码电路及其编译码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109104197B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109905131B (zh) * | 2019-02-27 | 2021-01-29 | 中国科学院半导体研究所 | 一种脉冲序列压缩编码方法和装置 |
CN110209375B (zh) * | 2019-05-30 | 2021-03-26 | 浙江大学 | 一种基于radix-4编码和差分权重存储的乘累加电路 |
CN110333827B (zh) * | 2019-07-11 | 2023-08-08 | 山东浪潮科学研究院有限公司 | 一种数据加载装置和数据加载方法 |
CN110569970B (zh) * | 2019-09-12 | 2022-03-15 | 合肥工业大学 | 一种应用于卷积神经网络中硬件加速器的数据传输方法 |
CN111144558B (zh) * | 2020-04-03 | 2020-08-18 | 深圳市九天睿芯科技有限公司 | 基于时间可变的电流积分和电荷共享的多位卷积运算模组 |
CN113627600B (zh) * | 2020-05-07 | 2023-12-29 | 合肥君正科技有限公司 | 一种基于卷积神经网络的处理方法及其系统 |
CN112070217B (zh) * | 2020-10-15 | 2023-06-06 | 天津大学 | 一种卷积神经网络加速器的内部存储带宽优化方法 |
CN112434184B (zh) * | 2020-12-15 | 2022-03-01 | 四川长虹电器股份有限公司 | 基于历史影视海报的深度兴趣网络的排序方法 |
CN114792132B (zh) * | 2022-06-22 | 2022-11-29 | 苏州浪潮智能科技有限公司 | 一种脉冲神经网络加速计算系统、方法、设备及介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101051836A (zh) * | 2007-03-30 | 2007-10-10 | 北京中星微电子有限公司 | 传输流解码与编码定时同步的装置及方法 |
CN101183873A (zh) * | 2007-12-11 | 2008-05-21 | 中山大学 | 一种基于bp神经网络的嵌入式系统数据压缩解压缩方法 |
CN107239825A (zh) * | 2016-08-22 | 2017-10-10 | 北京深鉴智能科技有限公司 | 考虑负载均衡的深度神经网络压缩方法 |
CN107317583A (zh) * | 2017-05-18 | 2017-11-03 | 湖北工业大学 | 基于循环神经网络的可变步长分布式压缩感知重建方法 |
CN107590533A (zh) * | 2017-08-29 | 2018-01-16 | 中国科学院计算技术研究所 | 一种用于深度神经网络的压缩装置 |
CN107862381A (zh) * | 2017-11-06 | 2018-03-30 | 南京大学 | 一种适用于多种卷积模式的fir滤波器实现 |
WO2018106805A1 (en) * | 2016-12-09 | 2018-06-14 | William Marsh Rice University | Signal recovery via deep convolutional networks |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2424117A3 (en) * | 2010-08-24 | 2013-01-02 | Her Majesty the Queen in Right of Canada, as represented by the Minister of Industry, through The Communications Research Centre Canada | Sparse data compression |
US10735023B2 (en) * | 2017-02-24 | 2020-08-04 | Texas Instruments Incorporated | Matrix compression accelerator system and method |
-
2018
- 2018-11-12 CN CN201811340018.0A patent/CN109104197B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101051836A (zh) * | 2007-03-30 | 2007-10-10 | 北京中星微电子有限公司 | 传输流解码与编码定时同步的装置及方法 |
CN101183873A (zh) * | 2007-12-11 | 2008-05-21 | 中山大学 | 一种基于bp神经网络的嵌入式系统数据压缩解压缩方法 |
CN107239825A (zh) * | 2016-08-22 | 2017-10-10 | 北京深鉴智能科技有限公司 | 考虑负载均衡的深度神经网络压缩方法 |
WO2018106805A1 (en) * | 2016-12-09 | 2018-06-14 | William Marsh Rice University | Signal recovery via deep convolutional networks |
CN107317583A (zh) * | 2017-05-18 | 2017-11-03 | 湖北工业大学 | 基于循环神经网络的可变步长分布式压缩感知重建方法 |
CN107590533A (zh) * | 2017-08-29 | 2018-01-16 | 中国科学院计算技术研究所 | 一种用于深度神经网络的压缩装置 |
CN107862381A (zh) * | 2017-11-06 | 2018-03-30 | 南京大学 | 一种适用于多种卷积模式的fir滤波器实现 |
Non-Patent Citations (2)
Title |
---|
Zero and data reuse-aware fast convolution for deep neural networks on GPU;Hyunsun Park等;《International Conference on Hardware/Software Codesign and System Synthesis》;20161007;全文 * |
带卷积的稀疏表示算法的研究及应用;陈小陶;《中国优秀硕士学位论文全文数据库 信息科技辑》;20180315;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109104197A (zh) | 2018-12-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109104197B (zh) | 应用于卷积神经网络的非还原稀疏数据的编译码电路及其编译码方法 | |
CN110070178B (zh) | 一种卷积神经网络计算装置及方法 | |
CN101540654B (zh) | 一种交织速率匹配和解交织解速率匹配方法 | |
CN102065309B (zh) | 一种dct实现方法及dct实现电路 | |
CN102176750B (zh) | 高性能自适应二进制算术编码器 | |
US6643402B1 (en) | Image compression device allowing rapid and highly precise encoding while suppressing code amount of image data after compression | |
CN103546161A (zh) | 基于二进制位处理的无损压缩方法 | |
CN116594572B (zh) | 浮点数流式数据压缩方法、装置、计算机设备及介质 | |
CN102111163B (zh) | Turbo编码器及编码方法 | |
CN105120276A (zh) | 自适应Motion JPEG编码方法和系统 | |
CN114268323B (zh) | 支持行存的数据压缩编码方法、装置及时序数据库 | |
CN110569970B (zh) | 一种应用于卷积神经网络中硬件加速器的数据传输方法 | |
CN114640354A (zh) | 数据压缩方法、装置、电子设备及计算机可读存储介质 | |
CN114466196A (zh) | 视频数据处理方法、系统、装置及计算机可读存储介质 | |
CN101488225B (zh) | 一种位平面编码器的vlsi系统 | |
CN115828044B (zh) | 基于神经网络双重稀疏性矩阵乘法运算电路、方法和装置 | |
CN104113759A (zh) | 视频系统、视频帧缓存再压缩/解压缩方法与装置 | |
CN105099460A (zh) | 字典压缩方法、字典解压缩方法与字典建构方法 | |
CN102136878B (zh) | 一种速率匹配实现方法和系统 | |
CN113902097A (zh) | 针对稀疏化cnn神经网络模型的游程编码加速器及方法 | |
CN104394412A (zh) | 一种基于转换压缩的最大误差图像压缩方法 | |
CN113472358A (zh) | 一种基于准循环生成矩阵的高速并行编码器 | |
US10411733B2 (en) | Data compression and decompression | |
CN115333544B (zh) | 一种数据解压缩电路及其方法、芯片及电子设备 | |
CN102158717B (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 |