CN108229645B - 卷积加速和计算处理方法、装置、电子设备及存储介质 - Google Patents

卷积加速和计算处理方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN108229645B
CN108229645B CN201710300171.XA CN201710300171A CN108229645B CN 108229645 B CN108229645 B CN 108229645B CN 201710300171 A CN201710300171 A CN 201710300171A CN 108229645 B CN108229645 B CN 108229645B
Authority
CN
China
Prior art keywords
data
processed
output
input
calculation
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
Application number
CN201710300171.XA
Other languages
English (en)
Other versions
CN108229645A (zh
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 Sensetime Technology Development Co Ltd
Original Assignee
Beijing Sensetime Technology Development 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 Sensetime Technology Development Co Ltd filed Critical Beijing Sensetime Technology Development Co Ltd
Priority to CN201710300171.XA priority Critical patent/CN108229645B/zh
Priority to PCT/CN2018/084948 priority patent/WO2018196863A1/zh
Priority to SG11201910024P priority patent/SG11201910024PA/en
Publication of CN108229645A publication Critical patent/CN108229645A/zh
Priority to US16/662,493 priority patent/US11429852B2/en
Application granted granted Critical
Publication of CN108229645B publication Critical patent/CN108229645B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • 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/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Abstract

本发明实施例公开了一种卷积加速和计算处理方法、装置、电子设备及存储介质,其中,加速方法包括:通过FIFO端口依次从加速器的片外存储器读取待处理任务中预设大小的待处理数据,并存储在所述加速器的片上内存中第一缓存区的各输入缓存区;响应于有输入缓存区中存入待处理数据,依次从各输入缓存区读取待处理的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,获得输出窗口数据并存储在第三缓存区中;通过FIFO端口依次将第三缓存区中的输出窗口数据存储至所述片外存储器中。本发明实施例可以避免加速器片上内存和带宽不足、处理器资源有限的情况,并且提高了卷积计算处理的效率,可以适用于FPGA、ASIC等硬件平台。

Description

卷积加速和计算处理方法、装置、电子设备及存储介质
技术领域
本发明涉及计算机视觉技术,尤其是一种卷积加速和计算处理方法、装 置、电子设备及存储介质。
背景技术
神经网络作为一种模仿生物神经结构的信息处理技术,在近年来得到了 迅速的发展。神经网络有着非常强大的非线性映射能力,其中,深度卷积神 经网络(Deepconvolutional neural network,CNN)在图像分类、物体检测、 语义分割等各种计算机视觉任务处理中,表现出了显著性能。
由于需要对图像中区域的特征图进行处理,CNN计算精度的提升,其计 算复杂度也成倍增加。针对巨大的计算压力,采用图形处理器(Graphics Processing Unit,GPU)、现场可编程门阵列(Field Programmable Gate Array,FPGA)、专用集成电路(ApplicationSpecific Integrated Circuit, ASIC)等硬件加速器来加速CNN的计算过程。在现有加速器中,FPGA作 为嵌入式平台中的高效加速器,拥有可重构、并行计算性、开发周期短、低 功耗、灵活性高等特点,近年来,使用FPGA加速CNN的技术得到快速发 展。
发明内容
本发明实施例提供一种使用FPGA加速CNN的技术方案,包括:卷积 加速方法和加速器、卷积计算处理方法和装置、电子设备,计算机存储介 质。
根据本发明实施例的一个方面,提供的一种卷积加速方法,包括:
通过先进先出FIFO端口依次从加速器的片外存储器读取待处理任务中 预设大小的待处理数据,并存储在所述加速器的片上内存中第一缓存区的各 输入缓存区;其中,所述片上内存包括第一缓存区、第二缓存区和第三缓存 区,所述第一缓存区包括至少一个输入缓存区,所述第二缓存区中缓存有至 少一组卷积核数据;响应于有输入缓存区中存入待处理数据,依次从各输入 缓存区读取待处理的输入窗口数据,并通过所述卷积核数据对所述待处理的 输入窗口数据进行卷积计算,获得输出窗口数据并存储在第三缓存区中;
通过FIFO端口依次将第三缓存区中的输出窗口数据存储至所述片外存 储器中。
可选地,上述方法中,所述待处理任务包括:至少一个输入通道的输入 图像、或者至少一个输入通道的输入特征图;
每组卷积核数据分别对应于一个输出通道,每组卷积核数据包括至少一 个卷积核数据,每个卷积核数据分别对应于一个输入通道。
可选地,上述方法中,所述第三缓存区包括至少一个输出缓存区;
所述获得输出窗口数据并存储在第三缓存区中,包括:获得输出窗口数 据并依次存储在各输出缓存区中;
所述通过FIFO端口依次将第三缓存区中的输出窗口数据存储至所述片 外存储器中,包括:响应于首个输出缓存区存入输出窗口数据,依次读取各 输出缓存区中的输出窗口数据,并通过FIFO端口将读取的输出窗口数据存 储至所述片外存储器中。
可选地,上述方法中,所述第三缓存区包括两个输出缓存区;
在所述待处理任务的处理过程中,所述两个输出缓存区的其中一个输出 缓存区被轮流存入输出窗口数据、读取输出窗口数据,所述两个输出缓存区 中的另一个输出缓存区被轮流读取输出窗口数据、存入输出窗口数据。
可选地,上述方法中,所述第一缓存区包括两个输入缓存区;
在所述待处理任务的处理过程中,所述两个输入缓存区的其中一个输入 缓存区被轮流存入待处理数据、读取输入窗口数据,所述两个输入缓存区中 的另一个输入缓存区被轮流读取待处理的输入窗口数据、存入待处理数据。
可选地,上述方法中,所述卷积核数据对应的卷积核的尺寸为r×r,所述 输入窗口数据对应的输入窗口的尺寸为n×n,所述输入窗口数据对应的输入 窗口的滑动步长和输出窗口的尺寸为m;其中,m、n、r的取值分别为大于 0的整数,且满足n=m+r-1;
所述输入缓存区具体为行缓存区;所述第一缓存区具体为:由n+m个行 缓存区形成的循环缓冲区,每个行缓存区用于顺序存储所述待处理任务所有 通道中的同一行数据;
所述从加速器的片外存储器读取待处理任务中预设大小的待处理数据, 并依次存储在所述加速器的片上内存中、第一缓存区的各输入缓存区,包 括:
首次从片外存储器读取所述待处理任务所有通道的前n行数据,并将所 述前n行数据中的各行数据分别对应存储在第一缓存区中、基于预定循环方 向确定的前n个行缓存区中;
之后每次从片外存储器读取所述待处理任务所有通道的相邻后续m行数 据,并将本次读取的m行数据中的各行数据分别对应存储在第一缓存区中、 基于所述预定循环方向确定的相邻后续m个行缓存区中。
可选地,上述方法中,所述卷积核数据对应的卷积核的尺寸为r×r,所述 输入窗口数据对应的输入窗口的尺寸为n×n,所述输入窗口数据对应的输入 窗口的滑动步长和输出窗口的尺寸为m;其中,m、n、r的取值分别为大于 0的整数,且满足n=m+r-1;
所述输入缓存区具体为行缓存区;所述第一缓存区具体为:由n+m个行 缓存区形成的循环缓冲区,每个行缓存区用于顺序存储所述待处理任务所有 通道中的同一行数据;
所述从加速器的片外存储器读取待处理任务中预设大小的待处理数据, 并依次存储在所述加速器的片上内存中、第一缓存区的各输入缓存区,包 括:
每次从片外存储器读取所述待处理任务所有通道的n行数据;
对于首次从所述待处理任务中读取的前n行数据,将所述前n行数据中 的各行数据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个 行缓存区中;对于非首次读取的n行数据,基于所述预定循环方向,将第一 缓存区中存储上一次读取的n行数据的前n个行缓冲区滑动m行后对应的n 个行缓冲区作为本次读取的n行数据的目标行缓存区,并将本次读取的n行 数据对应存入所述目标行缓存区中的各行缓冲区中。8、根据权利要求6或7 所述的方法,其特征在于,所述依次从各输入缓存区读取待处理的输入窗口 数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算, 包括:
针对所述待处理任务,首次读取待处理的输入窗口数据时,选取所述前 n个行缓存区作为当前计算缓存区,按照滑动步长m,依次顺序从当前计算 缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处 理的输入窗口数据进行卷积计算,直至当前计算缓存区中的待处理数据均被 读取;
之后每次基于所述预定循环方向,按照滑动步长m从上一计算缓存区开 始滑动,选取n个行缓存区作为新的计算缓存区,按照滑动步长m,依次顺 序从新的计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数 据对所述待处理的输入窗口数据进行卷积计算,直至所述新的计算缓存区中 的待处理数据均被读取。
可选地,上述方法中,所述输出缓存区包括m个行缓存区;
所述获得输出窗口数据并依次存储在各输出缓存区中,包括:
选取其中一个输出缓存区作为当前输出缓存区,依次将对每个输入窗口 数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个行 缓存区中;响应于一个计算缓存区中的所有输入窗口数据进行卷积计算获得 的输出窗口数据被存储完毕,选取另一个输出缓存区作为当前输出缓存区, 执行所述依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序 存储在当前输出缓冲区的m个行缓存区中的操作;
所述依次将第三缓存区中的输出窗口数据存储至所述片外存储器中,包 括:
响应于当前计算缓存区中的所有输入窗口数据进行卷积计算获得的输出 窗口数据被存储完毕,将所述当前输出缓存区中的输出窗口数据存储至所述 片外存储器中。
可选地,上述方法中,所述卷积核数据对应的卷积核的尺寸为r×r,所述 输入窗口数据对应的输入窗口的尺寸为n×n,所述输入窗口数据对应的输入 窗口的滑动步长为m;其中,m、n、r的取值分别为大于0的整数,且满足 n=m+r-1;
所述输入缓存区具体为列缓存区;所述第一缓存区具体为:由n+m个列 缓存区形成的循环缓冲区,每个列缓存区用于顺序存储所述待处理任务所有 通道中的同一列数据;
所述从加速器的片外存储器读取待处理任务中预设大小的待处理数据, 并依次存储在所述加速器的片上内存中、第一缓存区的各输入缓存区,包 括:
首次从片外存储器读取所述待处理任务所有通道的前n列数据,并将所 述前n列数据中的各列数据分别对应存储在第一缓存区中、基于预定循环方 向确定的前n个列缓存区中;
之后每次从片外存储器读取所述待处理任务所有通道的相邻后续m列数 据,并将本次读取的m列数据中的各行数据分别对应存储在第一缓存区中、 基于所述预定循环方向确定的相邻后续m个列缓存区中。
可选地,上述方法中,所述卷积核数据对应的卷积核的尺寸为r×r,所述 输入窗口数据对应的输入窗口的尺寸为n×n,所述输入窗口数据对应的输入 窗口的滑动步长和输出窗口的尺寸为m;其中,m、n、r的取值分别为大于 0的整数,且满足n=m+r-1;
所述输入缓存区具体为列缓存区;所述第一缓存区具体为:由n+m个列 缓存区形成的循环缓冲区,每个列缓存区用于顺序存储所述待处理任务所有 通道中的同一列数据;
所述从加速器的片外存储器读取待处理任务中预设大小的待处理数据, 并依次存储在所述加速器的片上内存中、第一缓存区的各输入缓存区,包 括:
每次从片外存储器读取所述待处理任务所有通道的n列数据;
对于首次从所述待处理任务中读取的前n列数据,将所述前n列数据中 的各列数据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个 列缓存区中;对于非首次读取的n列数据,基于所述预定循环方向,将第一 缓存区中存储上一次读取的n列数据的前n个列缓冲区滑动m列后对应的n 个列缓冲区作为本次读取的n列数据的目标列缓存区,并将本次读取的n列 数据对应存入所述目标列缓存区中的各列缓冲区中。
可选地,上述方法中,所述依次从各输入缓存区读取待处理的输入窗口 数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算, 包括:
针对所述待处理任务,首次读取待处理的输入窗口数据时,选取所述前 n个列缓存区作为当前计算列缓存区,按照滑动步长m,依次顺序从当前列 计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述 待处理的输入窗口数据进行卷积计算,直至当前列计算缓存区中的待处理数 据均被读取;
之后每次基于所述预定循环方向,按照滑动步长m从上一列计算缓存区 开始滑动,选取n个列缓存区作为新的计算缓存区,按照滑动步长m,依次 顺序从新的计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核 数据对所述待处理的输入窗口数据进行卷积计算,直至所述新的计算缓存区 中的待处理数据均被读取。
可选地,上述方法中,所述输出缓存区包括m个列缓存区;
所述获得输出窗口数据并依次存储在各输出缓存区中,包括:
选取其中一个输出缓存区作为当前输出缓存区,依次将对每个输入窗口 数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个列 缓存区中;响应于一个计算列缓存区中的所有输入窗口数据进行卷积计算获 得的输出窗口数据被存储完毕,选取另一个输出缓存区作为当前输出缓存 区,执行所述依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据 顺序存储在当前输出缓冲区的m个列缓存区中的操作;
所述依次将第三缓存区中的输出窗口数据存储至所述片外存储器中,包 括:
响应于当前计算列缓存区中的所有输入窗口数据进行卷积计算获得的输 出窗口数据被存储完毕,将所述当前输出缓存区中的输出窗口数据存储至所 述片外存储器中。
可选地,上述方法中,所述至少一组卷积核数据包括至少一组转换后的 卷积核,其中,任一组转换后的卷积核由对应的第一常数矩阵对对应于一个 输出通道的卷积核进行转换获得;
通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,获得 输出窗口数据,包括:
分别针对任一输入通道执行如下计算处理操作:采用对应的第二常数矩 阵对待处理的输入窗口数据进行转换,获得转换后输入窗口数据;对所述任 一输入通道的转换后输入窗口数据与转换后的卷积核进行矩阵点乘操作,获 得点乘后矩阵;采用对应的第三常数矩阵对所述点乘后矩阵进行转换,获得 卷积结果;
响应于获得所有输入通道的卷积结果,对所有输入通道的所述卷积结果 中的对应点进行累加,获得一个输出通道的输出窗口数据。
可选地,上述方法中,还包括:
预先采用对应的第一常数矩阵,分别对对应于所述至少一个输出通道的 卷积核进行转换,获得所述至少一组转换后的卷积核,并存储在所述第二缓 冲区中;或者
采用对应的第一常数矩阵,分别对对应于所述至少一个输出通道的卷积 核进行转换,获得所述至少一组转换后的卷积核。
可选地,上述方法中,所述采用对应的第二常数矩阵对待处理的输入窗 口数据进行转换,包括:根据所述对应的第二常数矩阵,分别对所述任一输 入通道待处理的输入窗口数据进行位运算操作;和/或
所述采用对应的第三常数矩阵对所述点乘后矩阵进行转换,包括:根据 所述第三常数矩阵,分别对所述任一输入通道的所述点乘后矩阵进行位运算 操作;和/或
所述采用对应的第一常数矩阵,分别对对应于所述至少一个输出通道的 卷积核进行转换,包括:根据所述第一常数矩阵,分别对对应于所述至少一 个输出通道的卷积核进行位运算操作。
可选地,上述方法中,还包括:
分别从常数矩阵表中,查询与所述卷积核的尺寸r×r和输入窗口的尺寸 n×n对应的第一常数矩阵、第二常数矩阵和第三常数矩阵;
其中,所述常数矩阵表中预先设置有分别与各卷积核的尺寸和输入窗口 的尺寸对应的第一常数矩阵、第二常数矩阵和第三常数矩阵。
可选地,上述方法中,所述分别针对任一输入通道执行如下计算操作, 包括:同时针对Pm个输出通道和Pn个输入通道执行所述计算处理操作,其 中,Pm和Pn分别为大于0的整数;
所述响应于获得所有输入通道的卷积结果,对所有输入通道的所述卷积 结果中的对应点进行累加,获得一个输出通道的输出窗口数据,包括:针对 所述Pm个输出通道,响应于获得所有输入通道的卷积结果,分别针对同一 个输出通道,将所述所有输入通道的所述卷积结果中的对应点进行累加,获 得所述Pm个输出通道的输出窗口数据。
可选地,上述方法中,Pm的取值为1,Pn的取值为大于1的整数;
所述同时针对Pm个输出通道和Pn个输入通道执行所述计算处理操作, 包括:依次针对一个输出通道、全部输入通道或者所述全部输入通道中的部 分输入通道,并行执行所述计算处理操作。
可选地,上述方法中,Pm的取值为全部输出通道数,Pn的取值为1;
所述同时针对Pm个输出通道和Pn个输入通道执行所述计算处理操作, 包括:同时针对全部输出通道,依次针对一个输入通道执行所述计算处理操 作;
所述响应于获得所有输入通道的卷积结果,对所有输入通道的所述卷积 结果中的对应点进行累加,获得一个输出通道的输出窗口数据,包括:针对 所述全部输出通道,响应于获得所有输入通道的卷积结果,分别针对同一个 输出通道,对所有输入通道的所述卷积结果中的对应点进行累加,获得全部 输出通道的输出窗口数据。
可选地,上述方法中,Pm的取值大于1且小于全部输出通道数,Pn的 取值为1;
所述同时针对Pm个输出通道和Pn个输入通道执行所述计算处理操作, 包括:同时针对全部输出通道中的部分输出通道,依次针对一个输入通道执 行所述计算处理操作。
可选地,上述方法中,还包括:
根据参数优化模型,由FIFO端口的传输带宽、加速器的资源条件获取 所述卷积计算中参数的最优取值,所述卷积计算中参数包括:输入窗口的尺 寸、输出通道的并行度和输入通道的并行度,所述参数的最优取值包括:输 入窗口的尺寸的最优取值n、输出通道的并行度的最优取值Pm和输入通道的 并行度的最优取值Pn。
可选地,上述方法中,所述同时针对Pm个输出通道和Pn个输入通道执 行所述计算处理操作,包括:
基于所述参数的最优取值中Pm和Pn的取值,依次选取Pm个输出通道 和Pn个输入通道,执行所述同时针对Pm个输出通道和Pn个输入通道执行 所述计算处理操作。
可选地,上述方法中,还包括:
比较当前待处理任务的卷积核尺寸k×k与加速器对应的卷积核的尺寸为 r×r是否一致;
若不一致,对所述当前待处理任务的卷积核的右方填充a列0、下方分 别填充b行0,使所述当前待处理任务的卷积核转换成尺寸为tr×tr的新卷积 核,其中,k、t、a、b的取值分别为大于0的整数。
可选地,上述方法中,还包括:
响应于需要对所述待处理任务进行全连接操作,通过FIFO端口从加速 器的片外存储器读取待处理任务的全部数据,并存储在所述第一缓存区中;
对所述全部数据与所述第二缓存区中存储的转换后的卷积核进行矩阵点 乘操作,获得点乘后矩阵;
采用对应的第三常数矩阵对所述点乘后矩阵进行转换,获得计算结果数 据并存储在所述第三缓存区中;
通过FIFO端口依次将所述第三缓存区中的计算结果数据存储至所述片 外存储器中。
可选地,上述方法中,还包括:
响应于需要对所述待处理任务进行池化操作,通过FIFO端口依次从加 速器的片外存储器读取所述待处理任务中预设大小的数据,并存储在所述第 一缓存区中;
从所述预设大小的数据中选取一个取值最大的数据作为计算结果数据, 并存储在所述第三缓存区中;
通过FIFO端口依次将所述第三缓存区中的计算结果数据存储至所述片 外存储器中。
可选地,上述方法中,还包括:
响应于需要对所述待处理任务进行激活函数操作,通过FIFO端口依次 从加速器的片外存储器读取待处理任务中预设大小的待处理数据,并存储在 所述第一缓存区中;
依次比较所述待处理数据中任一数据的数值是否小于0;
若所述任一数据的数值小于0,将以0作为所述任一数据的计算结果存 储在所述第三缓存区中;若所述任一数据的数值不小于0,直接将所述任一 数据的数值作为计算结果存储在所述第三缓存区中;
通过FIFO端口依次将所述第三缓存区中的计算结果存储至所述片外存 储器中。
可选地,上述方法中,还包括:
响应于需要对所述待处理任务进行上采样操作,通过FIFO端口依次从 加速器的片外存储器读取待处理任务中的一个元素数据,将所述元素数据复 制为2s×2s的元素矩阵,以所述元素矩阵作为所述待处理数据,开始执行所 述依次存储在所述加速器的片上内存中第一缓存区的各输入缓存区的操作; 其中,s的取值为大于0的整数。
可选地,上述方法中,还包括:
响应于需要对所述待处理任务进行填充处理,通过FIFO端口从加速器 的片外存储器读取待处理任务的全部数据,并存储在所述第一缓存区中;;
比较所述待处理任务的数据大小是否小于预设大小;
若所述待处理任务的数据大小小于预设大小,按照预设方式对所述待处 理任务进行边缘数据填充,使得填充后的待处理任务的数据大小等于所述预 设大小,并将填充后的待处理任务存储在所述第三缓存区中;若所述待处理 任务的数据大小不小于预设大小,直接将所述待处理任务存储在所述第三缓 存区中;
通过FIFO端口依次将所述第三缓存区中的待处理任务数据存储至所述 片外存储器中。
可选地,上述方法中,所述加速器包括:现场可编程门阵列FPGA或专 用集成电路ASIC。
可选地,上述方法中,所述通过FIFO端口依次从加速器的片外存储器 读取待处理任务中预设大小的待处理数据包括:
加速器通过FIFO端口接收处理器发送的任务处理指令,并通过FIFO端 口依次从加速器的片外存储器读取待处理任务中预设大小的待处理数据的操 作;
所述方法还包括:
响应于对所述待处理任务的卷积加速完成,加速器通过FIFO端口向所 述处理器反馈任务完成的响应消息。
根据本发明实施例的另一个方面,提供的一种卷积计算处理方法,包 括:
采用第二常数矩阵对待处理的输入窗口数据进行转换,获得转换后输入 窗口数据;
对所述转换后输入窗口数据与卷积核数据进行矩阵点乘操作,获得点乘 后矩阵;所述卷积核数据由第一常数矩阵对卷积核进行转换获得;
采用第三常数矩阵对所述点乘后矩阵进行转换,获得所述卷积结果。
可选地,上述卷积计算处理方法中,还包括:
预先采用第一常数矩阵对预先设置的卷积核进行转换,获得所述卷积核 数据并存储。
可选地,上述卷积计算处理方法中,采用第二常数矩阵对待处理的输入 窗口数据进行转换时,还包括:
采用第一常数矩阵对预先设置的卷积核进行转换,获得所述卷积核数 据。
可选地,上述卷积计算处理方法中,对所述转换后输入窗口数据与卷积 核数据进行矩阵点乘操作,包括:采用数字信号处理器,对所述转换后输入 窗口数据与卷积核数据进行矩阵点乘操作。
可选地,上述卷积计算处理方法中,所述采用第二常数矩阵对待处理的 输入窗口数据进行转换,包括:根据所述第二常数矩阵,采用逻辑资源对所 述待处理的输入窗口数据进行位运算操作;和/或
所述采用第三常数矩阵对所述点乘后矩阵进行转换,包括:根据所述第 三常数矩阵,采用逻辑资源对所述点乘后矩阵进行位运算操作;和/或
所述采用第一常数矩阵对卷积核进行转换,包括:根据所述第一常数矩 阵,采用逻辑资源对所述卷积核进行位运算操作。
可选地,上述卷积计算处理方法中,还包括:
分别从常数矩阵表中,查询与所述卷积核数据对应的卷积核的尺寸r×r 和输入窗口数据对应的输入窗口的尺寸n×n对应的第一常数矩阵、第二常数 矩阵和第三常数矩阵;
其中,n和r的取值分别为大于0的整数;所述常数矩阵表中预先设置有 分别与各卷积核的尺寸和输入窗口的尺寸对应的第一常数矩阵、第二常数矩 阵和第三常数矩阵。
根据本发明实施例的又一个方面,提供的一种卷积加速器,包括:
数据读取模块,用于通过FIFO端口依次从加速器的片外存储器读取待 处理任务中预设大小的待处理数据,并存储在第一缓存区的各输入缓存区;
第一缓存区,包括至少一个输入缓存区,用于缓存所述待处理数据;
第二缓存区,用于缓存至少一组卷积核数据;
计算模块,用于在有输入缓存区中存入待处理数据时,依次从各输入缓 存区读取待处理的输入窗口数据,并通过所述卷积核数据对所述待处理的输 入窗口数据进行卷积计算,获得输出窗口数据并存储在第三缓存区中;
第三缓存区,包括至少一个输出缓存区,用于缓存输出窗口数据;
数据输出模块,用于通过FIFO端口,依次将第三缓存区中的输出窗口 数据存储至所述片外存储器中。
可选地,上述加速器中,所述待处理任务包括:至少一个输入通道的输 入图像、或者至少一个输入通道的输入特征图;
每组卷积核数据分别对应于一个输出通道,每组卷积核数据包括至少一 个卷积核数据,每个卷积核数据分别对应于一个输入通道;所述卷积核数据 包括卷积核或转换后的卷积核,所述转换后的卷积核由对应的第一常数矩阵 对卷积核进行转换获得。
可选地,上述加速器中,所述第三缓存区包括至少一个输出缓存区;
所述数据输出模块具体用于:响应于首个输出缓存区存入输出窗口数 据,依次读取各输出缓存区中的输出窗口数据,并通过FIFO端口将读取的 输出窗口数据存储至所述片外存储器中。
可选地,上述加速器中,所述第三缓存区包括两个输出缓存区;
在所述待处理任务的处理过程中,所述两个输出缓存区的其中一个输出 缓存区被轮流存入输出窗口数据、读取输出窗口数据,所述两个输出缓存区 中的另一个输出缓存区被轮流读取输出窗口数据、存入输出窗口数据。
可选地,上述加速器中,所述第一缓存区具体包括两个输入缓存区;
在所述待处理任务的处理过程中,所述两个输入缓存区的其中一个输入 缓存区被轮流存入待处理数据、读取输入窗口数据,所述两个输入缓存区中 的另一个输入缓存区被轮流读取待处理的输入窗口数据、存入待处理数据。
可选地,上述加速器中,所述卷积核数据对应的卷积核的尺寸为r×r,所 述输入窗口数据对应的输入窗口的尺寸为n×n,所述输入窗口数据对应的输 入窗口的滑动步长为m;其中,m、n、r的取值分别为大于0的整数,且满 足n=m+r-1;
所述输入缓存区具体为行缓存区;所述第一缓存区具体为:由n+m个行 缓存区形成的循环缓冲区,每个行缓存区用于顺序存储所述待处理任务所有 通道中的同一行数据;
所述数据读取模块具体用于:
首次从片外存储器读取所述待处理任务所有通道的前n行数据,并将所 述前n行数据中的各行数据分别对应存储在第一缓存区中、基于预定循环方 向确定的前n个行缓存区中;
之后每次从片外存储器读取所述待处理任务所有通道的相邻后续m行数 据,并将本次读取的m行数据中的各行数据分别对应存储在第一缓存区中、 基于所述预定循环方向确定的相邻后续m个行缓存区中。
可选地,上述加速器中,所述卷积核数据对应的卷积核的尺寸为r×r,所 述输入窗口数据对应的输入窗口的尺寸为n×n,所述输入窗口数据对应的输 入窗口的滑动步长和输出窗口的尺寸为m;其中,m、n、r的取值分别为大 于0的整数,且满足n=m+r-1;
所述输入缓存区具体为行缓存区;所述第一缓存区具体为:由n+m个行 缓存区形成的循环缓冲区,每个行缓存区用于顺序存储所述待处理任务所有 通道中的同一行数据;
所述数据读取模块具体用于:
每次从片外存储器读取所述待处理任务所有通道的n行数据;
对于首次从所述待处理任务中读取的前n行数据,将所述前n行数据中 的各行数据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个 行缓存区中;对于非首次读取的n行数据,基于所述预定循环方向,将第一 缓存区中存储上一次读取的n行数据的前n个行缓冲区滑动m行后对应的n 个行缓冲区作为本次读取的n行数据的目标行缓存区,并将本次读取的n行 数据对应存入所述目标行缓存区中的各行缓冲区中。
可选地,上述加速器中,所述计算模块依次从各输入缓存区读取待处理 的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行 卷积计算时,具体用于:
针对所述待处理任务,首次读取待处理的输入窗口数据时,选取所述前 n个行缓存区作为当前计算缓存区,按照滑动步长m,依次顺序从当前计算 缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处 理的输入窗口数据进行卷积计算,直至当前计算缓存区中的待处理数据均被 读取;
之后每次基于所述预定循环方向,按照滑动步长m从上一计算缓存区开 始滑动,选取n个行缓存区作为新的计算缓存区,按照滑动步长m,依次顺 序从新的计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数 据对所述待处理的输入窗口数据进行卷积计算,直至所述新的计算缓存区中 的待处理数据均被读取。
可选地,上述加速器中,所述输出缓存区包括m个行缓存区;
所述计算模块获得输出窗口数据并依次存储在各输出缓存区中时,具体 用于:
选取其中一个输出缓存区作为当前输出缓存区,依次将对每个输入窗口 数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个行 缓存区中;响应于一个计算缓存区中的所有输入窗口数据进行卷积计算获得 的输出窗口数据被存储完毕,选取另一个输出缓存区作为当前输出缓存区, 执行所述依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序 存储在当前输出缓冲区的m个行缓存区中的操作;
所述数据输出模块,具体用于:
响应于当前计算缓存区中的所有输入窗口数据进行卷积计算获得的输出 窗口数据被存储完毕,通过FIFO端口,将所述当前输出缓存区中的输出窗 口数据存储至所述片外存储器中。
可选地,上述加速器中,所述卷积核数据对应的卷积核的尺寸为r×r,所 述输入窗口数据对应的输入窗口的尺寸为n×n,所述输入窗口数据对应的输 入窗口的滑动步长为m;其中,m、n、r的取值分别为大于0的整数,且满 足n=m+r-1;
所述输入缓存区具体为列缓存区;所述第一缓存区具体为:由n+m个列 缓存区形成的循环缓冲区,每个列缓存区用于顺序存储所述待处理任务所有 通道中的同一列数据;
所述数据读取模块,具体用于:
首次从片外存储器读取所述待处理任务所有通道的前n列数据,并将所 述前n列数据中的各列数据分别对应存储在第一缓存区中、基于预定循环方 向确定的前n个列缓存区中;
之后每次从片外存储器读取所述待处理任务所有通道的相邻后续m列数 据,并将本次读取的m列数据中的各行数据分别对应存储在第一缓存区中、 基于所述预定循环方向确定的相邻后续m个列缓存区中。
可选地,上述加速器中,所述卷积核数据对应的卷积核的尺寸为r×r,所 述输入窗口数据对应的输入窗口的尺寸为n×n,所述输入窗口数据对应的输 入窗口的滑动步长和输出窗口的尺寸为m;其中,m、n、r的取值分别为大 于0的整数,且满足n=m+r-1;
所述输入缓存区具体为列缓存区;所述第一缓存区具体为:由n+m个列 缓存区形成的循环缓冲区,每个列缓存区用于顺序存储所述待处理任务所有 通道中的同一列数据;
所述数据读取模块,具体用于:
每次从片外存储器读取所述待处理任务所有通道的n列数据;
对于首次从所述待处理任务中读取的前n列数据,将所述前n列数据中 的各列数据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个 列缓存区中;对于非首次读取的n列数据,基于所述预定循环方向,将第一 缓存区中存储上一次读取的n列数据的前n个列缓冲区滑动m列后对应的n 个列缓冲区作为本次读取的n列数据的目标列缓存区,并将本次读取的n列 数据对应存入所述目标列缓存区中的各列缓冲区中。
可选地,上述加速器中,所述计算模块依次从各输入缓存区读取待处理 的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行 卷积计算时,包括:
针对所述待处理任务,首次读取待处理的输入窗口数据时,选取所述前 n个列缓存区作为当前计算列缓存区,按照滑动步长m,依次顺序从当前列 计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述 待处理的输入窗口数据进行卷积计算,直至当前列计算缓存区中的待处理数 据均被读取;
之后每次基于所述预定循环方向,按照滑动步长m从上一列计算缓存区 开始滑动,选取n个列缓存区作为新的计算缓存区,按照滑动步长m,依次 顺序从新的计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核 数据对所述待处理的输入窗口数据进行卷积计算,直至所述新的计算缓存区 中的待处理数据均被读取。
可选地,上述加速器中,所述输出缓存区包括m个列缓存区;
所述计算模块获得输出窗口数据并依次存储在各输出缓存区中时,具体 用于:
选取其中一个输出缓存区作为当前输出缓存区,依次将对每个输入窗口 数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个列 缓存区中;响应于一个计算列缓存区中的所有输入窗口数据进行卷积计算获 得的输出窗口数据被存储完毕,选取另一个输出缓存区作为当前输出缓存 区,执行所述依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据 顺序存储在当前输出缓冲区的m个列缓存区中的操作;
所述数据输出模块,具体用于:
响应于当前计算列缓存区中的所有输入窗口数据进行卷积计算获得的输 出窗口数据被存储完毕,通过FIFO端口,将所述当前输出缓存区中的输出 窗口数据存储至所述片外存储器中。
可选地,上述加速器中,所述卷积核数据具体为转换后的卷积核;
所述计算模块包括:
处理单元,用于分别针对任一输入通道执行计算处理操作:采用对应的 第二常数矩阵对待处理的输入窗口数据进行转换,获得转换后输入窗口数 据;对所述任一输入通道的转换后输入窗口数据与转换后的卷积核进行矩阵 点乘操作,获得点乘后矩阵;采用对应的第三常数矩阵对所述点乘后矩阵进 行转换,获得卷积结果;
累加单元,用于在获得一个输出通道对应的所有输入通道的卷积结果 后,对所有输入通道的所述卷积结果中的对应点进行累加,获得所述一个输 出通道的输出窗口数据。
可选地,上述加速器中,所述卷积核数据具体为卷积核;
所述计算模块包括:
处理单元,用于分别针对任一输入通道执行如下计算处理操作:采用对 应的第一常数矩阵,分别对对应于所述至少一个输出通道的卷积核进行转 换,获得所述至少一组转换后的卷积核,以及采用对应的第二常数矩阵对待 处理的输入窗口数据进行转换,获得转换后输入窗口数据;对所述任一输入 通道的转换后输入窗口数据与转换后的卷积核进行矩阵点乘操作,获得点乘 后矩阵;采用对应的第三常数矩阵对所述点乘后矩阵进行转换,获得卷积结 果;
累加单元,用于在获得一个输出通道对应的所有输入通道的卷积结果 后,对所有输入通道的所述卷积结果中的对应点进行累加,获得所述一个输 出通道的输出窗口数据。
可选地,上述加速器中,所述采用对应的第二常数矩阵对待处理的输入 窗口数据进行转换,包括:根据所述对应的第二常数矩阵,分别对所述任一 输入通道待处理的输入窗口数据进行位运算操作;和/或
所述采用对应的第三常数矩阵对所述点乘后矩阵进行转换,包括:根据 所述第三常数矩阵,分别对所述任一输入通道的所述点乘后矩阵进行位运算 操作;和/或
所述采用对应的第一常数矩阵,分别对对应于所述至少一个输出通道的 卷积核进行转换,包括:根据所述第一常数矩阵,分别对对应于所述至少一 个输出通道的卷积核进行位运算操作。
可选地,上述加速器中,所述计算模块包括Pm×Pn个处理单元,用于同 时针对Pm个输出通道和Pn个输入通道执行所述计算处理操作,其中,Pm 和Pn分别为大于0的整数;
所述累加单元,具体用于:针对所述Pm个输出通道,响应于获得所有 输入通道的卷积结果,分别针对同一个输出通道,将所述所有输入通道的所 述卷积结果中的对应点进行累加,获得所述Pm个输出通道的输出窗口数 据。
可选地,上述加速器中,Pm的取值为1,Pn的取值为大于1的整数; 或者,Pm的取值为全部输出通道数,Pn的取值为1;或者,Pm的取值大于 1且小于全部输出通道数,Pn的取值为1。
可选地,上述加速器中,所述加速器包括:FPGA或者ASIC。
可选地,上述加速器中,所述数据读取模块,还用于:通过FIFO端口 接收处理器发送的加速指令,所述加速指令中包括卷积计算中参数的最优取 值;以及根据所述卷积计算中参数的最优取值,开始执行所述通过FIFO端 口依次从加速器的片外存储器读取待处理任务中预设大小的待处理数据的操 作;
所述数据输出模块,还用于在对所述待处理任务的卷积加速完成后,通 过FIFO端口向所述处理器反馈任务完成的响应消息。
根据本发明实施例的又一个方面,提供的一种卷积计算处理装置,包 括:
第一转换模块,用于采用第二常数矩阵对待处理的输入窗口数据进行转 换,获得转换后输入窗口数据;
点乘模块,用于对所述转换后输入窗口数据与卷积核数据进行矩阵点乘 操作,获得点乘后矩阵;所述卷积核数据由第一常数矩阵对卷积核进行转换 获得;
第二转换模块,用于采用第三常数矩阵对所述点乘后矩阵进行转换,获 得所述卷积结果。
可选地,上述装置,还包括:
第三转换模块,用于获取预先存储的所述卷积核数据;或者,采用对应 的第一常数矩阵,分别对所述任一输入通道和任一输出通道对应的卷积核进 行转换,获得所述任一输入通道和任一输出通道对应的卷积核数据。
可选地,上述装置中,所述第一转换模块,具体用于:根据所述对应的 第二常数矩阵,分别对所述待处理的输入窗口数据进行位运算操作;和/或
所述第二转换模块,具体用于:根据所述第三常数矩阵,分别对所述点 乘后矩阵进行位运算操作;和/或
所述第三转换模块,具体用于:根据所述第一常数矩阵,对所述卷积核 进行位运算操作。
可选地,上述装置还包括:
查询模块,分别从常数矩阵表中,查询与所述卷积核数据对应的卷积核 的尺寸r×r和输入窗口数据对应的输入窗口的尺寸n×n对应的第一常数矩 阵、第二常数矩阵和第三常数矩阵;
其中,所述常数矩阵表中预先设置有分别与各卷积核的尺寸和输入窗口 的尺寸对应的第一常数矩阵、第二常数矩阵和第三常数矩阵。
根据本发明实施例的又一个方面,提供的一种电子设备,包括本发明任 一实施例所述的卷积加速器。
根据本发明实施例的又一个方面,提供的另一种电子设备,包括:
存储器,用于存储可执行指令;以及
处理器,用于与所述存储器通信以执行所述可执行指令从而完成本发明 任一实施例所述的卷积加速方法的操作。
根据本发明实施例的又一个方面,提供的计算机存储介质,用于存储计 算机可读取的指令,所述指令被执行时执行本发明任一实施例所述的卷积加 速方法的操作。
根据本发明实施例的又一个方面,提供的又一种电子设备,包括本发明 任一实施例所述的卷积计算处理装置。
根据本发明实施例的又一个方面,提供的另一种电子设备,包括:
存储器,用于存储可执行指令;以及
处理器,用于与所述存储器通信以执行所述可执行指令从而完成本发明 任一实施例所述的卷积计算处理方法的操作。
根据本发明实施例的又一个方面,提供的计算机存储介质,用于存储计 算机可读取的指令,所述指令被执行时执行本发明任一实施例所述的卷积计 算处理方法的操作。
基于本发明上述实施例提供的卷积加速方法和加速器、及其相应的电子 设备和计算机存储介质,加速器的片上内存包括第一缓存区、第二缓存区和 第三缓存区,第一缓存区包括至少一个输入缓存区,第二缓存区中缓存有至 少一组卷积核数据。通过FIFO端口依次从加速器的片外存储器读取待处理 任务中预设大小的待处理数据,并存储在加速器的片上内存中第一缓存区的 各输入缓存区;响应于有输入缓存区中存入待处理数据,依次从各输入缓存 区读取待处理的输入窗口数据,并通过所述卷积核数据对所述待处理的输入 窗口数据进行卷积计算,获得输出窗口数据并存储在第三缓存区中;然后通 过FIFO端口依次将第三缓存区中的输出窗口数据存储至所述片外存储器 中。本发明实施例每次从加速器的片外存储器读取待处理任务中预设大小的 待处理数据存入片上内存进行处理,并实现了从片外存储器读取待处理数据 存入片上内存、和对待处理数据进行卷积计算处理等过程的流水线处理,可 以充分利用加速器较为有限的片上内存、带宽、DSP等资源,显著提高了卷 积计算处理的效率,可以适用于FPGA、ASIC等硬件平台,从而在FPGA、 ASIC等硬件平台上实现卷积加速处理,本发明实施例应用于FPGA平台时, 可以充分发挥FPGA平台可重构、并行计算性、开发周期短、低功耗、灵活 性高等优点。
基于本发明上述实施例提供的卷积计算处理方法和装置、及其相应的电 子设备和计算机存储介质,可以针对任一输入通道和任一输出通道,采用第 二常数矩阵对待处理的输入窗口数据进行转换,获得转换后输入窗口数据; 对转换后输入窗口数据与卷积核数据进行矩阵点乘操作,获得点乘后矩阵; 采用第三常数矩阵对点乘后矩阵进行转换,获得卷积结果。本发明实施例提 供了一种基于Winograd算法对输入窗口数据进行面对面的卷积计算的方法, 相对于传统的点对点的卷积算法,减少了乘法次数,从而减少了对处理器资 源的占用,并提升了计算效率。本发明实施例可以应用于FPGA、ASIC等硬 件平台,从而在FPGA、ASIC等硬件平台上实现卷积加速处理,本发明实施 例应用于FPGA平台时,可以充分发挥FPGA平台可重构、并行计算性、开 发周期短、低功耗、灵活性高等优点。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
构成说明书的一部分的附图描述了本发明的实施例,并且连同描述一起 用于解释本发明的原理。
参照附图,根据下面的详细描述,可以更加清楚地理解本发明,其中:
图1为本发明卷积加速方法一个实施例的流程图。
图2为本发明实施例中片上内存的一个具体示例图。
图3为本发明实施例中对待处理的输入窗口数据进行卷积计算一个实施 例的流程图。
图4为本发明实施例中对Pn个输入通道并行执行计算处理操作的示意 图。
图5为本发明实施例中对Pm个输出通道并行执行计算处理操作的示意 图。
图6为本发明卷积计算处理方法一个实施例的流程图。
图7为本发明卷积计算处理方法另一个实施例的流程图。
图8为图3、图6、图7所示实施例的一个计算过程示意。
图9为本发明卷积加速器一个实施例的结构示意图。
图10为本发明实施例中计算模块一个实施例的结构示意图。
图11为本发明卷积计算处理装置一个实施例的结构示意图。
图12为本发明卷积计算处理装置另一个实施例的结构示意图。
图13为本发明电子设备一个具体应用实施例的结构示意图。
具体实施方式
现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除 非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字 表达式和数值不限制本发明的范围。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不 是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为 对本发明及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨 论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦 某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨 论。
图1为本发明卷积加速方法一个实施例的流程图。如图1所示,本发明 实施例卷积加速方法包括:
102,通过先进先出(FIFO)端口依次从加速器的片外存储器读取待处 理任务中预设大小的待处理数据,并存储在加速器的片上内存中第一缓存区 的各输入缓存区;以及响应于有输入缓存区中存入待处理数据,依次从各输 入缓存区读取待处理的输入窗口数据,并通过卷积核数据对待处理的输入窗 口数据进行卷积计算,获得输出窗口数据并存储在第三缓存区中。
其中,片上内存包括第一缓存区、第二缓存区和第三缓存区,第一缓存 区包括至少一个输入缓存区,第二缓存区中缓存有至少一组卷积核数据。
在实现本发明的过程中,发明人通过研究发现,在GPU平台中,作为 CNN中常用的卷积操作被展开为矩阵乘法,在展开的矩阵中输入图像的各个 点被复制多次。但是,由于FPGA的片上内存和带宽均小于GPU多倍,受限 于FPGA上数字信号处理器(Digital SignalProcessor,DSP)的资源,无法 将卷积操作转换为矩阵乘法在FPGA上实现,从而限制了FPGA加速CNN 的应用。
本发明各实施例的卷积加速方法可应用于任何加速器,特别是在片上内 存和带宽资源相对较小的FPGA、ASIC等嵌入式平台。
本发明各实施例中,待处理任务例如可以包括:至少一个通道的输入图 像、或者至少一个通道的输入特征图,待处理任务处理完成后,可以得到至 少一个通道的输出特征图。为了便于对输入图像、输入特征图和输出特征图 的通道进行区分,本发明各实施例中,将输入图像、输入特征图的通道称为 输入通道,将输出特征图的通道称为输出通道。输入图像、输入特征图的每 个灰度对应一个通道,例如,红绿蓝(RGB)三种色彩的输入图像、输入特 征图分别对应一个通道,同时包含红绿蓝三种色彩的输入图像、输入特征图 具有三个输入通道。另外,每组卷积核数据分别对应于一个输出通道,每组 卷积核数据包括至少一个卷积核数据,每个卷积核数据分别对应于一个输入 通道。
104,通过FIFO端口依次将第三缓存区中的输出窗口数据存储至片外存 储器中。
基于本发明上述实施例提供的卷积加速方法,加速器的片上内存包括第 一缓存区、第二缓存区和第三缓存区,第一缓存区包括至少一个输入缓存 区,第二缓存区中缓存有至少一组卷积核数据。通过FIFO端口依次从加速 器的片外存储器读取待处理任务中预设大小的待处理数据,并存储在加速器 的片上内存中第一缓存区的各输入缓存区;响应于有输入缓存区中存入待处 理数据,依次从各输入缓存区读取待处理的输入窗口数据,并通过所述卷积 核数据对所述待处理的输入窗口数据进行卷积计算,获得输出窗口数据并存储在第三缓存区中;然后通过FIFO端口依次将第三缓存区中的输出窗口数 据存储至所述片外存储器中。本发明实施例每次从加速器的片外存储器读取 待处理任务中预设大小的待处理数据存入片上内存进行处理,并实现了从片 外存储器读取待处理数据存入片上内存、和对待处理数据进行卷积计算处理 等过程的流水线处理,可以充分利用加速器较为有限的片上内存、带宽、 DSP等资源,显著提高了卷积计算处理的效率,可以适用于FPGA、ASIC等 硬件平台,从而在FPGA、ASIC等硬件平台上实现卷积加速处理,本发明实 施例应用于FPGA平台时,可以充分发挥FPGA平台可重构、并行计算性、 开发周期短、低功耗、灵活性高等优点。
在图1所示实施例的一个具体示例中,第一缓存区具体包括两个输入缓 存区。在待处理任务的处理过程中,这两个输入缓存区的其中一个输入缓存 区被轮流存入待处理数据、读取输入窗口数据,两个输入缓存区中的另一个 输入缓存区被轮流读取待处理的输入窗口数据、存入待处理数据,两个输入 缓存区中一个被存入待处理数据时,另一个被读取输入窗口数据,在前述一 个被读取输入窗口数据时,另一个被存入待处理数据,从而实现存入待处理 数据、读取输入窗口数据的流水线处理,重叠存入待处理数据所需时间和读取输入窗口数据所需时间,减少整个加速过程所需时间,提高了CNN的加 速效率。
本发明实施例中,将卷积核数据对应的卷积核的尺寸表示为r×r,输入窗 口数据对应的输入窗口的尺寸表示为n×n,输入窗口数据对应的输入窗口的 滑动步长表示为m,输入窗口数据对应的输出窗口的尺寸表示为m×m。其 中,r、m、n的取值分别为大于0的整数,且满足n=m+r-1。由此,m的取 值小于或等于n的取值。在r的取值大于1时,m的取值均小于n的取值。 在r的取值为1时,m的取值等于n的取值。
在图1所示实施例的另一个具体示例中,输入缓存区具体为行缓存区, 第一缓存区具体为:由n+m个行缓存区形成的循环缓冲区,每个行缓存区用 于顺序存储待处理任务所有通道中的同一行数据。如图2所示,为本发明实 施例中片上内存的一个具体示例图。其中,M表示输入特征图的通道数, 即:输入通道数,H表示输入特征图的高度,W表示输入特征图的宽度, M×W表示输入特征图的尺寸,计算模块表示用于对第一缓存区中的输入窗 口数据进行卷积计算的单元,C表示输出特征图的通道数,即:输出通道 数,R表示输出特征图的高度,N表示输出特征图的宽度,N×C表示输入特 征图的尺寸。
相应地,在该另一个具体示例中,从加速器的片外存储器读取待处理任 务中预设大小的待处理数据,并依次存储在加速器的片上内存中、第一缓存 区的各输入缓存区,包括:
首次从片外存储器读取待处理任务所有通道的前n行数据,并将前n行 数据中的各行数据分别对应存储在第一缓存区中、基于预定循环方向确定的 前n个行缓存区中;
之后每次从片外存储器读取待处理任务所有通道的相邻后续m行数据, 并将本次读取的m行数据中的各行数据分别对应存储在第一缓存区中、基于 预定循环方向确定的相邻后续m个行缓存区中。
由此,在r的取值为1时,m的取值等于n的取值,此时每次均从片外 存储器读取待处理任务所有通道的m(=n)行数据,与上次读取的数据不重 叠的相邻存入第一缓存区中的m个行缓存区中。
在r的取值大于1时,m的取值均小于n的取值,此时非首次读取从片 外存储器读取待处理任务的数据的行数m小于首次读取的数据的行数n,可 以与上次读取的数据不重叠的相邻存入第一缓存区中的m个行缓存区中;也 可以每次均从片外存储器读取待处理任务所有通道的相邻后续n行数据,并 将存入第一缓存区中、基于预定循环方向确定n个行缓存区中,非首次存入 数据的n个行缓存区包括上次缓存数据的最后(r-1)个行缓存区和相邻后续 m个行缓存区中,此时会发生上述r-1个行缓存区数据的重叠覆盖。相对于 每次从片外存储器读取n行数据存入第一缓存区中而言,非首次每次从片外 存储器读取m行数据存入第一缓存区中的方案,可以减少数据传输量,从而 节约传输带宽,提高数据读取、传输和存入效率。
例如,n=6、m=4、r=3时,可以首次从片外存储器读取待处理任务所有 通道的前6行数据存入第一缓存区中、基于预定循环方向确定的前n个行缓 存区中。后续每次从片外存储器读取待处理任务所有通道的相邻后续4行数 据,并将本次读取的4行数据中的各行数据分别对应存储在第一缓存区中、 基于预定循环方向确定的相邻后续4个行缓存区中;或者,也可以后续每次 从片外存储器读取待处理任务所有通道的相邻后续6行数据,并将本次读取 的6行数据存储在第一缓存区中、基于预定循环方向确定的,由相邻后续4 个行缓存区与上次存入数据的最后2个行缓存区中。
或者,在又一个具体示例中,从加速器的片外存储器读取待处理任务中 预设大小的待处理数据,并依次存储在加速器的片上内存中、第一缓存区的 各输入缓存区,包括:
每次从片外存储器读取待处理任务所有通道的n行数据;
对于首次从待处理任务中读取的前n行数据,将前n行数据中的各行数 据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个行缓存区 中;对于非首次读取的n行数据,基于预定循环方向,将第一缓存区中存储 上一次读取的n行数据的前n个行缓冲区滑动m行后对应的n个行缓冲区作 为本次读取的n行数据的目标行缓存区,并将本次读取的n行数据对应存入 目标行缓存区中的各行缓冲区中。
在该又一个具体示例中,将非首次读取的n行数据存入第一缓存区中 时,会覆盖掉上一次存入第一缓存区中的n个行缓存区中的最后n-m个行缓 存区中的数据。与上述另一个具体示例和又一个具体示例相应地,依次从各 输入缓存区读取待处理的输入窗口数据,并通过卷积核数据对待处理的输入 窗口数据进行卷积计算,包括:
针对待处理任务,首次读取待处理的输入窗口数据时,选取前n个行缓 存区作为当前计算缓存区,按照滑动步长m,依次顺序从当前计算缓存区读 取大小为n×n的输入窗口数据,并通过卷积核数据对待处理的输入窗口数据 进行卷积计算,直至当前计算缓存区中的待处理数据均被读取;
之后每次基于预定循环方向,按照滑动步长m从上一计算缓存区开始滑 动,选取n个行缓存区作为新的计算缓存区,按照滑动步长m,依次顺序从 新的计算缓存区读取大小为n×n的输入窗口数据,并通过卷积核数据对待处 理的输入窗口数据进行卷积计算,直至新的计算缓存区中的待处理数据均被 读取。
另外,在本发明上述各卷积加速方法实施例中,第三缓存区包括至少一 个输出缓存区,则获得输出窗口数据并存储在第三缓存区中时,具体是获得 输出窗口数据并依次存储在各输出缓存区中;相应地,操作104具体包括: 响应于首个输出缓存区存入输出窗口数据,依次读取各输出缓存区中的输出 窗口数据,并通过FIFO端口将读取的输出窗口数据存储至片外存储器中。
示例性地,第三缓存区包括两个输出缓存区。在待处理任务的处理过程 中,两个输出缓存区的其中一个输出缓存区被轮流存入输出窗口数据、读取 输出窗口数据,两个输出缓存区中的另一个输出缓存区被轮流读取输出窗口 数据、存入输出窗口数据。两个输出缓存区中一个被存入输出窗口数据时, 另一个被读取输入窗口数据,在前述一个被存入输出窗口数据时,另一个被 存入待处理数据,从而实现存入输出窗口数据、输出输入窗口数据的流水线 处理,重叠存入输出窗口数据所需时间和输出输入窗口数据所需时间,进一步减少了整个加速过程所需时间,提升了加速器的工作效率。
进一步示例性地,每个输出缓存区包括m个行缓存区。相应地,上述各 实施例中,获得输出窗口数据并依次存储在各输出缓存区中,包括:
选取其中一个输出缓存区作为当前输出缓存区,依次将对每个输入窗口 数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个行 缓存区中;响应于一个计算缓存区中的所有输入窗口数据进行卷积计算获得 的输出窗口数据被存储完毕,选取另一个输出缓存区作为当前输出缓存区, 执行依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序存储 在当前输出缓冲区的m个行缓存区中的操作;
依次将第三缓存区中的输出窗口数据存储至片外存储器中,包括:
响应于当前计算缓存区中的所有输入窗口数据进行卷积计算获得的输出 窗口数据被存储完毕,将当前输出缓存区中的输出窗口数据存储至片外存储 器中。
另外,在图1所示实施例的再一个具体示例中,输入缓存区具体为列缓 存区;第一缓存区具体为:由n+m个列缓存区形成的循环缓冲区,每个列缓 存区用于顺序存储待处理任务所有通道中的同一列数据;
相应地,在该再一个具体示例中,从加速器的片外存储器读取待处理任 务中预设大小的待处理数据,并依次存储在加速器的片上内存中、第一缓存 区的各输入缓存区,包括:
首次从片外存储器读取待处理任务所有通道的前n列数据,并将前n列 数据中的各列数据分别对应存储在第一缓存区中、基于预定循环方向确定的 前n个列缓存区中;
之后每次从片外存储器读取待处理任务所有通道的相邻后续m列数据, 并将本次读取的m列数据中的各行数据分别对应存储在第一缓存区中、基于 预定循环方向确定的相邻后续m个列缓存区中。
或者,在下一个具体示例中,从加速器的片外存储器读取待处理任务中 预设大小的待处理数据,并依次存储在加速器的片上内存中、第一缓存区的 各输入缓存区,包括:
每次从片外存储器读取待处理任务所有通道的n列数据;
对于首次从待处理任务中读取的前n列数据,将前n列数据中的各列数 据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个列缓存区 中;对于非首次读取的n列数据,基于预定循环方向,将第一缓存区中存储 上一次读取的n列数据的前n个列缓冲区滑动m列后对应的n个列缓冲区作 为本次读取的n列数据的目标列缓存区,并将本次读取的n列数据对应存入 目标列缓存区中的各列缓冲区中。
在该下一个具体示例中,将非首次读取的n列数据存入第一缓存区中 时,会覆盖掉上一次存入第一缓存区中的n个列缓存区中的最后n-m个列缓 存区中的数据。
与上述再一个具体示例相应地,依次从各输入缓存区读取待处理的输入 窗口数据,并通过卷积核数据对待处理的输入窗口数据进行卷积计算,包 括:
针对待处理任务,首次读取待处理的输入窗口数据时,选取前n个列缓 存区作为当前计算列缓存区,按照滑动步长m,依次顺序从当前列计算缓存 区读取大小为n×n的输入窗口数据,并通过卷积核数据对待处理的输入窗口 数据进行卷积计算,直至当前列计算缓存区中的待处理数据均被读取;
之后每次基于预定循环方向,按照滑动步长m从上一列计算缓存区开始 滑动,选取n个列缓存区作为新的计算缓存区,按照滑动步长m,依次顺序 从新的计算缓存区读取大小为n×n的输入窗口数据,并通过卷积核数据对待 处理的输入窗口数据进行卷积计算,直至新的计算缓存区中的待处理数据均 被读取。
与上述又一个具体示例相应地,输出缓存区也可以包括m个列缓存区。 相应地,获得输出窗口数据并依次存储在各输出缓存区中,包括:
选取其中一个输出缓存区作为当前输出缓存区,依次将对每个输入窗口 数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个列 缓存区中;响应于一个计算列缓存区中的所有输入窗口数据进行卷积计算获 得的输出窗口数据被存储完毕,选取另一个输出缓存区作为当前输出缓存 区,执行依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序 存储在当前输出缓冲区的m个列缓存区中的操作;
依次将第三缓存区中的输出窗口数据存储至片外存储器中,包括:
响应于当前计算列缓存区中的所有输入窗口数据进行卷积计算获得的输 出窗口数据被存储完毕,将当前输出缓存区中的输出窗口数据存储至片外存 储器中。
具体地,输入缓存区具体为列缓存区与输入缓存区具体为行缓存区的技 术方案类似,相关之处可相互参考。
图3为本发明实施例中对待处理的输入窗口数据进行卷积计算一个实施 例的流程图。如图3所示,通过卷积核数据对待处理的输入窗口数据进行卷 积计算,获得输出窗口数据,包括:
302,分别针对任一输入通道执行如下计算处理操作:采用对应的第二常 数矩阵对待处理的输入窗口数据进行转换,获得转换后输入窗口数据;对任 一输入通道的转换后输入窗口数据与转换后的卷积核进行矩阵点乘操作,获 得点乘后矩阵;采用对应的第三常数矩阵对点乘后矩阵进行转换,获得卷积 结果。
其中,上述实施例中的至少一组卷积核数据包括至少一组转换后的卷积 核,其中,任一组转换后的卷积核由对应的第一常数矩阵对对应于一个输出 通道的卷积核进行转换获得。
304,响应于获得所有输入通道的卷积结果,对一个输出通道对应的所有 输入通道的卷积结果中的对应点进行累加,获得该一个输出通道的输出窗口 数据。
进一步地,在另一个实施例中,采用对应的第二常数矩阵对待处理的输 入窗口数据进行转换时,还可以执行如下操作:采用对应的第一常数矩阵, 分别对对应于至少一个输出通道的卷积核进行转换,获得至少一组转换后的 卷积核。
或者,可选地,也可以预先采用对应的第一常数矩阵,分别对对应于至 少一个输出通道的卷积核进行转换,获得至少一组转换后的卷积核,并存储 在第二缓冲区中,这样就避免了临时执行该操作消耗计算资源,进一步提升 了计算效率。
示例性地,在图3所示各实施例中,采用对应的第二常数矩阵对待处理 的输入窗口数据进行转换,具体可以通过如下方式实现:根据对应的第二常 数矩阵,通过加速器中的逻辑资源分别对任一输入通道待处理的输入窗口数 据进行位运算操作。
类似地,采用对应的第三常数矩阵对点乘后矩阵进行转换,具体可以通 过如下方式实现:根据第三常数矩阵,通过加速器中的逻辑资源分别对任一 输入通道的点乘后矩阵进行位运算操作。
类似地,采用对应的第一常数矩阵,分别对对应于至少一个输出通道的 卷积核进行转换,具体可以通过如下方式实现:根据第一常数矩阵,通过加 速器中的逻辑资源分别对对应于至少一个输出通道的卷积核进行位运算操 作。采用加速器中的逻辑资源,通过二进制的位运算操作来实现对输入窗口 数据、卷积核数据、点乘后矩阵的转换操作,便无需在加速器中设置乘法器 来实现相应的转换操作,减少了卷积计算中的乘法次数,从而节省了加速器 中的数字信号处理器(Digital Signal Processor,DSP)资源,从而提高了加速器的计算效率,提高了加速器中DSP资源的利用率。
进一步地,在图3所示实施例的流程之前,还可以包括:
分别从常数矩阵表中,查询与卷积核的尺寸r×r和输入窗口的尺寸n×n 对应的第一常数矩阵(本发明实施例中表示为:G)、第二常数矩阵(本发明 实施例中表示为:B)和第三常数矩阵(本发明实施例中表示为:A)。
其中,常数矩阵表中预先设置有分别与各卷积核的尺寸和输入窗口的尺 寸对应的第一常数矩阵、第二常数矩阵和第三常数矩阵,即:卷积核的尺寸 和输入窗口的尺寸确定后,便可以确定第一常数矩阵、第二常数矩阵和第三 常数矩阵。
另外,在上述图3所示的各实施例中,分别针对任一输入通道执行如下 计算操作,包括:同时针对Pm个输出通道和Pn个输入通道执行计算处理操 作,其中,Pm和Pn分别为大于0的整数。相应地,操作304具体为:针对 Pm个输出通道,响应于获得所有输入通道的卷积结果,分别针对同一个输出 通道,将所有输入通道的卷积结果中的对应点进行累加,获得Pm个输出通 道的输出窗口数据。通过该实施例,实现了对Pm个输出通道和Pn个输入通 道的并行处理,提升了计算处理效率。
在其中一个具体示例中,Pm的取值为1,Pn的取值为大于1的整数; 则同时针对Pm个输出通道和Pn个输入通道执行计算处理操作,具体为:依 次针对一个输出通道、全部输入通道或者全部输入通道中的部分输入通道, 并行执行计算处理操作。通过该实施例,实现了每次针对一个输出通道、Pn 个输入通道的并行处理。
在另一个具体示例中,Pm的取值为全部输出通道数,Pn的取值为1; 则同时针对Pm个输出通道和Pn个输入通道执行计算处理操作,具体为:同 时针对全部输出通道,依次针对一个输入通道执行计算处理操作;
操作304具体包括:针对全部输出通道,响应于获得所有输入通道的卷 积结果,分别针对同一个输出通道,对所有输入通道的卷积结果中的对应点 进行累加,获得全部输出通道的输出窗口数据。
通过该实施例,实现了每次针对一个输入通道、全部输出通道的并行处 理。
在又一个具体示例中,Pm的取值大于1且小于全部输出通道数,Pn的 取值为1;则同时针对Pm个输出通道和Pn个输入通道执行计算处理操作, 包括:同时针对全部输出通道中的部分输出通道,依次针对一个输入通道执 行计算处理操作。
通过该实施例,实现了每次针对一个输入通道、Pm个部分输出通道的并 行处理。
如图4所示,为本发明实施例中对Pn个输入通道并行执行计算处理操作 的示意图,图4中,Pn个输入通道只是所有输入通道的一部分,其对应的卷 积结果累加可以形成对应于该Pn个输入通道的一组累加结果,所有输入通道 对应的所有组的累加结果相加,得到一个输出通道的输出窗口数据。如图5 所示,为本发明实施例中对Pm个输出通道并行执行计算处理操作的示意 图,由于对每个输入通道的输入窗口数据的操作只能获得一部分输出窗口数 据,针对同一输出通道,将所有输入通道的输入窗口数据对应的卷积结果累 加,得到一个输出通道的输出窗口数据。
另外,在本发明上述各卷积加速方法实施例之前,还可以包括:
根据参数优化模型,由FIFO端口的传输带宽、加速器的资源条件获取 卷积计算中参数的最优取值,其中,卷积计算中参数包括:输入窗口的尺 寸、输出通道的并行度和输入通道的并行度,上述参数的最优取值包括:输 入窗口的尺寸的最优取值n、输出通道的并行度的最优取值Pm和输入通道的 并行度的最优取值Pn。
在本发明卷积加速方法的进一步实施例中,通过FIFO端口依次从加速 器的片外存储器读取待处理任务中预设大小的待处理数据包括:
加速器通过FIFO端口接收处理器发送的任务处理指令,并通过FIFO端 口依次从加速器的片外存储器读取待处理任务中预设大小的待处理数据的操 作。
另外,本发明实施例的卷积加速方法还可以包括:
响应于对待处理任务的卷积加速完成,加速器通过FIFO端口向处理器 反馈任务完成的响应消息。上述获取卷积计算中参数的最优取值的操作可以 有中央处理器(CPU)、高级RISC处理器(Advanced RISC Machines, ARM)等处理器完成。在需要调度加速器进行加速计算时,CPU、ARM等 处理器获取卷积计算中参数的最优取值,并利用该卷积计算中参数的最优取 值对加速器进行配置,在配置完成后,加速器便可以基于上述参数的最优取值执行相应的加速方法流程,对待处理任务进行处理,从而针对具体加速器 达到最佳资源利用率、实现加速效果的最大化。则同时针对Pm个输出通道 和Pn个输入通道执行计算处理操作时,具体基于参数的最优取值中Pm和 Pn的取值,依次选取Pm个输出通道和Pn个输入通道,同时针对Pm个输出 通道和Pn个输入通道执行计算处理操作。
在本发明的又一个实施例中,在上述各卷积加速方法实施例之前,还可 以包括:
比较当前待处理任务的卷积核尺寸k×k与加速器对应的卷积核的尺寸为 r×r是否一致;
若不一致,对当前待处理任务的卷积核的右方填充a列0、下方分别填 充b行0,使当前待处理任务的卷积核转换成尺寸为tr×tr的新卷积核。
其中,其中,k、t、a、b的取值分别为大于0的整数。
由于不同的卷积核的尺寸和输入窗口的尺寸对应不同的第一常数矩阵、 第二常数矩阵和第三常数矩阵,在本次待处理任务所需卷积核的尺寸与已有 加速器对应的卷积核的尺寸不同时,基于上述实施例,可以将本次待处理任 务所需卷积核的尺寸转换为t2个加速器对应的卷积核,从而实现了对已有加 速器对应的卷积核的复用,避免了重新计算获取第一常数矩阵、第二常数矩 阵和第三常数矩阵,以及重新基于卷积核进行转换的操作,提升了处理效 率。
另外,本发明实施例的加速器可用于CNN中任何网络层的卷积计算的 加速中,例如,可用于CNN中卷积层、全连接(FC)、池化(pooling)、激 活函数ReLU(线性修正单元)、填充(padding)、上采样(upsample)等网 络层的卷积加速操作。另外,除了应用于CNN中的卷积加速,还可应用与 其他任何非CNN的其他卷积操作中,本发明实施例的示例性说明并不会构 成对本发明实施例应用环境的限制。
例如,在本发明进一步实施例中,兼容处理CNN中的全连接操作时, 还包括:
响应于需要对待处理任务进行全连接操作,通过FIFO端口从加速器的 片外存储器读取待处理任务的全部数据,并存储在第一缓存区中;
对全部数据与第二缓存区中存储的转换后的卷积核进行矩阵点乘操作, 获得点乘后矩阵;
采用对应的第三常数矩阵对点乘后矩阵进行转换,获得计算结果数据并 存储在第三缓存区中;
通过FIFO端口依次将第三缓存区中的计算结果数据存储至片外存储器 中。
在本发明进一步实施例中,兼容处理CNN中的池化操作时,还包括:
响应于需要对待处理任务进行池化操作,通过FIFO端口依次从加速器 的片外存储器读取待处理任务中预设大小的数据,并存储在第一缓存区中;
从预设大小的数据中选取一个取值最大的数据作为计算结果数据,并存 储在第三缓存区中;
通过FIFO端口依次将第三缓存区中的计算结果数据存储至片外存储器 中。
在本发明进一步实施例中,兼容处理CNN中的激活函数操作时,还包 括:
响应于需要对待处理任务进行激活函数操作,通过FIFO端口依次从加 速器的片外存储器读取待处理任务中预设大小的待处理数据,并存储在第一 缓存区中;
依次比较待处理数据中任一数据的数值是否小于0;
若任一数据的数值小于0,将以0作为任一数据的计算结果存储在第三 缓存区中;若任一数据的数值不小于0,直接将任一数据的数值作为计算结 果存储在第三缓存区中;
通过FIFO端口依次将第三缓存区中的计算结果存储至片外存储器中。
在本发明进一步实施例中,兼容处理CNN中的上采样操作时,还包 括:
响应于需要对待处理任务进行上采样操作,通过FIFO端口依次从加速 器的片外存储器读取待处理任务中的一个元素数据,将元素数据复制为2s×2s 的元素矩阵,以元素矩阵作为待处理数据,开始执行依次存储在加速器的片 上内存中第一缓存区的各输入缓存区的操作;其中,s的取值为大于0的整 数。
在本发明进一步实施例中,兼容处理CNN中的填充操作时,还包括:
响应于需要对待处理任务进行填充处理,通过FIFO端口从加速器的片 外存储器读取待处理任务的全部数据,并存储在第一缓存区中;;
比较待处理任务的数据大小是否小于预设大小;
若待处理任务的数据大小小于预设大小,按照预设方式对待处理任务进 行边缘数据填充,使得填充后的待处理任务的数据大小等于预设大小,并将 填充后的待处理任务存储在第三缓存区中;若待处理任务的数据大小不小于 预设大小,直接将待处理任务存储在第三缓存区中;
通过FIFO端口依次将第三缓存区中的待处理任务数据存储至片外存储 器中。
图6为本发明卷积计算处理方法一个实施例的流程图。如图6所示,本 发明实施例的卷积计算处理方法包括,分别针对任一输入通道和任一输出通 道:
602,采用第二常数矩阵B对待处理的输入窗口数据Z进行转换,获得 转换后输入窗口数据V。
例如,可以通过公式V=BTZB,采用与输出窗口尺寸和卷积核尺寸对应 的第二常数矩阵B对待处理的输入窗口数据Z进行转换,获得转换后输入窗 口数据V。
604,对转换后输入窗口数据V与卷积核数据U进行矩阵点乘 (EWMM)操作,获得点乘后矩阵U⊙V。
在一个具体示例中,具体可以采用数字信号处理器,对转换后输入窗口 数据与卷积核数据进行矩阵点乘操作,获得点乘后矩阵U⊙V。
例如,可以通过公式U⊙V,对转换后输入窗口数据V与卷积核数据U 进行矩阵点乘操作,获得点乘后矩阵。
其中,卷积核数据U由对应的第一常数矩阵G对预先设置的卷积核(本 发明实施例中表示为:X)进行转换获得。
606,采用第三常数矩阵A对点乘后矩阵U⊙V进行转换,获得卷积结 果Y,可以表示为:Y=AT[U⊙V]A。
其中的第三常数矩阵A为与输出窗口尺寸和卷积核尺寸对应的第三常数 矩阵。
基于本发明上述实施例提供的卷积计算处理方法,可以针对任一输入通 道和任一输出通道,采用第二常数矩阵对待处理的输入窗口数据进行转换, 获得转换后输入窗口数据;对转换后输入窗口数据与卷积核数据进行矩阵点 乘操作,获得点乘后矩阵;采用第三常数矩阵对点乘后矩阵进行转换,获得 卷积结果。本发明实施例提供了一种基于Winograd算法对输入窗口数据进行 面对面的卷积计算的方法,相对于传统的点对点的卷积算法,减少了乘法次 数,从而减少了对处理器资源的占用,并提升了计算效率。本发明实施例可 以应用于FPGA、ASIC等硬件平台,从而在FPGA、ASIC等硬件平台上实 现卷积加速处理,本发明实施例应用于FPGA平台时,可以充分发挥FPGA 平台可重构、并行计算性、开发周期短、低功耗、灵活性高等优点。
进一步地,在本发明卷积计算处理方法的另一个实施例中,还可以包 括:
预先采用与输出窗口尺寸和卷积核尺寸对应的第一常数矩阵G,分别对 任一输出通道的卷积核X进行转换,获得卷积核数据U并存储。例如,可以 通过公式U=GXGT,预先采用对应的第一常数矩阵G,分别对卷积核X进行 转换,获得卷积核数据U。其中,每个卷积核数据分别对应于一个输入通 道。
如图7所示,为本发明卷积计算处理方法另一个实施例的流程图。进一 步地,在本发明卷积计算处理方法的另一个实施例中,在操作604之前,还 可以包括:
600,采用第一常数矩阵G,分别对卷积核进行转换,获得闪送卷积核数 据。
具体地,上述第一常数矩阵G为与输出窗口尺寸和卷积核尺寸对应的第 一常数矩阵。
示例性地,采用第二常数矩阵对待处理的输入窗口数据进行转换,具体 可以是:根据第二常数矩阵,采用加速器中的逻辑资源对待处理的输入窗口 数据进行位运算操作;采用第三常数矩阵对点乘后矩阵进行转换,具体可以 是:根据第三常数矩阵,采用加速器中的逻辑资源对点乘后矩阵进行位运算 操作;采用第一常数矩阵对卷积核进行转换,具体可以是:根据第一常数矩 阵,采用加速器中的逻辑资源对卷积核进行位运算操作。采用加速器中的逻 辑资源进行位运算操作,从而实现对卷积核、输入窗口数据、点乘后矩阵的 转换,而无需借助于DSP资源,减少了乘法次数、节省了DSP资源,从而 提高了加速器的计算效率,并提高了DSP资源的利用率。
基于图7所示实施例的进一步实施例中,还可以包括:
分别从常数矩阵表中,查询与卷积核数据对应的卷积核的尺寸r×r和输 入窗口数据对应的输入窗口的尺寸n×n对应的第一常数矩阵、第二常数矩阵 和第三常数矩阵;
其中,n和r的取值分别为大于0的整数;常数矩阵表中预先设置有分别 与各卷积核的尺寸和输入窗口的尺寸对应的第一常数矩阵、第二常数矩阵和 第三常数矩阵。
进一步地,再参见图7,在本发明卷积计算处理方法的又一个实施例 中,还可以包括:
608,针对任一输出通道,响应于获得所有输入通道的卷积结果,对上述 任一输出通道对应的所有输入通道的卷积结果中的对应点进行累加,获得任 一输出通道的输出窗口数据,即:通过一个输出通道对应的一组卷积核数 据,采用图7所示实施例的流程,对所有输入通道的输入窗口数据进行卷积 计算,获得该输出通道的输出窗口数据。以Out表示一个输出通道的输出窗 口数据,in表示所有输入通道的输入窗口数据,则:图7所示实施例的卷积 计算处理过程可以表示为基于以下公式对所有输入通道的输入窗口数据和卷 积核数据的处理过程:Out=AT[(GXGT)⊙(BTinB)]A。
图8为图3、图6、图7所示实施例的一个计算过程示意。图8所示实施 例的卷积计算处理方法对应于图3所示实施例中302的操作,即:上述各卷 积加速方法实施例中的操作302具体可以通过本发明各卷积计算处理方法实 施例中的相应操作实现。图8所示实施例对应于图6、图7所示各实施例, 本发明实施例中可以相互参考。如图8所示,本发明实施例的卷积计算处理 方法可以分为4个阶段:阶段1(stage1)表示图6~图7中的操作700和702的阶段;阶段2(stage2)表示图6~图7中的操作704的阶段;阶段3 (stage3)表示图6~图7中的操作706的阶段;阶段4(stage4)表示图7中 的操作708的阶段。其中,stage1~stage3也表示图3所示实施例中操作302 的阶段,stage4也表示图3所示实施例中操作304的阶段。
图8中仅示例性地示出三个输入通道的输入窗口数据Z和对应于一个输 出通道的一组卷积核数据,该一组卷积核数据包括分对应上述三个输入通道 的卷积核X。
图9为本发明卷积加速器一个实施例的结构示意图。该实施例的卷积加 速器可作为本发明上述各实施例中的加速器,实现本发明上述各卷积加速方 法实施例中加速器的功能。本发明各实施例中的加速器例如可以是FPGA、 ASIC等嵌入式平台。如图9所示,该实施例的加速器包括:数据读取模块, 第一缓存区,第二缓存区,计算模块,第三缓存区和数据输出模块。其中:
数据读取模块,用于通过FIFO端口依次从加速器的片外存储器读取待 处理任务中预设大小的待处理数据,并存储在第一缓存区的各输入缓存区。
本发明各实施例中,待处理任务例如可以包括:至少一个输入通道的输 入图像、或者至少一个输入通道的输入特征图。另外,每组卷积核数据分别 对应于一个输出通道,每组卷积核数据包括至少一个卷积核数据,每个卷积 核数据分别对应于一个输入通道。
第一缓存区,包括至少一个输入缓存区,用于缓存待处理数据。
第二缓存区,用于缓存至少一组卷积核数据。
计算模块,用于在有输入缓存区中存入待处理数据时,依次从各输入缓 存区读取待处理的输入窗口数据,并通过卷积核数据对待处理的输入窗口数 据进行卷积计算,获得输出窗口数据并存储在第三缓存区中。
第三缓存区,包括至少一个输出缓存区,用于缓存输出窗口数据。
数据输出模块,用于通过FIFO端口,依次将第三缓存区中的输出窗口 数据存储至片外存储器中。
基于本发明上述实施例提供的卷积加速器,片上内存包括第一缓存区、 第二缓存区和第三缓存区,第一缓存区包括至少一个输入缓存区,第二缓存 区中缓存有至少一组卷积核数据。通过FIFO端口依次从加速器的片外存储 器读取待处理任务中预设大小的待处理数据,并存储在加速器的片上内存中 第一缓存区的各输入缓存区;响应于有输入缓存区中存入待处理数据,依次 从各输入缓存区读取待处理的输入窗口数据,并通过所述卷积核数据对所述 待处理的输入窗口数据进行卷积计算,获得输出窗口数据并存储在第三缓存区中;然后通过FIFO端口依次将第三缓存区中的输出窗口数据存储至所述 片外存储器中。本发明实施例每次从加速器的片外存储器读取待处理任务中 预设大小的待处理数据存入片上内存进行处理,并实现了从片外存储器读取 待处理数据存入片上内存、和对待处理数据进行卷积计算处理两个过程的流 水线处理,可以避免加速器片上内存和带宽不足、处理器资源有限的情况, 并且提高了卷积计算处理的效率,可以适用于FPGA、ASIC等硬件平台,从 而在FPGA、ASIC等硬件平台上实现CNN的加速处理,本发明实施例应用 于FPGA平台时,可以充分发挥FPGA平台可重构、并行计算性、开发周期 短、低功耗、灵活性高等优点。
在图9所示实施例的一个具体示例中,第三缓存区包括至少一个输出缓 存区,数据输出模块具体用于:响应于首个输出缓存区存入输出窗口数据, 依次读取各输出缓存区中的输出窗口数据,并通过FIFO端口将读取的输出 窗口数据存储至片外存储器中。
示例性地,第三缓存区包括两个输出缓存区。在待处理任务的处理过程 中,两个输出缓存区的其中一个输出缓存区被轮流存入输出窗口数据、读取 输出窗口数据,两个输出缓存区中的另一个输出缓存区被轮流读取输出窗口 数据、存入输出窗口数据。两个输出缓存区中一个被存入输出窗口数据时, 另一个被读取输入窗口数据,在前述一个被存入输出窗口数据时,另一个被 存入待处理数据,从而实现存入输出窗口数据、输出输入窗口数据的流水线 处理,进一步提升加速器的工作效率。
在图9所示实施例的另一个具体示例中,第一缓存区具体包括两个输入 缓存区。在待处理任务的处理过程中,这两个输入缓存区的其中一个输入缓 存区被轮流存入待处理数据、读取输入窗口数据,两个输入缓存区中的另一 个输入缓存区被轮流读取待处理的输入窗口数据、存入待处理数据,两个输 入缓存区中一个被存入待处理数据时,另一个被读取输入窗口数据,在前述 一个被读取输入窗口数据时,另一个被存入待处理数据,从而实现存入待处 理数据、读取输入窗口数据的流水线处理。
本发明实施例中,将卷积核数据对应的卷积核的尺寸表示为r×r,输入窗 口数据对应的输入窗口的尺寸表示为n×n,输入窗口数据对应的输入窗口的 滑动步长表示为m。其中,r、m、n的取值分别为大于0的整数,且满足 n=m+r-1。
在图9所示实施例的又一个具体示例中,输入缓存区具体为行缓存区, 第一缓存区具体为:由n+m个行缓存区形成的循环缓冲区,每个行缓存区用 于顺序存储待处理任务所有通道中的同一行数据。该实施例中,数据读取模 块具体用于:
首次从片外存储器读取待处理任务所有通道的前n行数据,并将前n行 数据中的各行数据分别对应存储在第一缓存区中、基于预定循环方向确定的 前n个行缓存区中;
之后每次从片外存储器读取待处理任务所有通道的相邻后续m行数据, 并将本次读取的m行数据中的各行数据分别对应存储在第一缓存区中、基于 预定循环方向确定的相邻后续m个行缓存区中;或者
数据读取模块具体用于:
每次从片外存储器读取待处理任务所有通道的n行数据;
对于首次从待处理任务中读取的前n行数据,将前n行数据中的各行数 据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个行缓存区 中;对于非首次读取的n行数据,基于预定循环方向,将第一缓存区中存储 上一次读取的n行数据的前n个行缓冲区滑动m行后对应的n个行缓冲区作 为本次读取的n行数据的目标行缓存区,并将本次读取的n行数据对应存入 目标行缓存区中的各行缓冲区中。
与上述又一个具体示例相应地,计算模块依次从各输入缓存区读取待处 理的输入窗口数据,并通过卷积核数据对待处理的输入窗口数据进行卷积计 算时,具体用于:
针对待处理任务,首次读取待处理的输入窗口数据时,选取前n个行缓 存区作为当前计算缓存区,按照滑动步长m,依次顺序从当前计算缓存区读 取大小为n×n的输入窗口数据,并通过卷积核数据对待处理的输入窗口数据 进行卷积计算,直至当前计算缓存区中的待处理数据均被读取;
之后每次基于预定循环方向,按照滑动步长m从上一计算缓存区开始滑 动,选取n个行缓存区作为新的计算缓存区,按照滑动步长m,依次顺序从 新的计算缓存区读取大小为n×n的输入窗口数据,并通过卷积核数据对待处 理的输入窗口数据进行卷积计算,直至新的计算缓存区中的待处理数据均被 读取。
与上述又一个具体示例相应地,每个输出缓存区具体包括m个行缓存 区。相应地,计算模块获得输出窗口数据并依次存储在各输出缓存区中时, 具体用于:
选取其中一个输出缓存区作为当前输出缓存区,依次将对每个输入窗口 数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个行 缓存区中;响应于一个计算缓存区中的所有输入窗口数据进行卷积计算获得 的输出窗口数据被存储完毕,选取另一个输出缓存区作为当前输出缓存区, 执行依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序存储 在当前输出缓冲区的m个行缓存区中的操作。
数据输出模块,具体用于:响应于当前计算缓存区中的所有输入窗口数 据进行卷积计算获得的输出窗口数据被存储完毕,通过FIFO端口,将当前 输出缓存区中的输出窗口数据存储至片外存储器中。
在图9所示实施例的再一个具体示例中,输入缓存区具体为列缓存区; 第一缓存区具体为:由n+m个列缓存区形成的循环缓冲区,每个列缓存区用 于顺序存储待处理任务所有通道中的同一列数据。相应地,数据读取模块, 具体用于:
首次从片外存储器读取待处理任务所有通道的前n列数据,并将前n列 数据中的各列数据分别对应存储在第一缓存区中、基于预定循环方向确定的 前n个列缓存区中;
之后每次从片外存储器读取待处理任务所有通道的相邻后续m列数据, 并将本次读取的m列数据中的各行数据分别对应存储在第一缓存区中、基于 预定循环方向确定的相邻后续m个列缓存区中。
与上述再一个具体示例相应地,计算模块依次从各输入缓存区读取待处 理的输入窗口数据,并通过卷积核数据对待处理的输入窗口数据进行卷积计 算时,包括:
针对待处理任务,首次读取待处理的输入窗口数据时,选取前n个列缓 存区作为当前计算列缓存区,按照滑动步长m,依次顺序从当前列计算缓存 区读取大小为n×n的输入窗口数据,并通过卷积核数据对待处理的输入窗口 数据进行卷积计算,直至当前列计算缓存区中的待处理数据均被读取;
之后每次基于预定循环方向,按照滑动步长m从上一列计算缓存区开始 滑动,选取n个列缓存区作为新的计算缓存区,按照滑动步长m,依次顺序 从新的计算缓存区读取大小为n×n的输入窗口数据,并通过卷积核数据对待 处理的输入窗口数据进行卷积计算,直至新的计算缓存区中的待处理数据均 被读取;或者
数据读取模块,具体用于:
每次从片外存储器读取待处理任务所有通道的n列数据;
对于首次从待处理任务中读取的前n列数据,将前n列数据中的各列数 据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个列缓存区 中;对于非首次读取的n列数据,基于预定循环方向,将第一缓存区中存储 上一次读取的n列数据的前n个列缓冲区滑动m列后对应的n个列缓冲区作 为本次读取的n列数据的目标列缓存区,并将本次读取的n列数据对应存入 目标列缓存区中的各列缓冲区中。
与上述再一个具体示例相应地,输出缓存区包括m个列缓存区。该具体 示例中,计算模块获得输出窗口数据并依次存储在各输出缓存区中时,具体 用于:
选取其中一个输出缓存区作为当前输出缓存区,依次将对每个输入窗口 数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个列 缓存区中;响应于一个计算列缓存区中的所有输入窗口数据进行卷积计算获 得的输出窗口数据被存储完毕,选取另一个输出缓存区作为当前输出缓存 区,执行依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序 存储在当前输出缓冲区的m个列缓存区中的操作。
相应地,数据输出模块,具体用于:响应于当前计算列缓存区中的所有 输入窗口数据进行卷积计算获得的输出窗口数据被存储完毕,通过FIFO端 口,将当前输出缓存区中的输出窗口数据存储至片外存储器中。
图10为本发明实施例中计算模块一个实施例的结构示意图。如图10所 示,在本发明上述各实施例的加速器中,计算模块包括:处理单元(PE)和 累加单元。
在图10所示实施例的一个具体示例中,卷积核数据具体为转换后的卷积 核。该实施例中:
处理单元,用于分别针对任一输入通道执行计算处理操作:采用对应的 第二常数矩阵对待处理的输入窗口数据进行转换,获得转换后输入窗口数 据;对任一输入通道的转换后输入窗口数据与转换后的卷积核进行矩阵点乘 操作,获得点乘后矩阵;采用对应的第三常数矩阵对点乘后矩阵进行转换, 获得卷积结果;
累加单元,用于在获得一个输出通道对应的所有输入通道的卷积结果 后,对所有输入通道的卷积结果中的对应点进行累加,获得一个输出通道的 输出窗口数据。
在图10所示实施例的一个具体示例中,卷积核数据具体为未经转换的卷 积核。该实施例中:
处理单元,用于分别针对任一输入通道执行如下计算处理操作:采用对 应的第一常数矩阵,分别对对应于至少一个输出通道的卷积核进行转换,获 得至少一组转换后的卷积核,以及采用对应的第二常数矩阵对待处理的输入 窗口数据进行转换,获得转换后输入窗口数据;对任一输入通道的转换后输 入窗口数据与转换后的卷积核进行矩阵点乘操作,获得点乘后矩阵;采用对 应的第三常数矩阵对点乘后矩阵进行转换,获得卷积结果;
累加单元,用于在获得一个输出通道对应的所有输入通道的卷积结果 后,对所有输入通道的卷积结果中的对应点进行累加,获得一个输出通道的 输出窗口数据。
与图10所示实施例相应地,采用对应的第二常数矩阵对待处理的输入窗 口数据进行转换时,具体可以根据对应的第二常数矩阵,分别对任一输入通 道待处理的输入窗口数据进行位运算操作;采用对应的第三常数矩阵对点乘 后矩阵进行转换时,具体可以根据第三常数矩阵,分别对任一输入通道的点 乘后矩阵进行位运算操作;采用对应的第一常数矩阵,分别对对应于至少一 个输出通道的卷积核进行转换时,具体可以根据第一常数矩阵,分别对对应 于至少一个输出通道的卷积核进行位运算操作。
具体地,计算模块包括Pm×Pn个处理单元,用于同时针对Pm个输出通 道和Pn个输入通道执行计算处理操作,其中,Pm和Pn分别为大于0的整 数。相应地,累加单元,具体用于:针对Pm个输出通道,响应于获得所有 输入通道的卷积结果,分别针对同一个输出通道,将所有输入通道的卷积结 果中的对应点进行累加,获得Pm个输出通道的输出窗口数据。
在具体应用中,可以根据实际需求和加速器资源配置:Pm的取值为1, Pn的取值为大于1的整数;或者,Pm的取值为全部输出通道数,Pn的取值 为1;或者,Pm的取值大于1且小于全部输出通道数,Pn的取值为1。
图11为本发明卷积计算处理装置一个实施例的结构示意图。该实施例的 卷积计算处理装置可用于实现本发明上述各卷积计算处理方法实施例。如图 11所示,该实施例的卷积计算处理装置包括:第一转换模块,点乘模块和第 二转换模块。其中:
第一转换模块,用于采用第二常数矩阵对待处理的输入窗口数据进行转 换,获得转换后输入窗口数据。
点乘模块,用于对转换后输入窗口数据与卷积核数据进行矩阵点乘操 作,获得点乘后矩阵。其中的卷积核数据由对应的第一常数矩阵对预先设置 的卷积核进行转换获得。
第二转换模块,用于采用第三常数矩阵对点乘后矩阵进行转换,获得卷 积结果。
基于本发明上述实施例提供的卷积计算处理装置,可以针对任一输入通 道和任一输出通道,采用第二常数矩阵对待处理的输入窗口数据进行转换, 获得转换后输入窗口数据;对转换后输入窗口数据与卷积核数据进行矩阵点 乘操作,获得点乘后矩阵;采用第三常数矩阵对点乘后矩阵进行转换,获得 卷积结果。本发明实施例提供了一种基于Winograd算法对输入窗口数据进行 面对面的卷积计算的方法,相对于传统的点对点的卷积算法,减少了乘法次 数,从而减少了对处理器资源的占用,并提升了计算效率。本发明实施例可 以应用于FPGA、ASIC等硬件平台,从而在FPGA、ASIC等硬件平台上实 现卷积加速处理,本发明实施例应用于FPGA平台时,可以充分发挥FPGA 平台可重构、并行计算性、开发周期短、低功耗、灵活性高等优点。
图12为本发明卷积计算处理装置另一个实施例的结构示意图。如图12 所示,与图11所示的实施例相比,该实施例的卷积计算处理装置还包括第三 转换模块。
在其中一个具体示例中,第三转换模块用于获取预先存储的卷积核数 据。
在另一个具体示例中,第三转换模块用于采用对应的第一常数矩阵,分 别对任一输入通道和任一输出通道对应的卷积核进行转换,获得任一输入通 道和任一输出通道对应的卷积核数据。
示例性地,第一转换模块,具体可用于:根据对应的第二常数矩阵,分 别对待处理的输入窗口数据进行位运算操作;
第二转换模块,具体可用于:根据第三常数矩阵,分别对点乘后矩阵进 行位运算操作;
第三转换模块,具体可用于:根据第一常数矩阵,对卷积核进行位运算 操作。
进一步地,再参见图12,在又一个实施例中,卷积计算处理装置还可以 包括:
查询模块,分别从常数矩阵表中,查询与卷积核数据对应的卷积核的尺 寸r×r和输入窗口数据对应的输入窗口的尺寸n×n对应的第一常数矩阵、第 二常数矩阵和第三常数矩阵;
其中,常数矩阵表中预先设置有分别与各卷积核的尺寸和输入窗口的尺 寸对应的第一常数矩阵、第二常数矩阵和第三常数矩阵。
本发明实施例提供还提供了一种电子设备,包括本发明上述任一实施例 的卷积加速器。
本发明实施例提供还提供了另一种电子设备,包括:
存储器,用于存储可执行指令;以及
处理器,用于与存储器通信以执行可执行指令从而完成权利要求1至30 任意一项的操作。
本发明实施例提供还提供了一种计算机存储介质,用于存储计算机可读 取的指令,该指令被执行时执行本发明上述任一卷积加速方法实施例的操 作。
本发明实施例提供还提供了又一种电子设备,包括本发明上述任一实施 例的卷积计算处理装置。
本发明实施例提供还提供了再一种电子设备,包括:
存储器,用于存储可执行指令;以及
处理器,用于与存储器通信以执行可执行指令从而完成本发明上述任一 卷积计算处理方法实施例的操作操作。
本发明实施例提供还提供了另一种计算机存储介质,用于存储计算机可 读取的指令,该指令被执行时执行本发明上述任一卷积计算处理方法实施例 的操作。
图13为本发明电子设备一个具体应用实施例的结构示意图。图13示出 了适于用来实现本申请实施例的电子设备的结构示意图。如图13所示,该电 子设备包括双倍速率同步动态随机存储器(DDR SDRAM)、处理系统(PS) 和可编程逻辑电路(PL),PL中设置有本发明实施例的卷积加速器。
需要说明的,如图13所示的架构仅为一种可选实现方式,在具体实践过 程中,可根据实际需要对上述图13的部件数量和类型进行选择、删减、增加 或替换;在不同功能部件设置上,也可采用分离设置或集成设置等实现方 式,这些可替换的实施方式均落入本发明公开的保护范围。
本发明实施例可以应用于计算机系统/服务器等电子设备,其可与众多其 它通用或专用计算系统环境或配置一起操作。适于与计算机系统/服务器等电 子设备一起使用的众所周知的计算系统、环境和/或配置的例子包括但不限 于:嵌入式平台、个人计算机系统、服务器计算机系统、瘦客户机、厚客户 机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产 品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统 的分布式云计算技术环境,等等。
计算机系统/服务器等电子设备可以在由计算机系统执行的计算机系统可 执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例 程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或 者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中 实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执 行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远 程计算系统存储介质上。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤 可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读 取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述 的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介 质。
本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的 都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见 即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比 较简单,相关之处参见方法实施例的部分说明即可。
可能以许多方式来实现本发明的方法和装置。例如,可通过软件、硬 件、固件或者软件、硬件、固件的任何组合来实现本发明的方法和装置。用 于所述方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限 于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例 中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现 根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据 本发明的方法的程序的记录介质。
本发明的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者 将本发明限于所公开的形式。很多修改和变化对于本领域的普通技术人员而 言是显然的。选择和描述实施例是为了更好说明本发明的原理和实际应用, 并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有 各种修改的各种实施例。

Claims (59)

1.一种卷积加速方法,其特征在于,包括:
通过先进先出FIFO端口依次从加速器的片外存储器读取待处理任务中预设大小的待处理数据,并存储在所述加速器的片上内存中第一缓存区中的相应输入缓存区;其中,所述片上内存包括第一缓存区、第二缓存区和第三缓存区,所述第一缓存区包括至少两个输入缓存区,每个输入缓存区被轮流存入待处理数据、读取输入窗口数据,所述第二缓存区中缓存有至少一组卷积核数据;响应于有输入缓存区中存入待处理数据,依次从相应输入缓存区读取待处理的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,获得输出窗口数据并存储在第三缓存区中;所述卷积核数据对应的卷积核的尺寸为r×r,所述输入窗口数据对应的输入窗口的尺寸为n×n,所述输入窗口数据对应的输入窗口的滑动步长和输出窗口的尺寸为m;其中,m、n、r的取值分别为大于0的整数,且满足n=m+r-1;
通过FIFO端口依次将第三缓存区中的输出窗口数据存储至所述片外存储器中。
2.根据权利要求1所述的方法,其特征在于,所述待处理任务包括:至少一个输入通道的输入图像、或者至少一个输入通道的输入特征图;
每组卷积核数据分别对应于一个输出通道,每组卷积核数据包括至少一个卷积核数据,每个卷积核数据分别对应于一个输入通道。
3.根据权利要求2所述的方法,其特征在于,所述第三缓存区包括至少一个输出缓存区;
所述获得输出窗口数据并存储在第三缓存区中,包括:获得输出窗口数据并依次存储在各输出缓存区中;
所述通过FIFO端口依次将第三缓存区中的输出窗口数据存储至所述片外存储器中,包括:响应于首个输出缓存区存入输出窗口数据,依次读取各输出缓存区中的输出窗口数据,并通过FIFO端口将读取的输出窗口数据存储至所述片外存储器中。
4.根据权利要求3所述的方法,其特征在于,所述第三缓存区包括两个输出缓存区;
在所述待处理任务的处理过程中,所述两个输出缓存区的其中一个输出缓存区被轮流存入输出窗口数据、读取输出窗口数据,所述两个输出缓存区中的另一个输出缓存区被轮流读取输出窗口数据、存入输出窗口数据。
5.根据权利要求1~4任一所述的方法,其特征在于,所述第一缓存区包括两个输入缓存区;
在所述待处理任务的处理过程中,所述两个输入缓存区的其中一个输入缓存区被轮流存入待处理数据、读取输入窗口数据,所述两个输入缓存区中的另一个输入缓存区被轮流读取待处理的输入窗口数据、存入待处理数据。
6.根据权利要求1~4任一所述的方法,其特征在于,
所述输入缓存区具体为行缓存区;所述第一缓存区具体为:由n+m个行缓存区形成的循环缓冲区,每个行缓存区用于顺序存储所述待处理任务所有通道中的同一行数据;
所述从加速器的片外存储器读取待处理任务中预设大小的待处理数据,并依次存储在所述加速器的片上内存中第一缓存区中的相应输入缓存区,包括:
首次从片外存储器读取所述待处理任务所有通道的前n行数据,并将所述前n行数据中的各行数据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个行缓存区中;
之后每次从片外存储器读取所述待处理任务所有通道的相邻后续m行数据,并将本次读取的m行数据中的各行数据分别对应存储在第一缓存区中、基于所述预定循环方向确定的相邻后续m个行缓存区中。
7.根据权利要求6所述的方法,其特征在于,所述依次从相应输入缓存区读取待处理的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,包括:
针对所述待处理任务,首次读取待处理的输入窗口数据时,选取所述前n个行缓存区作为当前计算缓存区,按照滑动步长m,依次顺序从当前计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,直至当前计算缓存区中的待处理数据均被读取;
之后每次基于所述预定循环方向,按照滑动步长m从上一计算缓存区开始滑动,选取n个行缓存区作为新的计算缓存区,按照滑动步长m,依次顺序从新的计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,直至所述新的计算缓存区中的待处理数据均被读取。
8.根据权利要求7所述的方法,其特征在于,输出缓存区包括m个行缓存区;
所述获得输出窗口数据并依次存储在各输出缓存区中,包括:
选取其中一个输出缓存区作为当前输出缓存区,依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个行缓存区中;响应于一个计算缓存区中的所有输入窗口数据进行卷积计算获得的输出窗口数据被存储完毕,选取另一个输出缓存区作为当前输出缓存区,执行所述依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个行缓存区中的操作;
所述依次将第三缓存区中的输出窗口数据存储至所述片外存储器中,包括:
响应于当前计算缓存区中的所有输入窗口数据进行卷积计算获得的输出窗口数据被存储完毕,将所述当前输出缓存区中的输出窗口数据存储至所述片外存储器中。
9.根据权利要求1~4任一所述的方法,其特征在于,所述输入缓存区具体为行缓存区;所述第一缓存区具体为:由n+m个行缓存区形成的循环缓冲区,每个行缓存区用于顺序存储所述待处理任务所有通道中的同一行数据;
所述从加速器的片外存储器读取待处理任务中预设大小的待处理数据,并依次存储在所述加速器的片上内存中第一缓存区中的相应输入缓存区,包括:
每次从片外存储器读取所述待处理任务所有通道的n行数据;
对于首次从所述待处理任务中读取的前n行数据,将所述前n行数据中的各行数据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个行缓存区中;对于非首次读取的n行数据,基于所述预定循环方向,将第一缓存区中存储上一次读取的n行数据的前n个行缓冲区滑动m行后对应的n个行缓冲区作为本次读取的n行数据的目标行缓存区,并将本次读取的n行数据对应存入所述目标行缓存区中的各行缓冲区中。
10.根据权利要求9所述的方法,其特征在于,所述依次从相应输入缓存区读取待处理的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,包括:
针对所述待处理任务,首次读取待处理的输入窗口数据时,选取所述前n个行缓存区作为当前计算缓存区,按照滑动步长m,依次顺序从当前计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,直至当前计算缓存区中的待处理数据均被读取;
之后每次基于所述预定循环方向,按照滑动步长m从上一计算缓存区开始滑动,选取n个行缓存区作为新的计算缓存区,按照滑动步长m,依次顺序从新的计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,直至所述新的计算缓存区中的待处理数据均被读取。
11.根据权利要求10所述的方法,其特征在于,输出缓存区包括m个行缓存区;
所述获得输出窗口数据并依次存储在各输出缓存区中,包括:
选取其中一个输出缓存区作为当前输出缓存区,依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个行缓存区中;响应于一个计算缓存区中的所有输入窗口数据进行卷积计算获得的输出窗口数据被存储完毕,选取另一个输出缓存区作为当前输出缓存区,执行所述依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个行缓存区中的操作;
所述依次将第三缓存区中的输出窗口数据存储至所述片外存储器中,包括:
响应于当前计算缓存区中的所有输入窗口数据进行卷积计算获得的输出窗口数据被存储完毕,将所述当前输出缓存区中的输出窗口数据存储至所述片外存储器中。
12.根据权利要求1~4任一所述的方法,其特征在于,所述输入缓存区具体为列缓存区;所述第一缓存区具体为:由n+m个列缓存区形成的循环缓冲区,每个列缓存区用于顺序存储所述待处理任务所有通道中的同一列数据;
所述从加速器的片外存储器读取待处理任务中预设大小的待处理数据,并依次存储在所述加速器的片上内存中第一缓存区中的相应输入缓存区,包括:
首次从片外存储器读取所述待处理任务所有通道的前n列数据,并将所述前n列数据中的各列数据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个列缓存区中;
之后每次从片外存储器读取所述待处理任务所有通道的相邻后续m列数据,并将本次读取的m列数据中的各行数据分别对应存储在第一缓存区中、基于所述预定循环方向确定的相邻后续m个列缓存区中。
13.根据权利要求12所述的方法,其特征在于,所述依次从相应输入缓存区读取待处理的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,包括:
针对所述待处理任务,首次读取待处理的输入窗口数据时,选取所述前n个列缓存区作为当前计算列缓存区,按照滑动步长m,依次顺序从当前列计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,直至当前列计算缓存区中的待处理数据均被读取;
之后每次基于所述预定循环方向,按照滑动步长m从上一列计算缓存区开始滑动,选取n个列缓存区作为新的计算缓存区,按照滑动步长m,依次顺序从新的计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,直至所述新的计算缓存区中的待处理数据均被读取。
14.根据权利要求13所述的方法,其特征在于,输出缓存区包括m个列缓存区;
所述获得输出窗口数据并依次存储在各输出缓存区中,包括:
选取其中一个输出缓存区作为当前输出缓存区,依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个列缓存区中;响应于一个计算列缓存区中的所有输入窗口数据进行卷积计算获得的输出窗口数据被存储完毕,选取另一个输出缓存区作为当前输出缓存区,执行所述依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个列缓存区中的操作;
所述依次将第三缓存区中的输出窗口数据存储至所述片外存储器中,包括:
响应于当前计算列缓存区中的所有输入窗口数据进行卷积计算获得的输出窗口数据被存储完毕,将所述当前输出缓存区中的输出窗口数据存储至所述片外存储器中。
15.根据权利要求1~4任一所述的方法,其特征在于,所述输入缓存区具体为列缓存区;所述第一缓存区具体为:由n+m个列缓存区形成的循环缓冲区,每个列缓存区用于顺序存储所述待处理任务所有通道中的同一列数据;
所述从加速器的片外存储器读取待处理任务中预设大小的待处理数据,并依次存储在所述加速器的片上内存中第一缓存区中的相应输入缓存区,包括:
每次从片外存储器读取所述待处理任务所有通道的n列数据;
对于首次从所述待处理任务中读取的前n列数据,将所述前n列数据中的各列数据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个列缓存区中;对于非首次读取的n列数据,基于所述预定循环方向,将第一缓存区中存储上一次读取的n列数据的前n个列缓冲区滑动m列后对应的n个列缓冲区作为本次读取的n列数据的目标列缓存区,并将本次读取的n列数据对应存入所述目标列缓存区中的各列缓冲区中。
16.根据权利要求15所述的方法,其特征在于,所述依次从相应输入缓存区读取待处理的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,包括:
针对所述待处理任务,首次读取待处理的输入窗口数据时,选取所述前n个列缓存区作为当前计算列缓存区,按照滑动步长m,依次顺序从当前列计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,直至当前列计算缓存区中的待处理数据均被读取;
之后每次基于所述预定循环方向,按照滑动步长m从上一列计算缓存区开始滑动,选取n个列缓存区作为新的计算缓存区,按照滑动步长m,依次顺序从新的计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,直至所述新的计算缓存区中的待处理数据均被读取。
17.根据权利要求16所述的方法,其特征在于,输出缓存区包括m个列缓存区;
所述获得输出窗口数据并依次存储在各输出缓存区中,包括:
选取其中一个输出缓存区作为当前输出缓存区,依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个列缓存区中;响应于一个计算列缓存区中的所有输入窗口数据进行卷积计算获得的输出窗口数据被存储完毕,选取另一个输出缓存区作为当前输出缓存区,执行所述依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个列缓存区中的操作;
所述依次将第三缓存区中的输出窗口数据存储至所述片外存储器中,包括:
响应于当前计算列缓存区中的所有输入窗口数据进行卷积计算获得的输出窗口数据被存储完毕,将所述当前输出缓存区中的输出窗口数据存储至所述片外存储器中。
18.根据权利要求1~4任一所述的方法,其特征在于,所述至少一组卷积核数据包括至少一组转换后的卷积核,其中,任一组转换后的卷积核由对应的第一常数矩阵对对应于一个输出通道的卷积核进行转换获得;
通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,获得输出窗口数据,包括:
分别针对任一输入通道执行如下计算处理操作:采用对应的第二常数矩阵对待处理的输入窗口数据进行转换,获得转换后输入窗口数据;对所述任一输入通道的转换后输入窗口数据与转换后的卷积核进行矩阵点乘操作,获得点乘后矩阵;采用对应的第三常数矩阵对所述点乘后矩阵进行转换,获得卷积结果;
响应于获得所有输入通道的卷积结果,对所有输入通道的所述卷积结果中的对应点进行累加,获得一个输出通道的输出窗口数据。
19. 根据权利要求18所述的方法,其特征在于,还包括:
预先采用对应的第一常数矩阵,分别对对应于所述至少一个输出通道的卷积核进行转换,获得所述至少一组转换后的卷积核,并存储在所述第二缓存区中;或者
采用对应的第一常数矩阵,分别对对应于所述至少一个输出通道的卷积核进行转换,获得所述至少一组转换后的卷积核。
20. 根据权利要求18所述的方法,其特征在于,所述采用对应的第二常数矩阵对待处理的输入窗口数据进行转换,包括:根据所述对应的第二常数矩阵,分别对所述任一输入通道待处理的输入窗口数据进行位运算操作;和/或
所述采用对应的第三常数矩阵对所述点乘后矩阵进行转换,包括:根据所述第三常数矩阵,分别对所述任一输入通道的所述点乘后矩阵进行位运算操作;和/或
所述采用对应的第一常数矩阵,分别对对应于所述至少一个输出通道的卷积核进行转换,包括:根据所述第一常数矩阵,分别对对应于所述至少一个输出通道的卷积核进行位运算操作。
21.根据权利要求18所述的方法,其特征在于,还包括:
分别从常数矩阵表中,查询与所述卷积核的尺寸r×r和输入窗口的尺寸n×n对应的第一常数矩阵、第二常数矩阵和第三常数矩阵;
其中,所述常数矩阵表中预先设置有分别与各卷积核的尺寸和输入窗口的尺寸对应的第一常数矩阵、第二常数矩阵和第三常数矩阵。
22.根据权利要求18所述的方法,其特征在于,所述分别针对任一输入通道执行如下计算操作,包括:同时针对Pm个输出通道和Pn个输入通道执行所述计算处理操作,其中,Pm和Pn分别为大于0的整数;
所述响应于获得所有输入通道的卷积结果,对所有输入通道的所述卷积结果中的对应点进行累加,获得一个输出通道的输出窗口数据,包括:针对所述Pm个输出通道,响应于获得所有输入通道的卷积结果,分别针对同一个输出通道,将所述所有输入通道的所述卷积结果中的对应点进行累加,获得所述Pm个输出通道的输出窗口数据。
23.根据权利要求22所述的方法,其特征在于,Pm的取值为1,Pn的取值为大于1的整数;
所述同时针对Pm个输出通道和Pn个输入通道执行所述计算处理操作,包括:依次针对一个输出通道、全部输入通道或者所述全部输入通道中的部分输入通道,并行执行所述计算处理操作。
24.根据权利要求22所述的方法,其特征在于,Pm的取值为全部输出通道数,Pn的取值为1;
所述同时针对Pm个输出通道和Pn个输入通道执行所述计算处理操作,包括:同时针对全部输出通道,依次针对一个输入通道执行所述计算处理操作;
所述响应于获得所有输入通道的卷积结果,对所有输入通道的所述卷积结果中的对应点进行累加,获得一个输出通道的输出窗口数据,包括:针对所述全部输出通道,响应于获得所有输入通道的卷积结果,分别针对同一个输出通道,对所有输入通道的所述卷积结果中的对应点进行累加,获得全部输出通道的输出窗口数据。
25.根据权利要求22所述的方法,其特征在于,Pm的取值大于1且小于全部输出通道数,Pn的取值为1;
所述同时针对Pm个输出通道和Pn个输入通道执行所述计算处理操作,包括:同时针对全部输出通道中的部分输出通道,依次针对一个输入通道执行所述计算处理操作。
26.根据权利要求22所述的方法,其特征在于,还包括:
根据参数优化模型,由FIFO端口的传输带宽、加速器的资源条件获取所述卷积计算中参数的最优取值,所述卷积计算中参数包括:输入窗口的尺寸、输出通道的并行度和输入通道的并行度,所述参数的最优取值包括:输入窗口的尺寸的最优取值n、输出通道的并行度的最优取值Pm和输入通道的并行度的最优取值Pn。
27.根据权利要求26所述的方法,其特征在于,所述同时针对Pm个输出通道和Pn个输入通道执行所述计算处理操作,包括:
基于所述参数的最优取值中Pm和Pn的取值,依次选取Pm个输出通道和Pn个输入通道,执行所述同时针对Pm个输出通道和Pn个输入通道执行所述计算处理操作。
28.根据权利要求1~4任一所述的方法,其特征在于,还包括:
比较当前待处理任务的卷积核尺寸k×k与加速器对应的卷积核的尺寸为r×r是否一致;
若不一致,对所述当前待处理任务的卷积核的右方填充a列0、下方分别填充b行0,使所述当前待处理任务的卷积核转换成尺寸为tr×tr的新卷积核,其中,k、t、a、b的取值分别为大于0的整数。
29.根据权利要求18所述的方法,其特征在于,还包括:
响应于需要对所述待处理任务进行全连接操作,通过FIFO端口从加速器的片外存储器读取待处理任务的全部数据,并存储在所述第一缓存区中;
对所述全部数据与所述第二缓存区中存储的转换后的卷积核进行矩阵点乘操作,获得点乘后矩阵;
采用对应的第三常数矩阵对所述点乘后矩阵进行转换,获得计算结果数据并存储在所述第三缓存区中;
通过FIFO端口依次将所述第三缓存区中的计算结果数据存储至所述片外存储器中。
30.根据权利要求1~4任一所述的方法,其特征在于,还包括:
响应于需要对所述待处理任务进行池化操作,通过FIFO端口依次从加速器的片外存储器读取所述待处理任务中预设大小的数据,并存储在所述第一缓存区中;
从所述预设大小的数据中选取一个取值最大的数据作为计算结果数据,并存储在所述第三缓存区中;
通过FIFO端口依次将所述第三缓存区中的计算结果数据存储至所述片外存储器中。
31.根据权利要求1~4任一所述的方法,其特征在于,还包括:
响应于需要对所述待处理任务进行激活函数操作,通过FIFO端口依次从加速器的片外存储器读取待处理任务中预设大小的待处理数据,并存储在所述第一缓存区中;
依次比较所述待处理数据中任一数据的数值是否小于0;
若所述任一数据的数值小于0,将以0作为所述任一数据的计算结果存储在所述第三缓存区中;若所述任一数据的数值不小于0,直接将所述任一数据的数值作为计算结果存储在所述第三缓存区中;
通过FIFO端口依次将所述第三缓存区中的计算结果存储至所述片外存储器中。
32.根据权利要求1~4任一所述的方法,其特征在于,还包括:
响应于需要对所述待处理任务进行上采样操作,通过FIFO端口依次从加速器的片外存储器读取待处理任务中的一个元素数据,将所述元素数据复制为2s×2s的元素矩阵,以所述元素矩阵作为所述待处理数据,开始执行所述依次存储在所述加速器的片上内存中第一缓存区中的相应输入缓存区的操作;其中,s的取值为大于0的整数。
33.根据权利要求1~4任一所述的方法,其特征在于,还包括:
响应于需要对所述待处理任务进行填充处理,通过FIFO端口从加速器的片外存储器读取待处理任务的全部数据,并存储在所述第一缓存区中;
比较所述待处理任务的数据大小是否小于预设大小;
若所述待处理任务的数据大小小于预设大小,按照预设方式对所述待处理任务进行边缘数据填充,使得填充后的待处理任务的数据大小等于所述预设大小,并将填充后的待处理任务存储在所述第三缓存区中;若所述待处理任务的数据大小不小于预设大小,直接将所述待处理任务存储在所述第三缓存区中;
通过FIFO端口依次将所述第三缓存区中的待处理任务数据存储至所述片外存储器中。
34.根据权利要求1~4任一所述的方法,其特征在于,所述加速器包括:现场可编程门阵列FPGA或专用集成电路ASIC。
35.根据权利要求1~4任一所述的方法,其特征在于,所述通过FIFO端口依次从加速器的片外存储器读取待处理任务中预设大小的待处理数据包括:
加速器通过FIFO端口接收处理器发送的任务处理指令,并通过FIFO端口依次从加速器的片外存储器读取待处理任务中预设大小的待处理数据的操作;
所述方法还包括:
响应于对所述待处理任务的卷积加速完成,加速器通过FIFO端口向所述处理器反馈任务完成的响应消息。
36.一种卷积加速器,其特征在于,包括:
数据读取模块,用于通过FIFO端口依次从加速器的片外存储器读取待处理任务中预设大小的待处理数据,并存储在第一缓存区中的相应输入缓存区;
第一缓存区,包括至少两个输入缓存区,用于缓存所述待处理数据,每个输入缓存区被轮流存入待处理数据、读取输入窗口数据;
第二缓存区,用于缓存至少一组卷积核数据;
计算模块,用于在有输入缓存区中存入待处理数据时,依次从相应输入缓存区读取待处理的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,获得输出窗口数据并存储在第三缓存区中;所述卷积核数据对应的卷积核的尺寸为r×r,所述输入窗口数据对应的输入窗口的尺寸为n×n,所述输入窗口数据对应的输入窗口的滑动步长和输出窗口的尺寸为m;其中,m、n、r的取值分别为大于0的整数,且满足n=m+r-1;
第三缓存区,包括至少一个输出缓存区,用于缓存输出窗口数据;
数据输出模块,用于通过FIFO端口,依次将第三缓存区中的输出窗口数据存储至所述片外存储器中。
37.根据权利要求36所述的加速器,其特征在于,所述待处理任务包括:至少一个输入通道的输入图像、或者至少一个输入通道的输入特征图;
每组卷积核数据分别对应于一个输出通道,每组卷积核数据包括至少一个卷积核数据,每个卷积核数据分别对应于一个输入通道;所述卷积核数据包括卷积核或转换后的卷积核,所述转换后的卷积核由对应的第一常数矩阵对卷积核进行转换获得。
38.根据权利要求36所述的加速器,其特征在于,所述第三缓存区包括至少一个输出缓存区;
所述数据输出模块具体用于:响应于首个输出缓存区存入输出窗口数据,依次读取各输出缓存区中的输出窗口数据,并通过FIFO端口将读取的输出窗口数据存储至所述片外存储器中。
39.根据权利要求38所述的加速器,其特征在于,所述第三缓存区包括两个输出缓存区;
在所述待处理任务的处理过程中,所述两个输出缓存区的其中一个输出缓存区被轮流存入输出窗口数据、读取输出窗口数据,所述两个输出缓存区中的另一个输出缓存区被轮流读取输出窗口数据、存入输出窗口数据。
40.根据权利要求36~39任一所述的加速器,其特征在于,所述第一缓存区具体包括两个输入缓存区;
在所述待处理任务的处理过程中,所述两个输入缓存区的其中一个输入缓存区被轮流存入待处理数据、读取输入窗口数据,所述两个输入缓存区中的另一个输入缓存区被轮流读取待处理的输入窗口数据、存入待处理数据。
41.根据权利要求36~39任一所述的加速器,其特征在于,所述输入缓存区具体为行缓存区;所述第一缓存区具体为:由n+m个行缓存区形成的循环缓冲区,每个行缓存区用于顺序存储所述待处理任务所有通道中的同一行数据;
所述数据读取模块具体用于:
首次从片外存储器读取所述待处理任务所有通道的前n行数据,并将所述前n行数据中的各行数据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个行缓存区中;
之后每次从片外存储器读取所述待处理任务所有通道的相邻后续m行数据,并将本次读取的m行数据中的各行数据分别对应存储在第一缓存区中、基于所述预定循环方向确定的相邻后续m个行缓存区中。
42.根据权利要求36~39任一所述的加速器,其特征在于,所述输入缓存区具体为行缓存区;所述第一缓存区具体为:由n+m个行缓存区形成的循环缓冲区,每个行缓存区用于顺序存储所述待处理任务所有通道中的同一行数据;
所述数据读取模块具体用于:
每次从片外存储器读取所述待处理任务所有通道的n行数据;
对于首次从所述待处理任务中读取的前n行数据,将所述前n行数据中的各行数据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个行缓存区中;对于非首次读取的n行数据,基于所述预定循环方向,将第一缓存区中存储上一次读取的n行数据的前n个行缓冲区滑动m行后对应的n个行缓冲区作为本次读取的n行数据的目标行缓存区,并将本次读取的n行数据对应存入所述目标行缓存区中的各行缓冲区中。
43.根据权利要求42所述的加速器,其特征在于,所述计算模块依次从相应输入缓存区读取待处理的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算时,具体用于:
针对所述待处理任务,首次读取待处理的输入窗口数据时,选取所述前n个行缓存区作为当前计算缓存区,按照滑动步长m,依次顺序从当前计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,直至当前计算缓存区中的待处理数据均被读取;
之后每次基于所述预定循环方向,按照滑动步长m从上一计算缓存区开始滑动,选取n个行缓存区作为新的计算缓存区,按照滑动步长m,依次顺序从新的计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,直至所述新的计算缓存区中的待处理数据均被读取。
44.根据权利要求36~39任一所述的加速器,其特征在于,所述输出缓存区包括m个行缓存区;
所述计算模块获得输出窗口数据并依次存储在各输出缓存区中时,具体用于:
选取其中一个输出缓存区作为当前输出缓存区,依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个行缓存区中;响应于一个计算缓存区中的所有输入窗口数据进行卷积计算获得的输出窗口数据被存储完毕,选取另一个输出缓存区作为当前输出缓存区,执行所述依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个行缓存区中的操作;
所述数据输出模块,具体用于:
响应于当前计算缓存区中的所有输入窗口数据进行卷积计算获得的输出窗口数据被存储完毕,通过FIFO端口,将所述当前输出缓存区中的输出窗口数据存储至所述片外存储器中。
45.根据权利要求36~39任一所述的加速器,其特征在于,所述输入缓存区具体为列缓存区;所述第一缓存区具体为:由n+m个列缓存区形成的循环缓冲区,每个列缓存区用于顺序存储所述待处理任务所有通道中的同一列数据;
所述数据读取模块,具体用于:
首次从片外存储器读取所述待处理任务所有通道的前n列数据,并将所述前n列数据中的各列数据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个列缓存区中;
之后每次从片外存储器读取所述待处理任务所有通道的相邻后续m列数据,并将本次读取的m列数据中的各行数据分别对应存储在第一缓存区中、基于所述预定循环方向确定的相邻后续m个列缓存区中。
46.根据权利要求45所述的加速器,其特征在于,所述计算模块依次从相应输入缓存区读取待处理的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算时,包括:
针对所述待处理任务,首次读取待处理的输入窗口数据时,选取所述前n个列缓存区作为当前计算列缓存区,按照滑动步长m,依次顺序从当前列计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,直至当前列计算缓存区中的待处理数据均被读取;
之后每次基于所述预定循环方向,按照滑动步长m从上一列计算缓存区开始滑动,选取n个列缓存区作为新的计算缓存区,按照滑动步长m,依次顺序从新的计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,直至所述新的计算缓存区中的待处理数据均被读取。
47.根据权利要求36~39任一所述的加速器,其特征在于,所述输入缓存区具体为列缓存区;所述第一缓存区具体为:由n+m个列缓存区形成的循环缓冲区,每个列缓存区用于顺序存储所述待处理任务所有通道中的同一列数据;
所述数据读取模块,具体用于:
每次从片外存储器读取所述待处理任务所有通道的n列数据;
对于首次从所述待处理任务中读取的前n列数据,将所述前n列数据中的各列数据分别对应存储在第一缓存区中、基于预定循环方向确定的前n个列缓存区中;对于非首次读取的n列数据,基于所述预定循环方向,将第一缓存区中存储上一次读取的n列数据的前n个列缓冲区滑动m列后对应的n个列缓冲区作为本次读取的n列数据的目标列缓存区,并将本次读取的n列数据对应存入所述目标列缓存区中的各列缓冲区中。
48.根据权利要求47所述的加速器,其特征在于,所述计算模块依次从相应输入缓存区读取待处理的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算时,包括:
针对所述待处理任务,首次读取待处理的输入窗口数据时,选取所述前n个列缓存区作为当前计算列缓存区,按照滑动步长m,依次顺序从当前列计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,直至当前列计算缓存区中的待处理数据均被读取;
之后每次基于所述预定循环方向,按照滑动步长m从上一列计算缓存区开始滑动,选取n个列缓存区作为新的计算缓存区,按照滑动步长m,依次顺序从新的计算缓存区读取大小为n×n的输入窗口数据,并通过所述卷积核数据对所述待处理的输入窗口数据进行卷积计算,直至所述新的计算缓存区中的待处理数据均被读取。
49.根据权利要求36~39任一所述的加速器,其特征在于,所述输出缓存区包括m个列缓存区;
所述计算模块获得输出窗口数据并依次存储在各输出缓存区中时,具体用于:
选取其中一个输出缓存区作为当前输出缓存区,依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个列缓存区中;响应于一个计算列缓存区中的所有输入窗口数据进行卷积计算获得的输出窗口数据被存储完毕,选取另一个输出缓存区作为当前输出缓存区,执行所述依次将对每个输入窗口数据进行卷积计算获得的输出窗口数据顺序存储在当前输出缓冲区的m个列缓存区中的操作;
所述数据输出模块,具体用于:
响应于当前计算列缓存区中的所有输入窗口数据进行卷积计算获得的输出窗口数据被存储完毕,通过FIFO端口,将所述当前输出缓存区中的输出窗口数据存储至所述片外存储器中。
50.根据权利要求36~39任一所述的加速器,其特征在于,所述卷积核数据具体为转换后的卷积核;
所述计算模块包括:
处理单元,用于分别针对任一输入通道执行计算处理操作:采用对应的第二常数矩阵对待处理的输入窗口数据进行转换,获得转换后输入窗口数据;对所述任一输入通道的转换后输入窗口数据与转换后的卷积核进行矩阵点乘操作,获得点乘后矩阵;采用对应的第三常数矩阵对所述点乘后矩阵进行转换,获得卷积结果;
累加单元,用于在获得一个输出通道对应的所有输入通道的卷积结果后,对所有输入通道的所述卷积结果中的对应点进行累加,获得所述一个输出通道的输出窗口数据。
51.根据权利要求50所述的加速器,其特征在于,所述卷积核数据具体为卷积核;
所述计算模块包括:
处理单元,用于分别针对任一输入通道执行如下计算处理操作:采用对应的第一常数矩阵,分别对对应于所述至少一个输出通道的卷积核进行转换,获得所述至少一组转换后的卷积核,以及采用对应的第二常数矩阵对待处理的输入窗口数据进行转换,获得转换后输入窗口数据;对所述任一输入通道的转换后输入窗口数据与转换后的卷积核进行矩阵点乘操作,获得点乘后矩阵;采用对应的第三常数矩阵对所述点乘后矩阵进行转换,获得卷积结果;
累加单元,用于在获得一个输出通道对应的所有输入通道的卷积结果后,对所有输入通道的所述卷积结果中的对应点进行累加,获得所述一个输出通道的输出窗口数据。
52. 根据权利要求50所述的加速器,其特征在于,所述处理单元采用对应的第二常数矩阵对待处理的输入窗口数据进行转换时,具体用于:根据所述对应的第二常数矩阵,分别对所述任一输入通道待处理的输入窗口数据进行位运算操作;和/或
所述处理单元采用对应的第三常数矩阵对所述点乘后矩阵进行转换时,具体用于:根据所述第三常数矩阵,分别对所述任一输入通道的所述点乘后矩阵进行位运算操作;和/或
所述处理单元采用对应的第一常数矩阵,分别对对应于所述至少一个输出通道的卷积核进行转换时,具体用于:根据所述第一常数矩阵,分别对对应于所述至少一个输出通道的卷积核进行位运算操作。
53.根据权利要求50所述的加速器,其特征在于,所述计算模块包括Pm×Pn个处理单元,用于同时针对Pm个输出通道和Pn个输入通道执行所述计算处理操作,其中,Pm和Pn分别为大于0的整数;
所述累加单元,具体用于:针对所述Pm个输出通道,响应于获得所有输入通道的卷积结果,分别针对同一个输出通道,将所述所有输入通道的所述卷积结果中的对应点进行累加,获得所述Pm个输出通道的输出窗口数据。
54.根据权利要求53所述的加速器,其特征在于,Pm的取值为1,Pn的取值为大于1的整数;或者,Pm的取值为全部输出通道数,Pn的取值为1;或者,Pm的取值大于1且小于全部输出通道数,Pn的取值为1。
55.根据权利要求36~39任一所述的加速器,其特征在于,所述加速器包括:FPGA或者ASIC。
56.根据权利要求36~39任一所述的加速器,其特征在于,所述数据读取模块,还用于:通过FIFO端口接收处理器发送的加速指令,所述加速指令中包括卷积计算中参数的最优取值;以及根据所述卷积计算中参数的最优取值,开始执行所述通过FIFO端口依次从加速器的片外存储器读取待处理任务中预设大小的待处理数据的操作;
所述数据输出模块,还用于在对所述待处理任务的卷积加速完成后,通过FIFO端口向所述处理器反馈任务完成的响应消息。
57.一种电子设备,其特征在于,包括权利要求36~56任意一项所述的卷积加速器。
58. 一种电子设备,其特征在于,包括:
存储器,用于存储可执行指令;以及
处理器,用于与所述存储器通信以执行所述可执行指令从而完成权利要求1至35任意一项所述的方法。
59.一种计算机存储介质,用于存储计算机可读取的指令,其特征在于,所述指令被执行时执行权利要求1至35任意一项所述的方法。
CN201710300171.XA 2017-04-28 2017-04-28 卷积加速和计算处理方法、装置、电子设备及存储介质 Active CN108229645B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN201710300171.XA CN108229645B (zh) 2017-04-28 2017-04-28 卷积加速和计算处理方法、装置、电子设备及存储介质
PCT/CN2018/084948 WO2018196863A1 (zh) 2017-04-28 2018-04-27 卷积加速和计算处理方法、装置、电子设备及存储介质
SG11201910024P SG11201910024PA (en) 2017-04-28 2018-04-27 Convolution acceleration and computing processing methods and apparatuses, electronic device, and storage medium
US16/662,493 US11429852B2 (en) 2017-04-28 2019-10-24 Convolution acceleration and computing processing method and apparatus, electronic device, and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710300171.XA CN108229645B (zh) 2017-04-28 2017-04-28 卷积加速和计算处理方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN108229645A CN108229645A (zh) 2018-06-29
CN108229645B true CN108229645B (zh) 2021-08-06

Family

ID=62658071

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710300171.XA Active CN108229645B (zh) 2017-04-28 2017-04-28 卷积加速和计算处理方法、装置、电子设备及存储介质

Country Status (4)

Country Link
US (1) US11429852B2 (zh)
CN (1) CN108229645B (zh)
SG (1) SG11201910024PA (zh)
WO (1) WO2018196863A1 (zh)

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020019174A1 (zh) * 2018-07-24 2020-01-30 深圳市大疆创新科技有限公司 数据存取的方法、处理器、计算机系统和可移动设备
CN108984426B (zh) * 2018-08-03 2021-01-26 北京字节跳动网络技术有限公司 用于处理数据的方法和装置
CN109165723B (zh) * 2018-08-03 2021-03-19 北京字节跳动网络技术有限公司 用于处理数据的方法和装置
CN110826707B (zh) * 2018-08-10 2023-10-31 北京百度网讯科技有限公司 应用于卷积神经网络的加速方法和硬件加速器
CN109343826B (zh) * 2018-08-14 2021-07-13 西安交通大学 一种面向深度学习的可重构处理器运算单元
CN110770763A (zh) * 2018-10-08 2020-02-07 深圳市大疆创新科技有限公司 数据存储的装置、方法、处理器和可移动设备
CN111124626A (zh) * 2018-11-01 2020-05-08 北京灵汐科技有限公司 一种众核系统及其数据处理方法和处理装置
CN111258653B (zh) * 2018-11-30 2022-05-24 上海寒武纪信息科技有限公司 原子访存方法、存储介质、计算机设备、装置和系统
CN109558329A (zh) * 2018-12-10 2019-04-02 广东浪潮大数据研究有限公司 一种程序检测方法、装置、设备及可读存储介质
CN109816093B (zh) * 2018-12-17 2020-12-04 北京理工大学 一种单路式卷积实现方法
CN109800867B (zh) * 2018-12-17 2020-09-29 北京理工大学 一种基于fpga片外存储器的数据调用方法
CN109740732B (zh) * 2018-12-27 2021-05-11 深圳云天励飞技术有限公司 神经网络处理器、卷积神经网络数据复用方法及相关设备
CN109948784B (zh) * 2019-01-03 2023-04-18 重庆邮电大学 一种基于快速滤波算法的卷积神经网络加速器电路
CN109919310B (zh) * 2019-01-15 2021-05-18 中国科学院信息工程研究所 一种面向深度学习训练任务的gpu内存优化方法及系统
CN110032538B (zh) * 2019-03-06 2020-10-02 上海熠知电子科技有限公司 一种数据读取系统和方法
CN111832713A (zh) * 2019-04-19 2020-10-27 北京灵汐科技有限公司 一种基于行缓冲Linebuffer的并行计算方法及计算设备
CN111950718B (zh) * 2019-05-16 2021-12-07 北京知存科技有限公司 利用存算一体芯片实现递进式cnn运算的方法
CN110276444B (zh) * 2019-06-04 2021-05-07 北京清微智能科技有限公司 基于卷积神经网络的图像处理方法及装置
CN110390384B (zh) * 2019-06-25 2021-07-06 东南大学 一种可配置的通用卷积神经网络加速器
CN112306555A (zh) * 2019-07-30 2021-02-02 北京百度网讯科技有限公司 并行提取多个卷积窗中的图像数据的方法、装置、设备以及计算机可读存储介质
CN110704019B (zh) * 2019-08-26 2020-12-22 深圳芯英科技有限公司 数据缓存器及数据读取方法
CN110673786B (zh) 2019-09-03 2020-11-10 浪潮电子信息产业股份有限公司 数据缓存的方法和装置
CN110766133B (zh) * 2019-09-18 2020-12-25 开放智能机器(上海)有限公司 嵌入式设备中的数据处理方法、装置、设备和存储介质
US11423644B1 (en) * 2019-09-19 2022-08-23 Ambarella International Lp Hardware efficient RoI align
WO2021092941A1 (zh) * 2019-11-15 2021-05-20 深圳市大疆创新科技有限公司 感兴趣区域-池化层的计算方法与装置、以及神经网络系统
CN110991609B (zh) * 2019-11-27 2023-12-26 天津大学 用于数据传输的行缓存器
US11372644B2 (en) * 2019-12-09 2022-06-28 Meta Platforms, Inc. Matrix processing instruction with optional up/down sampling of matrix
CN113052291B (zh) * 2019-12-27 2024-04-16 上海商汤智能科技有限公司 数据处理方法和装置
CN111176582A (zh) * 2019-12-31 2020-05-19 北京百度网讯科技有限公司 矩阵存储方法、矩阵访问方法、装置和电子设备
US20210357748A1 (en) * 2020-05-14 2021-11-18 Samsung Electronics Co., Ltd. Hierarchical weight preprocessing for neural network accelerator
CN111899147B (zh) * 2020-06-16 2022-08-09 北京大学 一种卷积核计算加速器及卷积核计算方法
CN112257859A (zh) * 2020-10-30 2021-01-22 地平线(上海)人工智能技术有限公司 特征数据处理方法及装置、设备、存储介质
CN112396165A (zh) * 2020-11-30 2021-02-23 珠海零边界集成电路有限公司 用于卷积神经网络的运算装置和方法
US20220223201A1 (en) * 2021-01-11 2022-07-14 Micron Technology, Inc. Caching Techniques for Deep Learning Accelerator
CN112862091B (zh) * 2021-01-26 2022-09-27 合肥工业大学 一种基于快速卷积的资源复用型神经网络硬件加速电路
CN112966729B (zh) * 2021-02-26 2023-01-31 成都商汤科技有限公司 一种数据处理方法、装置、计算机设备及存储介质
CN112949845B (zh) * 2021-03-08 2022-08-09 内蒙古大学 一种基于fpga的深度卷积神经网络的加速器
CN112686377B (zh) 2021-03-18 2021-07-02 北京地平线机器人技术研发有限公司 利用卷积硬件对特征数据进行反卷积处理的方法和装置
CN113255898B (zh) * 2021-06-16 2022-08-02 合肥工业大学 基于Winograd算法的卷积神经网络硬件加速器及计算方法
CN113448624B (zh) * 2021-07-15 2023-06-27 安徽聆思智能科技有限公司 数据存取方法及装置、系统、ai加速器
CN113642724B (zh) * 2021-08-11 2023-08-01 西安微电子技术研究所 一种高带宽存储的cnn加速器
CN114758209B (zh) * 2022-06-14 2022-09-02 深圳思谋信息科技有限公司 卷积结果获取方法、装置、计算机设备及存储介质
CN116861149B (zh) * 2023-09-05 2024-01-09 之江实验室 卷积运算的优化方法、装置及处理器

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105956660A (zh) * 2016-05-16 2016-09-21 浪潮集团有限公司 一种用于实时图像识别的神经元网络芯片实现方法
CN106228240A (zh) * 2016-07-30 2016-12-14 复旦大学 基于fpga的深度卷积神经网络实现方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8363535B2 (en) * 2003-04-28 2013-01-29 Marvell International Ltd. Frequency domain echo and next cancellation
CN102339386B (zh) * 2011-08-16 2013-08-28 杭州晟元芯片技术有限公司 一种嵌入式指纹特征提取加速方法
CN105869117B (zh) * 2016-03-28 2021-04-02 上海交通大学 一种针对深度学习超分辨率技术的gpu加速方法
US10891538B2 (en) * 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
CN106547885B (zh) * 2016-10-27 2020-04-10 桂林电子科技大学 一种文本分类系统及方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105956660A (zh) * 2016-05-16 2016-09-21 浪潮集团有限公司 一种用于实时图像识别的神经元网络芯片实现方法
CN106228240A (zh) * 2016-07-30 2016-12-14 复旦大学 基于fpga的深度卷积神经网络实现方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
"Optimizing Loop Operation and Dataflow in FPGA Acceleration of Deep Convolutional Neural Networks";Yufei Ma et al.;《FPGA "17 Proceedings of the 2017 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays》;20170224;第45-54页 *
"Zero and data reuse-aware fast convolution for deep neural networks on GPU";Hyunsun Park et al.;《2016 International Conference on Hardware/Software Codesign and System Synthesis (CODES+ISSS)》;20161124;第1-10页 *
Hyunsun Park et al.."Zero and data reuse-aware fast convolution for deep neural networks on GPU".《2016 International Conference on Hardware/Software Codesign and System Synthesis (CODES+ISSS)》.2016,第1-10页. *
Yufei Ma et al.."Optimizing Loop Operation and Dataflow in FPGA Acceleration of Deep Convolutional Neural Networks".《FPGA "17 Proceedings of the 2017 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays》.2017,第45-54页. *

Also Published As

Publication number Publication date
US11429852B2 (en) 2022-08-30
US20200057938A1 (en) 2020-02-20
CN108229645A (zh) 2018-06-29
WO2018196863A1 (zh) 2018-11-01
SG11201910024PA (en) 2019-11-28

Similar Documents

Publication Publication Date Title
CN108229645B (zh) 卷积加速和计算处理方法、装置、电子设备及存储介质
US11698773B2 (en) Accelerated mathematical engine
US11720523B2 (en) Performing concurrent operations in a processing element
CN108416327B (zh) 一种目标检测方法、装置、计算机设备及可读存储介质
CN111445012B (zh) 一种基于fpga的分组卷积硬件加速器及其方法
US10768856B1 (en) Memory access for multiple circuit components
CN111898733B (zh) 一种深度可分离卷积神经网络加速器架构
US11709911B2 (en) Energy-efficient memory systems and methods
CN112219210B (zh) 信号处理装置和信号处理方法
US20230026006A1 (en) Convolution computation engine, artificial intelligence chip, and data processing method
CN111047008B (zh) 一种卷积神经网络加速器及加速方法
CN109726822B (zh) 运算方法、装置及相关产品
CN111523652A (zh) 处理器及其数据处理方法、摄像装置
CN111796796A (zh) 基于稀疏矩阵乘法的fpga存储方法、计算方法、模块和fpga板
WO2023065983A1 (zh) 计算装置、神经网络处理设备、芯片及处理数据的方法
CN109993293B (zh) 一种适用于堆叠式沙漏网络的深度学习加速器
WO2022151779A1 (zh) 卷积运算的实现方法、数据处理方法及装置
CN111626410B (zh) 一种稀疏卷积神经网络加速器及计算方法
CN115758054A (zh) 一种卷积计算方法、数据处理方法、芯片及电子设备
CN116227599A (zh) 一种推理模型的优化方法、装置、电子设备及存储介质
CN116888591A (zh) 一种矩阵乘法器、矩阵计算方法及相关设备
US20230221994A1 (en) Dynamic uncompression for channel-separable operation in neural network
CN112230884B (zh) 目标检测硬件加速器及加速方法
CN116108902A (zh) 采样操作实现系统、方法、电子设备及存储介质
CN112116683A (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