CN117808050A - 一种支持任意尺寸与形状卷积核计算的架构 - Google Patents

一种支持任意尺寸与形状卷积核计算的架构 Download PDF

Info

Publication number
CN117808050A
CN117808050A CN202410036818.2A CN202410036818A CN117808050A CN 117808050 A CN117808050 A CN 117808050A CN 202410036818 A CN202410036818 A CN 202410036818A CN 117808050 A CN117808050 A CN 117808050A
Authority
CN
China
Prior art keywords
data
calculation
input
convolution
pixel data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202410036818.2A
Other languages
English (en)
Inventor
林军
王苗欣
吴晓
王中风
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
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 Nanjing University filed Critical Nanjing University
Priority to CN202410036818.2A priority Critical patent/CN117808050A/zh
Publication of CN117808050A publication Critical patent/CN117808050A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Complex Calculations (AREA)

Abstract

本发明提供一种支持任意尺寸与形状卷积核计算的架构,包括用于获取、预存和拼接输入像素数据,以及获取权重数据和层参数的输入数据准备部分,所述权重数据可能涉及将卷积核离线分割或拆分成若干子核;用于对输入数据准备部分获取的像素数据进行灵活排列的Z字形数据流数据准备部分,其中横向数据移动模块与纵向数据移动模块互相解耦,使架构具有支持任意尺寸与形状卷积核计算的灵活性,而不会产生冗余的计算和数据传输;用于根据层参数将目标像素数据与目标权重数据在乘累加阵列中进行卷积的计算部分;用于对输出像素进行排列和存储的输出数据重排与存储部分;用于对上述所有部分进行控制以实现逐层计算的控制部分,尤其是对不同子核计算的控制。

Description

