CN111736998A - 内存管理方法和相关产品 - Google Patents
内存管理方法和相关产品 Download PDFInfo
- Publication number
- CN111736998A CN111736998A CN202010561183.XA CN202010561183A CN111736998A CN 111736998 A CN111736998 A CN 111736998A CN 202010561183 A CN202010561183 A CN 202010561183A CN 111736998 A CN111736998 A CN 111736998A
- Authority
- CN
- China
- Prior art keywords
- task
- cache
- processing device
- cache block
- pool
- 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.)
- Pending
Links
- 230000015654 memory Effects 0.000 title claims abstract description 187
- 238000007726 management method Methods 0.000 title claims abstract description 42
- 238000000034 method Methods 0.000 claims abstract description 41
- 238000004590 computer program Methods 0.000 claims description 6
- 230000004044 response Effects 0.000 claims description 6
- 238000010586 diagram Methods 0.000 description 17
- 230000001133 acceleration Effects 0.000 description 10
- 230000006870 function Effects 0.000 description 10
- 230000000694 effects Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000000007 visual effect Effects 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/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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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 Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种内存管理方法和相关产品,该方法包括:第一处理设备为第一任务分配缓存池的第一缓存块;所述第一处理设备在确定第二处理设备需要按次序执行第二任务和所述第一任务的情况下,为所述第二任务分配所述缓存池的第二缓存块,其中,所述第二缓存块中的至少一部分包含于所述第一缓存块。本申请实施例中,第一处理设备在确定第二处理设备需要按次序执行第二任务和第一任务的情况下,该第一任务和该第二任务可以复用一部分缓存块;能够提高内存利用率。
Description
技术领域
本申请涉及计算机领域,尤其涉及一种内存管理方法和相关产品。
背景技术
在由中央处理器(CentralProcessingUnit,CPU)和加速设备构成的异构加速系统中,加速设备上的内存管理策略会极大影响整个系统的性能和效率。加速设备是指CPU以外用于加速计算的设备,例如图形处理器(Graphics Processing Unit,GPU)、网络处理器(Neural-network Processing Unit,NPU)、现场可编程门阵列(Field-ProgrammableGate Array,FPGA)等。由于目前采用的内存管理策略内存利用率较低,因此需要研究内存利用率更高的内存管理策略。
发明内容
本申请实施例公开了一种内存管理方法和相关产品。
第一方面,本申请实施例提供了一种内存管理方法,该方法包括:第一处理设备为第一任务分配缓存池的第一缓存块;所述第一处理设备在确定第二处理设备需要按次序执行第二任务和所述第一任务的情况下,为所述第二任务分配所述缓存池的第二缓存块,其中,所述第二缓存块中的至少一部分包含于所述第一缓存块。
第一处理设备确定第二处理设备需要按次序执行第二任务和第一任务的情况是指该第一处理设备确定该第二处理设备不会并行执行该第一任务和该第二任务。也就是说,第二处理设备不会同时执行该第一任务和该第二任务。应理解,第二处理设备按次序执行第二任务和第一任务的情况下,该第二处理设备执行该第一任务和该第二任务不可能同时占用同一缓存块。因此,第一处理设备在为第一任务分配缓存池的第一缓存块,可以为第二任务分配第二缓存块,即该第一任务和该第二任务可以复用一部分缓存块。
本申请实施例中,第一处理设备在确定第二处理设备需要按次序执行第二任务和第一任务的情况下,该第一任务和该第二任务可以复用一部分缓存块;能够提高内存利用率。
在一个可能的实现方式中,所述第一处理设备为第一任务分配缓存池的第一缓存块之后,所述方法还包括:所述第一处理设备响应于将所述第一任务发送至所述第二处理设备,将所述第一缓存块重新放入所述缓存池。
所述第一处理设将所述第一任务发送至所述第二处理设备可以是所述第一处理设调用第二处理设备执行所述第一任务,也可以将所述第一任务提交至第二处理设备处理的某个任务队列。所述第一处理设在将所述第一任务发送至所述第二处理设备之后,可立即将所述第一缓存块重新放入所述缓存池。
在该实现方式中,第一处理设备可及时将第一缓存块重新放入缓存池,以便于复用该第一缓存池。
在一个可能的实现方式中,所述第一处理设备为第一任务分配缓存池的第一缓存块之后,所述方法还包括:所述第一处理设备记录所述第一缓存块对应的所述第一任务位于的第一操作队列;所述确定第二处理设备需要按次序执行第二任务和所述第一任务的情况包括:所述第一处理设备基于记录的所述第一任务位于的所述第一操作队列,确定所述第一任务和所述第二任务位于的操作队列相同。
可选的,所述第一处理设备响应于将所述第一任务发送至所述第二处理设备之后,记录所述第一缓存块对应的所述第一任务位于的第一操作队列。可选的,所述第一处理设备将所述第一缓存块重新放入所述缓存池的操作和记录所述第一缓存块对应的所述第一任务位于的第一操作队列的操作可视为同时执行。也就是说,第一处理设备将第一缓存块重新放入缓存池的操作和记录该第一缓存块对应的第一任务位于的第一操作队列的操作可以是绑定到一起的。所述第一处理设备在为所述第二任务分配缓存块之前,已知所述第二任务位于的操作队列。因此,第一处理设备基于记录的第一任务位于的第一操作队列,可以确定该第一任务和第二任务位于的操作队列是否相同。
在该实现方式中,第一处理设备基于记录的第一任务位于的第一操作队列,可准确、快速地确定该第一任务和第二任务位于的操作队列相同。
在一个可能的实现方式中,所述为所述第二任务分配所述缓存池的第二缓存块包括:所述第一处理设备在所述第二处理设备执行所述第一任务的过程中,为所述第二任务分配所述缓存池的所述第二缓存块。
在该实现方式中,第一处理设备和第二处理设备并行工作,工作效率高。
在一个可能的实现方式中,所述为所述第二任务分配所述缓存池的第二缓存块之前,所述方法还包括:所述第一处理设备从所述缓存池中查找当前分配有任务的至少一个候选缓存块;所述第一处理设备在确定第二处理设备需要按次序执行第二任务和所述第一任务的情况下,为所述第二任务分配所述缓存池的第二缓存块,包括:所述第一处理设备基于所述至少一个候选缓存块当前分配的任务与所述第二任务之间的执行顺序关系,为所述第二任务分配从所述至少一个候选缓存块中确定的所述第二缓存块。
在该实现方式中,第一处理设备基于至少一个候选缓存块当前分配的任务与第二任务之间的执行顺序关系,为该第二任务分配从该至少一个候选缓存块中确定的第二缓存块;以便于该第二任务复用已分配的缓存块,能够提高内存利用率。
在一个可能的实现方式中,所述第一处理设备从所述缓存池中查找当前分配有任务的至少一个候选缓存块,包括:所述第一处理设备从所述缓存池中查找满足所述第二任务所需缓存大小的多个候选缓存块;所述第一处理设备从所述多个候选缓存块中查找当前分配有任务的至少一个候选缓存块。所述多个候选缓存块可以均为当前分配有任务的缓存块;也可以既包括当前分配有任务的缓存块也包括当前未分配有任务的缓存块。
在该实现方式中,优先从多个候选缓存块中查找当前分配有任务的至少一个候选缓存块,可快速查找到当前分配有任务且满足第二任务所需缓存大小的至少一个候选缓存块。
在一个可能的实现方式中,所述第一处理设备从所述缓存池中查找当前分配有任务的至少一个候选缓存块,包括:所述第一处理设备从所述缓存池中的当前分配有任务的缓存块中查找满足所述第二任务所需缓存大小的所述多个候选缓存块。应理解,每个候选缓存块为当前分配有任务的缓存块。
在该实现方式中,第一处理设备直接从缓存池中的当前分配有任务的缓存块中查找满足第二任务所需缓存大小的缓存块,进而将当前分配有任务的缓存块再次分配给该第二任务;可以提高内存利用率。
在一个可能的实现方式中,所述第一处理设备基于所述至少一个候选缓存块当前分配的任务与所述第二任务之间的执行顺序关系,为所述第二任务分配从所述至少一个候选缓存块中确定的所述第二缓存块,包括:第一处理设备基于所述至少一个候选缓存块当前分配的任务与所述第二任务之间的执行顺序关系以及所述至少一个候选缓存块的大小,为所述第二任务分配从所述至少一个候选缓存块中确定的所述第二缓存块。
第一处理设备基于所述至少一个候选缓存块当前分配的任务与所述第二任务之间的执行顺序关系以及所述至少一个候选缓存块的大小,为所述第二任务分配从所述至少一个候选缓存块中确定的所述第二缓存块可以是:所述第一处理设备确定所述至少一个候选缓存块当前分配的任务与所述第二任务按次序执行的情况下,基于所述至少一个候选缓存块的大小为所述第二任务分配从所述至少一个候选缓存块中确定的所述第二缓存块。
在该实现方式中,为第二任务分配从当前分配有任务的至少一个候选缓存块中确定的第二缓存块,可以复用当前分配有任务的缓存块,提高内存复用率。
在一个可能的实现方式中,所述方法还包括:所述第一处理设备确定所述至少一个候选缓存块中不包括满足所述第二任务需求的缓存块的情况下,从所述缓存池中包括的当前未分配有任务的至少一个缓存块中确定分配给所述第二任务的目标缓存块。
在该实现方式中,通过从缓存池中包括的当前未分配有任务的至少一个缓存块中确定分配给第二任务的目标缓存块,以便于该第二任务能够成功被执行。
在一个可能的实现方式中,所述方法还包括:所述第一处理设备在所述缓存池中未查找到满足所述第二任务需求的缓存块的情况下,扩充所述缓存池;所述第一处理设备从扩充后的所述缓存池中查找分配给所述第二任务的目标缓存块。
在该实现方式中,从扩充后的缓存池中查找满足第二任务需求的缓存块,能够快速地满足为第二任务分配满足其需求的缓存块。
第二方面,本申请实施例提供了一种数据处理装置,该数据处理装置包括:内存分配单元,用于为第一任务分配缓存池的第一缓存块;处理单元,用于确定第二处理设备需要按次序执行第二任务和所述第一任务的情况;所述内存分配单元,还用于在所述处理单元确定所述第二处理设备需要按次序执行所述第二任务和所述第一任务的情况下,为所述第二任务分配所述缓存池的第二缓存块,其中,所述第二缓存块中的至少一部分包含于所述第一缓存块。
所述处理单元和所述内存分配单元可以是同一个单元,也可以是两个独立的单元。在一些可能的实施方式中,处理单元为处理器,例如CPU,内存分配单元为一个硬件。在一些可能的实施方式中,处理单元为处理器,例如CPU,内存分配单元的功能由处理器运行的软件或程序实现。也就是说,处理单元的功能和内存分配单元的功能均由处理器实现。
在一个可能的实现方式中,所述处理单元,还用于将所述第一任务发送至所述第二处理设备;所述内存分配单元,还用于响应于将所述第一任务发送至所述第二处理设备,将所述第一缓存块重新放入所述缓存池。
在一个可能的实现方式中,所述处理单元,还用于记录所述第一缓存块对应的所述第一任务位于的第一操作队列;所述处理单元,具体用于基于记录的所述第一任务位于的所述第一操作队列,确定所述第一任务和所述第二任务位于的操作队列相同。
在一个可能的实现方式中,所述内存分配单元,还用于在所述第二处理设备执行所述第一任务的过程中,为所述第二任务分配所述缓存池的所述第二缓存块。
在一个可能的实现方式中,所述内存分配单元,还用于从所述缓存池中查找当前分配有任务的至少一个候选缓存块;所述内存分配单元,具体用于在处理单元基于所述至少一个候选缓存块当前分配的任务与所述第二任务之间的执行顺序关系确定所述第二处理设备需要按次序执行所述第二任务和所述第一任务情况下,为所述第二任务分配从所述至少一个候选缓存块中确定的所述第二缓存块。
在一个可能的实现方式中,所述内存分配单元,具体用于从所述缓存池中的当前分配有任务的缓存块中查找满足所述第二任务所需缓存大小的所述多个候选缓存块。
在一个可能的实现方式中,所述内存分配单元,具体用于从所述缓存池中查找满足所述第二任务所需缓存大小的多个候选缓存块;从所述多个候选缓存块中查找当前分配有任务的至少一个候选缓存块。
在一个可能的实现方式中,所述内存分配单元,具体用于在所述处理单元基于所述至少一个候选缓存块当前分配的任务与所述第二任务之间的执行顺序关系确定所述第二处理设备需要按次序执行所述第二任务和所述第一任务情况下,基于所述至少一个候选缓存块的大小为所述第二任务分配从所述至少一个候选缓存块中确定的所述第二缓存块。
在一个可能的实现方式中,所述内存处理单元,还用于在处理单元确定所述至少一个候选缓存块中不包括满足所述第二任务需求的缓存块的情况下,从所述缓存池中包括的当前未分配有任务的至少一个缓存块中确定分配给所述第二任务的目标缓存块。
在一个可能的实现方式中,所述内存处理单元,还用于在所述缓存池中未查找到满足所述第二任务需求的缓存块的情况下,扩充所述缓存池;从扩充后的所述缓存池中查找分配给所述第二任务的目标缓存块。
关于第二方面或各种可能的实现方式所带来的技术效果,可参考对于第一方面或相应的实现方式的技术效果的介绍。
第三方面,本申请实施例提供了一种电子设备,该电子设备包括:存储器和第一处理器,其中,所述存储器用于存储指令,所述第一处理器用于执行所述存储器存储的指令,使得所述第一处理器执行如第一方面以及任一种可能的实现方式的方法。
在一个可能的实现方式中,所述电子设备还包括第二处理器,所述第二处理器用于利用所述第一处理器分配的缓存块执行所述第一处理器发送的任务。示例性的,第一处理器为CPU,第二处理器为GPU。
第四方面,本申请实施例提供了一种电子设备,该电子设备包括:第一处理设备、存储器以及第二处理设备,其中,所述存储器用于存储指令和数据,所述第一处理器用于执行所述存储器存储的指令,使得所述第一处理器执行如第一方面以及任一种可能的实现方式的方法,所述第二处理设备用于利用所述第一处理设备分配的缓存块执行所述第一处理器发送的任务。示例性的,第一处理设备为CPU,第二处理设备为GPU。
第五方面,本申请实施例提供了一种芯片,该芯片包括数据接口和第一方面所述的第一处理设备,其中,所述第一处理设备用于执行第一方面或第一方面的任意可能实现方式中的方法。
第六方面,本申请实施例提供了一种计算机可读存储介质,该计算机存储介质存储有计算机程序,该计算机程序包括程序指令,该程序指令当被处理器执行时使该处理器执行第一方面以及任一种可选的实现方式的方法。
第七方面,本申请实施例提供了一种计算机程序产品,该计算机程序产品包括程序指令,所述程序指令当被处理器执行时使所述处理器执行第一方面以及任一种可选的实现方式的方法。
附图说明
为了更清楚地说明本申请实施例或背景技术中的技术方案,下面将对本申请实施例或背景技术中所需要使用的附图进行说明。
图1为本申请实施例提供的一种数据处理装置的结构示意图;
图2为本申请实施例提供的一种内存管理方法流程图;
图3为本申请实施例提供的另一种内存管理方法流程图;
图4为本申请实施例提供的另一种内存管理方法流程图;
图5为本申请实施例提供的另一种内存管理方法流程图;
图6为本申请实施例提供的一种内存管理方法的时序图;
图7为本申请实施例提供的另一种内存管理方法流程图;
图8为本申请实施例提供的另一种内存管理方法的时序图;
图9为本申请实施例提供的一种数据处理装置的结构示意图;
图10为本申请实施例提供的另一种数据处理装置的结构示意图。
具体实施方式
本申请的说明书实施例和权利要求书及附图中的术语“第一”、“第二”、和“第三”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元。方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
如背景技术所述,在异构加速系统中当前采用的内存管理策略的内存利用率通常较低,因此需要研究内存利用率更高的内存管理策略。本申请实施例提供了一种内存利用率较高的内存管理方法,适用于具有第一处理设备(例如CPU)和第二处理设备(对应于加速设备)的数据处理装置(对应于异构加速系统)。下面先介绍本申请实施例提供的内存管理方法所适用的数据处理装置的结构,以便更方便的描述本申请实施例提供的内存管理方法。
图1为本申请实施例提供的一种数据处理装置的结构示意图。如图1所示,该数据处理装置包括:第一处理设备101、内存分配器102、第二处理设备103以及设备内存104,其中,该第一处理设备101和内存分配器102独立设置或者集成在同一设备,第二处理设备103与第一处理设备101为不同类型的处理设备,设备内存104可以为第二处理设备103的一部分,或者独立于第二处理设备103设置,本公开实施例对此不做限定。在一些例子中,第一处理设备101对应于处理单元,内存分配器102对应于内存分配单元。第一处理设备101可以是CPU或者其他类型的处理器。在一些实施例中,第一处理设备101可以为主处理设备,例如CPU;第二处理设备103为加速设备,例如GPU。第二处理设备102可以是GPU、NPU、FPGA、数字信号处理器(digital signal processor,DSP)、专用集成电路(application specificintegrated circuit,ASIC)等不同于第一处理设备101的处理器或者处理装置。在一些可能的实施方式中,第一处理设备为CPU,内存分配单元为与CPU相互独立的硬件。在一些可能的实施方式中,第一处理设备为CPU,内存分配器102的功能由第一处理设备运行的软件或程序实现。也就是说,在一些可能的实施方式中,内存分配器102对应的实体硬件为第一处理设备101。设备内存104可以为第二处理设备103可使用的内存。示例性的,第二处理设备103为GPU,设备内存104为第二处理设备103的显存。在一些实施例中,设备内存104为第二处理设备103的一部分。
下面分别介绍数据处理装置在实施本申请实施例提供的内存管理方法时,第一处理设备101、内存分配器102、第二处理设备103以及设备内存104的功能。
第一处理设备(例如CPU)101,用于向第二处理设备提交任务,以及控制内存分配器102分配和/或释放缓存池中的缓存,即通过内存分配器管理第二处理设备103的设备内存104。第一处理设备向第二处理设备提交任务可以是第一处理设备将任务添加至需要第二处理设备处理的操作队列;也可以是将任务发送给第二处理设备,例如发送一个指示第二处理设备执行某个任务的指令;还可以是将任务添加至第一处理设备需要调用第二处理设备的接口完成的操作队列;还可以是其他方式通知第二处理设备执行任务。第一处理设备101,还可用于调用第二处理设备的接口执行任务。示例性的,操作队列为统一计算设备架构(compute unified device architecture,CUDA)中的cudaStream。同一个cudStream上的任务按提交的顺序执行,不同cudaStream上的任务没有先后顺序,可以并发执行。示例性的,操作队列为开放运算语言(OpenComputingLanguag,OpenCL)中的cl_command_queue。OpenCL是一个为异构平台编写程序的框架,此异构平台可由CPU,GPU或其他类型的处理器组成。示例性的,操作队列为C++AMP中的accelerator_view。C++AMP是微软Visual Studio和C++编程语言的新扩展,用于帮助开发人员充分适应现在和未来的高度并行和异构计算环境。
内存分配器102负责对设备内存104的管理。内存分配器102可以是一个实体硬件。或者,内存分配器102的功能可以由第一处理设备101运行的软件或者程序实现。
第二处理设备103用于通过设备内存104读写数据,以及执行第一处理设备101提交的任务或者被第一处理设备101调用至少一个接口来完成任务。第二处理设备103可以理解为除CPU之外的加速设备,例如GPU、NPU、ASIC、FPGA等。
设备内存104是指第二处理设备上的存储设备(对应于内存空间),被第二处理设备所使用,例如GPU(对应于第二处理设备)的显存。
在一些实施例中,内存分配器102中设置一个缓存池,用于预先分配和缓存设备内存。这个缓存池可能是一整块的设备内存,也可能由多块大小任意的设备内存组合而成。第二处理设备103在执行任务需要使用设备内存时,内存分配器102可直接从缓存池中分配缓存给第二处理设备,第二处理设备不需要使用分配给它的缓存后,内存分配器将缓存重新放入缓存池中,即将缓存归还缓存池。在一些实施例中,第一处理设备101为CPU,第二处理设备103为GPU,设备内存104为第二处理设备103上的显存;在包括CPU和GPU的异构计算系统中,CPU负责任务(例如计算任务或者图像处理任务等)的准备和发起,GPU负责任务的实际执行。CPU发起任务前需要指定GPU执行任务所使用的显存。CPU对显存的分配和释放由内存分配器实际完成。内存分配器实际负责了对GPU上显存的管理。GPU执行任务时直接使用CPU通过内存分配器分配的部分显存。
下面结合图2来描述数据处理装置执行本申请实施例提供的内存管理方法时,各部件执行的操作。图2为本申请实施例提供的一种内存管理方法流程图。如图2所示,该内存管理方法包括:
201、第一处理设备为第一任务分配缓存池的第一缓存块。
第一处理设备可以是CPU或者其他类型的处理器。在一些实施例中,第一处理设备为第一任务分配缓存池的第一缓存块可以是第一处理设备101通过内存分配器102为第一任务分配缓存池的第一缓存块;其中,内存分配器的功能由第一处理设备运行的软件或者程序实现。第一任务可以是图像处理任务、计算任务等需要第二处理设备(例如GPU)执行的任务或者需要调用第二处理设备执行的任务。第一缓存块可以为缓存池中任一个缓存块。缓存池可以理解为内存分配器内部设有的缓存设备内存(例如显存)的池子。举例来说,内存分配器管理的显存缓存在一个池子(即缓存池)里面,第二处理设备需要显存时内存分配器从池子中分配,分配给该第二处理设备的显存用完后不等待该第二处理设备完成任务,就释放该显存。这样,利用缓存池,可以消除设备内存分配和释放过程中的设备同步。设备同步可以理解为第一处理设备(例如CPU)停下执行程序,等待第二处理设备(对应于加速设备)完成任务。在一些实施例中,第一处理设备为第一任务分配缓存池的第一缓存块可以是:优先从缓存池中分配满足第一任务需求的缓存块;若该缓存池中不存在满足该第一任务需求的缓存块,则调用cudaMalloc从设备内存中分配更多的内存,扩充缓存池。cudaMalloc是CUDA中分配显存的接口。
在一些实施例中,第一任务可以是某个计算任务或图像处理任务或其他类型的深度学习任务。在一些实施例中,第一处理设备在执行步骤201之前,可执行如下操作:第一处理设备可以将一个较大的任务进行拆分,得到第一任务。本申请实施例中的数据处理装置可以是一个异构计算系统。异构计算系统是在析取计算任务并行性类型的基础上,将具有相同类型的代码段划分到同一子任务中,然后根据不同并行性类型将各子任务分配到最适合执行它的计算资源(例如第二处理设备)上加以执行,达到使计算任务总的执行时间为最小。这样,第一任务可以理解为第一处理设备拆分一个较大的任务得到的需要第二处理设备执行的子任务或者调用第二处理设备执行的子任务。或者,第一任务为第一处理设备确定需要执行的任务本身,本公开实施例对此不做限定。
在一些实施例中,第一处理设备在执行步骤201之后,可执行如下操作:第一处理设备响应于将第一任务发送至第二处理设备,将第一缓存块重新放入(也称为归还)缓存池。第一处理设备将第一任务发送至第二处理设备可以是第一处理设备将任务添加至需要第二处理设备处理的操作队列;也可以是发送一个指示第二处理设备执行某个任务的指令;还可以是将任务添加至第一处理设备需要调用第二处理设备的接口完成的操作队列;还可以是其他方式通知第二处理设备执行任务,本公开实施例对此不做限定。
在一些实施例中,第一处理设在将第一任务发送至第二处理设备之后,可立即将第一缓存块重新放入缓存池,而无需等待第二处理设备使用第一缓存块执行完毕第一任务。在本公开实施例中,第一处理设备可及时将第一缓存块重新放入缓存池,以便于复用该第一缓存块。
在一些实施例中,第一处理设备或内存分配器可以为缓存池中的各个缓存块设置标识,以表明缓存块的当前状态。作为一个例子,第一处理设备为第一任务分配缓存池的第一缓存块可以是该第一处理设备将该缓存池的该第一缓存块分配给第一任务,并将该第一缓存块的状态设置为不可用,表明该第一缓存块不能分配给其他任务;将第一缓存块重新放入(也称为归还)缓存池可以是将该第一缓存块的状态设置为可用,表明该第一缓存块可以分配给其他任务。本公开实施例还可以通过其他方式指示各个缓存块当前是否可用,例如,第一处理设备将第一缓存块分配给第一任务,可以指将该第一缓存块从缓存池包含的缓存资源中移除,并且将第一缓存块重新放入缓存池,可以指将第一缓存块重新添加到缓存池包含的缓存资源中。
202、第一处理设备在确定第二处理设备需要按次序执行第二任务和第一任务的情况下,为第二任务分配缓存池的第二缓存块。
第二缓存块中的至少一部分包含于第一缓存块。第二任务可以是图像处理任务、计算任务等需要第二处理设备(例如GPU)执行的任务或者需要调用第二处理设备执行的任务。
第一处理设备确定第二处理设备需要按次序执行第二任务和第一任务是指该第一处理设备确定该第二处理设备不会并行执行该第一任务和该第二任务。也就是说,第二处理设备不会同时执行该第一任务和该第二任务。该第一任务和第二任务可以是相同或不同类型的任务,例如可以是同一个任务的不同子任务,或者是不同任务的子任务,等等,本公开实施例对此不做限定。应理解,第二处理设备按次序执行第二任务和第一任务的情况下,该第二处理设备执行该第一任务和该第二任务不可能同时使用缓存块。因此,第一处理设备在确定第二处理设备需要按次序执行第二任务和第一任务的情况下,可以为第二任务分配第二缓存块,即该第一任务和该第二任务可以复用一部分缓存块。后续再详述第一处理设备确定第二处理设备需要按次序执行第二任务和第一任务的实现方式。
在一些实施例中,第一处理设备的内存分配和第二处理设备的任务处理可以并行执行,从而提高处理效率。举例来说,第一处理设备在第二处理设备执行第一任务的过程中,为第二任务分配缓存池的第二缓存块。
本申请实施例中,第一处理设备在确定第二处理设备需要按次序执行第二任务和第一任务的情况下,该第一任务和该第二任务可以复用一部分缓存块;能够提高内存利用率。
下面介绍确定第二处理设备需要按次序执行第二任务和第一任务的可选示例。
第一处理设备在将第一缓存块重新放入缓存池之后或者在将第一缓存块重新放入缓存池的过程中,记录第一缓存块对应的第一任务所在的第一操作队列;在为第二任务分配缓存块的过程中,基于记录的第一任务所在的第一操作队列,确定第一任务和第二任务位于的操作队列相同。第一操作队列可以是需要第二处理设备执行的操作队列或者是第二任务所在的操作队列。举例来说,第一处理设备将任务提交至第二处理设备的第一操作队列,该第二处理设备按照各任务被提交至该第一操作队列的先后顺序依次执行该第一操作队列中的任务。第一操作队列可以是第一处理设备需要调用第二处理设备的接口完成的操作队列。举例来说,第一处理设备将任务添加至其需要调用第二处理设备的接口完成的操作队列,并按照各任务被添加至该操作队列的先后顺序依次调用第二处理设备的接口执行各任务。
在一些实施例中,第一处理设备将第一缓存块重新放入缓存池的操作和记录第一缓存块对应的第一任务所在的第一操作队列的操作可以是同时或以任意先后顺序执行的,例如,在将第一缓存块重新放入缓存池后,记录第一缓存块的本次任务分配信息,该任务分配信息包含第一任务所在的操作队列的信息。再例如,第一处理设备记录第一缓存块对应的第一任务所在的第一操作队列,并紧接着将第一缓存块重新放入缓存池。
然后,在为第二任务分配缓存块的过程中,第一处理设备基于记录的第一任务所在的第一操作队列,例如,通过查询第一缓存块的任务分配信息,可以确定该第一任务和第二任务位于的操作队列是否相同,即待分配的第二任务与第一缓存块已分配的第一任务属于相同的操作队列。这样,同一操作队列中的不同任务是按照特定顺序依次执行的,第一任务和第二任务位于同一操作队列,表明第一任务和第二任务不会同时执行。
图3为本申请实施例提供的另一种内存管理方法流程图。其中,与图2所示实施例中的相同之处的描述将简略带过。
301、第一处理设备为第一任务分配缓存池的第一缓存块。
302、第一处理设备将第一缓存块重新放入缓存池,并记录第一缓存块对应的第一任务位于的第一操作队列。
在一些实施例中,第一处理设备可记录重新放入缓存池的每个缓存块对应的任务位于的操作队列。也就是说,第一处理设备可记录有缓存池中当前分配有任务的各缓存块对应的操作队列。一个缓存块对应的操作队列为该缓存块分配的任务位于的操作队列。
在一些实施例中,第一处理设备在将第一缓存块重新放入缓存池之前,可释放该第一缓存块。举例来说,缓存池中的缓存块为第二处理设备的显存,第一处理设备在将第一缓存块重新放入缓存池之前,通过调用内存分配器的接口释放该第一缓存块。cudaFree接口为CUDA中释放显存的接口。在一些实施例中,释放第一缓存块可以是指将该第一缓存块放入缓存池,但是该第一缓存块不能被分配,例如将该第一缓存块的状态设置为不可用;将第一缓存块重新放入缓存池可以是指该第一缓存块能够被分配,例如将该第一缓存块的状态设置为可用。
303、第一处理设备在基于记录的第一任务位于的第一操作队列确定第一任务和第二任务位于的操作队列相同的情况下,为第二任务分配缓存池的第二缓存块。
步骤303为步骤302的一种可能的实现方式。第二缓存块中的至少一部分包含于第一缓存块。
在一些实施例中,第一处理设备在为第二任务分配缓存池的第二缓存块之前,可从缓存池中查找当前分配有任务的至少一个候选缓存块;步骤303的一种实现方式如下:基于至少一个候选缓存块当前分配的任务与第二任务之间的执行顺序关系,为第二任务分配从至少一个候选缓存块中确定的第二缓存块。
第一处理设备从缓存池中查找当前分配有任务的至少一个候选缓存块可以是:第一处理设备从缓存池中查找满足第二任务所需缓存大小的多个候选缓存;第一处理设备从多个候选缓存块中查找当前分配有任务的至少一个候选缓存块。示例性的,第一处理设备基于至少一个候选缓存块当前分配的任务与第二任务之间的执行顺序关系,为第二任务分配从至少一个候选缓存块中确定的第二缓存块可以是:从至少一个候选缓存块中选择当前分配的任务与第二任务按次序执行的候选缓存块,得到一个或多个目标缓存块(对应于第一缓存块);为第二任务分配从一个或多个目标缓存块中确定的第二缓存块。举例来说,第一处理设备从缓存池中查找到满足第二任务所需缓存大小的10个候选缓存块;从该10个候选缓存块中选择当前分配的任务与第二任务按次序执行的候选缓存块,得到目标缓存块;为该第二任务分配从该目标缓存块中确定的第二缓存块。
本申请实施例中,基于记录的第一任务位于的第一操作队列,可准确、快速地确定该第一任务和第二任务位于的操作队列相同,进而为该第二任务分配第二缓存块;能够提高内存利用率。
图4为本申请实施例提供的另一种内存管理方法流程图。其中,与图2所示实施例中的相同之处的描述将简略带过。
401、第一处理设备为第一任务分配缓存池的第一缓存块。
402、第一处理设备将第一缓存块重新放入缓存池,并记录第一缓存块对应的第一任务位于的第一操作队列。
403、第一处理设备从缓存池中查找满足第二任务所需缓存大小的多个候选缓存块。
若查找到满足第二任务所需缓存大小的至少一个候选缓存块,执行步骤404;若未查找到满足第二任务所需缓存大小的候选缓存块,执行步骤408。
404、第一处理设备从多个候选缓存块中查找当前分配有任务的至少一个候选缓存块。
若查找到分配有任务的至少一个候选缓存块,执行步骤405;若未查找到分配有任务的候选缓存块,执行步骤406。
405、第一处理设备基于至少一个候选缓存块当前分配的任务与第二任务之间的执行顺序关系,从至少一个候选缓存块中确定为第二任务分配的第二缓存块。
示例性的,步骤405的一种可能的实现方式如下:从至少一个候选缓存块中选择当前分配的任务与第二任务按次序执行的候选缓存块,得到一个或多个目标缓存块(如上述第一缓存块);从一个或多个目标缓存块中确定为第二任务分配的第二缓存块。步骤405对应于图2中的步骤202。
示例性的,步骤405的一种可能的实现方式如下:第一处理设备基于至少一个候选缓存块当前分配的任务与第二任务之间的执行顺序关系以及至少一个候选缓存块的大小,从至少一个候选缓存块中确定为第二任务分配的第二缓存块。举例来说,从至少一个候选缓存块中选择当前分配的任务与第二任务按次序执行的候选缓存块,得到一个或多个目标缓存块(如上述第一缓存块);从一个或多个目标缓存块中选取满足第二任务所需缓存大小的第二缓存块,并为第二任务分配第二缓存块,其中,作为一个例子,如果满足第二任务所需缓存大小的目标缓存块有多个,则可以从满足第二任务的需求的目标缓存块中选取最小的目标缓存块作为第二缓存块,但本公开实施例对此不做限定。
406、第一处理设备从缓存池中包括的当前未分配有任务的至少一个缓存块中确定分配给第二任务的第三缓存块。
407、第一处理设备为第二任务分配第三缓存块。
408、第一处理设备扩充缓存池,并从扩充后的缓存池中查找分配给第二任务的第四缓存块。
第四缓存块可以为满足第二任务所需缓存大小的缓存块。举例来说,如果缓存池中不存在满足第二计算任务需求的缓存块,则调用cudaMalloc接口从设备内存分配更多的显存,扩充缓存池。cudaMalloc接口是CUDA中分配显存的接口。
409、第一处理设备为第二任务分配第四缓存块。
这样,就完成了对第二任务的缓存分配。在一些实施例中,该方法还可以进一步包括410。
410、第一处理设备清空缓存池。
在一些实施例中,第一处理设备不需要调用第二处理设备执行任务时,可将缓存池中的缓存归还第二处理设备的设备内存。举例来说,第一处理设备调用cudaFree接口将缓存池中的显存归还给GPU(即第二处理设备),即清空缓存池。
本申请实施例中,第一处理设备先确定满足第二任务所需缓存大小的多个候选缓存块,再从该多个候选缓存块中优先选择当前分配有任务且分配的任务与第二任务按次序执行的缓存块;能够快速地为第二任务分配满足其需求的缓存块,并能够提高内存利用率。
图5为本申请实施例提供的另一种内存管理方法流程图。
501、第一处理设备为第一任务分配缓存池的第一缓存块。
502、第一处理设备将第一缓存块重新放入缓存池,并记录第一缓存块对应的第一任务位于的第一操作队列。
503、第一处理设备从缓存池中是否查找到当前分配有任务且满足第二任务需求的候选缓存块。
若查找到至少一个当前分配有任务且满足第二任务需求的候选缓存块,执行步骤504;若未查找到当前分配有任务且满足第二任务需求的候选缓存块,执行步骤505。
504、第一处理设备基于至少一个候选缓存块当前分配的任务与第二任务之间的执行顺序关系,为第二任务分配从至少一个候选缓存块中确定的第二缓存块。
至少一个候选缓存块为步骤503中查找到的缓存池中当前分配有任务且满足第二任务需求的缓存块。步骤504的实现方式可与步骤405的实现方式相同。
505、第一处理设备从缓存池中是否查找到当前未分配有任务且满足第二任务需求的缓存块。
若第一处理设备从缓存池中查找到当前未分配有任务且满足第二任务需求的缓存块,执行步骤506;若第一处理设备从缓存池中未查找到当前未分配有任务且满足第二任务需求的缓存块,执行步骤507。
506、第一处理设备从查找到的当前未分配有任务且满足第二任务需求的缓存块中确定分配给第二任务的第三缓存块。
507、第一处理设备扩充缓存池,并从扩充后的缓存池中查找分配给第二任务的第四缓存块。
本申请实施例中,优先查找从当前分配有任务且满足第二任务需求的缓存块中为第二任务分配缓存块,既能提高查找速度,又能提高内存复用率。
下面结合图6中的内存管理方法的时序图来进一步描述图2至图5中的内存管理方法。图6为本申请实施例提供的一种内存管理方法的时序图,对应于图2至图5中的内存管理方法。如图6所示,第一处理设备依次执行如下操作:分配1、提交任务1(对应于第一任务)、释放1、分配2、提交任务2(对应于第二任务)以及释放2;第二处理设备依次执行如下操作:任务1和任务2。其中,分配1表示第一处理设备为任务1分配第一缓存块,分配2表示第一处理设备为任务2分配第二缓存块;提交任务1表示第一处理设备将该任务1提交至第二处理设备的操作队列,提交任务2表示第一处理设备将任务2提交至第二处理设备的操作队列;释放1表示第一处理设备控制内存分配器释放第一缓存块以及将该第一缓存块重新放入缓存池,释放2表示第一处理设备控制内存分配器释放第二缓存块以及将该第二缓存块重新放入缓存池;任务1表示第二处理设备执行该任务1,任务2表示第二处理设备执行任务2。图6中,第一处理设备执行分配1所分配的第一缓存块和执行分配2所分配的第二缓存块相同或者存在重叠。也就是说,第二处理设备执行相同操作队列中的任务可复用缓存块。应理解,在一些实施例中,第二处理设备执行第一计算任务使用的第一缓存块和执行第二计算任务使用的第二缓存块相同。举例来说,第二处理设备为GPU,GPU执行同一操作队列的计算任务可复用同一块显存。如图6所示,第一处理设备执行提交任务1、释放1、分配2以及提交任务2的操作时,第二处理设备同时执行任务1;第二处理设备执行任务2时,第一处理设备执行释放2的操作。可见,第一处理设备不需要等待第二处理设备完成任务1,就执行释放1、分配2以及提交任务2的操作。也就是说,第一处理设备和第二处理设备不需要进行同步,能够实现异步计算模式,提高计算性能。
本申请实施例中,第二处理设备可根据任务被执行的先后顺序复用缓存,第一处理设备和第二处理设备能够实现异步计算模式;既能提高内存的利用率,又能提高计算效率。
图7为本申请实施例提供的另一种内存管理方法流程图。如图7所示,该方法包括:
701、第一处理设备为第三任务分配缓存池中的第五缓存块。
步骤701的实现方式可以与步骤301的实现方式类似。
702、第一处理设备将第三任务提交至第二处理设备的操作队列。
在一些实施例中,第一处理设备将第三任务提交至第二处理设备的操作队列之后,立即释放第五缓冲块。
703、第一处理设备检查第三任务是否被完成。
若是,执行步骤704;若否,再次执行步骤703。在一些实施例中,第一处理设备可定期(例如每隔5ms、10ms等)检查第三任务是否被完成;若检查到第三任务被完成,则调用内存分配器将第五缓存块重新放入缓存池;若否,继续定期检查。在一些实施例中,步骤703可替换为:在每次释放缓存块(例如第五缓存块)之前,检查第三任务是否被完成。在一些实施例中,步骤703可替换为:在每次申请缓存块(例如第五缓存块)之前,检查第三任务是否被完成。应理解,第一处理设备还可以采用其他方式检查第三任务是否被完成,本申请实施例不作限定。
704、第一处理设备将第五缓存块重新放入缓存池。
705、第一处理设备为第四任务分配缓存池中的第六缓存块。
第五缓存块和第六缓存块不存储重叠。
706、第一处理设备将第四任务提交至第二处理设备的操作队列。
应理解,第二处理设备占用第五缓存块执行第三任务,以及占用第六缓存块执行第四任务。
本申请实施例中,第一处理设备定期检查第二处理设备上的任务是否完成,在任一计算任务完成时释放该任一计算任务对应的缓存,不需要等待第二处理设备上所有的计算任务完成;能够提高处理效率。
下面结合图8中的内存管理方法的时序图来进一步描述图7的内存管理方法。图8为本申请实施例提供的一种内存管理方法的时序图,对应于图7中的内存管理方法。如图8所示,第一处理设备依次执行如下操作:分配1、提交任务1(对应于第三任务)、释放1、分配2、提交任务2(对应于第四任务)以及释放2;第二处理设备依次执行如下操作:任务1和任务2。图8中,分配1表示第一处理设备为任务1分配缓存池中的第五缓存块,分配2表示第一处理设备为任务2分配缓存池中的第六缓存块;提交任务1表示第一处理设备将该任务1提交至第二处理设备的操作队列,提交任务2表示第一处理设备将该任务2提交至第二处理设备的操作队列;释放1表示第一处理设备释放第五缓存块,释放2表示第一处理设备释放第六缓存块;任务1表示第二处理设备执行该任务1,任务2表示第二处理设备执行任务2。图8中,第一处理设备执行分配1所分配的第五缓存块和执行分配2所分配的第六缓存块不存在任何相同的缓存。也就是说,第二处理设备执行相同操作队列中的计算任务不能复用缓存块。对比针对图6的时序图的描述,图8的时序图中释放1的操作为第一处理设备释放第五缓存块,图6的时序图中释放1的操作为第一处理设备释放第一缓存块以及将该第一缓存块重新放入缓存池;图8的时序图中释放2的操作为第一处理设备释放第六缓存块,图6的时序图中释放2的操作为第一处理设备释放第二缓存块以及将该第二缓存块重新放入缓存池。图7的内存管理方法中,第一处理设备在将任一计算任务提交至第二处理设备的操作队列之后,定期检查该任一计算任务是否被第二处理设备完成,直到该任一计算任务被完成才会将该任一计算任务占用的内存空间重新放入缓存池。也就是说,第一处理设备分配给第二处理设备执行某个计算任务的缓存块,直到该计算任务被完成,该缓存块才会被重新放入缓存池。如图8所示,第一处理设备执行提交任务1、释放1、分配2以及任务2的操作时,第二处理设备同时执行任务1;第二处理设备执行任务2时,第一处理设备执行释放2的操作。可见,第一处理设备不需要等待第二处理设备完成任务1,就执行释放1、分配2以及计算2的操作。也就是说,第一处理设备和第二处理设备不需要进行同步,能够实现异步计算模式,提高计算性能。
本申请实施例中,第一处理设备和第二处理设备能够实现异步计算模式,能够提高内存的利用率。
下面介绍可实现前述实施例提供的内存管理方法的数据处理装置的结构。
图9为本申请实施例提供的一种数据处理装置的结构示意图,如图9所示,该数据处理装置包括:
内存分配单元901,用于为第一任务分配缓存池的第一缓存块;
处理单元902,用于确定第二处理设备需要按次序执行第二任务和第一任务的情况;
内存分配单元901,还用于在处理单元确定第二处理设备需要按次序执行第二任务和第一任务的情况下,为第二任务分配缓存池的第二缓存块,其中,第二缓存块中的至少一部分包含于第一缓存块。
处理单元和内存分配单元可以是同一个单元,也可以是两个独立的单元。在一些可能的实施方式中,处理单元为处理器,例如CPU,内存分配单元为一个硬件。在一些可能的实施方式中,处理单元为处理器,例如CPU,内存分配单元的功能由处理器运行的软件或程序实现。也就是说,处理单元的功能和内存分配单元的功能均由处理器实现。
在一个可能的实现方式中,处理单元902,还用于将第一任务发送至第二处理设备;
内存分配单元901,还用于响应于将第一任务发送至第二处理设备,将第一缓存块重新放入缓存池。
在一个可能的实现方式中,处理单元902,还用于记录第一缓存块对应的第一任务位于的第一操作队列;
处理单元902,具体用于基于记录的第一任务位于的第一操作队列,确定第一任务和第二任务位于的操作队列相同。
在一个可能的实现方式中,内存分配单元901,还用于在第二处理设备执行第一任务的过程中,为第二任务分配缓存池的第二缓存块。
在一个可能的实现方式中,内存分配单元901,还用于从缓存池中查找当前分配有任务的至少一个候选缓存块;
内存分配单元901,具体用于在处理单元基于至少一个候选缓存块当前分配的任务与第二任务之间的执行顺序关系确定第二处理设备需要按次序执行第二任务和第一任务情况下,为第二任务分配从至少一个候选缓存块中确定的第二缓存块。
在一个可能的实现方式中,内存分配单元901,具体用于从缓存池中查找满足第二任务所需缓存大小的多个候选缓存块;从多个候选缓存块中查找当前分配有任务的至少一个候选缓存块。
在一个可能的实现方式中,内存分配单元901,具体用于在处理单元基于至少一个候选缓存块当前分配的任务与第二任务之间的执行顺序关系确定第二处理设备需要按次序执行第二任务和第一任务情况下,基于至少一个候选缓存块的大小为第二任务分配从至少一个候选缓存块中确定的第二缓存块。
在一个可能的实现方式中,内存处理单元901,还用于在处理单元确定至少一个候选缓存块中不包括满足第二任务需求的缓存块的情况下,从缓存池中包括的当前未分配有任务的至少一个缓存块中确定分配给第二任务的目标缓存块。
在一个可能的实现方式中,内存处理单元901,还用于在缓存池中未查找到满足第二任务需求的缓存块的情况下,扩充缓存池;从扩充后的缓存池中查找分配给第二任务的目标缓存块。
图10为本申请实施例提供的另一种数据处理装置的结构示意图,如图10所示,该数据处理装置包括:第一处理器1001、第二处理器1002、存储器1003;其中,存储器用于存储指令和数据,第一处理器用于执行存储器存储的指令,使得第一处理器执行如内存管理方法,第二处理设备用于利用第一处理设备分配的缓存块执行第一处理器发送的任务。存储器1003可包括第二处理器1002使用的设备内存以及第一处理器1001的内存。示例性的,第一处理设备为CPU,第二处理设备为GPU,存储器1003包括GPU的显存。
在本发明的实施例中提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现:第一处理设备为第一任务分配缓存池的第一缓存块;第一处理设备在确定第二处理设备需要按次序执行第二任务和第一任务的情况下,为第二任务分配缓存池的第二缓存块,其中,第二缓存块中的至少一部分包含于第一缓存块。
本申请实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行前述实施例所提供的内存管理方法。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (21)
1.一种内存管理方法,其特征在于,所述方法包括:
第一处理设备为第一任务分配缓存池的第一缓存块;
所述第一处理设备在确定第二处理设备需要按次序执行第二任务和所述第一任务的情况下,为所述第二任务分配所述缓存池的第二缓存块,其中,所述第二缓存块中的至少一部分包含于所述第一缓存块。
2.根据权利要求1所述的方法,其特征在于,所述第一处理设备为第一任务分配缓存池的第一缓存块之后,所述方法还包括:
所述第一处理设备响应于将所述第一任务发送至所述第二处理设备,将所述第一缓存块重新放入所述缓存池。
3.根据权利要求1或2所述的方法,其特征在于,所述第一处理设备为第一任务分配缓存池的第一缓存块之后,所述方法还包括:
所述第一处理设备记录所述第一缓存块对应的所述第一任务位于的第一操作队列;
所述确定第二处理设备需要按次序执行第二任务和所述第一任务的情况包括:
所述第一处理设备基于记录的所述第一任务位于的所述第一操作队列,确定所述第一任务和所述第二任务位于的操作队列相同。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述为所述第二任务分配所述缓存池的第二缓存块包括:
所述第一处理设备在所述第二处理设备执行所述第一任务的过程中,为所述第二任务分配所述缓存池的所述第二缓存块。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述为所述第二任务分配所述缓存池的第二缓存块之前,所述方法还包括:
所述第一处理设备从所述缓存池中查找当前分配有任务的至少一个候选缓存块;
所述第一处理设备在确定第二处理设备需要按次序执行第二任务和所述第一任务的情况下,为所述第二任务分配所述缓存池的第二缓存块,包括:
所述第一处理设备基于所述至少一个候选缓存块当前分配的任务与所述第二任务之间的执行顺序关系,为所述第二任务分配从所述至少一个候选缓存块中确定的所述第二缓存块。
6.根据权利要求5所述的方法,其特征在于,所述第一处理设备从所述缓存池中查找当前分配有任务的至少一个候选缓存块,包括:
所述第一处理设备从所述缓存池中查找满足所述第二任务所需缓存大小的多个候选缓存块;
所述第一处理设备从所述多个候选缓存块中查找当前分配有任务的至少一个候选缓存块。
7.根据权利要求5或6所述的方法,其特征在于,所述第一处理设备基于所述至少一个候选缓存块当前分配的任务与所述第二任务之间的执行顺序关系,为所述第二任务分配从所述至少一个候选缓存块中确定的所述第二缓存块,包括:
第一处理设备基于所述至少一个候选缓存块当前分配的任务与所述第二任务之间的执行顺序关系以及所述至少一个候选缓存块的大小,为所述第二任务分配从所述至少一个候选缓存块中确定的所述第二缓存块。
8.根据权利要求5至7中任一项所述的方法,其特征在于,所述方法还包括:
所述第一处理设备确定所述至少一个候选缓存块中不包括满足所述第二任务需求的缓存块的情况下,从所述缓存池中包括的当前未分配有任务的至少一个缓存块中确定分配给所述第二任务的目标缓存块。
9.根据权利要求1至8中任一项所述的方法,其特征在于,所述方法还包括:
所述第一处理设备在所述缓存池中未查找到满足所述第二任务需求的缓存块的情况下,扩充所述缓存池;
所述第一处理设备从扩充后的所述缓存池中查找分配给所述第二任务的目标缓存块。
10.一种数据处理装置,其特征在于,包括:
内存分配单元,用于为第一任务分配缓存池的第一缓存块;
处理单元,用于确定第二处理设备需要按次序执行第二任务和所述第一任务的情况;
所述内存分配单元,还用于在所述处理单元确定所述第二处理设备需要按次序执行所述第二任务和所述第一任务的情况下,为所述第二任务分配所述缓存池的第二缓存块,其中,所述第二缓存块中的至少一部分包含于所述第一缓存块。
11.根据权利要求10所述的数据处理装置,其特征在于,
所述处理单元,还用于将所述第一任务发送至所述第二处理设备;
所述内存分配单元,还用于响应于将所述第一任务发送至所述第二处理设备,将所述第一缓存块重新放入所述缓存池。
12.根据权利要求10或11所述的数据处理装置,其特征在于,
所述处理单元,还用于记录所述第一缓存块对应的所述第一任务位于的第一操作队列;
所述处理单元,具体用于基于记录的所述第一任务位于的所述第一操作队列,确定所述第一任务和所述第二任务位于的操作队列相同。
13.根据权利要求10至12任一项所述的数据处理装置,其特征在于,
所述内存分配单元,还用于在所述第二处理设备执行所述第一任务的过程中,为所述第二任务分配所述缓存池的所述第二缓存块。
14.根据权利要求10至13任一项所述的数据处理装置,其特征在于,
所述内存分配单元,还用于从所述缓存池中查找当前分配有任务的至少一个候选缓存块;
所述内存分配单元,具体用于在处理单元基于所述至少一个候选缓存块当前分配的任务与所述第二任务之间的执行顺序关系确定所述第二处理设备需要按次序执行所述第二任务和所述第一任务情况下,为所述第二任务分配从所述至少一个候选缓存块中确定的所述第二缓存块。
15.根据权利要求14所述的数据处理装置,其特征在于,
所述内存分配单元,具体用于从所述缓存池中查找满足所述第二任务所需缓存大小的多个候选缓存块;从所述多个候选缓存块中查找当前分配有任务的至少一个候选缓存块。
16.根据权利要求14或15所述的数据处理装置,其特征在于,
所述内存分配单元,具体用于在所述处理单元基于所述至少一个候选缓存块当前分配的任务与所述第二任务之间的执行顺序关系确定所述第二处理设备需要按次序执行所述第二任务和所述第一任务情况下,基于所述至少一个候选缓存块的大小为所述第二任务分配从所述至少一个候选缓存块中确定的所述第二缓存块。
17.根据权利要求14至16任一项所述的数据处理装置,其特征在于,
所述内存处理单元,还用于在处理单元确定所述至少一个候选缓存块中不包括满足所述第二任务需求的缓存块的情况下,从所述缓存池中包括的当前未分配有任务的至少一个缓存块中确定分配给所述第二任务的目标缓存块。
18.根据权利要求10至17任一项所述的数据处理装置,其特征在于,
所述内存处理单元,还用于在所述缓存池中未查找到满足所述第二任务需求的缓存块的情况下,扩充所述缓存池;从扩充后的所述缓存池中查找分配给所述第二任务的目标缓存块。
19.一种电子设备,其特征在于,包括存储器和第一处理器,其中,所述存储器用于存储指令,所述第一处理器用于执行所述存储器存储的指令,使得所述第一处理器执行如权利要求1至9任一项所述的方法。
20.根据权利要求19所述的电子设备,其特征在于,所述电子设备还包括第二处理器,所述第二处理器用于利用所述第一处理器分配的缓存块执行所述第一处理器发送的任务。
21.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,使所述处理器执行权利要求1至9任意一项所述的方法。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010561183.XA CN111736998A (zh) | 2020-06-18 | 2020-06-18 | 内存管理方法和相关产品 |
JP2021570921A JP2022539956A (ja) | 2020-06-18 | 2021-03-05 | メモリ管理方法及び関連製品 |
PCT/CN2021/079390 WO2021253875A1 (zh) | 2020-06-18 | 2021-03-05 | 内存管理方法和相关产品 |
KR1020217042198A KR20220010036A (ko) | 2020-06-18 | 2021-03-05 | 메모리 관리 방법 및 관련 제품 |
TW110108324A TWI783401B (zh) | 2020-06-18 | 2021-03-09 | 記憶體管理方法和相關產品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010561183.XA CN111736998A (zh) | 2020-06-18 | 2020-06-18 | 内存管理方法和相关产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111736998A true CN111736998A (zh) | 2020-10-02 |
Family
ID=72649904
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010561183.XA Pending CN111736998A (zh) | 2020-06-18 | 2020-06-18 | 内存管理方法和相关产品 |
Country Status (5)
Country | Link |
---|---|
JP (1) | JP2022539956A (zh) |
KR (1) | KR20220010036A (zh) |
CN (1) | CN111736998A (zh) |
TW (1) | TWI783401B (zh) |
WO (1) | WO2021253875A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021253875A1 (zh) * | 2020-06-18 | 2021-12-23 | 上海商汤智能科技有限公司 | 内存管理方法和相关产品 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018077292A1 (zh) * | 2016-10-28 | 2018-05-03 | 北京市商汤科技开发有限公司 | 数据处理方法和系统、电子设备 |
CN108829610A (zh) * | 2018-04-02 | 2018-11-16 | 浙江大华技术股份有限公司 | 一种神经网络前向计算过程中的内存管理方法及设备 |
CN109271327A (zh) * | 2017-07-18 | 2019-01-25 | 杭州海康威视数字技术股份有限公司 | 内存管理方法及装置 |
CN110308982A (zh) * | 2018-03-20 | 2019-10-08 | 华为技术有限公司 | 一种共享内存复用方法及装置 |
CN110312156A (zh) * | 2018-03-27 | 2019-10-08 | 腾讯科技(深圳)有限公司 | 一种视频缓存方法、装置及可读存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7353339B2 (en) * | 2003-12-24 | 2008-04-01 | Intel Corporation | Adaptive caching |
AU2011213795A1 (en) * | 2011-08-19 | 2013-03-07 | Canon Kabushiki Kaisha | Efficient cache reuse through application determined scheduling |
US10509727B1 (en) * | 2018-09-10 | 2019-12-17 | Mediatek Inc. | Method and apparatus for performing task-level cache management in electronic device |
CN111736998A (zh) * | 2020-06-18 | 2020-10-02 | 上海商汤智能科技有限公司 | 内存管理方法和相关产品 |
-
2020
- 2020-06-18 CN CN202010561183.XA patent/CN111736998A/zh active Pending
-
2021
- 2021-03-05 JP JP2021570921A patent/JP2022539956A/ja not_active Withdrawn
- 2021-03-05 KR KR1020217042198A patent/KR20220010036A/ko active Search and Examination
- 2021-03-05 WO PCT/CN2021/079390 patent/WO2021253875A1/zh active Application Filing
- 2021-03-09 TW TW110108324A patent/TWI783401B/zh not_active IP Right Cessation
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018077292A1 (zh) * | 2016-10-28 | 2018-05-03 | 北京市商汤科技开发有限公司 | 数据处理方法和系统、电子设备 |
CN109271327A (zh) * | 2017-07-18 | 2019-01-25 | 杭州海康威视数字技术股份有限公司 | 内存管理方法及装置 |
CN110308982A (zh) * | 2018-03-20 | 2019-10-08 | 华为技术有限公司 | 一种共享内存复用方法及装置 |
CN110312156A (zh) * | 2018-03-27 | 2019-10-08 | 腾讯科技(深圳)有限公司 | 一种视频缓存方法、装置及可读存储介质 |
CN108829610A (zh) * | 2018-04-02 | 2018-11-16 | 浙江大华技术股份有限公司 | 一种神经网络前向计算过程中的内存管理方法及设备 |
Non-Patent Citations (1)
Title |
---|
李韦: "面向深度学习的多媒体流处理框架研究与应用", 中国优秀硕士学位论文全文数据库 社会科学Ⅱ辑, 15 September 2019 (2019-09-15), pages 127 - 285 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021253875A1 (zh) * | 2020-06-18 | 2021-12-23 | 上海商汤智能科技有限公司 | 内存管理方法和相关产品 |
Also Published As
Publication number | Publication date |
---|---|
TW202201231A (zh) | 2022-01-01 |
TWI783401B (zh) | 2022-11-11 |
KR20220010036A (ko) | 2022-01-25 |
WO2021253875A1 (zh) | 2021-12-23 |
JP2022539956A (ja) | 2022-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106371894B (zh) | 一种配置方法、装置和数据处理服务器 | |
US8893148B2 (en) | Performing setup operations for receiving different amounts of data while processors are performing message passing interface tasks | |
US9047196B2 (en) | Usage aware NUMA process scheduling | |
US8700838B2 (en) | Allocating heaps in NUMA systems | |
US8312464B2 (en) | Hardware based dynamic load balancing of message passing interface tasks by modifying tasks | |
US8108876B2 (en) | Modifying an operation of one or more processors executing message passing interface tasks | |
US8127300B2 (en) | Hardware based dynamic load balancing of message passing interface tasks | |
KR101626378B1 (ko) | 병렬도를 고려한 병렬 처리 장치 및 방법 | |
US9875139B2 (en) | Graphics processing unit controller, host system, and methods | |
CN102667714B (zh) | 支持访问由操作系统环境外的资源提供的功能的方法和系统 | |
US20090064166A1 (en) | System and Method for Hardware Based Dynamic Load Balancing of Message Passing Interface Tasks | |
US6985976B1 (en) | System, method, and computer program product for memory management for defining class lists and node lists for allocation and deallocation of memory blocks | |
KR20070090649A (ko) | 멀티 코어 시스템에서 협력적 스케줄링을 제공하는 장치 및방법 | |
CN107977275B (zh) | 基于消息队列的任务处理方法及相关设备 | |
JP5030647B2 (ja) | 複数処理ノードを含むコンピュータ・システムでプログラムをロードする方法、該プログラムを含むコンピュータ可読媒体、及び、並列コンピュータ・システム | |
KR102563648B1 (ko) | 멀티 프로세서 시스템 및 그 구동 방법 | |
TWI783401B (zh) | 記憶體管理方法和相關產品 | |
US20150212859A1 (en) | Graphics processing unit controller, host system, and methods | |
CN112346835B (zh) | 一种基于协程的调度处理方法及系统 | |
US20090187911A1 (en) | Computer device with reserved memory for priority applications | |
CN111310638A (zh) | 一种数据处理方法、装置及计算机可读存储介质 | |
CN113268356B (zh) | 基于LINUX系统的多GPU板卡bounding的系统、方法及介质 | |
US9619277B2 (en) | Computer with plurality of processors sharing process queue, and process dispatch processing method | |
CN118034846A (zh) | 调度方法、装置、设备、可读存储介质及车辆 | |
CN114168344A (zh) | 一种gpu资源分配方法、装置、设备和可读存储介质 |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40029909 Country of ref document: HK |