掌桥专利:专业的专利平台
掌桥专利
首页

卷积运算方法及芯片

文献发布时间:2023-06-19 12:07:15


卷积运算方法及芯片

技术领域

本公开涉及神经网络计算领域,尤其涉及一种卷积运算方法及芯片。

背景技术

随着科学技术的发展,人类社会正在快速进入智能时代。智能时代的重要特点,是人们获得数据的种类越来越多,获得数据的量越来越大,并且对处理数据的速度要求越来越高。

芯片是数据处理的基石,它从根本上决定了人们处理数据的能力。从应用领域来看,芯片主要有两条路线:一条是通用芯片路线,例如CPU(Central Processing Unit,中央处理器)等,它们能提供极大的灵活性,但是在处理特定领域算法时有效算力比较低;另一条是专用芯片路线,例如TPU(tensor processing unit,张量处理器)等,它们在某些特定领域,能发挥较高的有效算力,但是面对灵活多变的比较通用的领域,它们处理能力比较差甚至无法处理。

神经网络是人工智能的重要模型,其核心为卷积计算。现有的技术方案在处理卷积运算时一般有两种方案:

(1)整体计算方案:该方案在单核CPU中使用,其按照卷积的计算公式,单核实现输入数据和权重数据的逐点相乘再累加,得到最终结果。

(2)多线程并行拆分方案:该方案在GPU中使用,将卷积拆分成多个线程并行运算,所有的数据和权重拆散成以线程数为单位的运算份数,将这些份数都运行完了则此卷积完成。

但是方案(1)处理的处理粒度太粗,用一个处理核实现整个卷积,并行化差;在对延时要求高的应用中无法满足要求,如果要降低延时,需要提高处理核的计算能力,硬件代价大。方案(2)的输入数据和权重数据的拆分粒度太细,拆分的过程复杂,需要设计复杂的调度器,效率低,代价大。

发明内容

提供该发明内容部分以便以简要的形式介绍构思,这些构思将在后面的具体实施方式部分被详细描述。该发明内容部分并不旨在标识要求保护的技术方案的关键特征或必要特征,也不旨在用于限制所要求的保护的技术方案的范围。

为了解决现有技术中的在进行卷积计算的上述技术问题,本公开实施例提出如下技术方案:

第一方面,本公开实施例提供一种卷积方法,包括:

所述处理核获取卷积运算子任务,其中所述卷积运算子任务中包括子输入数据的存储地址以及子权重数据的存储地址,所述卷积运算子任务是卷积运算的一部分;

所述处理核根据所述子输入数据的存储地址以及子权重数据的存储地址从系统存储空间中获取子输入数据和子权重数据,其中所述子输入数据是卷积运算的输入数据的一部分,所述子权重数据是卷积运算的权重数据的一部分,所述子输入数据和所述子权重数据一一对应;

所述处理核根据所述子输入数据和子权重数据执行所述卷积运算子任务得到子输出数据。

进一步的,所述方法还包括:多个所述处理核中的其中一个处理核将多个所述子输出数据相加得到输出数据。

进一步的,所述子输入数据为所述输入数据在深度方向上划分的多个子输入数据中的一个;所述子权重数据为所述输入数据在深度方向上划分的多个子权重数据中的一个。

进一步的,所述子输入数据的个数和所述子权重数据的个数与所述处理核的个数相等。

进一步的,所述子输入数据的大小和所述子权重数据的大小与所述处理核的存储空间大小相关。

第二方面,本公开实施例提供一种卷积方法,包括:

获取卷积运算中所需要的输入数据以及权重数据;

将所述输入数据和权重数据分别划分为多个子输入数据和多个子权重数据,其中所述多个子输入数据与所述多个子权重数据一一对应;

将所述多个子输入数据与所述多个子权重数据分别输入多个处理核进行卷积运算得到多个子输出数据;

将所述多个子输出数据相加得到输出数据。

第三方面,本公开实施例提供一种芯片,包括多个处理核,其中所述多个处理核中的至少两个执行上述第一方面所述的卷积运算方法以完成卷积运算。

第四方面,本公开实施例提供一种电子设备,包括:存储器,用于存储计算机可读指令;以及一个或多个处理器,用于运行所述计算机可读指令,使得所述处理器运行时实现前述第一方面或者第二方面中的任一所述卷积运算方法。

第五方面,本公开实施例提供一种非暂态计算机可读存储介质,其特征在于,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行前述第一方面或者第二方面中的任一所述卷积运算方法。