一种支持任意尺寸与形状卷积核计算的架构
技术领域
本发明涉及深度学习技术领域,特别涉及一种支持任意尺寸与形状卷积核计算的架构。
背景技术
卷积神经网络广泛应用于各种计算机视觉任务。近年来,受视觉变形器关键操作多头自注意层的启发,卷积神经网络引入了大核卷积来扩展其接受域,使其能够捕获输入数据中的全局模式并获得更高的性能。例如,先驱之一的RepLKNet采用31×31卷积核来证明大核卷积在提高检测精度方面的有效性,在一些下游任务上的性能结果甚至超过了SwinTransformer。由于大卷积核的高计算复杂度,又提出了一些网络结构采用非对称卷积来减少计算量,例如Inception v2,v3,v4,以及EACNet,ACR2UNet等。此外,神经结构搜索(NeuralArchitecture Search,NAS)技术用于为各种深度学习任务(如图像分割)寻找最优神经网络架构,大核卷积和非对称卷积也经常出现在搜索出的网络中。大卷积核也广泛适用于某些应用场景,例如心电图检测、生物医学分割、遥感等。非对称卷积核也广泛用于音频文本处理等领域。然而,直接使用支持小核(3×3)神经网络的硬件加速器支持大核卷积或非对称卷积,可能会引入稀疏从而导致低的计算效率。同时由于窗口滑动引起的后续计算所需的重复数据通常缓冲在片上存储器中,当卷积核尺寸增加时,这会产生显著的存储开销。因此,一个能够高效支持多尺度,任意形状的卷积核的卷积计算并且能够减少片上存储开销的硬件架构是迫切需要的。
为了高效地实现对任意尺寸和形状卷积核网络的支持,现有的技术可以分为以下几种:
(1)大卷积核拆分补零的硬件结构。该结构将大卷积核拆分成若干3×3的子核,然后运用针对3×3卷积定制设计的加速器直接支持。由于卷积核尺寸不一定可以完整拆分成若干3×3的子核,拆分后的非对称核需要通过插入零元素以确保工作负载平衡,这导致了不可接受的计算效率低下。
(2)设计支持特定尺寸大核或者非对称核的专用硬件结构。通过将大卷积核拆分成若干某固定尺寸的子核(固定尺寸根据所支持网络需求确定,拆分后的子核可以是1×k和k×1的非对称卷积核,或者是k×k的某个特定尺寸的卷积核,k通常是需要支持的所有大核尺寸的公约数),然后通过设计基本单元计算子核,进一步将基本单元进行不同的硬件连接来实现对大核支持。然而,由于其固定的硬件架构,这些设计能支持的卷积核尺寸不够灵活,并且随着支持卷积核尺寸种类的增加,硬件复杂度增大。
(3)采用行缓冲区来进行重叠数据存储的硬件架构。该类硬件架构当扩展对大核卷积的支持时,由于缓冲区大小与内核大小成比例,会导致相当大的资源开销。
(4)可以拓展卷积核尺寸的脉动阵列。因为过去主要支持3×3,5×5的卷积核尺寸,导致相应脉动阵列设计比较固定,难以拓展,或者拓展的额外硬件开销很大。
除了上述提到的技术方案本身的缺点,现有的卷积核分割架构,如将二维大核卷积直接分解为一维卷积,还会导致准确率显著下降。
发明内容
本发明提供一种支持任意尺寸与形状卷积核计算的架构,以解决现有技术无法高效支持任意尺寸和形状的卷积核计算的问题。
所述架构包括:
输入数据准备部分,所述输入数据准备部分用于获取输入特征图的一个像素数据块,并在每个周期读取Z字形数据流所需要的输入像素数据,对于无法在一个周期内读取的像素数据进行预存与拼接处理,最终输出预备像素数据;获取内核映射的权重数据,最终输出目标权重数据;获取层参数数据,以配置卷积层计算过程中所需要的参数信息,例如输入特征图尺寸、卷积核尺寸、步长、输入像素在输入缓冲区中的读取起始地址;
Z字形数据流数据准备部分,所述Z字形数据流数据准备部分用于对所述输入数据准备部分获取的像素数据进行灵活的Z字形数据流排列,所述Z字形数据流排列包括对所述预备像素数据进行横向数据移动处理、纵向数据移动处理或者直接传输,输出目标像素数据;
计算部分,所述计算部分用于根据所述层参数将所述目标像素数据与所述目标权重数据在乘累加阵列中进行卷积计算,得到输出像素数据;
输出数据重排与存储部分,用于将所述计算部分产生的输出像素数据按照下一层计算的数据读取需求重新排列并存储,然后送回片外;
控制部分,所述控制部分用于对所述输入数据准备部分、所述Z字形数据流数据准备部分、所述计算部分和所述输出数据重排与存储部分进行控制。
优选的,所述输入数据准备部分包括:
输入缓冲区,所述输入缓冲区用于从片外读取并在片上存储所述输入特征图的像素数据块,该像素数据块的数据量由循环平铺变量决定;其中,循环平铺变量表达了传输、缓冲数据的大小;
输入像素读取模块,所述输入像素读取模块用于生成Z字形数据流每个周期所需的输入像素数据在输入缓冲区中的地址,根据地址从所述输入缓冲区中读取对应的输入像素数据。
优选的,所述输入数据准备部分还包括:
预备寄存器,所述预备寄存器用于存储从输入缓冲区中读取的输入像素数据;当所述输入像素数据满足Z字形数据流单个周期的数据需求时,则直接输出作为预备像素数据,否则,将部分像素数据预取,在需要对应数据的周期和所读新地址的其他所需数据拼接,并共同作为预备像素数据送到所述预备寄存器中,以满足Z字形数据流单个周期的数据需求。
优选的,所述输入数据准备部分还包括:
卷积层参数缓冲区,所述卷积层参数缓冲区用于获取所述输入像素数据对应的卷积层参数;
权重缓冲区,所述权重缓冲区用于存储所述输入像素数据对应的权重数据,将所述权重数据发送给所述计算部分;所述权重数据在片外的存储顺序由Z字形数据流的计算需求决定,根据卷积层参数中的步长与卷积核尺寸的不同进行不同的离线处理;当步长为1时,直接对卷积核中的元素进行Z字形排列存储,否则,将卷积核根据输入像素与权重数据的映射关系进行拆分,然后将拆分得到的每个子核分别进行Z字形排列,子核间的排列顺序由Z字形数据流推导获得,以满足每个周期计算对数据的需求;当卷积核尺寸小于2×Pox时,直接对卷积核中的元素进行Z字形排列存储,否则,将卷积核根据计算并行度进行分割,然后将分割得到的每个子核分别进行Z字形排列;Pox代表在输出特征图行方向的计算并行度;排列后的权重数据按照符合计算要求的顺序存储在片外存储中,等待片上权重缓冲区的读取。
优选的,所述Z字形数据流数据准备部分包括第一多路选择器,所述第一多路选择器被配置为:
根据Z字形数据流的数据复用规律,将经过横向数据移动模块、纵向数据移动模块或者直接传输操作的所述预备像素数据传输到计算部分;所述Z字形数据流的数据复用规律包括横向数据复用规律以及纵向数据复用规律,所述横向数据复用规律指的是,由于在输入特征图的行和列维度并行,权重数据按照时间顺序下Z字形数据流规律参与计算,按照横向顺序计算时,多个并行处理单元的输入像素在横向维度上将产生重叠,重叠的数据可以通过横向移动得到复用;所述纵向数据复用规律指的是,按照纵向顺序计算时,多个并行处理单元的输入像素在纵向维度上将产生重叠,重叠的数据可以通过纵向移动得到复用;
当下一个周期计算所需的权重数据与当前权重数据位于卷积核的同一行时,根据卷积窗口的横向数据复用规律,将经过横向数据移动模块的所述预备像素数据传输给计算部分的对应端口;当下一个周期计算所需的权重数据与当前权重数据位于卷积核的不同行时,根据Z字形数据流中卷积窗口的纵向数据复用规律,将经过纵向数据移动模块的所述预备像素数据传输给计算部分的对应端口;上述两种操作伴随新数据的读取需求,通过将来自所述输入数据准备部分的所述预备像素数据不作处理直接传输来实现,所读新数据和经过横向数据移动模块或纵向数据移动模块的数据拼接,共同组成单个周期计算部分所需的所有输入数据。
优选的,所述Z字形数据流数据准备部分还包括:
横向数据移动模块,所述横向数据移动模块用于从所述输入数据准备部分中获取预备像素数据,判断所述预备像素数据是否满足Z字形数据流横向数据复用规律,若满足,则将所述预备像素数据进行横向数据移动处理;
纵向数据移动模块,所述纵向数据移动模块用于从所述输入数据准备部分中获取预备像素数据,判断所述预备像素数据是否满足Z字形数据流纵向数据复用规律,若满足,则将所述预备像素数据进行纵向数据移动处理。
优选的,所述计算部分包括:
计算模块,所述计算模块中内置有乘累加阵列,所述乘累加阵列的规模由循环展开变量决定,在本发明中为Pox×Poy×Pof;其中,Pox,Poy,Pof分别代表在输出特征图行、列和输出通道方向的计算并行度;所述计算模块用于根据卷积层参数将所述目标像素数据与所述目标权重数据在乘累加阵列中进行卷积计算,得到输出像素数据。
优选的,所述输出数据重排与存储部分包括:
输出数据排列模块,所述输出数据排列模块用于按照下一层计算的数据读取需求对所述输出像素数据进行重新排列;
输出缓冲区,所述输出缓冲区用于存储所述输出数据排列模块重排后的输出像素数据。
优选的,所述控制部分包括:
逐层控制模块,所述逐层控制模块用于对所述输入数据准备部分、所述Z字形数据流数据准备部分、所述计算部分和所述输出数据重排与存储部分进行控制,以实现逐层的卷积计算;
其中,逐层控制模块包含子核控制模块,所述子核控制模块,通过控制输入像素以及权重数据的读取顺序,实现在较大的卷积核尺寸和步长情况下,各个子核的数据流依旧满足所述的Z字形数据流规律,从而复用已有的硬件设计。
优选的,所述Z字形数据流数据准备部分的具体实现包括:
将所述预备像素数据发送到对应的寄存器中;
根据卷积计算过程中卷积窗口横向移动的输入像素复用规律,所设计Z字形数据流提供横向数据复用机会,具体来说,将沿输入特征图的行方向并行的预备像素数据在下一个周期赋值给左侧或者右侧相邻的寄存器数组以实现数据重用,赋值的方向由对应的权重数据位于卷积核的行数的奇偶性决定,奇数行则向左侧,偶数行向右侧;
通过引入内核映射拐点处的计算,增加了纵向数据重用机会,将沿输入特征图的列方向并行的预备像素数据在下一个周期赋值给左侧相邻的寄存器数组以实现重用。
本发明提供一种支持任意尺寸与形状卷积核计算的架构,包括用于获取、预存和拼接输入像素数据,以及获取权重数据和层参数的输入数据准备部分,其中所述权重数据可能涉及将卷积核离线分割或拆分成若干子核的操作,以得各个子核的数据流满足所述的Z字形数据流规律,并重用已有的硬件资源;用于对输入数据准备部分获取的像素数据进行灵活排列的Z字形数据流数据准备部分,其中横向数据移动模块与纵向数据移动模块互相解耦,使架构具有支持任意尺寸与形状卷积核计算的灵活性,而不会产生冗余的计算和数据传输;用于根据层参数将目标像素数据与目标权重数据在乘累加阵列中进行卷积的计算部分;用于对输出像素进行排列和存储的输出数据重排与存储部分;用于对上述所有部分进行控制以实现逐层计算的控制部分,尤其是对不同子核计算的控制。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提出的一种支持任意尺寸与形状卷积核计算的架构示意图;
图2为乘累加阵列的示意图;
图3为步长为1时Z字形数据流的示意图;
图4为步长为1时数据调度实例的示意图;
图5为内核映射较大时的卷积核分割策略的示意图;
图6为步长为2时Z字形数据流的示意图;
图7为步长为2时新增子核循环后的卷积循环的示意图;
图8为步长为2时数据调度实例的示意图;
图9为本发明中内核映射元素计算顺序变体的示意图;
图10为卷积循环维度和设计变量的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图10为卷积循环维度和设计变量的示意图。
卷积的主要操作参见图10,它涉及沿核和特征映射的不同维度累积权重和输入像素的乘积。以下部分中涉及的描述维度可以分为三类。首先,特征和核映射的大小由卷积循环维数(N*)表示。其次,缓冲数据的大小由循环平铺变量(T*)决定,这也会影响DRAM访问的延迟。在本发明的设计中,对一整行输入像素和特征映射中的所有输入通道进行缓冲,即Tix=Nix,Tif=Nif(Tix代表沿输入特征图行方向的块尺寸,Nix代表输入特征图行尺寸;Tif代表沿输入特征图通道方向的块尺寸,Nif代表输入特征图通道尺寸),以生成一整行的结果。第三,并行计算由循环展开变量(P*)指导,其中Pox,Poy,Pof分别代表沿输出特征的行,列,通道方向的并行计算数量,在本实施例中分别设为8,8,16。
受快速发展的视觉变形器(Vision Transformers,ViTs)的启发,卷积神经网络(Convolution Neural Network,CNN)引入了多尺度卷积核来扩展其接受域并学习不同层次的细节,使其能够获得更高的性能。同时,部分网络结构为了减少计算量,引入了非对称卷积(卷积核尺寸为1×n或者n×1)。但对于含有多尺度卷积核的网络,由于卷积窗口滑动引起的后续计算所需的重叠数据通常缓冲在片上存储器中,当卷积核尺寸较大时可能产生显著的存储开销,同时对于非对称卷积,现有工作缺乏灵活的支持,从而给含有非对称卷积的神经网络的高效部署带来了巨大挑战。本实施例所解决的问题是,如何设计对任意尺寸与形状卷积核友好的硬件架构,减少尤其当卷积核尺寸较大时引起的大量重叠数据存储或者数据传输需求,从而节省片上存储开销或者减少数据传输延迟,同时将含有大核与非对称核的网络在现场可编程逻辑门阵列(Field Programmable GateArray,FPGA)平台上高效实现。
针对现有工作主要采用将大核切分成小核(3×3)的方法支持大核卷积计算,可能会引入稀疏从而使得计算效率低下的问题,本实施例设计了一个支持任意尺寸与形状卷积核计算的硬件架构。具体来说,该架构中循环展开变量没有在内核映射窗口内并行,因此硬件利用率不会受卷积核尺寸的影响。此外,由于卷积核增大会引起大量重叠数据的片上存储或者数据传输需求,本发明设计了新颖的Z字形数据流,仅通过改变卷积核窗口的元素计算顺序引入卷积核拐点计算,增加了纵向数据复用机会。其中不同权重数据计算所需的像素,可以通过横向或者纵向数据移动直接复用前一周期相邻寄存器中输入像素,从而减少了用于存储重叠数据的硬件资源开销或者数据传输延迟,尤其是在卷积核尺寸较大时,效果更加明显。同时,由于横向与纵向数据移动互相解耦,可以对任意尺寸和任意形状的卷积核进行高效的支持,而不引入额外的计算和数据传输。对于步长不为1的情况,将卷积核拆分成不同的子核,子核对应数据流依然满足Z字形数据流的规律,能够复用已有的硬件设计。通过控制子核的计算,将不同子核的计算结果累计就可以得到最终的输出像素数据。
图1为本发明提出的一种支持任意尺寸与形状卷积核计算的架构示意图。
所述架构主要分为五个部分:控制部分500、输入数据准备部分100、Z字形数据流数据准备部分200、计算部分300和与输出数据重排与存储部分400。
控制部分500负责卷积神经网络逐层计算所需的所有控制,特别的,控制部分500中包括逐层控制模块510,其中逐层控制模块510中包含子核控制模块511,该模块通过控制输入像素以及权重数据的读取顺序,实现在较大的卷积核尺寸和步长情况下,各个子核的数据流依旧满足所述的Z字形数据流规律,同时能够复用已有的硬件设计,节省资源开销。
输入数据准备部分100包括输入缓冲区110、输入像素读取模块120、预备寄存器130、卷积层参数缓冲区140以及权重缓冲区150。输入像素读取模块120生成Z字形数据流每个周期所需数据对应的地址,根据所述数据地址在输入缓冲区110中读取对应地址的数据。该部分数据需要判断是否能够提供Z字形数据流每个周期所需要的全部输入像素数据,对于无法在一个周期内读取的像素数据进行预存与拼接处理,最终输出预备像素数据,该过程在预备寄存器130中进行。计算过程中所需的卷积层参数由卷积层参数缓冲区140获取。计算所需的权重数据由权重缓冲区150获取,根据卷积层参数中的步长与卷积核尺寸的不同,对卷积核具有不同的离线处理方式。当步长为1时,直接对卷积核中的元素进行Z字形排列存储,否则,需要将卷积核根据输入像素与权重数据的映射关系进行拆分,然后将拆分得到的每个子核分别进行Z字形排列,子核间的排列顺序由Z字形数据流推导获得,以满足每个周期计算对数据的需求;当卷积核尺寸小于2×Pox时,直接对卷积核中的元素进行Z字形排列存储,否则,需要将卷积核根据计算并行度进行分割,分割得到的第一块子核尺寸为并行度的整数倍,然后将分割得到的每个子核分别进行Z字形排列;排列后的权重数据按照符合计算要求的顺序存储在片外存储中,等待片上权重缓冲区150的读取。权重数据的排列过程均离线完成,然后根据数据流对权重的需求依次读取不同子核的权重数据给计算部分300。
Z字形数据流数据准备部分200包括横向数据移动模块210和纵向数据移动模块220。根据Z字形数据流的数据复用规律,将经过横向数据移动模块210、纵向数据移动模块220或者直接传输操作的所述预备像素数据传输到计算部分300;
所述Z字形数据流的数据复用规律包括横向数据复用规律以及纵向数据复用规律,所述横向数据复用规律指的是,由于在输入特征图的行和列维度并行,权重数据按照时间顺序下Z字形数据流规律参与计算,按照横向顺序计算时,多个并行处理单元的输入像素在横向维度上将产生重叠,重叠的数据可以通过横向移动得到复用;所述纵向数据复用规律指的是,按照纵向顺序计算时,多个并行处理单元的输入像素在纵向维度上将产生重叠,重叠的数据可以通过纵向移动得到复用;
当下一个周期计算所需的权重数据与当前权重数据位于卷积核的同一行时,即所需的权重数据不位于卷积核的拐点位置时,根据卷积窗口的横向数据复用规律,将经过横向数据移动模块210的所述预备像素数据传输给计算部分300的对应端口;当下一个周期计算所需的权重数据与当前权重数据位于卷积核的不同行时,即所需的权重数据位于卷积核的拐点位置时,根据Z字形数据流中卷积窗口的纵向数据复用规律,将经过纵向数据移动模块220的所述预备像素数据传输给计算部分300的对应端口;上述两种操作伴随新数据的读取需求,通过将来自所述输入数据准备部分100的所述预备像素数据不作处理直接传输来实现,所读新数据和经过横向数据移动模块210或纵向数据移动模块220的数据拼接,共同组成单个周期计算部分300所需的所有输入数据。
横向数据移动模块210,所述横向数据移动模块210用于从所述输入数据准备部分100中获取预备像素数据,判断所述预备像素数据是否满足Z字形数据流横向数据复用规律,若满足,则将所述预备像素数据进行横向数据移动处理;
纵向数据移动模块220,所述纵向数据移动模块220用于从所述输入数据准备部分100中获取预备像素数据,判断所述预备像素数据是否满足Z字形数据流纵向数据复用规律,若满足,则将所述预备像素数据进行纵向数据移动处理。
计算部分300包括计算模块310。所述计算模块310中内置有尺寸为Pox×Poy×Pof的乘累加阵列;其中,Pox,Poy,Pof分别代表在输出特征图行、列和输出通道方向的计算并行度;所述计算模块用于根据卷积层参数将所述目标像素数据与所述目标权重数据在乘累加阵列中进行卷积计算,得到输出像素数据。
输出数据重排与存储部分400包括输出数据排列模块410以及输出缓冲区420。卷积计算结果在输出数据排列模块410中排列以满足下一层计算的数据读取需求,然后存入输出缓冲区420,最后写到片外。
实施例一:步长为1时Z字形硬件数据流设计。
图3为步长为1时Z字形数据流的示意图。
需要说明的是,图3以3×3的卷积核为例,PE代表处理单元(ProcessingElement)。在本发明的硬件架构中,采用乘累加单元作为处理单元,在一个输入特征映射(Pox,Poy)和多个内核映射(Pof)内并行计算。
图3展示了详细操作,由于没有在内核映射内部进行并行计算,权重和相应的输入数据的乘法按照给定的时间顺序进行。具体的数据安排可以分为两部分,描述如下:
横向数据重用:以PE0i(0i=00,01,02,03)前三个周期的计算数据流为例进行详细介绍。首先,四个输入像素从输入缓冲区被加载到寄存器,然后发送到相应的PE0i。这些像素在下一个周期被左边相邻的寄存器数组重用,而每个寄存器数组中最右边的一个开始从缓冲区读取输入像素,如图3中黑色填充所示。在随后的周期中,重复此操作,直到内核映射中一行数据的计算完成,对于图中卷积核尺寸为3×3则在第三个周期完成该部分计算。当计算内核映射中的偶数行时,输入像素执行与上述规律镜像的操作,即由右侧相邻的寄存器数组重用,新的输入像素被读取到寄存器数组中最左边的一个。
纵向数据重用:本发明提出的Z字形数据流通过引入核映射中拐点的计算,提供了新的数据重用机会,如图3右侧图中黑框与黑色加粗箭头所示。具体来说,在第四个周期中,上一个周期发送到PE1i的像素依次被左侧相邻的寄存器数组重用,即发送到对应的PE0i。同样PE2i的像素被发送到PE1i,PE3i的像素被发送到PE2i,此时,四个新的像素从输入缓冲区输入到最右边的寄存器数组中,如图中黑色填充所示。
图2为乘累加阵列的示意图。
需要说明的是,图2中的MAC代表乘累加单元(Multiply-and-accumulate units)。
乘累加阵列的设计由所提的Z字形数据流和循环展开变量指导。它由Pox×Poy×Pof个乘累加单元组成,每个乘累加单元由一个乘法器和一个累加器组成。由于在本发明的架构中,对所有输入通道进行了完全缓冲,因此部分和在乘累加单元内部被消耗,直到获得最终结果。输入缓冲区的数据在Pof个乘累加单元中共享,权重缓冲区的数据Pox×Poy个乘累加单元中共享。计算结果经过输出数据重排模块送到输出缓冲区中。
图4为步长为1时数据调度实例的示意图。
需要说明的是,图4以3×3卷积核为例,展示具体的硬件数据流调度。
图4中最上方展示输入特征图中不同位置的像素(命名规则为R0C,R代表行,C代表列,例如102代表第1行第2列的像素数据)与内核映射中不同位置的权重(K1、K2等);中间部分展示不同周期PE中的具体数据流安排,其中不同的Ki(此处i=1-9,i为正整数)在每个周期被PE00-PE33中的对应输入像素复用。PE中的输入像素按照Z字形数据流规律随时间进行流动,每个周期需要读取的新数据在图4中被加粗显示;最下方为输入缓冲区,其尺寸由循环展开变量决定,左侧为数据地址,每个地址读取Pox×Poy的数据,其中Pox是每个缓冲区的宽度,Poy是缓冲区的数量。
第一个周期,从输入缓冲区中读取地址0的数据,经寄存器送到计算单元(图4中PE00-PE33);
第二个周期,从输入缓冲区中读取地址1的数据,经寄存器送到计算单元。同时将该地址的数据存入预备寄存器1中;
第三个周期,读取预备寄存器1的数据,经寄存器送到计算单元。同时从输入缓冲区中读取地址2的数据,存入预备寄存器2中;
第四个周期,从输入缓冲区中读取地址3(为了得到505和506),并和预备寄存器2中的数据(提前存好的503和504)拼接,经寄存器送到计算单元;
第五个周期,从输入缓冲区中读取地址0(为了得到202,302和402),并和预备寄存器2中的数据(提前存好的502)拼接,经寄存器送到计算单元;
第六个周期,从输入缓冲区中读取地址0(为了得到201,301和401),并和预备寄存器2中的数据(提前存好的501)拼接,经寄存器送到计算单元;
第七个周期,从输入缓冲区中读取地址2的数据经寄存器送到计算单元;
第八个周期,从输入缓冲区中读取地址3(为了得到505和605),并和预备寄存器1中的数据(提前存好的305和405)拼接,经寄存器送到计算单元;
第九个周期,从输入缓冲区中读取地址3(为了得到506和606),并和预备寄存器1中的数据(提前存好的306和406)拼接,经寄存器送到计算单元;
注意上述周期中经过拼接操作后会根据计算需要进行数据选择,因此即使第八和第九个周期看起来在做相同的操作,但是送给计算单元的数据是不同的。
如上述实例所示,计算所需的少量数据可能会被预先存储在预备寄存器中,以避免读取冲突。得益于所提出的Z字形数据流提供的数据重用机会,本发明不需要线性缓冲区进行重叠数据的存储,从而显著减少了存储开销;同时,由于横向与纵向数据复用的实现互相解耦,本发明具有支持任意尺寸和形状卷积核计算的灵活性,而不会产生冗余的计算与数据传输。
图5为内核映射较大时的卷积核分割策略的示意图。
需要说明的是,图5中Nkx_sub1代表每个缓冲区内每个地址存储数据数量。
较大的内核映射(Nkx>2×Pox)需要在本发明的架构中进行分割,以避免额外的资源消耗。本发明将第一个子核的大小设置为循环展开变量的整数倍,例如图5中的Nkx_sub1=Pox,以确保其他子核计算所需的相应输入像素可以准确地从不同并行缓冲区的相同地址获得,而不会产生读冲突。分割后的每个子核可以互不干扰的按照Z字形数据流的规律进行数据流动。
实施例二:步长为2时Z字形硬件数据流设计。
图6为步长为2时Z字形数据流的示意图。
需要说明的是,图6是以3×3卷积核为例,图中PE代表处理单元(ProcessingElement);Nkg代表卷积核拆分后子核的数目。
对于步长为2的情况,需要按照如图6所示对卷积核进行拆分,内核映射中的元素拆分成如图所示的子核映射,每一个子核映射中元素的计算顺序依旧按照Z字形数据流进行处理(如果拆分后的卷积核尺寸较小可能不是一个完整的Z字)。由于架构的灵活性,拆分过程中产生的非对称卷积核可以在不增加冗余计算的前提下被高效支持。此时每个子核可以互不干扰的按照步长为1时的规律进行数据流动,因此可以复用步长为1时的硬件逻辑。
图7为步长为2时新增子核循环后的卷积循环的示意图。
需要说明的是,图7中Nkx,Nky代表子核窗口尺寸,Nkg表示子核数目,Nif表示输入通道总数,Nox,Noy代表输出特征图的行列尺寸,Nof表示输出通道总数。
具体的,本发明的卷积循环展开在Kx,Ky之外增加了Kg来遍历由于切割或者拆分产生的不同的子核映射。由于只是打乱了内核映射中元素的计算顺序,并不会对结果产生影响。具体来说,最终的卷积结果由不同子核的计算结果累计得到。另外,根据缓冲区能够同时提供的数据量是否能够满足计算需求来决定不同子核之间的计算顺序,本发明中的计算顺序可以保证每个周期并行计算所需所有数据被正常提供。
图8为步长为2时数据调度实例的示意图。
需要说明的是,图8是以5×5卷积核为例展示具体的硬件数据流调度,这里选择5×5是为了子核内部的元素计算顺序可以呈现完整的Z字以便于理解。
图8最上方展示输入特征图中不同位置的像素(命名规则为R0C,R代表行,C代表列,例如102代表第1行第2列的像素数据)与内核映射中不同位置的权重(K1、K2等)。由于步长为2,此处需要对卷积核进行拆分,拆分后每个子核如箭头下方所示。中间部分展示不同周期PE中的具体数据流安排,其中不同的Ki(此处i=1-25,i为正整数)在每个周期被PE00-PE33中的输入像素复用,PE中的输入像素随时间的流动规律针对每个子核被分成四部分,每个部分依旧满足Z字形数据流规律。每个周期需要读取的新数据在图8中被加粗显示,最终的计算结果为每个子核的计算结果的累计。最下方为输入缓冲区,左侧为地址,由于步长为2,每隔一个像素才有一个需要的输入数据,因此每个地址需要读取2×Pox×Poy的数据,其中2×Pox是每个缓冲区的宽度,Poy是缓冲区的数量。
第一个周期,从输入缓冲区中读取地址0的数据,经寄存器送到计算单元(图8中PE00-PE33);
第二个周期,从输入缓冲区中读取地址1的数据,经寄存器送到计算单元。同时将该地址的数据存入预备寄存器1中;
第三个周期,读取预备寄存器1的数据,经寄存器送到计算单元。同时从输入缓冲区中读取地址4的数据,存入预备寄存器2中;
第四个周期,从输入缓冲区中读取地址5(为了得到909和911),并和预备寄存器2中的数据(提前存好的905和907)拼接,经寄存器送到计算单元;
第五个周期,从输入缓冲区中读取地址0(为了得到303,503和703),并和预备寄存器2中的数据(提前存好的903)拼接,经寄存器送到计算单元;
第六个周期,从输入缓冲区中读取地址0(为了得到301,501和701),并和预备寄存器2中的数据(提前存好的901)拼接,经寄存器送到计算单元;
第七个周期,从输入缓冲区中读取地址4的数据经寄存器送到计算单元;
第八个周期,从输入缓冲区中读取地址5(为了得到909和1109),并和预备寄存器1中的数据(提前存好的509和709)拼接,经寄存器送到计算单元;
第九个周期,从输入缓冲区中读取地址5(为了得到911和1111),并和预备寄存器1中的数据(提前存好的511和711)拼接,经寄存器送到计算单元;
第十个周期,从输入缓冲区中读取地址0的数据,经寄存器送到计算单元;
第十一个周期,读取预备寄存器1的数据,经寄存器送到计算单元;
第十二个周期,从输入缓冲区中读取地址5(为了得到910),并和预备寄存器2中的数据(提前存好的904,906和908)拼接,经寄存器送到计算单元;
第十三个周期,从输入缓冲区中读取地址0(为了得到302,502和702),并和预备寄存器2中的数据(提前存好的902)拼接,经寄存器送到计算单元;
第十四个周期,从输入缓冲区中读取地址4的数据经寄存器送到计算单元;
第十五个周期,从输入缓冲区中读取地址5(为了得到910和1110),并和预备寄存器1中的数据(提前存好的510和710)拼接,经寄存器送到计算单元;
第十六个周期,从输入缓冲区中读取地址2的数据经寄存器送到计算单元;
第十七个周期,从输入缓冲区中读取地址3的数据,经寄存器送到计算单元。同时将该地址的数据存入预备寄存器1中;
第十八个周期,读取预备寄存器1的数据,经寄存器送到计算单元。同时从输入缓冲区中读取地址6的数据,存入预备寄存器2中;
第十九个周期,从输入缓冲区中读取地址7(为了得到1009和1011),并和预备寄存器2中的数据(提前存好的1005和1007)拼接,经寄存器送到计算单元;
第二十个周期,从输入缓冲区中读取地址2(为了得到403,603和803),并和预备寄存器2中的数据(提前存好的1003)拼接,经寄存器送到计算单元;
第二十一个周期,从输入缓冲区中读取地址2(为了得到401,601和801),并和预备寄存器2中的数据(提前存好的1001)拼接,经寄存器送到计算单元;
第二十二个周期,从输入缓冲区中读取地址2的数据经寄存器送到计算单元;
第二十三个周期,读取预备寄存器1的数据,经寄存器送到计算单元;
第二十四个周期,从输入缓冲区中读取地址7(为了得到1010),并和预备寄存器2中的数据(提前存好的1004,1006和1008)拼接,经寄存器送到计算单元;
第二十五个周期,从输入缓冲区中读取地址2(为了得到402,602和802),并和预备寄存器2中的数据(提前存好的1002)拼接,经寄存器送到计算单元;
针对其他步长的情况,可以将卷积核拆分成若干子核进行拓展支持,每个子核仍然遵循步长为1时的数据流规律。
图9为本发明中内核映射元素计算顺序变体的示意图。
图9展示了Z字形数据流中内核映射的计算顺序的变体,虽然看起来与本发明的计算顺序不同,但实际上仅做了旋转操作,数据复用的本质是一致的。在不需要创新设计的条件下也可以按照类似本发明流程完成实施例的操作。可以根据架构设计的不同需求在这些变体中做灵活的选择。
本实施例中的架构具有如下优点:
通过在Pox,Poy,Pof维度并行计算,硬件利用率不受卷积核窗口尺寸的影响。进一步,采用新颖的Z字形数据流,通过改变内核映射内部元素的计算顺序,在横向数据重用的基础上增加了内核映射拐点处对应的输入像素纵向数据重用机会,从而能够缓解随卷积核尺寸增大快速增加的重叠数据的片上存储或者数据传输需求,减少了存储开销或者传输延迟。此外,由于本发明的架构中横向数据重用与纵向数据重用的实现互相解耦,因此具有支持任意形状与尺寸卷积核计算的灵活性,而没有冗余的计算和数据传输。最后,对于较大的卷积核尺寸或步长的情况,可以通过分割或拆分卷积核使得每个子核对应的输入像素仍然满足Z字形数据流规律,从而能够复用已有的硬件结构,节省了额外的资源开销。通过对子核计算进行控制,将不同子核的计算结果进行累计,即可获得最终的输出像素数据。

