一种内存复用方法及其相关产品转让专利

申请号 : CN201910750827.7

文献号 : CN110490313B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 不公告发明人

申请人 : 中科寒武纪科技股份有限公司

摘要 :

本公开涉及一种可用于神经网络的内存复用方法、计算机可读存储介质、内存复用设备和计算设备,该计算设备包括:一个或多个处理器;和存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行内存复用方法。

权利要求 :

1.一种可用于神经网络的内存复用方法,其特征在于,所述内存复用方法包括:接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间;

通过所述当前算子对所述输入数据进行处理,获得对应的输出数据;

判断所述输入数据是否继续用于所述计算图中其他算子的处理,获取第一判断结果;

根据所述第一判断结果对所述存储空间进行复用;

所述第一判断结果为所述输入数据不再继续用于所述计算图中其他算子的处理时,释放所述输入数据占用的存储空间,以使所述存储空间用于存储其他数据;判断输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果;其中,所述输入数据的数据集包括至少两个输入数据子集;所述存储空间允许存储的数据规模小于所述输入数据的数据集的数据规模;

根据所述第二判断结果对所述存储空间进行复用。

2.如权利要求1所述的内存复用方法,其特征在于,所述其他数据是与所述输入数据不相关的数据。

3.如权利要求1所述的内存复用方法,其特征在于,所述第二判断结果为所述输入数据子集不再继续用于所述当前算子的处理时,释放所述输入数据子集占用的存储空间,以使所述输入数据子集占用的存储空间允许用于存储未被所述当前算子进行处理的其他输入数据子集所对应的输出数据。

4.一种可用于神经网络的内存复用方法,其特征在于,所述内存复用方法包括:接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间;所述输入数据的数据集包括至少两个输入数据子集;所述存储空间允许存储的数据规模小于所述输入数据的数据集的数据规模;

通过所述当前算子对所述输入数据子集进行处理,获得对应的输出数据;

判断所述输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果;

根据所述第二判断结果对所述存储空间进行复用。

5.如权利要求4所述的内存复用方法,其特征在于,所述第二判断结果为所述输入数据子集不再继续用于所述当前算子的处理时,释放所述输入数据子集对应的存储空间,以使输入数据子集对应的存储空间允许用于存储未被所述当前算子进行处理的其他输入数据子集所对应的输出数据。

6.一种计算机可读存储介质,包括存储于其上的计算机可执行指令,所述可执行指令在被处理器执行时实施如权利要求1‑3或4‑5中任一项所述的内存复用方法。

7.一种可用于神经网络的内存复用装置,其特征在于,所述内存复用装置包括:接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间的单元;其中,所述输入数据的数据集包括至少两个输入数据子集;所述存储空间允许存储的数据规模小于所述输入数据的数据集的数据规模;

通过所述当前算子对所述输入数据子集进行处理并获得对应的输出数据的单元;

判断所述输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果的单元;和

根据所述第二判断结果对所述存储空间进行复用的单元。

8.一种计算设备,其特征在于,所述计算设备包括:一个或多个处理器;和

存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如权利要求1‑5中任一项所述的内存复用方法。

说明书 :

一种内存复用方法及其相关产品

技术领域

[0001] 本公开涉及人工智能技术领域,尤其涉及一种可用于神经网络的内存复用方法、计算机可读存储介质、内存复用设备以及计算设备。

背景技术

[0002] 深度神经网络(DNNs)被越来越多的用在各种应用场合中,例如语音识别、目标检测、语义分割等。随着神经网络技术的持续发展,神经元以及突触(synapsis)的数目都在成
指数级地增加。因此,运算操作量以及内存访问量也随之快速地增加,远远超出了硬件处理
的能力,尤其对于嵌入式系统来说,问题尤为严重。业界已经提出了一些解决方案,例如剪
枝(pruning)、数据压缩、低精度量化等。但是,现有的通用处理器平台(例如CPU、FPGA、DSP
等)仍然难以充分满足实际应用的要求。
[0003] 一些研究人员考虑了深度神经网络算法的通用特征,并且设计出神经网络加速器。神经网络加速器一般增加了专用的片上存储器以提高性能。数据从外部的存储器
(DRAM)被加载到片上存储器,完成计算之后,计算结果被存储回外部存储器中。然而,对于
大部分神经网络加速器来说,计算资源的大量增加将会使得内存带宽的短缺以及片上网络
的资源竞争的问题更加严重。内部存储和外部存储之间的数据传输延迟占据了程序执行时
间中的一大部分。神经网络加速器的发展,使得深度神经网络的运行越来越快,但是,外部
存储器DRAM的带宽的缓慢发展,使得内存访问称为加速器发展的一个瓶颈问题。亟需解决
这个问题,才能更有效地利用加速器。
[0004] 因此,如何实现片上内存的有效利用,如何能够有效复用片上内存,是一个亟待解决的问题。
[0005] 背景技术部分的内容仅仅是发明人所知晓的技术,并不当然代表本领域的现有技术。