第六方面,本公开实施例提供一种计算机程序产品,其中,其特征在于:包括计算机指令,当所述计算机指令被计算设备执行时,所述计算设备可以执行前述第一方面或者第二方面中的任一所述卷积运算方法。

第七方面,本公开实施例提供一种计算装置,其特征在于,包括所述第三方面中的所述的芯片。

本公开实施例公开了一种卷积运算方法及芯片。其中该卷积运算方法包括:所述处理核获取卷积运算子任务,其中所述卷积运算子任务中包括子输入数据的存储地址以及子权重数据的存储地址,所述卷积运算子任务是卷积运算的一部分;所述处理核根据所述子输入数据的存储地址以及子权重数据的存储地址从系统存储空间中获取子输入数据和子权重数据,其中所述子输入数据是卷积运算的输入数据的一部分,所述子权重数据是卷积运算的权重数据的一部分,所述子输入数据和所述子权重数据一一对应;所述处理核根据所述子输入数据和子权重数据执行所述卷积运算子任务得到子输出数据。通过上述方法中的输入数据和权重数据的划分,将划分出来的子输入数据和子权重数据分配给不同的处理核进行卷积运算,解决了现有技术中卷积计算并行化差、效率低的技术问题。

上述说明仅是本公开技术方案的概述,为了能更清楚了解本公开的技术手段,而可依照说明书的内容予以实施,并且为让本公开的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。

附图说明

结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。

图1为卷积运算的过程示意图;

图2为执行本公开实施例所提供的卷积运算方法的芯片的结构示意图;

图3为本公开实施例提供的卷积运算方法的流程图;

图4a为输入数据和权重数据的划分示意图;

图4b为根据处理核的个数划分输入数据和权重数据的示意图;

图4c为子输出数据相加的示意图;

图5a-图5c为根据本公开实施例的卷积运算方法的一个具体实例。

具体实施方式

下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。

应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。

本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。

需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。

需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。

本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。

图1为卷积运算的过程示意图。如图1所述,卷积运算的输入数据(即输入特征图)的大小为Win*Hin*Cin,其中Win表示输入数据的宽度,Hin表示输入数据的高度,Cin表示输入数据的深度。权重数据中(即一个或多个卷积核)一共有Cout个卷积核,每一个卷积核的大小是Kw*Kh*Cin,其中Kw表示卷积核的宽度,Kh表示卷积核的高度,Cin表示卷积核的深度。在卷积过程中,每一个卷积核,都会在输入数据上滑动,在每一个滑动位置上以和其对应的输入数据进行对应元素乘累加,提取出此卷积核对应的输出数据中的元素(即输出特征图上的特征点);由于权重数据中有Cout个卷积核,每一个卷积核均会与此同一位置上的输入数据进行对应元素乘累加,从而得到Cout个输出数据元素;Cout个输出数据元素组成输出数据上的一个带深度的输出数据的元素,此输出数据的元素的深度即Cout;所有卷积核会在整个输入数据上滑动完,每个滑动位置均得到一个深度为Cout的元素,从而得到整个输出数据。

对于处于某一深度l(1<=l<=Cout)上的某个元素,对它进行乘累加的公式如下:

Dout是输出数据中的某个带深度的元素,其上标l表示在输出深度上的深度为l;Din是指输入数据对应于卷积核的数据块,其上标i对应输入数据的深度,j和k分别对应卷积核的宽度和高度;w是卷积核中的元素,也就是神经网络计算中的权重,其上标l和i分别对应输出数据的深度和输入数据的深度。

本公开将卷积运算中可以独立进行的运算拆分成多个子任务,每个子任务有其对应的子输入数据和子权重数据;所述子任务被分配给包括多个处理核的芯片中的处理核单独执行。

图2为执行本公开实施例所提供的卷积运算方法的芯片的结构示意图。如图2所示,所述芯片为多核架构的芯片,其中包括多个处理核C

图3为本公开实施例提供的卷积运算方法的流程图。本公开实施例中的所述卷积运算方法,用于如图2所示的包括多个处理核的芯片中,下面方法以多个处理核中的一个处理核为例进行描述,所述方法包括:

步骤S301,所述处理核获取卷积运算子任务,其中所述卷积运算子任务中包括子输入数据的存储地址以及子权重数据的存储地址,所述卷积运算子任务是卷积运算的一部分;

在该步骤中,所述处理核获取卷积运算子任务,所述卷积运算子任务为所述卷积运算的一部分,所述卷积运算子任务与其他处理核的卷积运算子任务在运算顺序上互不相关。

