CN116710930A - 执行程序的编译方法、芯片、电子设备及计算机可读存储介质 - Google Patents
执行程序的编译方法、芯片、电子设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN116710930A CN116710930A CN202080108193.6A CN202080108193A CN116710930A CN 116710930 A CN116710930 A CN 116710930A CN 202080108193 A CN202080108193 A CN 202080108193A CN 116710930 A CN116710930 A CN 116710930A
- Authority
- CN
- China
- Prior art keywords
- program
- processing cores
- data
- storage area
- original program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 59
- 238000013528 artificial neural network Methods 0.000 claims description 40
- 238000013500 data storage Methods 0.000 claims description 25
- 230000001360 synchronised effect Effects 0.000 claims description 13
- 238000004364 calculation method Methods 0.000 description 21
- 238000010586 diagram Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 5
- 238000004590 computer program Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
Abstract
一种执行程序的编译方法、芯片、电子设备和计算机可读存储介质。其中该执行程序的编译方法包括:根据原始程序的数据的属性确定执行所述原始程序所需要的处理核的个数(S201);根据所述原始程序的参数确定所述原始程序中的同步点的位置(S202);根据所述处理核的个数和所述同步点的位置将所述原始程序编译成执行程序(S203)。上述方法编译生成所述执行程序的依据为原始程序的输入输出数据的属性以及参数,解决了现有技术中的执行程序在执行时需要频繁访问外部存储器的技术问题。
Description
本公开涉及程序编译及处理器领域,尤其涉及一种执行程序的编译方法、芯片、电子设备和计算机可读存储介质。
随着科学技术的发展,人类社会正在快速进入智能时代。智能时代的重要特点,就是人们获得数据的种类越来越多,获得数据的量越来越大,而对处理数据的速度要求越来越高。芯片是任务调度的基石,它从根本上决定了人们处理数据的能力。从应用领域来看,芯片主要有两条路线:一条是通用芯片路线,例如CPU(Central Processing Unit)等,它们能提供极大的灵活性,但是在处理特定领域算法时有效算力比较低;另一条是专用芯片路线,例如TPU(Tensor Processing Unit)等,它们在某些特定领域,能发挥较高的有效算力,但是面对灵活多变的比较通用的领域,它们处理能力比较差甚至无法处理。由于智能时代的数据种类繁多且数量巨大,所以要求芯片既具有极高的灵活性,能处理不同领域且日新月异的算法,又具有极强的处理能力,能快速处理极大的且急剧增长的数据量。
多(众)核CPU或者GPU在进行神经网络任务处理时,一般有两种处理方法:
第一种是各处理核单独处理各自的任务,核间互不影响,如附图1a所示;第二种是部分或者所有处理核共同并行处理某个任务,各完成任务的一部分,如附图1b所示。
上述两种方法中,编译器根据神经网络的结构,按照传统多(众)核CPU或者GPU的特点,编译出合适的程序,进行神经网络的计算。其各处理核中Cache对于程序而言,是透明的,是不可直接独立访问的,计算中所有的数据读写,对于处理核来说,都是基于DDR(Double Data Rate)存储器的访问地址进行。在神经网络计算中,会产生大量的中间数据,且各层的中间数据大部分都没有关联性。由于Cache具有空间局部特性和时间局部特性,所以在神经网络计算中,Cache很容易降低命中率,会频繁的访问DDR存储器,从而降低神经网络的计算速度,且带来功耗的降低。
发明内容
提供该发明内容部分以便以简要的形式介绍构思,这些构思将在后面的具体实施方式部分被详细描述。该发明内容部分并不旨在标识要求保护的技术方案的关键特征或必要特征,也不旨在用于限制所要求的保护的技术方案的范围。
为了解决现有技术中处理核的任务调度不灵活、控制复杂的技术问题,本公开实施例提出如下技术方案:
第一方面,本公开实施例提供一种执行程序的编译方法,包括:
根据原始程序的数据的属性确定执行所述原始程序所需要的处理核的个数;
根据所述原始程序的参数确定所述原始程序中的同步点的位置;
根据所述处理核的个数和所述同步点的位置将所述原始程序编译成执行程序。
进一步的,所述根据原始程序的数据的属性确定执行所述原始程序所需要的处理核的个数,包括:
获取所述原始程序中的每一个子程序的数据总量;其中所述子程序的数据总量包括所述子程序的输入数据的大小和输出数据的大小之和;
根据所述每一个子程序的数据总量以及所述处理核的数据存储区域的大小确定执行所述原始程序所需要的处理核的个数
进一步的,所述根据所述每一个子程序的数据总量以及所述处理核的数据存储区域的大小计算执行所述原始程序所需要的处理核的个数,包括:
计算所述每一个子程序的数据总量和所述处理核的数据存储区域的大小的商;
将多个所述商中的最大商向上取整后的值作为执行所述原始程序所需要的处理核的个数。
进一步的,所述根据所述原始程序的参数确定所述原始程序中的同步点的位置,包括:
根据所述处理核的参数存储区域的大小以及所述多个子程序的参数的大小确定所述多个子程序的同步点的位置。
进一步的,所述根据所述处理核的参数存储区域的大小以及所述子程序的参数的大小确定所述子程序的同步点的位置,包括:
根据所述处理核的参数存储区域的大小以及所述子程序的参数的大小确定所述处理核的参数存储区域能够存储的所述子程序的参数的数量;
根据所述处理核的参数存储区域能够存储的所述子程序的参数的数量确定所述子程序的同步点的位置。
进一步的,在确定所述同步点的位置之后,还包括:
在所述同步点的位置加入同步指令;其中,所述同步指令用于使所述包括多个处理核的系统生成同步信号。
进一步的,所述执行程序中包括多个程序段,每个程序段中包括所述原始程序中的指令以及所述处理核执行所述原始程序中的指令所需要的控制指令。
进一步的,所述原始程序为神经网络,所述子程序为所述神经网络中的一层子网络。
进一步的,所述获取所述原始程序中的每一个子程序的数据总量,包括:
获取所述神经网络;
分析所述神经网络中每一层子网络的输入数据的大小和输出数据的大小;
生成所述神经网络中每一层子网络的数据总量。
第二方面,本公开实施例提供一种芯片,包括:
多个处理核和同步信号发生器;其中每个处理核包括数据存储区域和参数存储区域;
其中,所述多个处理核用于根据执行程序进行分组,其中每一组中的处理核用于执行所 述执行程序中的多个程序段;其中所述数据存储区域用于存储所述多个程序段的输入数据和输出数据,所述参数存储区域用于存储所述多个程序段的参数;
所述同步信号发生器,用于在所有执行所述程序段的处理核均执行完毕时,发送同步信号至所有处理核。
第三方面,本公开实施例提供一种电子设备,包括:存储器,用于存储计算机可读指令;以及一个或多个处理器,用于运行所述计算机可读指令,使得所述处理器运行时实现前述第一方面中的任一所述执行程序的编译方法。
第四方面,本公开实施例提供一种非暂态计算机可读存储介质,其特征在于,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行前述第一方面中的任一所述执行程序的编译方法。
第五方面,本公开实施例提供一种计算机程序产品,其特征在于:包括计算机指令,当所述计算机指令被计算设备执行时,所述计算设备可以执行前述第一方面中的任一所述执行程序的编译方法。
第六方面,本公开实施例提供一种计算装置,其特征在于,包括所述第二方面中的任一所述的芯片。
本公开实施例公开了一种执行程序的编译方法、芯片、电子设备和计算机可读存储介质。其中该执行程序的编译方法包括:根据原始程序的数据的属性确定执行所述原始程序所需要的处理核的个数;根据所述原始程序的参数确定所述原始程序中的同步点的位置;根据所述处理核的个数和所述同步点的位置将所述原始程序编译成执行程序。上述方法编译生成所述执行程序的依据为原始程序的输入输出数据的属性以及参数,解决了现有技术中的执行程序在执行时需要频繁访问外部存储器的技术问题。
上述说明仅是本公开技术方案的概述,为了能更清楚了解本公开的技术手段,而可依照说明书的内容予以实施,并且为让本公开的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。
图1a和1b为现有技术的示意图;
图2为本公开实施例提供的执行程序的编译方法的流程示意图;
图3为本公开实施例提供的执行程序的编译方法的进一步流程示意图;
图4为本公开实施例提供的执行程序的编译方法的进一步流程示意图;
图5为本公开实施例提供的执行程序的编译方法的进一步流程示意图;
图6a为本公开实施例提供的芯片的示例图;
图6b为本公开实施例提供的芯片执行所述执行程序时处理核的分组示意图;
图7为本公开实施例中的待编译的神经网络的示意图;
图8为本公开实施例中第一分组中的两个处理核切分数据的示意图。
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
图2为本公开实施例提供的执行程序的编译方法的流程示意图。所述执行程序的编译方法,用于包括多个处理核的系统中,所述处理核包括用于存储所述执行程序的相关数据的存储区域。其中,所述执行程序的相关数据包括所述执行程序的输入数据、输出数据、程序指令数据和参数数据等,相应的,所述存储区域包括用于存储所述执行程序的输入数据和输出数据的数据存储区域、存储所述程序指令数据的程序储存区域以及存储所述参数数据的参数存储区域。
其中,所述方法包括:
步骤S201,根据原始程序的数据的属性确定执行所述原始程序所需要的处理核的个数;
在该步骤中,所述原始程序的数据的属性包括原始程序的输入输出数据的总量等等。在该步骤中,对原始程序的数据进行分析,根据原始程序的数据属性规划处理核的分配方案,确定需要多少个处理核能够并行计算所述原始程序。
可选的,所述步骤S201包括:
步骤S301,获取所述原始程序中的每一个子程序的数据总量;其中所述子程序的数据总量包括所述子程序的输入数据的大小和输出数据的大小之和;
步骤S302,根据所述每一个子程序的数据总量以及所述处理核的数据存储区域的大小确定执行所述原始程序所需要的处理核的个数。
示例性的,所述原始程序为神经网络,所述子程序为所述神经网络中的一层子网络。在该可选实施例中,所述原始程序包括多个子程序,原始程序在执行时按照子程序的顺序依次执行,子程序的输出数据为下一子程序的输入数据或者原始程序的输出数据。
当所述原始程序为神经网络,所述步骤S301包括:
获取所述神经网络;分析所述神经网络中每一层的输入数据的大小和输出数据的大小;生成所述神经网络中每一层的数据总量。神经网络通常可以以图的形式表示,每一层包括输入数据的大小和输出数据的大小,如输入输出数据的维度等。由此可以通过对表示所述神经网络的图进行分析得到每一层子网络的数据总量。
可以理解的,所述原始程序可以是其他各种类型的程序,所述原始程序的子程序可以是原始程序中的按照功能模块进行划分的程序模块或者按照程序执行顺序划分的一段从输出数据得到输出数据的程序模块。
由于原始程序在执行的时候,可能存在中间数据,如上述子程序的输出数据,为了每个中间数据可以不必访问处理核外的存储区域,因此在该步骤中首先计算出原始程序的每个子程序的数据总量。
在得到所述原始程序的每个子程序的数据总量之后,在步骤S302中,获取所述处理核的数据存储区域的大小,并根据所述子程序的数据总量和所述数据存储区域的大小计算执行所述原始程序所需要的处理核的个数。
由于每个子程序的数据总量可能不同,为了能够执行完整的原始程序,可以选择执行每个子程序所需要的处理核的个数中的最大个数作为执行所述原始程序所需要的处理核的个数。由此,可选的,所述步骤S302,包括:
步骤S401,计算所述每一个子程序的数据总量和所述处理核的数据存储区域的大小的商;
步骤S402,将多个所述商中的最大商向上取整后的值作为执行所述原始程序所需要的处理核的个数。
在步骤S401中,假设每个处理核的数据存储区域的大小相同,则通过每个子程序的数据总量除以所述数据存储区域的大小得到多个商,其中所述商可能是整数也可能不是整数。因此在步骤S402中,取所述多个商中的最大商的向上取整的值作为执行所述原始程序所需要的处理核的个数。当每个处理核的数据存储区域的大小不相同时,可以将所述处理核中数据存储区域的最小值作为计算所述商时所使用的数据存储区域的大小,以保证每个处理核都可以在不使用外部存储器的情况下存储每个子程序的输入数据和输出数据。可以理解的,上述步骤S401和步骤S402中,计算执行每个子程序所需要的最少处理核个数,之后将这些处理 核个数中的最大值作为执行所述原始程序所需要的最少处理核个数。
在该步骤S201中,得到的执行所述原始程序所需要的处理核的个数,根据原始程序所需要的处理核的个数对所述多个处理核进行分组,每组中处理核的数量为所述需要的处理核的个数;各个组之间可以并行的执行多个原始程序。
设执行所述原始程序所需要的处理核的个数为N
min,对所述多个处理核进行分组之后,每组中的处理核的个数为N
g,则需要满足N
g≥N
min,所述系统中的处理核的个数为N,则N=A*N
g,其中A为正整数,即分组的数量。示例性的,如N
min=2,N=9,则N
g=3,A=3。
在该步骤计算得到执行所述原始程序所需要的处理核的个数之后,还可以进一步计算出每个处理核的输入数据的量,即每个子程序的输入数据均衡的分配给一组处理核中的每个处理核。具体的,可以按照将输入数据平均分成N
g份的方式对输入数据进行分割;但是,有些情况下可能处理核之间的输入数据会有重叠,此时需要在计算每组中的处理核的个数N
g时进行调整,使得N
g满足:M
0≥D
m+D
in/N
g;其中M
0是处理核的数据存储区域的大小,D
m是每增加一个处理核由于数据重叠部分所产生的增量数据,由此每一个处理核所需要分配的输入数据即为D
m+D
in/N
g。
这样,通过上述步骤S201,能够在原始程序的编译阶段完成执行所述原始程序的系统中的多个处理核的分组规划。
返回附图2,所述执行程序的编译方法,还包括:
步骤S202,根据所述原始程序的参数确定所述原始程序中的同步点的位置。
其中,两个同步点之间的原始程序的指令为在一个同步周期中,所述处理核所需要执行的程序指令。
可选的,所述步骤S202包括:根据所述处理核的参数存储区域的大小以及所述多个子程序的参数的大小确定所述多个子程序的同步点的位置。
所述处理核的参数存储区域用于存储所述原始程序的参数,如卷积神经网络中各层子网络的所使用的卷积核的大小、权重值以及步长等等参数。处理核中的参数存储区域的大小决定了一个同步周期中所能执行的程序指令的量,如所述处理核中的参数存储区域能够存储下一层子网络的所有参数,则在一个同步周期中,所述处理核无需从处理核外的存储区域读取参数即可完成一层子网络的计算,则同步点可以设置在每个子网络的程序指令的结尾。而有些情况下,处理核的参数存储区域比较小,无法存储一层子网络的所有参数,此时就需要在子网络中插入同步点,以确定使用参数存储区域中所存储的参数能够执行到的位置。
进一步的,上述步骤S202包括:
步骤S501,根据所述处理核的参数存储区域的大小以及所述子程序的参数的大小确定所述处理核的参数存储区域能够存储的所述子程序的参数的数量;
步骤S502,根据所述处理核的参数存储区域能够存储的所述子程序的参数的数量确定所述子程序的同步点的位置。
在该实施例中,通过所述子程序的参数的大小和所述参数存储区域的大小能够确定所述参数存储区域能够存储的参数的数量,根据所述参数的数量确定所述多个子程序的同步点的 位置,例如所述子程序的参数的大小为50KB,所述参数存储区域的大小为25KB,则需要在子程序的中点位置插入一个同步点。对每个子程序均执行上述确定同步点的位置,得到所述原始程序的所有同步点的位置。
进一步的,在得到所述同步点的位置之后,所述步骤S202还包括:在所述同步点的位置加入同步指令;其中,所述同步指令用于使所述包括多个处理核的系统生成同步信号。即所述处理核执行完同步点之间的程序指令会后,继续执行所述同步指令。可选的,所述处理核执行所述同步指令之后,会产生同步请求信号,请求所述包括多个处理核的系统生成同步信号,所述系统中包括同步信号发生器,所述同步信号发生器在接收到所述系统中参与程序执行的每个处理核所发出的同步请求信号之后,产生同步信号使得所述多个处理核进入下一个不同周期,以执行后续的程序指令。
返回附图2,所述执行程序的编译方法,还包括:
步骤S203,根据所述处理核的个数和所述同步点的位置将所述原始程序编译成执行程序。
其中,所述执行程序包括多个程序段,所述程序段以所述同步点的位置为分界点生成,每个所述程序段中包括所述原始程序中的指令以及所述处理核执行所述原始程序中的指令所需要的控制指令。如上所述,子程序中被插入同步点,而多个程序段之间以所述同步点为分界点,因此一个程序段中所包含的指令可能是一个子程序中的部分或全部指令,或者多个子程序中的指令。
其中,所述控制指令用于处理核在每个同步周期中读取下一个同步周期所需要的参数和/或下一个程序段等。所述程序段的结尾处还包括上述同步指令,用于生成同步请求信号。其中,所述处理核的个数用于生成所述执行程序中的分配信息和/或分组信息,用于所述包括多个处理核的系统执行所述执行程序时,对其多个处理核进行分组以及程序段、参数、输入数据的分配等。
通过上述执行程序的编译方法,将原始程序编译成适合多处理核系统执行的执行程序,其中编译生成所述执行程序的依据为原始程序的输入输出数据的属性以及参数,因此增强了执行程序与多处理核系统的契合度,提高了多处理核系统的有效算力;另外,原始程序所产生的中间数据,均在多处理核系统内移动,不需要与外部存储器进行交换,从而降低了时延,降低了对外部存储器的带宽的压力,也降低了整个多处理核系统的功耗。
图6a为本公开实施例所提供的包括多个处理核的系统的结构示意图的示例。如图6a所示,在该示例中,所述包括多个处理核的系统为芯片,所述芯片600包括:
多个处理核601和同步信号发生器602;其中每个处理核包括数据存储区域和参数存储区域;
其中,所述多个处理核601用于根据执行程序进行分组,其中每一组中的处理核用于执行所述执行程序中的多个程序段;其中所述数据存储区域用于存储所述多个程序段的输入数据和输出数据,所述参数存储区域用于存储所述多个程序段的参数;
所述同步信号发生器602,用于在所有执行所述程序段的处理核均执行完毕时,发送同步信号至所有处理核。
下面通过图6a所示的芯片的结构对上述执行程序的编译过程进行举例说明。如图6a所 示,所述芯片600中包括4个处理核,分别为C
1、C
2、C
3、C
4,每个处理核包括1MB的数据存储区域,每个处理核还包括参数存储区域和程序存储区域(均未示出),芯片外连接有外部存储器DDR,用于存储原始程序的输入数据、参数以及最终的输出数据。
所述原始程序以一个2层的神经网络为例,其结构和各层的输入输出数据总量如图7所示。神经网络的第一个层L1的输入数据为400KB,输出数据为800KB;神经网络的第二层L2的输入数据的大小与第一层的输出数据的大小相同为800KB,输出数据为10KB。
上述执行程序的编译方法由神经网络编译器执行。根据上述执行程序的编译方法的实施例,所述神经网络编译器首先执行步骤S301,对所述神经网络进行分析,得到每一层的输入数据和输出数据的大小之和,生成各层的数据总量表格表1:
Layer | InData(KB) | OutData(KB) | Total Data(KB) |
L1 | 400 | 800 | 1200 |
L2 | 800 | 10 | 810 |
表1
之后,执行上述步骤S302中的步骤,根据所述每一层的数据总量以及所述处理核的数据存储区域的大小计算执行所述原始程序所需要的处理核的个数,如果计算过程中产生小数,则向上取整数。计算结果如下表2所示:
Layer | Calculate Core Number | Core Number |
L1 | 1200/1000=1.2 | 2 |
L2 | 810/1000=0.8 | 1 |
表2
该计算结果表示执行第一层的子网络程序需要2个处理核,执行第二层的子网络程序需要1个处理核。由于神经网络中每一层子网络需要依次执行,因为子网络之间不能并行执行,则为了执行所述神经网络,至少需要2个处理核。即执行所述神经网络所需要的处理核的个数N
min=2。
之后确定芯片的处理核分组中,每个分组的处理核个数Ng,Ng需要满足以下两个条件,以期达到芯片算力利用率的最大化:
a.N
g>=N
min;
b.N=A*N
g,A为正整数。
在上例中,芯片中包括4个处理核,则N=4,Nmin=2,可以求得:A=2时,N
g=N
min=2,即芯片4个处理核分成两组,每组中包含2个核,每一组内的核并行计算同一个任务,2组可以并行处理2个任务。如图6b所示即为上述图6a所示的芯片中的处理核的分组,其中C
1和C
2为第一分组Group1,C
3和C
4为第二分组Group2。
对于每个分组,根据分组中的处理核的个数N
g,将神经网络各层的输入输出数据进行切分,使得他们能够在两个处理核上并行计算,并且使得两个处理核的计算量平衡。两个处理核在同一个同步周期中所使用的参数相同。
图8为第一分组中的两个处理核切分数据的示意图。如图8中所示,首先对L1的输入数据进行切分,L1的输入数据为400KB,将其分给两个处理核进行计算,切分成2个200K的子输入数据(并不一定是完全的等分,某些情况下两个处理核会使用部分相同的输入数据, 这个时候这部分输入数据就需要同时给两个处理核核,那么两部分子输入数据都会大于200KB),分别分配给Group1中的C1和C2做输入数据;当它们完成第一层神经网络L1的计算,各自会产生L1的800KB输出数据的一半,400KB的子输出数据;C1和C2将自身的L1的子输出数据,作为各自L2的子输入数据(并不一定各自L1的输出就能作为其L2的输入,可能C1的L1的部分子输出数据需要分配给C2,与C2的L1的子输出数据一起做其L2的子输入数据,同样的,可能C2的L1的部分子输出数据也需要分配给C1做其L2的输入,但是两者的数据交换均在芯片内的存储区域进行,不需要读写芯片外存储DDR);当两者完成L2的计算,各自会产生L2的10KB输出数据的一半5KB的子输出数据,两个子输出数据合成总的10KB的输出数据。由此芯片完成一个完整执行程序的运行。Group2的情况与Group1类似,只是输入数据不同,也由此,图6a中的芯片可以并行执行两个神经网络计算任务。
在得到输入数据的划分方案之后,继续执行步骤S202中的实施例,根据各层的参数和处理核内的参数存储区大小,确定同步点的位置;使得在每一个同步周期中,各处理核能从处理核内部的参数存储区读取参数进行神经网络计算,并能在所述同步周期中,将下一个同步周期中所要使用的参数从芯片外存储区,即DDR中读取到处理核内的参数存储区。根据同步点的位置,在同步点的位置处插入同步指令。
之后继续执行步骤S203中的实施例,生成所述N
g处理核中所要执行的程序段,此过程可以调用传统的编译器生成可执行程序段,每个程序段由两个同步点之间的神经网络的程序生成。
在所述芯片执行所述执行程序时,通过上述图8中的方式将输入数据进行分割,之后处理核根据输入数据和参数执行所述执行程序中的程序段,每次执行到同步指令,则生成同步请求发送至同步信号发生器,当所述同步信号发生器接收到所述芯片中的每个处理核所发出的同步请求之后,生成同步信号并发送至每个处理核,使得每个处理核进入下一个同步周期并使用新的参数继续执行所述执行程序的程序段,直至执行程序执行完毕得到输出结果。
本公开的上述执行程序的编译方法,可以在预先知道处理核的数量的情况下执行,此时编译之后得到的执行程序中可以带有分配信息,其中包括处理核的分组信息,输入数据(包括作为其他层的输入数据的中间数据)的划分方式等;所述执行程序的编译方法,也可以预先不知道处理核的数量,此时编译之后得到的执行程序中可以带有执行所述执行程序所需要的处理核的个数以及处理核的分组策略,在执行所述执行程序时,首选获取当前芯片的处理核数量,并根据所述分组策略以及执行所述执行程序所需要的处理核的个数计算出当前芯片执行所述执行程序的最优分组方式,之后再根据所述分组方式给各组的处理核分配任务。
通过上述示例可以看出,使用本公开实施例中的执行程序编译方法对原始程序进行编译,并使用本公开实施例中的芯片执行所述执行程序。在执行所述执行程序时,对于每一个处理核,由于其使用的参数相同,因此处理核在每个同步周期中计算量相同,从而使得各同步周期中,所有处理核的计算时间一致,避免了不同处理核计算时间不等,先完成计算的处理核需要等待后完成计算的处理核而带来的算力损失,从而大大提升了芯片的有效算力;此外,所有的处理核使用相同的参数,从而参数只需要从DDR中读取一次,便可以给所有处理核共用,大大提高了参数的复用率,降低了对DDR带宽的需求,也降低了功耗。
本公开实施例还提供一种电子设备,包括:存储器,用于存储计算机可读指令;以及一 个或多个处理器,用于运行所述计算机可读指令,使得所述处理器运行时实现实施例中的任一所述执行程序的编译方法。
本公开实施例还提供一种非暂态计算机可读存储介质,其特征在于,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行前述实施例中的任一所述执行程序的编译方法。
本公开实施例还提供一种计算机程序产品,其中,其特征在于:包括计算机指令,当所述计算机指令被计算设备执行时,所述计算设备可以执行前述实施例中的任一所述执行程序的编译方法。
本公开实施例还提供一种计算装置,其特征在于,包括所述实施例中的任一所述的芯片。
本公开附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
Claims (10)
- 一种执行程序的编译方法,用于包括多个处理核的系统中,其特征在于,包括:根据原始程序的数据的属性确定执行所述原始程序所需要的处理核的个数;根据所述原始程序的参数确定所述原始程序中的同步点的位置;根据所述处理核的个数和所述同步点的位置将所述原始程序编译成执行程序。
- 如权利要求1所述的执行程序的编译方法,其特征在于,所述根据原始程序的数据的属性确定执行所述原始程序所需要的处理核的个数,包括:获取所述原始程序中的每一个子程序的数据总量;其中所述子程序的数据总量包括所述子程序的输入数据的大小和输出数据的大小之和;根据所述每一个子程序的数据总量以及所述处理核的数据存储区域的大小确定执行所述原始程序所需要的处理核的个数。
- 如权利要求2所述的执行程序的编译方法,其特征在于,所述根据所述每一个子程序的数据总量以及所述处理核的数据存储区域的大小计算执行所述原始程序所需要的处理核的个数,包括:计算所述每一个子程序的数据总量和所述处理核的数据存储区域的大小的商;将多个所述商中的最大商向上取整后的值作为执行所述原始程序所需要的处理核的个数。
- 如权利要求1-3中任一项所述的执行程序的编译方法,其特征在于,所述根据所述原始程序的参数确定所述原始程序中的同步点的位置,包括:根据所述处理核的参数存储区域的大小以及所述多个子程序的参数的大小确定所述多个子程序的同步点的位置。
- 如权利要求4中任一项所述的执行程序的编译方法,其特征在于,所述根据所述处理核的参数存储区域的大小以及所述子程序的参数的大小确定所述子程序的同步点的位置,包括:根据所述处理核的参数存储区域的大小以及所述子程序的参数的大小确定所述处理核的参数存储区域能够存储的所述子程序的参数的数量;根据所述处理核的参数存储区域能够存储的所述子程序的参数的数量确定所述子程序的同步点的位置。
- 如权利要求1-5中任一项所述的执行程序的编译方法,其特征在于,在确定所述同步点的位置之后,还包括:在所述同步点的位置加入同步指令;其中,所述同步指令用于使所述包括多个处理核的系统生成同步信号。
- 如权利要求1-6中任一项所述的执行程序的编译方法,其特征在于:所述执行程序中包括多个程序段,每个程序段中包括所述原始程序中的指令以及所述处理核执行所述原始程序中的指令所需要的控制指令。
- 如权利要求2-7中任一项所述的执行程序的编译方法,其特征在于,所述原始程序为神经网络,所述子程序为所述神经网络中的一层子网络。
- 如权利要求8所述的执行程序的生成方法,其特征在于,所述获取所述原始程序中的每一个子程序的数据总量,包括:获取所述神经网络;分析所述神经网络中每一层子网络的输入数据的大小和输出数据的大小;生成所述神经网络中每一层子网络的数据总量。
- 一种芯片,其特征在于,包括:多个处理核和同步信号发生器;其中每个处理核包括数据存储区域和参数存储区域;其中,所述多个处理核用于根据执行程序进行分组,其中每一组中的处理核用于执行所述执行程序中的多个程序段;其中所述数据存储区域用于存储所述多个程序段的输入数据和输出数据,所述参数存储区域用于存储所述多个程序段的参数;所述同步信号发生器,用于在所有执行所述程序段的处理核均执行完毕时,发送同步信号至所有处理核。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2020/141941 WO2022141344A1 (zh) | 2020-12-31 | 2020-12-31 | 执行程序的编译方法、芯片、电子设备及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116710930A true CN116710930A (zh) | 2023-09-05 |
Family
ID=82258806
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080108193.6A Pending CN116710930A (zh) | 2020-12-31 | 2020-12-31 | 执行程序的编译方法、芯片、电子设备及计算机可读存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116710930A (zh) |
WO (1) | WO2022141344A1 (zh) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101639901A (zh) * | 2009-09-03 | 2010-02-03 | 王连明 | 基于多核技术的前馈神经网络硬件实现方法 |
CN109522254B (zh) * | 2017-10-30 | 2022-04-12 | 上海寒武纪信息科技有限公司 | 运算装置及方法 |
CN111461296B (zh) * | 2018-12-29 | 2023-09-22 | 中科寒武纪科技股份有限公司 | 数据处理方法、电子设备和可读存储介质 |
US11645358B2 (en) * | 2019-01-29 | 2023-05-09 | Hewlett Packard Enterprise Development Lp | Generation of executable files corresponding to neural network models |
-
2020
- 2020-12-31 CN CN202080108193.6A patent/CN116710930A/zh active Pending
- 2020-12-31 WO PCT/CN2020/141941 patent/WO2022141344A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2022141344A1 (zh) | 2022-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109993299B (zh) | 数据训练方法及装置、存储介质、电子装置 | |
US10691464B1 (en) | Systems and methods for virtually partitioning a machine perception and dense algorithm integrated circuit | |
CN108416436B (zh) | 使用多核心处理模块进行神经网络划分的方法及其系统 | |
CN103049241B (zh) | 一种提高cpu+gpu异构装置计算性能的方法 | |
JP2010033561A (ja) | マルチプロセッサ・システム上でデータ・セットを区分化およびソートするための方法および装置 | |
CN112084038B (zh) | 神经网络的内存分配方法及装置 | |
WO2022068663A1 (zh) | 内存分配方法、相关设备及计算机可读存储介质 | |
CN107122244A (zh) | 一种基于多gpu的图数据处理系统及方法 | |
CN111274016B (zh) | 基于模块融合的动态部分可重构系统应用划分与调度方法 | |
CN105956666B (zh) | 一种机器学习方法及系统 | |
Nishida et al. | Accelerating the dynamic programming for the optimal polygon triangulation on the GPU | |
US11630986B2 (en) | Graph conversion method | |
CN111142938A (zh) | 一种异构芯片的任务处理方法、任务处理装置及电子设备 | |
Shafique et al. | Minority-game-based resource allocation for run-time reconfigurable multi-core processors | |
CN114580606A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
Jeon et al. | Parallel exact inference on a CPU-GPGPU heterogenous system | |
CN114330730A (zh) | 量子线路分块编译方法、装置、设备、存储介质和产品 | |
CN106484532B (zh) | 面向sph流体模拟的gpgpu并行计算方法 | |
CN110764824A (zh) | 一种gpu上的图计算数据划分方法 | |
WO2021147567A1 (zh) | 卷积运算方法及芯片 | |
CN113553054A (zh) | 基于异构系统的编译方法、装置、设备及存储介质 | |
CN113222099A (zh) | 卷积运算方法及芯片 | |
CN116710930A (zh) | 执行程序的编译方法、芯片、电子设备及计算机可读存储介质 | |
CN114691142A (zh) | 执行程序的编译方法、芯片、电子设备及计算机可读存储介质 | |
CN111045803A (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 | ||
CB02 | Change of applicant information |
Address after: 100012 801, 802, 803, 808, 8th floor, building 5, courtyard 5, Laiguangying West Road, Chaoyang District, Beijing Applicant after: Beijing SIMM Computing Technology Co.,Ltd. Address before: 100095 202-24, building 6, yard 1, gaolizhang Road, Haidian District, Beijing Applicant before: Beijing SIMM Computing Technology Co.,Ltd. |
|
CB02 | Change of applicant information |