Claims (10)

1.一种支持任意尺寸与形状卷积核计算的架构,其特征在于,所述架构包括:
输入数据准备部分(100),所述输入数据准备部分(100)用于获取输入特征图的一个像素数据块,并在每个周期读取Z字形数据流所需要的输入像素数据,对于无法在一个周期内读取的像素数据进行预存与拼接处理,最终输出预备像素数据;获取内核映射的权重数据,最终输出目标权重数据;获取层参数数据,以配置卷积层计算过程中所需要的参数信息;
Z字形数据流数据准备部分(200),所述Z字形数据流数据准备部分(200)用于对所述输入数据准备部分(100)获取的像素数据进行灵活的Z字形数据流排列,所述Z字形数据流排列包括对所述预备像素数据进行横向数据移动处理、纵向数据移动处理或者直接传输,输出目标像素数据;
计算部分(300),所述计算部分(300)用于根据所述层参数将所述目标像素数据与所述目标权重数据在乘累加阵列中进行卷积计算,得到输出像素数据;
输出数据重排与存储部分(400),用于将所述计算部分(300)产生的输出像素数据按照下一层计算的数据读取需求重新排列、存储并送回片外;
控制部分(500),所述控制部分(500)用于对所述输入数据准备部分(100)、所述Z字形数据流数据准备部分(200)、所述计算部分(300)和所述输出数据重排与存储部分(400)进行控制。
2.根据权利要求1所述的一种支持任意尺寸与形状卷积核计算的架构,其特征在于,所述输入数据准备部分(100)包括:
输入缓冲区(110),所述输入缓冲区(110)用于从片外读取并在片上存储所述输入特征图的像素数据块,该像素数据块的数据量由循环平铺变量决定;循环平铺变量表达了传输、缓冲数据的大小;
输入像素读取模块(120),所述输入像素读取模块(120)用于生成Z字形数据流每个周期所需的输入像素数据在输入缓冲区(110)中的地址,根据地址从所述输入缓冲区(110)中读取对应的输入像素数据。
3.根据权利要求2所述的一种支持任意尺寸与形状卷积核计算的架构,其特征在于,所述输入数据准备部分(100)还包括:
预备寄存器(130),所述预备寄存器(130)用于存储从输入缓冲区(110)中读取的输入像素数据;当所述输入像素数据满足Z字形数据流单个周期的数据需求时,则直接输出作为预备像素数据,否则,将部分像素数据预取,在需要对应数据的周期和所读新地址的其他所需数据拼接,并共同作为预备像素数据送到所述预备寄存器(130)中,以满足Z字形数据流单个周期的数据需求。
4.根据权利要求3所述的一种支持任意尺寸与形状卷积核计算的架构,其特征在于,所述输入数据准备部分(100)还包括:
卷积层参数缓冲区(140),所述卷积层参数缓冲区(140)用于获取所述输入像素数据对应的卷积层参数;
权重缓冲区(150),所述权重缓冲区(150)用于存储所述输入像素数据对应的权重数据,并将所述权重数据发送给所述计算部分(300);所述权重数据在片外的存储顺序由Z字形数据流的计算需求决定,根据卷积层参数中的步长与卷积核尺寸的不同进行不同的离线处理;当步长为1时,直接对卷积核中的元素进行Z字形排列存储,否则,将卷积核根据输入像素与权重数据的映射关系进行拆分,将拆分得到的每个子核分别进行Z字形排列,子核间的排列顺序由Z字形数据流推导获得,以满足每个周期计算对数据的需求;当卷积核尺寸小于2×Pox时,直接对卷积核中的元素进行Z字形排列存储,否则,将卷积核根据计算并行度进行分割,将分割得到的每个子核分别进行Z字形排列;Pox代表在输出特征图行方向的计算并行度;排列后的权重数据按照符合计算要求的顺序存储在片外存储中,等待片上权重缓冲区(150)的读取。
5.根据权利要求1所述的一种支持任意尺寸与形状卷积核计算的架构,其特征在于,所述Z字形数据流数据准备部分(200)包括第一多路选择器(230),所述第一多路选择器(230)被配置为:
根据Z字形数据流的数据复用规律,将经过横向数据移动模块(210)、纵向数据移动模块(220)或者直接传输操作的所述预备像素数据传输到计算部分(300);所述Z字形数据流的数据复用规律包括横向数据复用规律以及纵向数据复用规律,所述横向数据复用规律指的是,由于在输入特征图的行和列维度并行,权重数据按照时间顺序下Z字形数据流规律参与计算,按照横向顺序计算时,多个并行处理单元的输入像素在横向维度上将产生重叠,重叠的数据可以通过横向移动得到复用;所述纵向数据复用规律指的是,按照纵向顺序计算时,多个并行处理单元的输入像素在纵向维度上将产生重叠,重叠的数据可以通过纵向移动得到复用;
当下一个周期计算所需的权重数据与当前权重数据位于卷积核的同一行时,根据卷积窗口的横向数据复用规律,将经过横向数据移动模块(210)的所述预备像素数据传输给计算部分(300)的对应端口;当下一个周期计算所需的权重数据与当前权重数据位于卷积核的不同行时,根据Z字形数据流中卷积窗口的纵向数据复用规律,将经过纵向数据移动模块(220)的所述预备像素数据传输给计算部分(300)的对应端口;上述两种操作伴随新数据的读取需求,通过将来自所述输入数据准备部分(100)的所述预备像素数据不作处理直接传输来实现,所读新数据和经过横向数据移动模块(210)或纵向数据移动模块(220)的数据拼接,共同组成单个周期计算部分(300)所需的所有输入数据。
6.根据权利要求5所述的一种支持任意尺寸与形状卷积核计算的架构,其特征在于,所述Z字形数据流数据准备部分(200)还包括:
横向数据移动模块(210),所述横向数据移动模块(210)用于从所述输入数据准备部分(100)中获取预备像素数据,判断所述预备像素数据是否满足Z字形数据流横向数据复用规律,若满足,则将所述预备像素数据进行横向数据移动处理;
纵向数据移动模块(220),所述纵向数据移动模块(220)用于从所述输入数据准备部分(100)中获取预备像素数据,判断所述预备像素数据是否满足Z字形数据流纵向数据复用规律,若满足,则将所述预备像素数据进行纵向数据移动处理。
7.根据权利要求1所述的一种支持任意尺寸与形状卷积核计算的架构,其特征在于,所述计算部分(300)包括:
计算模块(310),所述计算模块(310)中内置有乘累加阵列,所述乘累加阵列的规模由循环展开变量决定;循环展开变量表达了计算的并行度;所述计算模块(310)用于根据卷积层参数将所述目标像素数据与所述目标权重数据在乘累加阵列中进行卷积计算,得到输出像素数据。
8.根据权利要求1所述的一种支持任意尺寸与形状卷积核计算的架构,其特征在于,所述输出数据重排与存储部分(400)包括:
输出数据排列模块(410),所述输出数据排列模块(410)用于按照下一层计算的数据读取需求对所述输出像素数据进行重新排列;
输出缓冲区(420),所述输出缓冲区(420)用于存储所述输出数据排列模块(410)重排后的输出像素数据。
9.根据权利要求1所述的一种支持任意尺寸与形状卷积核计算的架构,其特征在于,所述控制部分(500)包括:
逐层控制模块(510),所述逐层控制模块(510)用于对所述输入数据准备部分(100)、所述Z字形数据流数据准备部分(200)、所述计算部分(300)和所述输出数据重排与存储部分(400)进行控制,以实现逐层的卷积计算;
其中,逐层控制模块(510)包含子核控制模块(511),所述子核控制模块(511),通过控制输入像素以及权重数据的读取顺序,实现在较大的卷积核尺寸和步长情况下,各个子核的数据流依旧满足所述的Z字形数据流规律。
10.根据权利要求5所述的一种支持任意尺寸与形状卷积核计算的架构,其特征在于,所述Z字形数据流数据准备部分(200)的具体实现包括:
将所述预备像素数据发送到对应的寄存器中;
根据卷积计算过程中卷积窗口横向移动的输入像素复用规律,所设计Z字形数据流提供横向数据复用机会,将沿输入特征图的行方向并行的预备像素数据在下一个周期赋值给左侧或者右侧相邻的寄存器数组以实现数据重用,赋值的方向由对应的权重数据位于卷积核的行数的奇偶性决定,奇数行则向左侧,偶数行向右侧;
通过引入内核映射拐点处的计算,增加了纵向数据重用机会,将沿输入特征图的列方向并行的预备像素数据在下一个周期赋值给左侧相邻的寄存器数组以实现重用;
所述横向与纵向数据重用的实现互相解耦,使得所述架构具有支持任意尺寸和形状卷积核计算的灵活性,当支持较大的卷积核尺寸或者卷积步长时,通过将卷积核分割或者拆分成若干子核并进行控制,使得各个子核对应的计算数据流依旧满足所述的Z字形数据流规律,最终的卷积计算结果由不同子核的计算结果累加得到。
CN202410036818.2A 2024-01-10 2024-01-10 一种支持任意尺寸与形状卷积核计算的架构 Pending CN117808050A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410036818.2A CN117808050A (zh) 2024-01-10 2024-01-10 一种支持任意尺寸与形状卷积核计算的架构

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410036818.2A CN117808050A (zh) 2024-01-10 2024-01-10 一种支持任意尺寸与形状卷积核计算的架构