所述卷积运算子任务中包括所述卷积子任务所需要的子输入数据的存储地址以及子权重数据的存储地址,其中所述存储地址为系统存储空间的存储地址。可以理解的,所述子输入数据的存储地址和所述子权重数据的存储地址为数据的起始存储地址以及结束存储地址,或者所述子输入数据的存储地址和所述子权重数据的存储地址为起始存储地址,此时卷积运算子任务中还需要包括所述子输入数据和所述子权重数据的大小信息。

步骤S302,所述处理核根据所述子输入数据的存储地址以及子权重数据的存储地址从系统存储空间中获取子输入数据和子权重数据,其中所述子输入数据是卷积运算的输入数据的一部分,所述子权重数据是卷积运算的权重数据的一部分,所述子输入数据和所述子权重数据一一对应;

所述处理核自身带有处理核内的存储空间,用于存储所述卷积运算子任务以及卷积运算子任务所需要的子输入数据和子权重数据。在该步骤中,所述处理核根据步骤S301中得到的子输入数据的存储地址以及子权重数据的存储地址从系统存储空间中获取子输入数据和子权重数据,并存储在处理核的存储空间中。

其中所述子输入数据为所述卷积运算的输入数据的一部分,所述子权重数据为所述卷积运算的权重数据的一部分。示例性的,所述子输入数据为所述输入数据在深度方向上划分的多个子输入数据中的一个;所述子权重数据为所述输入数据在深度方向上划分的多个子权重数据中的一个。

具体的,图4a为输入数据和权重数据的划分示意图。如图4a所示,在输入数据的深度方向Cin和权重数据的深度方向Cin上,将所述输入数据划分为多个子输入数据,将所述权重数据划分为多个子权重数据。如图4a所示,在深度方向上将所述输入数据和所述权重数据分为N个子输入数据和N个子权重数据,其中所述N个子输入数据和N个子权重数据一一对应,且每一个子输入数据与对应的子权重数据在同一深度。

可选的,所述子输入数据的个数和所述子权重数据的个数与所述处理核的个数相等。

在该实施例中,所述子输入数据和所述子权重数据的划分根据所述芯片中的所述处理核的个数设置。图4b为根据处理核的个数划分输入数据和权重数据的示意图。如图4b所示,芯片中的处理核为N个,则在深度方向上将所述输入数据划分为N个子输入数据,在深度方向上将所述权重数据划分为N个子权重数据。可以理解的,由于权重数据有Cout个卷积核,每个卷积核均按照相同的方式进行划分,则每个子权重数据中包括有深度相同的多个子卷积核,如图4b所示,Cout个卷积核中编号相同的子卷积核共同组成一个子权重数据,例如编号为1的Cout个子卷积核组成编号为1的子权重数据。在按照上述方式划分好子输入数据和子权重数据之后,每个处理核在执行所述卷积运算子任务时,都可以获取到相应的子输入数据和子权重数据。可以理解的,所述子输入数据的个数和所述子权重数据的个数与所述处理核的个数可以不相等,例如在某些场景下,芯片中的某些处理核在执行其他任务,无法执行卷积运算,此时可以按照芯片中实际可用的处理核的个数对所述输入数据和所述权重数据进行划分,在此不再赘述。

可选的,所述子输入数据的大小和所述子权重数据的大小与所述处理核的存储空间大小相关。在上述可选实施例中,没有考虑处理核自身的存储空间大小,这样可能会导致所划分的子输入数据和子权重数据的大小与所述处理核的存储空间的大小不匹配,进而导致处理核执行卷积运算子任务时效率较低。此时,可以根据每个处理核的存储空间的大小计算一个合适的值,根据该值来划分每一份子输入数据和子权重数据,此时每一个处理核所处理的子输入数据和子权重数据大小可以不同,即输入数据和权重数据不是平均等分的,而是根据各个可用处理核的存储能力划分的。或者,对于自身的存储空间较小的处理核,可以将所述子输入数据和子权重数据进一步划分成多份,所述处理核每次根据其中一份计算出对应的子输出数据的一部分,此时对于该存储空间较小的处理核来说,其计算子输出数据的过程是一个串行的过程,在对子输入数据和子权重数据进一步划分时,可以按照所述处理核的自身存储空间进行平分,每一份子输入数据和子权重数据的大小都不大于所述存储空间,或者将每一份的大小设置为存储空间的大小进行划分。当然,根据存储空间的大小,划分输入数据和权重数据时,就避免了再次划分的问题,提高了数据计算效率。

步骤S303,所述处理核根据所述子输入数据和子权重数据执行所述卷积运算子任务得到子输出数据。

