CN116861143A - 一种小输入图小权重的卷积的实现方法 - Google Patents

一种小输入图小权重的卷积的实现方法 Download PDF

Info

Publication number
CN116861143A
CN116861143A CN202210312160.4A CN202210312160A CN116861143A CN 116861143 A CN116861143 A CN 116861143A CN 202210312160 A CN202210312160 A CN 202210312160A CN 116861143 A CN116861143 A CN 116861143A
Authority
CN
China
Prior art keywords
data
load
width
input
wram
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
Application number
CN202210312160.4A
Other languages
English (en)
Inventor
田凤彬
于晓静
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Ingenic Semiconductor Co Ltd
Original Assignee
Beijing Ingenic Semiconductor Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Ingenic Semiconductor Co Ltd filed Critical Beijing Ingenic Semiconductor Co Ltd
Priority to CN202210312160.4A priority Critical patent/CN116861143A/zh
Publication of CN116861143A publication Critical patent/CN116861143A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Computing Systems (AREA)
  • Image Processing (AREA)

Abstract

本发明提供了一种小输入图小权重的卷积的实现方法,包括:S1,设定数据的存储:设定特征图的存储方式:特征图数据存储顺序:32,W,H,N,其中32为深度的一部分,W为宽,H为高,N为深度上有多少个32的个数,即32*N为特征图的深度;设定权重的存储方式:采用32*32上连续,接着在卷积核的宽度上连续,再在卷积核的高度上连续,接着在卷积核的输入深度/32的个数上连续,最后在输出深度/32的个数上连续;在处理之前需要将通常的输入深度连续,再存储卷积核宽高,最后卷积核输出深度存储成需要的顺序;S2,使用simd指令将所有数据从ddr加载到fram,wram,每次加载32个数据;S3,卷积计算的实现。本方法实现了小输入特征图小权重的计算,实现加速,提高效率。

Description

