CN117151169A - 数据处理电路及电子设备 - Google Patents
数据处理电路及电子设备 Download PDFInfo
- Publication number
- CN117151169A CN117151169A CN202311431875.2A CN202311431875A CN117151169A CN 117151169 A CN117151169 A CN 117151169A CN 202311431875 A CN202311431875 A CN 202311431875A CN 117151169 A CN117151169 A CN 117151169A
- Authority
- CN
- China
- Prior art keywords
- data
- coefficient
- cnn
- processing circuit
- cnn processing
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 338
- 238000006243 chemical reaction Methods 0.000 claims abstract description 21
- 230000015654 memory Effects 0.000 claims description 42
- 239000011159 matrix material Substances 0.000 claims description 29
- 238000013527 convolutional neural network Methods 0.000 claims description 19
- 238000013528 artificial neural network Methods 0.000 claims description 4
- 230000001413 cellular effect Effects 0.000 claims description 4
- 238000011144 upstream manufacturing Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 40
- 238000011176 pooling Methods 0.000 description 20
- 239000000872 buffer Substances 0.000 description 14
- 238000000034 method Methods 0.000 description 12
- 238000000605 extraction Methods 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 9
- 238000013461 design Methods 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 125000004122 cyclic group Chemical group 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 238000013473 artificial intelligence Methods 0.000 description 4
- 238000003672 processing method Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000003909 pattern recognition Methods 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
Classifications
-
- 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/0464—Convolutional networks [CNN, ConvNet]
-
- 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/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
Abstract
本申请提供一种数据处理电路及电子设备。该数据处理电路包括多个CNN处理引擎。多个CNN处理引擎以环形方式连接。每个CNN处理引擎包括:第一存储模块,配置为存储第一数据,其中,第一数据采用8位浮点格式,第一数据为待处理的数据集合的一部分;第二存储模块,配置为存储第一系数,第一系数与所述第一数据关联;处理模块,配置为:对第一数据进行格式转换;进行转换后的第一数据和第一系数之间的卷积运算;将卷积结果转换为8位浮点格式。在本申请中,通过将第一数据以8位浮点格式进行传输和存储,提高了数据处理电路的效率并降低了成本。
Description
技术领域
本申请涉及集成电路(Integrated Circuit,IC)技术领域,尤其涉及一种数据处理电路及电子设备。
背景技术
目前,人工智能越来越普遍地应用在各个行业和领域。作为人工智能的基础,机器需要获取有效信息。为此,机器可以获取诸如图像、语音、文字之类的数据,并基于获取的数据进行特征提取,以得到有效信息。
通常,特征提取可以通过中央处理器(Central Processing Unit,CPU)、图形处理器(Graphics Processing Unit,GPU)等硬件来实现。CPU是通用处理器,可以通过控制模块寻址访问内存以调用数据并进行处理。CPU的单个运算单元强大,善于处理单个复杂的计算任务,但是不善于处理大量的并行任务。GPU具有大量的运算单元,善于处理大规模的重复计算任务,但是不善于处理复杂的计算任务。可以看到,在特征提取的过程中,使用CPU和GPU来进行二维运算都会消耗过多的算力和功耗。
细胞神经网络(Cellular Neural Networks,CNN),或称为细胞非线性网络(Cellular Non-linear Networks,CNN),于1988年被提出并应用于人工智能。特征提取可以通过CNN来实现。CNN的应用领域包括但不限于模式识别、图像处理、全局优化。现有的CNN多是基于CPU、GPU等硬件的软件框架设计的,这就导致这些CNN的实现不仅速度缓慢,而且费用高昂。
发明内容
本申请提供一种数据处理电路及电子设备,能够提高数据处理电路进行特征提取的处理速度并降低成本。
在第一方面,本申请提供了一种数据处理电路。该数据处理电路包括:多个CNN处理引擎。多个CNN处理引擎以环形方式连接。每个CNN处理引擎包括:第一存储模块,配置为存储第一数据,其中,第一数据采用8位浮点格式,第一数据为待处理的数据集合的一部分;第二存储模块,配置为存储第一系数,第一系数与第一数据关联;处理模块,配置为:对第一数据进行格式转换;进行转换后的第一数据和第一系数之间的卷积运算;将卷积结果转换为8位浮点格式。
在一些可能的实施方式中,第二存储模块还可以配置为存储第二系数。处理电路还可以配置为:获得相邻的上游CNN处理引擎输出的第二数据,其中,第二数据采用8位浮点格式;对第二数据进行格式转换;对转换后的第二数据和第二系数之间的卷积运算;将卷积结果转换为8位浮点格式。
在一些可能的实施方式中,处理模块可以包括:第一转换单元,配置为将第一数据转换至第一格式,其中,第一格式不同于8位浮点格式;运算单元,配置为对转换后的第一数据和第一系数之间的卷积运算;第二转换单元,配置为将卷积结果转换为8位浮点格式。
在一些可能的实施方式中,数据处理电路还可以包括:控制器,与多个CNN处理引擎耦合,并且配置为控制多个CNN处理引擎工作。
在一些可能的实施方式中,数据处理电路还可以包括:编码电路,配置为在第一存储模块存储第一数据以及第二存储模块存储第一系数之前,对第一数据和/或第一系数进行布斯编码。
在一些可能的实施方式中,数据处理电路还可以包括:时钟偏移电路,与多个CNN处理引擎耦合,并且配置为触发每个CNN处理引擎输出卷积结果。
在一些可能的实施方式中,时钟偏移电路可以包括多个D触发器。多个D触发器与多个CNN处理引擎一一对应地连接。多个D触发器中的每个D触发器被配置为触发该CNN处理引擎向相邻的下游CNN处理引擎输出卷积结果。
在一些可能的实施方式中,第一存储模块的存储空间的大小可以是基于第一数量和第二数量确定的。第一数量是多个CNN处理引擎的数量。第二数量是数据集合中数据的数量。
在一些可能的实施方式中,第二存储模块的存储空间的大小可以是基于第一数量和第三数量确定的。第一数量是多个CNN处理引擎的数量。第三数量是数据集合中关联的系数集合中系数的数量。
在一些可能的实施方式中,第一数据可以是大小为(M+2)×(M+2)的矩阵,第一系数可以是大小为3×3的矩阵。处理电路可以被配置为:进行第一系数与第一数据中的M2个3×3的矩阵之间的卷积运算,其中,M为正整数。
在一些可能的实施方式中,8位浮点格式可以包括以下之一:用于指示符号的1个比特、用于指示指数的4个比特、以及用于指示尾数的3个比特;用于指示符号的1个比特、用于指示指数的5个比特、以及用于指示尾数的2个比特。
在第二方面,本申请提供了一种电子设备。该电子设备可以包括:电路板;如第一方面的数据处理电路。数据处理电路位于电路板上。
根据本申请的技术方案,诸如图像之类的二维数据在传输和存储的过程中可以采用8位浮点格式。如此,在保证数据精度的前提下,减少了所占用的存储空间并简化了数据输出,继而提高了数据处理电路进行特征提取的效率并降低了成本。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请实施例中的数据处理电路的结构示意图。
图2为本申请实施例中的CNN处理引擎的第一实施例的结构示意图。
图3为本申请实施例中的CNN处理引擎的详细结构示意图。
图4为本申请实施例中的CNN处理引擎之间的连接关系的示意图。
图5为本申请实施例中的处理模块的结构示意图。
图6为本申请实施例中的处理单元的结构示意图。
图7为本申请实施例中的控制器的结构示意图。
图8为本申请实施例中的CNN处理引擎的第二实施例的结构示意图。
图9为本申请实施例中的布斯编码器的结构示意图。
图10为本申请实施例中的8位浮点格式的第一示例的示意图。
图11为本申请实施例中的8位浮点格式的第二示例的示意图。
图12为本申请实施例中的第一数据的示意图。
图13A至13C为本申请实施例中第一数据与数据集合的位置关系的示意图。
图14为本申请实施例中的数据处理电路的设计方法的流程示意图。
图15为本申请实施例中的数据处理方法的流程示意图。
图16为本申请实施例中数据集合存储在数据处理电路中的示意图。
图17为本申请实施例中第一数据存储在第一存储模块中的示意图。
图18为本申请实施例中系数集合存储在数据处理电路中的示意图。
图19为本申请实施例中的CNN处理引擎之间的连接关系的具体实施例的示意图。
图20A和20B为本申请实施例中第一数据在多个CNN处理引擎中的卷积运算的处理顺序的示意图。
图21为本申请实施例中第一数据中的3×3个数据的位置示意图。
图22为本申请实施例中对运算结果进行池化操作的示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置的例子。
随着人工智能的发展,有效提取数据特征变得愈发重要。作为大模型运算自动化的起始一公里,数据特征的有效提取直接关系到机器从自然界获取有效信息的效率。特征提取的硬件通常使用CPU或GPU进行。CPU是通用型的处理器,通过控制模块寻址访问内存调用数据进行数据处理。对于CPU而言,单个运算单元具有较强的计算能力,善于处理单个复杂计算任务,但不擅长并行大量任务。GPU采用了基于大吞吐量的设计。GPU的运算单元数量较大,擅长大规模重复计算应用场景,但是只能进行一维运算,不擅长进行包括邻域数据在内的二维运算,在特征提取的场景下较为低效。不论是采用CPU还是GPU,都会消耗非必要的算力与功耗。因此,提出特征提取的二维运算单元意义重大。
CNN于1988年提出并且被应用于不同的领域,其范围包括但不限于图像处理。但是,现有的CNN的实现方式大部分是基于CPU与GPU硬件的软件框架设计(例如,卷积神经网络,循环神经网络)或基于其它用途(例如,图形处理或普通计算等)的硬件设计。因此,从运算速度上看,基于现有CNN的运算都很缓慢,费用也昂贵,所以,用于处理大量图像数据非常不切实。在此,图像数据可以是任何合适的二维图像数据,例如,图片、时频中的图像帧。当然,CNN还可以用于处理其它二维数据,例如,声音数据。
8位浮点(8-bit Floating Point,FP8)作为一种数据格式,能够令神经网络模型更加高效的运行。通过采用8位浮点的数据格式,既能够最大限度地保留单精度与双精度浮点格式的精度,还能够在一定程度上减少运算过程中对算力和存储空间的需求。显然,对8位浮点格式的支持,可以有效促进模型的跨平台开发,提高硬件的利用率,同时最大限度的减少与电器与电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)规定的现有浮点格式的偏差。
图1为本申请实施例中的数据处理电路的结构示意图。该数据处理电路用于对数据集合进行特征提取。数据集合是由待处理数据组成的。如图1所示,数据处理电路1包括多个CNN处理引擎3。CNN处理引擎3的数量为多个。
在一实施例中,多个CNN处理引擎3可以具有完全相同的结构。在一些实施例中,多个CNN处理引擎3可以具有不同的结构,本申请实施例对此不做具体限定。
在一实施例中,数据处理电路1还可以包括总线2。总线2,或称为输入输出(input/output,I/O)总线,可以用于数据传输。多个CNN处理引擎3可以耦接到总线2上。在一实施例中,总线2的数量可以为一个或多个。在一示例中,总线2的数量可以是多个,并且每个总线2可以与至少一个CNN处理引擎3耦接。在一示例中,与各总线2耦接的CNN处理引擎3的数量可以相同,也可以不同。在一实施例中,总线2的数量可以是一个,该总线2与数据处理电路1的全部CNN处理引擎3耦接。
在一实施例中,CNN处理引擎3的数量等于总线2可以寻址的地址数量。换言之,CNN处理引擎3的数量可以由总线2可寻址的地址数量确定。如此,每个CNN处理引擎3可以由总线2唯一寻址。在一示例中,多个CNN处理引擎3的数量可以为2n,其中,n为非负整数。具体地,n的取值可以是0、1、2、3……,则CNN处理引擎3的数量可以是1、2、4、8……。可以理解的是,CNN处理引擎3的数量还可以采用其它数值,本申请实施例对此不做具体限定。
在一实施例中,数据处理电路1可以采用数字集成电路的方式实现。在一示例中,数据处理电路1可以在可编程逻辑器件中实现。在一示例中,数据处理电路1可以通过半导体工艺在半导体芯片中实现。在一示例中,数据处理电路1可以采用IP(IntellectualProperty,知识产权)核的方式呈现。可以理解的是,数据处理电路1中的总线2和CNN处理引擎3的数量可以根据实际需要设置,则该数据处理电路1是可扩展的,即可以通过多个数据处理电路1实现更大的数据处理电路1。
图2为本申请实施例中的CNN处理引擎的第一实施例的结构示意图。如图2所示,CNN处理引擎3包括第一存储模块31、第二存储模块32、以及处理模块33。第一存储模块31用于通过总线2获取第一数据并存储该第一数据。第二存储模块32用于通过总线2获取第一系数并存储该第一系数。处理模块33耦接到第一存储模块31和第二存储模块32上。处理模块33可以用于进行第一数据和第一系数之间的卷积运算。
在一实施例中,第一存储模块31和/或第二存储模块32可以包括随机访问存储器(Random Access Memory,RAM)。在一示例中,第一存储模块31和/或第二存储模块32可以采用缓冲器(buffer)、缓存器(cache)等方式实现。可以理解的是,第一存储模块31和第二存储模块32可以是一个存储器中的不同区域,也可以是独立的存储器。
在一实施例中,第一存储模块31和第二存储模块32的大小可以根据实际需要设置。具体地,第一存储模块31的大小可以根据第一数量和第二数量确定。第一数量是数据处理电路1中CNN处理引擎3的数量。第二数量是数据集合中数据的数量。当然,第一存储模块31的大小可以大于由第一数量和第二数量确定的数值。此外,第二存储模块32的大小可以根据第一数量和第三数量确定。第三数量是系数集合中系数的数量。当然,第二存储模块32的大小可以大于由第一数量和第三数量确定的数值。
在一实施例中,第一存储模块31可以包括两个存储单元,分别为第一存储单元和第二存储单元。第一存储单元可以用于接收来自总线2的第一数据。第一存储单元和第二存储单元之间可以进行数据的转移和交换。第二存储单元可以用于将第一数据提供给处理模块33。在一实施例中,第一存储模块31可以是单个存储单元。该存储单元可以接收来自总线2的第一数据,并且可以将第一数据提供给处理模块33。
在一实施例中,第二存储模块32可以包括两个存储单元,分别为第一存储单元和第二存储单元。第一存储单元可以用于接收来自总线2的第一系数。第一存储单元和第二存储单元之间可以进行系数的转移和交换。第二存储单元可以用于将第一系数提供给处理模块33。在一实施例中,第二存储模块32可以是单个存储单元。该存储单元可以接收来自总线2的第一系数,并且可以将第一系数提供给处理模块33。
在一实施例中,第二存储模块32可以具有特定的字长。在一示例中,第二存储模块32的字长可以是120个比特。在第一系数包括3×3的矩阵以及偏置项的情况下,第一系数总共包括10个数值。若每个数值占用12个比特,则每个第一系数可以占用120个比特,即一个字长内可以存储1个第一系数。若每个数值占用6个比特,则每个第一系数可以占用60个比特,即一个字长内可以存储2个第一系数。若每个数值占用3个比特,则每个第一系数可以占用30个比特,即一个字长内可以存储4个第一系数。可以理解的是,第二存储模块32的字长以及第一系数中每个数值占用的比特数可以根据需要设置,本申请实施例对此不做具体限定。
图3为本申请实施例中的CNN处理引擎的详细结构示意图。如图3所示,CNN处理引擎3具体可以包括:第一存储模块31、第二存储模块32、处理模块33、第一多路选择器(Multiplexer,MUX)34、第二MUX 35、D触发器36。
第一MUX 34的一个输入端耦接到第一存储模块31,另一个输入端用于从CNN处理引擎3的输入端37接收由另一CNN处理引擎3的卷积结果。第一MUX 34在信号312的作用下,选择输出第一存储模块31中的第一数据或来自另一CNN处理引擎3的卷积结果。例如,在信号312为高电平的情况下,第一MUX 34选择输出第一模块31中的第一数据;在信号312为低电平的情况下,第一MUX 34选择输出来自另一CNN处理引擎3的卷积结果。
第二MUX 35用于在信号311的作用下,将处理模块33的卷积结果送入第一存储模块31。例如,在信号311为高电平的情况下,第二MUX 35将处理模块33的卷积结果送入第一存储模块31。
信号311、312的位置与信号310有关。信号310可以是方波信号,并且占空比例如为50%。信号311位于信号310的下降沿3111之前。信号312位于该下降沿3111之后。信号311和信号312之间这样的位置关系,使得能够将处理模块33输出的卷积结果存储到第一存储模块31中,并从第一存储模块31输出到D触发器36处。
D触发器36的输入端与第一MUX 34的输出端连接。D触发器36用于在时钟信号CLK的作用下,将来自第一MUX 34的数据输出至输出端38。例如,在D触发器36采用电平触发的情况下,D触发器可以在时钟信号CLK为高电平时将来自第一MUX 34的数据输出。又例如,在D触发器36采用边缘触发的情况下,D触发器可以在时钟信号CLK为上升沿时将来自第一MUX34的数据输出。
图4为本申请实施例中的CNN处理引擎之间的连接关系的示意图。如图4所示,多个CNN处理引擎3之间以环形方式连接。具体地,一个CNN处理引擎3的输出端连接到另一个CNN处理引擎3的输入端,依次类推,直至全部CNN处理引擎3首尾连接形成环形。在这样的环形设置中,任一第一数据在一个CNN处理引擎3中经过卷积运算之后得到的卷积结果可以被输出到下一个CNN处理引擎3,并在下一个CNN处理引擎3中进行下一次的卷积运算,直至在全部CNN处理引擎3中完成卷积运算。在一实施例中,多个CNN处理引擎3可以通过时钟偏移电路(clock skew circuit)实现环形连接。时钟偏移电路例如可以包括各个CNN处理引擎3中的D触发器36。当然,在实际应用中,时钟偏移电路还可以通过其它方式实现,本申请实施例对此不做具体限定。
图5为本申请实施例中的处理模块的结构示意图。如图5所示,处理模块33可以包括第一转换单元331、处理单元332、以及第二转换单元333。
第一转换单元331用于将第一数据从FP8格式转换为第一格式。第一数据经过转换后得到第二数据。第一格式是适合于数据处理的数据格式。可以理解的是,第一格式不同于FP8格式。例如,第一格式可以是整型、长整型、单精度、双精度等。
在一实施例中,在第一系数也采用FP8格式的情况下,第一转换单元331还可以用于将第一系数从FP8格式转换为第二格式。类似于第一格式,第二格式也是适合于数据处理的数据格式,并且不同于FP8格式。如,第一格式可以是整型、长整型、单精度、双精度等。可以理解的是,第二格式与第一格式可以相同,也可以不同。
处理单元332用于基于第二数据和第一系数进行卷积运算。具体地,处理单元332可以实现转换后的第一数据与第一系数之间的卷积运算。经过卷积运算得到的结果可以被称为第三数据。
第二转换单元333用于将第三数据转换至FP8格式。
图6为本申请实施例中的处理单元的结构示意图。如图6所示,处理单元332可以包括加法器(adder)3321、乘法器(multiplier)3322、移位器(shifter)3323、矫正器(rectifier)3324、以及池化器(pooling operator)3325。
加法器3321用于实现加法运算。乘法器3322用于实现乘法运算。移位器3323用于实现移位操作。通过加法器3321、乘法器3322、移位器3323的组合,可以实现第二数据和第一系数之间的卷积运算。可选地,移位器3323可以用于实现第二数据和第一系数之间的定点运算。
矫正器3324用于实现数据矫正。例如,当第二数据和第一系数之间的卷积运算的卷积结果中存在负数时,矫正器3324可以将负数修正为零。在一实施例中,矫正器3324可以通过半波整流电路或其它电路实现。
池化器3325用于对卷积运算的卷积结果进行池化操作。在一实施例中,卷积运算的卷积结果为矩阵,则池化器3325可以对该矩阵进行池化操作,以减小矩阵的规模。在一实施例中,池化器3325的池化操作的类型可以包括平均池化、最大池化、随机池化等。在一实施例中,池化器3325的池化操作的规模可以是2×2池化、3×3池化、4×4池化等。
可以理解的是,矫正器3325和池化器3325是可选的。也就是说,处理单元332可以包括矫正器3324和池化器3325中的一个或多个,也可以不包括矫正器3325和池化器3325中的任何一个。
在一实施例中,数据处理电路1还可以包括控制器4。控制器4耦接到CNN处理引擎3上,并且被用于控制CNN处理引擎3的工作。
图7为本申请实施例中的控制器的结构示意图。如图7所示,控制器4可以包括数据加载控制模块41、系数加载控制模块42、数据处理控制模块43、数据输出控制模块44。
数据加载控制模块41可以用于通过总线2将数据集合(即待处理数据)加载到多个CNN处理引擎3中。具体地,数据加载控制模块41可以用于将数据集合加载到CNN处理引擎3的第一存储模块31中。
系数加载控制模块42可以用于通过总线2将系数集合加载到多个CNN处理引擎3中。具体地,数据加载控制模块41可以用于将数据集合加载到CNN处理引擎3的第二存储模块32中。
数据处理控制模块43可以用于控制各CNN处理引擎3中的处理模块33执行数据处理,包括卷积运算、矫正操作、池化操作等。
数据输出控制模块44可以用于控制CNN处理引擎3输出卷积结果。
在一实施例中,控制器4还可以包括寄存器45。寄存器45可以用于存储配置信息。该配置信息可以是由用户定义的。配置信息可以包括与卷积运算、矫正操作、池化操作中至少一个相关的配置信息。例如,配置信息可以包括是否进行矫正操作和/或池化操作的指示信息。又例如,配置信息可以包括池化操作的类型指示信息。
图8为本申请实施例中的CNN处理引擎的第二实施例的结构示意图。图8所示的CNN处理引擎3与图2所示的CNN处理引擎3在结构和功能上基本相同。二者之间的区别在于,图8所示的CNN处理引擎3还可以包括编码器34。编码器34可以用于对来自第二存储模块32的第一系数进行编码,并将经编码的第一系数送入处理模块33。
在一实施例中,编码器34可以是布斯(booth)编码器。布斯编码器用于对第一系数进行优化的布斯编码。图9为本申请实施例中的编码器的结构示意图。如图9所示,编码器34可以包括转换单元341、以及编码单元342。
在一实施例中,转换单元341的数量、以及编码单元342的数量均可以与第一系数中的系数值的数量相同。换言之,转换单元341、以及编码单元342可以与第一系数中的系数值一一对应。
继续参见图9,第一系数可以包括9个系数值,分别为系数值1、系数值2、……、系数值9。每个系数值可以包括两部分。第一部分包含系数值的高四位,第二部分包含系数的低三位。包含高四位的第一部分被输入转换单元341。转换单元341对第一部分中的四个比特进行按位或运算。转换单元341的运算结果与包含低三位的第二部分共同作为输入进入编码单元342。编码单元342对输入进行布斯编码,以得到编码系数值。在一示例中,编码单元342可以按照布斯数据转化编码真值表实现布斯编码。基于系数值1、系数值2、……、系数值9,对应地得到编码系数值1、编码系数值2、……、编码系数值9。编码系数值1、编码系数值2、……、编码系数值9共同构成编码后的第一系数。编码后的第一系数从编码器34输出至处理模块33。
在实际应用中,数据处理电路1中的全部或部分组件可以利用诸如Verilog HDL、VHDL之类的硬件描述语言来实现在诸如FPGA、CPLD等可编程器件上,也可以通过其它方式实现,本申请实施例对此不做具体限定。
在一实施例中,本申请提供了一种电子设备。该电子设备可以包括:电路板、以及如本申请实施例中所述的数据处理电路。数据处理电路位于电路板上。
接下来,对本申请实施例中的数据处理电路1所要处理的数据进行说明。
在本申请实施例中,作为待处理数据的数据集合以矩阵的方式呈现。例如,数据集合可以是图像数据。在此情况下,数据集合中的每个数据可以是一个位置处的像素值、像素和观察距离之间的距离值等。又例如,数据集合可以是声音数据。
数据集合中的每个数据可以采用FP8格式。8位浮点格式包括多种类型。图10为本申请实施例中的8位浮点格式的第一示例的示意图。如图10所示,8位浮点格式可以包括:用于指示符号的1个比特、用于指示指数的4个比特、用于指示尾数的3个比特。此时,该8位浮点格式可以被称为E4M3类型。图11为本申请实施例中的8位浮点格式的第二示例的示意图。如图11所示,8位浮点格式可以包括:用于指示符号的1个比特、用于指示指数的5个比特、用于指示尾数的2个比特。此时,该8位浮点格式可以被称为E5M2类型。可以理解的是,8位浮点格式还可以具有其它类型,本申请实施例对此不做具体限定。
图12为本申请实施例中的第一数据的示意图。如图12所示,第一数据是大小为(M+2)×(M+2)的矩阵。M为非负整数。
图13A至13C为本申请实施例中第一数据与数据集合的位置关系的示意图。如图13A所示,数据集合1300被划分为多个数据块,每个数据块是大小为M×M的矩形。可以理解的是,在一般情况下,数据集合1300的矩阵的行数和列数可以是M的整数倍,以确保数据集合1300的全部数据都能够划分到某一个数据块中。在一实施例中,数据集合1300的大小可以是(2K×M)×(2K×M)。K为正整数。例如,当M为14且K为4时,数据集合1300的尺寸为224,数据集合1300的数据量为224×224。在一实施例中,数据集合1300的大小可以是(2I×M)×(2J×M)。I和J均为正整数,且I不等于J。例如,当M为14、I为2、且K为4时,数据集合1300的尺寸分别为56和224,数据集合1300的数据量为56×224。
如图13B所示,在数据集合1300中取一个数据块1310。数据块1310包括M×M个数据。在数据块1310的基础上得到的第一数据1311还包括与数据块1310相邻的6个数据块中的部分数据。最后得到的第一数据1311包括(M+2)×(M+2)个数据。
如图13C所示,在数据集合1300中取一个数据块1320和一个数据块1330。数据块1320位于数据集合1300的左上角。数据块1330位于数据集合1300的上侧边缘处。数据块1320和数据块1330均包括M×M个数据。在数据块1320的基础上得到的第一数据1321还包括与数据块1320相邻的3个数据块(右侧、右下侧、下侧)中的部分数据,并且在没有相邻数据块的部分(斜线填充区域)填充0。在此情况下,第一数据1321的最上方的一行数据以及最左侧的一列数据均为0。在数据块1330的基础上得到的第一数据1331还包括与数据块1330相邻的5个数据块(右侧、右下侧、下侧、左下侧、左侧)中的部分数据,并且在没有相邻数据块的部分(斜线填充区域)填充0。在此情况下,第一数据1331的最上方的一行数据均为0。
在本申请实施例中,系数集合中的每个系数均以矩阵的方式呈现。在一实施例中,系数可以包括3×3的矩阵。此时,每个系数可以包括9个系数项。在一实施例中,系数可以包括3×3的矩阵、以及偏置项。此时,每个系数可以包括10个系数项。偏置项可以统一适用于该系数中的全部系数项。
需要说明的是,第一数据的尺寸和第一系数的尺寸可以根据实际需求设置。在一实施例中,第一系数的尺寸可以是5×5,则第一数据的尺寸可以是(M+4)×(M+4)。当然,第一数据和第一系数还可以具有其它尺寸,只需要确保使用第一系数可以在M×M个位置处与第一数据进行卷积运算即可,本申请实施例对此不做具体限定。
在下文中,对本申请实施例的数据处理电路1的设计方法进行说明。图14为本申请实施例中的数据处理电路的设计方法的流程示意图。该设计方法旨在确定数据处理电路1的各CNN处理引擎3中的第一存储模块31和第二存储模块32的存储空间的大小。如图14所示,设计方法包括步骤S1410至步骤S1420。
在步骤S1410中,根据第一数量和第二数量,确定每个CNN处理引擎3中第一存储模块31的大小。
第一数量是数据处理电路1中的CNN处理引擎3的数量。第一数量可以是预设的,也可以根据实际需求设置。在一实施例中,数据处理电路1或者CNN处理引擎3可以由诸如现场可编程门阵列(Field Programmable Gate Array,FPGA)、复杂可编程逻辑器件(ComplexProgrammable Logic Device,CPLD)之类的可编程器件实现。在此情况下,第一数量可以根据可编程器件上可用元件数量来确定。
第二数量是数据集合中数据的数量。在一实施例中,第二数量可以为(2K×M)×(2K×M)。如此,基于数据集合可以划分出2K×2K个第一数据。
优选地,数据集合中的数据是分布式存储在各CNN处理引擎3中,并且各CNN处理引擎3中存储的第一数据的数量可以是相同的,那么,由数据集合划分出的第一数据的数量,即2K×2K,可以是第一数量的整数倍。如此,基于第一数量和第二数量可以得到每个CNN处理引擎3中存储的第一数量的数量,即第四数量。
在一实施例中,步骤1410可以通过公式(1)实现:
N4=N2/(N1×M2) (1);
其中,N1表示第一数量,N2表示第二数量,N4表示第四数量。需要说明的是,公式(1)的应用场景满足:第一数据的大小为M×M,数据集合的大小为第一数据的大小的整数倍,并且N4为正整数。
可以理解的是,在公式(1)适用的情况下,基于数据集合得到的第一数据的总数量可以等于N4×N1,即N2/M2。
在步骤S1420中,根据第一数量和第三数量,确定每个CNN处理引擎3中第二存储模块32的大小。
第三数量是系数集合中系数的数量。在一实施例中,系数集合中的系数可以被划分为多个系数组。系数组的数量可以是CNN处理引擎3的第一数量的整数倍。每个系数组包括多个系数。每个系数组中的系数与基于数据集合得到的第一数据是一一对应的。那么,每个系数组中的系数的数量可以等于N4×N1。
在一实施例中,步骤S1420可以通过公式(2)实现:
N5=N3/(N1×N4) (2);
其中,N5表示每个CNN处理引擎3中存储的第一系数的数量,即第五数量。N3表示第三数量。
通过以上步骤S1410和步骤S1420,在给定CNN处理引擎3的数量、数据集合中数据的数量、以及系数集合中系数的数量的情况下,可以得到每个CNN处理引擎3中存储的第一数据和第一系数的数量,进而确定每个CNN处理引擎3中第一存储模块31和第二存储模块32的大小。
需要说明的是,本实施例中的步骤S1410和步骤S1420之间的执行顺序不做限制。例如,步骤S1410和步骤S1420可以并行执行,也可以先后执行步骤S1410和步骤S1420,也可以先后执行步骤S1420和步骤S1410。
在下文中,对本申请实施例的数据处理电路1进行的数据处理进行说明。图15为本申请实施例中的数据处理方法的流程示意图。如图15所示,数据处理方法包括步骤S1510至步骤S1530。
在步骤S1510中,将数据集合存储在第一存储模块31中。
在此步骤中,将数据集合中的数据分别存储在数据处理电路1的多个CNN处理引擎3的第一存储模块31中。
具体地,步骤S1510可以被实现为:从数据集合中获取连续的第一数量的数据,并将该数据分别存储在多个CNN处理引擎3的第一存储模块中;重复上述步骤,直至数据集合中的数据全部存储在多个CNN处理引擎3中,以使得每个CNN处理引擎3中存储的第一数据的数量为第四数量。
图16为本申请实施例中数据集合存储在数据处理电路中的示意图。如图16所示,数据处理电路1包括4个CNN处理引擎3,并且基于数据集合划分出16个第一数据。4个CNN处理引擎3分别表示为3a、3b、3c、3d。16个第一数据分别表示为Im1、Im2、……、Im16。首先,获取连续4个第一数据Im1、Im2、Im3、Im4,并分别存储在4个CNN处理引擎3中。然后,获取连续4个第一数据Im5、Im6、Im7、Im8,并分别存储在4个CNN处理引擎3中。然后,获取连续4个第一数据Im9、Im10、Im11、Im12,并分别存储在4个CNN处理引擎3中。最后,获取连续4个第一数据Im13、Im14、Im15、Im16,并分别存储在4个CNN处理引擎3中。如此,CNN处理引擎3a中存储的第一数据包括Im1、Im5、Im9、Im13,CNN处理引擎3b中存储的第一数据包括Im2、Im6、Im10、Im14,CNN处理引擎3c中存储的第一数据包括Im3、Im7、Im11、Im15,CNN处理引擎3d中存储的第一数据包括Im4、Im8、Im12、Im16。
图17为本申请实施例中第一数据存储在第一存储模块中的示意图。图17示出了每个第一数据在对应的第一存储模块31中的示例性存储方式。如图17所示,第一存储模块31可以包括缓冲器B0、B1、B2、B3、B4、B5、B6、B7、B8。这些缓冲器B0、B1、B2、B3、B4、B5、B6、B7、B8共同用于存储第一数据中的(M+2)×(M+2)个数据。缓冲器B0用于存储位于第一数据中间的M×M个数据。缓冲器B1用于存储位于第一数据上侧边缘处的M(即1×M)个数据。缓冲器B2用于存储位于第一数据右侧边缘处的M(即M×1)个数据。缓冲器B3用于存储位于第一数据下侧边缘处的M(即1×M)个数据。缓冲器B4用于存储位于第一数据左侧边缘处的M(即M×1)个数据。缓冲器B5用于存储位于第一数据左上角处的1(即1×1)个数据。缓冲器B6用于存储位于第一数据右上角处的1(即1×1)个数据。缓冲器B7用于存储位于第一数据右下角处的1(即1×1)个数据。缓冲器B8用于存储位于第一数据左下角处的1(即1×1)个数据。
需要说明的是,总线2接收的第一数据可以是以连续块的方式传输的。具体地,在通过总线2存储数据集合时,以M×M大小的数据块为单位进行传输,每次传输一个数据块。该数据块中的数据将被存储在与该数据有关的全部CNN处理引擎3的第一存储模块31中。示例性地,CNN处理引擎3可以接收一个第一数据的M×M个数据并储存在缓冲器B0中。CNN处理引擎3可以将接收的前一个第一数据的M×M个数据中的最右侧的M(即1×M)个数据存储在B4中。CNN处理引擎3可以将接收的后一个第一数据的M×M个数据中的最左侧的M(即1×M)个数据存储在B2中。在此情况下,总线2传输的前一个第一数据中右侧的M个数据不但被存储在前一个CNN处理引擎3的B0中,同时还被存储在这个CNN处理引擎3的B4中;总线2传输的后一个第一数据中左侧的M个数据不但被存储在后一个CNN处理引擎3的B0中,同时还被存储在这个CNN处理引擎3的B2中。
在步骤S1520中,将系数集合存储在第二存储模块32中。
在此步骤中,将系数集合中的系数分别存储在数据处理电路1的多个CNN处理引擎3的第二存储模块32中。
在一实施例中,步骤S1520可以被实现为:从系数集合中获取连续的第一数量个系数组,并将该系数组分别存储在多个CNN处理引擎3的第一存储模块中;重复上述步骤,直至系数集合中的系数全部存储在多个CNN处理引擎3中,以使得每个CNN处理引擎中存储的第一系数的数量为第五数量。
在一实施例中,步骤S1520可以被实现为:从系数集合中获取连续的第五数量个系数组,并将该系数组存储在一个CNN处理引擎3的第一存储模块中;重复上述步骤,直至系数集合中的系数全部存储在多个CNN处理引擎3中,以使得每个CNN处理引擎中存储的第一系数的数量为第五数量。
图18为本申请实施例中系数集合存储在数据处理电路中的示意图。如图18所示,数据处理电路1包括4个CNN处理引擎3,并且基于数据集合划分出8个第一数据。4个CNN处理引擎3分别表示为3a、3b、3c、3d。系数集合包括64个系数。系数集合中的64个系数可以分为8个系数组,分别为F1、F2、F3、F4、F5、F6、F7、F8。每个系数组包括8个系数。每个系数可以表示为F(i,j),其中,i表示该系数所在的系数组,j表示该系数与数据集合中的8个第一数据中的第j个第一数据相关联。i为正整数,且i=1,2,……,8。j为正整数,且j=1,2,……,8。
继续参照图18,CNN处理引擎3a中存储的系数组包括F1、F5,CNN处理引擎3b中存储的系数组包括F2、F6,CNN处理引擎3c中存储的系数组包括F3、F7,且CNN处理引擎3d中存储的系数组包括F4、F8。
可以理解的是,第二存储模块32可以采用先进先出的方式存储第一系数。换言之,第一系数可以以队列形式存储在第二存储模块32中。
继续参照图18,CNN处理引擎3a中存储的系数组F1内的8个系数的排列顺序为F(1,1)、F(1,4)、F(1,3)、F(1,2)、F(1,5)、F(1,8)、F(1,7)、F(1,6)。在此,8个系数可以划分为2个系数子群。第一个系数子群包括系数F(1,1)、F(1,4)、F(1,3)、F(1,2)。第二个系数子群包括系数F(1,5)、F(1,8)、F(1,7)、F(1,6)。第一个系数子群中的系数分别与第一数据Im1、Im4、Im3、Im2相关。上述第一数据中4个数据的排列顺序符合循环反转的定义。第二个系数子群中的系数分别与第一数据Im5、Im8、Im7、Im6相关。可以看出,每个系数子群中系数的数量与CNN处理引擎3的数量相同,即等于第一数量。在CNN处理引擎3b、3c、3d中的系数采用类似的方式排列。
需要说明的是,每个CNN处理引擎3的第二存储模块32中系数的排列顺序取决于以下因素中至少一项:CNN处理引擎3的数量、CNN处理引擎3之间环形连接的方式、基于数据集合得到的第一数据的数量、系数组的数量。图18中仅示出了系数在CNN处理引擎3中的排列顺序的一个示例,本申请实施例对此不做具体限定。
在步骤S1530中,进行数据集合和系数集合之间的卷积运算。
具体地,在步骤S1510和步骤S1520完成之后,数据集合和系数集合被分别存储在CNN处理引擎3的第一存储模块31和第二存储模块32中。接下来,处理模块33可以从第一存储模块31和第二存储模块32中取出第一数据和第一系数,以进行卷积运算。
在一实施例中,步骤S1530可以被实现为:基于多个CNN处理引擎3中对应的第一系数依次对每个第一数据进行卷积运算。
具体地,在每个CNN处理引擎3的第二存储模块32中均存储有与该第一数据相关的第一系数,则在一个CNN处理引擎3中使用第一系数对该第一数据进行卷积运算之后,可以将卷积运算的卷积结果发送至下一个CNN处理引擎,以供下一个CNN处理引擎使用另一第一系数对该卷积结果进行卷积运算。如此,每个第一数据都会在全部的CNN处理引擎3中与关联的第一系数进行卷积运算。
在此,对步骤S1530进行具体说明。图19为本申请实施例中的CNN处理引擎之间的连接关系的具体实施例的示意图。如图19所示,数据处理电路1可以包括4个CNN处理引擎3a、3b、3c、3d。CNN处理引擎3a、3b、3c、3d通过时钟偏移电路以环形方式连接。具体地,CNN处理引擎3a的输出端经过D触发器36连接到CNN处理引擎3b的输入端,CNN处理引擎3b的输出端经过D触发器36连接到CNN处理引擎3c的输入端,CNN处理引擎3c的输出端经过D触发器36连接到CNN处理引擎3d的输入端,CNN处理引擎3b的输出端经过D触发器36连接到CNN处理引擎3a的输入端。
首先,CNN处理引擎3a的处理模块33从CNN处理引擎3a的第一存储模块31中获取第一数据Im1,从第二存储模块32中获取第一系数F(1,1),进行第一数据Im1和第一系数F(1,1)之间的卷积运算,以得到卷积结果。之后,CNN处理引擎3a将该卷积结果输出到CNN处理引擎3b。CNN处理引擎3b的处理模块33从第二存储模块32中获取第一系数F(2,1),进行第一数据Im1和第一系数F(2,1)之间的卷积运算,以得到卷积结果。之后,CNN处理引擎3b将该卷积结果输出到CNN处理引擎3c。CNN处理引擎3c的处理模块33从第二存储模块32中获取第一系数F(3,1),进行第一数据Im1和第一系数F(3,1)之间的卷积运算,以得到卷积结果。之后,CNN处理引擎3c将该卷积结果输出到CNN处理引擎3d。CNN处理引擎3d的处理模块33从第二存储模块32中获取第一系数F(4,1),进行第一数据Im1和第一系数F(4,1)之间的卷积运算,以得到卷积结果。如此,CNN处理引擎3d得到的卷积结果即为第一数据Im1的最终卷积结果。
可以理解的是,在对CNN处理引擎3a中存储的Im1进行上述卷积运算的同时,可以对CNN处理引擎3b中存储的Im2、CNN处理引擎3c中存储的Im3、CNN处理引擎3d中存储的Im4进行类似的卷积运算。也就是说,通过时钟偏移电路,数据处理电路1中的4个CNN处理引擎3a、3b、3c、3d可以同时完成对第一数据Im1、Im2、Im3、Im4的卷积运算。
此外,需要说明的是,每个CNN处理引擎3a、3b、3c、3d完成卷积运算后输出的卷积结果,可以被称为第二数据(或卷积数据)。与该CNN处理引擎3a、3b、3c、3d相邻的下游CNN处理引擎3a、3b、3c、3d可以接收到该第二数据,并使用第二系数进行针对第二数据的卷积运算。在此,第二系数可以是之前加载到下游CNN处理引擎3a、3b、3c、3d的第二存储模块32中的多个第一系数中与第二数据相关联的第一系数。
图20A和20B为本申请实施例中第一数据在多个CNN处理引擎中的卷积运算的处理顺序的示意图。如图20A和20B所示,数据处理电路1包括4个CNN处理引擎3a、3b、3c、3d。第一数据的数量为8个,分别为Im1、Im2、Im3、Im4、Im5、Im6、Im7、Im8。8个第一数据被划分为2个数据群,每个数据群包括4个第一数据。第一个数据群包括第一数据Im1、Im2、Im3、Im4。第二个数据群包括第一数据Im5、Im6、Im7、Im8。系数组的数量为12个,分别为F1、F2、F3、F4、F5、F6、F7、F8、F9、F10、F11、F12。12个系数组被划分为3个系数群,每个系数群包括4个系数组。第一个系数群包括系数组F1、F2、F3、F4,分别对应于输出O1、O2、O3、O4。第二个系数群包括系数组F5、F6、F7、F8,分别对应于输出O5、O6、O7、O8。第三个系数群包括系数组F9、F10、F11、F12,分别对应于输出O9、O10、O11、O12。每个系数群进一步被划分为2个系数亚群。对于第一个系数群,第一个系数亚群中的第一系数与第一个数据群中的第一数据Im1、Im2、Im3、Im4相关,第二个系数亚群中的第一系数与第二个数据群中的第一数据Im5、Im6、Im7、Im8相关。更具体地,系数组F1中的系数F(1,1)、F(1,2)、F(1,3)、F(1,4),系数组F2中的系数F(2,1)、F(2,2)、F(2,3)、F(2,4),系数组F3中的系数F(3,1)、F(3,2)、F(3,3)、F(3,4),系数组F4中的系数F(4,1)、F(4,2)、F(4,3)、F(4,4)与第一数据Im1、Im2、Im3、Im4相关,并属于第一个系数亚群。同时,系数组F1中的系数F(1,5)、F(1,6)、F(1,7)、F(1,8),系数组F2中的系数F(2,5)、F(2,6)、F(2,7)、F(2,8),系数组F3中的系数F(3,5)、F(3,6)、F(3,7)、F(3,8),系数组F4中的系数F(4,5)、F(4,6)、F(4,7)、F(4,8)与第一数据Im5、Im6、Im7、Im8相关,并属于第二个系数亚群。
系数F(i,j)的索引j的数值变化符合循环移位的要求。可以看出,在图20A和20B中,循环移位的方向相反的,则系数F(i,j)的索引j的数值变化方向也是相反的。
在图20A所示的示例中,4个CNN处理引擎按照CNN处理引擎3a、3b、3c、3d的顺序依次首尾连接。在第一轮卷积运算的过程中,将第一数据Im1、Im2、Im3、Im4分别加载到CNN处理引擎3a、3b、3c、3d的处理模块33中,并且由这些处理模块33以循环方式对第一数据Im1、Im2、Im3、Im4进行卷积运算。针对第一数据Im1,CNN处理引擎3a、3b、3c、3d分别采用第一系数F(1,1)、F(2,1)、F(3,1)、F(4,1)进行卷积运算。针对第一数据Im2,CNN处理引擎3b、3c、3d、3a分别采用第一系数F(2,2)、F(3,2)、F(4,2)、F(1,2)进行卷积运算。针对第一数据Im3,CNN处理引擎3c、3d、3a、3b分别采用第一系数F(3,3)、F(4,3)、F(1,3)、F(2,3)进行卷积运算。针对第一数据Im4,CNN处理引擎3d、3a、3b、3c分别采用第一系数F(4,4)、F(1,4)、F(2,4)、F(3,4)进行卷积运算。在第二轮卷积运算的过程中,将第一数据Im5、Im6、Im7、Im8分别加载到CNN处理引擎3a、3b、3c、3d的处理模块33中,并且由这些处理模块33以循环方式对第一数据Im5、Im6、Im7、Im8进行卷积运算。针对第一数据Im5,CNN处理引擎3a、3b、3c、3d分别采用第一系数F(1,5)、F(2,5)、F(3,5)、F(4,5)进行卷积运算。针对第一数据Im6,CNN处理引擎3b、3c、3d、3a分别采用第一系数F(2,6)、F(3,6)、F(4,6)、F(1,6)进行卷积运算。针对第一数据Im7,CNN处理引擎3c、3d、3a、3b分别采用第一系数F(3,7)、F(4,7)、F(1,7)、F(2,7)进行卷积运算。针对第一数据Im8,CNN处理引擎3d、3a、3b、3c分别采用第一系数F(4,8)、F(1,8)、F(2,8)、F(3,8)进行卷积运算。在完成第一轮和第二轮卷积运算之后,得到输出的运算结果O1、O2、O3、O4。运算结果O1、O2、O3、O4分别对应于系数组F1、F2、F3、F4。之后,采用类似的方式,使用系数组F5、F6、F7、F8、以及系数组F9、F10、F11、F12对第一数据Im1、Im2、Im3、Im4、Im5、Im6、Im7、Im8的卷积运算,从而得到运算结果O5、O6、O7、O8、O9、O10、O11、O12。
在图20B所示的示例中,4个CNN处理引擎按照CNN处理引擎3d、3c、3b、3a的顺序依次首尾连接。在第一轮卷积运算的过程中,将第一数据Im1、Im2、Im3、Im4分别加载到CNN处理引擎3a、3b、3c、3d的处理模块33中,并且由这些处理模块33以循环方式对第一数据Im1、Im2、Im3、Im4进行卷积运算。针对第一数据Im1,CNN处理引擎3a、3d、3c、3b分别采用第一系数F(1,1)、F(4,1)、F(3,1)、F(2,1)进行卷积运算。针对第一数据Im2,CNN处理引擎3b、3a、3d、3c分别采用第一系数F(2,2)、F(1,2)、F(4,2)、F(3,2)进行卷积运算。针对第一数据Im3,CNN处理引擎3c、3b、3a、3d分别采用第一系数F(3,3)、F(2,3)、F(1,3)、F(4,3)进行卷积运算。针对第一数据Im4,CNN处理引擎3d、3c、3b、3a分别采用第一系数F(4,4)、F(3,4)、F(2,4)、F(1,4)进行卷积运算。在第二轮卷积运算的过程中,将第一数据Im5、Im6、Im7、Im8分别加载到CNN处理引擎3a、3b、3c、3d的处理模块33中,并且由这些处理模块33以循环方式对第一数据Im5、Im6、Im7、Im8进行卷积运算。针对第一数据Im5,CNN处理引擎3a、3d、3c、3b分别采用第一系数F(1,5)、F(4,5)、F(3,5)、F(2,5)进行卷积运算。针对第一数据Im6,CNN处理引擎3b、3a、3d、3c分别采用第一系数F(2,6)、F(1,6)、F(4,6)、F(3,6)进行卷积运算。针对第一数据Im7,CNN处理引擎3c、3b、3a、3d分别采用第一系数F(3,7)、F(2,7)、F(1,7)、F(4,7)进行卷积运算。针对第一数据Im8,CNN处理引擎3d、3c、3b、3a分别采用第一系数F(4,8)、F(3,8)、F(2,8)、F(1,8)进行卷积运算。在完成第一轮和第二轮卷积运算之后,得到输出的运算结果O1、O2、O3、O4。运算结果O1、O2、O3、O4分别对应于系数组F1、F2、F3、F4。之后,采用类似的方式,使用系数组F5、F6、F7、F8、以及系数组F9、F10、F11、F12对第一数据Im1、Im2、Im3、Im4、Im5、Im6、Im7、Im8的卷积运算,从而得到运算结果O5、O6、O7、O8、O9、O10、O11、O12。
图21为本申请实施例中第一数据中的3×3个数据的位置示意图。如图21所示,在大小为(M+2)×(M+2)的第一数据中,每个数据的位置可以表示为(m,n),其中,m、n均为正整数,并且取值范围为1至M。卷积运算是基于大小为3×3的矩阵实现的。具体地,以位置为(m,n)为中心的3×3的矩阵中的9个数据与第一系数进行卷积运算。
在一实施例中,第一系数可以包括3×3的矩阵。在此情况下,卷积运算包括将第一数据中以位置(m,n)为中心的3×3矩阵与第一系数的3×3矩阵中的对应位置处的数据和系数项进行乘法计算,并将9个位置的乘积值相加,以得到运算结果。在一实施例中,第一系数可以包括3×3的矩阵、以及偏置项。在此情况下,卷积运算包括将第一数据中以位置(m,n)为中心的3×3矩阵与第一系数的3×3矩阵中的对应位置处的数据和系数项进行乘法计算,将9个位置的乘积值相加并加上偏置项,以得到运算结果。
在一实施例中,第一数据可以形成数量为M×M个大小为3×3的矩阵。这些3×3的矩阵与第一系数之间的卷积运算可以并行执行,也可以先后执行,本申请实施例对此不做具体限定。
经过步骤S1530的处理,第一数据和第一系数之间的卷积运算得到的运算结果可以是大小为M×M的矩阵。
在一实施例中,可以对得到的M×M的矩阵中的数据进行修正。例如,可以通过矫正器3324对运算结果进行矫正。
在一实施例中,可以对得到的M×M的矩阵进行池化操作。例如,可以通过池化器3325对运算结果进行池化操作。图22为本申请实施例中对运算结果进行池化操作的示意图。如图22所示,可以对运算结果进行2×2池化。经过该池化操作,运算结果的矩阵大小从M×M变为(M/2)×(M/2)。
需要说明的是,在本申请实施例中给出的具体数值仅出于示例性说明的目的。可以理解的是,本申请实施例所涉及的参数,包括数据集合的矩阵大小、第一数据的矩阵大小、第一系数的矩阵大小、池化操作的尺寸等,均可以采用其它数值,本申请实施例对此不做具体限定。
此外,还需要说明的是,本申请实施例中给出的数据处理电路中的各个模块、单元、组件均可以以硬件的方式实现。例如,数据处理电路中的模块、单元、组件中的至少一个可以由电路实现。当然,数据处理电路的一些模块、单元、组件还可以由软件或软硬件结合的方式实现,本申请对此不做具体限定。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
Claims (12)
1.一种数据处理电路,其特征在于,包括:
多个细胞神经网络CNN处理引擎,其中,所述多个CNN处理引擎以环形方式连接;
其中,所述多个CNN处理引擎中的每个CNN处理引擎包括:
第一存储模块,配置为存储第一数据,其中,所述第一数据采用8位浮点格式,所述第一数据为待处理的数据集合的一部分;
第二存储模块,配置为存储第一系数,所述第一系数与所述第一数据关联;
处理模块,配置为:对所述第一数据进行格式转换;进行转换后的第一数据和所述第一系数之间的卷积运算;将卷积结果转换为8位浮点格式。
2.根据权利要求1所述的数据处理电路,其特征在于,所述第二存储模块还配置为存储第二系数;
处理电路还配置为:获得相邻的上游CNN处理引擎输出的第二数据,其中,所述第二数据采用8位浮点格式;对所述第二数据进行格式转换;对转换后的第二数据和所述第二系数之间的卷积运算;将卷积结果转换为8位浮点格式。
3.根据权利要求1所述的数据处理电路,其特征在于,所述处理模块包括:
第一转换单元,配置为将所述第一数据转换至第一格式,其中,所述第一格式不同于8位浮点格式;
运算单元,配置为对转换后的第一数据和所述第一系数之间的卷积运算;
第二转换单元,配置为将卷积结果转换为8位浮点格式。
4.根据权利要求1所述的数据处理电路,其特征在于,所述数据处理电路还包括:
控制器,与所述多个CNN处理引擎耦合,并且配置为控制所述多个CNN处理引擎工作。
5.根据权利要求1所述的数据处理电路,其特征在于,所述数据处理电路还包括:编码电路,配置为在所述第一存储模块存储所述第一数据以及所述第二存储模块存储所述第一系数之前,对所述第一数据和/或所述第一系数进行布斯编码。
6.根据权利要求1所述的数据处理电路,其特征在于,所述数据处理电路还包括:
时钟偏移电路,与所述多个CNN处理引擎耦合,并且配置为触发所述每个CNN处理引擎输出所述卷积结果。
7.根据权利要求6所述的数据处理电路,其特征在于,所述时钟偏移电路包括多个D触发器,所述多个D触发器与所述多个CNN处理引擎一一对应地连接;
其中,所述多个D触发器中的每个D触发器,配置为触发所述每个CNN处理引擎向相邻的下游CNN处理引擎输出所述卷积结果。
8.根据权利要求1所述的数据处理电路,其特征在于,所述第一存储模块的存储空间的大小是基于第一数量和第二数量确定的;
其中,所述第一数量是所述多个CNN处理引擎的数量,所述第二数量是所述数据集合中数据的数量。
9.根据权利要求1所述的数据处理电路,其特征在于,所述第二存储模块的存储空间的大小是基于第一数量和第三数量确定的;
其中,所述第一数量是所述多个CNN处理引擎的数量,所述第三数量是所述数据集合中关联的系数集合中系数的数量。
10.根据权利要求1所述的数据处理电路,其特征在于,所述第一数据是大小为(M+2)×(M+2)的矩阵,所述第一系数是大小为3×3的矩阵;
其中,所述处理电路,配置为:
进行所述第一系数与所述第一数据中的M2个3×3的矩阵之间的卷积运算;
其中,M为正整数。
11.根据权利要求1所述的数据处理电路,其特征在于,所述8位浮点格式包括以下之一:
用于指示符号的1个比特、用于指示指数的4个比特、以及用于指示尾数的3个比特;
用于指示符号的1个比特、用于指示指数的5个比特、以及用于指示尾数的2个比特。
12.一种电子设备,其特征在于,包括:
电路板;
如权利要求1至11中任一项所述的数据处理电路,其中,所述数据处理电路位于所述电路板上。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311431875.2A CN117151169A (zh) | 2023-10-31 | 2023-10-31 | 数据处理电路及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311431875.2A CN117151169A (zh) | 2023-10-31 | 2023-10-31 | 数据处理电路及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117151169A true CN117151169A (zh) | 2023-12-01 |
Family
ID=88910552
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311431875.2A Pending CN117151169A (zh) | 2023-10-31 | 2023-10-31 | 数据处理电路及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117151169A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11184841A (ja) * | 1997-12-22 | 1999-07-09 | Canon Inc | 画像処理方法及び装置 |
CN110378465A (zh) * | 2018-04-12 | 2019-10-25 | 海青智盈技术公司 | 使用基于模块化连接的cnn的集成电路的深度学习图像处理系统 |
CN112711738A (zh) * | 2019-10-25 | 2021-04-27 | 安徽寒武纪信息科技有限公司 | 用于向量内积的计算装置、方法和集成电路芯片 |
CN113785271A (zh) * | 2019-05-03 | 2021-12-10 | 特斯拉公司 | 具有指定偏差浮点操作数的矩阵乘法指令的系统和方法 |
CN116661733A (zh) * | 2023-05-25 | 2023-08-29 | 中国人民解放军国防科技大学 | 一种支持多种精度的乘法器及微处理器 |
-
2023
- 2023-10-31 CN CN202311431875.2A patent/CN117151169A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11184841A (ja) * | 1997-12-22 | 1999-07-09 | Canon Inc | 画像処理方法及び装置 |
CN110378465A (zh) * | 2018-04-12 | 2019-10-25 | 海青智盈技术公司 | 使用基于模块化连接的cnn的集成电路的深度学习图像处理系统 |
CN113785271A (zh) * | 2019-05-03 | 2021-12-10 | 特斯拉公司 | 具有指定偏差浮点操作数的矩阵乘法指令的系统和方法 |
CN112711738A (zh) * | 2019-10-25 | 2021-04-27 | 安徽寒武纪信息科技有限公司 | 用于向量内积的计算装置、方法和集成电路芯片 |
CN116661733A (zh) * | 2023-05-25 | 2023-08-29 | 中国人民解放军国防科技大学 | 一种支持多种精度的乘法器及微处理器 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109063825B (zh) | 卷积神经网络加速装置 | |
US10671349B2 (en) | Accelerated mathematical engine | |
Chang et al. | An energy-efficient FPGA-based deconvolutional neural networks accelerator for single image super-resolution | |
CN108205700B (zh) | 神经网络运算装置和方法 | |
US20180218518A1 (en) | Data compaction and memory bandwidth reduction for sparse neural networks | |
CN117273096A (zh) | 在硬件中执行矩阵乘法 | |
US20210349692A1 (en) | Multiplier and multiplication method | |
CN110163358B (zh) | 一种计算装置及方法 | |
WO2022037257A1 (zh) | 卷积计算引擎、人工智能芯片以及数据处理方法 | |
CN114138231B (zh) | 执行矩阵乘法运算的方法、电路及soc | |
US11775808B2 (en) | Neural network computation device and method | |
CN110515587B (zh) | 乘法器、数据处理方法、芯片及电子设备 | |
CN111160542A (zh) | 集成电路芯片装置及相关产品 | |
CN110738317A (zh) | 基于fpga的可变形卷积网络运算方法、装置和系统 | |
CN114548387A (zh) | 神经网络处理器执行乘法运算的方法和神经网络处理器 | |
WO2022205197A1 (zh) | 一种矩阵乘法器、矩阵计算方法及相关设备 | |
CN109740740A (zh) | 卷积计算的定点加速方法及装置 | |
CN117151169A (zh) | 数据处理电路及电子设备 | |
CN112765540A (zh) | 数据处理方法、装置及相关产品 | |
CN116719499A (zh) | 一种应用于5g最小二乘定位的自适应伪逆计算方法 | |
CN114003198B (zh) | 内积处理部件、任意精度计算设备、方法及可读存储介质 | |
Zhang et al. | Yolov3-tiny Object Detection SoC Based on FPGA Platform | |
Zhao et al. | A method for accelerating convolutional neural networks based on fpga | |
CN110673802B (zh) | 数据存储方法、装置、芯片、电子设备和板卡 | |
CN116467236A (zh) | 基于fpga的yolov3硬件加速平台及方法 |
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 |