发明内容

[0006] 针对上述技术问题中的至少一个,本申请提出一种可用于神经网络的内存复用方法,所述内存复用方法包括:
[0007] 接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间;
[0008] 通过所述当前算子对所述输入数据进行处理,获得对应的输出数据;
[0009] 判断所述输入数据是否继续用于所述计算图中其他算子的处理,获取第一判断结果;
[0010] 根据所述第一判断结果对所述存储空间进行复用。
[0011] 本申请还涉及一种可用于神经网络的内存复用方法,所述内存复用方法包括:
[0012] 接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间;所述输入数据的数据集包括至少两个输入数据子集;所述存储空间允许
存储的数据规模小于所述输入数据的数据集的数据规模;
[0013] 通过所述当前算子对所述输入数据子集进行处理,获得对应的输出数据;
[0014] 判断所述输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果;
[0015] 根据所述第二判断结果对所述存储空间进行复用。
[0016] 本申请还涉及一种计算机可读存储介质,包括存储于其上的计算机可执行指令,所述可执行指令在被处理器执行时实施如上所述的内存复用方法。
[0017] 本申请还涉及一种可用于神经网络的内存复用装置,所述内存复用装置包括:
[0018] 接收用于所述神经网络对应计算图中当前算子的输入数据并将所述输入数据存储到一存储空间的单元;
[0019] 通过所述当前算子对所述输入数据进行处理以获得对应的输出数据的单元;
[0020] 判断所述输入数据是否继续用于所述计算图中其他算子的处理以获取第一判断结果的单元;
[0021] 根据所述第一判断结果对所述存储空间进行复用的单元。
[0022] 本申请还涉及一种可用于神经网络的内存复用装置,所述内存复用装置包括:
[0023] 接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间的单元;其中,所述输入数据的数据集包括至少两个输入数据子集;所述存
储空间允许存储的数据规模小于所述输入数据的数据集的数据规模;
[0024] 通过所述当前算子对所述输入数据子集进行处理并获得对应的输出数据的单元;
[0025] 判断所述输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果的单元;和
[0026] 根据所述第二判断结果对所述存储空间进行复用的单元。
[0027] 本申请还涉及一种计算设备,所述计算设备包括:
[0028] 一个或多个处理器;和
[0029] 存储装置,用于存储一个或多个程序,
[0030] 当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如上所述的内存复用方法。

附图说明

[0031] 附图用来提供对本申请的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请,并不构成对本申请的限制。在附图中:
[0032] 图1示出了根据本申请一个实施例的内存复用方法;
[0033] 图2示出了根据本申请一个优选实施例的内存复用方法的示意图;
[0034] 图3示出了根据本申请一个实施例的输入数据的输入数据子集的示意图;
[0035] 图4示出了根据本申请一个优选实施例的内存复用方法的示意图;
[0036] 图5示出了根据本申请另一个实施例的内存复用方法;
[0037] 图6和图7示出了根据本申请一个实施例的计算机程序产品的框图;
[0038] 图8和图9示出了根据本申请一个实施例的内存复用装置的框图。

具体实施方式