一种小输入图小权重的卷积的实现方法
技术领域
本发明涉及图像处理技术领域,特别涉及一种小输入图小权重的卷积的实现方法。
背景技术
北京君正集成电路股份有限公司的T40型号芯片(简称:北京君正T40芯片)是一种AI的深度学习的低功耗芯片。拥有独立计算的卷积计算单元,独特的simd指令。拥有一个oram存储,一个存放权重的wram和一个存放输入数据的fram。其实现方法,必须将数据存放到wram和fram中,然后才能进行卷积计算。oram、wram、fram大小为芯片给定大小。例如,wram大小为288*1024byte,fram为128*1024byte;oram大小为2048*1024byte。在下面计算使用中会用到这些假设的数据。
所有数据存储在ddr中,需要dma指令搬数到oram,或simd指令加载数据到制定寄存器,再用特殊指令搬到wram或fram中。
由于这是一款新的芯片。普通算法虽然可以实现,但效率很低。并且现有方法无法使用特有的计算单元和指令。不同大小输入特征图和不同的权重,实现方法不一样,使用不合适的算法导致效率急剧下降。
另外,现有技术中的常用术语如下:
1、卷积核:卷积核是用来做图像处理时的矩阵,与原图像做运算的参数。卷积核通常是一个列矩阵数组成(例如3*3的矩阵),该区域上每个方格都有一个权重值。矩阵形状一般是1×1,3×3,5×5,7×7,1×3,3×1,2×2,1×5,5×1,…
2、卷积:将卷积核的中心放置在要计算的像素上,一次计算核中每个元素和其覆盖的图像像素值的乘积并求和,得到的结构就是该位置的新像素值,这个过程称为卷积。
3、特征图:输入数据通过卷积计算后得到的结果称之为特征图,数据通过全连接后生成的结果也称为特征图。特征图大小一般表示为长×宽×深度,或1×深度。
4、FRAM(Feature RAM,即特征图的RAM):是一种存储器,用于存储全部或部分特征图,直接供给硬件计算单元计算的存储器。属于计算单元的存储部分。使用计算单元,必须把特征图数据先放到FRAM。
5、WRAM(Weight RAM,即权重的RAM):是一种存储器,用于存储全部或部分权重,直接供给硬件计算单元计算的存储器。属于计算单元的存储部分。使用计算单元,必须把权重数据先放到FRAM。
发明内容
为了解决上述现有技术中的问题,本申请的目的在于:为了解决上述这种情况,根据特殊情况,设计了如下一种特殊的计算方法,特别是在北京君正T40芯片上实现小输入特征图,小权重的计算。
具体地,本发明提供一种小输入图小权重的卷积的实现方法,所述方法包括以下步骤:
S1,设定数据的存储:
设定特征图的存储方式:特征图数据存储顺序:32,W,H,N,其中32为深度的一部分,W为宽,H为高,N为深度上有多少个32的个数,即32*N为特征图的深度;数据在32上连续,再在宽度上连续,接着在高度上连续,最后在深度/32的个数上连续;
设定权重的存储方式:采用32*32上连续,接着在卷积核的宽度上连续,再在卷积核的高度上连续,接着在卷积核的输入深度/32的个数上连续,最后在输出深度/32的个数上连续;在处理之前需要将通常的输入深度连续,再在卷积核的宽度上连续,最后卷积核输出深度的连续的数据,存储成需要的顺序;
S2,使用simd指令将所有数据从ddr加载到fram,wram,每次加载32个数据:
S2.1,使用simd指令将所有数据从ddr加载到fram,每次加载32个数据:
使用simd加载数据指令加载到VR0,VR1中;
使用fram加载数据指令,加载数据到fram;
由于特征图存储顺序已经是按照要求存储,并且数据大小能够完全放到fram中,所以能够按照默认顺序直接存储,直到所有数据全部存放完毕;
S2.2,使用simd指令将所有数据从ddr加载到wram,每次加载32个数据:
使用simd加载数据指令加载到VR0,VR1中;
使用wram加载数据指令,加载数据到wram;
由于权重存储顺序已经是按照要求存储,并且数据大小能够完全放到wram中,所以可以按照默认顺序直接存储,直到所有数据全部存放完毕;S3,卷积计算的实现:
计算卷积,需要给定fram的初始地址,初始为0,wram的初始地址,初始也为0;
设输入特征图深度为32*in_ic32,in_ic32为输入深度的倍数,
输入宽度为in_width,输入高度in_height;
输出特征图深度为32*out_ic32,out_ic32为输出深度的倍数,
输出宽度为out_width,输入高度out_height;
卷积核宽为kernel_w,高为kernel_h;
卷积核宽度方向步长为stride_w,卷积核高度度方向为stride_h;
输出特征图宽度与输入特征图宽度的关系in_width=out_width*stride_w,输出特征图高度与输入特征图高度的关系in_height=out_height*stride_h;如果不等,需要根据具体的卷积要求对输入特征图补0,补齐到相等的宽高位置;例如当卷积核为3时,步长为1,输出特征图宽高与输入特征图宽高一样,那么需要对输入特征图补0,填充的方法根据使用者要求情况而定,可以左右上下均等填充,也可以只填充一边;
生成结果保存到vrd中。
所述方法适用于输入特征图比较小,即特征图数据个数小于等于fram,权重比较小,即权重个数小于等于wram,fram、wram能够容纳下,比特位数均为8比特,卷积核长或宽不超过3的情况;同时要求输入深度是32的倍数,输出深度也是32的倍数;如果模型中的一些层输入深度不是32倍数,需要进行补齐为32的倍数;相应的权重也是补齐处理。
所述方法包含指令如下:
a)卷积计算指令:
ingenic_conv_bit8(fram_id,wram_id,ic32_num,kernel_w,kernel_h,stride_x,stride_y,feature_w,feature_h,vrd);
输入变量fram_id为fram使用的起始地址,wram_id为wram使用的起始地址,ic32_num为计算的个数,kernel_w为卷积核的宽度,kernel_h为卷积核的高度,stride_x为卷积计算x方向的步长,stride_y为卷积计算y方向的步长,feature_w为输入特征图的宽,feature_h为输入特征图的高,vrd为生成结果;
使用说明:
每次计算4个像素点结果;计算单元为深度32,生成结果也是32,生成4个pixel结果;如果ic32_num=1,就是计算输入深度为32x1,生成输出深度为32的4个pixel;如果ic32_num=2,就是计算输入深度为32x2,生成输出深度为32的4个pixel;如果ic32_num=3,是计算输入深度为32x3,生成输出深度为32的4个pixel;计算的最小深输入深度为32,最小输出深度为32,最小输出结果pixel个数为4;设置fram的宽度,也就是加载输入特征图中多少个piexl,属于卷积计算指令的参数设置,当前是设置处理的宽度为feature_w;
b)simd加载数据指令:
设为ingenic_load(indata,VR0,m)
输入待载入的数据,当前是数据的指针记为indata,从该数据indata在内存里指向的位置m开始加载128bit的数据,
如果是8bit的数据是加载16个,如果是16bit数据加载8个,如果是32bit,加载4个数据;数据加载到变量vrd寄存器中;其中m是按照byte,即8bit为一个单位计算;VR0为simd的VR寄存器,最多存储512bit数据;
c)fram加载数据指令:
设为ingenic_vr2fram(VR0,fram_load_id,num)
输入变量,VR0为输入数据,fram_load_id为加载到fram中的开始地址,num为0或1,0时是指令结束后fram_load_id数据不变,1时指令结束后fram_load_id=fram_load_id+32;
d)wram加载数据指令:
设为ingenic_vr2wram(VR0,wram_load_id,num)
输入变量,VR0为输入数据,wram_load_id为加载到wram中的开始地址,num为0或1,0时是指令结束后wram_load_id数据不变,1时指令结束后wram_load_id=fram_load_id+32。
所述步骤S2.1中,使用simd加载数据指令加载到VR0,VR1中:
ingenic_load(indata,VR0,1)
ingenic_load(indata,VR0,1)
ingenic_load(indata,VR1,1)
ingenic_load(indata,VR1,1)
使用fram加载数据指令,加载数据到fram:
ingenic_vr2fram(VR0,fram_load_id,1)
ingenic_vr2fram(VR1,fram_load_id,1);
所述步骤S2.2中,使用simd加载数据指令加载到VR0,VR1中:
ingenic_load(widthdata,VR0,1)
ingenic_load(widthdata,VR0,1)
ingenic_load(widthdata,VR1,1)
ingenic_load(widthdata,VR1,1)
使用wram加载数据指令,加载数据到wram:
ingenic_vr2wram(VR0,wram_load_id,1)
ingenic_vr2wram(VR1,wram_load_id,1)。
所述步骤S2.1中,当fram无法存放下时,无法使用该方法;所述步骤S2.2中,当wram无法存放下时,无法使用该方法。
所述步骤S3中,卷积计算,生成的顺序为:
先生成第一个32*out_width*out_height,
再生成第二个32*out_width*out_height,
……
直到最后一个32*out_width*out_height;
在每个32*out_width*out_height中,先生成第一行的32*out_width,再生成第二行的32*out_width,直到最后一行的32*out_width;
对于32*out_width,先生成第一个32*4,再生成第二个32*4,直到最后一个32*4,也就是完成32*out_width。
所述步骤S3的具体实现如下:
S3.1,初始化wram_id=0;
S3.2,初始化ocnum_i=0,假设ocnum_i<out_ic32成立,则继续执行,且ocnum_1++;不成立,则跳出本步骤;
S3.3,初始化ydir_i=0,假设ydir_i<out_height成立,则继续执行,且ydir_i++;不成立,则跳出本步骤;
执行fram_id=(out_width*stride_w)*(ydir_i*stride_h)*32*in_ic32;
执行vrd=out_width*ydir_i*32*in_ic32;
S3.4,初始化xdir_i=0,假设xdir_i<out_width成立,则继续执行,且xdir_i+=4;不成立,则跳出本步骤;
执行fram_id=fram_id+32*4*stride_w;
执行ingenic_conv_bit8(fram_id,wram_id,ic32_num,kernel_w,kernel_h,stride_x,stride_y,in_width,in_height vrd);
执行vrd=vrd+32*4。
由此,本申请的优势在于:通过设计本申请的方法,实现小输入特征图,小权重的计算,实现加速,提高效率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。
图1是本发明的方法流程图。
图2是本发明方法涉及的代码示意图。
具体实施方式
为了能够更清楚地理解本发明的技术内容及优点,现结合附图对本发明进行进一步的详细说明。
本发明涉及一种小输入图小权重的卷积的实现方法,所述方法:
1.适用要求。可在例如北京君正T40芯片上使用,特征图大小可以在oram里容纳,权重相对较小,wram能够容纳下,比特位数均为8比特,每次计算生成8个pixel需要的特征图数据可以完全放到fram中。指令如下:
a)卷积计算指令:
ingenic_conv_bit8(fram_id,wram_id,ic32_num,kernel_w,kernel_h,stride_x,stride_y,feature_w,feature_h,vrd);1、使用要求。这是在北京君正T40芯片上使用,特征图比较小,权重也比较小,fram、wram能够容纳下,比特位数均为8比特。指令如下:
a)卷积计算指令:
ingenic_conv_bit8(fram_id,wram_id,ic32_num,kernel_w,kernel_h,stride_x,stride_y,feature_w,feature_h,vrd);
输入变量fram_id为fram使用的起始地址,wram_id为wram使用的起始地址,ic32_num为计算的个数,kernel_w为卷积核的宽度,kernel_h为卷积核的高度,stride_x为卷积计算x方向的步长,stride_y为卷积计算y方向的步长,feature_w为输入特征图的宽,feature_h为输入特征图的高。vrd为生成结果。
使用说明:每次计算4个像素点结果。计算单元为深度32,生成结果也是32,生成4个pixel结果。如果ic32_num=1,就是计算输入深度为32x1,生成输出深度为32的4个pixel。如果ic32_num=3,是计算输入深度为32x3,生成输出深度为32的4个pixel。如果ic32_num=2,就是计算输入深度为32x2,生成输出深度为32的4个pixel。如果ic32_num=3,是计算输入深度为32x3,生成输出深度为32的4个pixel。计算的最小深输入深度为32,最小输出深度为32,最小输出结果pixel个数为4。设置fram的宽度,也就是加载输入特征图中多少个piexl,属于卷积计算指令的参数设置,当前是设置处理的宽度为feature_w。
b)simd加载数据指令:
ingenic_load(indata,VR0,m)
输入的待载入的数据,当前是数据的指针indata,从该数据indata在内存里指向的位置m开始加载128bit的数据,如果是8bit的数据是加载16个,如果是16bit数据加载8个,如果是32bit,加载4个数据。数据加载到变量vrd寄存器中。其中m是按照byte,即8bit为一个单位计算。VR0为simd的VR寄存器,最多存储512bit数据。
c)fram加载数据指令:
ingenic_vr2fram(VR0,fram_load_id,num)
输入变量,VR0为输入数据,fram_load_id为加载到fram中的开始地址,num为0或1,0时是指令结束后fram_load_id数据不变,1时指令结束后fram_load_id=fram_load_id+32。
d)wram加载数据指令:
ingenic_vr2wram(VR0,wram_load_id,num)
输入变量,VR0为输入数据,wram_load_id为加载到wram中的开始地址,num为0或1,0时是指令结束后wram_load_id数据不变,1时指令结束后wram_load_id=fram_load_id+32。
2、卷积计算
该方法适用于输入特征图比较小(特征图数据个数小于等于fram),权重比较小(权重个数小于等于wram),卷积核长或宽不超过3的情况。同时要求输入深度要求是32的倍数,输出深度也是32的倍数。如果模型中的一些层输入深度不是32倍数,需要进行补齐为32的倍数。相应的权重也是补齐处理。
具体地,如图1所示,所述方法包括以下步骤:
S1,数据的存储
特征图的存储方式:特征图数据存储顺序,32,W,H,N。其中32为深度的一部分,W为宽,H为高,N为深度上有多少个32的个数,即32*N为特征图的深度。数据在32上连续,再在宽度上连续,接着在高度上连续,最后在深度/32的个数上连续。
权重的存储方式,采用32*32上连续,接着在卷积核的宽度上连续,再在卷积核的高度上连续,接着在卷积核的输入深度/32的个数上连续,最后在输出深度/32的个数上连续。在处理之前需要将通常的输入深度连续,再卷积核宽高,最后卷积核输出深度存储成需要的顺序。
S2,使用simd将所有数据从ddr加载到fram,wram,每次加载32个数据:
S2.1,使用simd将所有数据从ddr加载到fram,每次加载32个数据:
使用simd加载数据指令加载到VR0,VR1中:
ingenic_load(indata,VR0,1)
ingenic_load(indata,VR0,1)
ingenic_load(indata,VR1,1)
ingenic_load(indata,VR1,1)
使用fram加载数据指令,加载数据到fram。
ingenic_vr2fram(VR0,fram_load_id,1)
ingenic_vr2fram(VR1,fram_load_id,1)
由于特征图存储顺序已经是按照要求存储,并且数据大小能够完全放到fram中,所以可以按照默认顺序直接存储,直到所有数据全部存放完毕。当fram无法存放下时,无法使用该方法。
S2.2,使用simd将所有数据从ddr加载到wram,每次加载32个数据:
使用simd加载数据指令加载到VR0,VR1中
ingenic_load(widthdata,VR0,1)
ingenic_load(widthdata,VR0,1)
ingenic_load(widthdata,VR1,1)
ingenic_load(widthdata,VR1,1)
使用wram加载数据指令,加载数据到wram。
ingenic_vr2wram(VR0,wram_load_id,1)
ingenic_vr2wram(VR1,wram_load_id,1)
由于权重存储顺序已经是按照要求存储,并且数据大小能够完全放到wram中,所以可以按照默认顺序直接存储,直到所有数据全部存放完毕。当wram无法存放下时,无法使用该方法。
S3,卷积计算的实现。
计算卷积,需要给定fram的初始地址,初始为0,wram的初始地址,初始也为0。设输入特征图深度为32*in_ic32,in_ic32为输入深度的倍数,输入宽度为in_width,输入高度in_height;输出特征图深度为32*out_ic32,out_ic32为输出深度的倍数,输出宽度为out_width,输入高度out_height;卷积核宽为kernel_w,高为kernel_h;卷积核宽度方向步长为stride_w,卷积核高度度方向为stride_h。输出特征图宽度与输入特征图宽度的关系in_width=out_width*stride_w,输出特征图高度与输入特征图高度关系in_height=out_height*stride_h。如果不等需要根据具体的卷积要求对输入特征图补0,补齐到相等的宽高位置(例如当卷积核为3时,步长为1,输出特征图宽高与输入特征图宽高一样,那么需要对输入特征图补0,填充的方法根据使用者要求情况而定,可以左右上下均等填充,也可以只填充一边)。生成结果保存到vrd中。
卷积计算,生成的顺序为:先生成第一个32*out_width*out_height,再生成第二个32*out_width*out_height,直到最后一个32*out_width*out_height。在每个32*out_width*out_height中,先生成第一行的32*out_width,再生成第二行的32*out_width,直到最后一行的32*out_width。对于32*out_width,先生成第一个32*4,再生成第二个32*4,直到最后一个32*4,也就是完成32*out_width。
如图2所示,步骤S3具体实现如下:
S3.1,初始化wram_id=0;
S3.2,初始化ocnum_i=0,假设ocnum_i<out_ic32成立,则继续执行,且ocnum_1++;不成立,则跳出本步骤;
S3.3,初始化ydir_i=0,假设ydir_i<out_height成立,则继续执行,且ydir_i++;不成立,则跳出本步骤;
执行fram_id=(out_width*stride_w)*(ydir_i*stride_h)*32*in_ic32;
执行vrd=out_width*ydir_i*32*in_ic32;
S3.4,初始化xdir_i=0,假设xdir_i<out_width成立,则继续执行,且xdir_i+=4;不成立,则跳出本步骤;
执行fram_id=fram_id+32*4*stride_w;
执行ingenic_conv_bit8(fram_id,wram_id,ic32_num,kernel_w,kernel_h,stride_x,stride_y,in_width,in_height vrd);
执行vrd=vrd+32*4。
综上所述,本申请的关键点在于:
特征图的存储方式,权重的存储方式,数据加载到fram和wram的方法;以及卷积的实现方法。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种小输入图小权重的卷积的实现方法,其特征在于,所述方法包括以下步骤:
S1,设定数据的存储:
设定特征图的存储方式:特征图数据存储顺序:32,W,H,N,其中32为深度的一部分,W为宽,H为高,N为深度上有多少个32的个数,即32*N为特征图的深度;数据在32上连续,再在宽度上连续,接着在高度上连续,最后在深度/32的个数上连续;
设定权重的存储方式:采用32*32上连续,接着在卷积核的宽度上连续,再在卷积核的高度上连续,接着在卷积核的输入深度/32的个数上连续,最后在输出深度/32的个数上连续;在处理之前需要将通常的输入深度连续,再在卷积核的宽度上连续,最后卷积核输出深度的连续的数据,存储成需要的顺序;
S2,使用simd指令将所有数据从ddr加载到fram,wram,每次加载32个数据:
S2.1,使用simd指令将所有数据从ddr加载到fram,每次加载32个数据:
使用simd加载数据指令加载到VR0,VR1中;
使用fram加载数据指令,加载数据到fram;
由于特征图存储顺序已经是按照要求存储,并且数据大小能够完全放到fram中,所以能够按照默认顺序直接存储,直到所有数据全部存放完毕;S2.2,使用simd指令将所有数据从ddr加载到wram,每次加载32个数据:
使用simd加载数据指令加载到VR0,VR1中;
使用wram加载数据指令,加载数据到wram;
由于权重存储顺序已经是按照要求存储,并且数据大小能够完全放到wram中,所以可以按照默认顺序直接存储,直到所有数据全部存放完毕;S3,卷积计算的实现:
计算卷积,需要给定fram的初始地址,初始为0,wram的初始地址,初始也为0;
设输入特征图深度为32*in_ic32,in_ic32为输入深度的倍数,
输入宽度为in_width,输入高度in_height;
输出特征图深度为32*out_ic32,out_ic32为输出深度的倍数,
输出宽度为out_width,输入高度out_height;
卷积核宽为kernel_w,高为kernel_h;
卷积核宽度方向步长为stride_w,卷积核高度度方向为stride_h;
输出特征图宽度与输入特征图宽度的关系in_width=out_width*stride_w,输出特征图高度与输入特征图高度的关系in_height=out_height*stride_h;如果不等,需要根据卷积要求对输入特征图补0,补齐到相等的宽高位置,生成结果保存到vrd中。
2.根据权利要求1所述的一种小输入图小权重的卷积的实现方法,其特征在于,所述方法适用于输入特征图数据个数小于等于fram,权重个数小于等于wram,fram、wram能够容纳下,比特位数均为8比特,卷积核长或宽不超过3的情况;同时要求输入深度是32的倍数,输出深度也是32的倍数;如果模型中的一些层输入深度不是32倍数,需要进行补齐为32的倍数;相应的权重也是补齐处理。
3.根据权利要求1所述的一种小输入图小权重的卷积的实现方法,其特征在于,所述方法包含指令如下:
a)卷积计算指令:
ingenic_conv_bit8(fram_id,wram_id,ic32_num,kernel_w,kernel_h,stride_x,stride_y,feature_w,feature_h,vrd);
输入变量fram_id为fram使用的起始地址,wram_id为wram使用的起始地址,ic32_num为计算的个数,kernel_w为卷积核的宽度,kernel_h为卷积核的高度,stride_x为卷积计算x方向的步长,stride_y为卷积计算y方向的步长,feature_w为输入特征图的宽,feature_h为输入特征图的高,vrd为生成结果;
使用说明:
每次计算4个像素点结果;计算单元为深度32,生成结果也是32,生成4个pixel结果;如果ic32_num=1,就是计算输入深度为32x1,生成输出深度为32的4个pixel;如果ic32_num=2,就是计算输入深度为32x2,生成输出深度为32的4个pixel;如果ic32_num=3,是计算输入深度为32x3,生成输出深度为32的4个pixel;计算的最小深输入深度为32,最小输出深度为32,最小输出结果pixel个数为4;设置fram的宽度,也就是加载输入特征图中多少个piexl,属于卷积计算指令的参数设置,当前是设置处理的宽度为feature_w;
b)simd加载数据指令:
设为ingenic_load(indata,VR0,m)
输入待载入的数据,当前是数据的指针记为indata,从该数据indata在内存里指向的位置m开始加载128bit的数据,
如果是8bit的数据是加载16个,如果是16bit数据加载8个,如果是32bit,加载4个数据;数据加载到变量vrd寄存器中;其中m是按照byte,即8bit为一个单位计算;VR0为simd的VR寄存器,最多存储512bit数据;
c)fram加载数据指令:
设为ingenic_vr2fram(VR0,fram_load_id,num)
输入变量,VR0为输入数据,fram_load_id为加载到fram中的开始地址,num为0或1,0时是指令结束后fram_load_id数据不变,1时指令结束后fram_load_id=fram_load_id+32;
d)wram加载数据指令:
设为ingenic_vr2wram(VR0,wram_load_id,num)
输入变量,VR0为输入数据,wram_load_id为加载到wram中的开始地址,num为0或1,0时是指令结束后wram_load_id数据不变,1时指令结束后wram_load_id=fram_load_id+32。
4.根据权利要求4所述的一种小输入图小权重的卷积的实现方法,其特征在于,
所述步骤S2.1中,使用simd加载数据指令加载到VR0,VR1中:
ingenic_load(indata,VR0,1)
ingenic_load(indata,VR0,1)
ingenic_load(indata,VR1,1)
ingenic_load(indata,VR1,1)
使用fram加载数据指令,加载数据到fram:
ingenic_vr2fram(VR0,fram_load_id,1)
ingenic_vr2fram(VR1,fram_load_id,1);
所述步骤S2.2中,使用simd加载数据指令加载到VR0,VR1中:
ingenic_load(widthdata,VR0,1)
ingenic_load(widthdata,VR0,1)
ingenic_load(widthdata,VR1,1)
ingenic_load(widthdata,VR1,1)
使用wram加载数据指令,加载数据到wram:
ingenic_vr2wram(VR0,wram_load_id,1)
ingenic_vr2wram(VR1,wram_load_id,1)。
5.根据权利要求1所述的一种小输入图小权重的卷积的实现方法,其特征在于,所述步骤S2.1中,当fram无法存放下时,无法使用该方法;所述步骤S2.2中,当wram无法存放下时,无法使用该方法。
6.根据权利要求3所述的一种小输入图小权重的卷积的实现方法,其特征在于,所述步骤S3中,卷积计算,生成的顺序为:
先生成第一个32*out_width*out_height,
再生成第二个32*out_width*out_height,
……
直到最后一个32*out_width*out_height;
在每个32*out_width*out_height中,先生成第一行的32*out_width,再生成第二行的32*out_width,直到最后一行的32*out_width;
对于32*out_width,先生成第一个32*4,再生成第二个32*4,直到最后一个32*4,也就是完成32*out_width。
7.根据权利要求6所述的一种小输入图小权重的卷积的实现方法,其特征在于,所述步骤S3的具体实现如下:
S3.1,初始化wram_id=0;
S3.2,初始化ocnum_i=0,假设ocnum_i<out_ic32成立,则继续执行,且ocnum_1++;不成立,则跳出本步骤;
S3.3,初始化ydir_i=0,假设ydir_i<out_height成立,则继续执行,且ydir_i++;不成立,则跳出本步骤;
执行fram_id=(out_width*stride_w)*(ydir_i*stride_h)*32*in_ic32;
执行vrd=out_width*ydir_i*32*in_ic32;
S3.4,初始化xdir_i=0,假设xdir_i<out_width成立,则继续执行,且xdir_i+=4;不成立,则跳出本步骤;
执行fram_id=fram_id+32*4*stride_w;
执行ingenic_conv_bit8(fram_id,wram_id,ic32_num,kernel_w,kernel_h,stride_x,stride_y,in_width,in_height vrd);
执行vrd=vrd+32*4。
8.根据权利要求1所述的一种小输入图小权重的卷积的实现方法,其特征在于,所述根据卷积要求对输入特征图补0时,假设当卷积核为3时,步长为1,输出特征图宽高与输入特征图宽高一样,那么需要对输入特征图补0,填充的方法根据使用者要求情况而定,左右上下均等填充,或者,只填充一边。
CN202210312160.4A 2022-03-28 2022-03-28 一种小输入图小权重的卷积的实现方法 Pending CN116861143A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210312160.4A CN116861143A (zh) 2022-03-28 2022-03-28 一种小输入图小权重的卷积的实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210312160.4A CN116861143A (zh) 2022-03-28 2022-03-28 一种小输入图小权重的卷积的实现方法

