CN111488221A - 静态网络中的内存空间预配系统及其方法 - Google Patents
静态网络中的内存空间预配系统及其方法 Download PDFInfo
- Publication number
- CN111488221A CN111488221A CN202010600014.2A CN202010600014A CN111488221A CN 111488221 A CN111488221 A CN 111488221A CN 202010600014 A CN202010600014 A CN 202010600014A CN 111488221 A CN111488221 A CN 111488221A
- Authority
- CN
- China
- Prior art keywords
- memory
- allocated
- logic output
- computation
- life cycle
- 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.)
- Granted
Links
- 230000015654 memory Effects 0.000 title claims abstract description 642
- 230000003068 static effect Effects 0.000 title claims abstract description 75
- 238000000034 method Methods 0.000 title claims description 42
- 239000000872 buffer Substances 0.000 claims description 63
- 238000004364 calculation method Methods 0.000 claims description 6
- 238000012545 processing Methods 0.000 description 28
- 238000010586 diagram Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 8
- 238000011144 upstream manufacturing Methods 0.000 description 8
- 238000013528 artificial neural network Methods 0.000 description 5
- 238000000354 decomposition reaction Methods 0.000 description 5
- 238000000638 solvent extraction Methods 0.000 description 5
- 238000003860 storage Methods 0.000 description 5
- 238000013135 deep learning Methods 0.000 description 3
- 238000009795 derivation Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000002035 prolonged effect Effects 0.000 description 3
- 238000012549 training Methods 0.000 description 3
- 230000007717 exclusion Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 210000002569 neuron Anatomy 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000011065 in-situ storage Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000005215 recombination Methods 0.000 description 1
- 230000006798 recombination Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
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/5083—Techniques for rebalancing the load in a distributed system
-
- 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
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 Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种静态网络中的内存空间预配系统,包括:任务标记组件,根据部署到同一计算设备中的多个任务的执行顺序,为彼此串行的多个任务赋予同组标记;以及内存分配组件,为具有同组标记的多个任务中每个任务预先分配处于同一计算设备中的内存单元中的同一内存块,并在该内存块中为每个任务对应计算图中的每个操作节点的逻辑输出缓存分配专门的内存。
Description
技术领域
本公开涉及一种内存分配技术,更具体地说,本公开涉及一种内存空间预分配系统及其方法。
背景技术
本公开的申请人提出的静态分布式深度学习系统已经越来越受到深度学习领域的关注。
静态分布式学习系统从业务处理的全局出发,结合静态分布式系统的整体计算资源以及各个计算资源之间的拓扑关系,对所要处理的数据处理任务静态部署到整个数据处理网络上,由众多执行体静态组成业务处理网络,形成彼此关联的数据处理路径。执行体与执行体之间基于在网络中的上下游关系形成数据生产和消费关系,从而对输入数据进行流水化处理。尤其是,执行体之间靠消息(message)来协调进度,一个执行体会收到上游生产者和下游消费者的消息,当满足触发条件(有限状态自动机控制)时,执行体会发射一条指令给协处理器去执行,执行完毕之后,该执行体会给下游消费者发消息通知它有新的数据可以消费。通过执行体与相邻执行体之间的消息通讯方式来是实现彼此从数据生产和消费关系,由此消除了对数据出的实时的中心调度需求,实现了数据处理的去中心化。
然而,在静态布置系统下,为了实现流式数据处理,用于执行单元(例如执行体)的内存资源无法动态分配,而是需要预先为所有静态布置的执行单元预先分配内存资源,即为其内存。当执行单元执行时,直接从其上游执行体的输出数据缓存(即输出内存)中读取所需的数据,并将所产生的数据输出到其自身的输出数据缓存中。如何在静态分布式环境下合理地为各个执行单元预先分配内存资源,以便在内存资源量有限的情况下,保证数据处理时间效率的前提下提高内存使用效率成为一个所需面对的难题。为此,本申请发明人提出向中国专利局提出了一项申请号“2020100635344”名称为“内存资源原地共享决策系统及其方法”( 公布号为CN 111158919A)的专利申请,该申请通过引用方式全部合并在本申请中。该专利申请虽然解决了一定范围内上下游执行单元之间的内存的原地共享,但是其仅仅给予上下游执行体的数据共享来实现小范围的内存共享,一定程度上解决了内存资源的利用效率,难以对内存资源的使用效率带来实质性提高。为此,人们期望提供一种能够在静态流式数据处理架构网络中更高效实现内存空间共享的技术,能够提升内存资源的利用率又能够使得内存共享不影响系统整体数据处理效率。
发明内容
本发明的目的是解决至少上述问题,具体而言,本公开提供一种静态网络中的内存空间预配系统,包括:任务标记组件,根据部署到同一计算设备中的多个任务的执行顺序,为彼此串行的多个任务赋予同组标记;以及内存分配组件,为具有同组标记的多个任务中每个任务预先分配处于同一计算设备中的内存单元中的同一内存块,并在该内存块中为每个任务对应计算图中的每个操作节点的逻辑输出缓存分配专门的内存。
根据本公开的静态网络中的内存空间预配系统,还包括:计算子图划分组件,基于每个任务对应的计算图,划分出多个计算子图,每个计算子图包含一个源操作节点和一个汇操作节点以及在源操作节点和汇操作节点之间的其他操作节点,所述计算子图在所述源操作节点一旦满足执行条件的情况下,该计算子图的其他操作节点能与其他计算子图无关联地满足执行条件;以及生命周期采集组件,基于所述多个任务的计算图的每个操作节点所属的所有拓扑路径,采集每个操作节点的逻辑输出缓存的从将被写入数据开始到该数据可以被覆写为止的生命周期;其中所述内存分配组件在所述计算子图所属的计算图对应的内存块中为所述计算子图分配一个内存子块,并在所述内存子块内逐一为所述计算子图中操作节点的逻辑输出缓存在该操作节点的逻辑输出缓存的生命周期内处于空闲状态的内存空间中预分配内存。
根据本公开的静态网络中的内存空间预配系统,其中所述内存分配组件,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在所述计算子图的内存子块的处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配系统,其中所述内存分配组件在所述计算子图的内存子块中按照计算子图中的所有操作节点的逻辑输出缓存的尺寸从大到小的顺序,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配系统,其中所述内存分配组件在所述计算子图的内存子块中按照计算子图中的所有操作节点的逻辑输出缓存的生命周期的时序,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配系统,其中所述内存分配组件在遍历到所述内存子块中的处于空闲状态且其尺寸小于待分配内存的逻辑输出缓存的第一内存空间时,如果两者尺寸之差值与所述待分配内存的逻辑输出缓存的尺寸之间的比值小于预定比值时,则将所述第一内存空间地址之后与待分配内存的逻辑输出缓存的生命周期重合的所有已经预分配的内存在大小不变的情况下起始地址增加所述差值,并将尺寸增大后的第一内存空间预先分配给所述待分配内存的逻辑输出缓存。
根据本公开的静态网络中的内存空间预配系统,其中所述内存分配组件在多个生命周期不重合的待分配内存的逻辑输出缓存需要连续分配到一段连续内存空间时,优先为所述多个待分配内存的逻辑输出缓存中的尺寸最大的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配系统,其中所述内存分配组件在多个生命周期不重合的待分配内存的逻辑输出缓存需要连续分配到一段连续内存空间时,优先为所述多个待分配内存的逻辑输出缓存中生命周期结束时间最晚的逻辑输出缓存预分配内存。
根据本公开的另一个方面,还提供了一种静态网络中的内存空间预配方法,包括:任务部署步骤,获取用户所要待处理的多个任务,并将多个任务部署到静态网络中的各个计算设备中;任务标记步骤,根据部署到同一计算设备中的多个任务的执行顺序,为彼此串行的多个任务赋予同组标记;以及内存分配步骤,为具有同组标记的多个任务中的每个任务预先分配处于同一计算设备中的内存单元中的同一内存块,并在该内存块中为每个任务对应计算图中的每个操作节点的逻辑输出缓存分配专门的内存。
根据本公开的静态网络中的内存空间预配方法,还包括:计算子图划分组件,基于每个任务对应的计算图,划分出多个计算子图,每个计算子图包含一个源操作节点和一个汇操作节点以及在源操作节点和汇操作节点之间的其他操作节点,所述计算子图在所述源操作节点一旦满足执行条件的情况下,该计算子图的其他操作节点能与其他计算子图无关联地满足执行条件;以及生命周期采集步骤,基于所述多个任务的计算图的每个操作节点所属的所有拓扑路径,采集每个操作节点的逻辑输出缓存的从将被写入数据开始到该数据可以被覆写为止的生命周期;以及所述内存分配步骤还在所述计算子图所属的计算图对应的内存块中为所述计算子图分配一个内存子块,并在所述内存子块内逐一为所述计算子图中操作节点的逻辑输出缓存在该操作节点的逻辑输出缓存的生命周期内处于空闲状态的内存空间中预分配内存。
根据本公开的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在所述计算子图的内存子块的处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在所述计算子图的内存子块中按照计算子图中的所有操作节点的逻辑输出缓存的尺寸从大到小的顺序,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在所述计算子图的内存子块中按照计算子图中的所有操作节点的逻辑输出缓存的生命周期的时序,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在遍历到所述内存子块中的处于空闲状态且其尺寸小于待分配内存的逻辑输出缓存的第一内存空间时,如果两者尺寸之差值与所述待分配内存的逻辑输出缓存的尺寸之间的比值小于预定比值时,则将所述第一内存空间地址之后与待分配内存的逻辑输出缓存的生命周期重合的所有已经预分配的内存在大小不变的情况下起始地址增加所述差值,并将尺寸增大后的第一内存空间预先分配给所述待分配内存的逻辑输出缓存。
根据本公开的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在多个生命周期不重合的待分配内存的逻辑输出缓存需要连续分配到一段连续内存空间时,优先为所述多个待分配内存的逻辑输出缓存中的尺寸最大的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在多个生命周期不重合的待分配内存的逻辑输出缓存需要连续分配到一段连续内存空间时,优先为所述多个待分配内存的逻辑输出缓存中生命周期结束时间最晚的逻辑输出缓存预分配内存。
根据本公开的另一个方面,还提供了本公开提供一种静态网络中的内存空间预配系统,包括:计算子图划分组件,将每个任务对应的计算图划分成多个计算子图,每个计算子图包含一个源操作节点和一个汇操作节点以及在源操作节点和汇操作节点之间的其他操作节点,所述计算子图在所述源操作节点一旦满足执行条件的情况下,该计算子图的其他操作节点能与其他计算子图无关联地满足执行条件;以及生命周期采集组件,基于所述任务的计算图的每个操作节点所属的所有拓扑路径,采集每个操作节点的逻辑输出缓存的从将被写入数据开始到该数据可以被覆写为止的生命周期;以及内存分配组件,为所述计算子图分配一个内存子块,并在所述内存子块内逐一为所述计算子图中操作节点的逻辑输出缓存在该操作节点的逻辑输出缓存的生命周期内处于空闲状态的内存空间中预分配内存,以及将为所有计算子图所分配的内存子块集合为一个内存块预分配给所有计算子图所属的计算图。
根据本公开的静态网络中的内存空间预配系统,还包括:任务标记组件,根据部署到同一计算设备中的多个任务的执行顺序,为彼此串行的多个任务赋予同组标记;其中所述内存分配组件为具有同组标记的多个任务中每个任务预先分配处于同一计算设备中的内存单元中的同一内存块,并在该内存块中为每个任务对应计算图中的每个操作节点的逻辑输出缓存分配专门的内存。
根据本公开的静态网络中的内存空间预配系统,其中所述内存分配组件,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在所述计算子图的内存子块的处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配系统,其中所述内存分配组件在所述计算子图的内存子块中按照计算子图中的所有操作节点的逻辑输出缓存的尺寸从大到小的顺序,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配系统,其中所述内存分配组件在所述计算子图的内存子块中按照计算子图中的所有操作节点的逻辑输出缓存的生命周期的时序,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配系统,其中所述内存分配组件在遍历到所述内存子块中的处于空闲状态且其尺寸小于待分配内存的逻辑输出缓存的第一内存空间时,如果两者尺寸之差值与所述待分配内存的逻辑输出缓存的尺寸之间的比值小于预定比值时,则将所述第一内存空间地址之后与待分配内存的逻辑输出缓存的生命周期重合的所有已经预分配的内存在大小不变的情况下起始地址增加所述差值,并将尺寸增大后的第一内存空间预先分配给所述待分配内存的逻辑输出缓存。
根据本公开的静态网络中的内存空间预配系统,其中所述内存分配组件在多个生命周期不重合的待分配内存的逻辑输出缓存需要连续分配到一段连续内存空间时,优先为所述多个待分配内存的逻辑输出缓存中的尺寸最大的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配系统,其中所述内存分配组件在多个生命周期不重合的待分配内存的逻辑输出缓存需要连续分配到一段连续内存空间时,优先为所述多个待分配内存的逻辑输出缓存中生命周期结束时间最晚的逻辑输出缓存预分配内存。
根据本公开的另一个方面,还提供了一种静态网络中的内存空间预配方法,包括:计算子图划分组件,将每个任务对应的计算图,划分成多个计算子图,每个计算子图包含一个源操作节点和一个汇操作节点以及在源操作节点和汇操作节点之间的其他操作节点,所述计算子图在所述源操作节点一旦满足执行条件的情况下,该计算子图的其他操作节点能与其他计算子图无关联地满足执行条件;以及生命周期采集步骤,基于所述多个任务的计算图的每个操作节点所属的所有拓扑路径,采集每个操作节点的逻辑输出缓存的从将被写入数据开始到该数据可以被覆写为止的生命周期;以及内存分配步骤,为所述计算子图分配一个内存子块,并在所述内存子块内逐一为所述计算子图中操作节点的逻辑输出缓存在该操作节点的逻辑输出缓存的生命周期内处于空闲状态的内存空间中预分配内存,以及将为所有计算子图所分配的内存子块集合为一个内存块预分配给所有计算子图所属的计算图。
根据本公开的静态网络中的内存空间预配方法,还包括:任务部署步骤,获取用户所要待处理的多个任务,并将多个任务部署到静态网络中的各个计算设备中;任务标记步骤,根据部署到同一计算设备中的多个任务的执行顺序,为彼此串行的多个任务赋予同组标记;以及内存分配步骤,为具有同组标记的多个任务中的每个任务预先分配处于同一计算设备中的内存单元中的同一内存块,并在该内存块中为每个任务对应计算图中的每个操作节点的逻辑输出缓存分配专门的内存。
根据本公开的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在所述计算子图的内存子块的处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在所述计算子图的内存子块中按照计算子图中的所有操作节点的逻辑输出缓存的尺寸从大到小的顺序,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在所述计算子图的内存子块中按照计算子图中的所有操作节点的逻辑输出缓存的生命周期的时序,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在遍历到所述内存子块中的处于空闲状态且其尺寸小于待分配内存的逻辑输出缓存的第一内存空间时,如果两者尺寸之差值与所述待分配内存的逻辑输出缓存的尺寸之间的比值小于预定比值时,则将所述第一内存空间地址之后与待分配内存的逻辑输出缓存的生命周期重合的所有已经预分配的内存在大小不变的情况下起始地址增加所述差值,并将尺寸增大后的第一内存空间预先分配给所述待分配内存的逻辑输出缓存。
根据本公开的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在多个生命周期不重合的待分配内存的逻辑输出缓存需要连续分配到一段连续内存空间时,优先为所述多个待分配内存的逻辑输出缓存中的尺寸最大的逻辑输出缓存预分配内存。
根据本公开的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在多个生命周期不重合的待分配内存的逻辑输出缓存需要连续分配到一段连续内存空间时,优先为所述多个待分配内存的逻辑输出缓存中生命周期结束时间最晚的逻辑输出缓存预分配内存。
通过本公开的静态网络中的内存空间预配系统和方法,由于采用流式架构的静态数据处理网络中能够预先获知任务拓扑图的对应计算图中的每个操作节点的生命周期以及所需数据的尺寸大小,因此一方面能够通过位于同一计算设备上不同任务执行的时序,对串行的任务所需的内存进行重复预先分配大块的内存块,另一方面,由于每个任务的计算图的计算子图内部通过每个操作节点的生命周期及其逻辑输出缓存的尺寸,对彼此生命周期不产生冲突的逻辑输出缓存所需要的内存进行重复预先配置。在内存容量受限的计算设备中,通过在两级上对部分内存进行重复预先配置,所需要的内存容量相对于逐一按序配置所有操作节点的逻辑输出缓存所需要的总的内存容量而言,得到极大的缩小,极大地减轻了静态流式数据处理网络对计算设备内存资源的极大需求,从而能够降低设备成本。
本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。
附图说明
图1所示的是根据本公开的静态网络中的内存空间预配系统的原理结构示意图。
图2所示的是根据本公开的一个计算子图的实例的示意图。
图3所示的是一个局部有向无环图的实例的示意图。
图4所示的是一个计算子图实例的每个操作节点的逻辑输出缓存的生命周期关系示意图。
图5所示的是根据本公开的内存预分配系统的生命周期采集组件针对一个计算子图采集生命周期后获得的操作节点的逻辑输出缓存的生命周期的实例关系示意图。
图6所示的是根据本公开的内存空间预配系统在内存子块内进行内存复用分配时的示意图。
图7所示的是根据本公开的内存空间预配系统在内存子块内进行内存复用分配的另一个实施例的示意图。
具体实施方式
下面结合实施例和附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。此外,在提到“第一”时,并不意味存在“第二”,有时候采用第一或第二仅仅是为了简化表述。例如,在不脱离本公开范围的情况下,在下文中,两个可能设备之一可以被称为第一计算设备也可以被称为第一计算设备。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
为了使本领域技术人员更好地理解本公开,下面结合附图和具体实施方式对本公开作进一步详细说明。
图1所示的是根据本公开的静态网络中的内存空间预配系统的原理结构示意图。如图1所示,根据本公开的静态网络中的内存空间预配系统用于为部署在静态网络中的各个操作节点预先配置所属计算设备上的内存空间。如图1所示,为了简化显示,在用于深度学习的静态网络中,计算设备CPU00和CPU01分别与 CPU00相连的GPU00、GPU01以及GPU2和与CPU01相连的GPU10、GPU11以及GPU12构成。尽管此处仅仅显示了两个CPU和六个GPU,但是静态网络可以包括更多的CPU,并且与每个CPU相连的GPU也可以更多或更少,这可基于实际需要来定。尽管这里仅仅采用GPU对本公开进行了描述,但是本公开也可以适于采用其他协处理器,例如加速器APU、BPU、DPU等。根据本公开的内存空间预配系统400部署在图1所示的静态网络中,是静态网络的一部分。尽管图1显示的数据处理系统的构成部分单独显示在各个CPU和GPU之外,这是为了突出显示和方便描述进行的处理。实际上该内存空间预配系统的构成部分都分布在一个CPU或一个专门的服务器之中。
如图1所示,在用户输入所需要处理的作业任务之后,静态网络中部署的静态流式处理系统的作业描述组件100对作业进行描述,随后任务拓扑图生成组件200将所需完成的作业分解为一系列由静态网络来执行的任务,并在进行作业分解的同时,基于所分解的任务之间的固有关系,生成任务关系拓扑图。为了对同类型的数据连续进行处理,需要将作业分解成为适合CPU或GPU的运算单元执行运算或其他操作的简单任务。具体而言,就是将作业分解成为彼此相关联的任务。所述任务拓扑图生成组件200对作业的分解包括对数据块的分解以及对数据处理模型的分解,即对作业的分解是设置对将要处理的作业数据的分解方式。具体而言,按照对作业任务要求的描述,对作业按照将要处理的过程,进行分层分解成多层神经网络结构。一个作业(WORK)被分解成一系列互相依赖的任务(JOB),这种依赖关系通常用有向无环图(Directed acyclic graph, DAG)来描述。任务拓扑图的每个任务包含多个逻辑节点,每个逻辑节点之间的连接线表示一个数据依赖关系(生产者和消费者关系)。在此不具体描述作业分解后任务关系图的情形。
在逐步分解作业的同时,任务拓扑图生成组件200也逐层形成任务关系拓扑图。由于作业分解形成的各个任务之间的存在固有的逻辑关系,因此,随着作业被分解为不同的任务,在不同的任务层上,任务拓扑图生成组件200也随之形成任务关系拓扑图,这些任务关系拓扑图形成了所分解的任务之间的神经网络。在作业复杂的情况下,任务关系拓扑图包含有多层,因此也形成了多层任务神经网络。每层神经网络既包含对应具体任务的神经元节点,也包含各个神经元之间关系,而且既包含针对未来将被用于分片数据的处理的任务的数据并行网络,也包含将被用于分片模型的任务的模型并行网络。可选择地,这些神经网络中也可仅仅包括数据并行网络。是否同时包含数据并行网络与模型并行网络,可以根据实际需要进行配置。每个任务都会有自己的任务标签,以便区别不同任务。每个逻辑节点也都包含其所述的任务的标签以及其自身的节点标签。
为了使得数据通过流式方式在静态网络中以去中心化的方式执行,需要预先为每个逻辑节点指定具体的运算单元以及运算单元所需的静态内存。也就是,为此,计算图生成组件300基于任务关系拓扑图生成用于完成所述作业的计算图。每个计算图需要指定具体的运算单元以及所需的内存。这些运算单元与所需的内存都固定部署在同一个计算设备上,以便实现数据的流式处理。如前所述,由于每个计算设备自身的内存资源是有限的,而在静态网络中,运算单元的内存又是内存,不是动态申请的,为了使得内存资源得到最大利用,因此需要考虑到计算图中各个计算逻辑节点之间甚至各个任务之间的内存重复利用。为此,根据本公开的内存预配系统400中的任务标记组件420根据任务拓扑图生成组件200所生成的任务拓扑图中部署位置和各个任务之间的时序关系,对各个任务进行标记。具体而言,对有部署到同一计算设备中的多个任务的执行顺序,为彼此串行的多个任务赋予同组标记。例如在同一计算设备上的训练任务和推导任务之间通常是串行的,为此,任务标记组件420将这些任务标记为同组任务。这意味着,当训练任务在执行时,推导任务不会执行,同样,推导任务执行时,训练任务也不会执行。为此,用于执行这两种彼此串行任务的整块内存可以分时复用。具体而言,如果任务A被执行时所需的静态内存空间,在任务B执行时,由于任务A不会使用该块内存空间,因此,任务B可以使用该块内存空间。为此,内存分配组件430为具有同组标记的多个任务中每个任务预先分配处于同一计算设备中的内存单元中的同一内存块。该同一内存块的尺寸以能够满足所有具有同组标记的任务中所需内存块的大小为上限,这样所有任务所需的内存尺寸都能够得到满足。所述内存块的大小可以是构成该任务的所有操作节点的逻辑输出数据缓存的尺寸的总和,也可以是构成该任务的所有操作节点的逻辑输出数据缓存的预分配内存空间进行复用决策后所需的最大尺寸内存块。在将同一内存块的同一地址和同一偏移量预定给具有同组标记的每个任务之后,在该内存块中为每个任务对应计算图中的每个操作节点的逻辑输出缓存分配专门的内存。
为了进一步节省每一个任务所需的内存空间的,可以在任务的内存块内的各个内存之间进行进一步的内存空间复用。为此,为了在一定范围内获得更确切的各个计算图中操作节点之间确切关系,如图1所示,本公开的系统采用计算子图划分组件450基于每个任务对应的计算图,划分出多个计算子图,每个计算子图包含一个源操作节点和一个汇操作节点以及在源操作节点和汇操作节点之间的其他操作节点,所述计算子图在所述源操作节点一旦满足执行条件的情况下,该计算子图的其他操作节点能与其他计算子图无关联地满足执行条件。图2所示的是根据本公开的一个计算子图的实例的示意图。如图2所示,每个计算子图都包含一个源操作节点和汇操作节点。在计算子图中,当源操作节点(例如图2中的节点1)的操作条件得到满足时,整个计算子图的所有操作节点将不需要该计算子图之外任何其他的操作节点的输出的约束,因此,整个计算子图将因源操作节点的执行而流水一样地执行完整个计算子图所承担的操作任务。鉴于计算子图的操作犹如链条一样,因此本公开也将该计算子图对应的计算操作任务称为“任务链”。计算子图划分组件450为了在随后内存分配组件430对计算子图中的每个操作节点的内存进行确定的复用分配,在进行子图划分操作时,对从属与同一操作节点但是彼此之间没有任何其他关联的多个直接下游操作节点添加彼此之间的控制边,例如图2计算子图中的操作节点5和6之间的表达彼此之间的控制边的虚线箭头。尽管实际操作过程中,操作节点5和6之间并没有任何先后关系,但是为了更好和更多地实现内存空间的复用,使得操作节点5在操作节点6之前,反过来也可以。这种控制边的添加并不影响整个计算子图的操作时间。由于在子图划分过程中可能存在为彼此不相关的操作节点之间添加控制边的情形,因此,在计算子图划分组件450对初始计算图进行子图划分之后,需要将添加控制边的信息反馈给计算图生成单元,以便对所生成的计算图进行修正。在计算子图划分组件450对一个任务关系拓扑图进行子图划分之后,对每个计算子图赋予一个子图标签,从而每个计算子图中的所有操作节点除了具有任务标签、任务组别标签之外,还具有子图标签。
为了进一步在计算子图范围内实现内存空间的复用,需要获得计算子图内各个操作节点之间生命周期。根据本公开的内存预配系统400中生命周期采集组件440获取每个任务拓扑图中的操作节点所附的逻辑输出缓存的生命周期。生命周期采集组件440基于将要部署在多个计算设备上的计算图的每个操作节点所属的所有拓扑路径,采集每个操作节点的每个逻辑输出缓存的从被写入数据开始到该数据可以被覆写为止的生命周期。
通常每个操作节点会同时处于不同的数据处理路径中。图3所示的是一个局部有向无环图的实例的示意图。如图3所示,第一操作节点A处于多个数据处理路径中,例如路径P1、P2、P3等。第一操作节点A的在每条数据处理路径上都有很多下游操作节点,在路径P1中,其直接下游操作节点为A11。在路径P2中,操作节点A直接下游操作节点为A21以及A24。路径P3中,操作节点A的直接下游操作节点为A31。在没有其他因素影响的情况下,在路径P1中,第一操作节点A的逻辑输出缓存从生成数据开始到其下游操作节点A11使用完该数据并反馈消息到操作节点A的时间基本上等于下游A11执行操作的时间。类似地,在路径P2中,第一操作节点A的逻辑输出缓存从生成数据开始到其下游操作节点A24使用完该数据并反馈消息到操作节点A的时间则基本上等于下游操作节点A21以及、A22 、A23以及A24执行操作的时间总和。同样,在路径P3中,第一操作节点A的逻辑输出缓存从生成数据开始到其下游操作节点A31使用完该数据并反馈消息到操作节点A的时间基本上等于下游操作节点A31执行操作的时间。通常,每个操作节点的操作时间通常是基于其具体执行的操作是固定的,是一个经验值。一般下游数据处理路径中最后返回数据的操作节点距离所要消费的数据的生产操作节点越远,该数据所在的逻辑输出缓存的生命周期越长。因此,比较而言,对于第一操作节点A而言,其生命周期的长度由路径P2的中的最远执行体以及其中间执行体的总的操作时间来决定。通过上述方式,生命周期采集组件440遍历每个操作节点,通过获取每个操作节点的操作时间,计算每个操作节点的逻辑输出缓存的生命周期。生命周期采集组件440在遍历每个操作节点的同时,也就获取了每个操作节点的操作时间。每个操作节点操作时间长短不同,在有些操作节点比较长的情况下,由于背压机制导致其不能及时执行并通知其上游操作节点已经使用完上游操作节点所产生的数据,因此会增加上游操作节点的逻辑输出缓存的生命周期,也就阻塞了该操作节点或操作节点所在数据处理路径的数据处理速度。通过生命周期采集组件440获得每个操作节点的生命周期,可以获得处于同一计算设备或同一任务的关系拓扑图中任意两个操作节点之间是否存在生命周期的互斥,即两者的生命周期是否存在彼此重叠的情况。
可选择地,生命周期采集组件440无需在整个计算图中针对每个操作节点来采集其在整个计算图中的生命周期,可以仅仅在该操作节点所属的计算子图范围内的生命周期,获得该操作节点与同属同一计算子图内的其他操作节点的生命周期之间的关系。需要指出的,在本公开中,当提到操作节点的生命周期或操作节点的逻辑输出缓存的生命周期,都是指的是该操作节点向逻辑输出缓存写入数据开始到该写入的数据被使用完成为止的时间跨度。因此,在计算子图中,生命周期的起点时间为源操作节点的逻辑输出缓存的生命周期的起始时间。如果有节点的逻辑输出缓存是被子图外的其他节点所消费的,那么就会使得该逻辑输出缓存的生命周期延长到子图执行结束。
图4所示的是一个计算子图实例的每个操作节点的逻辑输出缓存的生命周期关系示意图。如图4所示,八个操作节点1-8所处的计算子图的位置关系如图2所示,对应的逻辑输出缓存的逻辑关系如图4所示。本公开仅仅为说明方便采用了图2、4以及5,在实际情况下,操作节点之间的计算子图关系依据实际情况各不相同。如图4所示,其中带有网格底纹的圆圈分别表示操作节点1-8,排列在操作节点下方的一列六边形竖条纹底纹代表各自的逻辑输出缓存。通过生命周期采集组件440对该计算子图的各个逻辑输出缓存进行生命周期采集后获知,逻辑输出缓存2、3、4是串行的,彼此的生命周期之间不存在重叠部分,而逻辑输出缓存1与3之间存在重叠。类似地,逻辑输出缓存5、7、8之间存在生命周期的重叠。因此,通过生命周期采集组件440对每个计算子图内的各个逻辑输出缓存的生命周期的采集,可以获得每个逻辑输出缓存与其他逻辑输出缓存之间的生命周期互斥关系。为此,内存分配组件430在分配给计算子图的内存子块内,针对任意待分配内存的逻辑输出缓存,只需要遍历在其逻辑输出缓存的生命周期内所有内存分配状态,其中在其生命周期内,所有已经被预分配内存的空间都处于占用状态,而与该带分配内存的逻辑输出缓存的生命周期不重叠的已经被预分配内存的逻辑输出缓存曾经预分配过的内存空间在该生命周期内都处于空闲状态,因此可以将任意一个处于空闲状态的尺寸大于该逻辑输出缓存的内存在该生命周期内预分配给所述待分配内存的逻辑输出缓存。
图5所示的是根据本公开的内存预分配系统的生命周期采集组件针对一个计算子图采集生命周期后获得的操作节点的逻辑输出缓存的生命周期的实例关系示意图。如图5所示,该生命周期的实例关系示意图中的逻辑输出缓存的编号与图2所示的计算子图的操作节点的编号对应。根据图5可以看出,编号为1的逻辑输出缓存的生命周期与编号为2、3、4的逻辑输出缓存的生命周期彼此存在重叠关系,编号为5的逻辑输出缓存的生命周期与编号为4、6、7、8的逻辑输出缓存的生命周期彼此存在重叠关系,但是编号为3的逻辑输出缓存的生命周期与编号为5的逻辑输出缓存的生命周期彼此不重叠,同样,编号为2的逻辑输出缓存的生命周期与编号为4的逻辑输出缓存的生命周期彼此不重叠。举例而言,因此,在进行内存分配时,编号为3的逻辑输出缓存可以与编号为5的逻辑输出缓存在其各自的生命周期内使用同一块内存。也就是说,内存分配组件430如果先为编号为3的逻辑输出缓存分配一块内存,当需要为编号为5的逻辑输出缓存分配内存时,在编号5的逻辑输出缓存的生命周期内,先前为编号为3的逻辑输出缓存分配的内存将处于空闲状态,因此可以直接分配给编号5的逻辑输出缓存。当然需要指出的是,需要编号为3的逻辑输出缓存的尺寸小于或等于编号5的逻辑输出缓存的尺寸。编号为3的逻辑输出缓存也可以被预分配在其他在其生命周期内处于空闲状态的内存空间。
为此,基于任意计算子图中的操作节点的生命周期之间的关系,内存分配组件430首先在计算子图所属的计算图对应的内存块中为所述计算子图分配一个内存子块,并在所述内存子块内逐一为所述计算子图中操作节点的逻辑输出缓存在该操作节点的逻辑输出缓存的生命周期内处于空闲状态的内存空间中预分配内存。
图6所示的是根据本公开的内存空间预配系统在内存子块内进行内存复用分配时的示意图。如图6所示,作为一个计算子图的内存子块,是一个虚拟的无限长缓存块,其上方的逻辑输出缓存为待预分配内存的逻辑输出缓存。在待预分配内存的逻辑输出缓存的生命周期时段,处于占用状态的预分配内存部分采用横条纹标注,处于空闲状态的内存部分为空白状态。内存分配组件430通过遍历所有与待预分配内存的逻辑输出缓存的生命周期时段不重合的已经预分配的逻辑输出缓存的预分配内存空间。当发现有在其生命周期内的空闲的预分配内存空间时,将该空闲的预分配内存空间在该生命周期时间段内重新分配给待预分配内存的逻辑输出缓存,如图6所示,将逻辑输出缓存插入该空闲内存空间,实际而言,是将该空闲空间的起始地址以及所需空间尺寸大小的偏移量赋予该逻辑输出缓存。可选择地,内存分配组件430可以遍历所有在该生命周期时间段内的所有空闲内存空间,并选择空闲内存空间中尺寸大于或等于待预分配内存的逻辑输出缓存的尺寸并且两者尺寸差值最小的空闲内存空间预分配给该待预分配内存的逻辑输出缓存。
可选择地,内存分配组件430在所述计算子图的内存子块中按照计算子图中的所有操作节点的逻辑输出缓存的尺寸从大到小的顺序,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。具体而言,内存分配组件430从计算图中获得所有操作节点的逻辑输出缓存的尺寸。在进行作业分割成各种任务之后,每个操作节点的具体操作方式以及要处理的数据已经固定,因此其处理的数据块的尺寸也是确定的,因此其逻辑输出缓存所需的尺寸也是确定的。为此内存分配组件430将每个计算子图中的逻辑输出缓存的尺寸进行排序,按照大小顺序预分配内存空间。具体而言,就是首先为计算子图中最大的逻辑输出缓存直接分配内存空间,随后对剩余逻辑输出缓存中最大逻辑输出缓存进行内存空间的预分配,即在其生命周期时间段内遍历已经预分配的逻辑输出缓存的生命周期是否与其存在重叠,如果存在重叠,则排斥已经预分配的逻辑输出缓存的内存空间,将其他空闲的内存空间预分配给该剩余逻辑输出缓存中最大逻辑输出缓存。以此类推,从而为所有逻辑输出缓存分配内存空间,由此获得在不同时间段内复用相同内存空间的逻辑输出缓存。当最大的空闲区域也装不下待预分配的逻辑输出缓存时,则将可无限延长的内存块末端未分配内存空间预分配给改逻辑输出缓存。
可选择地,内存分配组件430在所述计算子图的内存子块中按照计算子图中的所有操作节点的逻辑输出缓存的生命周期的时序,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。具体而言,内存分配组件430从计算图中获得所有操作节点的逻辑输出缓存的生命周期的时间顺序。在进行作业分割成各种任务之后,每个操作节点的具体操作方式以及要处理数据的路径已经固定,因此其逻辑输出缓存使用内存的时间段彼此之间是相对固定的。为此内存分配组件430将每个计算子图中的逻辑输出缓存的生命周期进行排序,按照生命周期的先后顺序预分配内存空间。具体而言,就是首先为计算子图中时间周期排列在先的逻辑输出缓存直接分配内存空间,随后对剩余逻辑输出缓存中生命周期最早逻辑输出缓存进行内存空间的预分配,即在其生命周期时间段内遍历已经预分配的逻辑输出缓存的生命周期是否与其存在重叠,如果存在重叠,则直接将已经预分配的内存空间之后的接续内存空间预分配给待预分配的逻辑输出缓存。如果不存在重叠,则意味着所遍历的已经预分配的内存空间处于空闲状态,并将该处于空闲状态的内存空间预分配给待预分配的逻辑输出缓存。最大的空闲区域也装不下待预分配的逻辑输出缓存时,则将可无限延长的内存块末端未分配内存空间预分配给改逻辑输出缓存。
可选择地,所述内存分配组件430在遍历到所述内存子块中的处于空闲状态且其尺寸小于待分配内存的逻辑输出缓存的第一内存空间时,如果两者尺寸之差值与所述待分配内存的逻辑输出缓存的尺寸之间的比值小于预定比值时,则将所述第一内存空间地址之后与待分配内存的逻辑输出缓存的生命周期重合的所有已经预分配的内存在大小不变的情况下起始地址增加所述差值,并将尺寸增大后的第一内存空间预先分配给所述待分配内存的逻辑输出缓存。图7所示的是根据本公开的内存空间预配系统在内存子块内进行内存复用分配的另一个实施例的示意图。如图7所示,逻辑输出缓存下方的空白内存空间作为所遍历到的第一内存空间比待分配内存的逻辑输出缓存的尺寸小,但是两者之间的差值并不大。如果之间放弃掉,该空间可能会长时间处于空闲状态而得不到利用,这就导致了内存空间利用率的浪费。为此,由于本公开进行的预分配,可以将已经预分配给所有之前的逻辑输出缓存的内存空间的起始地址在所述第一内存空间末尾地址的内存空间都向后挪动上述差值,以便经过挪动之后的第一空间的尺寸等于所述待预分配内存的逻辑输出缓存的尺寸,从而能够将大小正好等于其尺寸的第一内存空间预分配给所述待分配内存空间的逻辑输出缓存。需要指出的是,进行挪动之前,需要比较一下挪动的代价。具体而言,如果两者尺寸之差值与所述待分配内存的逻辑输出缓存的尺寸之间的比值小于预定比值时,则意味着代价比较小,可以进行挪动操作。例如第一内存空间的尺寸为10M,而逻辑输出缓存的尺寸为11M或更大,两者的尺寸差为1M,该比值为1:11或更小,如果预定阈值为1/10,则表示挪动的代价足够小,值得进行挪动操作。可选择地,也可以采用其他代价函数来决定是否进行挪动操作。例如首先计算不挪动而将末端内存空间预分配给待预分配逻辑输出缓存的不挪动代价为“逻辑输出缓存 *生命周期的时长 ”,再次计算挪动操作的挪动代价为“挪动块大小* (生命周期时长 + 以往存在时间)。通过比较这两个代价值,取代价小的策略执行预分配操作。如果挪动代价小,则执行挪动操作,如果不挪动代价小,则直接执行末端内存空间预分配操作。
可选择地,所述内存分配组件430在多个生命周期不重合的待分配内存的逻辑输出缓存需要连续分配到一段连续内存空间时,优先为所述多个待分配内存的逻辑输出缓存中的尺寸最大的逻辑输出缓存预分配内存。返回参考图4,逻辑输出缓存1-8由于彼此的生命周期之间的关系会经历如下的内存使用和空闲过程:
[1,2,3,②,4,①,③,5,④,6,7, ⑥,8,⑤,⑦,⑧]
其中数字1-8在上面排列中表示使用内存开始时刻,而数字①,②,③,④,⑤,⑥,⑦,⑧各自示对应需要的逻辑输出缓存使得其预分配的内存空间处于空闲的开始时刻或可以退出使用的时刻。从上述过程可以看出,编号2和3的顺序调换不会影响内存空间使用的正确性,但是逻辑输出缓存3的生命周期更长,逻辑输出缓存3的生命周期更短,如果按照上述方式,将导致用于逻辑输出缓存1和3所使用的内存空间留下空闲内存空间2,这种情况将使得内存空间的空闲部分变得碎片化。为此,根据本公开的内存分配组件430对于逻辑输出缓存2和3这种连续预分配但是顺序改变不影响正确性的情形,一方面可以优先分配尺寸最大的逻辑输出缓存,或者另一方面优先分配生命周期最长的逻辑输出缓存。例如上面的使用和空闲序列可以改变如下:
[1, 3, 2,②,4,①,③,5,④, 7, 6,⑥,8,⑤,⑦,⑧]
通过这种调整,编号为2的逻辑输出缓存的内存空间由于其生命周期很短,使用之后立即处于空闲状态,因此用于编号2的逻辑输出缓存的内存空间不仅不会导致空闲空间碎片化,而且在其空间大于编号为4的逻辑输出缓存尺寸的情况下可以立即被预分配给编号为4的逻辑输出缓存。同样,对于编号为6和7的逻辑输出缓存,也可以进行这种调整。之所以能够在计算子图上对操作节点的逻辑输出缓存的内存预分配进行这种调整,原因在于本公开的内存分配组件430能够预先获得计算子图中操作节点之间的执行顺序以及逻辑输出缓存的生命周期,因此,在预分配内存时,不仅可以参考之前的信息,也可以参考之后的信息。
经过上述对每个逻辑输出缓存进行预分配内存之后,内存分配组件430将一个计算子图中分配的内存子块中被预分配的内存空间的末尾偏移地址作为该内存子块的最终的尺寸大小,即对应于计算子图的整个内存子块的尺寸。返回参考图1。如图1所示,内存预分配系统400中的内存资源获取组件410在用户输入作业并且作业描述组件100对作业进行描述之后,就获得该作业将要被处理所需的计算设备网络500的所有计算资源中的内存资源,即获取每个计算设备上的内存资源。内存分配系统的内存分配组件430在进行对每个逻辑输出缓存预分配在内存子块中的起始地址和相对偏移量之后,相应地获得内存子块在内存块内的起始地址和相对偏移量,最终结合内存资源获取组件410获得实际计算设备的物理内存资源地址,将所有预分配内存地址数据和偏移量对应到实际计算设备的实际内存空间的实际内存物理地址以及物理偏移量,并将所获得每个逻辑输出缓存所对应的实际内存物理地址以及物理内存空间偏移量标记到每个操作节点,由此获得一个完整的具有预分配内存的计算图,由此实现整个作业任务的计算图在整个计算设备组件上的对应静态部署。通过这种静态部署,整个静态网络数据处理系统在实际数据处理过程中,只需经过一次分配实现内存空间的指定,无需进行任何内存空间的申请与释放操作,每个操作节点的内存地址也不会发生变化,完全实现了数据的静态流式处理。
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本公开的方法和装置的全部或者任何步骤或者部件,可以在任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本公开的说明的情况下运用他们的基本编程技能就能实现的。
因此,本公开的目的还可以通过在任何计算装置上运行一个程序或者一组程序来实现。所述计算装置可以是公知的通用装置。因此,本公开的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本公开,并且存储有这样的程序产品的存储介质也构成本公开。显然,所述存储介质可以是任何公知的存储介质或者将来所开发出来的任何存储介质。
还需要指出的是,在本公开的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
Claims (16)
1.一种静态网络中的内存空间预配系统,包括:
任务标记组件,根据部署到同一计算设备中的多个任务的执行顺序,为彼此串行的多个任务赋予同组标记;以及
内存分配组件,为具有同组标记的多个任务中每个任务预先分配处于同一计算设备中的内存单元中的同一内存块,并在该内存块中为每个任务对应计算图中的每个操作节点的逻辑输出缓存分配专门的内存。
2.根据权利要求1所述的静态网络中的内存空间预配系统,还包括:
计算子图划分组件,基于每个任务对应的计算图,划分出多个计算子图,每个计算子图包含一个源操作节点和一个汇操作节点以及在源操作节点和汇操作节点之间的其他操作节点,所述计算子图在所述源操作节点一旦满足执行条件的情况下,该计算子图的其他操作节点能与其他计算子图无关联地满足执行条件;以及
生命周期采集组件,基于所述多个任务的计算图的每个操作节点所属的所有拓扑路径,采集每个操作节点的逻辑输出缓存的从将被写入数据开始到该数据可以被覆写为止的生命周期;
其中所述内存分配组件在所述计算子图所属的计算图对应的内存块中为所述计算子图分配一个内存子块,并在所述内存子块内逐一为所述计算子图中操作节点的逻辑输出缓存在该操作节点的逻辑输出缓存的生命周期内处于空闲状态的内存空间中预分配内存。
3.根据权利要求2所述的静态网络中的内存空间预配系统,其中所述内存分配组件,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在所述计算子图的内存子块的处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
4.根据权利要求2所述的静态网络中的内存空间预配系统,其中所述内存分配组件在所述计算子图的内存子块中按照计算子图中的所有操作节点的逻辑输出缓存的尺寸从大到小的顺序,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
5.根据权利要求2所述的静态网络中的内存空间预配系统,其中所述内存分配组件在所述计算子图的内存子块中按照计算子图中的所有操作节点的逻辑输出缓存的生命周期的时序,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
6.根据权利要求2-5之一所述的静态网络中的内存空间预配系统,其中所述内存分配组件在遍历到所述内存子块中的处于空闲状态且其尺寸小于待分配内存的逻辑输出缓存的第一内存空间时,如果两者尺寸之差值与所述待分配内存的逻辑输出缓存的尺寸之间的比值小于预定比值时,则将所述第一内存空间之后与待分配内存的逻辑输出缓存的生命周期重合的所有已经预分配的内存在大小不变的情况下起始地址增加所述差值,并将尺寸增大后的第一内存空间预先分配给所述待分配内存的逻辑输出缓存。
7.根据权利要求2-5之一所述的静态网络中的内存空间预配系统,其中所述内存分配组件在多个生命周期不重合的待分配内存的逻辑输出缓存需要连续分配到一段连续内存空间时,优先为所述多个待分配内存的逻辑输出缓存中的尺寸最大的逻辑输出缓存预分配内存。
8.根据权利要求2-5之一所述的静态网络中的内存空间预配系统,其中所述内存分配组件在多个生命周期不重合的待分配内存的逻辑输出缓存需要连续分配到一段连续内存空间时,优先为所述多个待分配内存的逻辑输出缓存中生命周期结束时间最晚的逻辑输出缓存预分配内存。
9.一种静态网络中的内存空间预配方法,包括:
任务部署步骤,获取用户所要待处理的多个任务,并将多个任务部署到静态网络中的各个计算设备中;
任务标记步骤,根据部署到同一计算设备中的多个任务的执行顺序,为彼此串行的多个任务赋予同组标记;以及
内存分配步骤,为具有同组标记的多个任务中的每个任务预先分配处于同一计算设备中的内存单元中的同一内存块,并在该内存块中为每个任务对应计算图中的每个操作节点的逻辑输出缓存分配专门的内存。
10.根据权利要求9所述的静态网络中的内存空间预配方法,还包括:
计算子图划分步骤,基于每个任务对应的计算图,划分出多个计算子图,每个计算子图包含一个源操作节点和一个汇操作节点以及在源操作节点和汇操作节点之间的其他操作节点,所述计算子图在所述源操作节点一旦满足执行条件的情况下,该计算子图的其他操作节点能与其他计算子图无关联地满足执行条件;以及
生命周期采集步骤,基于所述多个任务的计算图的每个操作节点所属的所有拓扑路径,采集每个操作节点的逻辑输出缓存的从将被写入数据开始到该数据可以被覆写为止的生命周期;以及
所述内存分配步骤还在所述计算子图所属的计算图对应的内存块中为所述计算子图分配一个内存子块,并在所述内存子块内逐一为所述计算子图中操作节点的逻辑输出缓存在该操作节点的逻辑输出缓存的生命周期内处于空闲状态的内存空间中预分配内存。
11.根据权利要求10所述的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在所述计算子图的内存子块的处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
12.根据权利要求10所述的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在所述计算子图的内存子块中按照计算子图中的所有操作节点的逻辑输出缓存的尺寸从大到小的顺序,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
13.根据权利要求10所述的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在所述计算子图的内存子块中按照计算子图中的所有操作节点的逻辑输出缓存的生命周期的时序,针对每个待分配内存的逻辑输出缓存的生命周期,从内存子块的起始地址开始遍历所述内存子块,在处于空闲状态且其尺寸大于或等于待分配内存的逻辑输出缓存的内存空间中为待分配内存的逻辑输出缓存预分配内存。
14.根据权利要求10-13之一所述的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在遍历到所述内存子块中的处于空闲状态且其尺寸小于待分配内存的逻辑输出缓存的第一内存空间时,如果两者尺寸之差值与所述待分配内存的逻辑输出缓存的尺寸之间的比值小于预定比值时,则将所述第一内存空间之后与待分配内存的逻辑输出缓存的生命周期重合的所有已经预分配的内存在大小不变的情况下起始地址增加所述差值,并将尺寸增大后的第一内存空间预先分配给所述待分配内存的逻辑输出缓存。
15.根据权利要求10-13之一所述的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在多个生命周期不重合的待分配内存的逻辑输出缓存需要连续分配到一段连续内存空间时,优先为所述多个待分配内存的逻辑输出缓存中的尺寸最大的逻辑输出缓存预分配内存。
16.根据权利要求10-13之一所述的静态网络中的内存空间预配方法,其中所述内存分配步骤还包括:在多个生命周期不重合的待分配内存的逻辑输出缓存需要连续分配到一段连续内存空间时,优先为所述多个待分配内存的逻辑输出缓存中生命周期结束时间最晚的逻辑输出缓存预分配内存。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010600014.2A CN111488221B (zh) | 2020-06-29 | 2020-06-29 | 静态网络中的内存空间预配系统及其方法 |
PCT/CN2021/103002 WO2022002021A1 (zh) | 2020-06-29 | 2021-06-29 | 静态网络中的内存空间预配系统及其方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010600014.2A CN111488221B (zh) | 2020-06-29 | 2020-06-29 | 静态网络中的内存空间预配系统及其方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111488221A true CN111488221A (zh) | 2020-08-04 |
CN111488221B CN111488221B (zh) | 2020-10-09 |
Family
ID=71795814
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010600014.2A Active CN111488221B (zh) | 2020-06-29 | 2020-06-29 | 静态网络中的内存空间预配系统及其方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN111488221B (zh) |
WO (1) | WO2022002021A1 (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112965663A (zh) * | 2021-03-05 | 2021-06-15 | 上海寒武纪信息科技有限公司 | 对数据块的存储空间进行复用的方法和相关产品 |
WO2022002021A1 (zh) * | 2020-06-29 | 2022-01-06 | 北京一流科技有限公司 | 静态网络中的内存空间预配系统及其方法 |
CN114237903A (zh) * | 2021-12-22 | 2022-03-25 | 上海壁仞智能科技有限公司 | 内存分配优化方法、装置、电子设备、介质及程序产品 |
WO2022068663A1 (zh) * | 2020-09-29 | 2022-04-07 | 华为技术有限公司 | 内存分配方法、相关设备及计算机可读存储介质 |
WO2022105187A1 (zh) * | 2020-11-18 | 2022-05-27 | 华为技术有限公司 | 一种内存管理的方法、设备及系统 |
WO2023082542A1 (zh) * | 2022-02-28 | 2023-05-19 | 之江实验室 | 一种面向神经网络模型计算的图执行方法和装置 |
CN112965663B (zh) * | 2021-03-05 | 2024-07-02 | 上海寒武纪信息科技有限公司 | 对数据块的存储空间进行复用的方法和相关产品 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115269204B (zh) * | 2022-09-27 | 2022-12-30 | 之江实验室 | 一种用于神经网络编译的内存优化方法及装置 |
CN116700996B (zh) * | 2023-08-04 | 2023-11-07 | 北京燧原智能科技有限公司 | 一种神经网络的内存分配方法、装置、设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090100212A1 (en) * | 2007-10-12 | 2009-04-16 | Kenneth Wayne Boyd | Method, appartus, computer program product, and data structure for providing and utilizing high performance block storage metadata |
CN110222005A (zh) * | 2019-07-15 | 2019-09-10 | 北京一流科技有限公司 | 用于异构架构的数据处理系统及其方法 |
CN110955529A (zh) * | 2020-02-13 | 2020-04-03 | 北京一流科技有限公司 | 内存资源静态部署系统及方法 |
CN111158919A (zh) * | 2020-01-20 | 2020-05-15 | 北京一流科技有限公司 | 内存资源原地共享决策系统及其方法 |
CN111258744A (zh) * | 2018-11-30 | 2020-06-09 | 中兴通讯股份有限公司 | 一种基于异构计算的任务处理方法及软硬件框架系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9805044B1 (en) * | 2015-03-31 | 2017-10-31 | EMC IP Holding Company LLC | Window-based resource allocation in data storage systems |
CN106339258B (zh) * | 2016-08-10 | 2019-10-18 | 西安诺瓦星云科技股份有限公司 | 可编程逻辑器件与微处理器共享内存的管理方法及装置 |
CN111158890A (zh) * | 2020-01-20 | 2020-05-15 | 北京一流科技有限公司 | 控制任务集中的任务并行的系统及其方法 |
CN111488221B (zh) * | 2020-06-29 | 2020-10-09 | 北京一流科技有限公司 | 静态网络中的内存空间预配系统及其方法 |
-
2020
- 2020-06-29 CN CN202010600014.2A patent/CN111488221B/zh active Active
-
2021
- 2021-06-29 WO PCT/CN2021/103002 patent/WO2022002021A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090100212A1 (en) * | 2007-10-12 | 2009-04-16 | Kenneth Wayne Boyd | Method, appartus, computer program product, and data structure for providing and utilizing high performance block storage metadata |
CN111258744A (zh) * | 2018-11-30 | 2020-06-09 | 中兴通讯股份有限公司 | 一种基于异构计算的任务处理方法及软硬件框架系统 |
CN110222005A (zh) * | 2019-07-15 | 2019-09-10 | 北京一流科技有限公司 | 用于异构架构的数据处理系统及其方法 |
CN111158919A (zh) * | 2020-01-20 | 2020-05-15 | 北京一流科技有限公司 | 内存资源原地共享决策系统及其方法 |
CN110955529A (zh) * | 2020-02-13 | 2020-04-03 | 北京一流科技有限公司 | 内存资源静态部署系统及方法 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022002021A1 (zh) * | 2020-06-29 | 2022-01-06 | 北京一流科技有限公司 | 静态网络中的内存空间预配系统及其方法 |
WO2022068663A1 (zh) * | 2020-09-29 | 2022-04-07 | 华为技术有限公司 | 内存分配方法、相关设备及计算机可读存储介质 |
WO2022105187A1 (zh) * | 2020-11-18 | 2022-05-27 | 华为技术有限公司 | 一种内存管理的方法、设备及系统 |
CN112965663A (zh) * | 2021-03-05 | 2021-06-15 | 上海寒武纪信息科技有限公司 | 对数据块的存储空间进行复用的方法和相关产品 |
CN112965663B (zh) * | 2021-03-05 | 2024-07-02 | 上海寒武纪信息科技有限公司 | 对数据块的存储空间进行复用的方法和相关产品 |
CN114237903A (zh) * | 2021-12-22 | 2022-03-25 | 上海壁仞智能科技有限公司 | 内存分配优化方法、装置、电子设备、介质及程序产品 |
CN114237903B (zh) * | 2021-12-22 | 2024-03-22 | 上海壁仞智能科技有限公司 | 内存分配优化方法、装置、电子设备、介质及程序产品 |
WO2023082542A1 (zh) * | 2022-02-28 | 2023-05-19 | 之江实验室 | 一种面向神经网络模型计算的图执行方法和装置 |
US11941514B2 (en) | 2022-02-28 | 2024-03-26 | Zhejiang Lab | Method for execution of computational graph in neural network model and apparatus thereof |
Also Published As
Publication number | Publication date |
---|---|
WO2022002021A1 (zh) | 2022-01-06 |
CN111488221B (zh) | 2020-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111488221B (zh) | 静态网络中的内存空间预配系统及其方法 | |
CN114186687B (zh) | 一种面向神经网络模型计算的中间表示方法和装置 | |
CN115248728B (zh) | 面向智能计算的分布式训练任务调度方法、系统和装置 | |
Hu et al. | Holistic scheduling of real-time applications in time-triggered in-vehicle networks | |
CN110347636B (zh) | 数据执行体及其数据处理方法 | |
CN110704360A (zh) | 一种基于异构fpga数据流的图计算优化方法 | |
Lee et al. | A vertically layered allocation scheme for data flow systems | |
CN114327844A (zh) | 内存分配方法、相关设备及计算机可读存储介质 | |
CN113568599A (zh) | 用于处理计算作业的方法、电子设备和计算机程序产品 | |
CN113037800B (zh) | 作业调度方法以及作业调度装置 | |
CN110955529B (zh) | 内存资源静态部署系统及方法 | |
CN115269204B (zh) | 一种用于神经网络编译的内存优化方法及装置 | |
Mahjoub et al. | Scheduling with uncertainties on new computing platforms | |
Pascual et al. | Optimization-based mapping framework for parallel applications | |
CN107797852A (zh) | 数据迭代的处理装置及处理方法 | |
Feljan et al. | Task allocation optimization for multicore embedded systems | |
CN111158919B (zh) | 内存资源原地共享决策系统及其方法 | |
CN115496373A (zh) | 应用于敏捷管理平台的任务分配方法及装置 | |
Deniziak et al. | Co-synthesis of contention-free energy-efficient NOC-based real time embedded systems | |
CN114090219A (zh) | 调度系统、方法、装置、芯片、计算机设备及存储介质 | |
Behnamian | Parallel Jobs Scheduling with a Specific Due Date: Asemi-definite Relaxation-based Algorithm | |
JP6753521B2 (ja) | 計算資源管理装置、計算資源管理方法、及びプログラム | |
Compagnin et al. | Experimental evaluation of optimal schedulers based on partitioned proportionate fairness | |
CN116610456B (zh) | 一种基于急切内存重用算法的内存优化方法 | |
Kaufmann et al. | The {HCl} Scheduler: Going all-in on Heterogeneity |
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 |