[0039] 在下文中,仅简单地描述了某些示例性实施例。正如本领域技术人员可认识到的那样,在不脱离本公开的精神或范围的情况下,可通过各种不同方式修改所描述的实施例。
因此,附图和描述被认为本质上是示例性的而非限制性的。
[0040] 下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披
露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,
都属于本披露保护的范围。
[0041] 应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书
中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,
但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
[0042] 还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文
清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一
步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一
个或多个的任何组合以及所有可能组合,并且包括这些组合。
[0043] 如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如
果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”
或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0044] 以下结合附图对本公开的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本公开,并不用于限定本公开。
[0045] 深度学习框架是整个深度学习生态体系中的第一层。早期在Caffe中,Layer被当做是构建神经网络的基本元素,而在之后的深度学习框架,例如TensorFlow、MXNet中,虽然
采用了不同的称呼,例如Operator,但与Caffe的layer在核心思想上依旧是相似的,都是将
神经网络计算进一步拆分为各类常见的面向张量数据的算子,深度学习框架需要将神经网
络映射的计算图结构所表达的深度学习任务具体化成可以在CPU或者人工智能处理器执行
的指令和数据。在这个过程中,深度学习框架采用算子作为落实计算任务的具体元素,为每
个算子都提供了在CPU或者人工智能处理器上执行的核函数(Kernel),根据计算图,深度学
习框架调度执行计算图中每个算子对应的核函数,完成整个神经网络的计算。
[0046] 图1示出了根据本申请第一实施例的一种可用于神经网络的内存复用方法100,下面以caffe为例参考附图详细描述。如图1所示,所述内存复用方法100包括:
[0047] 在步骤S101,接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间。
[0048] 在caffe框架下,所述神经网络例如具有多个处理层,包括但不限于Convolution层、BatchNorm层、Scale层、ReLU层、Pooling层、Eltwise层、InnerProduct层、和SoftMax层。
步骤S101中的当前算子可以为神经网络对应计算图中的任一算子。当接收到当前算子的输
入数据后,将其存入到人工智能处理器的片上存储器的存储空间中。
[0049] 在步骤S102,通过所述当前算子对所述输入数据进行处理,获得对应的输出数据。
[0050] 在本步骤中,神经网络的多个处理层中,每一层都可执行预设的数据处理操作。例如,Convolution层执行卷积函数操作,Pooling层执行池化函数。在接收到所述输入数据之
后,当前处理层基于该输入数据,根据其预设的处理操作或处理函数,执行相应的处理,获
得对应的输出数据。
[0051] 在步骤S103,判断所述输入数据是否继续用于所述计算图中其他算子的处理,获取第一判断结果。
[0052] 在本步骤中,当前层对该输入数据进行处理之后,获得了对应的输出数据,此时可判断其他的处理层是否需要使用该输入数据,并获得第一判断结果。例如当其他处理层仍
然需要使用该输入数据时,第一判断结果为“是”;否则当其他处理层不再需要使用该输入
数据时,第一判断结果为“否”。
[0053] 在步骤S104,根据所述第一判断结果对所述存储空间进行复用。
[0054] 在本步骤中,根据本申请的一个优选实施例,当所述第一判断结果为所述输入数据不再继续用于所述神经网络中其他处理层的处理时,释放所述存储空间,以使所述存储
空间可用于存储其他数据。例如可以清空该存储空间,或者将该存储空间标记为“可用”,来
释放该存储空间。根据本申请的一个优选实施例,所述其他数据例如是与所述输入数据不
相关的数据。
[0055] 根据本申请的一个实施例,当两个数据的存续时间存在重叠时,认为这两个数据是“相关的”。否则,这两个数据是“不相关的”,因而可以共用一个存储空间。本申请中,存续
时间例如定义为该数据的存储器空间的分配时间点与释放时间点之间的时间段。
[0056] 以caffe为例,如图2所示,随机访问存储器空间Ram A和随机访问存储器空间Ram B是相关的,因而二者的存续时间具有重叠;随机访问存储器空间RAM B和随机访问存储器
空间Ram C也是相关的,因为二者的存续时间具有重叠。但是对于随机访问存储器空间Ram 
A和Ram C,它们是不相关的,因为二者的存续时间不具有重叠,因此二者可以共用同一个存
储器空间。
[0057] 因此,根据图2所示的方法,可以将Ram C中的数据存储到Ram A中,节省单独分配Ram C所需的存储器空间。基于神经网络对应计算图中数据传输的单向性,一旦其中一层的
输入数据已经被使用过,并且其他层不再需要该输入数据,那么该输入数据的存储空间可
以被复用。另外,在大部分的推理阶段,数据的形状可以提前获得,这也有助于片上存储器
的复用。为了简化,此处只关注存储器使用状态发生变化的时间点,并且限定每个数据从分
配点到释放点的存续时间。为了更清楚地示出这个过程,图2中示出了一个序列作为范例。
[0058] 根据本申请的一个优选实施例,在所述第一判断结果为所述输入数据不再继续用于所述神经网络中其他处理层的处理时,释放所述存储空间,并且将与所述输入数据对应
的输出数据存储到该存储空间中。这种实现方式是特别有利的,尤其是在一些逐元素层中,
例如Add、BatchNorm、Scale层等,输入数据与输出数据具有相同的大小,并且可以共用相同
的存储器空间,通过将输出数据直接写入输入数据的存储器空间中,可以避免为输出数据
重新分配存储器空间,大大节省了片上存储器的使用。
[0059] 根据本申请的一个优选实施例,所述当前算子的输入数据的数据集包括至少两个输入数据子集(或称数据块)。当前算子可基于每个输入数据子集,进行相应的处理,得到处
理结果。片上存储空间所允许存储的数据规模或数据量例如小于所述输入数据的数据集的
数据规模或数据量,在此情况下,根据本申请的一个优选实施例,所述内存复用方法100还
包括:判断当前输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果;其
中,所述输入数据的数据集包括至少两个输入数据子集;根据所述第二判断结果对所述存
储空间进行复用。
[0060] 以caffe为例,如图3所示,当前处理层的输入数据的数据集例如包括m*n个数据子集,例如分为m行n列,分别为ID(1,1)、ID(1,2)…ID(m,n),在片上存储器空间非常有限的情
况下,例如不足以同时存储所述m*n个数据子集,那么可以顺序地、或者分批次地向片上存
储器空间中载入一个或多个数据子集,称为当前输入数据子集。当前处理层对当前输入数
据子集进行处理之后,判断已经载入的当前输入数据子集是否还继续用于当前算子,获得
第二判断结果,并根据第二判断结果来进行存储空间的复用。
[0061] 例如,当所述第二判断结果为当前输入数据子集不再继续用于所述当前算子的处理时,释放所述存储空间,以使所述存储空间允许用于存储未被所述当前算子进行处理的
输入数据子集所对应的输出数据。
[0062] 以caffe为例,参考图3,根据本申请的一个实施例,可以首先将输入数据子集中第一行的n个输入数据子集ID(1,1)…ID(1,n)读入到片上存储器中,在当前处理层进行相应
的处理后,判断这n个输入数据子集是否还需要继续用于当前处理层的处理。如果不再需
要,则释放这n个输入数据子集所占用的空间,并且读入第二行的n个输入数据子集ID(2,
1)…ID(2,n)。或者可替换的,如果这n个输入数据子集中的一部分还需要继续用于当前层
的处理,其余部分不再需要继续用于当前层的处理,那么则可以释放不需要继续使用的部
分,以节约片上存储器空间,释放出的部分可用于读入新的输入数据或者存放输出数据。
[0063] 为了更清楚的显示,以caffe为例,参考图4,以卷积层为例进行说明。
[0064] 如图4所示,其中横轴代表输出数据在高度和宽度维度上的增长。此处考虑高度与宽度的乘积作为一个维度。对于每个点的计算,获取所需要的数据块中第一点的地址和当
前输出点的地址。此处将这些点连接成两条线,如图4所示。对于每个点,那些地址位于输入
地址线下方的输入数据的存储器空间可以被复用,因为这些数据已经被用于计算当前点之
间的输出数据。
[0065] 即使输出数据的存续时间和输入数据的存续时间具有重叠,它们仍然可以共用一部分存储器空间。如图所示,输入数据的地址范围是从2096(字节)到8240(字节),输出数据
的地址范围是从0(字节)到5952(字节)。因此,在这种情况下,减少了31%的存储器使用。
[0066] 这种内存复用方法可以节省大量的存储器空间。优选的,本申请提供一种深度内存复用方法。基于局部独立性的特征,当输入数据的一部分已经被用于获得输出数据中的
一部分,那么该输入数据的所述一部分的存储器空间可以被复用。因此,即使输入数据的存
续时间与输出数据的存续时间具有重叠,但是输出数据可以复用输入数据的存储器空间。
尤其是对于一些逐元素层(element‑wise layer),例如Add、BatchNorm、Scale层等,更是这
样。这些层中,输入数据与输出数据具有相同的大小,并且可以共用相同的存储器空间。
[0067] 图5示出了根据本申请另一个实施例的可用于神经网络的内存复用方法200,下面参考图5描述。内存复用方法200包括:
[0068] 在步骤S201,接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间;所述输入数据的数据集包括至少两个输入数据子集;所述
存储空间允许存储的数据规模小于所述输入数据的数据集的数据规模。
[0069] 在步骤S202,通过所述当前算子对所述输入数据子集进行处理,获得对应的输出数据。
[0070] 在步骤S203,判断所述输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果。
[0071] 在步骤S204,根据所述第二判断结果对所述存储空间进行复用。
[0072] 例如,当所述第二判断结果为所述输入数据子集不再继续用于所述当前算子的处理时,释放所述输入数据子集占用的存储空间,以使所述存储空间允许用于存储未被所述
当前算子进行处理的输入数据子集所对应的输出数据。
[0073] 以caffe为例,如图3所示,当前处理层的输入数据的数据集例如包括m*n个数据子集,分别为ID(1,1)、ID(1,2)…ID(m,n),在片上存储器空间非常有限的情况下,例如不足以
同时存储所述m*n个数据子集,那么可以顺序地、或者分批次地向片上存储器空间中载入一
个或多个数据子集,称为当前输入数据子集。当前处理层对当前输入数据子集进行处理之
后,判断已经载入的当前输入数据子集是否还继续用于当前处理层,获得第二判断结果,并
根据第二判断结果来进行存储空间的复用。
[0074] 例如,当所述第二判断结果为所述输入数据子集不再继续用于所述当前算子的处理时,释放所述输入数据占用的存储空间,以使所述存储空间允许用于存储未被所述当前
算子进行处理的输入数据子集所对应的输出数据。
[0075] 以caffe为例,参考图3,根据本申请的一个实施例,可以首先将输入数据子集中第一行的n个输入数据子集ID(1,1)…ID(1,n)读入到片上存储器中,在当前处理层进行相应
的处理后,判断这n个输入数据子集是否还需要继续用于当前处理层的处理。如果不再需
要,则释放这n个输入数据子集所占用的空间,并且读入第二行的n个输入数据子集ID(2,
1)…ID(1,n)。或者可替换的,如果这n个输入数据子集中的一部分还需要继续用于当前层
的处理,其余部分不再需要继续用于当前层的处理,那么则可以释放不需要继续使用的部
分,以节约片上存储器空间。
[0076] 因此,即使输出数据的存续时间和输入数据的存续时间具有重叠,它们仍然可以共用一部分存储器空间。如图4所示,输入数据的地址范围是从2096(字节)到8240(字节),
输出数据的地址范围是从0(字节)到5952(字节)。因此,在这种情况下,减少了31%的存储
器使用。
[0077] 图6示出了根据本申请一个实施例的一种计算机程序产品600的框图。信号承载介质602可以被实现为或者包括计算机可读介质606、计算机可记录介质608、计算机通信介质
610或者它们的组合,其存储可配置处理单元以执行先前描述的过程中的全部或一些的编
程指令604。这些指令可以包括例如用于使一个或多个处理器执行如下处理的一个或多个
可执行指令:接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数
据存储到一存储空间;通过所述当前算子对所述输入数据进行处理,获得对应的输出数据;
判断所述输入数据是否继续用于所述计算图中其他算子的处理,获取第一判断结果;根据
所述第一判断结果对所述存储空间进行复用。
[0078] 图7示出了根据本申请一个实施例的一种计算机程序产品700的框图。信号承载介质702可以被实现为或者包括计算机可读介质706、计算机可记录介质708、计算机通信介质
710或者它们的组合,其存储可配置处理单元以执行先前描述的过程中的全部或一些的编
程指令704。这些指令可以包括例如用于使一个或多个处理器执行如下处理的一个或多个
可执行指令:接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数
据存储到一存储空间;所述输入数据的数据集包括至少两个输入数据子集;所述存储空间
允许存储的数据规模小于所述输入数据的数据集的数据规模;通过所述当前算子对所述输
入数据子集进行处理,获得对应的输出数据;判断所述输入数据子集是否继续用于所述当
前算子的处理,获取第二判断结果;根据所述第二判断结果对所述存储空间进行复用。
[0079] 图8示出了根据本申请一个实施例的可用于神经网络的内存复用装置800,所述内存复用装置800包括:
[0080] 接收用于所述神经网络对应计算图中当前算子的输入数据并将所述输入数据存储到一存储空间的单元801;
[0081] 通过所述当前算子对所述输入数据进行处理以获得对应的输出数据的单元802;
[0082] 判断所述输入数据是否继续用于所述计算图中其他算子的处理以获取第一判断结果的单元803;和
[0083] 根据所述第一判断结果对所述存储空间进行复用的单元804。
[0084] 图9示出了根据本申请一个实施例的可用于神经网络的内存复用装置900,所述内存复用装置900包括:
[0085] 接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间的单元901;其中,所述输入数据的数据集包括至少两个输入数据子集;所
述存储空间允许存储的数据规模小于所述输入数据的数据集的数据规模;
[0086] 通过所述当前算子对当前输入数据子集进行处理并获得对应的输出数据的单元902;
[0087] 判断所述输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果的单元903;和
[0088] 根据所述第二判断结果对所述存储空间进行复用的单元904。
[0089] 本申请还涉及一种计算设备,所述计算设备包括:
[0090] 一个或多个处理器;和
[0091] 存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如上所述的内存复用方法100或200。
[0092] 条款1:一种可用于神经网络的内存复用方法,所述内存复用方法包括:
[0093] 接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间;
[0094] 通过所述当前算子对所述输入数据进行处理,获得对应的输出数据;
[0095] 判断所述输入数据是否继续用于所述计算图中其他算子的处理,获取第一判断结果;
[0096] 根据所述第一判断结果对所述存储空间进行复用。
[0097] 条款2:如条款1所述的内存复用方法,所述第一判断结果为所述输入数据不再继续用于所述计算图中其他算子的处理,释放所述输入数据占用的存储空间,以使所述存储
空间用于存储其他数据。
[0098] 条款3:如条款2所述的内存复用方法,所述其他数据是与所述输入数据不相关的数据。
[0099] 条款4:如条款2所述的内存复用方法,所述内存复用方法还包括:
[0100] 判断输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果;其中,所述输入数据的数据集包括至少两个输入数据子集;所述存储空间允许存储的数据规模小
于所述输入数据的数据集的数据规模;
[0101] 根据所述第二判断结果对所述存储空间进行复用。
[0102] 条款5:如条款4所述的内存复用方法,所述第二判断结果为所述输入数据子集不再继续用于所述当前算子的处理,释放所述输入数据子集占用的存储空间,以使所述输入
数据子集占用的存储空间允许用于存储未被所述当前算子进行处理的其他输入数据子集
所对应的输出数据。
[0103] 条款6:一种可用于神经网络的内存复用方法,所述内存复用方法包括:
[0104] 接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间;所述输入数据的数据集包括至少两个输入数据子集;所述存储空间允许
存储的数据规模小于所述输入数据的数据集的数据规模;
[0105] 通过所述当前算子对所述输入数据子集进行处理,获得对应的输出数据;
[0106] 判断所述输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果;
[0107] 根据所述第二判断结果对所述存储空间进行复用。
[0108] 条款7:如条款6所述的内存复用方法,所述第二判断结果为所述输入数据子集不再继续用于所述当前算子的处理,释放所述输入数据子集对应的存储空间,以使所述输入
数据子集对应的存储空间允许用于存储未被所述当前算子进行处理的其他输入数据子集
所对应的输出数据。
[0109] 条款8:一种计算机可读存储介质,包括存储于其上的计算机可执行指令,所述可执行指令在被处理器执行时实施如条款1‑5或6‑7中任一项所述的内存复用方法。
[0110] 条款9:一种可用于神经网络的内存复用装置,所述内存复用装置包括:
[0111] 接收用于所述神经网络对应计算图中当前算子的输入数据并将所述输入数据存储到一存储空间的单元;
[0112] 通过所述当前算子对所述输入数据进行处理以获得对应的输出数据的单元;
[0113] 判断所述输入数据是否继续用于所述计算图中其他算子的处理以获取第一判断结果的单元;
[0114] 根据所述第一判断结果对所述存储空间进行复用的单元。
[0115] 条款10:一种可用于神经网络的内存复用装置,所述内存复用装置包括:
[0116] 接收用于所述神经网络对应计算图中当前算子的输入数据,并将所述输入数据存储到一存储空间的单元;其中,所述输入数据的数据集包括至少两个输入数据子集;所述存
储空间允许存储的数据规模小于所述输入数据的数据集的数据规模;
[0117] 通过所述当前算子对所述输入数据子集进行处理并获得对应的输出数据的单元;
[0118] 判断所述输入数据子集是否继续用于所述当前算子的处理,获取第二判断结果的单元;和
[0119] 根据所述第二判断结果对所述存储空间进行复用的单元。
[0120] 条款11:一种计算设备,所述计算设备包括:
[0121] 一个或多个处理器;和
[0122] 存储装置,用于存储一个或多个程序,
[0123] 当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如条款1‑7中任一项所述的内存复用方法。
[0124] 另外,若无特别说明,在本披露各个实施例中的各功能单元/模块可以集成在一个单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集
成在一起。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用软件程序模块的
形式实现。
[0125] 所述集成的单元/模块如果以硬件的形式实现时,该硬件可以是数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于晶体管,忆阻器等等。若无特别说明,所述人
工智能处理器可以是任何适当的硬件处理器,比如CPU、GPU、FPGA、DSP和ASIC等等。若无特
别说明,所述存储单元可以是任何适当的磁存储介质或者磁光存储介质,比如,阻变式存储
器RRAM(Resistive Random Access Memory)、动态随机存取存储器DRAM(Dynamic Random 
Access Memory)、静态随机存取存储器SRAM(Static Random‑Access Memory)、增强动态随
机存取存储器EDRAM(Enhanced Dynamic Random Access Memory)、高带宽内存HBM(High‑
Bandwidth Memory)、混合存储立方HMC(Hybrid Memory Cube)等等。
[0126] 所述集成的单元/模块如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本披露的技术方案本质
上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形
式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机
设备(可为个人计算机、服务器或者网络设备等)执行本披露各个实施例所述方法的全部或
部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储
器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介
质。
[0127] 根据本公开的实施例,一个子处理单元可具有多个输入,意味着有多个数据队列的尾部附着在该子处理单元的输入连接点上。该子处理单元无需知道这些数据队列的头部
附着在其他哪个子处理连接点的输出上,因为系统会自动地完成输入和输出的匹配。对于
子处理单元的输出也是同样的。这样,每个子处理单元只需要关注自身的输入输出连接点
与哪个数据队列连接,而不需要关注它的任何一个前向节点,达到了插件间解耦的效果。子
处理单元只需要考虑自身的输入输出,关注点的确定使子处理单元的实现变得简单,可复
用性提高。考虑流水线的灵活性,每个子处理单元的连接点(无论是输入输出连接点)的数
量不作任何限制,可根据需求进行配置。连接点的个数通过软件或硬件的参数进行配置,甚
至可以实现连接点个数动态可变的子处理单元。
[0128] 同时,处理逻辑的动态耦合的结构意味着对于同一深度的不同分支上的子处理单元可以并行的处理同一帧图像数据。可最大化资源利用率,解决了现有技术的缺陷。
[0129] 流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部
分,并且本公开的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺
序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本公开
的实施例所属技术领域的技术人员所理解。
[0130] 技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质
中,该程序在执行时,包括方法实施例的步骤之一或其组合。
[0131] 此外,在本公开各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模
块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如
果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机
可读存储介质中。所述存储介质可以是只读存储器,磁盘或光盘等。
[0132] 以上所述仅为本公开的较佳实施例而已,并不用以限制本公开,凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。最
后应说明的是:以上所述仅为本公开的优选实施例而已,并不用于限制本公开,尽管参照前
述实施例对本公开进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各
实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本公开
的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之
内。