Publications (1)

Publication Number Publication Date
CN116861143A true CN116861143A (zh) 2023-10-10

Family

ID=88225500

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210312160.4A Pending CN116861143A (zh) 2022-03-28 2022-03-28 一种小输入图小权重的卷积的实现方法

Country Status (1)

Country Link
CN (1) CN116861143A (zh)

Similar Documents

Publication Publication Date Title
CN109919311B (zh) 生成指令序列的方法、执行神经网络运算的方法和装置
US5973705A (en) Geometry pipeline implemented on a SIMD machine
CN110580324B (zh) 图像矩阵运算方法、装置、计算机设备和存储介质
CN111542839B (zh) 一种反卷积神经网络的硬件加速方法、装置和电子设备
CN112292816A (zh) 处理核心数据压缩和存储***
CN109993293B (zh) 一种适用于堆叠式沙漏网络的深度学习加速器
US5777599A (en) Image generation device and method using dithering
KR20210014561A (ko) 다수 컨벌루션 윈도우 중의 이미지 데이터를 추출하는 방법, 장치, 기기 및 컴퓨터 판독 가능한 저장매체
US4951230A (en) Method and apparatus for tiling an image
CN116861143A (zh) 一种小输入图小权重的卷积的实现方法
KR920003479B1 (ko) 곡선의 절선근사방법 및 장치
US20220253507A1 (en) Information processing apparatus
JP3333779B2 (ja) 行列演算装置
CN110930290B (zh) 一种数据处理方法及装置
CN116861144A (zh) 一种wram能放下权重的卷积的实现方法
CN112801864A (zh) 一种在深度学习硬件中的图像填充方法及装置
GB2309873A (en) Method of mapping a source pixel image to a destination pixel space
CA2308249C (en) Triangle strip length maximization
KR930000179B1 (ko) 도트매트릭스 프린터에서 문자의 원윤곽 인자처리 방법
KR20240030359A (ko) 신경망에서의 연산방법 및 이를 위한 장치
JP3114289B2 (ja) 文字パターン発生装置
CN117492842A (zh) 一种低比特任意大小独立卷积的simd的优化方法
JPH05189558A (ja) イメージ・データの縮小方式
CN109615059B (zh) 一种卷积神经网络中边缘填充和滤波器膨胀运算方法及***
JP2781658B2 (ja) アドレス生成回路とそれを用いたcd―rom装置

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