CN111831287B - 用于确定执行代码段所需的资源的方法、设备和程序产品 - Google Patents
用于确定执行代码段所需的资源的方法、设备和程序产品 Download PDFInfo
- Publication number
- CN111831287B CN111831287B CN201910323600.4A CN201910323600A CN111831287B CN 111831287 B CN111831287 B CN 111831287B CN 201910323600 A CN201910323600 A CN 201910323600A CN 111831287 B CN111831287 B CN 111831287B
- Authority
- CN
- China
- Prior art keywords
- resources
- resource
- processing unit
- intermediate result
- code segment
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 122
- 238000012545 processing Methods 0.000 claims abstract description 161
- 238000004590 computer program Methods 0.000 claims abstract description 14
- 238000013135 deep learning Methods 0.000 claims description 29
- 238000003860 storage Methods 0.000 claims description 21
- 230000004044 response Effects 0.000 claims description 12
- 238000013468 resource allocation Methods 0.000 abstract description 7
- 230000006870 function Effects 0.000 description 60
- 230000008569 process Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 16
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 10
- 238000013473 artificial intelligence Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 8
- 238000004458 analytical method Methods 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 238000010801 machine learning Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000007418 data mining Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000001902 propagating effect Effects 0.000 description 2
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 229910052802 copper Inorganic materials 0.000 description 1
- 239000010949 copper Substances 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 238000011282 treatment Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3812—Instruction prefetching with instruction modification, e.g. store into instruction stream
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- 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/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本公开的实施例涉及用于确定执行代码段所需的资源的方法、设备和计算机程序产品。该方法包括:利用编译器对代码段进行编译;以及基于所述编译的中间结果,确定用于所述代码段的执行的、与专用处理单元相关联的资源。使用本公开的技术方案,可以快速地在无需实际执行代码段以及分配或者释放资源的情况下确定执行代码段所需的资源,从而可以有助于后续的资源分配,进而可以带来更好的用户体验。
Description
技术领域
本公开的实施例总体上涉及专用处理资源的使用,具体地涉及用于确定执行代码段所需的资源的方法、设备和计算机程序产品。
背景技术
人工智能(AI)(例如,机器学习(ML)、深度学习(DL)和数据挖掘(DM))技术已经得到了广泛的发展,并且大量的人工智能和深度学习应用已经被部署。这些应用可以被设计成在客户端上利用诸如处理和存储资源的各种资源来完成各种处理或分析任务。
由于人工智能任务的复杂度很高并且不断增加,因此需要大量和/或可变量的专用处理资源来满足相应应用的正常运行。例如,已经开发了基于云的计算系统,这样的计算系统包括具有一个或多个专用处理资源的机器(例如,服务器)。在这样的计算系统中,不同的客户端可以根据需要来使用(例如,租赁)计算系统中的专用资源以用于运行各自的应用。然而,目前对于专用处理资源的使用并不灵活,从而造成了资源使用效率的降低或者资源的浪费。
发明内容
本公开的实施例提供了用于确定执行代码段所需的资源的方法、设备和计算机程序产品。
在本公开的第一方面中,提供了一种用于确定执行代码段所需的资源的方法。该方法包括:利用编译器对代码段进行编译;以及基于所述编译的中间结果,确定用于所述代码段的执行的、与专用处理单元相关联的资源。
在本公开的第二方面中,提供了一种用于确定执行代码段所需的资源的设备。该设备包括:至少一个处理单元;至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理单元并且存储用于由所述至少一个处理单元执行的指令,所述指令当由所述至少一个处理单元执行时,使得所述设备执行动作,所述动作包括:利用编译器对代码段进行编译;以及基于所述编译的中间结果,确定用于所述代码段的执行的、与专用处理单元相关联的资源。
在本公开的第三方面中,提供了一种计算机程序产品。该计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,所述机器可执行指令在被执行使得机器执行根据本公开的第一方面所描述的方法的任意步骤。
提供发明内容部分是为了以简化的形式来介绍对概念的选择,它们在下文的具体实施方式中将被进一步描述。发明内容部分无意标识本公开的关键特征或必要特征,也无意限制本公开的范围。
附图说明
通过结合附图对本公开示例性实施例进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施例中,相同的参考标号通常代表相同部件。
图1示出了可以在其中实现本公开的某些实施例的计算系统100的示意图;
图2示出了根据本公开的实施例的用于确定执行代码段所需的资源的方法200的流程图;
图3示出了根据本公开的实施例的编译过程300的示意图;
图4示出了根据本公开的实施例的用于确定资源的方法400的流程图;
图5示出了根据本公开的实施例的用于处理资源分配的方法500的流程图;
图6示出了根据本公开的实施例的用于确定资源的方法600的流程图;
图7示出了根据本公开的实施例的用于处理资源释放的方法700的流程图;
图8示出了根据本公开的实施例的用于确定资源的方法800的流程图;
图9示出了可以用来实施本公开内容的实施例的示例设备900的示意性框图。
在各个附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以按照各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
如以上在背景技术中所描述的,随着人工智能技术的发展,为了更好地服务于人工智能技术中所涉及的处理和分析任务,需要估计执行处理和分析任务时所需的专用处理资源的资源量,从而使得可以对专用处理资源进行合理以及高效的使用。
以人工智能技术中的、利用专用处理单元(例如,图形处理单元,GPU)的资源(例如,计算资源和存储资源)的深度学习为例,在任务的处理和分析过程中需要关注于在专用处理单元中需要多少线程来用于计算以及需要多少存储器,这是因为一台服务器上的专用处理单元的(线程)数量以及存储器都是有限的。实践中,对于单块专用处理单元而言,存储器有可能是最受到关注的资源。
例如,在一切皆服务(XaaS)框架中,分布式并行深度学习框架可以按照若干种不同方式工作:在用于元数据提取的深度学习框架中,可以将深度学些任务调度到多个专用处理单元或者虚拟专用处理单元中,就像这一任务在具有更强大的计算能力的单个虚拟专用处理单元上或者在仅仅是物理专用处理单元的子设备并且只具有它的主专用处理单元的计算能力的一部分的虚拟专用处理单元上运行一样;在以数据并行方式工作的基于中间表示(IR)的深度学习框架中,其中为了使调度器工作,需要知道执行这一深度计算需要多少存储器和线程/块/流传输多处理器(SM);在以模型并行方式工作的基于中间表示的深度学习框架中,调度器需要知道在具体的专用处理单元中执行一个或多个特定内核函数需要多少存储器和线程/块/流传输多处理器。在所有上述情况中,为了有效地调度深度学习任务,必须在实际地运行这一任务之前知道运行这一任务所需要的资源要求。
深度学习任务实质上是一种程序,在一些情况下也可以被称为代码段。在执行普通程序或者深度学习程序时,都需要利用编译器来对程序进行编译。
在现代编译器设计和实现中,用于普通程序(例如,C/C++或者FORTRAN)的编译器(例如,GCC和LLVM)通常被分为两个部分:前端和后端。前端将源程序作为输入并将其转换为独立于硬件的中间表示。中间表示是按照在编译器内部被使用的另一语言而被编写的另一程序,但易于优化并易于被转换为机器代码。此后,后端将中间表示程序编译并且优化为二进制可执行文件,其包含目标中央处理单元的机器(例如,X86、Power或ARM等)的代码。当这一可执行二进制文件被运行时,通常它仍然需要来自运行时的支持:第一,它需要来自操作系统的加载器以将自身和其他动态链接库(DLL,例如,C标准库,CUDA运行时库等)加载到计算机的主存储器中;第二,它需要链接器以用来基于加载的动态链接库的地址来重定位未解析的符号或函数的地址。在Linux中,连接器(ld)程序则作为加载器和链接器二者工作。
对于深度学习开发而言,深度学习开发框架通常由前端和后端组成。前端用来向程序员提供一组应用编程接口(API),这些应用编程接口通常按照更容易的编程语言(例如,Python)而被定义。应用编程接口定义可用的数据类型,诸如张量、数组等,以及以下方法:如何定义不同的层,诸如输入层、输出层和隐藏层以及每个隐藏层上的操作;如何通过连接不同的层来构建整个神经网络;分类器函数等等。后端通常按照更有效的语言(例如,C或C++)而被实现。后端需要实现在应用编程接口中被定义的所有数据类型和方法。在运行时,前端经由Python C/C++扩展或从后端编译的动态链接库而被链接到后端。
深度学习编译器可以被嵌入到框架中或者可以是独立的可执行文件,就像普通的程序编译器一样,其也包括前端和后端,但与深度学习开发框架具有许多不同。
在深度学习编译器中,通过编译深度学习程序而从前端被输出的作为结果的中间表示通常是计算图形,而不是中间表示程序。计算图的顶点(或节点)定义神经网络中的计算(通常被称为内核),并且两个顶点之间的边定义两个内核之间的依赖性。通常,这一中间表示计算图不同于由程序中的用户定义的图,因为编译器总是对原始计算机图执行一些优化。一些普通的优化是将若干个操作节点融合为一个、平铺矩阵操作等。
代替仅仅针对目标中央处理单元生成代码,深度学些编译器的后端中的代码生成将生成代码的两个部分,即,主机代码和设备代码。
主机代码将由普通的编译器(例如,GCC或LLVM)编译成中央处理单元可执行文件。这一可执行文件与普通程序中的可执行文件相同,在主计算机中的中央处理单元和主存储器中运行,并且可以具有来自运行时的支持。主机代码的主要角色基本上是针对在专用处理单元设备中运行的内核函数的调度器和协调器。
设备代码针对目标设备而被生成,并且将由供应商特定的编译器编译到库中。结果库将在被附接到主机的目标设备中运行,因此,其不能具有除了来自主机代码之外的任何支持。
举例而言,如果目标设备是Nvidia的专用处理单元,则设备代码可以是CUD内核函数的C/C++代码或PTX代码,其中每个内核函数对应于被定义在中间表示计算图中的内核操作。这一代码将由供应商特定的编译器(例如,NVCC)编译。设备代码的主要角色基本上是库,从而等待来自主机代码的调用。
主机代码的典型工作流程可以包括:初始化目标专用处理单元设备;读入中间表示计算图;针对图中的计算路径中的每个计算节点,从设备代码库选择对应的CUDA内核函数实现,针对用于内核函数的输入和输出分配存储器,针对内核函数执行分配工作空间存储器,将内核函数的输入参数从中央处理单元复制到专用处理单元,调用内核函数,在专用处理单元中执行内核函数,将内核函数的输出从专用处理单元复制回中央处理单元;释放目标专用处理单元设备;以及输出计算结果。
目前,了解有多少存储器或者线程在CUDA应用中被使用的最常用方式是使用随着CUDA SDK而被提供的nvidia-smi工具包。并且其他工具(诸如nvprof)在调节CUDA应用性能中也非常有用。但是这两种工具具有同样的问题:第一,只能提供全局信息,诸如存储器和专用处理单元被使用了多少利用率,或者多少页面切换已经发生,由于没有详细信息被呈现,因此这些针对资源调度是无用的;第二,它们需要运行应用到最后,并且其中的问题是,在诸如Asaka的框架或者基于中间表示的框架中,编译过程通常在门户或客户端中,由于没有装备任何专用处理单元设备,从而使得编译根本无法被执行,以及由于编译过程与深度学习训练过程耦合,因此非常耗费时间和计算资源。最重要的是,如果真正的运行了整个学习过程,则根本不需要收集元数据以判断执行任务所需要的资源。
为了至少部分地解决上述问题以及其他潜在问题中的一个或者多个问题,本公开的实施例提出了一种确定执行代码段所需的资源的方案。该方案通过创建虚拟深度学习编译器以收集对于在专用处理单元中运行深度任务的存储器和线程/块要求来实现判断执行任务所需要的资源的新方法。采用本公开的技术方案,可以有效并且高效地确定执行任务所需要的资源。
应当理解,虽然在本文中仅以深度学习应用作为新兴技术应用的示例进行了讨论,然而应当理解,本发明的实施例可以同样适用于其它新兴技术应用,诸如高性能计算(HPC)应用、机器学习应用和人工智能应用。
图1示出了本公开的实施例可以在其中被实现的示例计算系统100的示意图。在该计算系统100中部署了多个服务器110-1、服务器110-2、...、服务器110-M(以下统称称为服务器110,其中M为大于1的自然数)。计算系统100还包括专用处理资源160-1、专用处理资源160-2、...、专用处理资源160-M(以下统称为专用处理资源160,其中M为大于1的自然数)。每个服务器110上具有一个或多个专用处理资源160。包括多个专用处理资源服务器160的这样的专用处理资源集群或池是动态和共享的。
在图1的示例中,服务器110-1具有专用处理资源160-1,服务器110-2具有专用处理资源160-2,并且服务器110-M具有专用处理资源160-M。专用处理资源160的示例可以包括但不限于图形处理单元、现场可编程门阵列(FPGA)等。为便于讨论,某些实施例将以图形处理单元作为专用处理资源160的示例进行描述。除了专用处理资源160之外,服务器110还可以包括诸如中央处理单元的一个或多个通用处理单元(未示出)。
图1还示出了多个客户端120-1、120-2...120-N等(以下统称或单独称为客户端120,其中N为大于1的自然数),分别具有要运行的应用150-1、150-2、...、150-N(以下统称为应用150,其中N为大于1的自然数)。应用150可以是机器上可运行的任何应用,该应用可以被设计为执行相应数据处理或分析等任务。作为示例,应用150可以执行与深度学习、机器学习或高性能计算以及人工智能等相关的数据处理或分析任务。
为了能够快速高效运行应用150,客户端120可以请求服务器110的专用处理资源160来运行这些应用150。在这样的实现中,客户端120可以通过互连网络130连接到一个或多个服务器110,并且将应用150交由服务器110的一个或多个专用处理资源160运行。取决于客户端120、服务器110和/或专用处理资源160所支持的接口,互连网络130可以支持基于诸如远程直接内存访问(RDMA)和传输控制协议(TCP)等各种网络传输技术的不同类型的有线或者无线连接。
应当理解,图1示出的设备和/或布置仅是一个示例。在其他示例中,该计算系统100可以包括任意适当数目的服务器110和客户端120。每个服务器110可以安装有任意适当数目的专用处理资源160,并且每个客户端120可以具有待运行的多个应用150。此外,专用处理资源调度系统100还包括远程控制器140和远程数据库170。
远程控制器140可以基于客户端120所请求的专用处理资源的资源量和系统100中的可用专用处理资源来为客户端120分配专用处理资源160。然后,客户端120可以向专用处理资源服务器110请求所分配的专用处理资源160。远程数据库170能够通过互联网络130与客户端120以及远程控制器140进行通信。远程数据库170能够存储客户端120编译应用150时所提取的元数据,并且该元数据能够由远程控制器140获取。应当理解,尽管在图1中所示出的控制器140和远程数据库170是分离的,但是二者也可以被实现在同一个设备上。
为了描述清楚和简洁,将主要以图形处理单元作为专用处理资源160的示例来详细描述本公开的示例实施例。如已知的,图形处理单元作为一种专用处理器,其强大的计算能力源自其大量的内核和高带宽的内存。在图形处理单元硬件架构中,一个图形处理单元通常具有大量的图形处理单元内核(kernel),例如,几千个或者接近一万个内核。图形处理单元内核作为一种专用处理资源,是最基本的处理单元,也被称为流传输处理器(SP)。指令和任务最终都在图形处理单元内核上被处理。多个图形处理单元内核同时执行指令,从而实现了图形处理单元的并行计算。多个流传输处理器加上一些其他资源,例如寄存器、共享内存,可以组成一个流传输多处理器。
但是,应当理解,图形处理单元仅仅是一种示例性的专用处理资源160,并非用于限制本公开的范围。在此描述的精神和原理可以应用于其他专用处理资源,例如诸如现场可编程门阵列之类的加速器中的处理资源,不论是目前已知的还是将来开发的,而并不仅仅限于图形处理单元内核。
图2示出了根据本公开的实施例的用于确定执行代码段所需的资源的方法200的流程图。方法200例如可以在如图1中所示的客户端120处被执行。应当理解的是,方法200还可以包括未示出的附加步骤和/或可以省略所示出的步骤,本公开的范围在此方面不受限制。
在框202,客户端120利用编译器对代码段进行编译。根据本公开的实施例,代码段可以是指一种程序或者应用,例如,深度学习任务。编译器则可以包括位于客户端120的、用于对代码段进行编译的各种编译器,诸如用于前端或者后端的编译器。
根据本公开的实施例,当客户端120利用编译器对代码段进行编译时,会产生中间结果。这些中间结果可以是诸如主机代码、设备代码以及元数据等,其中主机代码和设备代码可以是诸如二进制代码的形式。这些中间结果中包括与执行代码段所需的资源有关的信息。
在框204,客户端120基于编译的中间结果,确定用于代码段的执行的、与专用处理单元相关联的资源。此时,可以在无需实际执行代码段的情况下,通过中间结果来确定用于代码段的执行的、与专用处理单元相关联的资源。
根据本公开的实施例,客户端利用编译器对代码段进行编译时可以生成主机代码。在主机代码生成过程期间,编译器需要生成主机代码,主机代码包括专用处理单元设备中的存储器分配/释放函数。这些资源将被用于运行相应的程序。例如,在运行扩大程序的场景中,当扩大程序利用专用处理单元而被执行之前,首先要把它的对应的参数、输出等资源分配好。对于普通的C程序而言,程序员在利用C程序编写扩大函数时,需要在C语言中编写上述内容。然而,对于深度学习程序,程序员只需要编写与深度学习相关的算法、网络结构、每个算子。具体地如何在专用处理单元上分配存储器以及利用专用处理单元执行代码函数都是由一个具有编译器框架提供。
因此,根据本公开的实施例,可以对从编译器产生的中间结果进行处理以用来确定用于代码段的执行的、与专用处理单元相关联的资源。例如,在Nvidia的专用处理单元的场景中,所产生的中间结果可以是NVCC的一个C程序。因此,可以对这个C程序进行处理,把诸如分配/释放存储器的函数的关键数据以及这样的函数拿出来,从而使得可以记录最高峰时的存储器需求最大值(例如,200MB)。
对于深度学习程序而言,编译器的工作是一种例程,编译器的工作会按照一定的规律进行,而并不会由于网络结构的不同而不同。这是因为专用处理单元程序在编译之前最终是一个计算图,其中每个节点即为需要在专用处理单元上执行的一个函数,而一个节点与另一节点的指向关系(例如,A节点指向B节点)指示B节点必须在A节点计算完成之后,因此需要获得A节点的计算结果以作为B节点的输入。所以深度学习程序的运行实质上是一个循环,其中需要遍历这样所有的计算图,找到所有的依赖关系,之后产生C语言代码。在这个过程中,实际上每编译一个节点之前都需要进行相同的工作,例如,分配存储器,分配线程,产生线程代码等。这些工作的内容实质上相同,只是代码的内容不同。
根据本公开的实施例,在设备代码生成过程中,每个编译器都需要调用链接到供应商特定编译库(例如,来自TVM中Nvidia的libNVVM)的API,或者调用链接到供应商特定的内核实现库(例如,来自TensorFlow中Nvidia的cuDNN库)。在每种情况中,都可以通过向编译库或内核实现库内部的其他应用编程接口添加一些额外的函数调用,来获得被调用内核函数的动态存储器需求。因此,根据本公开的实施例,可以在代码段的编译过程中创建虚拟深度学习编译器,其并不改变前端内部的任何内容,而是在代码生成器运作期间修改编译器的行为。
图3示出了根据本公开的实施例的编译过程300的示意图,其中包括根据本公开的实施例所创建的虚拟专用处理单元编译器。编译过程300例如可以在如图1中所示的客户端120处被实施。应当理解的是,编译过程300还可以包括未示出的附加内容和/或可以省略所示出的内容,本公开的范围在此方面不受限制。
在编译过程300中,首先是应用150被提供给编译器(前端)304以用于编译。如前所述,编译器(前端)304对应用150进行编译可以产生例如计算图形。
而后,由编译器(前端)304通过对应用150进行编译而产生的计算图形被提供给主机编译器(后端)306和虚拟专用处理单元编译器(后端)308以用于编译。如前所述,主机编译器(后端)306对计算图形进行编译可以产生主机代码。根据本公开的实施例,虚拟专用处理单元编译器(后端)308对计算图形进行编译可以产生设备代码以及元数据。在虚拟专用处理单元编译器(后端)308的运行过程中,可以相继产生用于初始化的代码、用于分配或者释放资源的代码以及用于报告输出的代码。
根据本公开的实施例,用于初始化的代码可以被用于对资源记录进行初始化,而资源记录可以记录与要分配或者释放的资源有关的信息。资源记录可以利用最大存储器使用指示器(max_men)、总存储器使用指示器(tota_men)、资源指示链表(res_list)和存储器信息链表(mem_info)来记录与要分配或者释放的资源有关的信息。
max_men被用于指示到目前为止被分配的最大峰值存储器使用,total_mem被用于到目前为止被分配的总存储器使用。max_mem将被用于向调度器报告资源需求,并且total_mem仅在编码器内部被使用以保持max_mem更新。用于初始化的代码在初始化阶段将max_men和total_mem初始化为0。
res_list包含针对每个函数的节点以记录针对这一函数需要多少资源,这一列表将被用于向调度器报告资源需求。mem_info包含针对每个存储器块的节点,该节点被分配有这一存储器块的大小和地址的信息,这一列表在内部被用于将每个释放函数与它的对应的分配函数匹配。用于初始化的代码在初始化阶段将res_list和mem_info初始化为0,即,无内容。
经过初始化的max_men、total_mem、res_list和mem_info可以被用于记录与要分配或者释放的资源有关的信息。
根据本公开的实施例,用于分配或者释放资源的代码在虚拟专用处理单元编译器(后端)308的执行过程中被生成。
本公开的实施例的目的在于,在并不在专用处理单元上执行代码的情况下计算执行深度学习程序所需要的资源量。因此,可以从对深度学习程序进行编译所生成的中间结果(例如,函数或者代码)中删除需要在专用处理单元上执行的代码,之后该中间结果将变成空函数。由于此时代码将只在中央处理单元上执行,而不会在专用处理单元上执行任何代码,因此执行时间很短,这是因为对于庞大的深度学习程序而言,在专用处理单元上执行深度代码可能需要数星期的时间。具体而言,当需要在专用处理单元上执行代码时,需要在中央处理单元上执行一些函数,调用CUDA在中央处理单元上分配存储器。因此,根据本公开的实施例,可以通过删除或修改代码的形式来避免针对专用处理单元上真实地分配存储器,并且可以仅仅将原本要进行的分配记录下来(例如,记录这样的函数在正常被执行时需要分配多少存储器)。
根据本公开的实施例,在专用处理单元处的执行代码将被删除,用于分配存储器和释放存储器的代码将被改写,其中进行记录,例如,记录当前存储器使用的最高峰值,存储器使用的总量,其中存在由于分配存储器而返回的随机值,其可以是函数指针并且对应于传入的参数,用于指示此次分配的存储器的大小。可以维护这个随机值,从而使得在释放资源时可以在列表中寻找这个指针,并且然后将其去除。应当理解,本公开的上述原理的实现也可以适用于中央处理单元,而并不限于专用处理单元。
在一些实施例中,对执行虚拟专用处理单元编译器(后端)308所生成的代码进行如下处理。
如果要被生成的代码是要初始化或者释放专用处理单元设备,请将其移除。由于编译库应用编程接口和资源计算应用编程接口二者仅依赖于CUDA运行时或驱动器应用编程接口内部的实现,因此无需专用处理单元设备。
如果要被生成的代码是在专用处理单元的内部运行的C/C++内核源代码,请将源代码保存在磁盘文件中。
如果要被生成的代码是要调用内核函数:如果内核在库中被实现,则将参数保存到内核函数,并且利用其值来自保存的参数的参数,将内核函数调用替换为来自同一库的资源计算应用编程接口,这些参数通常是被输入到内核计算函数的数据块的大小和指针;以及如果内核通过编译之前生成的C/C++内核源代码而被实现,则添加额外的编译应用编程接口以获取这一内核函数的动态资源需求。在这两种情况中,在资源需求应用编程接口返回之后:从代码生成器获得函数名称;保存由资源需求应用编程接口返回的大小,搜索这一函数的节点是否存在于res_list中,如果没有,则请将新节点添加到这一列表中,并且将返回的资源添加到这一函数节点;通过向其添加大小来更新total_mem;以及如果total_mem大于max_men,则将max_mem更新为total_mem。
如果要被生成的代码是将数据从中央处理单元复制到专用处理单元或相反,请将其移除。
如果要被生成的代码是在专用处理单元中分配存储器:在编译状态机中的当前活动帧中搜索内核函数;通过直接地返回虚拟唯一地址来删除针对CUDA存储器分配函数调用而被生成的代码;搜索这一函数的节点是否存在于res_list中,如果没有,则将新节点添加到这一列表中,并且将返回的资源添加到这一函数节点;将节点(大小,返回地址)添加到mem_info列表中;通过向其添加大小来更新total_mem;以及如果total_mem大于max_men,则将max_mem更新为total_mem。
如果要被生成的代码是释放专用处理单元中的一块存储器:从mem_info列表找到节点(大小,返回地址)并且将大小保存在这一节点中;通过从中减去大小来更新total_mem;以及从mem_info列表移除节点(大小,返回地址)。
根据本公开的实施例,针对内核函数的线程需求可以通过拦截对内核函数的调用而被获得。例如,以Nvidia为例,内核函数通常由主机代码使用Nvidia驱动程序APIcuLaunchKernel启动,其被定义如下:CUresult cuLaunchKernel(CUfunction f,unsignedint gridDimX,unsigned int gridDimY,unsigned int gridDimZ,unsigned intblockDimX,unsigned int blockDimY,unsigned int blockDimZ,…)。通过拦截对这一函数的调用,可以收集针对每个内核函数的线程需求,其中:f是内核函数;gridDimX、gridDimY和gridDimZ这三个参数定义在网格中存在多少个块;并且blockDimX、blockDimY和blockDimZ这三个参数定义在每个块中存在多少个线程。因此,运行内核函数f所需要的线程是gridDimX*gridDimY*gridDimZ*blockDimX*blockDimY*blockDimZ。
根据本公开的实施例,结合上述描述,用于确定执行代码段所需的资源的方法200中的框202可以通过图4中所示出的用于确定资源的方法400以及如图6中所示出的用于确定资源的方法600等来实现。
图4示出了根据本公开的实施例的用于确定资源的方法400的流程图。方法400与方法200同样例如可以在如图1中所示的客户端120处被执行。应当理解的是,方法400还可以包括未示出的附加步骤和/或可以省略所示出的步骤,本公开的范围在此方面不受限制。
在框402,客户端120确定中间结果是否指示针对代码段的执行而要分配的资源。根据本公开的实施例,框402中所涉及的具体内容可以包括如上所述的由客户端120对执行虚拟专用处理单元编译器(后端)308所生成的代码进行判断,以确定所生成的代码是否指示针对代码段的执行而要分配的资源。
在框404,客户端120响应于确定中间结果指示要分配的资源,在资源记录中记录与要分配的资源有关的信息。根据本公开的实施例,当客户端120在对执行虚拟专用处理单元编译器(后端)308所生成的代码进行判断后确定所生成的代码指示针对代码段的执行而要分配的资源时,记录与要分配的资源有关的信息。由于本公开的目的之一在于在避免实际执行代码段的情况下确定执行代码段所需的资源。因此,方法400还可以包括具体用于处理资源分配的附加步骤,这些步骤可以被体现在如图5中所示出的用于处理资源分配的方法500中。
图5示出了根据本公开的实施例的用于处理资源分配的方法500的流程图。方法500与方法200和方法400同样例如可以在如图1中所示的客户端120处被执行。应当理解的是,方法500还可以包括未示出的附加步骤和/或可以省略所示出的步骤,本公开的范围在此方面不受限制。
在框502,客户端120从中间结果中查找用于分配要分配的资源的指令。根据本公开的实施例,框502中所涉及的具体内容可以包括如上所述的由客户端120对执行虚拟专用处理单元编译器(后端)308所生成的代码进行判断,以确定所生成的代码是否包括用于分配要分配的资源的指令,并且查找以确定用于分配要分配的资源的指令。
在框504,客户端120响应于查找到指令,从中间结果删除指令,或者修改中间结果中的指令以避免对要分配的资源的分配。根据本公开的实施例,当客户端120确定用于分配要分配的资源的指令时,可以通过删除这些指令的形式来避免实际执行代码段。根据本公开的另一些实施例,当客户端120确定用于分配要分配的资源的指令时,可以通过修改这些指令以避免对要分配的资源的分配的方式来避免实际执行代码段同时避免实际分配资源。
图6示出了根据本公开的实施例的用于确定资源的方法600的流程图。方法600与方法200、方法400和方法500同样例如可以在如图1中所示的客户端120处被执行。应当理解的是,方法600还可以包括未示出的附加步骤和/或可以省略所示出的步骤,本公开的范围在此方面不受限制。
在框602,客户端120确定中间结果是否指示针对代码段的执行而要释放的资源。根据本公开的实施例,框602中所涉及的具体内容可以包括如上所述的由客户端120对执行虚拟专用处理单元编译器(后端)308所生成的代码进行判断,以确定所生成的代码是否指示针对代码段的执行而要释放的资源。
在框604,客户端120响应于确定中间结果指示要释放的资源,从资源记录中移除与要释放的资源有关的信息。根据本公开的实施例,当客户端120在对执行虚拟专用处理单元编译器(后端)308所生成的代码进行判断后确定所生成的代码指示针对代码段的执行而要释放的资源时,从资源记录中移除与要释放的资源有关的信息。应当理解,在框604中所记载的要从资源记录中移除的、与要释放的资源有关的信息中所涉及的资源可以是在方法400的框404中的、在资源记录中记录与要分配的资源有关的信息中所涉及的资源。由于本公开的目的之一在于在避免实际执行代码段的情况下确定执行代码段所需的资源。因此,方法600还可以包括具体用于处理资源释放的附加步骤,这些步骤可以被体现在如图7中所示出的用于处理资源释放的方法700中。
图7示出了根据本公开的实施例的用于处理资源释放的方法700的流程图。方法700与方法200、方法400、方法500和方法600同样例如可以在如图1中所示的客户端120处被执行。应当理解的是,方法700还可以包括未示出的附加步骤和/或可以省略所示出的步骤,本公开的范围在此方面不受限制。
在框702,客户端120从中间结果中查找用于释放要释放的资源的指令。根据本公开的实施例,框702中所涉及的具体内容可以包括如上所述的由客户端120对执行虚拟专用处理单元编译器(后端)308所生成的代码进行判断,以确定所生成的代码是否包括用于释放要释放的资源的指令,并且查找以确定用于释放要释放的资源的指令。
在框704,客户端120响应于查找到指令,从中间结果删除指令,或者修改中间结果中的指令以避免对要释放的资源的释放。根据本公开的实施例,当客户端120确定用于释放要释放的资源的指令时,可以通过删除这些指令的形式来避免实际执行代码段。根据本公开的另一些实施例,当客户端120确定用于释放要释放的资源的指令时,可以通过修改这些指令以避免对要释放的资源的释放的方式来避免实际执行代码段同时避免实际释放资源。
根据本公开的实施例,由于深度学习程序中可以多次涉及对专用处理单元资源的分配和释放,因此前述方法400、方法500、方法600和方法700中的步骤可以被重复地、反复地执行。直至客户端120完成利用编译器对代码段进行编译。此时,方法400、方法500、方法600或方法700还可以包括涉及用于通过资源量来确定执行代码段所需的资源的附加步骤,这些步骤可以被体现在如图8中所示出的用于确定资源的方法800中。
图8示出了根据本公开的实施例的用于确定资源的方法800的流程图。方法800与方法200、方法400、方法500、方法600和方法700同样例如可以在如图1中所示的客户端120处被执行。应当理解的是,方法800还可以包括未示出的附加步骤和/或可以省略所示出的步骤,本公开的范围在此方面不受限制。
在框802,客户端120获取在代码段的编译期间在资源记录中所记录的资源量。根据本公开的实施例,上述资源量可以包括如上所述利用最大存储器使用指示器(max_men)、总存储器使用指示器(tota_men)而被指示的资源量,其中可以包括到目前为止被分配的最大峰值存储器使用以及被用于到目前为止被分配的总存储器使用等信息。此外,上述资源量也可以包括方法400、方法500、方法600或方法700每次被执行后所记录的当时的资源量。
在框804,客户端120基于所记录的资源量,确定执行代码段所需的资源。根据本公开的实施例,客户端120可以通过在框802中获取的在代码段的编译期间在资源记录中所记录的资源量来确定执行代码段所需的资源。此时,即实现了在无需实际执行代码段以及分配或者释放资源的情况下确定执行代码段所需的资源。
根据本公开的实施例,虚拟编译可以被集成到深度学习Python程序中。此时,由于虚拟编译器从深度学习Python程序被调用,因此虚拟编译器内部的应用编程接口也需要被传递给深度学习Python程序。这一应用编程接口将返回针对深度学习任务的执行的存储器/线程要求。
在根据本公开的实施例的实际测试中,使用真正的编译器来编译Keras ResNet-50模型并在CUDA GPU中执行需要确定资源使用的代码段,并且使用工具包nvidia-smi来概要描述存储器使用。经测试,真实编译所得到的资源使用与使用虚拟编译器来编译相同的深度学习程序所确定的资源使用完全相同。
应当理解,以上各个附图中所采用的各种元件的数目和物理量的大小仅为举例,而并不是对本公开的保护范围的限制。上述数目和大小可以根据需要而被任意设置,而不会对本公开的实施例的正常实现产生影响。
以上参考图2至图8描述了用于确定执行代码段所需的资源的方法200、编译过程300、用于确定资源的方法400、用于处理资源分配的方法500、用于确定资源的方法600、用于处理资源释放的方法700和用于确定资源的方法800流程以及内容。应当理解,上述描述是为了更好地展示本公开中所记载的内容,而不是以任何方式进行限制。
通过以上参考图1至图8的描述,根据本公开的实施例的技术方案相对于传统方案具有诸多优点。例如,通过创建虚拟深度学习编译器并且利用它来编译深度学习程序,可以有效地收集之前从NVCC收集的内核函数的动态资源需求。此时,即使深度学习框架正使用第三方专用处理单元内核而被实现并绕过CUDA内核函数,也可以收集必要的信息。此外,当从虚拟编译器移除所有与设备相关的操作(例如,所涉及的代码)时,编译过程仅依赖于CUDA软件,因此可以在门户或客户端中编译深度学习程序,而无需装备任何专用处理单元设备。再者,由于所有涉及真正的内核和数据移动的操作都已通过虚拟编译器而被移除,因此编译过程将非常快地被完成。同时,当从代码生成器记录函数调用信息时,可以得到关于分配和释放存储器的时间和地点的所有信息。最后,可以直接地向调度程序报告全局信息,需要多少资源以及哪些内核函数如何使用这些资源。
因此,使用本公开的技术方案,可以快速地在无需实际执行代码段以及分配或者释放资源的情况下确定执行代码段所需的资源,从而可以有助于后续的资源分配,进而可以带来更好的用户体验。
图9图示出了可以用来实施本公开内容的实施例的示例设备900的示意性框图。如图所示,设备900包括中央处理单元(CPU)901,其可以根据存储在只读存储器(ROM)902中的计算机程序指令或者从存储单元908加载到随机访问存储器(RAM)903中的计算机程序指令,来执行各种适当的动作和处理。在RAM 903中,还可存储设备900操作所需的各种程序和数据。CPU 901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
设备900中的多个部件连接至I/O接口905,包括:输入单元906,例如键盘、鼠标等;输出单元907,例如各种类型的显示器、扬声器等;存储单元908,例如磁盘、光盘等;以及通信单元909,例如网卡、调制解调器、无线通信收发机等。通信单元909允许设备900通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
上文所描述的各个过程和处理(例如,方法200、方法400、方法500、方法600、方法700和方法800),可由处理单元901执行。例如,在一些实施例中,方法200、方法400、方法500、方法600、方法700和方法800可以被实现为计算机软件程序,其被有形地包含于机器可读介质(例如,存储单元908)中。在一些实施例中,计算机程序的部分或者全部可以经由ROM902和/或通信单元909而被载入和/或安装到设备900上。当计算机程序被加载到RAM 903并由CPU 901执行时,可以执行上文描述的方法200、方法400、方法500、方法600、方法700和方法800的一个或多个动作。
本公开可以是方法、设备、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是、但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
这里参照根据本公开实施例的方法、设备(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (15)
1.一种用于确定执行代码段所需的资源的方法,包括:
利用编译器对代码段进行编译;
在所述编译的中间结果内标识指示针对所述代码段的执行而要分配的、与专用处理单元相关联的资源的指令;
响应于确定所述中间结果指示要分配的所述资源,在资源记录中记录与要分配的所述资源有关的信息;
响应于标识用于分配所述资源的所述指令,还包括:
从所述中间结果删除所述指令,或者
修改所述中间结果中的所述指令,以避免对要分配的所述资源的分配。
2.根据权利要求1所述的方法,还包括:
确定所述中间结果是否指示针对所述代码段的所述执行而要释放的资源;以及
响应于确定所述中间结果指示所述要释放的资源,从资源记录中移除与所述要释放的资源有关的信息。
3.根据权利要求2所述的方法,还包括:
从所述中间结果中查找用于释放所述要释放的资源的指令;以及
响应于查找到所述指令,
从所述中间结果删除所述指令,或者
修改所述中间结果中的所述指令,以避免对所述要释放的资源的释放。
4.根据权利要求1所述的方法,还包括:
获取在所述编译期间在资源记录中所记录的资源量;以及
基于所记录的所述资源量,确定执行所述代码段所需的所述资源。
5.根据权利要求1所述的方法,其中所述资源包括所述专用处理单元中的计算资源和存储资源中的至少一项。
6.根据权利要求1所述的方法,其中所述资源记录包括以下至少一项:最大存储器使用指示器;总存储器使用指示器;资源指示链表;以及存储器信息链表。
7.根据权利要求1所述的方法,其中所述代码段包括深度学习应用的任务。
8.一种用于确定执行代码段所需的资源的设备,包括:
至少一个处理单元;
至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理单元并且存储用于由所述至少一个处理单元执行的指令,所述指令当由所述至少一个处理单元执行时,使得所述设备执行动作,所述动作包括:
利用编译器对代码段进行编译;
在所述编译的中间结果内标识指示针对所述代码段的执行而要分配的、与专用处理单元相关联的资源的指令;
响应于确定所述中间结果指示要分配的所述资源,在资源记录中记录与要分配的所述资源有关的信息;
响应于标识用于分配所述资源的所述指令,还包括:
从所述中间结果删除所述指令,或者
修改所述中间结果中的所述指令,以避免对要分配的所述资源的分配。
9.根据权利要求8所述的设备,其中所述动作还包括:
确定所述中间结果是否指示针对所述代码段的所述执行而要释放的资源;以及
响应于确定所述中间结果指示所述要释放的资源,从资源记录中移除与所述要释放的资源有关的信息。
10.根据权利要求9所述的设备,其中所述动作还包括:
从所述中间结果中查找用于释放所述要释放的资源的指令;以及
响应于查找到所述指令,
从所述中间结果删除所述指令,或者
修改所述中间结果中的所述指令,以避免对所述要释放的资源的释放。
11.根据权利要求8所述的设备,其中所述动作还包括:
获取在所述编译期间在资源记录中所记录的资源量;以及
基于所记录的所述资源量,确定执行所述代码段所需的所述资源。
12.根据权利要求8所述的设备,其中所述资源包括所述专用处理单元中的计算资源和存储资源中的至少一项。
13.根据权利要求8所述的设备,其中所述资源记录包括以下至少一项:最大存储器使用指示器;总存储器使用指示器;资源指示链表;以及存储器信息链表。
14.根据权利要求8所述的设备,其中所述代码段包括深度学习应用的任务。
15.一种计算机程序产品,所述计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,所述机器可执行指令在被执行使得机器执行根据权利要求1至7中的任一项所述的方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910323600.4A CN111831287B (zh) | 2019-04-22 | 2019-04-22 | 用于确定执行代码段所需的资源的方法、设备和程序产品 |
US16/540,385 US11354159B2 (en) | 2019-04-22 | 2019-08-14 | Method, a device, and a computer program product for determining a resource required for executing a code segment |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910323600.4A CN111831287B (zh) | 2019-04-22 | 2019-04-22 | 用于确定执行代码段所需的资源的方法、设备和程序产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111831287A CN111831287A (zh) | 2020-10-27 |
CN111831287B true CN111831287B (zh) | 2024-03-22 |
Family
ID=72832419
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910323600.4A Active CN111831287B (zh) | 2019-04-22 | 2019-04-22 | 用于确定执行代码段所需的资源的方法、设备和程序产品 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11354159B2 (zh) |
CN (1) | CN111831287B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7335591B2 (ja) * | 2019-07-22 | 2023-08-30 | コネクトフリー株式会社 | コンピューティングシステムおよび情報処理方法 |
US20210398015A1 (en) * | 2020-06-19 | 2021-12-23 | Apple Inc. | Machine learning model compiler |
CN114513770B (zh) | 2020-10-29 | 2024-01-30 | 伊姆西Ip控股有限责任公司 | 部署应用的方法、系统和介质 |
CN114579185B (zh) | 2020-11-30 | 2024-09-27 | 伊姆西Ip控股有限责任公司 | 用于迁移应用的方法、电子设备和计算机程序产品 |
CN113296837A (zh) * | 2020-12-07 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 资源计算方法、装置、电子设备及可读存储介质 |
CN115238902A (zh) | 2021-04-23 | 2022-10-25 | 伊姆西Ip控股有限责任公司 | 用于管理机器学习模型的方法、设备和计算机程序产品 |
WO2023030230A1 (en) * | 2021-09-03 | 2023-03-09 | International Business Machines Corporation | Using a machine learning module to determine a group of execution paths of program code and a computational resource allocation to use to execute the group of execution paths |
CN113553061B (zh) * | 2021-09-22 | 2021-12-17 | 西安芯瞳半导体技术有限公司 | 一种提升源程序执行性能的方法、装置及计算机存储介质 |
CN113918164B (zh) * | 2021-10-09 | 2024-07-26 | 北京字节跳动网络技术有限公司 | 应用程序包的生成方法、装置、可读介质和电子设备 |
CN114168294B (zh) * | 2021-12-10 | 2024-07-02 | 北京字节跳动网络技术有限公司 | 编译资源分配方法、装置、电子设备及存储介质 |
CN114298294B (zh) * | 2021-12-28 | 2022-11-01 | 杭州雄迈集成电路技术股份有限公司 | 一种基于硬件加速器的神经网络内存优化方法和装置 |
US20230221992A1 (en) * | 2022-01-07 | 2023-07-13 | International Business Machines Corporation | Cognitive allocation of specialized hardware resources |
CN114398011B (zh) * | 2022-01-17 | 2023-09-22 | 安谋科技(中国)有限公司 | 数据存储方法、设备和介质 |
US11900174B2 (en) | 2022-06-22 | 2024-02-13 | Dell Products L.P. | Processing unit virtualization with scalable over-provisioning in an information processing system |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103218245A (zh) * | 2012-01-18 | 2013-07-24 | 国际商业机器公司 | 选择要在计算系统中执行的优化代码的方法和系统 |
CN106325967A (zh) * | 2015-06-30 | 2017-01-11 | 华为技术有限公司 | 一种硬件加速方法、编译器以及设备 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6584611B2 (en) * | 1999-02-17 | 2003-06-24 | Elbrus International Limited | Critical path optimization—unload hard extended scalar block |
JP4238490B2 (ja) * | 2001-05-25 | 2009-03-18 | 株式会社日立製作所 | データベース管理方法およびシステム |
EP2329369A1 (en) * | 2008-08-25 | 2011-06-08 | Power-One Italy S.p.a. | A hardware virtualization system |
CN104123184B (zh) * | 2013-04-28 | 2017-12-22 | 国际商业机器公司 | 一种用于为构建过程中的任务分配资源的方法和系统 |
US10095434B2 (en) * | 2015-01-02 | 2018-10-09 | Reservoir Labs, Inc. | Systems and methods for efficient determination of task dependences after loop tiling |
-
2019
- 2019-04-22 CN CN201910323600.4A patent/CN111831287B/zh active Active
- 2019-08-14 US US16/540,385 patent/US11354159B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103218245A (zh) * | 2012-01-18 | 2013-07-24 | 国际商业机器公司 | 选择要在计算系统中执行的优化代码的方法和系统 |
CN106325967A (zh) * | 2015-06-30 | 2017-01-11 | 华为技术有限公司 | 一种硬件加速方法、编译器以及设备 |
Also Published As
Publication number | Publication date |
---|---|
US11354159B2 (en) | 2022-06-07 |
CN111831287A (zh) | 2020-10-27 |
US20200334083A1 (en) | 2020-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111831287B (zh) | 用于确定执行代码段所需的资源的方法、设备和程序产品 | |
US11163610B2 (en) | Method, device, and computer program product for assigning tasks to dedicated processing resources | |
CN111832736B (zh) | 用于处理机器学习模型的方法、设备和计算机可读存储介质 | |
CN113391918B (zh) | 用于处理计算作业的方法、设备和计算机程序产品 | |
US20130283250A1 (en) | Thread Specific Compiler Generated Customization of Runtime Support for Application Programming Interfaces | |
US9684493B2 (en) | R-language integration with a declarative machine learning language | |
CN106104468B (zh) | 动态地确定数据处理应用程序的模式 | |
CN111507476A (zh) | 部署机器学习模型的方法、设备和计算机程序产品 | |
KR20130100261A (ko) | 동적으로 로딩하는 그래프 기반 계산 | |
US20180113692A1 (en) | Linking Optimized Entry Points for Local-Use-Only Function Pointers | |
CN109154908B (zh) | 具有精确垃圾收集报告的动态大小的局部 | |
WO2012067803A2 (en) | Map transformation in data parallel code | |
US10268461B2 (en) | Global data flow optimization for machine learning programs | |
CN113204412B (zh) | 用于任务调度的方法、电子设备和计算机存储介质 | |
US10620916B2 (en) | Read-only communication operator | |
US20160147559A1 (en) | Modification of context saving functions | |
US9600254B1 (en) | Loop branch reduction | |
US20170139683A1 (en) | Class splitting in object-oriented environments | |
US10289392B2 (en) | Reducing call overhead through function splitting | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
CN114174983B (zh) | 用于高级构造的优化的自动验证的方法和系统 | |
EP3791274B1 (en) | Method and node for managing a request for hardware acceleration by means of an accelerator device | |
US20060031821A1 (en) | Divided compiling program application functionality for software development | |
CN111061538A (zh) | 一种多Lua虚拟机内存优化方法及其系统 | |
CN113760384B (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 |