所述处理核在得到其自身的卷积运算子任务所需要的子输入数据和子权重数据之后,按照卷积运算的顺序计算所述子输入数据和子权重数据的累加和得到子输出数据。具体的计算过程可以参见图1,单个处理核的卷积运算子任务的运算过程与通常的卷积运算过程相同,只是此时参与计算的子输入数据的深度不再是Cin,而是小于Cin的深度,参与计算的子权重数据的深度与参与计算的子输入数据的深度相同,其使用部分深度的权重数据在部分深度的输入数据上滑动计算出输出数据的一部分,即子输出数据,所述子输出数据的宽度为Wout,高度为Hout,深度为Cout,与输出数据的宽度、高度和深度均相同,只是子输出数据的每个元素的值仅为输出数据的一部分,如图4b中所示。

通过上述步骤S301-步骤S303,处理核已经完成了分配给其自身的卷积运算子任务。为了得到最终的输出数据,所述方法,还包括:

步骤S304,多个所述处理核中的其中一个处理核将多个所述子输出数据相加得到输出数据。在计算得到所有的子输出数据之后,多个处理核中的一个处理核将所有的子输出数据按照元素对应相加的方式进行计算得到最终的输出数据。执行该加法运算的处理核可以通过前述由服务器端动态更新,也可以在启动后写入处理核的初始程序,或者是在处理核运行的过程中,按照其自身的初始化程序从系统的内存空间中自动更新的方式进行确定,在此不再赘述。具体的计算过程如图4c所示,N个子输出数据相加得到最终的输出数据。

本公开另一实施例提供了又一卷积运算的方法,所述卷积运算方法包括:

获取卷积运算中所需要的输入数据以及权重数据;

将所述输入数据和权重数据分别划分为多个子输入数据和多个子权重数据,其中所述多个子输入数据与所述多个子权重数据一一对应;

将所述多个子输入数据与所述多个子权重数据分别输入多个处理核进行卷积运算得到多个子输出数据;

将所述多个子输出数据相加得到输出数据。

在上述示例中,还包括了输入数据和权重数据的划分过程,其具体的划分过程可以与步骤S302中所描述的相同,在此不再赘述。另外,可以理解的,上述划分过程可以是逻辑上的划分过程,即仅仅对输入数据和权重数据的存储空间进行划分,得到每个子输入数据和每个子权重数据在系统存储空间中的起始存储地址以及结束存储地址,使得所述处理核可以获取到子输入数据和子权重数据即可,而不需要真正的将数据划分为多份。

图5a-图5c为根据本公开实施例的卷积运算方法的一个具体实例。如图5a所示,芯片中包括两个处理核C

本公开实施例公开了一种卷积运算方法。其中该卷积运算方法包括:所述处理核获取卷积运算子任务,其中所述卷积运算子任务中包括子输入数据的存储地址以及子权重数据的存储地址,所述卷积运算子任务是卷积运算的一部分;所述处理核根据所述子输入数据的存储地址以及子权重数据的存储地址从系统存储空间中获取子输入数据和子权重数据,其中所述子输入数据是卷积运算的输入数据的一部分,所述子权重数据是卷积运算的权重数据的一部分,所述子输入数据和所述子权重数据一一对应;所述处理核根据所述子输入数据和子权重数据执行所述卷积运算子任务得到子输出数据。通过上述方法中的输入数据和权重数据的划分,将划分出来的子输入数据和子权重数据分配给不同的处理核进行卷积运算,解决了现有技术中卷积计算并行化差、效率低的技术问题。

本公开实施例还提供了一种芯片,包括多个处理核,其中所述多个处理核中的至少两个执行所述卷积运算方法以完成卷积运算。

本公开实施例还提供了一种电子设备,包括:存储器,用于存储计算机可读指令;以及一个或多个处理器,用于运行所述计算机可读指令,使得所述处理器运行时实现前述实施例中的任一所述卷积运算方法。

本公开实施例还提供了一种非暂态计算机可读存储介质,其特征在于,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行前述实施例中的任一所述卷积运算方法。

本公开实施例提供一种计算机程序产品,其中,其特征在于:包括计算机指令,当所述计算机指令被计算设备执行时,所述计算设备可以执行前述实施例中的任一所述卷积运算方法。

本公开实施例提供一种计算装置,其特征在于,包括前述实施例中的任一所述的芯片。

本公开附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。

本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。

在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。

相关技术
  • 卷积运算方法及芯片
  • 卷积运算方法及芯片
技术分类

06120113176656