Publications (1)

Publication Number Publication Date
CN117808050A true CN117808050A (zh) 2024-04-02

Family

ID=90427671

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410036818.2A Pending CN117808050A (zh) 2024-01-10 2024-01-10 一种支持任意尺寸与形状卷积核计算的架构

Country Status (1)

Country Link
CN (1) CN117808050A (zh)

Similar Documents

Publication Publication Date Title
JP6977239B2 (ja) 行列乗算器
CN104899182B (zh) 一种支持可变分块的矩阵乘加速方法
CN110415157B (zh) 一种矩阵乘法的计算方法及装置
CN111897579A (zh) 图像数据处理方法、装置、计算机设备和存储介质
Bailey The advantages and limitations of high level synthesis for FPGA based image processing
Zhang et al. A multiwindow partial buffering scheme for FPGA-based 2-D convolvers
US20230394615A1 (en) Task execution in a simd processing unit with parallel groups of processing lanes
CN109472361B (zh) 神经网络优化方法
EP4071619A1 (en) Address generation method, related device and storage medium
CN110674927A (zh) 一种用于脉动阵列结构的数据重组方法
Van Meerbergen et al. PHIDEO: high-level synthesis for high throughput applications
KR20180045029A (ko) 배선 복잡성이 감소된 시프트 레지스터
JP2020098602A (ja) テンソルデータにアクセスするための方法および装置
Mahmood et al. 2D discrete Fourier transform with simultaneous edge artifact removal for real-time applications
US10331762B1 (en) Stream processing for LU decomposition
CN110377874B (zh) 卷积运算方法及系统
CN105843591A (zh) 多维数组滑动生成数据的方法、装置及处理器
US7152218B2 (en) Behavioral synthesis system, behavioral synthesis method, control program, readable recording medium, logic circuit production method, and logic circuit
US6941539B2 (en) Efficiency of reconfigurable hardware
CN117808050A (zh) 一种支持任意尺寸与形状卷积核计算的架构
US20240004702A1 (en) Thread construction method and device
US11194490B1 (en) Data formatter for convolution
Towara et al. Simple adjoint message passing
JP2010244096A (ja) データ処理装置、印刷システムおよびプログラム
CN116090518A (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