CN117093509B - 一种基于贪婪算法的片上内存地址分配方法和系统 - Google Patents
一种基于贪婪算法的片上内存地址分配方法和系统 Download PDFInfo
- Publication number
- CN117093509B CN117093509B CN202311345085.2A CN202311345085A CN117093509B CN 117093509 B CN117093509 B CN 117093509B CN 202311345085 A CN202311345085 A CN 202311345085A CN 117093509 B CN117093509 B CN 117093509B
- Authority
- CN
- China
- Prior art keywords
- tensor
- address
- life cycle
- memory
- father
- 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
- 238000004422 calculation algorithm Methods 0.000 title claims abstract description 50
- 238000000034 method Methods 0.000 title claims abstract description 41
- 238000004364 calculation method Methods 0.000 claims abstract description 12
- 230000008569 process Effects 0.000 claims abstract description 12
- 238000003062 neural network model Methods 0.000 claims abstract description 8
- 239000012634 fragment Substances 0.000 claims description 30
- 230000002776 aggregation Effects 0.000 claims description 11
- 238000004220 aggregation Methods 0.000 claims description 11
- 230000003213 activating effect Effects 0.000 claims description 7
- 230000005012 migration Effects 0.000 claims description 4
- 238000013508 migration Methods 0.000 claims description 4
- 238000010276 construction Methods 0.000 claims description 3
- 238000013500 data storage Methods 0.000 claims description 3
- 230000014759 maintenance of location Effects 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 14
- 230000007246 mechanism Effects 0.000 description 8
- 230000003068 static effect Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 6
- 230000002035 prolonged effect Effects 0.000 description 6
- 238000004590 computer program Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 238000013528 artificial neural network Methods 0.000 description 4
- 238000013467 fragmentation Methods 0.000 description 4
- 238000006062 fragmentation reaction Methods 0.000 description 4
- 230000004913 activation Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000006872 improvement Effects 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
Classifications
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/781—On-chip cache; Off-chip memory
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/01—Dynamic search techniques; Heuristics; Dynamic trees; Branch-and-bound
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- 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
Abstract
本申请公开了一种基于贪婪算法的片上内存地址分配方法和系统,其中方法包括:获取神经网络模型计算过程中出现在片上内存中的全部张量;获取张量的相关信息;相关信息分为三类,分别为:块数据信息;生命周期信息;运算时期信息;将张量的块数据信息按照数据量从大到小的顺序存储至第一数据列表中,并对第一数据列表进行初始化处理;判断张量是否满足地址复用条件,构建张量的地址复用关系,标记满足地址复用条件的父张量与子张量,其中,子张量可以重复使用父张量的内存地址;根据第一数据列表中存储的张量顺序和块数据信息,借助贪婪算法和地址复用关系,依次对张量进行内存地址分配。
Description
技术领域
本申请涉及芯片编译器领域,具体而言,涉及一种基于贪婪算法的片上内存地址分配方法和系统。
背景技术
人工智能芯片作为人工智能领域的专用集成电路,凭借其高速度、高能效的优势,在人工智能领域得到了广泛的应用。与此同时,为确保人工智能芯片能正确运行,并进一步挖掘性能提升空间,人工智能芯片编译器已经成为非常重要的一环,而内存地址分配,则是人工智能芯片编译器的重要工作之一。
由于人工智能芯片的特殊性,其内存空间分为片上内存(mempool)与片外内存(ddr)两部分,且两个存储空间的地址相互独立,因此内存地址分配工作也分为片上内存地址分配与片外内存地址分配两部分。两者具有较大差别:片外内存地址分配由于可用地址空间更大,对内存碎片不敏感,只要完成数据冲突管理工作即可;而片上内存地址分配则属于资源受限的地址分配,需要在有限的地址空间内完成输入输出数据的排布,具有更大的开发难度,同时也拥有更多的性能提升机会。
之前的片上内存分配器,可大致分为两类:一类采用动态内存分配算法,如FirstFit,从未分配空间的起点开始查找,把最先能够满足size要求的空间分配给目标。这类内存分配器实现简单,但无法解决内存碎片问题,容易出现内存地址分配失败的情况。另一类采用静态内存分配算法,将内存分配问题转化为一个二维装箱问题,再通过启发式算法求解。静态内存分配器能够有效缓解内存碎片问题,然而,当硬件支持地址复用,即某些算子的输出张量能够复用输入张量的地址空间时,之前的内存分配器也很难灵活利用这一机制,因为强行在启发式算法中引入这一机制,会有产生内存碎片的隐患。如果能在静态分配的基础上,加入适当的机制以支持地址复用,将大幅提升性能。
发明内容
为了解决上述技术问题,本申请提供一种基于贪婪算法的片上内存地址分配方法和系统,通过在静态内存分配算法的基础上引入地址复用机制,通过贪婪启发式算法减少静态内存分配所产生的内存碎片。
具体的,本申请的技术方案如下:
第一方面,本申请公开一种基于贪婪算法的片上内存地址分配方法,包括如下步骤:
接收神经网络模型计算过程中出现在片上内存中的全部张量;
获取张量的相关信息,分别为:块数据信息、生命周期信息、运算时期信息;
将所述张量的所述块数据信息按照数据量从大到小的顺序存储至第一数据列表中,并对所述第一数据列表进行初始化处理;
判断所述张量是否满足地址复用条件,构建所述张量的地址复用关系,标记满足所述地址复用条件的父张量与子张量,其中,子张量可以重复使用父张量的内存地址;
根据所述第一数据列表中存储的张量顺序和所述块数据信息,借助贪婪算法和所述地址复用关系,依次对所述张量进行内存地址分配。
在一些实施方式中,所述的借助贪婪算法和所述地址复用关系,依次对所述张量进行内存地址分配,包括如下步骤:
确定数据量最大的至少一个目标张量;获取所述目标张量的生命周期信息;
以生命周期的起始时期从小到大的顺序,判断所述目标张量的类型:父张量、子张量或普通张量;
若所述目标张量为所述父张量,则将所述父张量生命周期的终止时期延长至其对应子张量的最长的生命周期的终止时期;查找是否存在满足所述父张量生命周期的内存碎片,若存在,则以最小的一个内存碎片的地址作为所述父张量的地址;若不存在,则将所述父张量存入同一生命周期下已分配内存的末尾地址;
若所述目标张量为所述子张量,则查找所述子张量对应的父张量的生命周期,将所述子张量的地址存入同一生命周期下对应的父张量的地址;
若所述目标张量为所述普通张量,则查找是否存在满足所述普通张量生命周期的内存碎片,若存在,则以最小的一个内存碎片的地址作为所述普通张量的地址;若不存在,则将所述普通张量存入同一生命周期下已分配内存的末尾地址。
在一些实施方式中,所述的将所述父张量存入同一生命周期下已分配内存的末尾地址,之前还包括如下步骤:
预判将所述父张量存入末尾地址后是否会导致内存溢出;
若是,则解除所述父张量的地址复用关系,并将其生命周期恢复到延长之前;再以普通张量的方式执行调度。
在一些实施方式中,所述的将所述子张量的地址存入同一生命周期下对应的父张量的地址,之前还包括如下步骤:
判断所述父张量是否与其他子张量存在地址复用关系;
若是,则计算所述子张量的地址偏移量;预判所述子张量偏移后的地址是否与其他已完成地址分配的张量所在地址冲突;
若产生地址冲突,则解除所述子张量地址复用关系,再以普通张量的方式执行调度;
若不产生地址冲突,或所述父张量不与其他子张量存在地址复用关系,则对所述子张量执行地址复用。
在一些实施方式中,完成所述目标张量对应生命周期的内存地址分配后,判断当前生命周期是否为所述目标张量的最后一个生命周期;
若是,则将所述目标张量标记为完成调度。
在一些实施方式中,所述块数据信息包括:所述张量的编码、形状、数据量大小、是否完成调度的标示、参与运算时刻、负载信息、保持信息;
所述生命周期信息包括:所述张量的编码、形状、该生命周期的起始时期、终止时期、分配得到的地址;
所述运算时期信息包括:所述张量参与运算的时刻、参与运算的方式、运算时刻的生命周期。
在一些实施方式中,所述的判断所述张量是否满足地址复用条件,构建所述张量的地址复用关系,具体包括如下步骤:
判断所述张量是否为激活算子的输出张量或输入张量,若是,则激活算子的输出张量为子张量,激活算子的输入张量为父张量;
判断所述张量是否为元素级操作算子的输出张量或第二输入张量,若是,则所述元素级操作算子的输出张量为子张量,所述元素级操作算子的第二输入张量为父张量;
判断所述张量是否为分裂算子的输出张量或输入张量,若是,则分裂算子的输出张量为子张量,分裂算子的输入张量为父张量;
判断所述张量是否为聚合算子的输出张量或输入张量,若是,则聚合算子的输入张量为子张量,聚合算子的输出张量为父张量。
第二方面,本申请还公开一种基于贪婪算法的片上内存地址分配系统,其特征在于,包括:
张量接收模块,用于接收神经网络模型计算过程中出现在片上内存中的全部张量;
信息获取模块,用于获取张量的相关信息,分别为:块数据信息、生命周期信息、运算时期信息;
数据存储模块,用于将所述张量的所述块数据信息按照数据量从大到小的顺序存储至第一数据列表中,并对所述第一数据列表进行初始化处理;
复用关系构建模块,用于判断所述张量是否满足地址复用条件,构建所述张量的地址复用关系,标记满足所述地址复用条件的父张量与子张量,其中,子张量可以重复使用父张量的内存地址;
内存地址分配模块,用于根据所述第一数据列表中存储的张量顺序和所述块数据信息,借助贪婪算法和所述地址复用关系,依次对所述张量进行内存地址分配。
在一些实施方式中,所述内存地址分配模块,包括以下子模块:
目标确定子模块,用于确定数据量最大的至少一个目标张量;获取所述目标张量的生命周期信息;
类型判断子模块,用于以生命周期的起始时期从小到大的顺序,判断所述目标张量的类型:父张量、子张量或普通张量;
父张量分配子模块,用于若所述目标张量为所述父张量,则将所述父张量生命周期的终止时期延长至其对应子张量的最长的生命周期的终止时期;查找是否存在满足所述父张量生命周期的内存碎片,若存在,则以最小的一个内存碎片的地址作为所述父张量的地址;若不存在,则将所述父张量存入同一生命周期下已分配内存的末尾地址;
子张量分配子模块,用于若所述目标张量为所述子张量,则查找所述子张量对应的父张量的生命周期,将所述子张量的地址存入同一生命周期下对应的父张量的地址;
普通张量分配子模块,用于若所述目标张量为所述普通张量,则查找是否存在满足所述普通张量生命周期的内存碎片,若存在,则以最小的一个内存碎片的地址作为所述普通张量的地址;若不存在,则将所述普通张量存入同一生命周期下已分配内存的末尾地址。
在一些实施方式中,所述父张量分配子模块,还用于预判将所述父张量存入末尾地址后是否会导致内存溢出;若是,则解除所述父张量的地址复用关系,并将其生命周期恢复到延长之前;以便所述普通张量分配子模块继续执行调度;
所述子张量分配子模块,还用于判断所述父张量是否与其他子张量存在地址复用关系;若是,则计算所述子张量的地址偏移量;预判所述子张量偏移后的地址是否与其他已完成地址分配的张量所在地址冲突;若产生地址冲突,则解除所述子张量地址复用关系,以便所述普通张量分配子模块继续执行调度。
与现有技术相比,本申请至少具有以下一项有益效果:
1、针对静态模型在NPU(Neural network Processing Unit,神经网络处理器)上的内存部署问题,使用贪婪算法的启发式算法进行内存分配,高效、简单的减少了内存碎片的产生。
2、在内存地址分配的过程中加入了地址复用机制,在处理部分算子时,判断是否有存在地址复用关系的张量,例如激活算子的输出张量可以复用输入张量地址空间,通过地址的复用,可以进一步减少NPU的内存碎片,并为后续张量的分配提供更加充裕的空间。
附图说明
下面将以明确易懂的方式,结合附图说明优选实施方式,对本申请的上述特性、技术特征、优点及其实现方式予以进一步说明。
图1为本申请提供的一个方法实施例的流程图;
图2为四种符合地址复用条件的算子中输入/输出张量的示意图;
图3为本申请提供的另一个方法实施例中步骤S500的子步骤流程图;
图4为现有技术中失败的内存地址分配示意图;
图5为本申请的一个实施例中使用本申请方法得到的内存地址分配示意图;
图6为本申请提供的另一个方法实施例中步骤S530的子步骤流程图;
图7为本申请提供的另一个方法实施例中步骤S540的子步骤流程图;
图8为本申请提供的一个系统实施例的结构框图;
图9为本申请提供的另一个系统实施例的结构框图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其他实施例中也可以实现本申请。在其他情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所述描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其他特征、整体、步骤、操作、元素、组件和/或集合的存在或添加。
为使图面简洁,各图中只示意性地表示出了与发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。
还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
另外,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对照附图说明本申请的具体实施方式。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。
参考说明书附图1,本申请提供的一种基于贪婪算法的片上内存地址分配方法的一个实施例,包括如下步骤:
S100,接收神经网络模型计算过程中出现在片上内存中的全部张量。
S200,获取张量的相关信息,分别为:块数据信息、生命周期信息、运算时期信息。
具体的,本申请基于针对静态模型在NPU(神经网络处理器)上的部署问题,进行内存碎片分配。不同于动态模型在CPU/GPU集群上的部署问题,CPU/GPU集群并不是一个内存约束紧张的设备。本申请的NPU是一个内存约束紧张的设备,由于芯片大小、功耗限制,内存容量较小,本申请内存分配算法的主要目的是减少内存碎片以在保证不超过内存上限,同时尽可能优化性能,保证数据在片上实现地址复用。
我们引入了以下三种数据结构以实现对张量及其生命周期的抽象表示:
1、BlockInfo(块数据信息),用于记录张量信息的顶层抽象,结构中包括张量的id、形状、数据量大小、是否完成调度的标示、记录张量最后参与运算的时刻(last_epoch)、load信息、store信息,还包括一个LifeInfo的列表用于保存该张量每段生命周期信息和一个BlockEpochInfo的列表用于保存该张量参与计算的具体时期信息。
2、LifeInfo(生命周期信息),用于记录张量的每一段生命周期,结构中包括张量的id、形状、该生命周期的起点、终点、分配得到的地址、一个BlockEpochInfo的列表用于保存该生命周期中张量参与运算的具体时期信息,同时,在LifeInfo中还将维护地址复用信息,地址复用信息将在后文中介绍。LifeInfo的起点、终点代表其BlockEpochInfo列表中最小的epoch和最大的epoch,在LifeInfo的起点、终点之间,该张量将始终存在于片上。
3、BlockEpochInfo(运算时期信息)用于记录张量参与运算的具体时期信息,结构中包括计算时刻(epoch)、张量参与计算的方式(作为输入、输出或临时数据)以及该BlockEpochInfo所属的LifeInfo。
S300,将所述张量的所述块数据信息按照数据量从大到小的顺序存储至第一数据列表中,并对所述第一数据列表进行初始化处理。
具体的,初始化阶段,内存分配器从外部读入各张量信息,构建BlockInfo、LifeInfo、BlockEpochInfo等数据结构。同时利用输入的地址复用信息,构建地址复用关系。所有信息将被存储在BlockInfo的列表中。完成初始化后,BlockInfo列表将被输入到贪婪算法分配模块,进行内存地址分配。
S400,判断所述张量是否满足地址复用条件,构建所述张量的地址复用关系,标记满足所述地址复用条件的父张量与子张量,其中,子张量可以重复使用父张量的内存地址。
具体的,地址复用关系,也称子张量-父张量关系。对于存在地址复用条件的算子,用父张量表示被子张量复用地址的父张量,子张量表示复用父张量地址的子张量。如图2所示,图2为四种符合地址复用条件的算子中输入/输出张量的示意图。神经网络中存在的地址复用条件的算子主要包括以下四种情况。
1.激活算子(Activation),输出张量复用输入张量地址,输出张量为子张量,输入张量为父张量。
2.元素级操作算子(Elementwise),如add、mul算子,输出张量复用第二个输入张量地址,输出张量为子张量,第二个输入张量为父张量。
3.分裂算子(Split),所有输出张量复用输入张量地址,每个输出张量的偏移量单独计算,所有输出张量为子张量,输入张量为父张量。
4.聚合算子(Concat),所有输入张量复用输出张量地址,每个输入张量的偏移量单独计算,所有输入张量为子张量,输出张量为父张量。
更优的,张量的数据结构(LifeInfo)中的地址复用信息包括:该张量是否为子张量、其复用的父张量的id、该张量是否为父张量、复用其张量地址的子张量的id。
S500,根据所述第一数据列表中存储的张量顺序和所述块数据信息,借助贪婪算法和所述地址复用关系,依次对所述张量进行内存地址分配。
具体的,执行内存地址分配的方法基于贪婪算法的启发式算法,进行内存地址分配。贪婪算法通常用于在某个优化问题中,每次选择局部最优解,最终得到全局最优解。贪婪算法的基本思想是,在每一步上选择当前状态下最优的解决方案,而不考虑其对未来决策的影响。因此,贪婪算法通常具有高效、简单、易于实现等优点,适用于需要求解近似最优解的问题。本申请对于神经网络模型计算过程中所有出现在片上内存中的张量,按照数据量从大到小的顺序,为其选择最合适的地址,以减少内存碎片的产生;同时,在贪婪算法中结合了地址复用机制,在处理存在地址复用机会的算子时,该算子的输出张量能复用输入张量地址空间,从而为后续算子的地址分配提供更加充裕的空间。
本申请一种基于贪婪算法的片上内存地址分配方法的另一个实施例,如说明书附图3所示,在上述方法的一个实施例的基础上,所述的步骤S500中:借助贪婪算法和所述地址复用关系,依次对所述张量进行内存地址分配,包括如下步骤:
S510,确定数据量最大的至少一个目标张量。获取所述目标张量的生命周期信息。
S520,以生命周期的起始时期从小到大的顺序,判断所述目标张量的类型:父张量、子张量或普通张量。
S530,若所述目标张量为所述父张量,则将所述父张量生命周期的终止时期延长至其对应子张量的最长的生命周期的终止时期。查找是否存在满足所述父张量生命周期的内存碎片,若存在,则以最小的一个内存碎片的地址作为所述父张量的地址。若不存在,则将所述父张量存入同一生命周期下已分配内存的末尾地址。
S540,若所述目标张量为所述子张量,则查找所述子张量对应的父张量的生命周期,将所述子张量的地址存入同一生命周期下对应的父张量的地址。
S550,若所述目标张量为所述普通张量,则查找是否存在满足所述普通张量生命周期的内存碎片,若存在,则以最小的一个内存碎片的地址作为所述普通张量的地址。若不存在,则将所述普通张量存入同一生命周期下已分配内存的末尾地址。
具体的,参考说明书附图4,为现有技术中失败的内存地址分配示意图,其横坐标ADDR表示内存地址,其纵坐标EPOCH表示张量的运行周期。图中每个矩形框都代表一个张量,张量的长度代表该张量的数据量的大小,也就是占用内存地址的大小。张量的宽度代表该张量生命周期的时间,图4中失败的内存分配会导致张量不能完全存入指定的内存空间。而图5为使用本申请方法得到的内存地址分配示意图,在图5中,先对数据量大的张量进行分配,若出现数据量大小一致的多个张量,则按照张量的本次生命周期的起始时间的先后顺序进行分配。
更优的,在分配的过程中需要考虑张量是否存在地址复用关系。按照其地址复用关系分别执行步骤S530、S540、S550中的其中一项。
上述实施例的另一实施方式中,所述的步骤S530中:将所述父张量存入同一生命周期下已分配内存的末尾地址,之前还包括如下步骤:
S534,预判将所述父张量存入末尾地址后是否会导致内存溢出。
若是,则执行S536,解除所述父张量的地址复用关系,并将其生命周期恢复到延长之前。再执行S537,以普通张量的方式执行调度。
具体的,完整的父张量的处理方法如说明书附图6所示。若该张量生命周期为地址复用关系中的父张量,则将该张量生命周期的end延长至子张量生命周期的end,如果存在多个子张量,则按照生命周期最长的子张量来延长父张量的生命周期。延长父张量生命周期后,从起始地址开始,寻找能放下该张量生命周期的所有空隙,并将其找到的最小的空隙作为该张量的地址;若没有空隙满足条件,则将该张量生命周期放在末尾;若放在末尾会导致内存溢出,则将父张量的生命周期恢复到延长之前,并解除地址复用关系,再将该张量将按照普通张量的方式调度。
上述实施例的另一实施方式中,所述的步骤S540中:将所述子张量的地址存入同一生命周期下对应的父张量的地址,之前还包括如下步骤,如说明书附图7所示:
S542,判断所述父张量是否与其他子张量存在地址复用关系。
若是,则执行S543,计算所述子张量的地址偏移量。S544,预判所述子张量偏移后的地址是否与其他已完成地址分配的张量所在地址冲突。
若产生地址冲突,则执行S545,解除所述子张量地址复用关系,再执行S546,以普通张量的方式执行调度。
若不产生地址冲突,或所述父张量不与其他子张量存在地址复用关系,则执行S547,对所述子张量执行地址复用。
具体的,图7为完整的子张量的调度流程图。若该张量生命周期为地址复用关系中的子张量,则找到已经完成调度的父张量生命周期,令遍历到的生命周期的地址等于父张量张量生命周期的地址,以利用地址复用机制;此时如果父张量有多个子张量,则需要为每个子张量额外计算地址偏移量,如split(分裂算子)及concat(聚合算子);如果为子张量分配地址后,检查到与其他已完成地址分配的张量存在地址冲突,则放弃该张量地址复用,解除该张量存在的子张量-父张量地址复用关系。
更优的由于只有四种情况下,算子的输出张量与输入张量之间才会出现地址复用关系,即子张量-父张量地址复用关系。如图2所示的四种算子,其中,激活算子(Activation)、元素级操作算子(Elementwise)、分裂算子(Split)都是输出张量复用输入张量地址,其中输出张量(子张量)的数据量大小均是小于或等于输入张量(父张量)数据量的大小的。数据量大小相等的情况下,输出张量(子张量)的生命周期明显在对应的输入张量(父张量)之后。还有第四种情况,对于聚合算子(Concat),输入张量复用输出张量地址,但聚合算子同样满足输入张量(子张量)的数据量大小小于输出张量(父张量)数据量的大小。故推理可知。子张量的调度顺序一定是在其对应有复用关系的父张量的调度之后。
本申请一种基于贪婪算法的片上内存地址分配方法的另一个实施例,使用sub来表示地址复用关系中的子张量,使用base来表示地址复用关系中的父张量。
在初始化阶段,内存分配器从外部读入各张量信息,构建BlockInfo、LifeInfo、BlockEpochInfo等数据结构。同时利用输入的地址复用信息,构建地址复用关系。所有信息将被存储在BlockInfo的列表中。完成初始化后,BlockInfo列表将被输入到贪婪算法分配模块,进行内存地址分配。
贪婪算法内存分配步骤如下:
第一步,遍历所有张量,找到size最大的且未分配地址的张量;
第二步,对遍历到的张量,按照起点从小到大的顺序,遍历其全部生命周期;
第三步,对遍历到的生命周期:
1、若该张量生命周期为地址复用关系中的base,则将该张量生命周期的end延长至sub生命周期的end,如果存在多个sub,则按照生命周期最长的sub来延长base的生命周期。延长base生命周期后,从起始地址开始,寻找能放下该张量生命周期的所有空隙,并将其找到的最小的空隙作为该张量的地址;若没有空隙满足条件,则将该张量生命周期放在末尾;若放在末尾会导致内存溢出,则将base张量的生命周期恢复到延长之前,并解除地址复用关系,之后该张量将按照普通张量的方式调度。
2、若该张量生命周期为地址复用关系中的sub,则找到已经完成调度的base张量生命周期,令遍历到的生命周期的地址等于base张量生命周期的地址,以利用地址复用机制;此时如果base有多个sub,则需要为每个sub额外计算地址偏移量,如split算子(分裂算子)及concat算子(聚合算子);如果为sub分配地址后,检查到与其他已完成地址分配的张量存在地址冲突,则放弃该地址复用机会,解除该张量存在的sub-base地址复用机会。
3、若该张量生命周期不存在地址复用关系,为普通张量,则从起始地址开始,寻找能放下该张量生命周期的所有空隙,并将其找到的最小的空隙作为该张量的地址;若没有空隙满足条件,则将该张量生命周期放在末尾。
4、完成该张量生命周期的地址分配后,若该生命周期为该张量的最后一个生命周期,则将该张量标记为完成调度。
重复前三步直到遍历完所有张量。
基于相同的技术构思,本申请还公开了一种基于贪婪算法的片上内存地址分配系统,该系统可用于实现上述任意一种基于贪婪算法的片上内存地址分配方法,具体的,本申请的一种基于贪婪算法的片上内存地址分配系统实施例,如说明书附图8所示,包括:
张量接收模块10,用于接收神经网络模型计算过程中出现在片上内存中的全部张量。
信息获取模块20,用于获取张量的相关信息,分别为:块数据信息、生命周期信息、运算时期信息。
数据存储模块30,用于将所述张量的所述块数据信息按照数据量从大到小的顺序存储至第一数据列表中,并对所述第一数据列表进行初始化处理。
复用关系构建模块40,用于判断所述张量是否满足地址复用条件,构建所述张量的地址复用关系,标记满足所述地址复用条件的父张量与子张量,其中,子张量可以重复使用父张量的内存地址。
内存地址分配模块50,用于根据所述第一数据列表中存储的张量顺序和所述块数据信息,借助贪婪算法和所述地址复用关系,依次对所述张量进行内存地址分配。
本申请提供的一种基于贪婪算法的片上内存地址分配系统的另一实施例,如说明书附图9所示,在上述系统实施例的基础上,所述内存地址分配模块50,包括以下子模块:
目标确定子模块51,用于确定数据量最大的至少一个目标张量。获取所述目标张量的生命周期信息。
类型判断子模块52,用于以生命周期的起始时期从小到大的顺序,判断所述目标张量的类型:父张量、子张量或普通张量。
父张量分配子模块53,用于若所述目标张量为所述父张量,则将所述父张量生命周期的终止时期延长至其对应子张量的最长的生命周期的终止时期。查找是否存在满足所述父张量生命周期的内存碎片,若存在,则以最小的一个内存碎片的地址作为所述父张量的地址。若不存在,则将所述父张量存入同一生命周期下已分配内存的末尾地址。
子张量分配子模块54,用于若所述目标张量为所述子张量,则查找所述子张量对应的父张量的生命周期,将所述子张量的地址存入同一生命周期下对应的父张量的地址。
普通张量分配子模块55,用于若所述目标张量为所述普通张量,则查找是否存在满足所述普通张量生命周期的内存碎片,若存在,则以最小的一个内存碎片的地址作为所述普通张量的地址。若不存在,则将所述普通张量存入同一生命周期下已分配内存的末尾地址。
本实施例的另一实施方式中:所述父张量分配子模块53,还用于预判将所述父张量存入末尾地址后是否会导致内存溢出。若是,则解除所述父张量的地址复用关系,并将其生命周期恢复到延长之前。以便所述普通张量分配子模块55继续执行调度。
所述子张量分配子模块54,还用于判断所述父张量是否与其他子张量存在地址复用关系。若是,则计算所述子张量的地址偏移量。预判所述子张量偏移后的地址是否与其他已完成地址分配的张量所在地址冲突。若产生地址冲突,则解除所述子张量地址复用关系,以便所述普通张量分配子模块55继续执行调度。
本申请的一种基于贪婪算法的片上内存地址分配方法和系统具有相同的技术构思,二者的实施例的技术细节可相互适用,为减少重复,此次不再赘述。
本申请是参照根据本申请实施例的方法、设备(系统)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框,以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (8)
1.一种基于贪婪算法的片上内存地址分配方法,其特征在于,包括如下步骤:
接收神经网络模型计算过程中出现在片上内存中的全部张量;
获取张量的相关信息,分别为:块数据信息、生命周期信息、运算时期信息;
将所述张量的所述块数据信息按照数据量从大到小的顺序存储至第一数据列表中,并对所述第一数据列表进行初始化处理;
判断所述张量是否满足地址复用条件,构建所述张量的地址复用关系,标记满足所述地址复用条件的父张量与子张量,其中,子张量可以重复使用父张量的内存地址;
根据所述第一数据列表中存储的张量顺序和所述块数据信息;确定数据量最大的至少一个目标张量;获取所述目标张量的生命周期信息;
以生命周期的起始时期从小到大的顺序,判断所述目标张量的类型:父张量、子张量或普通张量;
若所述目标张量为所述父张量,则将所述父张量生命周期的终止时期延长至其对应子张量的最长的生命周期的终止时期;查找是否存在满足所述父张量生命周期的内存碎片,若存在,则以最小的一个内存碎片的地址作为所述父张量的地址;若不存在,则将所述父张量存入同一生命周期下已分配内存的末尾地址;
若所述目标张量为所述子张量,则查找所述子张量对应的父张量的生命周期,将所述子张量的地址存入同一生命周期下对应的父张量的地址;
若所述目标张量为所述普通张量,则查找是否存在满足所述普通张量生命周期的内存碎片,若存在,则以最小的一个内存碎片的地址作为所述普通张量的地址;若不存在,则将所述普通张量存入同一生命周期下已分配内存的末尾地址。
2.如权利要求1所述的一种基于贪婪算法的片上内存地址分配方法,其特征在于,所述的将所述父张量存入同一生命周期下已分配内存的末尾地址,之前还包括如下步骤:
预判将所述父张量存入末尾地址后是否会导致内存溢出;
若是,则解除所述父张量的地址复用关系,并将其生命周期恢复到延长之前;再以普通张量的方式执行调度。
3.如权利要求1所述的一种基于贪婪算法的片上内存地址分配方法,其特征在于,所述的将所述子张量的地址存入同一生命周期下对应的父张量的地址,之前还包括如下步骤:
判断所述父张量是否与其他子张量存在地址复用关系;
若是,则计算所述子张量的地址偏移量;预判所述子张量偏移后的地址是否与其他已完成地址分配的张量所在地址冲突;
若产生地址冲突,则解除所述子张量地址复用关系,再以普通张量的方式执行调度;
若不产生地址冲突,或所述父张量不与其他子张量存在地址复用关系,则对所述子张量执行地址复用。
4.如权利要求1所述的一种基于贪婪算法的片上内存地址分配方法,其特征在于,还包括如下步骤:
完成所述目标张量对应生命周期的内存地址分配后,判断当前生命周期是否为所述目标张量的最后一个生命周期;
若是,则将所述目标张量标记为完成调度。
5.如权利要求1所述的一种基于贪婪算法的片上内存地址分配方法,其特征在于:
所述块数据信息包括:所述张量的编码、形状、数据量大小、是否完成调度的标示、参与运算时刻、负载信息、保持信息;
所述生命周期信息包括:所述张量的编码、形状、该生命周期的起始时期、终止时期、分配得到的地址;
所述运算时期信息包括:所述张量参与运算的时刻、参与运算的方式、运算时刻的生命周期。
6.如权利要求1所述的一种基于贪婪算法的片上内存地址分配方法,其特征在于,所述的判断所述张量是否满足地址复用条件,构建所述张量的地址复用关系,具体包括如下步骤:
判断所述张量是否为激活算子的输出张量或输入张量,若是,则激活算子的输出张量为子张量,激活算子的输入张量为父张量;
判断所述张量是否为元素级操作算子的输出张量或第二输入张量,若是,则所述元素级操作算子的输出张量为子张量,所述元素级操作算子的第二输入张量为父张量;
判断所述张量是否为分裂算子的输出张量或输入张量,若是,则分裂算子的输出张量为子张量,分裂算子的输入张量为父张量;
判断所述张量是否为聚合算子的输出张量或输入张量,若是,则聚合算子的输入张量为子张量,聚合算子的输出张量为父张量。
7.一种基于贪婪算法的片上内存地址分配系统,其特征在于,包括:
张量接收模块,用于接收神经网络模型计算过程中出现在片上内存中的全部张量;
信息获取模块,用于获取张量的相关信息,分别为:块数据信息、生命周期信息、运算时期信息;
数据存储模块,用于将所述张量的所述块数据信息按照数据量从大到小的顺序存储至第一数据列表中,并对所述第一数据列表进行初始化处理;
复用关系构建模块,用于判断所述张量是否满足地址复用条件,构建所述张量的地址复用关系,标记满足所述地址复用条件的父张量与子张量,其中,子张量可以重复使用父张量的内存地址;
内存地址分配模块,用于根据所述第一数据列表中存储的张量顺序和所述块数据信息,借助贪婪算法和所述地址复用关系,依次对所述张量进行内存地址分配;
所述内存地址分配模块,包括以下子模块:
目标确定子模块,用于确定数据量最大的至少一个目标张量;获取所述目标张量的生命周期信息;
类型判断子模块,用于以生命周期的起始时期从小到大的顺序,判断所述目标张量的类型:父张量、子张量或普通张量;
父张量分配子模块,用于若所述目标张量为所述父张量,则将所述父张量生命周期的终止时期延长至其对应子张量的最长的生命周期的终止时期;查找是否存在满足所述父张量生命周期的内存碎片,若存在,则以最小的一个内存碎片的地址作为所述父张量的地址;若不存在,则将所述父张量存入同一生命周期下已分配内存的末尾地址;
子张量分配子模块,用于若所述目标张量为所述子张量,则查找所述子张量对应的父张量的生命周期,将所述子张量的地址存入同一生命周期下对应的父张量的地址;
普通张量分配子模块,用于若所述目标张量为所述普通张量,则查找是否存在满足所述普通张量生命周期的内存碎片,若存在,则以最小的一个内存碎片的地址作为所述普通张量的地址;若不存在,则将所述普通张量存入同一生命周期下已分配内存的末尾地址。
8.如权利要求7所述的一种基于贪婪算法的片上内存地址分配系统,其特征在于:
所述父张量分配子模块,还用于预判将所述父张量存入末尾地址后是否会导致内存溢出;若是,则解除所述父张量的地址复用关系,并将其生命周期恢复到延长之前;以便所述普通张量分配子模块继续执行调度;
所述子张量分配子模块,还用于判断所述父张量是否与其他子张量存在地址复用关系;若是,则计算所述子张量的地址偏移量;预判所述子张量偏移后的地址是否与其他已完成地址分配的张量所在地址冲突;若产生地址冲突,则解除所述子张量地址复用关系,以便所述普通张量分配子模块继续执行调度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311345085.2A CN117093509B (zh) | 2023-10-18 | 2023-10-18 | 一种基于贪婪算法的片上内存地址分配方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311345085.2A CN117093509B (zh) | 2023-10-18 | 2023-10-18 | 一种基于贪婪算法的片上内存地址分配方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117093509A CN117093509A (zh) | 2023-11-21 |
CN117093509B true CN117093509B (zh) | 2024-01-26 |
Family
ID=88773728
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311345085.2A Active CN117093509B (zh) | 2023-10-18 | 2023-10-18 | 一种基于贪婪算法的片上内存地址分配方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117093509B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117540071B (zh) * | 2024-01-09 | 2024-04-02 | 南京华芯科晟技术有限公司 | 一种针对查找引擎的属性表项的配置方法和装置 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112199190A (zh) * | 2020-07-31 | 2021-01-08 | 厦门星宸科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
CN114186687A (zh) * | 2022-02-17 | 2022-03-15 | 之江实验室 | 一种面向神经网络模型计算的中间表示方法和装置 |
CN115269179A (zh) * | 2022-07-15 | 2022-11-01 | 浙江大华技术股份有限公司 | 一种静态内存分配方法、装置、设备及介质 |
CN115269204A (zh) * | 2022-09-27 | 2022-11-01 | 之江实验室 | 一种用于神经网络编译的内存优化方法及装置 |
CN116302461A (zh) * | 2022-08-05 | 2023-06-23 | 阿里巴巴(中国)有限公司 | 深度学习内存分配优化方法和系统 |
CN116360961A (zh) * | 2021-12-24 | 2023-06-30 | 无锡灵汐类脑科技有限公司 | 基于多线程的内存分配方法及装置 |
CN116361205A (zh) * | 2023-04-07 | 2023-06-30 | 昆仑芯(北京)科技有限公司 | 数据处理装置、确定张量存储地址的方法、设备和介质 |
CN116360963A (zh) * | 2021-12-24 | 2023-06-30 | 无锡灵汐类脑科技有限公司 | 内存分配方法及装置 |
CN116360960A (zh) * | 2021-12-24 | 2023-06-30 | 无锡灵汐类脑科技有限公司 | 基于众核芯片的内存分配方法和内存分配装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10175980B2 (en) * | 2016-10-27 | 2019-01-08 | Google Llc | Neural network compute tile |
-
2023
- 2023-10-18 CN CN202311345085.2A patent/CN117093509B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112199190A (zh) * | 2020-07-31 | 2021-01-08 | 厦门星宸科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
CN116360961A (zh) * | 2021-12-24 | 2023-06-30 | 无锡灵汐类脑科技有限公司 | 基于多线程的内存分配方法及装置 |
CN116360963A (zh) * | 2021-12-24 | 2023-06-30 | 无锡灵汐类脑科技有限公司 | 内存分配方法及装置 |
CN116360960A (zh) * | 2021-12-24 | 2023-06-30 | 无锡灵汐类脑科技有限公司 | 基于众核芯片的内存分配方法和内存分配装置 |
CN114186687A (zh) * | 2022-02-17 | 2022-03-15 | 之江实验室 | 一种面向神经网络模型计算的中间表示方法和装置 |
CN115269179A (zh) * | 2022-07-15 | 2022-11-01 | 浙江大华技术股份有限公司 | 一种静态内存分配方法、装置、设备及介质 |
CN116302461A (zh) * | 2022-08-05 | 2023-06-23 | 阿里巴巴(中国)有限公司 | 深度学习内存分配优化方法和系统 |
CN115269204A (zh) * | 2022-09-27 | 2022-11-01 | 之江实验室 | 一种用于神经网络编译的内存优化方法及装置 |
CN116361205A (zh) * | 2023-04-07 | 2023-06-30 | 昆仑芯(北京)科技有限公司 | 数据处理装置、确定张量存储地址的方法、设备和介质 |
Non-Patent Citations (1)
Title |
---|
基于位置聚类和张量分解的Web服务推荐算法;唐妮等;计算机工程与应用(第15期);第65-72页 * |
Also Published As
Publication number | Publication date |
---|---|
CN117093509A (zh) | 2023-11-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN117093509B (zh) | 一种基于贪婪算法的片上内存地址分配方法和系统 | |
US8606991B2 (en) | Method and system for refreshing dynamic random access memory | |
KR101072864B1 (ko) | 에너지 절약형 멀티 코어 프로세서 | |
CN110389816B (zh) | 用于资源调度的方法、装置以及计算机可读介质 | |
US20210191765A1 (en) | Method for static scheduling of artificial neural networks for a processor | |
CN102841674B (zh) | 基于新型存储器的嵌入式系统及其进程的休眠与唤醒方法 | |
CN104714785A (zh) | 任务调度装置、方法及并行处理数据的设备 | |
CN108228493B (zh) | 闪存接口控制器及操作命令处理方法 | |
CN111861412B (zh) | 面向完成时间优化的科学工作流调度方法及系统 | |
CN114356578A (zh) | 自然语言处理模型的并行计算方法、装置、设备及介质 | |
WO2016138785A1 (zh) | 一种运行进程的方法及装置 | |
CN109683983B (zh) | 一种镜像文件的生成及加载方法、设备 | |
CN112256441B (zh) | 神经网络推理的内存分配方法及装置 | |
CN112463340A (zh) | 基于tensorflow的多任务弹性调度方法及系统 | |
CN102542525B (zh) | 一种信息处理设备以及信息处理方法 | |
CN108647782B (zh) | 一种降低神经网络芯片中eDRAM刷新能耗的方法及系统 | |
CN107832154B (zh) | 一种多进程处理方法、处理装置及应用 | |
CN109819674A (zh) | 计算机存储介质、嵌入式调度方法及系统 | |
CN115496373A (zh) | 应用于敏捷管理平台的任务分配方法及装置 | |
CN116541160A (zh) | 函数部署方法、装置、服务器及云计算平台 | |
US11429299B2 (en) | System and method for managing conversion of low-locality data into high-locality data | |
JP2006099579A (ja) | 情報処理装置及び情報処理方法 | |
CN112148203B (zh) | 存储器管理方法、装置、电子设备及存储介质 | |
CN113688064A (zh) | 一种在存储器中为数据分配存储地址的方法和设备 | |
CN106940682B (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 |