CN114398182A - 用于对gpu显存复用方案进行优化的方法及装置 - Google Patents
用于对gpu显存复用方案进行优化的方法及装置 Download PDFInfo
- Publication number
- CN114398182A CN114398182A CN202210071431.1A CN202210071431A CN114398182A CN 114398182 A CN114398182 A CN 114398182A CN 202210071431 A CN202210071431 A CN 202210071431A CN 114398182 A CN114398182 A CN 114398182A
- Authority
- CN
- China
- Prior art keywords
- memory
- sequence
- allocation
- objects
- memory object
- 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
- 238000000034 method Methods 0.000 title claims abstract description 101
- 230000005012 migration Effects 0.000 claims abstract description 75
- 238000013508 migration Methods 0.000 claims abstract description 75
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 69
- 230000008569 process Effects 0.000 claims abstract description 61
- 238000012545 processing Methods 0.000 claims abstract description 52
- 230000002068 genetic effect Effects 0.000 claims abstract description 24
- 238000012163 sequencing technique Methods 0.000 claims abstract description 14
- 230000035772 mutation Effects 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 12
- 238000010801 machine learning Methods 0.000 claims description 9
- 230000008859 change Effects 0.000 claims description 8
- 238000004148 unit process Methods 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 39
- 238000013135 deep learning Methods 0.000 description 10
- 239000012634 fragment Substances 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 230000000717 retained effect Effects 0.000 description 4
- 238000000638 solvent extraction Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000013136 deep learning model Methods 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 230000007786 learning performance Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000010977 jade Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012549 training 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/12—Computing arrangements based on biological models using genetic models
- G06N3/126—Evolutionary algorithms, e.g. genetic algorithms or genetic programming
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Physiology (AREA)
- Genetics & Genomics (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Memory System (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例提供了用于对GPU显存复用方案进行优化的方法及装置。在该方法中,确定应用程序运行所需访问的内存对象以及各个内存对象的访问次序和数据量;根据访问次序的先后顺序以及数据量大小顺序对各个内存对象进行排序,以得到内存对象序列;从内存对象序列中选择第一数量的数据量最大的内存对象;根据所选择的内存对象的数据量将GPU显存划分为包括第一数量的内存段;循环执行以下内存对象分配过程,直至生成第二数量的分配序列:将内存对象序列中未分配的其他内存对象分配至各个内存段中,以生成分配序列;以及利用遗传算法以及数据迁移量对多个分配序列进行处理,以选出数据迁移量最小的分配序列作为GPU显存复用方案。
Description
技术领域
本说明书实施例涉及计算机技术领域,具体地,涉及用于对GPU显存复用方案进行优化的方法及装置。
背景技术
GPU是一种广泛使用的能够减少对CPU依赖、并进行部分原本CPU工作的微处理器,并且具有高性能计算加速特点,广泛用于AI(Artificial Intelligence)、机器学习以及在线服务等。GPU在应用程序运行过程中,大多数的功能任务都运行在GPU上,GPU为运行在其上的功能任务提供显存,以供各个功能任务正常运行。
由于GPU显存的局限性,无法将应用程序中需要访问的所有内存对象都同时存储在GPU显存中,因此,为了提高访问内存对象的效率且实现对GPU显存的充分利用,需要对GPU显存进行复用。目前,有的应用程序(比如,机器学习)中需要访问的内存对象数量较大,较大数量的内存对象可以通过不同的复用方案来实现对GPU显存的复用。比如,在GPU显存中给定一个显存地址空间,在某一时刻将待访问的内存对象R1存储至该显存地址空间中,在该内存对象R1访问完成后,将其迁移至CPU内存中,并将下一时刻待访问的内存对象R2存储至该显存地址空间中,以此方式来复用GPU显存。
发明内容
鉴于上述,本说明书实施例提供了用于对GPU显存复用方案进行优化的方法及装置。通过本说明书实施例的技术方案,能够基于全局选出最优的GPU显存复用方案,减少GPU显存复用过程中的数据迁移量,从而提升机器学习的性能。
根据本说明书实施例的一个方面,提供了一种用于对GPU显存复用方案进行优化的方法,包括:确定应用程序运行所需访问的内存对象以及各个内存对象的访问次序和数据量;根据所述访问次序的先后顺序以及所述数据量大小顺序对所述各个内存对象进行排序,以得到所述各个内存对象按照数据量从大到小的顺序排列的内存对象序列;从所述内存对象序列中选择第一数量的数据量最大的内存对象,其中,所选择的内存对象的数据量之和不大于所述GPU显存;根据所选择的内存对象的数据量将所述GPU显存划分为包括所述第一数量的内存段,其中,所划分的内存段与所选择的内存对象一一对应,各个内存段的存储空间大小与对应的内存对象的数据量大小相同;循环执行以下内存对象分配过程,直至生成第二数量的分配序列:将所述内存对象序列中未分配的其他内存对象分配至各个内存段中,以生成由所述各个内存对象和所述各个内存段构成的分配序列,其中,不同轮次的内存对象分配过程所生成的分配序列不同,被分配在同一内存段中的各个内存对象复用该内存段的存储空间;以及利用遗传算法以及数据迁移量对由多轮内存对象分配过程所生成的多个分配序列进行处理,以选出数据迁移量最小的分配序列作为GPU显存复用方案。
根据本说明书实施例的另一方面,还提供一种用于对GPU显存复用方案进行优化的装置,包括:内存对象确定单元,确定应用程序运行所需访问的内存对象以及各个内存对象的访问次序和数据量;内存对象排序单元,根据所述访问次序的先后顺序以及所述数据量大小顺序对所述各个内存对象进行排序,以得到所述各个内存对象按照数据量从大到小的顺序排列的内存对象序列;内存对象选择单元,从所述内存对象序列中选择第一数量的数据量最大的内存对象,其中,所选择的内存对象的数据量之和不大于所述GPU显存;内存段划分单元,根据所选择的内存对象的数据量将所述GPU显存划分为包括所述第一数量的内存段,其中,所划分的内存段与所选择的内存对象一一对应,各个内存段的存储空间大小与对应的内存对象的数据量大小相同;内存对象分配单元,将所述内存对象序列中未分配的其他内存对象分配至各个内存段中,以生成由所述各个内存对象和所述各个内存段构成的分配序列,其中,不同轮次的内存对象分配过程所生成的分配序列不同,被分配在同一内存段中的各个内存对象复用该内存段的存储空间;以及分配序列处理单元,利用遗传算法以及数据迁移量对由多轮内存对象分配过程所生成的多个分配序列进行处理,以选出数据迁移量最小的分配序列作为GPU显存复用方案,其中,所述内存对象分配单元循环执行,直至生成第二数量的分配序列。
根据本说明书实施例的另一方面,还提供一种电子设备,包括:至少一个处理器,与所述至少一个处理器耦合的存储器,以及存储在所述存储器上的计算机程序,所述至少一个处理器执行所述计算机程序来实现如上述任一所述的用于对GPU显存复用方案进行优化的方法。
根据本说明书实施例的另一方面,还提供一种计算机可读存储介质,其存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的用于对GPU显存复用方案进行优化的方法。
根据本说明书实施例的另一方面,还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上任一所述的用于对GPU显存复用方案进行优化的方法。
附图说明
通过参照下面的附图,可以实现对于本说明书实施例内容的本质和优点的进一步理解。在附图中,类似组件或特征可以具有相同的附图标记。
图1示出了根据本说明书实施例的用于对GPU显存复用方案进行优化的方法的一个示例的流程图。
图2A示出了根据本说明书实施例的各个内存对象进行排序的一个示例的示意图。
图2B示出了根据本说明书实施例的各个内存对象进行排序的另一个示例的示意图。
图3示出了根据本说明书实施例的GPU显存划分的一个示例的示意图。
图4示出了根据本说明书实施例的由第二数量的分配序列构成的候选种群的一个示例的示意图。
图5示出了根据本说明书实施例的内存对象分配过程的一个示例的流程图。
图6示出了根据本说明书实施例的属于同一内存段的各个内存对象复用该内存段的一个示例的示意图。
图7示出了根据本说明书实施例的利用遗传算法确定GPU显存复用方案的一个示例的流程图。
图8示出了根据本说明书实施例的利用交叉算法对分配序列进行处理的一个示例的流程图。
图9示出了根据本说明书实施例的利用交叉算法对两个分配序列进行处理的一个示例的示意图。
图10示出了根据本说明书实施例的利用变异算法对分配序列进行处理的一个示例的流程图。
图11示出了根据本说明书实施例的利用变异算法对分配序列进行处理的一个示例的示意图。
图12示出了根据本说明书实施例的用于对GPU显存复用方案进行优化的装置的一个示例的方框图。
图13示出了根据本说明书实施例的分配序列处理单元的一个示例的方框图。
图14示出了根据本说明书实施例的内存对象排序单元的一个示例的方框图。
图15示出了根据本说明书实施例的内存对象分配单元的一个示例的方框图。
图16示出了本说明书实施例的用于实现GPU显存复用方案优化方法的电子设备的方框图。
具体实施方式
以下将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本说明书实施例内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。另外,相对一些示例所描述的特征在其它例子中也可以进行组合。
如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。
GPU是一种广泛使用的能够减少对CPU依赖、并进行部分原本CPU工作的微处理器,并且具有高性能计算加速特点,广泛用于AI(Artificial Intelligence)、机器学习以及在线服务等。GPU在应用程序运行过程中,大多数的功能任务都运行在GPU上,GPU为运行在其上的功能任务提供显存,以供各个功能任务正常运行。
由于GPU显存的局限性,无法将应用程序中需要访问的所有内存对象都同时存储在GPU显存中,因此,为了提高访问内存对象的效率且实现对GPU显存的充分利用,需要对GPU显存进行复用。目前,有的应用程序(比如,机器学习)中需要访问的内存对象数量较大,较大数量的内存对象可以通过不同的复用方案来实现对GPU显存的复用。比如,在GPU显存中给定一个显存地址空间,在某一时刻将待访问的内存对象R1存储至该显存地址空间中,在该内存对象R1访问完成后,将其迁移至CPU内存中,并将下一时刻待访问的内存对象R2存储至该显存地址空间中,以此方式来复用GPU显存。
不同的GPU显存复用方案所需执行的总数据迁移量不同,并且GPU显存的复用效果可以以数据迁移量来衡量。然而,目前执行的GPU显存复用方案仅能够做到局部最优解,无法在全局的基础上得到接近全局的最优解,在无法实现接近全局最优解的GPU显存复用方案也会造成更多的内存碎片产生。
鉴于上述,本说明书实施例提供了用于对GPU显存复用方案进行优化的方法及装置。在该方法中,确定应用程序运行所需访问的内存对象以及各个内存对象的访问次序和数据量;根据访问次序的先后顺序以及数据量大小顺序对各个内存对象进行排序,以得到各个内存对象按照数据量从大到小的顺序排列的内存对象序列;从内存对象序列中选择第一数量的数据量最大的内存对象;根据所选择的内存对象的数据量将GPU显存划分为包括第一数量的内存段;循环执行以下内存对象分配过程,直至生成第二数量的分配序列:将内存对象序列中未分配的其他内存对象分配至各个内存段中,以生成由各个内存对象和各个内存段构成的分配序列;以及利用遗传算法以及数据迁移量对由多轮内存对象分配过程生成的多个分配序列进行处理,以选出数据迁移量最小的分配序列作为GPU显存复用方案。通过本说明书实施例的技术方案,能够基于全局选出最优的GPU显存复用方案,减少GPU显存复用过程中的数据迁移量,从而提升GPU的运行性能。
下面结合附图对本说明书实施例提供的用于对GPU显存复用方案进行优化的方法及装置进行详细说明。
图1示出了根据本说明书实施例的用于对GPU显存复用方案进行优化的方法的一个示例100的流程图。
图1所示的方法可以应用于GPU运行应用程序之前,在GPU运行应用程序之前,通过本说明书实施例的技术方案可以确定出在全局基础上接近全局最优的GPU显存复用方案,并在GPU运行应用程序时应用该GPU显存复用方案,以实现在GPU运行应用程序的过程中减少数据迁移量,从而提升GPU的运行性能。
图1所示的方法可以由GPU来执行,还可以由GPU以外的装置来执行。当由GPU以外的装置来执行时,该装置可以根据本说明书实施例的方案选出数据迁移量最小的GPU显存复用方案,并将该GPU显存复用方案发送给GPU,以使该GPU按照该GPU显存复用方案来运行应用程序。
如图1所示,在1100,确定应用程序运行所需访问的内存对象以及各个内存对象的访问次序和数据量。
在本说明书实施例中,内存对象可以包括应用程序运行时访问的参数、值等,内存对象可以存储在物理内存中。当内存对象被运行的应用程序调用时,应用程序可以从所存储的物理内存中读取内存对象。例如,深度学习过程所需访问的内存对象可以包括学习率、权重、层数等参数。
在本说明书实施例中,应用程序的运行规则及运行过程固定且确定,从而该应用程序的运行过程可以被预知,基于此,在应用程序运行之前,可以预先确定应用程序运行所需访问的内存对象。在一个示例中,GPU待运行的可以是用于机器学习的应用程序,该GPU被用于机器学习的应用场景。在一个示例中,GPU待运行的可以是用于深度学习的应用程序,从而该GPU可以用于深度学习。下面以深度学习为例进行说明。
在深度学习中,深度学习模型中的各个网络层确定,每个网络层的权重也确定,从而,深度学习模型的整个网络结构是确定的。基于此,输入深度学习模型的训练样本按序依次被各个网络层进行相应处理,直至输出层输出预测结果。在此深度学习过程中,深度学习所需访问的各个内存对象的访问次序固定。
在本说明书实施例中,各个内存对象的访问次序可以根据该各个内存对象在深度学习中的访问顺序所确定。在一个示例中,访问次序可以用时间点来表示,该时间点可以是绝对时间,比如,一个内存对象在深度学习中的访问时间点是9点27分31秒。
在另一个示例中,访问次序可以用相对时间来表示,相对时间可以是以访问的第一个内存对象为基准,其他各个内存对象的访问时间点均以第一个内存对象为参照对象所确定。在该示例中,第一个内存对象的访问次序是0,其他各个内存对象的访问次序可以是与第一个内存对象的访问时间点之间的时间差。
在另一个示例中,各个内存对象的访问次序可以用表示顺序的标识来表示,表示顺序的标识可以包括数字、字母等,比如,各个内存对象的访问次序可以表示为:1、2、3、4……。
在本说明书实施例中,各个内存对象的数据量可以用于表征各个内存对象在物理存储空间中所需占用的存储空间大小,从而便于后续按照数据量对各个内存对象进行分配,减少内存碎片,提高GPU显存的利用率。
在1200,根据访问次序的先后顺序以及数据量大小顺序对各个内存对象进行排序,以得到各个内存对象按照数据量从大到小的顺序排列的内存对象序列。
在一个示例中,每个内存对象可以对应至少一个访问次序,从而可以将每个内存对象对应的一个访问次序作为一个整体进行内存对象排序。当一个内存对象对应有多个访问次序时,每个访问次序可以对应序列中的一项,从而该内存对象可以在序列中有多项,该多项中的每项对应该内存对象的不同访问次序。例如,一个内存对象的访问次序包括1、10和13,则包括该内存对象的序列中针对该内存对象有3项,3项对应的访问次序分别为:1、10和13。
在内存对象排序的一个示例中,可以先按照数据量从大到小的顺序对各个内存对象进行排序,得到初步的内存对象序列。然后,在该初步的内存对象序列中,当相同数据量的内存对象有多个时,针对该多个内存对象,可以按照访问次序从先到后的顺序进行排序,从而可以得到各个内存对象按照数据量从大到小的顺序排列且相同数据量的多个内存对象之间按照访问次序从先到后的顺序排列的内存对象序列。
图2A示出了根据本说明书实施例的各个内存对象进行排序的一个示例的示意图。
在该示例中,针对待排序的各个内存对象,有的内存对象可以仅被访问一次,则该内存对象对应的访问次序仅包括一个;有的内存对象可以被访问多次,每次访问对应一个访问次序,从而该内存对象对应的访问次序可以包括多个。内存对象对应的多个访问次序可以构成一个访问次序序列,内存对象与访问次序序列一一对应,每个访问次序序列包括有对应内存对象的所有访问次序。当然,内存对象的访问次序序列也可以仅包括一个访问次序。
如图2A所示的上图,待访问的内存对象包括R1、R2、R3和R4,内存对象R1的访问次数是6次,则该内存对象R1对应有6个访问次序,分别为0、1、50、51、200和201,则该内存对象R1对应的访问内存序列为[0、1、50、51、200、201]。内存对象R2的访问次数是4次,则该内存对象R2对应有4个访问次序,分别为1、2、100和101,则该内存对象R2对应的访问内存序列为[1、2、100、101]。内存对象R3的访问次数是2次,则该内存对象R3对应有2个访问次序,分别为0、1,则该内存对象R3对应的访问内存序列为[0、1]。内存对象R4的访问次数是1次,则该内存对象R2对应的1个访问次序为1,则该内存对象R4对应的访问内存序列为[1]。
在该示例中,在对各个内存对象进行排序前,针对存在多次访问的内存对象,可以将该内存对象对应的多个访问次序中满足第一访问次序合并条件的访问次序合并,以作为该内存对象对应的访问次序子序列。经过合并得到的访问次序子序列中可以包括有多个访问次序,且该多个访问次序均属于同一个内存对象。
第一访问次序合并条件可以包括:待合并的至少两个访问次序在所属的内存对象的访问次序序列中相邻、且在该相邻的至少两个访问次序之间的时间段内未访问其他内存对象。在该示例中,相邻的两个访问次序之间的时间段由该两个访问次序所确定,该时间段可以不包括作为两个端点的该两个访问次序对应的时间点。例如,相邻的两个访问次序分别是1和5,该两个访问次序之间的时间段可以包括访问次序2、3和4,而不包括访问次序1和5。
以图2A为例,如图2A的中图所示,内存对象R1对应的访问次序序列[0、1、50、51、200、201]中的访问次序0和1、访问次序50和51、访问次序200和201均满足第一访问次序合并条件,则可以将上述三组访问次序进行合并,得到的访问次序子序列分别为:[0、1]、[50、51]、[200、201]。相应地,内存对象R2对应的各个访问次序经过基于第一访问次序合并条件进行合并后得到的访问次序子序列为:[1、2]、[100、101]。内存对象R3对应的各个访问次序经过基于第一访问次序合并条件进行合并后得到的访问次序子序列为:[0、1]。
在完成针对各个内存对象的访问次序合并后,可以根据各个内存对象对应的访问次序和/或访问次序子序列的先后顺序以及数据量大小顺序对经过合并处理的内存对象进行排序,以得到由经过合并处理的各个内存对象按照数据量从大到小的顺序排列的内存对象序列。
在排序过程中,可以将每个内存对象对应的一个访问次序作为整体的一项进行排序,以及将每个内存对象对应的一个访问次序子序列作为整体的一项进行排序。当一个内存对象对应有多个访问次序或访问次序子序列时,每个访问次序可以对应序列中的一项,每个访问次序子序列可以对应序列中的一项,从而该内存对象可以在经过排序得到的序列中有多项,针对该内存对象的每项对应不同的访问次序或者访问次序子序列。
针对各个访问次序子序列,可以以该访问次序子序列中的第一个访问次序为参照对象进行排序。
在内存对象排序的一个示例中,可以先按照数据量从大到小的顺序对待排序的对应有访问次序或者访问次序子序列的各个内存对象进行排序,得到初步的内存对象序列。然后,在初步的内存对象序列中,当相同数据量的内存对象有多个时,针对该多个内存对象,可以按照访问次序从先到后的顺序进行排序,从而得到各个内存对象按照数据量从大到小的顺序排列且相同数据量的多个内存对象之间按照访问次序从先到后的顺序排列的内存对象序列。
以图2A为例,如图2A的下图所示,优先以数据量从大到小的顺序对各个内存对象进行排列,则所有的内存对象R2排在所有的内存对象R1前面,所有的内存对象R1排在所有的内存对象R2前面,所有的内存对象R4排在所有的内存对象R3前面。再针对数据量相同的各个内存对象,按照访问次序从先到后的顺序进行排序。
在本说明书实施例的另一个示例中,可以将各个内存对象中数据量小于指定数据量阈值、且对应的访问次序满足第二访问次序合并条件的多个内存对象合并,以得到合并内存对象。
在该示例中,指定数据量阈值可以根据各个内存对象对应数据量的分布来确定,指定数据量阈值可以设置的在数据量分布中偏小,从而能够使得数据量较小的内存对象合并成为数据量相对较大的合并内存对象。
第二访问次序合并条件所针对的是不同的多个内存对象,该第二访问次序合并条件可以包括:在由待合并的各个内存对象的访问次序所构成的访问次序子序列对应的时间段内未访问其他内存对象。该其他内存对象是除待合并的内存对象以外的其他内存对象。访问次序子序列可以包括待合并的各个内存对象的所有访问次序,访问次序子序列对应的时间段可以是该访问次序子序列中最小的访问次序与最大的访问次序之间的时间段。当然,该时间段可以不包括最小的访问次序和最大的访问次序对应的时间点。
合并内存对象的数据量等于所合并的多个内存对象的数据量之和,合并内存对象对应的访问次序序列可以包括所合并的各个内存对象对应的所有访问次序。
以图2A为例,指定数据量阈值可以设置为20,则小于该指定数据量阈值的内存对象包括R3和R4,并且,内存对象R3的访问次序为0和1,内存对象R4的访问次序为1,则可以确定访问次序0和1是相邻的访问次序,且该两个访问次序之间不存在访问除内存对象R3和R4以外的其他内存对象。从而,可以将R3和R4合并,合并后的合并内存对象的数据量为R3和R4的数据量之和,即15,合并内存对象的访问次序子序列为[0,1]。
在完成内存对象的合并后,根据对应的访问次序和/或访问次序子序列的先后顺序以及数据量大小顺序对经过合并处理的内存对象进行排序,以得到由经过合并处理的各个内存对象按照数据量从大到小的顺序排列的内存对象序列。
图2B示出了根据本说明书实施例的各个内存对象进行排序的另一个示例的示意图。
在该示例中,可以针对各个内存对象,进行访问次序的合并。此外,还可以进行内存对象之间的合并。
具体地,针对各个内存对象,当该内存对象存在多次访问时,将满足第一访问次序合并条件的访问次序合并,以作为该内存对象对应的访问次序子序列。然后,将各个内存对象中数据量小于指定数据量阈值、且对应的访问次序满足第二访问次序合并条件的多个内存对象合并,以得到合并内存对象。在完成上述两种合并操作后,根据对应的访问次序和/或访问次序子序列的先后顺序以及数据量大小顺序对经过合并处理的内存对象进行排序,以得到由经过合并处理的各个内存对象按照数据量从大到小的顺序排列的内存对象序列。
如图2B所示,从上至下第一个图所示的是待合并的各个内存对象以及各个内存对象的访问次序和数据量。然后,针对各个内存对象,将满足第一访问次序合并条件的访问次序合并,以作为该内存对象对应的访问次序子序列,所得到的各个内存对象如第二个图所示。再将各个内存对象中数据量小于指定数据量阈值、且对应的访问次序满足第二访问次序合并条件的内存对象R3和R4合并,以得到合并内存对象R3-4,合并内存对象R3-4的数据量为15,访问次序子序列为[0,1],如第三个图所示。最后,根据对应的访问次序和/或访问次序子序列的先后顺序以及数据量大小顺序对经过合并处理的内存对象进行排序,得到如第四个图所示的内存对象序列。
回到图1,在得到内存对象序列后,在1300,可以从内存对象序列中选择第一数量的数据量最大的内存对象。
在本说明书实施例中,所选择的第一数量的内存对象的数据量之和不大于GPU显存的存储空间。在所选择的数据量之和小于GPU显存的存储空间时,数据量之和与GPU显存的存储空间之间的差值表示所选择的第一数量的内存对象同时分配至GPU显存后GPU显存所剩余的存储空间,该剩余的存储空间小于与所选择的最后一个内存对象相邻的下一个内存对象的数据量。
例如,第一数量是10,所选择的10个内存对象的数据量之和为490M,而GPU显存是512M,则数据量之和与GPU显存的存储空间之间的差值是22M,小于第11个内存对象的数据量40M。
在本说明书实施例中,所选择的第一数量的内存对象的数据量可以各不相同,还可以存在相同的数据量。
在选择的一种方式中,可以从内存对象序列中选择第一数量的数据量最大且各个数据量不同的内存对象。在一个示例中,可以在内存对象序列中按照从前往后的顺序依次选取内存对象,直至选取的内存对象达到第一数量。在内存对象的选取过程中,对于与已选取的内存对象的数据量相同的内存对象可以直接跳过,不予选取。
以图2B为例,第一数量是2,即需要选取2个数据量最大且不同的内存对象,则可以选取排在第一位的内存对象R2以及排在第三位的内存对象R1。
在选择的另一种方式中,可以从内存对象序列中选择第一数量的最高排位的内存对象,在所选择的内存对象的数据量中可以存在相同的数据量。在一个示例中,可以按照内存对象序列中的排位顺序,从前往后依次选取。或者可以直接将内存对象序列中前N位的内存对象选取为第一数量的内存对象,其中,N为第一数量。以图2B为例,第一数量是2,则可以选取排在第一位和第二位的内存对象R2。
在1400,根据所选择的内存对象的数据量将GPU显存划分为包括第一数量的内存段。
GPU显存的存储空间被划分后至少包括有第一数量的内存段,且该第一数量的内存段与所选择的内存对象一一对应,各个内存段的存储空间大小与对应的内存对象的数据量大小相同。在一种划分方式中,可以将GPU显存的存储空间划分为N+1个内存段,N为第一数量。在该N+1个内存段中的前N个内存段是作为待复用的第一数量的内存段。
图3示出了根据本说明书实施例的GPU显存划分的一个示例的示意图。如图3所示,GPU显存的存储空间被划分为N+1个内存段,前N个内存段与所选取的N个内存对象一一对应。第N+1个内存段的存储空间较小,可以不参与GPU显存复用方案。
在本说明书实施例中,在划分得到第一数量的内存段后,基于内存段与所选择的第一数量的内存对象之间一一对应的关系,所选择的第一数量的各个内存对象被分配至对应的内存段中。这里的分配是指各个内存对象在深度学习过程中可以复用所分配的内存段。
在1500,将内存对象序列中未分配的其他内存对象分配至各个内存段中,以生成由各个内存对象和各个内存段构成的分配序列。
在1600,判断生成的分配序列是否达到第二数量,如果是,执行1700的操作;如果否,则返回执行1500的操作。
在本说明书实施例中,上述1500的操作可以被循环执行,直至满足上述1600中的循环结束条件,即,生成第二数量的分配序列,第二数量可以指定。在每个循环过程中,执行1500的操作所针对的对象是未分配的其他内存对象,未分配的其他内存对象是所确定的内存对象中除已分配的内存对象以外的其他内存对象,其中,已分配的内存对象可以包括上述1300的操作中所选择的第一数量的内存对象以及在之前轮次的循环过程中所分配的内存对象。
分配序列包括待访问的所有内存对象,在分配序列中,以内存段为单位进行排序,在每个内存段中,可以包括由分配至该内存段的各个内存对象所构成的集合。在分配序列中,一个内存对象位于一个内存段中,表示该内存对象被分配给该内存段,从而该内存对象可以复用该内存段的存储空间。在分配序列中,被分配在同一内存段中的各个内存对象复用该内存段的存储空间。从而,每个分配序列可以用于表示一种GPU显存复用方案。
每一轮循环过程可以生成一个分配序列,不同轮次的内存对象分配过程生成的分配序列不同。在一个示例中,经过多轮循环过程所生成的第二数量的分配序列可以构成一个候选种群,该候选种群中包括的第二数量的分配序列可以表示有第二数量的GPU显存复用方案。
图4示出了根据本说明书实施例的由第二数量的分配序列构成的候选种群的一个示例的示意图。如图4所示,第二数量为M,则候选种群包括有M个分配序列,分配序列1可以表示为:R1、R12、R23、R74、R55|R2、R27、R18、R39、R40|……,其中,内存对象R1、R12、R23、R74、R55属于第一个内存段,内存对象R2、R27、R18、R39、R40属于第二个内存段,以此类推。分配序列2可以表示为:R1、R43、R22、R7、R15|R6、R69、R71、R9、R25|……,其中,内存对象R1、R43、R22、R7、R15属于分配序列2中的第一个内存段,内存对象R6、R69、R71、R9、R25属于分配序列2中的第二个内存段。分配序列M可以表示为:R1、R45、R12、R8、R69|R6、R19、R80、R51、R34|……,其中,内存对象R1、R45、R12、R8、R69属于分配序列M中的第一个内存段,内存对象R6、R19、R80、R51、R34属于分配序列M中的第二个内存段。
每一轮循环过程将未分配的其他内存对象分配至各个内存段的分配方式可以相同,也可以不同。
图5示出了根据本说明书实施例的内存对象分配过程的一个示例的流程图。
如图5所示,在1510,从内存对象序列的未分配的其他内存对象中,按照内存对象序列的顺序依次选择第一数量的内存对象。
所选择的第一数量的内存对象经过本轮分配后,成为已分配的内存对象,从而在后续轮次中不会再被选择进行重复分配。
以图2A为例,第一数量为3,即GPU显存包括3个待复用的内存段,则在每一轮次中按照内存对象序列的顺序依次选择3个内存对象,比如,第一轮所选择的内存对象是排在前三位的内存对象R2、R2、R1,第二轮所选择的内存对象是排在第四位、第五位和第六位的内存对象R1、R1、R4,依次类推,直至将内存对象序列中的所有内存对象分配完。
在1520,将所选择的各个内存对象按照指定分配方式分配给各个内存段。
指定分配方式可以包括依次分配、随机分配以及根据各个内存段中已分配的内存对象的数据量来分配等方式中的至少一种方式。
在一种分配方式中,可以将所选择的各个内存对象依次分配给各个内存段。
在另一种分配方式中,可以将所选择的各个内存对象随机地分配给各个内存段。在一种随机方式中,可以将所选择的第一数量的内存对象随机地均匀分配给第一数量的内存段中,以确保每个内存段被分配一个内存对象。在另一种随机方式中,还可以不均匀地分配,各个内存段中所分配的内存对象的数量可以不同。
在上述两种分配方式中,分配至同一内存段中的多个内存对象之间可以相互拼接成较大数据量的内存对象,作为一个整体来共同复用该内存段。这样可以减少该内存段内的碎片,提高内存段的存储空间的利用率。
在另一种分配方式中,可以将所选择的各个内存对象根据各个内存段中已分配的内存对象的数据量来分配给各个内存段。在该分配方式中,可以均匀地分配,还可以不均匀地分配。
在该分配方式中,在分配所选择的各个内存对象之前,可以查看各个内存段中已分配的内存对象复用该内存段的存储空间的情况,有的内存对象的数据量大小与该内存段的存储空间大小相同,则该内存对象可以复用该内存段的完整存储空间。而有的内存对象的数据量小于该内存段的存储空间大小,该内存对象仅能够复用该内存段中的部分存储空间,则在该内存对象复用的同时,内存段中还剩下另一部分存储空间没有被利用。
在分配所选择的各个内存对象时,可以查看每个内存段中已分配的内存对象在复用时所剩下的未被利用的存储空间的大小。然后,将待分配的内存对象的数据量与各个内存段中的各个未利用的存储空间进行匹配,将待分配的内存对象分配至最匹配的未利用存储空间所属的内存段中。这里的最匹配是指待分配的内存对象的数据量大小与未利用存储空间的大小之差最小,当然,待分配的内存对象的数据量不大于所匹配的未利用的存储空间。比如,当待分配的内存对象的数据量与一个未利用存储空间的大小相同时,可以确定该待分配的内存对象与该未利用的存储空间最匹配。
通过上述这种分配方式,能够充分利用各个内存段中的未存储空间,减少内存碎片,提高GPU显存的利用率。
在上述各种分配方式中,每个内存段中被分配有多个内存对象,属于同一个内存段的多个内存对象在复用该内存段的存储空间时,可以单独复用该内存段,还可以多个内存对象相结合作为一个整体共同复用该内存段,以达到减少内存碎片、提高内存段的利用率的目的。
在多个内存对象相结合作为一个整体共同复用一个内存段时,相结合的各个内存对象对应的访问次序或访问次序子序列相同或者相差不大。在一个示例中,在相结合的各个内存对象对应的访问次序或访问次序子序列之间的时间段内,所属内存段中的其他内存对象不会在该时间段内被访问。需要说明的是,相结合的各个内存对象对应的访问次序或访问次序子序列之间的时间段可以是由相结合的各个内存对象对应的访问次序或访问次序子序列中最小的访问次序与最大的访问次序所构成的访问次序序列所对应的时间段。
图6示出了根据本说明书实施例的属于同一内存段的各个内存对象复用该内存段的一个示例的示意图。
如图6所示,内存段的存储空间是400MB,分配至该内存段中的内存对象可以包括R1、R12、R23、R74、R55,其中,内存对象R1的数据量是400MB,内存对象R12的数据量是300MB,内存对象R23的数据量是100MB,内存对象R74的数据量是400MB,内存对象R55的数据量是300MB。上述五个内存对象的访问次序序列为:R1、R12和R23、R74、R55,其中,内存对象R12和R23的访问次序相同。则内存对象R12和R23相结合作为一个整体来复用该内存段,其他内存对象R1、R74和R55则各自单独复用该内存段。复用的顺序是上述五个内存对象的访问次序序列,内存对象R1先复用,再内存对象R12和R23同时复用,接着内存对象R74和R55再分别复用。
通过上述内存对象的分配方式,由于内存对象序列按照数据量从大到小的顺序排列,在生成每个分配序列的过程中,在前面轮次的内存对象分配过程中优先选择数据量较大的内存对象,从而优先分配数据量较大的内存对象。随着轮次增加,依次选择的内存对象的数据量逐渐减小。即,内存对象的分配策略可以按照数据量从大到小的顺序来分配,这种分配方式可以实现优先分配较大数据量的内存对象,后分配的较小数据量的各个内存对象可以相互拼接作为一个整体来复用同一个内存段,还可以与已分配的大数据量的内存对象拼接作为一个整体来复用同一内存段。这样,可以减少内存碎片的产生,提高GPU显存的利用率。
回到图5,在1530,判断在当前轮次的内存对象分配过程中的内存对象序列中所有内存对象是否已分配完成,如果是,则可以结束当前轮的内存对象分配过程,并生成一个分配序列,再执行1540的操作;如果否,表示还未完成当前轮的内存对象分配过程,需要继续执行该内存对象分配过程,则返回执行1510的操作。
在1540,判断所生成的分配序列的数量是否达到第二数量,如果是,则执行1550的操作;如果否,则表示还需要继续执行多轮内存对象分配过程,以生成更多的分配序列,基于此,返回执行1510的操作。需要说明的是,1540的操作可以与1600的操作相同,可以将1540的操作与1600的操作合并为一个操作。
在1550,可以得到第二数量的多个分配序列。在一个示例中,1550的操作可以省略,从而在1540判定所生成的分配序列的数量达到第二数量时,可以直接执行1700的操作。
回到图1,在1700,利用遗传算法以及数据迁移量对由多轮内存对象分配过程生成的多个分配序列进行处理,以选出数据迁移量最小的分配序列作为GPU显存复用方案。
遗传算法是基于大规模搜索和适应度导向来快速搜索接近全局最优的解,遗传算法具有随机性,适应度可以用于优化解,根据适应度来剔除不好的解仅保留好的解,从而经过多轮搜索得到接近全局最优的解。在本说明书实施例中,遗传算法中的适应度可以根据数据迁移量确定,数据迁移量越大,则适应度越小;数据迁移量越小,则适应度越大,越接近最优解。本说明书实施例中的最优解可以是数据迁移量最小的分配序列。
在本说明书实施例中,每个分配序列可以计算出对应的数据迁移量,分配序列对应的数据迁移量根据内存对象的迁移次数以及内存对象的数据量来确定,内存对象从GPU显存迁移至其他物理内存或者从其他物理内存迁移至GPU显存可以算一次数据迁移,每个内存对象每一次执行数据迁移时的数据量即为该内存对象的数据量。分配序列对应的数据迁移量是该分配序列中的各个内存对象每一次迁移的数据量之和。
例如,在内存对象R1先复用一个内存段后,内存对象R2需要复用该内存段,之后内存对象R1又再次复用,其中,内存对象R1的数据量是S1,内存对象R2的数据量是S2。在此过程中,第一步,先将内存对象R1从GPU显存迁移至CPU DRAM中,此迁移过程所迁移的数据量是S1;第二步,再将内存对象R2从CPU DRAM迁移至GPU显存中,此迁移过程所迁移的数据量是S2;第三步,再将内存对象R2从GPU显存迁移至CPU DRAM中,此迁移过程所迁移的数据量是S2;第四步,再将内存对象R1从CPU DRAM迁移至GPU显存中,此迁移过程所迁移的数据量是S1。由此可见,需要执行四次数据迁移,整个过程的数据迁移量cost为:S1+S2+S2+S1。
图7示出了根据本说明书实施例的利用遗传算法确定GPU显存复用方案的一个示例700的流程图。
如图7所示,在1710,利用遗传算法中的交叉算法和/或变异算法对待处理的多个分配序列中的至少部分分配序列进行处理,以将该至少部分分配序列对应转换成新的分配序列。
在本说明书实施例中,利用交叉算法和/或变异算法所处理的分配序列可以包括所生成的多个分配序列中的部分分配序列,还可以包括所生成的多个分配序列中的全部分配序列。针对各个分配序列的处理,可以利用同一种算法,比如,均使用交叉算法或者变异算法;还可以利用不同算法,比如,有的分配序列使用交叉算法,有的分配序列使用变异算法。
此外,针对各个分配序列,可以利用交叉算法和变异算法进行处理。比如,先利用交叉算法进行处理,然后利用变异算法继续进行处理。
图8示出了根据本说明书实施例的利用交叉算法对分配序列进行处理的一个示例800的流程图。
在1711-1,从待处理的多个分配序列中选择至少两个分配序列。
在该示例中,待处理的多个分配序列是通过多轮内存对象分配过程所生成的多个分配序列,当所选择的至少两个分配序列是多个分配序列中的部分分配序列时,从多个分配序列中选择至少两个分配序列的方式可以是随机选择,还可以按照指定规则选择,比如,从数据迁移量大于指定迁移量阈值的分配序列中进行选择。
在1711-3,利用交叉算法将至少两个分配序列中针对同一内存段中的部分内存对象在至少两个分配序列之间进行交换,以对应形成新的分配序列。
在该示例中,内存对象的交换可以是在两个分配序列之间进行,还可以是在多于两个的多个分配序列之间进行。下面以两个分配序列之间所进行的内存对象交换为例进行说明。
利用交叉算法可以针对一个内存段执行内存对象交换操作,还可以针对多个内存段执行内存对象交换操作,执行内存对象交换操作的内存段可以是GPU显存所划分的所有内存段,还可以是所有内存段中的部分内存段。针对每个内存段,利用交叉算法所执行的操作相同,下面以一个内存段为例进行说明。
执行交换操作的内存对象属于同一内存段,在交叉算法所针对的内存段中,进行交换的内存对象是所属的分配序列中分配给该内存段的所有内存对象中的部分内存对象。
针对待执行交叉算法的两个分配序列,可以将待执行交叉算法的内存段确定为目标内存段。该两个分配序列的目标内存段中可以分配有多个内存对象。针对每个分配序列,可以从分配给目标内存段的多个内存对象中选取至少一个内存对象作为待交换的内存对象。然后,将两组待交换的内存对象进行交换,交换后的两个分配序列形成为新的分配序列。
在选取的一个示例中,可以通过随机方式选取待交换的内存对象,所选取的待交换的内存对象的数量也可以随机确定。在一个示例中,两个分配序列中所选取的待交换的内存对象的数量可以相同,也可以不同。
在选取的另一个示例中,可以根据两个分配序列中分配给目标内存段的内存对象(以下称为目标内存对象)的数量(以下称为目标内存对象数量)来得到一个随机数,该随机数小于目标内存段中的目标内存对象的数量。然后,在每个分配序列中的由目标内存对象组成的序列上确定该随机数对应的内存对象,随机数对应的内存对象是在目标内存对象所组成的序列上处于该随机数位置处的内存对象。在一个示例中,可以将由目标内存对象组成的序列中位于所确定的内存对象之后的各个内存对象确定为待交换的内存对象。在另一个示例中,可以将目标内存对象组成的序列中所确定的内存对象以及位于所确定的内存对象之后的各个内存对象确定为待交换的内存对象。
图9示出了根据本说明书实施例的利用交叉算法对两个分配序列进行处理的一个示例的示意图。
如图9所示,交叉算法所针对的两个分配序列分别是分配序列1和2,分配序列1为:R1、R12、R23、R74、R55|R6、……,分配序列2为:R1、R43、R22、R7、R15、R51|R6、……。目标内存段是第一个内存段,在分配序列1中分配给第一个内存段的内存对象有5个,在分配序列2中分配给第一个内存段的内存对象有6个,从而随机生成一个小于5的随机数为3。在分配序列1中,可以确定第一个内存段中的内存对象序列中处于该随机数位置上的内存对象是R23,则可以将位于内存对象R23之后的两个内存对象R74和R55确定为待交换的内存对象。在分配序列2中,可以确定第一个内存段中的内存对象序列中处于该随机数位置上的内存对象是R22,则可以将位于内存对象R22之后的三个内存对象R7、R15和R51确定为待交换的内存对象。然后,将两个分配序列中的待交换内存对象进行交换,得到两个新的分配序列1’和2’。
在该示例中,经过对部分内存对象进行交换后,对于各个分配序列来说,当从其他分配序列交换得到的内存对象在该分配序列中已被分配给其他内存段时,可以取消该其他内存段中所分配的该内存对象,而将该内存对象分配给执行交叉算法的内存段中。该其他内存段是分配序列中除执行交叉算法的内存段以外的其他内存段。
例如,一个分配序列中执行交叉算法的内存段是第一个内存段,从另一个分配序列中经过交叉算法交换所得到的内存对象是R11,从而该内存对象R11需要分配至该分配序列中的第一个内存段中,而该分配序列中的第三个内存段中也已经分配有该内存对象R11,则可以将分配至该第三个内存段中的内存对象R11取消。
图10示出了根据本说明书实施例的利用变异算法对分配序列进行处理的一个示例1000的流程图。
在1712-1,根据变异概率从待处理的多个分配序列中选择待变异的分配序列。
在该示例中,变异概率用于选择待变异的分配序列,所选择的待变异的分配序列可以包括一个或多个。在一个示例中,变异概率可以是变化的,随着循环轮次增大而增大。比如,在前面轮次的循环中所使用的变异概率是0.1%,而随着循环次数的增加,变异概率可以增大为0.5%。逐渐增大的变异概率可以跳出局部的最优解,在全局分配序列的基础上继续搜索,达到得到接近全局最优解的目的。在另一个示例中,变异概率可以是固定值。
在1712-3,针对所选择的各个分配序列,将该分配序列中的属于不同内存段的至少两个内存对象进行交换,以形成新的分配序列。
每个分配序列利用变异算法所执行的操作相同,下面以一个分配序列为例进行说明。不同分配序列中变异所针对的内存段可以不同,所针对的内存段的数量也可以不同。此外,不同分配序列中变异所针对的内存对象可以不同,所针对的内存对象的数量也可以不同。
进行交换的各个内存对象的数据量不大于交换后所属的内存段的存储空间大小,当进行交换的内存对象的数据量大于交换后所属的内存段的存储空间,则可以将此次交换作废,重新利用变异计算执行内存对象交换操作。
在一个示例中,执行交换操作的不同内存段可以以随机方式选择。其中,所选择的不同内存段的数量可以随机,还可以指定,所选择的不同内存段的数量不少于两个。此外,针对执行交换操作的每一个内存段也可以随机选择。
在一种随机方式中,可以随机生成一个小于第一数量的第一随机数,该第一随机数用于确定执行交换操作的内存段的数量,第一随机数大于1。然后,可以再随机生成第一随机数个数的第二随机数,所生成的各个第二随机数可以相同,也可以不同,每个第二随机数小于或等于第一数量。第二随机数用于表征待选择的对应内存段。例如,生成的第一随机数是2,则表示需要选取两个不同的内存段,再生成两个第二随机数分别为1和3,则第一个内存段和第三个内存段被选为执行交换操作的两个内存段。
在一个示例中,执行交换操作的各个内存对象在所属内存段中可以以随机方式选择。在该示例中,执行交换操作的两个内存段中所选择的内存对象的数量可以相同。例如,在每个内存段中选择两个内存对象进行交换。在一个示例中,在每个内存段中所选择的待执行交换操作的内存对象的数量可以随机,还可以指定。比如,指定的数量是1,则在每个内存段中选择一个内存对象进行交换。
在该示例中,在确定每个内存段中待选择的内存对象的数量后,针对待选择的每个内存对象可以以随机方式选择。针对不同的内存段,可以使用相同的随机方式,也可以使用不同的随机方式。在一个示例中,随机方式是随机数,则针对不同的内存段,可以使用相同的随机数来选择待执行交换操作的内存对象,还可以使用不同的随机数来选择待执行交换操作的内存对象。
在一种随机方式中,针对待执行交换操作的内存段,可以随机生成一个第三随机数,该第三随机数小于或等于该内存段中的内存对象的数量,该第三随机数用于确定待选择的内存对象的数量。比如,第三随机数是2,则表示需要从每个内存段中选择两个内存对象。然后,针对每个内存段,可以再随机生成第三随机数个数的第四随机数,各个第四随机数用于确定待选择的内存对象的位置,所生成的第四随机数可以不大于该内存段中的内存对象的数量。不同的内存段可以使用相同的第四随机数,还可以使用不同的第四随机数。
例如,当第三随机数是2时,所生成的两个第四随机数分别为1和2,则可以将该内存段中的第一个内存对象和第二个内存对象选择为待执行交换操作的内存对象,对于另一个内存段来说,也可以选择其中的第一个内存对象和第二个内存对象作为待执行交换操作的内存对象。然后可以将两个内存段中所选择的两个内存对象交换,以得到新的两个分配序列。
图11示出了根据本说明书实施例的利用变异算法对分配序列进行处理的一个示例的示意图。
如图11所示,交叉算法所针对的分配序列为:R1、R12、R23、R74、R55|R6、R27、R18、R39、R40|……。可以随机生成第一随机数是2,则表示需要选取两个不同的内存段,再生成两个第二随机数分别为1和2,则该分配序列中的第一个内存段和第二个内存段被选为执行交换操作的两个内存段。然后,随机生成的第三随机数是1,则表示需要从每个内存段中选择一个内存对象。然后,针对每个内存段,可以随机生成的一个第四随机数是4,表示第一个内存段以及第二个内存段中的第四个内存对象(即,R74和R39)被选为待交换的内存对象。然后,将待交换的两个内存对象进行交换,得到新的分配序列为:R1、R12、R23、R39、R55|R6、R27、R18、R74、R40|……。
回到图7,在1720,判断是否满足循环结束条件。如果不满足,可以执行1730的操作;如果满足,可以执行1750的操作。
在一个示例中,循环结束条件可以包括以下中的至少一种:循环轮次达到指定轮次,循环执行时长达到指定时长以及连续的指定数量轮次中的数据迁移量的变化小于指定阈值。
当循环结束条件是连续的指定数量轮次中的数据迁移量的变化小于指定阈值时,可以记录每一轮的数据迁移量的变化。在一个示例中,数据迁移量的变化可以仅针对数据迁移量最小的分配序列的数据迁移量的变化,当数据迁移量最小的分配序列在连续的指定数量轮次中的数据迁移量的变化小于指定阈值,则满足循环结束条件。例如,连续三轮数据迁移量最小的分配序列的数据迁移量的变化小于1%,则可以确定满足循环结束条件。
在1730,根据数据迁移量从新的分配序列以及未处理的分配序列中选择第三数量的数据迁移量最小的分配序列予以保留。
第三数量可以是指定的,第三数量可以是具体的数值,还可以是比例值。当第三数量是比例值时,所保留的分配序列的数量是新的分配序列和未处理的分配序列的总数量乘以比例值。
在一个示例中,每个分配序列可以计算出总的数据迁移量,然后可以按照数据迁移量从小到大的顺序对分配序列进行排序,进行排序的分配序列可以包括使用遗传算法得到的新的分配序列以及未使用遗传算法处理的分配序列。然后,在分配序列的排序中选择第三数量的数据迁移量最小的分配序列予以保留,其他分配序列予以剔除。
在每一轮循环中,通过数据迁移量来选取数据迁移量较小的分配序列予以保留,从而保留了表现较好的分配序列,而淘汰了表现较差的分配序列,如此循环往复,最终留下的分配序列可以认为是全局的分配序列中表现好的分配序列,从而实现了全局搜索,从而达到接近全局最优解。
在1740,随机生成若干个分配序列,以使该若干个分配序列和所保留的分配序列作为下一循环过程中待处理的多个分配序列。
可以按照本说明书实施例提供的分配序列的生成方式来随机生成若干个分配序列。在一个示例中,随机生成的分配序列的数量与所保留的分配序列的数量之和等于第二数量,从而在利用遗传算法的循环执行过程中,始终保持第二数量的分配序列。
在满足循环结束条件时,在1750,从新的分配序列以及未处理的分配序列中选择数据迁移量最小的分配序列作为GPU显存复用方案。
此时所得到的数据迁移量最小的分配序列可以认为是在全局分配序列的基础上进行搜索所得到的接近于全局的最优解,从而得到基于全局分配序列选出最优的GPU显存复用方案,减少GPU显存复用过程中的数据迁移量,从而提升机器学习的性能。
图12示出了根据本说明书实施例的用于对GPU显存复用方案进行优化的装置(以下称为显存复用方案优化装置200)的一个示例的方框图。
如图12所示,显存复用方案优化装置200包括内存对象确定单元210、内存对象排序单元220、内存对象选择单元230、内存段划分单元240、内存对象分配单元250和分配序列处理单元260。
内存对象确定单元210,被配置为确定应用程序运行所需访问的内存对象以及各个内存对象的访问次序和数据量。
内存对象排序单元220,被配置为根据访问次序的先后顺序以及数据量大小顺序对各个内存对象进行排序,以得到各个内存对象按照数据量从大到小的顺序排列的内存对象序列。
内存对象选择单元230,被配置为从内存对象序列中选择第一数量的数据量最大的内存对象,其中,所选择的内存对象的数据量之和不大于GPU显存。
在一个示例中,内存对象选择单元230还可以被配置为:从内存对象序列中选择第一数量的数据量最大且各个数据量不同的内存对象;或者从内存对象序列中选择第一数量的最高排位的内存对象。
内存段划分单元240,被配置为根据所选择的内存对象的数据量将GPU显存划分为包括第一数量的内存段,其中,所划分的内存段与所选择的内存对象一一对应,各个内存段的存储空间大小与对应的内存对象的数据量大小相同。
内存对象分配单元250,被配置为将内存对象序列中未分配的其他内存对象分配至各个内存段中,以生成由各个内存对象和各个内存段构成的分配序列,其中,不同轮次的内存对象分配过程所生成的分配序列不同,被分配在同一内存段中的各个内存对象复用该内存段的存储空间。其中,内存对象分配单元250循环执行,直至生成第二数量的分配序列。
分配序列处理单元260,被配置为利用遗传算法以及数据迁移量对由多轮内存对象分配过程所生成的多个分配序列进行处理,以选出数据迁移量最小的分配序列作为GPU显存复用方案。
图13示出了根据本说明书实施例的分配序列处理单元260的一个示例的方框图。
如图13所示,分配序列处理单元260可以包括分配序列处理模块261、显存复用方案确定模块263和分配序列生成模块265。
分配序列处理模块261,被配置为利用遗传算法中的交叉算法和/或变异算法对待处理的多个分配序列中的至少部分分配序列进行处理,以将至少部分分配序列对应转换成新的分配序列。其中,分配序列处理模块261循环执行,直至满足循环结束条件。
在一个示例中,分配序列处理模块261还可以被配置为:从待处理的多个分配序列中选择至少两个分配序列;以及利用交叉算法将至少两个分配序列中针对同一内存段中的部分内存对象在至少两个分配序列之间进行交换,以对应形成新的分配序列。
在另一个示例中,分配序列处理模块261还可以被配置为:根据变异概率从待处理的多个分配序列中选择待变异的分配序列;以及针对所选择的各个分配序列,将该分配序列中的属于不同内存段的至少两个内存对象进行交换,以形成新的分配序列,其中,进行交换的各个内存对象的数据量不大于交换后所属的内存段的存储空间大小。
显存复用方案确定模块263,被配置为在满足循环结束条件时,从新的分配序列以及未处理的分配序列中选择数据迁移量最小的分配序列作为GPU显存复用方案。
分配序列生成模块265,被配置为在未满足循环结束条件时,根据数据迁移量从新的分配序列以及未处理的分配序列中选择第三数量的数据迁移量最小的分配序列予以保留;以及随机生成若干个分配序列,以使若干个分配序列和所保留的分配序列作为下一循环过程中待处理的多个分配序列。
图14示出了根据本说明书实施例的内存对象排序单元220的一个示例的方框图。
如图14所示,内存对象排序单元220可以包括访问次序合并模块221、内存对象合并模块223以及内存对象排序模块225。
需要说明的是,图14所示的内存对象排序单元220仅为一个示例,此外,在另一示例中,内存对象排序单元220还可以包括访问次序合并模块221和内存对象排序模块225。在另一示例中,内存对象排序单元220还可以包括内存对象合并模块223和内存对象排序模块225。
访问次序合并模块221,被配置为针对各个内存对象,当该内存对象存在多次访问时,将满足第一访问次序合并条件的访问次序合并,以作为该内存对象对应的访问次序子序列,其中,第一访问次序合并条件包括:待合并的访问次序在该内存对象的访问次序序列中相邻、且在该相邻的至少两个访问次序之间的时间段未访问其他内存对象。
内存对象合并模块223,被配置为将各个内存对象中数据量小于指定数据量阈值、且对应的访问次序满足第二访问次序合并条件的多个内存对象合并,以得到合并内存对象,其中,合并内存对象的数据量等于所合并的多个内存对象的数据量之和,合并内存对象对应的访问次序序列包括所合并的各个内存对象的访问次序,第二访问次序合并条件包括:在由待合并的各个内存对象的访问次序所构成的访问次序子序列对应的时间段内未访问其他内存对象。
内存对象排序模块225,被配置为根据对应的访问次序和/或访问次序子序列的先后顺序以及数据量大小顺序对经过合并处理的内存对象进行排序,以得到由经过合并处理的各个内存对象按照数据量从大到小的顺序排列的内存对象序列。
图15示出了根据本说明书实施例的内存对象分配单元250的一个示例的方框图。
如图15所示,内存对象分配单元250可以包括内存对象选择模块251和内存对象分配模块253。
内存对象选择模块251,被配置为从内存对象序列的未分配的其他内存对象中,按照内存对象序列的顺序依次选择第一数量的内存对象。
内存对象分配模块253,被配置为将所选择的各个内存对象按照指定分配方式分配给各个内存段,指定分配方式包括依次分配、随机分配以及根据各个内存段中已分配的内存对象的数据量来分配等方式中的至少一种方式。
其中,内存对象选择模块251和内存对象分配模块253循环执行,直至在每一轮内存对象分配过程中内存对象序列中所有的内存对象分配完成,以及生成第二数量的分配序列。
以上参照图1到图15,对根据本说明书实施例的用于对GPU显存复用方案进行优化的方法及装置的实施例进行了描述。
本说明书实施例的用于对GPU显存复用方案进行优化的装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将存储器中对应的计算机程序指令读取到内存中运行形成的。在本说明书实施例中,用于对GPU显存复用方案进行优化的装置例如可以利用电子设备实现。
图16示出了本说明书实施例的用于实现GPU显存复用方案优化方法的电子设备1600的方框图。
如图16所示,电子设备1600可以包括至少一个处理器1610、存储器(例如,非易失性存储器)1620、内存1630和通信接口1640,并且至少一个处理器1610、存储器1620、内存1630和通信接口1640经由总线1650连接在一起。至少一个处理器1610执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器1610:确定应用程序运行所需访问的内存对象以及各个内存对象的访问次序和数据量;根据访问次序的先后顺序以及数据量大小顺序对各个内存对象进行排序,以得到各个内存对象按照数据量从大到小的顺序排列的内存对象序列;从内存对象序列中选择第一数量的数据量最大的内存对象;根据所选择的内存对象的数据量将GPU显存划分为包括第一数量的内存段;循环执行以下内存对象分配过程,直至生成第二数量的分配序列:将内存对象序列中未分配的其他内存对象分配至各个内存段中,以生成由各个内存对象和各个内存段构成的分配序列;以及利用遗传算法以及数据迁移量对由多轮内存对象分配过程生成的多个分配序列进行处理,以选出数据迁移量最小的分配序列作为GPU显存复用方案。
应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器1610进行本说明书的各个实施例中以上结合图1-15描述的各种操作和功能。
根据一个实施例,提供了一种例如机器可读介质的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本说明书的各个实施例中以上结合图1-15描述的各种操作和功能。
具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。
在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的一部分。
本说明书各部分操作所需的计算机程序代码可以用任意一种或多种程序语言编写,包括面向对象编程语言,如Java、Scala、Smalltalk、Eiffel、JADE、Emerald、C++、C#、VB、NET以及Python等,常规程序化编程语言如C语言、Visual Basic 2003、Perl、COBOL2002、PHP以及ABAP,动态编程语言如Python、Ruby和Groovy,或者其他编程语言等。该程序编码可以在用户计算机上运行,或者作为独立的软件包在用户计算机上运行,或者部分在用户计算机上运行另一部分在远程计算机运行,或者全部在远程计算机或服务器上运行。在后一种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(LAN)或广域网(WAN),或连接至外部计算机(例如通过因特网),或者在云计算环境中,或者作为服务使用,比如软件即服务(SaaS)。
可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD-RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。
以上结合附图详细描述了本说明书的实施例的可选实施方式,但是,本说明书的实施例并不限于上述实施方式中的具体细节,在本说明书的实施例的技术构思范围内,可以对本说明书的实施例的技术方案进行多种简单变型,这些简单变型均属于本说明书的实施例的保护范围。
本说明书内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本说明书内容。对于本领域普通技术人员来说,对本说明书内容进行的各种修改是显而易见的,并且,也可以在不脱离本说明书内容的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。因此,本说明书内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。
Claims (18)
1.一种用于对GPU显存复用方案进行优化的方法,包括:
确定应用程序运行所需访问的内存对象以及各个内存对象的访问次序和数据量;
根据所述访问次序的先后顺序以及所述数据量大小顺序对所述各个内存对象进行排序,以得到所述各个内存对象按照数据量从大到小的顺序排列的内存对象序列;
从所述内存对象序列中选择第一数量的数据量最大的内存对象,其中,所选择的内存对象的数据量之和不大于所述GPU显存;
根据所选择的内存对象的数据量将所述GPU显存划分为包括所述第一数量的内存段,其中,所划分的内存段与所选择的内存对象一一对应,各个内存段的存储空间大小与对应的内存对象的数据量大小相同;
循环执行以下内存对象分配过程,直至生成第二数量的分配序列:将所述内存对象序列中未分配的其他内存对象分配至各个内存段中,以生成由所述各个内存对象和所述各个内存段构成的分配序列,其中,不同轮次的内存对象分配过程所生成的分配序列不同,被分配在同一内存段中的各个内存对象复用该内存段的存储空间;以及
利用遗传算法以及数据迁移量对由多轮内存对象分配过程所生成的多个分配序列进行处理,以选出数据迁移量最小的分配序列作为GPU显存复用方案。
2.如权利要求1所述的方法,其中,利用遗传算法以及数据迁移量对由多轮内存对象分配过程生成的多个分配序列进行处理,以选出数据迁移量最小的分配序列作为GPU显存复用方案包括:
循环执行下述过程,直至满足循环结束条件:
利用遗传算法中的交叉算法和/或变异算法对待处理的多个分配序列中的至少部分分配序列进行处理,以将所述至少部分分配序列对应转换成新的分配序列;
在满足所述循环结束条件时,从所述新的分配序列以及未处理的分配序列中选择数据迁移量最小的分配序列作为GPU显存复用方案;以及
在未满足所述循环结束条件时,根据所述数据迁移量从所述新的分配序列以及未处理的分配序列中选择第三数量的数据迁移量最小的分配序列予以保留;以及随机生成若干个分配序列,以使所述若干个分配序列和所保留的分配序列作为下一循环过程中待处理的多个分配序列。
3.如权利要求2所述的方法,其中,利用遗传算法中的交叉算法对待处理的多个分配序列中的至少部分分配序列进行处理,以将所述至少部分分配序列对应转换成新的分配序列包括:
从待处理的多个分配序列中选择至少两个分配序列;以及
利用所述交叉算法将所述至少两个分配序列中针对同一内存段中的部分内存对象在所述至少两个分配序列之间进行交换,以对应形成新的分配序列。
4.如权利要求2所述的方法,其中,利用遗传算法中的变异算法对待处理多个分配序列中的至少部分分配序列进行处理,以将所述至少部分分配序列对应转换成新的分配序列包括:
根据变异概率从待处理的多个分配序列中选择待变异的分配序列;以及
针对所选择的各个分配序列,将该分配序列中的属于不同内存段的至少两个内存对象进行交换,以形成新的分配序列,其中,进行交换的各个内存对象的数据量不大于交换后所属的内存段的存储空间大小。
5.如权利要求4所述的方法,其中,执行交换操作的所述不同内存段以随机方式选择,和/或执行交换操作的各个内存对象在所属内存段中以随机方式选择。
6.如权利要求4所述的方法,其中,所述变异概率随着循环轮次增大而增大。
7.如权利要求2所述的方法,其中,所述循环结束条件包括以下中的至少一种:
循环轮次达到指定轮次;
循环执行时长达到指定时长;和
连续的指定数量轮次中的数据迁移量的变化小于指定阈值。
8.如权利要求1所述的方法,其中,根据所述访问次序的先后顺序以及所述数据量大小顺序对所述各个内存对象进行排序,以得到所述各个内存对象按照数据量从大到小的顺序排列的内存对象序列包括:
针对所述各个内存对象,当该内存对象存在多次访问时,将满足第一访问次序合并条件的访问次序合并,以作为该内存对象对应的访问次序子序列,其中,所述第一访问次序合并条件包括:待合并的访问次序在该内存对象的访问次序序列中相邻、且在该相邻的至少两个访问次序之间的时间段未访问其他内存对象;和/或
将所述各个内存对象中数据量小于指定数据量阈值、且对应的访问次序满足第二访问次序合并条件的多个内存对象合并,以得到合并内存对象,其中,所述合并内存对象的数据量等于所合并的多个内存对象的数据量之和,所述合并内存对象对应的访问次序序列包括所合并的各个内存对象的访问次序,所述第二访问次序合并条件包括:在由待合并的各个内存对象的访问次序所构成的访问次序子序列对应的时间段内未访问其他内存对象;以及
根据对应的访问次序和/或访问次序子序列的先后顺序以及数据量大小顺序对经过合并处理的内存对象进行排序,以得到由经过合并处理的各个内存对象按照数据量从大到小的顺序排列的内存对象序列。
9.如权利要求1所述的方法,其中,从所述内存对象序列中选择第一数量的数据量最大的内存对象包括:
从所述内存对象序列中选择第一数量的数据量最大且各个数据量不同的内存对象;或者
从所述内存对象序列中选择第一数量的最高排位的内存对象。
10.如权利要求1所述的方法,其中,循环执行以下内存对象分配过程,直至生成第二数量的分配序列:将所述内存对象序列中未分配的其他内存对象分配至各个内存段中,以生成由所述各个内存对象和所述各个内存段构成的分配序列包括:
循环执行以下内存对象分配过程,直至生成第二数量的分配序列:
在每一轮内存对象分配过程中,循环执行下述过程,直至所述内存对象序列中所有的内存对象分配完成:
从所述内存对象序列的未分配的其他内存对象中,按照所述内存对象序列的顺序依次选择所述第一数量的内存对象;以及
将所选择的各个内存对象按照指定分配方式分配给各个内存段,所述指定分配方式包括依次分配、随机分配以及根据各个内存段中已分配的内存对象的数据量来分配等方式中的至少一种方式。
11.如权利要求1所述的方法,其中,所述应用程序用于机器学习。
12.一种用于对GPU显存复用方案进行优化的装置,包括:
内存对象确定单元,确定应用程序运行所需访问的内存对象以及各个内存对象的访问次序和数据量;
内存对象排序单元,根据所述访问次序的先后顺序以及所述数据量大小顺序对所述各个内存对象进行排序,以得到所述各个内存对象按照数据量从大到小的顺序排列的内存对象序列;
内存对象选择单元,从所述内存对象序列中选择第一数量的数据量最大的内存对象,其中,所选择的内存对象的数据量之和不大于所述GPU显存;
内存段划分单元,根据所选择的内存对象的数据量将所述GPU显存划分为包括所述第一数量的内存段,其中,所划分的内存段与所选择的内存对象一一对应,各个内存段的存储空间大小与对应的内存对象的数据量大小相同;
内存对象分配单元,将所述内存对象序列中未分配的其他内存对象分配至各个内存段中,以生成由所述各个内存对象和所述各个内存段构成的分配序列,其中,不同轮次的内存对象分配过程所生成的分配序列不同,被分配在同一内存段中的各个内存对象复用该内存段的存储空间;以及
分配序列处理单元,利用遗传算法以及数据迁移量对由多轮内存对象分配过程所生成的多个分配序列进行处理,以选出数据迁移量最小的分配序列作为GPU显存复用方案,
其中,所述内存对象分配单元循环执行,直至生成第二数量的分配序列。
13.如权利要求12所述的装置,其中,所述分配序列处理单元被配置为:
分配序列处理模块,利用遗传算法中的交叉算法和/或变异算法对待处理的多个分配序列中的至少部分分配序列进行处理,以将所述至少部分分配序列对应转换成新的分配序列;
显存复用方案确定模块,在满足循环结束条件时,从所述新的分配序列以及未处理的分配序列中选择数据迁移量最小的分配序列作为GPU显存复用方案;以及
分配序列生成模块,在未满足所述循环结束条件时,根据所述数据迁移量从所述新的分配序列以及未处理的分配序列中选择第三数量的数据迁移量最小的分配序列予以保留;以及随机生成若干个分配序列,以使所述若干个分配序列和所保留的分配序列作为下一循环过程中待处理的多个分配序列,
其中,所述分配序列处理模块循环执行,直至满足所述循环结束条件。
14.如权利要求12所述的装置,其中,所述内存对象排序单元包括:
访问次序合并模块,针对所述各个内存对象,当该内存对象存在多次访问时,将满足第一访问次序合并条件的访问次序合并,以作为该内存对象对应的访问次序子序列,其中,所述第一访问次序合并条件包括:待合并的访问次序在该内存对象的访问次序序列中相邻、且在该相邻的至少两个访问次序之间的时间段未访问其他内存对象;和/或
内存对象合并模块,将所述各个内存对象中数据量小于指定数据量阈值、且对应的访问次序满足第二访问次序合并条件的多个内存对象合并,以得到合并内存对象,其中,所述合并内存对象的数据量等于所合并的多个内存对象的数据量之和,所述合并内存对象对应的访问次序序列包括所合并的各个内存对象的访问次序,所述第二访问次序合并条件包括:在由待合并的各个内存对象的访问次序所构成的访问次序子序列对应的时间段内未访问其他内存对象;以及
内存对象排序模块,根据对应的访问次序和/或访问次序子序列的先后顺序以及数据量大小顺序对经过合并处理的内存对象进行排序,以得到由经过合并处理的各个内存对象按照数据量从大到小的顺序排列的内存对象序列。
15.如权利要求12所述的装置,其中,所述内存对象分配单元包括:
内存对象选择模块,从所述内存对象序列的未分配的其他内存对象中,按照所述内存对象序列的顺序依次选择所述第一数量的内存对象;以及
内存对象分配模块,将所选择的各个内存对象按照指定分配方式分配给各个内存段,所述指定分配方式包括依次分配、随机分配以及根据各个内存段中已分配的内存对象的数据量来分配等方式中的至少一种方式,
其中,所述内存对象选择模块和所述内存对象分配模块循环执行,直至在每一轮内存对象分配过程中所述内存对象序列中所有的内存对象分配完成,以及生成第二数量的分配序列。
16.一种电子设备,包括:至少一个处理器,与所述至少一个处理器耦合的存储器,以及存储在所述存储器上的计算机程序,所述至少一个处理器执行所述计算机程序来实现如权利要求1-11中任一所述的方法。
17.一种计算机可读存储介质,其存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-11中任一所述的方法。
18.一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如权利要求1-11中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210071431.1A CN114398182B (zh) | 2022-01-21 | 2022-01-21 | 用于对gpu显存复用方案进行优化的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210071431.1A CN114398182B (zh) | 2022-01-21 | 2022-01-21 | 用于对gpu显存复用方案进行优化的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114398182A true CN114398182A (zh) | 2022-04-26 |
CN114398182B CN114398182B (zh) | 2024-06-18 |
Family
ID=81233181
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210071431.1A Active CN114398182B (zh) | 2022-01-21 | 2022-01-21 | 用于对gpu显存复用方案进行优化的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114398182B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118312333A (zh) * | 2024-06-07 | 2024-07-09 | 支付宝(杭州)信息技术有限公司 | 基于GPU多stream并发的显存复用方法和装置 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007158550A (ja) * | 2005-12-01 | 2007-06-21 | Matsushita Electric Ind Co Ltd | 画像処理装置及び画像処理方法 |
CN102331977A (zh) * | 2011-09-07 | 2012-01-25 | 上海交通大学 | 内存控制器、处理器系统及内存访问控制方法 |
CN103020320A (zh) * | 2013-01-11 | 2013-04-03 | 西安交通大学 | 一种基于动态搜索的运行时gpu显存级数据复用优化方法 |
US20130297864A1 (en) * | 2012-05-03 | 2013-11-07 | Alok Gupta | Time-multiplexed communication protocol for transmitting a command and address between a memory controller and multi-port memory |
US20140115292A1 (en) * | 2012-10-24 | 2014-04-24 | Apple Inc. | Dynamic obfuscation of heap memory allocations |
US20170109210A1 (en) * | 2014-03-30 | 2017-04-20 | Universiteit Gent | Program Execution On Heterogeneous Platform |
CN108280306A (zh) * | 2018-01-30 | 2018-07-13 | 南京航空航天大学 | 基于tfm三维信息流模型的维修排故方法 |
US20180293701A1 (en) * | 2017-04-07 | 2018-10-11 | Abhishek R. Appu | Apparatus and method for dynamic provisioning, quality of service, and prioritization in a graphics processor |
CN113379587A (zh) * | 2021-05-31 | 2021-09-10 | 阿里巴巴新加坡控股有限公司 | 容器共享显存方法、装置、设备及系统 |
CN113485832A (zh) * | 2021-07-09 | 2021-10-08 | 支付宝(杭州)信息技术有限公司 | 用于对物理内存池进行分配管理的方法及装置、物理内存池 |
-
2022
- 2022-01-21 CN CN202210071431.1A patent/CN114398182B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007158550A (ja) * | 2005-12-01 | 2007-06-21 | Matsushita Electric Ind Co Ltd | 画像処理装置及び画像処理方法 |
CN102331977A (zh) * | 2011-09-07 | 2012-01-25 | 上海交通大学 | 内存控制器、处理器系统及内存访问控制方法 |
US20130297864A1 (en) * | 2012-05-03 | 2013-11-07 | Alok Gupta | Time-multiplexed communication protocol for transmitting a command and address between a memory controller and multi-port memory |
US20140115292A1 (en) * | 2012-10-24 | 2014-04-24 | Apple Inc. | Dynamic obfuscation of heap memory allocations |
CN103020320A (zh) * | 2013-01-11 | 2013-04-03 | 西安交通大学 | 一种基于动态搜索的运行时gpu显存级数据复用优化方法 |
US20170109210A1 (en) * | 2014-03-30 | 2017-04-20 | Universiteit Gent | Program Execution On Heterogeneous Platform |
US20180293701A1 (en) * | 2017-04-07 | 2018-10-11 | Abhishek R. Appu | Apparatus and method for dynamic provisioning, quality of service, and prioritization in a graphics processor |
CN108280306A (zh) * | 2018-01-30 | 2018-07-13 | 南京航空航天大学 | 基于tfm三维信息流模型的维修排故方法 |
CN113379587A (zh) * | 2021-05-31 | 2021-09-10 | 阿里巴巴新加坡控股有限公司 | 容器共享显存方法、装置、设备及系统 |
CN113485832A (zh) * | 2021-07-09 | 2021-10-08 | 支付宝(杭州)信息技术有限公司 | 用于对物理内存池进行分配管理的方法及装置、物理内存池 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118312333A (zh) * | 2024-06-07 | 2024-07-09 | 支付宝(杭州)信息技术有限公司 | 基于GPU多stream并发的显存复用方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN114398182B (zh) | 2024-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210191765A1 (en) | Method for static scheduling of artificial neural networks for a processor | |
CN107659433B (zh) | 一种云资源调度方法及设备 | |
CN112199190B (zh) | 内存分配方法、装置、存储介质及电子设备 | |
CN102402399B (zh) | 带有非对称存储器的系统中的虚拟机存储器管理 | |
CN112416585B (zh) | 面向深度学习的gpu资源管理与智能化调度方法 | |
CN109388490B (zh) | 一种内存分配方法和服务器 | |
CN113742089B (zh) | 异构资源中神经网络计算任务的分配方法、装置和设备 | |
CN103226467A (zh) | 数据并行处理方法、系统及负载均衡调度器 | |
AU2020283588B2 (en) | Reducing cache interference based on forecasted processor use | |
CN113037800B (zh) | 作业调度方法以及作业调度装置 | |
CN111984400A (zh) | 神经网络的内存分配方法及装置 | |
CN114358267A (zh) | 一种降低深度神经网络训练过程中gpu内存占用的方法 | |
CN114386560A (zh) | 数据处理方法和设备 | |
CN114968588A (zh) | 一种面向多并发深度学习训练任务的数据缓存方法和装置 | |
CN113485832B (zh) | 用于对物理内存池进行分配管理的方法及装置、物理内存池 | |
CN108170861A (zh) | 一种基于动态规划的分布式数据库系统协同优化方法 | |
CN114398182B (zh) | 用于对gpu显存复用方案进行优化的方法及装置 | |
CN117349023A (zh) | 应用部署方法、设备及存储介质 | |
CN112100446B (zh) | 搜索方法、可读存储介质和电子设备 | |
US11429524B2 (en) | Optimized hierarchical scratchpads for enhanced artificial intelligence accelerator core utilization | |
CN114356510A (zh) | 用于调度的方法和电子装置 | |
CN113791879A (zh) | 云平台的任务调度方法、装置、设备和计算机存储介质 | |
CN111737001A (zh) | 一种计算系统负载均衡方法、装置及存储介质 | |
CN114239794A (zh) | 操作方法和电子装置 | |
CN110083435A (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 |