CN113127181B - 内存管理方法、装置及存储介质 - Google Patents
内存管理方法、装置及存储介质 Download PDFInfo
- Publication number
- CN113127181B CN113127181B CN201911396930.2A CN201911396930A CN113127181B CN 113127181 B CN113127181 B CN 113127181B CN 201911396930 A CN201911396930 A CN 201911396930A CN 113127181 B CN113127181 B CN 113127181B
- Authority
- CN
- China
- Prior art keywords
- memory
- layer
- target
- multiplexing
- computing
- 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 857
- 238000007726 management method Methods 0.000 title claims abstract description 35
- 238000013135 deep learning Methods 0.000 claims abstract description 136
- 238000000034 method Methods 0.000 claims abstract description 49
- 230000008569 process Effects 0.000 claims abstract description 23
- 238000004364 calculation method Methods 0.000 claims description 141
- 238000004590 computer program Methods 0.000 claims description 8
- 230000002457 bidirectional effect Effects 0.000 claims description 4
- 238000013467 fragmentation Methods 0.000 abstract description 6
- 238000006062 fragmentation reaction Methods 0.000 abstract description 6
- 238000004891 communication Methods 0.000 description 11
- 230000002093 peripheral effect Effects 0.000 description 10
- 238000012545 processing Methods 0.000 description 10
- 230000001133 acceleration Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 3
- 238000012549 training Methods 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 239000000919 ceramic Substances 0.000 description 2
- 238000013527 convolutional neural network Methods 0.000 description 2
- 238000010606 normalization Methods 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000006641 stabilisation Effects 0.000 description 1
- 238000011105 stabilization Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000010409 thin film Substances 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
- 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/5022—Mechanisms to release resources
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
本申请公开了一种内存管理方法、装置及存储介质,属于深度学习技术领域。在本申请中,可以先确定深度学习网络的多个计算层组和每个计算层组对应的复用内存值。在深度学习网络运行的过程中,可以通过对比当前待运算的目标计算层所属的目标计算层组的复用内存值与参考内存阈值,来决定是从预先未分配给该深度学习网络的内存中为目标计算层动态分配复用内存,还是从预先为该深度学习网络分配的内存池中为目标计算层分配复用内存。也即,本申请可以根据计算层所需内存大小来采用不同的方式合理为其分配内存,这样,相较于一直采用动态分配内存的方式来进行分配,能够减少申请和释放内存的次数,有效控制内存碎片化,提高内存的使用效率。
Description
技术领域
本申请涉及深度学习技术领域,特别涉及一种内存管理方法、装置及存储介质。
背景技术
当前,深度学习技术被广泛的应用于各行各业中。在应用深度学习技术的过程中,例如,在计算设备根据训练好的深度学习网络进行前向推理的过程中,计算设备需要为深度学习网络分配运行时所需的内存。然而,由于当前的深度学习网络越来越庞大,所需处理的数据量也越来越大,因此,对内存的需求也越来越大。在这种情况下,如果内存管理不合理,可能会导致内存的使用效率较低。基于此,亟需提供一种合理地管理内存的方法,以提高内存的使用效率。
发明内容
本申请提供了一种内存管理方法、装置及存储介质,可以解决相关技术中深度学习网络中内存管理不合理的情况下,可能导致内存的使用效率较低的问题。所述技术方案如下:
一方面,提供了一种内存管理方法,所述方法包括:
确定深度学习网络的多个计算层组和每个计算层组对应的复用内存值,每个计算层组包括多个允许进行内存复用的计算层,每个计算层组对应的复用内存值为相应计算层组包括的多个计算层运算时所需的最大内存值;
如果当前待运算的目标计算层所属的目标计算层组对应的目标复用内存值大于参考内存阈值,且所述目标计算层为所述目标计算层组中的第一个计算层,则根据所述目标复用内存值,从未分配给所述深度学习网络的内存中,为所述目标计算层分配复用内存;
如果所述目标计算层所属的目标计算层组对应的目标复用内存值不大于所述参考内存阈值,则根据所述目标计算层所需的目标内存大小,从所述深度学习网络对应的内存池中,为所述目标计算层分配复用内存,所述内存池是指预先为所述深度学习网络分配的内存。
可选地,所述复用内存的大小为最小分配单元的整数倍。
可选地,所述内存池包括一个或多个内存块,所述内存池对应一个双向链表,所述双向链表包括一个或多个节点,每个节点对应所述内存池中的一个内存块,且每个节点中存储有对应的内存块的内存信息;
所述根据所述目标计算层所需的目标内存大小,从所述深度学习网络对应的内存池中,为所述目标计算层分配复用内存,包括:
根据所述目标内存大小和所述双向链表中各个节点存储的内存信息,从所述双向链表包括的一个或多个节点中,确定目标节点;
根据所述目标内存大小,从所述目标节点对应的内存块中,为所述目标计算层分配所述复用内存。
可选地,所述内存信息包括相应内存块的内存占用状态、总内存值、相应内存块的位置信息、相应内存块的前一个内存块的位置信息以及相应内存块的后一个内存块的位置信息,所述一个或多个节点按照对应的内存块的先后顺序排列;
所述根据所述目标内存大小和所述双向链表中各个节点存储的内存信息,从所述双向链表包括的一个或多个节点中,确定目标节点,包括:
根据所述目标内存大小,从所述双向链表的第一个节点开始查找,将第一个查找到的存储的内存占用状态为空闲状态且总内存值不小于所述目标内存大小的节点,确定为所述目标节点。
可选地,所述根据所述目标内存大小,从所述目标节点对应的内存块中,为所述目标计算层分配所述复用内存之后,还包括:
当所述目标节点对应的内存块的大小大于所述复用内存的大小时,在所述目标节点之后增加一个节点,将所述目标节点对应的内存块中除所述复用内存之外的剩余内存的内存信息存储在增加的节点中;
根据所述复用内存的内存信息,更新所述目标节点存储的内存信息。
可选地,所述根据所述目标内存大小,从所述目标节点对应的内存块中,为所述目标计算层分配所述复用内存之后,还包括:
在释放所述复用内存之后,将所述目标节点存储的内存信息中包括的内存占用状态更新为空闲状态;
如果与所述目标节点相邻的节点对应的内存块中存在内存占用状态为空闲状态的内存块,则将存在的空闲状态的内存块与所述复用内存进行合并;
根据合并之后的内存块的内存信息,对所述双向链表进行更新。
可选地,所述确定深度学习网络的多个计算层组和每个计算层组对应的复用内存值,包括:
根据所述深度学习网络中每个计算层的计算方式和各个计算层之间的数据依赖关系,确定所述深度学习网络包括的多个计算层中的内置复用层;
根据所述深度学习网络中各个计算层之间的数据依赖关系和所述内置复用层,确定所述多个计算层组;
将所述多个计算层组中每个计算层组包括的多个计算层运算时所需的最大内存值确定为相应计算层组对应的复用内存值。
可选地,所述为所述目标计算层分配复用内存之后,还包括:
如果所述目标计算层的下一个计算层为所述内置复用层,则在所述下一个计算层的运算过程中,用所述下一个计算层的第一单元的运算结果覆盖所述复用内存中已存储的所述目标计算层的第一单元的运算结果;
其中,所述下一个计算层的第一单元为所述下一个计算层包括的多个运算单元中的任一单元,所述下一个计算层的第一单元的运算结果根据所述目标计算层的第一单元的运算结果确定得到。
另一方面,提供了一种内存管理装置,所述装置包括:
确定模块,用于确定深度学习网络的多个计算层组和每个计算层组对应的复用内存值,每个计算层组包括多个允许进行内存复用的计算层,每个计算层组对应的复用内存值为相应计算层组包括的多个计算层运算时所需的最大内存值;
第一分配模块,用于如果当前待运算的目标计算层所属的目标计算层组对应的目标复用内存值大于参考内存阈值,且所述目标计算层为所述目标计算层组中的第一个计算层,则根据所述目标复用内存值,从未分配给所述深度学习网络的内存中,为所述目标计算层分配复用内存;
第二分配模块,用于如果所述目标计算层所属的目标计算层组对应的目标复用内存值不大于所述参考内存阈值,则根据所述目标计算层所需的目标内存大小,从所述深度学习网络对应的内存池中,为所述目标计算层分配复用内存,所述内存池是指预先为所述深度学习网络分配的内存。
可选地,所述复用内存的大小为最小分配单元的整数倍。
可选地,所述内存池包括一个或多个内存块,所述内存池对应一个双向链表,所述双向链表包括一个或多个节点,每个节点对应所述内存池中的一个内存块,且每个节点中存储有对应的内存块的内存信息;
所述第二分配模块包括:
第一确定单元,用于根据所述目标内存大小和所述双向链表中各个节点存储的内存信息,从所述双向链表包括的一个或多个节点中,确定目标节点;
分配单元,用于根据所述目标内存大小,从所述目标节点对应的内存块中,为所述目标计算层分配所述复用内存。
可选地,所述内存信息包括相应内存块的内存占用状态、总内存值、相应内存块的位置信息、相应内存块的前一个内存块的位置信息以及相应内存块的后一个内存块的位置信息,所述一个或多个节点按照对应的内存块的先后顺序排列;
所述第一确定单元包括:
确定子单元,用于根据所述目标内存大小,从所述双向链表的第一个节点开始查找,将第一个查找到的存储的内存占用状态为空闲状态且总内存值不小于所述目标内存大小的节点,确定为所述目标节点。
可选地,所述第二分配模块还包括:
添加单元,用于当所述目标节点对应的内存块的大小大于所述复用内存的大小时,在所述目标节点之后增加一个节点,将所述目标节点对应的内存块中除所述复用内存之外的剩余内存的内存信息存储在增加的节点中;
第一更新单元,用于根据所述复用内存的内存信息,更新所述目标节点存储的内存信息。
可选地,所述第二分配模块还包括:
第二更新单元,用于在释放所述复用内存之后,将所述目标节点存储的内存信息中包括的内存占用状态更新为空闲状态;
合并单元,用于如果与所述目标节点相邻的节点对应的内存块中存在内存占用状态为空闲状态的内存块,则将存在的空闲状态的内存块与所述复用内存进行合并;
第三更新单元,用于根据合并之后的内存块的内存信息,对所述双向链表进行更新。
可选地,所述确定模块包括:
第二确定单元,用于根据所述深度学习网络中每个计算层的计算方式和各个计算层之间的数据依赖关系,确定所述深度学习网络包括的多个计算层中的内置复用层;
第三确定单元,用于根据所述深度学习网络中各个计算层之间的数据依赖关系和所述内置复用层,确定所述多个计算层组;
第四确定单元,用于将所述多个计算层组中每个计算层组包括的多个计算层运算时所需的最大内存值确定为相应计算层组对应的复用内存值。
可选地,所述装置还包括:
覆盖模块,用于如果所述目标计算层的下一个计算层为所述内置复用层,则在所述下一个计算层的运算过程中,用所述下一个计算层的第一单元的运算结果覆盖所述复用内存中已存储的所述目标计算层的第一单元的运算结果;
其中,所述下一个计算层的第一单元为所述下一个计算层包括的多个运算单元中的任一单元,所述下一个计算层的第一单元的运算结果根据所述目标计算层的第一单元的运算结果确定得到。
另一方面,提供了一种计算设备,所述计算设备包括处理器、通信接口、存储器和通信总线,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信,所述存储器用于存放计算机程序,所述处理器用于执行所述存储器上所存放的程序,以实现上述所述内存管理方法的步骤。
另一方面,提供了一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述所述内存管理方法的步骤。
另一方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述所述的内存管理方法的步骤。
本申请提供的技术方案至少可以带来以下有益效果:
在本申请实施例中,可以先确定深度学习网络的多个计算层组和每个计算层组对应的复用内存值。在深度学习网络运行的过程中,可以通过对比当前待运算的目标计算层所属的目标计算层组的复用内存值与参考内存阈值,来决定是从预先未分配给该深度学习网络的内存中为目标计算层动态分配复用内存,还是从预先为该深度学习网络分配的内存池中为目标计算层分配复用内存。也即,本申请实施例可以根据计算层所需内存大小来采用不同的方式合理为其分配内存,这样,相较于一直采用动态分配内存的方式来进行分配,能够减少申请和释放内存的次数,有效控制内存碎片化,提高内存的使用效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种内存管理方法的流程图;
图2是本申请实施例提供的一个深度学习网络中内置复用层的示意图;
图3是本申请实施例提供的一种确定内置复用层的流程图;
图4是本申请实施例提供的一个深度学习网络中内存复用的示意图;
图5是本申请实施例提供的另一个深度学习网络中内存复用的示意图;
图6是本申请实施例提供的一个初始化计算层的引用数的示意图;
图7是本申请实施例提供的一种确定多个计算层组的流程图;
图8是本申请实施例提供的一个存储有内存信息的双向链表的示意图;
图9是本申请实施例提供的一种内存管理装置的结构示意图;
图10是本申请实施例提供的一种计算设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在对本申请实施例提供的内存管理方法进行详细的解释说明之前,先对本申请实施例提供的应用场景和实施环境进行介绍。
当前,深度学习技术被广泛的应用于各行各业中。在应用深度学习技术的过程中,例如,在计算设备根据训练好的深度学习网络进行前向推理的过程中,计算设备需要为深度学习网络分配运行时所需的内存。然而,由于当前的深度学习网络越来越庞大,所需处理的数据量也越来越大,因此,对内存的需求也越来越大。在这种情况下,可以根据本申请实施例提供的内存管理方法,来合理地为深度学习网络的各个计算层分配内存,以合理地管理内存,提高内存的使用效率。
需要说明的是,本申请实施例提供的内存管理方法,不仅可以应用于根据训练好的深度学习网络进行前向推理的过程中,例如,应用训练好的卷积神经网络、循环神经网络等,进行检测、分类、识别等过程中,还可以应用于对深度学习网络进行训练的过程中,例如,在根据训练样本对初始构建的卷积神经网络进行训练的过程中。
接下来对本申请实施例提供的内存管理方法进行详细的解释说明。
图1是本申请实施例提供的一种内存管理方法的流程图,该方法应用于计算设备。请参考图1,该方法包括如下步骤。
步骤101:确定深度学习网络的多个计算层组和每个计算层组对应的复用内存值。
在本申请实施例中,计算设备在运行深度学习网络之前,可以先确定该深度学习网络的多个计算层组和每个计算层组对应的复用内存值。其中,每个计算层组包括多个允许进行内存复用的计算层,每个计算层组对应的复用内存值为相应计算层组包括的多个计算层运算时所需的最大内存值。
在本申请实施例中,计算设备可以根据深度学习网络中每个计算层的计算方式和各个计算层之间的数据依赖关系,来确定深度学习网络包括的多个计算层中的内置复用层。然后计算设备可以根据深度学习网络中各个计算层之间的数据依赖关系和所述内置复用层,确定该多个计算层组,并可以将该多个计算层组中每个计算层组包括的多个计算层运算时所需的最大内存值确定为相应计算层组对应的复用内存值。
需要说明的是,深度学习网络中有很多点对点操作的计算层,当这些计算层级联时,且深度学习网络中其他计算层与这些级联的点对点操作的计算层没有数据依赖时,可以将这些计算层作为内置复用层。在这些计算层进行数据处理计算时,这些计算层的计算结果可以覆盖相应计算层的上一个计算层的计算结果。也即是,在内置复用层的运算过程中,可以用该内置复用层的第一单元的运算结果覆盖复用内存中已存储的该内置复用层的上一个计算层的第一单元的运算结果。其中,内置复用层的第一单元为该内置复用层包括的多个运算单元中的任一单元,内置复用层的第一单元的运算结果根据该内置复用层的上一个计算层的第一单元的运算结果确定得到。
示例性地,例如,深度学习网络中的常见的批归一化(batch normalization,bn)层、激活层(例如,relu层、sigmoid层、tanh层)、按元素计算(element_wise)层等均是点对点操作的计算层,如果深度学习网络中没有其他计算层依赖这些层的输出数据,则可以将这些层作为内置复用层。参见图2,深度学习网络中没有其他计算层依赖bn层、element_wise层以及sigmoid层的输出数据,则element_wise层的输出数据可以覆盖bn层的输出数据,sigmoid层的输出数据可以覆盖element_wise层的输出数据。也即,element_wise层和sigmoid层可以作为内置复用层,此时,bn层、element_wise层和sigmoid层的输出数据可以复用一个内存块。图2所示的计算层中填充有斜线图案的计算层为内置复用层。
由上述介绍可知,当一个计算层可以进行点对点操作且该计算层的上一个计算层的输出数据仅为该计算层所用时,该计算层即为内置复用层。为了方便描述,可以将允许进行点对点操作且该上一个计算层的输出数据仅为当前及三层所用这一条件称为内置条件。基于此,计算设备可以按照深度学习网络中各个计算层的运行顺序,通过遍历深度学习网络,来确定该深度学习网络包括的多个计算层中满足上述内置条件的计算层,将确定的满足上述条件的计算层确定为该深度学习网络中的内置复用层。
图3是本申请实施例提供的一种确定内置复用层的流程图,参见图3,计算设备可以根据推理顺序(也即深度学习网络中各个计算层的运行顺序)遍历深度学习网络中的所有计算层,将满足上述内置条件的计算层进行标记,作为内置复用层,遍历完所有计算层之后,输出标记结果,标记结果中包括该深度学习网络中所有的内置复用层的层标识。
示例性地,仍以图2所示的深度学习网络为例,假设bn层、element_wise层和sigmoid层的层标识依次为A、B和C,遍历完所有计算层之后,输出的标记结果可以为{内置复用层:[B,C]}。
深度学习网络中除了包括可以内置操作的计算层,还包括不可进行内置操作的其他计算层。这些计算层虽然不满足内置规则,但是也存在不同的计算层可以复用同一内存块的情况,也即是当一个内存块中存储的一个计算层的输出数据不再被该深度学习网络中的其他计算层依赖时,可以将该计算层的输出数据所占用的内存进行释放,以便其他计算层可以复用该内存块。
示例性地,如图4所示,池化(pool)层的输出数据作为全连接(fully connected,fc)层的输入数据,在开始运算fc层时,卷积(convolutional,conv)层的输出数据已经不再被其他计算层所需要了,此时,可以将conv层的输出数据所占用的内存进行释放,以用于存储fc层的输出数据。又如图5所示,假设该深度学习网络在前向推理的过程中,各个计算层的运算顺序为conv->pool_1->fc_1->pool_2->fc_2,那么当pool_2层完成运算之后,conv层的输出数据将不再被后续的计算层所需要,也即不再被其他计算层所依赖,此时,fc_2层的输出数据可以复用conv层的输出数据所占用的内存。
基于上述描述,在本申请实施例中,在通过遍历深度学习网络确定内置复用层之后,计算设备可以根据该深度学习网络中各个计算层之间的数据依赖关系和内置复用层,确定多个计算层组,并将该多个计算层组中每个计算层组包括的多个计算层运算时所需的最大内存值确定为相应计算层组对应的复用内存值。
由于深度学习网络的拓扑结构一般较为复杂,也即是各个计算层之间的数据依赖关系较为复杂,一个计算层的输出数据可能会作为一个或多个其他计算层的输入数据,一个计算层的输入数据也可能来源于一个或多个其他计算层的输出数据,可以将一个计算层的输入数据来源的计算层称为该计算层的父计算层,将一个计算层的输出数据流向的计算层称为该计算层的子计算层。在本申请实施例中,一个计算层可能有一个或多个父计算层,也可能有一个或多个子计算层,基于此,数据依赖关系可以包括各个计算层之间的子父关系、以及各个计算层的推理顺序。
基于此,对于深度学习网络中的每个计算层,计算设备可以为相应计算层设置一个计数器变量,通过该计数器变量来记录计算层当前剩下的引用数,该引用数可以实时指示该计算层剩余的子计算层的数量。也即是可以以计数器变量的方式来记录各个计算层之间的数据依赖关系。在开始遍历前,参见图6,对于每个计算层对应的计数器变量,计算设备可以初始化该计数器变量的值为该计算层的所有子计算层的总个数。另外,计算设备还可以设置缓冲池,初始化的缓冲池为空。之后,计算设备可以按照推理顺序通过下述步骤来依次遍历深度学习网络包括的所有计算层。
示例性地,以深度学习网络中的任一个计算层为例,参见图6,首先,计算设备可以判断当前计算层是否为内置复用层。
如果当前计算层是内置复用层,则判断当前计算层是否为深度学习网络的最后一个计算层,也即判断该深度学习网络包括的所有计算层是否已遍历完,如果未遍历完,则计算设备可以继续判断当前计算层的下一个计算层是否为内置复用层。
可选地,如果当前计算层不是内置复用层,则计算设备可以判断缓冲池中是否有占用标记为空闲状态的内存对象,也即是判断缓冲池中是否有可以被复用的内存对象。如果当前计算层为深度学习网络的第一个计算层,则此时缓冲池是空的,也即通过判断可以确定不存在可以被复用的内存对象,如果当前计算层为深度学习网络中除第一个计算层之外的其他计算层,则由于缓冲池中的内存对象可能均为使用状态,因此,也不存在可以被复用的内存对象。在这种情况下,计算设备可以根据当前计算层所需的内存大小,创建一个新的内存对象,并添加至缓冲池中,且新创建的内存对象的占用标记为使用状态,然后将当前计算层与新创建的内存对象进行关联,并创建与该内存对象对应的计算层组,将当前计算层的层标识存入新创建的计算层组中,新创建的计算层组对应的内存复用值等于该计算层所需的内存大小。
如果计算设备确定出缓冲池中存在可以被复用的内存对象,则可以从可被复用的内存对象中选择一个内存对象,将选择的内存对象的占用标记更新为使用状态,并将当前计算层与选择的内存对象进行关联。之后,计算设备可以根据当前计算层所需的内存大小,更新该内存对象对应的计算层组所对应的内存复用值,并将当前计算层的层标识存入相应计算层组中。也即,此时该计算层对应的内存对象所对应的计算层组即为该计算层所属的计算层组。
在将当前计算层加入到某个计算层组之后,计算设备可以将当前计算层的所有父计算层的引用数减1。然后,判断当前计算层的所有父计算层中是否存在引用数为0的计算层,如果不存在,则计算设备可以判断当前计算层是否为该深度学习网络的最后一个计算层,也即,判断该深度学习网络包括的所有计算层是否遍历完,如果未遍历完,则可以通过上述介绍的方法开始遍历下一个计算层,如果遍历完则输出遍历结果。当然,如果存在引用数为0的父计算层,则计算设备可以将与引用数为0的父计算层相关联的内存对象的占用标记更新为空闲状态。之后,计算设备可以判断该深度学习网络包括的所有计算层是否遍历完,如果遍历完则输出遍历结果,如果没有遍历完,则遍历下一个计算层。
需要说明的是,在判断深度学习网络包括的所有计算层是否已遍历完时,计算设备可以比较当前已遍历的计算层的个数是否等于深度学习网络包括的所有计算层的个数。如果当前已遍历的计算层的个数等于深度学习网络包括的计算层的总个数,则计算设备可以确定已全部遍历完。或者,计算设备可以判断当前遍历的计算层的层标识是否为最后一个计算层的层标识,如果是,则计算设备可以确定已全部遍历完。
另外,在遍历所有计算层之后,计算设备输出的遍历结果可以包括一个或多个内存对象、与相应内存对象相关联的多个计算层所在的计算层组、以及相应计算层组对应的复用内存值,且各个计算层组中相应的多个计算层按照推理顺序存放在相应计算层组中。其中,每个计算层组对应的复用内存值为与相应计算层组包括的多个计算层运算时所需的最大内存值。
另外,如果当前遍历的计算层不是内置复用层,且当前缓冲池中存在不止一个空闲状态的内存对象,计算设备可以随机选择一个空闲状态的内存对象,将当前计算层与选择的内存对象进行关联。计算设备也可以根据当前计算层所需的内存大小,从多个空闲状态的内存对象中,选择一个相应复用内存值与当前计算层所需的内存大小最接近的内存对象,将当前计算层与选择的内存对象进行关联。当然,计算设备根据当前计算层所需的内存大小来关联内存对象的方式,可以尽可能地使一个计算层组中包括的各个计算层所需的内存大小接近。
示例性地,以图7为例来对上述确定计算层组的过程来进行说明,在遍历该深度学习网络的所有层之前,可以先设置缓冲池,并根据每个计算层的子计算层的数量来初始化引用数,也即初始化每个计算层的计数器变量值。如图7所示,其中,concv层初始化的引用数为2,pool_1层初始化的引用数为1,pool_2层初始化的引用数为2,fc_1层初始化的引用数为1,fc_2层初始化的引用数为1。假设各个计算层的运算顺序为conv->pool_1->pool_2->fc_1->fc_2,当遍历第一个计算层conv层时,该计算层不为内置复用层,且当前缓冲池为空,此时,可以创建一个内存对象1,将conv层与内存对象1进行关联,并将conv层的层标识A存入内存对象1对应的计算层组1中,也即是A为计算层组1的第一个元素,此时计算层组1对应的内存复用值等于conv层所需的内存大小,且此时内存对象1的占用标记为使用状态。
然后,遍历pool_1层,缓冲池中没有可以被复用的内存对象,可以创建一个内存对象2,将pool_1层与内存对象2进行关联,并将pool_1层的层标识B存入内存对象2对应的计算层组2中,也即是B为计算层组2的第一个元素,此时计算层组2对应的复用内存值等于pool_1层所需的内存大小,且此时内存对象2的占用标记为使用状态。然后可以将pool_1层的父计算层(也即conv层)的引用数减1,变为1。
然后,遍历pool_2层,缓冲池中仍然没有可以被复用的引用对象,可以创建一个内存对象3,将pool_2层与内存对象3进行关联,并将pool_2层的层标识C存入内存对象3对应的计算层组3中,也即是C为计算层组3的第一个元素,此时计算层组3对应的复用内存值等于pool_2层所需的内存大小,且此时内存对象3的占用标记为使用状态。然后可以将pool_2层的父计算层(也即conv层)的引用数减1,变为0。由于此时conv层的引用数为0,也即,没有其他层再依赖该计算层,因此,可以将与conv层相关联的内存对象1的占用标记更新为空闲状态。
之后,遍历fc_1层,由于此时缓冲池中的内存对象1的占用标记为空闲状态,可以将fc_1层与内存对象1进行关联,将fc_1层的层标识D存入计算层组1中,也即是D为计算层组1的第二个元素,将内存对象1的占用标记更新为使用状态。如果fc_1层所需的内存大小大于conv层所需的内存大小,可以将计算层组1对应的复用内存值更新为等于fc_1层所需的内存大小,如果fc_1层所需的内存大小不大于conv层所需的内存大小,计算层组1对应的复用内存值将保持不变。然后可以将fc_1层的父计算层(pool_1层和pool_2层)的引用数分别减1。此时,pool_2层的引用数变为1,pool_1层的引用数变为了0。由于pool_1层不再被其它层依赖,所以可以将与pool_1层相关联的内存对象2的占用标记更新为空闲状态。
然后,遍历fc_2层,也即遍历最后一个计算层,由于此时缓冲池中的内存对象2的占用标记为空闲状态,可以将fc_2层与内存对象2进行关联,将fc_2层的层标识E存入计算层组2中,也即是E为计算层组2的第二个元素,将内存对象2的占用标记更新为使用状态。如果fc_2层所需的内存大小大于pool_1层所需的内存大小,可以将计算层组2对应的复用内存值更新为等于fc_2层所需的内存大小,如果fc_2层所需的内存大小不大于pool_1层所需的内存大小,计算层组2对应的复用内存值将保持不变。然后可以将fc_2层的父计算层pool_2层的引用数减1,变为0,此时可以将与pool_2层相关联的内存对象3的占用标记更新为空闲状态。至此,图6所示的深度学习网络完成遍历,输出的遍历结果可以为:
需要说明的是,上述输出的遍历结果的数据形式仅为一种示例,本申请实施例对遍历结果的数据形式不作限定。
另外,在本申请实施例中,深度学习网络中所有计算层包括内置复用层和多个计算层组,也即是,当深度学习网络中不存在内置复用层时,多个计算层组中包括的所有计算层即为深度学习网络的所有计算层,当深度学习网络中存在内置复用层时,多个计算层组包括深度学习网络中除内置复用层之外的所有计算层。
步骤102:如果当前待运算的目标计算层所属的目标计算层组对应的目标复用内存值大于参考内存阈值,且该目标计算层为目标计算层组中的第一个计算层,则根据目标复用内存值,从未分配给深度学习网络的内存中,为该目标计算层分配复用内存。
在本申请实施例中,计算设备在确定深度学习网络的多个计算层组和每个计算层组对应的复用内存值,以及内置复用层之后,在开始运行该深度学习网络之前,可以根据每个计算层组对应的复用内存值和参考内存阈值,来预先为深度学习网络分配内存。其中,计算设备可以先确定多个计算层组中复用内存值不大于参考内存阈值的计算层组,根据确定的计算层组对应的复用内存值,预先分配一个内存池,该内存池的大小可以不小于确定的计算层组对应的复用内存值中的最大复用内存值。
需要说明的是,参考内存阈值可以事先人为设置,也可以由计算设备根据深度学习网络的规模、所需处理的数据大小等,来确定参考内存阈值,本申请实施例对此不作限定。
在为深度学习网络分配内存池之后,计算设备可以开始运行深度学习网络。在运行深度学习网络的过程中,计算设备可以通过比较计算层所属的计算层组对应的复用内存值和参考内存阈值,来确定为计算层动态分配内存,还是从内存池中分配内存。
在本申请实施例中,可以将当前待运算的计算层称为目标计算层。计算设备可以根据步骤101中得到的遍历结果,来确定目标计算层所属的计算层组,也即目标计算层组,并将目标计算层组对应的复用内存值作为目标复用内存值。之后,计算设备可以判断该目标复用内存值是否大于参考内存阈值。如果目标复用内存值大于参考内存阈值,且该目标计算层为目标计算层组中的第一个计算层,则计算设备可以根据目标复用内存值,从未分配给深度学习网络的内存中,为该目标计算层分配复用内存。也即是计算设备可以为复用内存值大于参考内存阈值的计算层组动态分配内存。
其中,计算设备分配的复用内存的大小可以等于相应复用内存值的大小。或者,计算设备也可以根据最小分配单元来分配复用内存,也即是复用内存的大小可以为最小分配单元的整数倍,这种情况下,计算设备分配的复用内存的大小可以等于或者大于相应复用内存值的大小。其中,最小分配单元可以是事先设定的最小的内存单元,这样,可以减少内存碎片化,利于内存管理,提高内存的使用效率。
示例性地,假设最小分配单元为1M,目标计算层组对应的目标复用内存值为21.5M,如果目标计算层为该目标计算层组中的第一个计算层,且目标复用内存值大于参考内存阈值,则计算设备可以从未分配给该深度学习网络的内存中,为该目标计算层分配22M的复用内存。
计算设备在根据目标复用内存值,为目标复用内存值大于参考内存阈值的目标计算层组中的第一个计算层动态分配复用内存之后,对于目标计算层组中第一个计算层之后的其他计算层,每当运行到这些计算层中的一个计算层时,该计算层可以直接复用该复用内存,也即是,可以释放存储在该复用内存中该计算层的上一个计算层的输出数据,然后将该计算层的输出数据存储到该复用内存中。当该目标计算层组中的所有计算层均完成运算时,如果该复用内存中存储的数据不是该深度学习网络最终的输出数据,则可以将该复用内存进行释放。
步骤103:如果该目标计算层所属的目标计算层组对应的目标复用内存值不大于参考内存阈值,则根据目标计算层所需的目标内存大小,从深度学习网络对应的内存池中,为该目标计算层分配复用内存。
由前述介绍可知,在本申请实施例中,在运行深度学习网络之前,计算设备可以预先为深度学习网络分配一个内存池,该内存池为一个连续的内存块。在分配内存池之后,计算设备可以为该内存池创建一个双向链表,此时,该双向链表包括一个节点,该节点对应该内存块,且该节点中存储有该内存块的内存信息。此时,由于该内存池即为一个大的内存块,不存在其他内存块,因此,该节点存储的内存块的内存信息可以包括该内存块的内存占用状态、总内存值和位置信息。
需要说明的是,内存块的内存占用状态可以是空闲状态或者使用状态,空闲状态表示相应内存块当前可以被复用,使用状态表示相应内存块当前不可以被复用。其中,空闲状态和使用状态也可以以数字标识、字母标识等方式来表示,例如,可以用0表示空闲状态,用1表示使用状态,本申请实施例对此不作限定。另外,内存块的位置信息可以是内存块对应的起始地址,可以是物理地址,也可以是虚拟地址。
示例性地,计算设备预先分配内存池之后,该内存池即为一个内存块,此时该内存块的内存占用状态为空闲状态,总内存值为内存池的总内存大小,位置信息为该内存块的起始地址。
之后,在深度学习网络的运行过程中,如果当前运算的目标计算层所属的目标计算层组对应的目标复用内存值不大于参考内存阈值,则计算设备可以根据目标计算层所需的目标内存大小,从该深度学习网络对应的内存池中,为该目标计算层分配复用内存。
其中,如果在目标计算层之前还未从内存池中为其他计算层分配过复用内存,则内存池为仍为一个连续的内存块,相应地,双向链表中也只有一个节点。此时,计算设备可以从第一个节点开始查找处于空闲状态且内存值大于目标内存大小的节点,由于查找到的节点必然为双向链表当前包括的这个节点,因此,计算设备也可以直接将该节点确定为目标节点,并根据目标计算层所需的目标内存大小,从目标节点对应的内存块中,为目标计算层分配复用内存。也即,从内存池这一整块内存中为目标计算层划分复用内存。
示例性地,在从目标节点对应的内存块中,为目标计算层分配复用内存时,计算设备可以从内存池的起始地址,分配不小于目标计算层所需目标内存大小的内存,作为目标计算层的复用内存,可以用于存储目标计算层的输出数据。
如果在该目标计算层之前已从内存池中为其他计算层分配过复用内存,则内存池可能包括多个内存块,相应地,双向链表中存储有多个内存块对应的多个节点,且各个节点存储的内存信息可以包括相应内存块的内存占用状态、总内存值、相应内存块的位置信息、相应内存块的前一个内存块的位置信息以及相应内存块的后一个内存块的位置信息,且各个节点按照对应的内存块的先后顺序排列。在此基础上,计算设备可以根据目标内存大小和该双向链表中各个节点存储的内存信息,从该双向链表包括的多个节点中,确定目标节点。然后,计算设备可以根据目标内存大小,从目标节点对应的内存块中,为该目标计算层分配复用内存。其中,复用内存的大小不小于目标内存大小。
在本申请实施例中,计算设备确定从多个节点中确定目标节点的实现方式可以为,根据目标内存大小,从双向链表的第一个节点开始查找,将第一个查找到的存储的内存占用状态为空闲状态且总内存值不小于目标内存大小的节点,确定为目标节点。
示例性地,参见图8,假设当前双向链表包括5个节点,分别对应5个内存块,节点1为第一个节点,第一个节点存储的内存信息为{使用状态,10M,内存地址1,,内存地址2},节点2为第二个节点,第二个节点存储的内存信息为{空闲状态,5M,内存地址2,内存地址1,内存地址3},其他节点存储的内存信息可以参见图8。其中,内存信息中的第一个内存地址为相应内存块自身的位置信息,第二个内存地址为相应内存块的前一个内存块的位置信息,第三个内存地址为相应内存块的后一个内存块的位置信息,第一个节点的第二个内存地址为空,最后一个节点的第三个内存地址为空。假设目标计算层组的目标复用内存值为3M,可以看出当前节点2和节点4对应的内存块为空闲状态,且总内存值均大于目标复用内存值,则计算设备从第一个节点开始查找,可以将第一个查找到的节点2确定为目标节点。
在查找到目标节点之后,计算设备可以从目标节点对应的内存块中分配目标内存大小的复用内存。或者,计算设备可以分配大于目标内存大小的复用内存。当然,计算设备也可以根据最小分配单元来分配不小于目标内存大小,且为最小分配单元的整数倍的内存作为复用内存。
其中,该最小分配单元可以与前述动态分配内存时对应的最小分配单元相同,也可以不同。也即是内存池的分配粒度和动态分配的分配粒度可以相同或不同。由于从内存池中分配复用内存的计算层组中包括的各个计算层运算所需的内存大小相对较小,因此,内存池对应的最小分配单元可以相对更小,也即是内存池的分配粒度可以更小。根据最小分配单元来从内存池中分配复用内存,可以减少内存碎片化,提高内存池中内存的使用效率。
示例性地,内存池对应的最小分配单元可以是256B,动态分配的内存对应的最小分配单元可以是1KB,具体的数值可以根据实际来设置,本申请实施例对此不作限定。
在本申请实施例中,由于目标节点对应的内存块的总内存值可能等于或大于复用内存的大小。在目标节点对应的内存块的总内存值大于复用内存的大小的情况下,计算设备根据目标内存大小,从目标节点对应的内存块中,为目标计算层分配复用内存之后,该目标节点对应的内存块将会剩余一部分内内存。此时,计算设备可以在目标节点之后增加一个节点,将目标节点对应的内存块中除复用内存之外的剩余内存的内存信息存储在增加的节点中,并可以根据复用内存的内存信息,更新目标节点存储的内存信息。
其中,计算设备根据复用内存的内存信息,更新目标节点存储的内存占用状态、总内存值、以及相应内存块的后一个内存块的位置信息,也即是可以将目标节点存储的内存信息中的内存占用状态更新为使用状态,总内存值更新为复用内存的内存大小,并更新存储的相应内存块的后一个内存块的位置信息。
示例性地,仍以图8以及上述对图8的相关描述为例,将节点2确定为目标节点,并将目标节点对应的内存块中从内存地址2开始的前3M内存作为复用内存之后,计算设备可以在目标节点,也即在节点2之后增加一个节点,将剩余的2M内存作为一个内存块,将该内存块的内存信息存储在增加的节点中,增加的节点对应的内存块的内存占用状态为空闲状态、总内存值为2M。计算设备还可以将目标节点中存储的内存信息的内存占用状态更新为使用状态,将总内存值更新为3M,并更新存储的相应内存块的后一个内存块的位置信息。
在本申请实施例中,当内存池中的目标节点对应的内存块使用完释放之后,也即是在释放复用内存之后,计算设备可以将目标节点存储的内存信息中包括的内存占用状态更新为空闲状态。并且如果与该目标节点相邻的节点对应的内存块中存在内存占用状态为空闲状态的内存块,计算设备则可以将存在的空闲状态的内存块与复用内存进行合并,并根据合并之后的内存块的内存信息,对双向链表进行更新。
也即,当目标计算层计算完成之后,当没有其他计算层再依赖该目标计算层的输出数据时,表示目标计算层所占用的复用内存可以释放,此时,计算设备可以释放该复用内存,并将目标节点存储的内存信息中包括的内存占用状态更新为空闲状态。然后,计算设备可以通过查看当前双向链表中与目标节点相邻的节点存储的内存信息,来确定相邻的节点对应的内存块中,是否存在内存占用状态为空闲状态的内存块,也即是查看目标节点的前一个节点和后一个节点存储的内存信息,来确定目标节点的前一个节点和后一个节点对应的内存块中,是否存在内存占用状态为空闲状态的内存块。如果存在空闲状态的内存块,计算设备则可以将存在的空闲状态的内存块与该复用内存进行合并,形成一个更大的内存块,并根据合并之后的内存块的内存信息,对双向链表包括的节点进行更新,也即是更新节点个数、并更新合并后的内存块对应的节点中存储的内存信息。
以上介绍了当当前待运算的计算层为计算层组中的计算层时,计算设备为计算层分配复用内存的实现方式。在本申请实施例中,由前述介绍可知,深度学习网络中的计算层还可以是内置复用层,内置复用层的计算方式是点对点操作,内置复用层在运算的过程中,可以用内置复用层运算结果覆盖掉上一个计算层的计算结果。
基于上述描述,在本申请实施例中,如果目标计算层的下一个计算层为内置复用层,则在下一个计算层的运算过程中,用下一个计算层的第一单元的运算结果覆盖复用内存中已存储的目标计算层的第一单元的运算结果。其中,下一个计算层的第一单元为下一个计算层包括的多个运算单元中的任一单元,下一个计算层的第一单元的运算结果根据目标计算层的第一单元的运算结果确定得到。
需要说明的是,目标计算层的下一个计算层,是指按照推理顺序来说,运算完目标计算层之后,接下来要运算的计算层。
示例性地,目标计算层的下一个计算层为sigmoid层,且该sigmoid层为内置复用层,计算设备可以在运算该sigmoid层的第一单元时,可以用sigmoid层的第一单元覆盖复用内存中已存储的目标计算层的第一单元的运算结果。
综上所述,在本申请实施例中,可以先确定深度学习网络的多个计算层组和每个计算层组对应的复用内存值。在深度学习网络运行的过程中,可以通过对比当前待运算的目标计算层所属的目标计算层组的复用内存值与参考内存阈值,来决定是从预先未分配给该深度学习网络的内存中为目标计算层动态分配复用内存,还是从预先为该深度学习网络分配的内存池中为目标计算层分配复用内存。也即,本申请实施例可以根据计算层所需内存大小来采用不同的方式合理为其分配内存,这样,相较于一直采用动态分配内存的方式来进行分配,能够减少申请和释放内存的次数,有效控制内存碎片化,提高内存的使用效率。
图9是本申请实施例提供的一种内存管理装置的结构示意图,该内存管理装置900可以由软件、硬件或者两者的结合实现成为计算设备的部分或者全部。请参考图9,该装置900包括:确定模块901、第一分配模块902和第二分配模块903。
确定模块901,用于确定深度学习网络的多个计算层组和每个计算层组对应的复用内存值,每个计算层组包括多个允许进行内存复用的计算层,每个计算层组对应的复用内存值为相应计算层组包括的多个计算层运算时所需的最大内存值;
第一分配模块902,用于如果当前待运算的目标计算层所属的目标计算层组对应的目标复用内存值大于参考内存阈值,且该目标计算层为目标计算层组中的第一个计算层,则根据目标复用内存值,从未分配给深度学习网络的内存中,为该目标计算层分配复用内存;
第二分配模块903,用于如果该目标计算层所属的目标计算层组对应的目标复用内存值不大于参考内存阈值,则根据该目标计算层所需的目标内存大小,从深度学习网络对应的内存池中,为该目标计算层分配复用内存,内存池是指预先为深度学习网络分配的内存。
可选地,复用内存的大小为最小分配单元的整数倍。
可选地,内存池包括一个或多个内存块,内存池对应一个双向链表,双向链表包括一个或多个节点,每个节点对应内存池中的一个内存块,且每个节点中存储有对应的内存块的内存信息;
第二分配模块903包括:
第一确定单元,用于根据目标内存大小和双向链表中各个节点存储的内存信息,从双向链表包括的一个或多个节点中,确定目标节点;
分配单元,用于根据目标内存大小,从该目标节点对应的内存块中,为该目标计算层分配复用内存。
可选地,内存信息包括相应内存块的内存占用状态、总内存值、相应内存块的位置信息、相应内存块的前一个内存块的位置信息以及相应内存块的后一个内存块的位置信息,一个或多个节点按照对应的内存块的先后顺序排列;
第一确定单元包括:
确定子单元,用于根据目标内存大小,从双向链表的第一个节点开始查找,将第一个查找到的存储的内存占用状态为空闲状态且总内存值不小于目标内存大小的节点,确定为目标节点。
可选地,第二分配模块903还包括:
添加单元,用于当该目标节点对应的内存块的大小大于复用内存的大小时,在目标节点之后增加一个节点,将该目标节点对应的内存块中除复用内存之外的剩余内存的内存信息存储在增加的节点中;
第一更新单元,用于根据复用内存的内存信息,更新该目标节点存储的内存信息。
可选地,第二分配模块903还包括:
第二更新单元,用于在释放复用内存之后,将该目标节点存储的内存信息中包括的内存占用状态更新为空闲状态;
合并单元,用于如果与该目标节点相邻的节点对应的内存块中存在内存占用状态为空闲状态的内存块,则将存在的空闲状态的内存块与复用内存进行合并;
第三更新单元,用于根据合并之后的内存块的内存信息,对双向链表进行更新。
可选地,确定模块901包括:
第二确定单元,用于根据深度学习网络中每个计算层的计算方式和各个计算层之间的数据依赖关系,确定该深度学习网络包括的多个计算层中的内置复用层;
第三确定单元,用于根据该深度学习网络中各个计算层之间的数据依赖关系和内置复用层,确定多个计算层组;
第四确定单元,用于将多个计算层组中每个计算层组包括的多个计算层运算时所需的最大内存值确定为相应计算层组对应的复用内存值。
可选地,该装置900还包括:
覆盖模块,用于如果该目标计算层的下一个计算层为内置复用层,则在下一个计算层的运算过程中,用下一个计算层的第一单元的运算结果覆盖复用内存中已存储的目标计算层的第一单元的运算结果;
其中,下一个计算层的第一单元为下一个计算层包括的多个运算单元中的任一单元,下一个计算层的第一单元的运算结果根据该目标计算层的第一单元的运算结果确定得到。
综上所述,在本申请实施例中,可以先确定深度学习网络的多个计算层组和每个计算层组对应的复用内存值。在深度学习网络运行的过程中,可以通过对比当前待运算的目标计算层所属的目标计算层组的复用内存值与参考内存阈值,来决定是从预先未分配给该深度学习网络的内存中为目标计算层动态分配复用内存,还是从预先为该深度学习网络分配的内存池中为目标计算层分配复用内存。也即,本申请实施例可以根据计算层所需内存大小来采用不同的方式合理为其分配内存,这样,相较于一直采用动态分配内存的方式来进行分配,能够减少申请和释放内存的次数,有效控制内存碎片化,提高内存的使用效率。
需要说明的是:上述实施例提供的内存管理装置在内存管理时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的内存管理装置与内存管理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图10是本申请实施例提供的一种计算设备1000的结构示意图。该计算设备1000可以是便携式移动计算设备,比如:手机、平板电脑、笔记本电脑或台式电脑,计算设备1000还可以是一台服务器,或者由多台服务器构成的服务器集群。计算设备1000还可能被称为用户设备、便携式计算设备、膝上型计算设备、台式计算设备等其他名称。
通常,计算设备1000包括有:处理器1001和存储器1002。
处理器1001可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1001可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1001也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1001可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1001还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器1002可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1002还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1002中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器1001所执行以实现本申请中方法实施例提供的内存管理方法。
在一些实施例中,计算设备1000还可选包括有:***设备接口1003和至少一个***设备。处理器1001、存储器1002和***设备接口1003之间可以通过总线或信号线相连。各个***设备可以通过总线、信号线或电路板与***设备接口1003相连。具体地,***设备包括:射频电路1004、触摸显示屏1005、摄像头1006、音频电路1007、定位组件1008和电源1009中的至少一种。
***设备接口1003可被用于将I/O(Input/Output,输入/输出)相关的至少一个***设备连接到处理器1001和存储器1002。在一些实施例中,处理器1001、存储器1002和***设备接口1003被集成在同一芯片或电路板上;在一些其他实施例中,处理器1001、存储器1002和***设备接口1003中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路1004用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路1004通过电磁信号与通信网络以及其他通信设备进行通信。射频电路1004将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路1004包括:天线***、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路1004可以通过至少一种无线通信协议来与其它设备进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路1004还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏1005用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏1005是触摸显示屏时,显示屏1005还具有采集在显示屏1005的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器1001进行处理。此时,显示屏1005还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏1005可以为一个设置于计算设备1000的前面板;在另一些实施例中,显示屏1005可以为至少两个,分别设置在计算设备1000的不同表面或呈折叠设计;在其他一些实施例中,显示屏1005可以是柔性显示屏,设置在计算设备1000的弯曲表面上或折叠面上。甚至,显示屏1005还可以设置成非矩形的不规则图形,也即异形屏。显示屏1005可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(OrganicLight-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件1006用于采集图像或视频。可选地,摄像头组件1006包括前置摄像头和后置摄像头。通常,前置摄像头设置在计算设备的前面板,后置摄像头设置在计算设备的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件1006还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路1007可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器1001进行处理,或者输入至射频电路1004以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在计算设备1000的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器1001或射频电路1004的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路1007还可以包括耳机插孔。
定位组件1008用于定位计算设备1000的当前地理位置,以实现导航或LBS(Location Based Service,基于位置的服务)。定位组件1008可以是基于美国的GPS(Global Positioning System,全球定位***)、中国的北斗***或俄罗斯的伽利略***的定位组件。
电源1009用于为计算设备1000中的各个组件进行供电。电源1009可以是交流电、直流电、一次性电池或可充电电池。当电源1009包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
在一些实施例中,计算设备1000还包括有一个或多个传感器1010。该一个或多个传感器1010包括但不限于:加速度传感器1011、陀螺仪传感器1012、压力传感器1013、指纹传感器1014、光学传感器1015以及接近传感器1016。
加速度传感器1011可以检测以计算设备1000建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器1011可以用于检测重力加速度在三个坐标轴上的分量。处理器1001可以根据加速度传感器1011采集的重力加速度信号,控制触摸显示屏1005以横向视图或纵向视图进行用户界面的显示。加速度传感器1011还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器1012可以检测计算设备1000的机体方向及转动角度,陀螺仪传感器1012可以与加速度传感器1011协同采集用户对计算设备1000的3D动作。处理器1001根据陀螺仪传感器1012采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器1013可以设置在计算设备1000的侧边框和/或触摸显示屏1005的下层。当压力传感器1013设置在计算设备1000的侧边框时,可以检测用户对计算设备1000的握持信号,由处理器1001根据压力传感器1013采集的握持信号进行左右手识别或快捷操作。当压力传感器1013设置在触摸显示屏1005的下层时,由处理器1001根据用户对触摸显示屏1005的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器1014用于采集用户的指纹,由处理器1001根据指纹传感器1014采集到的指纹识别用户的身份,或者,由指纹传感器1014根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器1001授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器1014可以被设置计算设备1000的正面、背面或侧面。当计算设备1000上设置有物理按键或厂商Logo时,指纹传感器1014可以与物理按键或厂商Logo集成在一起。
光学传感器1015用于采集环境光强度。在一个实施例中,处理器1001可以根据光学传感器1015采集的环境光强度,控制触摸显示屏1005的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏1005的显示亮度;当环境光强度较低时,调低触摸显示屏1005的显示亮度。在另一个实施例中,处理器1001还可以根据光学传感器1015采集的环境光强度,动态调整摄像头组件1006的拍摄参数。
接近传感器1016,也称距离传感器,通常设置在计算设备1000的前面板。接近传感器1016用于采集用户与计算设备1000的正面之间的距离。在一个实施例中,当接近传感器1016检测到用户与计算设备1000的正面之间的距离逐渐变小时,由处理器1001控制触摸显示屏1005从亮屏状态切换为息屏状态;当接近传感器1016检测到用户与计算设备1000的正面之间的距离逐渐变大时,由处理器1001控制触摸显示屏1005从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图10中示出的结构并不构成对计算设备1000的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在一些实施例中,还提供了一种计算机可读存储介质,该存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例中内存管理方法的步骤。例如,所述计算机可读存储介质可以是ROM、RAM、CD-ROM、磁带、软盘和光数据存储设备等。
值得注意的是,本申请提到的计算机可读存储介质可以为非易失性存储介质,换句话说,可以是非瞬时性存储介质。
应当理解的是,实现上述实施例的全部或部分步骤可以通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。所述计算机指令可以存储在上述计算机可读存储介质中。
也即是,在一些实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述所述的内存管理方法的步骤。
以上所述为本申请提供的实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (17)
1.一种内存管理方法,其特征在于,所述方法包括:
确定深度学习网络的多个计算层组和每个计算层组对应的复用内存值,每个计算层组包括多个允许进行内存复用的计算层,每个计算层组对应的复用内存值为相应计算层组包括的多个计算层运算时所需的最大内存值;
如果当前待运算的目标计算层所属的目标计算层组对应的目标复用内存值大于参考内存阈值,且所述目标计算层为所述目标计算层组中的第一个计算层,则根据所述目标复用内存值,从未分配给所述深度学习网络的内存中,为所述目标计算层分配复用内存;
如果所述目标计算层所属的目标计算层组对应的目标复用内存值不大于所述参考内存阈值,则根据所述目标计算层所需的目标内存大小,从所述深度学习网络对应的内存池中,为所述目标计算层分配复用内存,所述内存池是指基于所述多个计算层组中复用内存值不大于所述参考内存阈值的计算层组对应的复用内存值预先为所述深度学习网络分配的内存,所述内存池的大小不小于所述多个计算层组中复用内存值不大于所述参考内存阈值的计算层组对应的复用内存值中的最大复用内存值。
2.根据权利要求1所述的方法,其特征在于,所述复用内存的大小为最小分配单元的整数倍。
3.根据权利要求1所述的方法,其特征在于,所述内存池包括一个或多个内存块,所述内存池对应一个双向链表,所述双向链表包括一个或多个节点,每个节点对应所述内存池中的一个内存块,且每个节点中存储有对应的内存块的内存信息;
所述根据所述目标计算层所需的目标内存大小,从所述深度学习网络对应的内存池中,为所述目标计算层分配复用内存,包括:
根据所述目标内存大小和所述双向链表中各个节点存储的内存信息,从所述双向链表包括的一个或多个节点中,确定目标节点;
根据所述目标内存大小,从所述目标节点对应的内存块中,为所述目标计算层分配所述复用内存。
4.根据权利要求3所述的方法,其特征在于,所述内存信息包括相应内存块的内存占用状态、总内存值、相应内存块的位置信息、相应内存块的前一个内存块的位置信息以及相应内存块的后一个内存块的位置信息,所述一个或多个节点按照对应的内存块的先后顺序排列;
所述根据所述目标内存大小和所述双向链表中各个节点存储的内存信息,从所述双向链表包括的一个或多个节点中,确定目标节点,包括:
根据所述目标内存大小,从所述双向链表的第一个节点开始查找,将第一个查找到的存储的内存占用状态为空闲状态且总内存值不小于所述目标内存大小的节点,确定为所述目标节点。
5.根据权利要求3所述的方法,其特征在于,所述根据所述目标内存大小,从所述目标节点对应的内存块中,为所述目标计算层分配所述复用内存之后,还包括:
当所述目标节点对应的内存块的大小大于所述复用内存的大小时,在所述目标节点之后增加一个节点,将所述目标节点对应的内存块中除所述复用内存之外的剩余内存的内存信息存储在增加的节点中;
根据所述复用内存的内存信息,更新所述目标节点存储的内存信息。
6.根据权利要求3所述的方法,其特征在于,所述根据所述目标内存大小,从所述目标节点对应的内存块中,为所述目标计算层分配所述复用内存之后,还包括:
在释放所述复用内存之后,将所述目标节点存储的内存信息中包括的内存占用状态更新为空闲状态;
如果与所述目标节点相邻的节点对应的内存块中存在内存占用状态为空闲状态的内存块,则将存在的空闲状态的内存块与所述复用内存进行合并;
根据合并之后的内存块的内存信息,对所述双向链表进行更新。
7.根据权利要求1-6任一所述的方法,其特征在于,所述确定深度学习网络的多个计算层组和每个计算层组对应的复用内存值,包括:
根据所述深度学习网络中每个计算层的计算方式和各个计算层之间的数据依赖关系,确定所述深度学习网络包括的多个计算层中的内置复用层;
根据所述深度学习网络中各个计算层之间的数据依赖关系和所述内置复用层,确定所述多个计算层组;
将所述多个计算层组中每个计算层组包括的多个计算层运算时所需的最大内存值确定为相应计算层组对应的复用内存值。
8.根据权利要求1-6任一所述的方法,其特征在于,所述为所述目标计算层分配复用内存之后,还包括:
如果所述目标计算层的下一个计算层为内置复用层,则在所述下一个计算层的运算过程中,用所述下一个计算层的第一单元的运算结果覆盖所述复用内存中已存储的所述目标计算层的第一单元的运算结果;
其中,所述下一个计算层的第一单元为所述下一个计算层包括的多个运算单元中的任一单元,所述下一个计算层的第一单元的运算结果根据所述目标计算层的第一单元的运算结果确定得到。
9.一种内存管理装置,其特征在于,所述装置包括:
确定模块,用于确定深度学习网络的多个计算层组和每个计算层组对应的复用内存值,每个计算层组包括多个允许进行内存复用的计算层,每个计算层组对应的复用内存值为相应计算层组包括的多个计算层运算时所需的最大内存值;
第一分配模块,用于如果当前待运算的目标计算层所属的目标计算层组对应的目标复用内存值大于参考内存阈值,且所述目标计算层为所述目标计算层组中的第一个计算层,则根据所述目标复用内存值,从未分配给所述深度学习网络的内存中,为所述目标计算层分配复用内存;
第二分配模块,用于如果所述目标计算层所属的目标计算层组对应的目标复用内存值不大于所述参考内存阈值,则根据所述目标计算层所需的目标内存大小,从所述深度学习网络对应的内存池中,为所述目标计算层分配复用内存,所述内存池是指基于所述多个计算层组中复用内存值不大于所述参考内存阈值的计算层组对应的复用内存值预先为所述深度学习网络分配的内存,所述内存池的大小不小于所述多个计算层组中复用内存值不大于所述参考内存阈值的计算层组对应的复用内存值中的最大复用内存值。
10.根据权利要求9所述的装置,其特征在于,所述复用内存的大小为最小分配单元的整数倍。
11.根据权利要求9所述的装置,其特征在于,所述内存池包括一个或多个内存块,所述内存池对应一个双向链表,所述双向链表包括一个或多个节点,每个节点对应所述内存池中的一个内存块,且每个节点中存储有对应的内存块的内存信息;
所述第二分配模块包括:
第一确定单元,用于根据所述目标内存大小和所述双向链表中各个节点存储的内存信息,从所述双向链表包括的一个或多个节点中,确定目标节点;
分配单元,用于根据所述目标内存大小,从所述目标节点对应的内存块中,为所述目标计算层分配所述复用内存。
12.根据权利要求11所述的装置,其特征在于,所述内存信息包括相应内存块的内存占用状态、总内存值、相应内存块的位置信息、相应内存块的前一个内存块的位置信息以及相应内存块的后一个内存块的位置信息,所述一个或多个节点按照对应的内存块的先后顺序排列;
所述第一确定单元包括:
确定子单元,用于根据所述目标内存大小,从所述双向链表的第一个节点开始查找,将第一个查找到的存储的内存占用状态为空闲状态且总内存值不小于所述目标内存大小的节点,确定为所述目标节点。
13.根据权利要求11所述的装置,其特征在于,所述第二分配模块还包括:
添加单元,用于当所述目标节点对应的内存块的大小大于所述复用内存的大小时,在所述目标节点之后增加一个节点,将所述目标节点对应的内存块中除所述复用内存之外的剩余内存的内存信息存储在增加的节点中;
第一更新单元,用于根据所述复用内存的内存信息,更新所述目标节点存储的内存信息。
14.根据权利要求11所述的装置,其特征在于,所述第二分配模块还包括:
第二更新单元,用于在释放所述复用内存之后,将所述目标节点存储的内存信息中包括的内存占用状态更新为空闲状态;
合并单元,用于如果与所述目标节点相邻的节点对应的内存块中存在内存占用状态为空闲状态的内存块,则将存在的空闲状态的内存块与所述复用内存进行合并;
第三更新单元,用于根据合并之后的内存块的内存信息,对所述双向链表进行更新。
15.根据权利要求9-14任一所述的装置,其特征在于,所述确定模块包括:
第二确定单元,用于根据所述深度学习网络中每个计算层的计算方式和各个计算层之间的数据依赖关系,确定所述深度学习网络包括的多个计算层中的内置复用层;
第三确定单元,用于根据所述深度学习网络中各个计算层之间的数据依赖关系和所述内置复用层,确定所述多个计算层组;
第四确定单元,用于将所述多个计算层组中每个计算层组包括的多个计算层运算时所需的最大内存值确定为相应计算层组对应的复用内存值。
16.根据权利要求9-14任一所述的装置,其特征在于,所述装置还包括:
覆盖模块,用于如果所述目标计算层的下一个计算层为内置复用层,则在所述下一个计算层的运算过程中,用所述下一个计算层的第一单元的运算结果覆盖所述复用内存中已存储的所述目标计算层的第一单元的运算结果;
其中,所述下一个计算层的第一单元为所述下一个计算层包括的多个运算单元中的任一单元,所述下一个计算层的第一单元的运算结果根据所述目标计算层的第一单元的运算结果确定得到。
17.一种计算机可读存储介质,其特征在于,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-8任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911396930.2A CN113127181B (zh) | 2019-12-30 | 2019-12-30 | 内存管理方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911396930.2A CN113127181B (zh) | 2019-12-30 | 2019-12-30 | 内存管理方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113127181A CN113127181A (zh) | 2021-07-16 |
CN113127181B true CN113127181B (zh) | 2024-02-20 |
Family
ID=76768927
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911396930.2A Active CN113127181B (zh) | 2019-12-30 | 2019-12-30 | 内存管理方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113127181B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113791910A (zh) * | 2021-09-22 | 2021-12-14 | 维沃移动通信有限公司 | 内存分配方法、内存分配装置、电子设备和可读存储介质 |
CN113608881B (zh) * | 2021-10-09 | 2022-02-25 | 腾讯科技(深圳)有限公司 | 内存分配方法、装置、设备、可读存储介质及程序产品 |
CN114492775A (zh) * | 2022-01-13 | 2022-05-13 | 哲库科技(上海)有限公司 | 一种数据处理方法、装置、神经网络加速器及存储介质 |
CN114780230A (zh) * | 2022-03-11 | 2022-07-22 | 奥比中光科技集团股份有限公司 | 一种内存分配方法、部署方法及相关装置 |
CN114816752A (zh) * | 2022-04-26 | 2022-07-29 | 山东云海国创云计算装备产业创新中心有限公司 | 一种内存管理方法、***、设备及计算机可读存储介质 |
CN116049029B (zh) * | 2023-03-06 | 2023-07-14 | 苏州浪潮智能科技有限公司 | 一种内存共享方法、装置、设备及可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108038002A (zh) * | 2017-12-15 | 2018-05-15 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理方法 |
CN108829610A (zh) * | 2018-04-02 | 2018-11-16 | 浙江大华技术股份有限公司 | 一种神经网络前向计算过程中的内存管理方法及设备 |
CN109508235A (zh) * | 2018-09-28 | 2019-03-22 | 深圳市紫光同创电子有限公司 | 一种内存池管理方法、装置及计算机可读存储介质 |
CN110070117A (zh) * | 2019-04-08 | 2019-07-30 | 腾讯科技(深圳)有限公司 | 一种数据处理方法及装置 |
CN110490313A (zh) * | 2019-08-14 | 2019-11-22 | 北京中科寒武纪科技有限公司 | 一种内存复用方法及其相关产品 |
-
2019
- 2019-12-30 CN CN201911396930.2A patent/CN113127181B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108038002A (zh) * | 2017-12-15 | 2018-05-15 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理方法 |
CN108829610A (zh) * | 2018-04-02 | 2018-11-16 | 浙江大华技术股份有限公司 | 一种神经网络前向计算过程中的内存管理方法及设备 |
CN109508235A (zh) * | 2018-09-28 | 2019-03-22 | 深圳市紫光同创电子有限公司 | 一种内存池管理方法、装置及计算机可读存储介质 |
CN110070117A (zh) * | 2019-04-08 | 2019-07-30 | 腾讯科技(深圳)有限公司 | 一种数据处理方法及装置 |
CN110490313A (zh) * | 2019-08-14 | 2019-11-22 | 北京中科寒武纪科技有限公司 | 一种内存复用方法及其相关产品 |
Also Published As
Publication number | Publication date |
---|---|
CN113127181A (zh) | 2021-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113127181B (zh) | 内存管理方法、装置及存储介质 | |
CN108304265B (zh) | 内存管理方法、装置及存储介质 | |
CN112256425B (zh) | 负载均衡方法及***、计算机集群、信息编辑方法及终端 | |
CN108762881B (zh) | 界面绘制方法、装置、终端及存储介质 | |
CN113553039B (zh) | 算子的可执行代码的生成方法及装置 | |
CN111897487B (zh) | 管理数据的方法、装置、电子设备及介质 | |
CN111177137B (zh) | 数据去重的方法、装置、设备及存储介质 | |
CN111427949B (zh) | 一种创建大数据服务的方法及装置 | |
CN111813322B (zh) | 存储池的创建方法、装置、设备及存储介质 | |
CN110705614A (zh) | 模型训练方法、装置、电子设备及存储介质 | |
CN111986227B (zh) | 轨迹生成方法、装置、计算机设备及存储介质 | |
CN113469360B (zh) | 推理方法及装置 | |
CN111666076B (zh) | 图层添加方法、装置、终端及存储介质 | |
CN111193604B (zh) | 虚拟网络功能链的部署方法、装置、设备及存储介质 | |
CN111275607A (zh) | 界面显示方法、装置、计算机设备及存储介质 | |
CN113822916B (zh) | 图像匹配方法、装置、设备及可读存储介质 | |
CN112990421B (zh) | 优化深度学习网络的运行过程的方法、装置及存储介质 | |
CN113949678B (zh) | 流量控制方法、装置、电子设备及计算机可读存储介质 | |
CN113742430B (zh) | 确定图数据中结点构成三角形结构个数的方法及*** | |
CN113766043B (zh) | 配置目标容器的方法、装置、计算机设备及存储介质 | |
CN112214115B (zh) | 输入方式的识别方法、装置、电子设备及存储介质 | |
CN111984755B (zh) | 确定目标停车点的方法、装置、电子设备及存储介质 | |
CN111708581B (zh) | 应用启动方法、装置、设备及计算机存储介质 | |
CN111914985B (zh) | 深度学习网络模型的配置方法、装置及存储介质 | |
CN113448692B (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 |