CN111984400B - 神经网络的内存分配方法及装置 - Google Patents
神经网络的内存分配方法及装置 Download PDFInfo
- Publication number
- CN111984400B CN111984400B CN202010696668.XA CN202010696668A CN111984400B CN 111984400 B CN111984400 B CN 111984400B CN 202010696668 A CN202010696668 A CN 202010696668A CN 111984400 B CN111984400 B CN 111984400B
- Authority
- CN
- China
- Prior art keywords
- memory
- calculation data
- address list
- data
- priority
- 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
Links
- 230000015654 memory Effects 0.000 title claims abstract description 396
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 89
- 238000000034 method Methods 0.000 title claims abstract description 58
- 238000004364 calculation method Methods 0.000 claims abstract description 198
- 238000004590 computer program Methods 0.000 claims description 14
- 239000012634 fragment Substances 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 230000008033 biological extinction Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- 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
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Neurology (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
本申请实施例公开了一种神经网络的内存分配方法及装置,该方法包括:在神经网络运算中获取神经网络中的多个算子,每个算子包括多个计算数据;在第一算子中的第一计算数据未分配内存的情况下,确定第一计算数据是否配置优先内存地址列表,第一算子为多个算子中计算数据量最大的算子,第一计算数据为第一算子的多个计算数据中内存占用量最大的计算数据;若第一计算数据分配优先内存地址列表,分配第一内存空间给第一计算数据,第一内存空间为优先内存地址列表中的内存空间。本申请通过基于计算数据的优先内存地址列表为计算数据来分配内存,能够有效地减少内存碎片,提高内存使用率,从而提升神经网络的计算效率。
Description
技术领域
本申请涉及存储器技术领域,尤其涉及一种神经网络的内存分配方法及装置。
背景技术
在当前的计算机深度学习领域中,为了取得更好的算法精度,神经网络越来越复杂,内存的消耗也随着神经网络规模的扩大而不断增加。因此,为了提高算法的精度,神经网络处理编译器对神经网络处理神经网络芯片的性能优化提升至关重要。
编译器需要根据具体的计算逻辑以及计算过程中的中间数据大小来管理和分配内存空间,使得用有限的内存一次性实现最多的计算。计算逻辑和中间数据的使用量在不同场景下的情况千差万别,当计算逻辑单一时,可以根据计算顺序占用内存空间;但当计算逻辑复杂时,中间数据的产生和消亡顺序将会变得凌乱,从而会产生碎片导致内存利用率下降。
申请内容
本申请实施例提供了一种神经网络的内存分配方法及装置,能够提高内存使用率,从而提升神经网络的计算效率。
第一方面,本申请实施例提供一种神经网络的内存分配方法,该方法包括:
在所述神经网络运算中获取所述神经网络中的多个算子,每个算子包括多个计算数据;
在第一算子中的第一计算数据未分配内存的情况下,确定所述第一计算数据是否配置优先内存地址列表,所述第一算子为所述多个算子中计算数据量最大的算子,所述第一计算数据为所述第一算子的多个计算数据中内存占用量最大的计算数据;
若所述第一计算数据分配优先内存地址列表,分配第一内存空间给所述第一计算数据,所述第一内存空间为所述优先内存地址列表中的内存空间。
第二方面,本申请实施例提供一种神经网络的内存分配装置,该装置包括:
获取单元,用于获取所述神经网络中的多个算子,每个算子包括多个计算数据;
确定单元,用于在第一算子中的第一计算数据未分配内存的情况下,确定所述第一计算数据是否配置优先内存地址列表,所述第一算子为所述多个算子中内存占用量最大的算子,所述第一计算数据为所述多个计算数据中内存占用量最大的计算数据;
分配单元,用于在所述第一计算数据配置优先内存地址列表的情况下,分配第一内存空间给所述第一计算数据,所述第一内存空间为所述优先内存地址列表对应的内存空间。
第三方面,本申请实施例提供一种神经网络芯片,所述计算神经网络芯片包括第二方面提供的神经网络的内存分配装置。
第四方面,本申请实施例提供一种电子装置,所述电子装置包括第三方面提供的神经网络芯片或第二方面提供的神经网络的内存分配装置。
第五方面,本申请实施例提供另一种电子装置,所述电子装置包括处理器、存储器、通信接口,以及一个或多个程序,所述一个或多个程序被存储在所述存储器中,并且被配置由所述中央处理器执行,所述程序包括用于执行本申请实施例第一方面所述方法中的步骤的指令。
第六方面,本申请实施例提供了一种计算机可读存储介质,其中,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行上述第一方面所述的方法中所描述的部分或全部步骤。
第七方面,本申请实施例提供了一种计算机程序产品,其中,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如本申请实施例第一方面所述的方法中所描述的部分或全部步骤。该计算机程序产品可以为一个软件安装包。
可以看出,本申请实施例中所描述的神经网络的内存分配方法及装置,通过在所述神经网络运算中获取所述神经网络中的多个算子,每个算子包括多个计算数据;在第一算子中的第一计算数据未分配内存的情况下,确定所述第一计算数据是否配置优先内存地址列表,所述第一算子为所述多个算子中计算数据量最大的算子,所述第一计算数据为所述第一算子的多个计算数据中内存占用量最大的计算数据;若所述第一计算数据分配优先内存地址列表,分配第一内存空间给所述第一计算数据,所述第一内存空间为所述优先内存地址列表中的内存空间。本申请通过基于计算数据的优先内存地址列表为计算数据来分配内存,能够有效地减少内存碎片,提高内存使用率,从而提升神经网络的计算效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种电子装置的结构示意图;
图2a是本申请实施例提供的一种神经网络芯片的结构示意图;
图2b是本申请实施例提供的另一种神经网络芯片的结构示意图;
图3是本申请实施例提供的一种神经网络的内存分配方法的流程示意图;
图4a是本申请实施例提供的一种内存单元的示意图;
图4b是本申请实施例提供的一种内存单元分配结果的示意图;
图5a是本申请实施例提供的一种神经网络的内存分配装置的结构示意图;
图5b是本申请实施例提供的另一种神经网络的内存分配装置的结构示意图;
图6是本申请实施例提供的另一种电子装置的结构示意图。
具体实施方式
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、***、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请中的电子装置可以包括服务器、智能摄像设备、智能手机(如Android手机、iOS手机、Windows Phone手机等)、平板电脑、掌上电脑、笔记本电脑、移动互联网设备(MID,Mobile Internet Devices)或穿戴式设备等,上述电子装置仅是举例,而非穷举,包含但不限于上述电子设备,为了描述的方便,下面实施例中将上述电子装置称为用户设备(Userequipment,UE)、终端或电子设备。当然在实际应用中,上述用户设备也不限于上述变现形式,例如还可以包括:智能车载终端、计算机设备等等。
对于上述电子装置,其结构如图1所示,具体的,其可以包括:处理器、存储器、神经网络芯片,其中处理器与存储器以及神经网络芯片之间连接,具体的在一种可选的技术方案中,上述神经网络芯片可以集成在处理器内。存储器可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(Random Access Memory,RAM)等。本发明的技术方案并不局限上述神经网络芯片是单独设置还是集成在处理器内。
请参阅图2a,图2a为本申请实施例提供的一种神经网络芯片的结构示意图,如图2a所示,该芯片可以包括:主单元电路和基本单元电路,该主单元与基本单元连接。如其中,主单元电路可以包括寄存器和/或片上内存电路,该主单元还可以包括:向量运算器电路、ALU(arithmetic and logic unit,算数逻辑单元)电路、累加器电路、矩阵转置电路、DMA(Direct Memory Access,直接内存存取)电路、数据重排电路等的一个或任意组合;每个基础单元可以包括基础寄存器和/或基础片上内存电路;每个基础单元还可以包括:内积运算器电路、向量运算器电路、累加器电路等中一个或任意组合。
在一种可能的实施例中,如图2b所示,该芯片还可以包括:分支单元电路。所述电路都可以是集成电路。其中,主单元电路与分支单元电路连接,该分支单元电路与基本单元电路连接,该基本单元电路用于执行数据块之间的运算,该主单元电路用于收发外部数据,以及将外部数据分发至分支单元电路,该分支单元电路用于收发主单元电路或基本单元电路的数据。
需要说明的,如图2a或如图2b所示的芯片可以是一个单独的物理芯片,当然在实际应用中,该芯片装置也可以集成在其他的芯片内(例如CPU,GPU),本申请具体实施方式并不限制上述芯片装置的物理表现形式。
内存是电子设备的重要组成部分,电子设备的所有程序的运行和数据的存储都需要内存,然而电子设备的内存资源十分有限,且内存的消耗会随着神经网络规模扩大而不断增加。目前,为了实现内存的优化,通常采用的内存分配策略为:某块内存块可以供神经网络中的多个算子使用,当这些算子均执行完时,该内存块生命周期结束,此时该内存块可供神经网络中的其它算子使用。例如,可预设内存块A的生命周期为(1,2,3),代表内存块A可供算子1、算子2以及算子3使用,当算子1、算子2以及算子3均执行完成,内存块A的生命周期结束,此时内存块A可放置于空闲链表中,供神经网络中的其它算子使用。运行整个神经网络时,会按照整个神经网络运行的前后顺序,为整个神经网络分配内存。但是,在计算逻辑复杂时,按照神经网络运行的前后顺序分配内存会产生很多内存碎片,导致内存利用率不够高,也增加不必要的内存存取。例如,可预设内存块A包括22个可管理的缓存单元,有如下的计算逻辑:算子1为B=Operation0(A),算子2为D=Operation1(C),算子3为E=Operation2(B,D),其中,计算数据A、B、C、D、E所需的缓存单元个数分别为7、8、9、5、8,若是按照现有的内存分配方法,算子1、算子2以及算子3在计算时从可用内存中随机寻找可用的连续内存单元,计算结束时释放,那么将会很难在22个缓存单元里分配好。
针对以上问题,本申请实施例提供了一种神经网络的内存分配方法,该方法的主要原理为:在神经网络运行时,按照算子的计算数据量大小顺序和算子中的计算数据的内存占用量大小顺序,依次将计算数据量最大的算子中的内存占用量最大的计算数据,基于计算数据配置的优先内存地址列表分配内存。采用上述方法可以优先对计算数据量较大的算子复用已分配的内存块,减少内存碎片,从而可减小整个神经网络的内存占用,提高内存使用率,进而提升神经网络的计算效率。
在本申请实施例中,算子是指神经网络中用于运算的单位,所述算子还可称为节点、层等,在本申请中实施例中,以算子为例,进行说明。
下面通过具体实施例,对本申请进行详细说明。
请参阅图3,图3是本申请实施例提供的一种神经网络的内存分配方法的流程示意图。该方法的执行主体可以为运行神经网络的服务器,也可以为运行神经网络的终端设备。在本申请实施例中,以执行主体为运行神经网络的终端设备为例,进行说明。如图3所示,该神经网络的内存分配方法包括以下步骤。
S310、获取神经网络中的多个算子,每个算子包括多个计算数据。
其中,所述算子可以用于乘法计算、卷积计算、加法计算、减法计算、基础线性代数子程序(Basic Linear Algebra Subprograms,BLAS)函数、激活函数等等。每个算子可以包括多个计算数据,该计算数据可以包括输入数据、输出数据和中间数据,一个计算数据可以有一个或多个输入数据、一个或多个输出数据或一个或多个中间数据。
在实际应用中,在神经网络的初始化阶段,可以先对神经网络的网络模型进行解析,进而获取到该神经网络中的算子数量、每个算子的每个输入数据所占内存大小和每个算子的每个输出数据所占内存大小,以及每个算子的每个中间数据所占内存大小。根据神经网络中算子的每个输入数据所占内存大小、每个输出数据所占内存大小以及每个中间数据所占内存大小,可以确定该算子的计算数据量。
S320、在第一算子中的第一计算数据未分配内存的情况下,确定第一计算数据是否配置优先内存地址列表,第一算子为多个算子中计算数据量最大的算子,第一计算数据为第一算子的多个计算数据中内存占用量最大的计算数据。
其中,在神经网络的初始化阶段,可以为每个算子中的计算数据配置一个优先内存分配列表,该优先内存分配列表用于存储对应计算数据可以使用的内存地址,该优先内存地址列表中的每一个列表存放一个内存单元的地址。
在一种可能的实施例中,所述方法还包括:获取所述多个计算数据中每一计算数据的优先内存地址列表;清空所述每一计算数据的优先内存地址列表;为所述每一计算数据的优先内存地址列表添加内存地址。
其中,在运行神经网络的过程中,在给算子中的计算数据分配内存前,可以预先获取算子中的每一计算数据的优先内存地址列表,并且为了合理的分配内存,可以将算子中的每一计算数据的优先内存地址列表清空,再将内存地址一一添加到优先内存地址列表。
在一种可能的实施例中,优先内存地址列表中还可以包括所有可复用内存空间对应的内存地址,从而使得第一计算数据可以基于优先内存地址列表中成功分配内存空间。
在本申请实施例中,在获取到神经网络中的算子数量、每个算子的每个输入数据所占内存大小和每个算子的每个输出数据所占内存大小,以及每个算子的每个中间数据所占内存大小后,可以根据每一算子中的计算数据所占用内存大小,计算每个算子的计算数据量,并且按照算子的计算数据量的大小,对所述多个算子进行从大到小排序,得到所述多个算子的排列序列,按照该排列序列对每个算子中的计算数据分配内存。
具体地,在运行神经网络时,从所述多个算子中选取计算数据量最大的算子作为第一算子,再根据第一算子中计算数据所占用内存的大小,对第一算子中的多个计算数据进行从大到小排序,将第一算子中所占用内存最大的计算数据作为第一数据。然后判断该第一数据是否已经分配了内存空间,当第一计算数据已经分配了内存空间,则将第一算子中所占用内存次大的计算数据作为第一数据,依次这样,直到第一算子中的所有计算数据均已分配了内存空间;当第一数据计算数据未分配内存空间时,可以确定第一计算数据是否配置优先内存地址列表,当第一计算数据配置有优先内存地址列表时,可以根据第一计算数据的优先内存地址列表为第一计算数据分配内存空间。
在一种可能的实施例中,所述方法还包括:若所述第一计算数据未配置优先内存地址列表,从所有可复用的内存空间中查找大于或等于所述第一计算数据的内存占用量的可复用内存空间。
其中,当第一数据计算数据未分配内存空间,且第一计算数据未配置优先内存地址列表时,可以从所有可复用的内存空间中查找大于或等于所述第一计算数据的内存占用量的可复用内存空间,将该可复用内存空间分配给第一计算数据。若第一计算数据分配内存空间成功,则根据多个计算数据的排列序列进行下一个计算数据的内存分配;若第一计算数据分配内存失败,即未查找大于或等于所述第一计算数据的内存占用量的可复用内存时,则报告分配内存失败。
S330、若第一计算数据分配优先内存地址列表,分配第一内存空间给第一计算数据,第一内存空间为优先内存地址列表中的内存空间。
其中,当第一数据计算数据未分配内存空间,且第一计算数据配置有优先内存地址列表时,可以基于第一计算数据的优先内存地址列表分配第一计算数据的内存空间。
可选的,所述分配第一内存空间给所述第一计算数据,包括:从所述优先内存地址列表的首地址进行遍历,查找大于或等于所述第一计算数据的内存占用量的可复用内存空间,将所述可复用内存空间分配给所述第一计算数据。
具体地,从第一计算数据的优先内存地址列表的第一个列表的内存地址进行遍历,依次查找是否存在大于或等于所述第一计算数据的内存占用量的可复用内存空间,即依次查找是否存在第一内存空间。若存在第一内存空间,则将第一内存空间分配给第一计算数据,并进行第一算子中下一个计算数据的内存分配。
在本申请实施例中,在对第一计算数据的优先内存地址列表进行遍历过程中,可以将遍历过的优先内存地址列表删除或清空,以避免在次遍历这个不可复用的内存地址,从而可以提高内存分配效率。
在一种可能的实施例中,所述方法还包括:若未查找到大于或等于所述第一计算数据的内存占用量的可复用内存空间,将第二计算数据的优先内存地址列表添加到第一计算数据的优先内存地址列表中,并更新所述第二计算数据的所述优先内存地址列表,所述第二计算数据为所述第一算子中除了所述第一计算数据之外的任一配置优先内存分配空间的计算数据。
其中,若不存在第一内存空间,即在第一计算数据从优先内存地址列表中为查找到第一内存空间时,可以将第二计算数据的优先内存地址列表添加到第一计算数据的优先内存地址列表中,然后重新对第一计算数据进行内存分配,从而可以在第一计算数据的优先内存地址列表和第二计算数据的优先内存地址列表中查找到大于或等于所述第一计算数据的内存占用量的可复用内存空间。在第二计算数据的优先内存地址列表添加到第一计算数据的优先内存地址列表后,更新第二计算数据的优先内存地址列表,避免第二计算数据分配内存失败。
可选的,所述更新所述第二计算数据的所述优先内存地址列表,包括:清空所述第二计算数据的优先内存地址列表中的内存地址;为所述第二计算数据的优先内存地址列表重新分配内存地址。
下面,以一个具体实施例来详细描述本申请实施例的方法。
神经网络有如下的计算逻辑:算子1为B=Operation0(A),算子2为D=Operation1(C),算子3为E=Operation2(B,D),其中,每个计算数据所需要的内存单元个数如表1所示。计算数据A、B、C、D、E的优先内存地址列表相同,该优先内存地址列表中的内存地址对应内存空间如图4a所示,图4a为本申请实施例提供的一种内存单元示意图,该优先内存地址列表中的内存地址对应内存单元总共包括22个可管理的内存单元,内存单元数量和每个单元的大小可依据不同的使用场景调整。
表1
计算数据 | 所需内存单元个数 |
A | 7 |
B | 8 |
C | 9 |
D | 5 |
E | 8 |
使用本申请提出的神经网络的内存方法对计算数据A、B、C、D、E分配内存,分配结果如图4b所示。其中,由于算子3的计算数据量最大,因此,首先给算子3中的计算数据B、D、E分配内存,按照计算数据B、计算数据D、计算数据E所需内存单元个数的大小顺序,从优先内存地址列表第一地址对应的内存单元开始,依次分配计算数据B、计算数据E、计算数据D的内存空间。然后给算子1中的计算数据A和计算数据B分配内存,由于计算数据B已经分配了内存空间,而计算数据D和计算数据E在该算子中都不存在,因此从优先内存地址列表第一地址对应的内存单元开始,找到紧接着B的内存地址对应的连续内存空间分配给计算数据A。最后分配算子3中的计算数据C和计算数据D,由于计算数据D已经分配了内存空间,而计算数据A、计算数据B和计算数据E在该算子中都不存在,因此从优先内存地址列表第一地址对应的内存单元开始,找到第一个内存地址对应的连续内存空间分配计算数据C。最后总共使用的缓存空间为21个单元。按上述方法,在大部分情况下不需要迭代或者经过很少次数的迭代就能找到合适的分配方案,使得在有限的时间下找到接近最优的分配方案。
可以看出,本申请实施例中所描述的内存分配方法,通过在所述神经网络运算中获取所述神经网络中的多个算子,每个算子包括多个计算数据;在第一算子中的第一计算数据未分配内存的情况下,确定所述第一计算数据是否配置优先内存地址列表,所述第一算子为所述多个算子中计算数据量最大的算子,所述第一计算数据为所述第一算子的多个计算数据中内存占用量最大的计算数据;若所述第一计算数据分配优先内存地址列表,分配第一内存空间给所述第一计算数据,所述第一内存空间为所述优先内存地址列表中的内存空间。本申请通过基于计算数据的优先内存地址列表为计算数据来分配内存,能够有效地减少内存碎片,提高内存使用率,从而提升神经网络的计算效率。
上述主要从方法侧执行过程的角度对本申请实施例的方案进行了介绍。可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所提供的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
请参阅图5a,图5a是本申请实施例提供的一种神经网络的内存分配装置500的功能单元组成框图,该神经网络的内存分配装置500应用于终端设备,所述装置500包括:获取单元510、确定单元520和分配单元530;其中,
所述获取单元510,用于在所述神经网络运算中获取所述神经网络中的多个算子,每个算子包括多个计算数据;
所述确定单元520,用于在第一算子中的第一计算数据未分配内存的情况下,确定所述第一计算数据是否配置优先内存地址列表,所述第一算子为所述多个算子中计算数据量最大的算子,所述第一计算数据为所述第一算子的多个计算数据中内存占用量最大的计算数据;
所述分配单元530,用于若所述第一计算数据分配优先内存地址列表,分配第一内存空间给所述第一计算数据,所述第一内存空间为所述优先内存地址列表中的内存空间。
在本申请一可能的实施例中,分配单元530具体用于:
从所述优先内存地址列表的首地址进行遍历,查找大于或等于所述第一计算数据的内存占用量的可复用内存空间,将所述可复用内存空间分配给所述第一计算数据。
在本申请一可能的实施例中,如图5b所示,所述神经网络的内存分配装置500还包括:更新单元540,其中,
所述更新单元540,用于若未查找到大于或等于所述第一计算数据的内存占用量的可复用内存空间,将第二计算数据的优先内存地址列表添加到第一计算数据的优先内存地址列表中,并更新所述第二计算数据的所述优先内存地址列表,所述第二计算数据为所述第一算子中除了所述第一计算数据之外的任一配置优先内存分配空间的计算数据。
在本申请一可能的实施例中,如图5b所示,所述神经网络的内存分配装置500还包括:查找单元550,其中,
所述查找单元550,用于若所述第一计算数据未配置优先内存地址列表,从所有可复用的内存空间中查找大于或等于所述第一计算数据的内存占用量的可复用内存空间。
在本申请一可能的实施例中,所述获取单元510还用于:获取所述多个计算数据中每一计算数据的优先内存地址列表;
所述分配单元530还用于:清空所述每一计算数据的优先内存地址列表;为所述每一计算数据的优先内存地址列表添加内存地址。
在本申请一可能的实施例中,所述更新单元540具体用于:清空所述第二计算数据的优先内存地址列表中的内存地址;为所述第二计算数据的优先内存地址列表重新分配内存地址。
可以理解的是,本申请实施例的神经网络的内存分配装置500的各程序模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
请参阅图6,图6是本申请实施例提供的一种计算装置的结构示意图,如图6所示,该电子设备包括一个或多个处理器、一个或多个存储器、一个或多个通信接口,以及一个或多个程序;所述一个或多个程序被存储在所述存储器中,并且被配置由所述一个或多个处理器执行;
所述程序包括用于执行以下步骤的指令:
在所述神经网络运算中,获取所述神经网络中的多个算子,每个算子包括多个计算数据;
在第一算子中的第一计算数据未分配内存的情况下,确定所述第一计算数据是否配置优先内存地址列表,所述第一算子为所述多个算子中计算数据量最大的算子,所述第一计算数据为所述第一算子的多个计算数据中内存占用量最大的计算数据;
若所述第一计算数据分配优先内存地址列表,分配第一内存空间给所述第一计算数据,所述第一内存空间为所述优先内存地址列表中的内存空间。
在一个可能的示例中,在分配第一内存空间给所述第一计算数据方面,所述程序包括还用于执行以下步骤的指令:
从所述优先内存地址列表的首地址进行遍历,查找大于或等于所述第一计算数据的内存占用量的可复用内存空间,将所述可复用内存空间分配给所述第一计算数据。
在一个可能的示例中,所述程序包括还用于执行以下步骤的指令:若未查找到大于或等于所述第一计算数据的内存占用量的可复用内存空间,将第二计算数据的优先内存地址列表添加到第一计算数据的优先内存地址列表中,并更新所述第二计算数据的所述优先内存地址列表,所述第二计算数据为所述第一算子中除了所述第一计算数据之外的任一配置优先内存分配空间的计算数据。
在一个可能的示例中,所述程序包括还用于执行以下步骤的指令:若所述第一计算数据未配置优先内存地址列表,从所有可复用的内存空间中查找大于或等于所述第一计算数据的内存占用量的可复用内存空间。
在一个可能的示例中,所述程序包括还用于执行以下步骤的指令:获取所述多个计算数据中每一计算数据的优先内存地址列表;清空所述每一计算数据的优先内存地址列表;为所述每一计算数据的优先内存地址列表添加内存地址。
在一个可能的示例中,在更新所述第二计算数据的所述优先内存地址列表方面,所述程序包括还用于执行以下步骤的指令:清空所述第二计算数据的优先内存地址列表中的内存地址;为所述第二计算数据的优先内存地址列表重新分配内存地址。
需要说明的是,本申请实施例的具体实现过程可参见上述方法实施例所述的具体实现过程,在此不再赘述。
其中,上述处理器可以是中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)、图形处理器(Graphics Processing Unit,GPU)或图象处理器(Image Processing Unit),本申请对此不做限定。根据处理器的不同,本申请实施例提出的内存分配方法可以应用于图像识别、深度学习、计算机视觉、智能机器人、自然语言处理等人工智能应用领域,执行人工智能领域中的复杂功能计算。
本申请实施例提供另一种电子设备,该电子包含于上述的神经网络芯片或上述的神经网络的内存分配装置500。
本申请实施例还提供一种计算机存储介质,其中,该计算机存储介质存储用于电子数据交换的计算机程序,该计算机程序使得计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤。
本申请实施例还提供一种计算机程序产品,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤。该计算机程序产品可以为一个软件安装包。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、终端设备或者网络设备等)执行本申请各个实施例上述方法的全部或部分步骤。而前述的存储器包括:U盘、ROM、RAM、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、ROM、RAM、磁盘或光盘等。
以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (6)
1.一种神经网络的内存分配方法,其特征在于,所述方法包括:
在所述神经网络运算中,获取所述神经网络中的多个算子,每个算子包括多个计算数据;
获取所述多个计算数据中每一计算数据的优先内存地址列表,清空所述每一计算数据的优先内存地址列表,为所述每一计算数据的优先内存地址列表添加内存地址;
在第一算子中的第一计算数据未分配内存的情况下,确定所述第一计算数据是否配置优先内存地址列表,所述第一算子为所述多个算子中计算数据量最大的算子,所述第一计算数据为所述第一算子的多个计算数据中内存占用量最大的计算数据;
若所述第一计算数据未配置优先内存地址列表,从所有可复用的内存空间中查找大于或等于所述第一计算数据的内存占用量的可复用内存空间;
若所述第一计算数据分配优先内存地址列表,分配第一内存空间给所述第一计算数据,所述第一内存空间为所述优先内存地址列表中的内存空间;
所述分配第一内存空间给所述第一计算数据,包括:
从所述优先内存地址列表的首地址进行遍历,查找大于或等于所述第一计算数据的内存占用量的可复用内存空间,将所述可复用内存空间分配给所述第一计算数据;
若未查找到大于或等于所述第一计算数据的内存占用量的可复用内存空间,将第二计算数据的优先内存地址列表添加到第一计算数据的优先内存地址列表中,并更新所述第二计算数据的优先内存地址列表,所述第二计算数据为所述第一算子中除了所述第一计算数据之外的任一配置优先内存分配空间的计算数据。
2.根据权利要求1所述的方法,其特征在于,所述更新所述第二计算数据的优先内存地址列表,包括:
清空所述第二计算数据的优先内存地址列表中的内存地址;
为所述第二计算数据的优先内存地址列表重新分配内存地址。
3.一种神经网络的内存分配装置,其特征在于,所述装置包括:
获取单元,用于在所述神经网络运算中获取所述神经网络中的多个算子,每个算子包括多个计算数据;
所述获取单元,还用于获取所述多个计算数据中每一计算数据的优先内存地址列表;
分配单元,用于清空所述每一计算数据的优先内存地址列表,为所述每一计算数据的优先内存地址列表添加内存地址;
确定单元,用于在第一算子中的第一计算数据未分配内存的情况下,确定所述第一计算数据是否配置优先内存地址列表,所述第一算子为所述多个算子中计算数据量最大的算子,所述第一计算数据为所述第一算子的多个计算数据中内存占用量最大的计算数据;
查找单元,用于若所述第一计算数据未配置优先内存地址列表,从所有可复用的内存空间中查找大于或等于所述第一计算数据的内存占用量的可复用内存空间;
所述分配单元,还用于若所述第一计算数据分配优先内存地址列表,分配第一内存空间给所述第一计算数据,所述第一内存空间为所述优先内存地址列表中的内存空间;
所述分配单元具体用于:从所述优先内存地址列表的首地址进行遍历,查找大于或等于所述第一计算数据的内存占用量的可复用内存空间,将所述可复用内存空间分配给所述第一计算数据;
更新单元,用于若未查找到大于或等于所述第一计算数据的内存占用量的可复用内存空间,将第二计算数据的优先内存地址列表添加到第一计算数据的优先内存地址列表中,并更新所述第二计算数据的优先内存地址列表,所述第二计算数据为所述第一算子中除了所述第一计算数据之外的任一配置优先内存分配空间的计算数据。
4.一种神经网络芯片,其特征在于,所述神经网络芯片包括如权利要求3所述的神经网络的内存分配装置。
5.一种电子装置,其特征在于,所述电子装置包括如权利要求4所述的神经网络芯片或如权利要求3所述的神经网络的内存分配装置。
6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行如权利要求1或2所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010696668.XA CN111984400B (zh) | 2020-07-17 | 2020-07-17 | 神经网络的内存分配方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010696668.XA CN111984400B (zh) | 2020-07-17 | 2020-07-17 | 神经网络的内存分配方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111984400A CN111984400A (zh) | 2020-11-24 |
CN111984400B true CN111984400B (zh) | 2024-04-02 |
Family
ID=73438693
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010696668.XA Active CN111984400B (zh) | 2020-07-17 | 2020-07-17 | 神经网络的内存分配方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111984400B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112346877B (zh) * | 2021-01-11 | 2021-04-16 | 瀚博半导体(上海)有限公司 | 一种有效加速深度学习计算的内存分配方法及*** |
CN112965663B (zh) * | 2021-03-05 | 2024-07-02 | 上海寒武纪信息科技有限公司 | 对数据块的存储空间进行复用的方法和相关产品 |
CN112766467B (zh) * | 2021-04-06 | 2021-08-20 | 深圳市一心视觉科技有限公司 | 基于卷积神经网络模型的图像识别方法 |
CN114298294B (zh) * | 2021-12-28 | 2022-11-01 | 杭州雄迈集成电路技术股份有限公司 | 一种基于硬件加速器的神经网络内存优化方法和装置 |
CN117149398A (zh) * | 2022-05-20 | 2023-12-01 | 北京希姆计算科技有限公司 | 一种内存分配的方法和装置 |
CN115658331B (zh) * | 2022-12-28 | 2023-03-21 | 杭州登临瀚海科技有限公司 | 动态神经网络的编译方法、装置、电子设备及存储介质 |
CN115982418B (zh) * | 2023-03-17 | 2023-05-30 | 亿铸科技(杭州)有限责任公司 | 一种提升ai计算芯片超分运算性能的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109815162A (zh) * | 2019-01-28 | 2019-05-28 | Oppo广东移动通信有限公司 | 内存管理方法、装置、移动终端及存储介质 |
CN109902819A (zh) * | 2019-02-12 | 2019-06-18 | Oppo广东移动通信有限公司 | 神经网络计算方法、装置、移动终端及存储介质 |
CN110597616A (zh) * | 2018-06-13 | 2019-12-20 | 华为技术有限公司 | 一种神经网络的内存分配方法及装置 |
EP3674990A1 (en) * | 2018-12-29 | 2020-07-01 | Baidu Online Network Technology (Beijing) Co., Ltd. | Output method and apparatus for multiple neural network, server and computer readable storage medium |
-
2020
- 2020-07-17 CN CN202010696668.XA patent/CN111984400B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110597616A (zh) * | 2018-06-13 | 2019-12-20 | 华为技术有限公司 | 一种神经网络的内存分配方法及装置 |
EP3674990A1 (en) * | 2018-12-29 | 2020-07-01 | Baidu Online Network Technology (Beijing) Co., Ltd. | Output method and apparatus for multiple neural network, server and computer readable storage medium |
CN109815162A (zh) * | 2019-01-28 | 2019-05-28 | Oppo广东移动通信有限公司 | 内存管理方法、装置、移动终端及存储介质 |
CN109902819A (zh) * | 2019-02-12 | 2019-06-18 | Oppo广东移动通信有限公司 | 神经网络计算方法、装置、移动终端及存储介质 |
Non-Patent Citations (1)
Title |
---|
一种新型嵌入式动态内存分配算法;宋敏超;李少波;;计算机应用(第S2期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111984400A (zh) | 2020-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111984400B (zh) | 神经网络的内存分配方法及装置 | |
CN110582785B (zh) | 配置用于执行层描述符列表的具有功率效率的深度神经网络模块 | |
CN109284823B (zh) | 一种运算装置及相关产品 | |
Liberis et al. | Neural networks on microcontrollers: saving memory at inference via operator reordering | |
CN112800095B (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN112084038B (zh) | 神经网络的内存分配方法及装置 | |
JP2020518068A (ja) | 最適化されたディープネットワーク処理のためのグラフマッチング | |
CN113688062B (zh) | 用于存储数据的方法和相关产品 | |
Motamedi et al. | Fast and energy-efficient CNN inference on IoT devices | |
CN106202224B (zh) | 搜索处理方法及装置 | |
CN116991560B (zh) | 针对语言模型的并行调度方法、装置、设备及存储介质 | |
CN111161705B (zh) | 语音转换方法及装置 | |
CN106529679B (zh) | 一种机器学习方法及*** | |
CN109802859B (zh) | 一种网络图中的节点推荐方法和服务器 | |
CN109412865B (zh) | 一种虚拟网络资源分配方法、***及电子设备 | |
CN112149047A (zh) | 数据的处理方法及装置、存储介质和电子装置 | |
CN114282662A (zh) | 基于Cortex-M处理器的卷积神经网络加速方法、***和介质 | |
US20200242467A1 (en) | Calculation method and calculation device for sparse neural network, electronic device, computer readable storage medium, and computer program product | |
CN108427584A (zh) | 快速启动的具有并行计算核的芯片及该芯片的配置方法 | |
CN114724103A (zh) | 神经网络处理***、指令生成方法、装置及电子设备 | |
CN115065366A (zh) | 一种时序数据的压缩方法、装置、设备及存储介质 | |
CN112100446B (zh) | 搜索方法、可读存储介质和电子设备 | |
CN113469326A (zh) | 在神经网络模型中执行剪枝优化的集成电路装置及板卡 | |
Ho et al. | Towards FPGA-assisted spark: An SVM training acceleration case study | |
CN111258641B (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 |