CN111782408B - 用于执行gpu中的控制任务的方法、装置及gpu - Google Patents
用于执行gpu中的控制任务的方法、装置及gpu Download PDFInfo
- Publication number
- CN111782408B CN111782408B CN202010772890.3A CN202010772890A CN111782408B CN 111782408 B CN111782408 B CN 111782408B CN 202010772890 A CN202010772890 A CN 202010772890A CN 111782408 B CN111782408 B CN 111782408B
- Authority
- CN
- China
- Prior art keywords
- task
- api interface
- queue
- slave
- functional
- 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 58
- 230000001360 synchronised effect Effects 0.000 claims abstract description 51
- 230000015654 memory Effects 0.000 claims description 21
- 230000008569 process Effects 0.000 claims description 10
- 230000004044 response Effects 0.000 claims description 8
- 239000002184 metal Substances 0.000 claims description 6
- 238000005538 encapsulation Methods 0.000 claims description 4
- 230000006870 function Effects 0.000 description 22
- 238000010586 diagram Methods 0.000 description 17
- 238000004891 communication Methods 0.000 description 9
- 238000012545 processing Methods 0.000 description 9
- 238000013527 convolutional neural network Methods 0.000 description 6
- 238000013135 deep learning Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 238000013473 artificial intelligence Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000013468 resource allocation Methods 0.000 description 3
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 230000007787 long-term memory Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000000306 recurrent effect Effects 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- 241000579895 Chlorostilbon Species 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000006735 deficit Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000010976 emerald Substances 0.000 description 1
- 229910052876 emerald Inorganic materials 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000010977 jade Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- ZLIBICFPKPWGIZ-UHFFFAOYSA-N pyrimethanil Chemical compound CC1=CC(C)=NC(NC=2C=CC=CC=2)=N1 ZLIBICFPKPWGIZ-UHFFFAOYSA-N 0.000 description 1
- 239000010979 ruby Substances 0.000 description 1
- 229910001750 ruby Inorganic materials 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
- 230000000007 visual effect Effects 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/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
- G06F9/5038—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 considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Stored Programmes (AREA)
Abstract
本说明书实施例提供了一种用于执行GPU中的控制任务的方法及装置。GPU中的队列、控制任务分别被抽象封装成队列API接口、主任务API接口和从任务API接口,针对第一功能任务,第一主任务API接口分别与第一队列API接口和各个第一从任务API接口关联,第一主任务API接口针对第一功能任务执行查询操作以确定第一功能任务的任务状态;并在查询到第一功能任务完成且当前同步点小于第一功能任务的第一序号时,将同步点更新为第一序号;以及各个第一从任务API接口将当前同步点与第一控制任务相关序号进行比较,以确定第一功能任务的任务状态。
Description
技术领域
本说明书实施例涉及计算机技术领域,具体地,涉及一种用于执行GPU中的控制任务的方法、装置及GPU。
背景技术
AI(Artificial Intelligence,人工智能),特别是深度学习(Deep Learning,DL),目前已经广泛用于支付(人脸)、定损(图片识别)、交互与客服(语音识别、内容过滤)等多种场景,取得了显著效果。典型DL任务需要强大的算力支撑,因此当前绝大多数任务都运行在GPU等加速设备之上,GPU(Graphics Processing Unit,图形处理器)是一种高性能计算加速设备,目前广泛用于AI、深度学习的训练和在线服务。
GPU具有高速并行计算的特点,能够对功能任务进行并行处理。GPU在处理各个功能任务过程中,针对一些功能任务,会存在关注该功能任务的至少一个控制任务,该至少一个控制任务被插入至队列中,每个控制任务各自采用持续轮询的方式来查询关注的功能任务的任务状态,直至该功能任务完成。
发明内容
鉴于上述,本说明书实施例提供了一种用于执行GPU中的控制任务的方法、装置及GPU。GPU中的队列、控制任务分别被抽象封装成队列API接口、主任务API接口和从任务API接口,针对第一功能任务,第一主任务API接口分别与第一队列API接口和各个第一从任务API接口关联,第一主任务API接口针对第一功能任务执行查询操作,以确定第一功能任务的任务状态并更新队列的同步点。各个第一从任务API接口将当前同步点与第一控制任务相关序号进行比较以确定第一功能任务的任务状态。这样,针对关注第一功能任务的一组控制任务,只需第一主任务API接口执行查询操作,而其他的各个第一从任务API接口执行比较操作即可确定出第一功能任务的状态。避免了每个控制任务都需要执行查询操作,减少了执行查询操作所需的资源开销,从而节省了GPU资源。
根据本说明书实施例的一个方面,提供了一种用于执行GPU中的控制任务的方法,其中,所述GPU对多个队列并行处理,各个队列中具有序号的队列元素包括功能任务和控制任务,每个队列被抽象封装成用于维护队列数据的队列API接口,队列中关注同一功能任务的一组控制任务被抽象封装成一组任务API接口,队列API接口和各组任务API接口存储在所述GPU的框架层连接的动态链接库中;针对一个队列,队列API接口与各组任务API接口关联,每组任务API接口包括一个主任务API接口和至少一个从任务API接口,从任务API接口与对应的一组控制任务中的控制任务一一对应,每个控制任务被抽象封装成一个用于维护控制任务数据的从任务API接口;针对每组任务API接口,主任务API接口与各个从任务API接口关联,队列API接口包括用于指示对应队列中最新完成的功能任务的同步点,主任务API接口包括关注功能任务序号,所述方法包括:响应于第一队列中的第一控制任务的执行指令,利用所述第一控制任务对应的第一组任务API接口中的第一主任务API接口来针对所述第一控制任务关注的第一功能任务执行查询操作,以确定所述第一功能任务的任务状态;并在查询到所述第一功能任务的任务状态是完成、且第一队列API接口中的当前同步点小于所述第一功能任务的第一序号时,将同步点更新为所述第一序号;以及利用所述第一组任务API接口中的各个第一从任务API接口将获得的当前同步点与第一控制任务相关序号进行比较,以确定所述第一功能任务的任务状态。
可选地,在上述方面的一个示例中,所述第一控制任务包括查询任务或同步任务。
可选地,在上述方面的一个示例中,各个队列API接口还包括用于指向关联的主任务API接口的主任务指针,各个主任务API接口还包括用于指向所关联的队列API接口的队列指针、所关联的从任务API接口的计数以及用于指向所关联的从任务API接口中序号最小的从任务API接口的从任务指针,各个从任务API接口包括主任务指针。
可选地,在上述方面的一个示例中,所述第一控制任务相关序号包括:所述第一控制任务的序号或者所述第一序号。
可选地,在上述方面的一个示例中,在第一控制任务相关序号包括所述第一控制任务的序号时,各个第一从任务API接口包括所述第一控制任务的序号。
可选地,在上述方面的一个示例中,按照以下方式来确定所述第一功能任务的任务状态:在所述当前同步点小于所述第一控制任务相关序号时,确定所述第一功能任务的任务状态是未完成;在所述当前同步点不小于所述第一控制任务相关序号时,确定所述第一功能任务的任务状态是完成。
可选地,在上述方面的一个示例中,根据以下方式所述各个第一从任务API接口获得所述当前同步点:所述第一主任务API接口将所述第一队列API接口中的当前同步点广播给所述各个第一从任务API接口;或者,各个第一从任务API接口根据该第一从任务API接口中的主任务指针以及所述第一主任务API接口中的队列指针来从所述第一队列API接口中获取当前同步点。
可选地,在上述方面的一个示例中,所述第一主任务API接口将所述第一队列API接口中的当前同步点广播给所述各个第一从任务API接口包括:所述第一主任务API接口每次查询所述第一队列API接口中的同步点时,将所查询到的同步点广播给所述各个第一从任务API接口;或者,所述第一主任务API接口每次查询所述第一队列API接口中的同步点时,判断当前查询到的同步点与上一次查询到的同步点是否相同,若不同,则将当前查询到的同步点广播给所述各个第一从任务API接口。
可选地,在上述方面的一个示例中,还包括:所述第一主任务API接口在查询到所述第一功能任务的任务状态是已完成、且第一队列API接口中的当前同步点不小于所述第一序号时,停止执行所述查询操作。
可选地,在上述方面的一个示例中,各个从任务API接口还包括任务状态信息,所述方法还包括:在所述第一主任务API接口查询到所述第一功能任务的任务状态是完成时,利用所述第一主任务API接口将所述各个第一从任务API接口中的任务状态信息更新为完成;以及利用所述各个第一从任务API接口查看各自的任务状态信息中的任务状态。
可选地,在上述方面的一个示例中,还包括:响应于关注所述第一功能任务的第二控制任务的创建指令,将所述第二控制任务抽象封装成第二从任务API接口;在所述动态链接库中有所述第一主任务API接口时,将所述第二从任务API接口与所述第一主任务API接口关联;在所述动态链接库中没有所述第一主任务API接口时,创建所述第一主任务API接口,并将所述第一主任务API接口分别与所述第一队列API接口、第二从任务API接口关联。
可选地,在上述方面的一个示例中,还包括:在关注所述第一功能任务的控制任务被调整时,对所述第一主任务API接口中的计数进行调整,或者对所述第一主任务API接口中的计数和从任务指针进行调整。
可选地,在上述方面的一个示例中,所述第一队列API接口还包括队列同步点,所述方法还包括:响应于针对所述第一队列的队列同步任务,基于所述第一队列API接口中的队列同步点对所述第一队列进行同步操作。
可选地,在上述方面的一个示例中,所述GPU被配置为包括一个服务器端和至少一个客户端,所述服务器端与各个客户端通信连接,所述GPU中的队列API接口和任务API接口被配置在位于客户端的框架层连接的动态链接库中。
可选地,在上述方面的一个示例中,所述GPU被部署在裸机环境、容器环境和虚拟机环境中的任一种。
根据本说明书实施例的另一个方面,还提供了一种用于执行GPU中的控制任务的装置,其中,所述GPU对多个队列并行处理,各个队列中具有序号的队列元素包括功能任务和控制任务,每个队列被抽象封装成用于维护队列数据的队列API接口,队列中关注同一功能任务的一组控制任务被抽象封装成一组任务API接口,队列API接口和各组任务API接口存储在所述GPU的框架层连接的动态链接库中;针对一个队列,队列API接口与各组任务API接口关联,每组任务API接口包括一个主任务API接口和至少一个从任务API接口,从任务API接口与对应的一组控制任务中的控制任务一一对应,每个控制任务被抽象封装成一个用于维护控制任务数据的从任务API接口;针对每组任务API接口,主任务API接口与各个从任务API接口关联,队列API接口包括用于指示对应队列中最新完成的功能任务的同步点,主任务API接口包括关注功能任务序号,所述装置包括:主任务API接口调用单元,响应于第一队列中的第一控制任务的执行指令,利用所述第一控制任务对应的第一组任务API接口中的第一主任务API接口来针对所述第一控制任务关注的第一功能任务执行查询操作,以确定所述第一功能任务的任务状态;并在查询到所述第一功能任务的任务状态是完成、且第一队列API接口中的当前同步点小于所述第一功能任务的第一序号时,将同步点更新为所述第一序号;以及从任务API接口调用单元,利用所述第一组任务API接口中的各个第一从任务API接口将获得的当前同步点与第一控制任务相关序号进行比较,以确定所述第一功能任务的任务状态。
可选地,在上述方面的一个示例中,各个队列API接口还包括用于指向关联的主任务API接口的主任务指针,各个主任务API接口还包括用于指向所关联的队列API接口的队列指针、所关联的从任务API接口的计数以及用于指向所关联的从任务API接口中序号最小的从任务API接口的从任务指针,各个从任务API接口包括主任务指针。
可选地,在上述方面的一个示例中,所述第一控制任务相关序号包括:所述第一控制任务的序号或者所述第一序号。
可选地,在上述方面的一个示例中,在第一控制任务相关序号包括所述第一控制任务的序号时,各个第一从任务API接口包括所述第一控制任务的序号。
可选地,在上述方面的一个示例中,所述从任务API接口调用单元进一步地:在所述当前同步点小于所述第一控制任务相关序号时,利用所述各个第一从任务API接口确定所述第一功能任务的任务状态是未完成;在所述当前同步点不小于所述第一控制任务相关序号时,利用所述各个第一从任务API接口确定所述第一功能任务的任务状态是完成。
可选地,在上述方面的一个示例中,所述主任务API接口调用单元,利用所述第一主任务API接口将所述第一队列API接口中的当前同步点广播给所述各个第一从任务API接口;或者,所述从任务API接口调用单元,利用各个第一从任务API接口根据该第一从任务API接口中的主任务指针以及所述第一主任务API接口中的队列指针来从所述第一队列API接口中获取当前同步点。
可选地,在上述方面的一个示例中,所述主任务API接口调用单元进一步地:在所述第一主任务API接口每次查询所述第一队列API接口中的同步点时,利用所述第一主任务API接口将所查询到的同步点广播给所述各个第一从任务API接口;或者,在所述第一主任务API接口每次查询所述第一队列API接口中的同步点时,利用所述第一主任务API接口判断当前查询到的同步点与上一次查询到的同步点是否相同,若不同,则将当前查询到的同步点广播给所述各个第一从任务API接口。
可选地,在上述方面的一个示例中,所述主任务API接口调用单元进一步地:在查询到所述第一功能任务的任务状态是已完成、且第一队列API接口中的当前同步点不小于所述第一序号时,利用所述第一主任务API接口停止执行所述查询操作。
可选地,在上述方面的一个示例中,各个从任务API接口还包括任务状态信息,所述主任务API接口调用单元进一步地:在所述第一主任务API接口查询到所述第一功能任务的任务状态是完成时,利用所述第一主任务API接口将所述各个第一从任务API接口中的任务状态信息更新为完成;以及所述从任务API接口调用单元进一步地:利用所述各个第一从任务API接口查看各自的任务状态信息中的任务状态。
可选地,在上述方面的一个示例中,还包括:控制任务抽象封装单元,响应于关注所述第一功能任务的第二控制任务的创建指令,将所述第二控制任务抽象封装成第二从任务API接口;API接口关联单元,在所述动态链接库中有所述第一主任务API接口时,将所述第二从任务API接口与所述第一主任务API接口关联;在所述动态链接库中没有所述第一主任务API接口时,创建所述第一主任务API接口,并将所述第一主任务API接口分别与所述第一队列API接口、第二从任务API接口关联。
可选地,在上述方面的一个示例中,所述主任务API接口调用单元进一步地:在关注所述第一功能任务的控制任务被调整时,利用所述第一主任务API接口对计数进行调整,或者对计数和从任务指针进行调整。
可选地,在上述方面的一个示例中,所述第一队列API接口还包括队列同步点,所述装置还包括队列同步单元,队列同步单元响应于针对所述第一队列的队列同步任务,基于所述第一队列API接口中的队列同步点对所述第一队列进行同步操作。
可选地,在上述方面的一个示例中,所述GPU被配置为包括一个服务器端和至少一个客户端,所述服务器端与各个客户端通信连接,所述GPU中的队列API接口和任务API接口被配置在位于客户端的框架层连接的动态链接库中。
根据本说明书实施例的另一个方面,还提供了一种用于执行控制任务的GPU,其中,所述GPU包括上述任一所述的用于执行GPU中的控制任务的装置。
根据本说明书实施例的另一方面,还提供一种电子设备,包括:至少一个处理器;以及存储器,所述存储器存储指令,当所述指令被所述至少一个处理器执行时,使得所述至少一个处理器执行如上所述的用于执行GPU中的控制任务的方法。
根据本说明书实施例的另一方面,还提供一种机器可读存储介质,其存储有可执行指令,所述指令当被执行时使得所述机器执行如上所述的用于执行GPU中的控制任务的方法。
附图说明
通过参照下面的附图,可以实现对于本说明书内容的本质和优点的进一步理解。在附图中,类似组件或特征可以具有相同的附图标记。
图1示出了本说明书实施例的GPU系统架构的一个示例的示意图。
图2示出了本说明书实施例的GPU系统架构的另一个示例的示意图。
图3A示出了本说明书实施例的GPU被部署在裸机环境的一个示例的示意图。
图3B示出了本说明书实施例的GPU被部署在容器环境的一个示例的示意图。
图3C示出了本说明书实施例的GPU被部署在虚拟机环境的一个示例的示意图。
图4示出了本说明书实施例的GPU中的队列的一个示例的示意图。
图5示出了本说明书实施例的队列API接口和任务API接口的关联架构的一个示例的示意图。
图6示出了本说明书实施例的用于执行GPU中的控制任务的方法的一个示例的流程图。
图7示出了本说明书实施例的用于执行GPU中的控制任务的装置的一个示例的方框图。
图8示出了本说明书的实施例的实现用于执行GPU中的控制任务的方法的电子设备的方框图。
具体实施方式
以下将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本说明书内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。另外,相对一些示例所描述的特征在其它例子中也可以进行组合。
如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。
图1示出了本说明书实施例的GPU系统架构100的一个示例的示意图。
如图1所示,GPU系统架构100由下到上可以包括GPU硬件实体110、GPU驱动120、框架层130以及应用层140。
在本说明书的实施例中,GPU硬件实体110可以是nvidia企业级P100,V100,T4或消费型GTX 1080等中的一种,但是,GPU硬件实体110并不限于上述举例。GPU硬件实体110包括GPU硬件以及用于实现GPU功能所需的GPU资源等。具体地,每个GPU硬件实体110的GPU资源例如可以包括:GPU显存、计算队列、计算任务句柄等等。在本说明书中,GPU硬件实体110可以包括一个或多个GPU硬件实体。
GPU驱动120用于驱动GPU硬件实体110,以使能GPU硬件实体进行工作。例如,GPU驱动120中包含有API接口的版本信息。GPU驱动120可以利用适合版本的API接口来驱动硬件实体110。
图1中示出了硬件实体P100/P40/P4,V100和T4。其中,硬件实体P100/P40/P4的驱动程序中的API接口的版本为384.111,V100的驱动程序中的API接口的版本为396.26,以及T4的驱动程序中的API接口的版本为410或418。此外,T4中的API接口版本410或418最高,利用该版本的API接口可以访问硬件实体P100/P40/P4、V100和T4。V100的驱动程序中的API接口版本396.26比硬件实体P100/P40/P4的驱动程序中的API接口版本384.111高,由此利用版本396.26的API接口可以访问硬件实体P100/P40/P4和V100。硬件实体P100/P40/P4的驱动程序中的API接口版本384.111最低,利用该版本的API接口只能访问硬件实体P100/P40/P4。
框架层130用于提供系统支持的各种API接口,例如,CUDA10,CUDA9和CUDA8等,以供使用来构建应用程序。在编译时,框架层130通常绑定动态链接库(例如CUDA8或CUDA10)以产生可执行程序。之后,在运行时刻,基于框架层130的GPU应用程序在启动时,通过操作系统搜索所需的动态链接库(如CUDA8)并加载到缓存中。框架层130例如可以包括TensorFlow,PyTorch,Caffe2等框架,所有已知的框架层130都支持GPU运行,即,在框架层130所提供的API接口的版本不低于GPU硬件的驱动程序中的API接口的版本的情况下,该框架层130所提供的API接口能够访问GPU硬件实体。
在应用程序被成功安装在系统中时,所安装的应用程序被存放在应用层140。在应用程序被启动运行时,可以被允许使用所加载版本的API接口来访问GPU硬件,以使用GPU硬件所提供的GPU资源来运行。在本说明书中,应用程序例如可以是用户模型。所述用户模型可以为如下任何一种,但是不限于以下举例:CNN(Convolutional Neural Networks,卷积神经网络)、RNN(Recurrent Neural Network,循环神经网络)、LSTM(Longshort termmemory,长短期记忆网络)、GAN(Generative Adversarial Networks,生成式对抗网络)等模型。
图2示出了本说明书实施例的GPU系统架构200的另一个示例的示意图。
如图2所示,GPU系统架构200可以包括GPU硬件230、GPU驱动240、一个服务器端220以及至少一个客户端210。其中,GPU硬件230包括至少一个GPU硬件主体,GPU驱动240用于驱动GPU硬件230。
服务器端220运行在GPU驱动240之上,服务器端220是一个在系统后台长时间运行的守护进程(long running daemon)。服务器端220上可以部署有一个服务实例,该服务实例可封装运行在docker容器里。服务器端220可以管理GPU硬件230中一个或者多个GPU硬件主体。一个服务器端220可以对应多个客户端主体213,或者一个GPU硬件主体对应多个客户端主体213。
服务器端220可以包括设备发现及抽象单元、资源隔离及优先级管理单元、GPU显存优化单元、性能与扩张优化单元以及同步指令执行单元等。其中,设备发现及抽象单元被配置为发现GPU硬件230中的GPU硬件资源。资源隔离及优先级管理单元被配置为GPU硬件运行API指令分配隔离资源,以及为管理API指令在GPU硬件上运行的优先级。GPU显存优化单元被配置为对GPU显存进行运行优化处理。性能与扩张优化单元被配置为对GPU性能以及GPU扩展性优进行运行优化处理。同步指令执行单元被配置为执行同步指令。
服务器端220可以获取GPU硬件资源和资源配置策略,根据资源配置策略和GPU硬件资源创建多个虚拟GPU资源,根据资源配置策略,生成GPU硬件资源和多个虚拟GPU资源之间的资源映射关系,针对多个虚拟GPU资源导出GPU服务。
服务器端220通信连接的每个客户端210由应用层211和客户端主体213打包在一起。客户端主体213向应用层211导出用于访问GPU的API(Application ProgrammingInterface,应用程序编程接口)接口。向应用层211导出的API接口与GPU的原始API接口保持一致。GPU包括GPU硬件和GPU驱动。
每个客户端主体213通过IPC(Inter-Process Communication,进程间通信)或者网络方式与服务器端220通信连接。每个客户端主体213与服务器端220上保存并维护有相同的资源映射关系。每个客户端主体213根据资源映射关系,以及预先与服务器端220约定的目标GPU服务,获得多个虚拟GPU资源中的目标虚拟GPU资源。具体的,每个客户端210根据资源映射关系以及预先与服务端约定的目标GPU服务,发现目标虚拟GPU资源向服务器端220,申请目标虚拟GPU资源,并使用目标虚拟GPU资源完成目标任务。
应用层211中的应用程序可以包括CNN(Convolutional Neural Networks,卷积神经网络)、RNN(Recurrent Neural Network,循环神经网络)、LSTM(Longshort termmemory,长短期记忆网络)、GAN(Generative Adversarial Networks,生成式对抗网络)等应用模型,客户端主体213向服务器端220申请目标虚拟GPU资源,以用于应用模型的训练或者基于应用模型的在线服务。
每个客户端210还可以包括框架层212,框架层212可以包括TensorFlow、PyTorch、Caffe2等框架,框架层212所包括的框架都支持GPU运行,框架层212绑定动态链接库,动态链接库可以为应用层211的应用程序提供访问GPU所需的API接口。需要说明的是,本说明书中的客户端210可以包括客户端210-1、210-2等,客户端主体213可以包括客户端主体213-1、213-2等,框架层212可以包括框架层212-1、212-2等,应用层211可以包括框架层211-1、211-2等。
本说明书中的GPU可以采用图1所示的GPU系统框架,还可以采用图2所示的GPU系统框架。下面以图2所示的GPU系统框架为例进行说明。
本说明书中的GPU可以被部署在裸机环境、容器环境或者虚拟机环境。参考图3A~图3C所示。这里要说明的是,图3A~3C中示出的客户端是本说明书的实施例中公开的客户端210的客户端主体。
在GPU被部署在裸机环境中时,如图3A所示,服务端和客户端主体都运行在主操作系统(host OS)上(例如,都运行在linux上)。服务端通过GPU驱动接管所有对GPU资源的访问。其中,若客户端主体与服务端在同一机器,通信可以采用IPC方式通信;若客户端主体与服务端不在同一机器,则采用TCP协议、IP协议或者RDMA协议等通信。
在GPU被部署在容器环境中时,如图3B所示,服务端以容器化方式运行并管理GPU资源。客户端主体(例如K8S pod)与服务端运行在同一物理机上,客户端主体与服务端之间的通信可以采用IPC(例如UNIX socket,Pipe或者shmem),或者网络协议实现。
在GPU被部署在虚拟机环境中时,如图3C所示,GPU资源给特定的物理机,然后在VMGuest OS里启动服务端或客户端主体,等同于裸机环境。
由此可见,该GPU可以同时支持部署在裸机环境、容器环境和虚拟机环境,从而使得部署非常灵活。
图4示出了本说明书实施例的GPU中的队列400的一个示例的示意图。
队列是用于实现针对队列元素的排队功能的一种数据结构,队列元素可以包括功能任务和控制任务,功能任务可以包括函数计算任务、数据拷贝任务、数据输入队列、数据输出队列等,控制任务可以包括查询任务、同步任务等。
GPU中的功能任务和控制任务被加载至队列中等待执行,GPU针对每个队列中的任务顺序执行。GPU中设置有多个队列用来存放待执行的功能任务和控制任务,GPU可以对多个队列采用并行处理的方式,并行处理方式能够提高GPU任务的处理速度和效率。
在本说明书中,队列采用FIFO(First in First Out,先进先出)机制,队列的一端(即,队尾)进行队列元素入队操作,另一端(即,队头)进行队列元素出队操作。
在本说明书中,队列中的每个队列元素对应有序号,队列元素的序号可以按照各个队列元素的入队顺序来确定。如图4所示的队列,该队列的左端是队头,右端是队尾。靠近队头的队列元素是先入队的,也会先出队;靠近队尾的队列元素是后入队的,也会后出队。该队列中的队列元素可以包括功能任务(即,op)和控制任务(即,evt),不同的功能任务和不同的控制任务可以用序号来区别。
若该队列中入队的第一个队列元素是功能任务op0,则可以将该功能任务op0的序号设置为0,第二个队列元素的序号设置为1,然后后续的序号依次增大。当然,队列的第一个队列元素的序号还可以设置为其他任意值,后续队列元素的序号在该任意值的基础上依次增大。
控制任务是以一个功能任务为对象的任务,一个控制任务对应关注一个功能任务,一个功能任务可以被多个控制任务关注。比如,控制任务是查询任务,该查询任务的目的是查询一个计算任务的任务状态,则该查询任务对应关注该计算任务。除此之外,关注该计算任务的控制任务还可以包括其他控制任务,这些关注同一个计算任务的各个控制任务可以是不同的应用或GPU中的不同单元发起的,目的都是查询该计算任务的任务状态。
在一个队列中,关注同一个功能任务的各个控制任务排在该功能任务之后,且在该功能任务的下一个功能任务之前。以图4为例,功能任务op0被控制任务evt1和evt2关注,功能任务op3至少被控制任务evt4、evt5和evt6关注。如果队列中一个功能任务的下一个队列元素也是功能任务,则表示该功能任务没有被控制任务关注。
图5示出了本说明书实施例的队列API接口和任务API接口的关联架构500的一个示例的示意图。
如图5所示,主任务API接口520与从任务API接口520-1和520-2属于一组任务API接口,该组任务API接口对应的一组控制任务关注同一个功能任务。主任务API接口520分别与从任务API接口520-1和520-2关联。
主任务API接口530与任务API接口530-1、530-2和530-3属于另一组任务API接口,该另一组任务API接口对应的另一组控制任务关注另一个功能任务。主任务API接口530分别与从任务API接口530-1、530-2和530-3关联。
上述两组任务API接口对应的两个功能任务都被加载到队列API接口510对应的队列中,队列API接口510分别与主任务API接口520和主任务API接口530关联。
在本说明书中,每个队列可以被抽象封装成一个队列API接口,队列与队列API接口一一对应,队列API接口用于维护对应队列的队列数据,队列数据可以以字段的形式存储在队列API接口中。一个字段存储一种类型的队列数据,每一种类型的队列数据可以表征队列具有的一种属性。队列API接口包括的队列数据的类型可以是指定的。
在一个示例中,各个队列API接口中存储的字段相同,且各个字段存储固定类型的队列数据。队列API接口中的字段可以为空,若一个队列API接口中的一个字段为空,则表示该队列API接口对应的队列缺少该字段的队列数据。在该示例中,各个队列API接口采用字段形式存储固定类型的队列数据,便于从各个队列API接口中查询队列数据,从而可以提高查询效率。
队列API接口可以包括同步点,同步点可以用图5中的completeOpSeq字段来表示。同步点用于指示对应队列中最新完成的功能任务,队列API接口中的同步点可以是所指示的功能任务的序号。当队列中有功能任务完成时,该队列的同步点更新为该功能任务的序号,表示队列的当前进度是已完成该功能任务。由此,队列的同步点可以用来表示队列的执行进度。
以图4为例,图4所示的队列当前的进度是op0已完成,op3正在执行中,则该队列的同步点为0,指向功能任务op0。当功能任务op3完成时,同步点会更新为3,指向op3,表示队列的进度已执行到op3。
队列中关注同一功能任务的各个控制任务可以构成一组控制任务,例如,图4中的控制任务evt1和evt2都关注功能任务op0,则控制任务evt1和evt2属于一组控制任务。
一组控制任务可以被抽象封装成一组任务API接口,一组任务API接口可以包括一个主任务API接口和至少一个从任务API接口,从任务API接口与对应的一组控制任务中的控制任务一一对应。一组控制任务中的每个控制任务可以被抽象封装成一个从任务API接口,控制任务的从任务API接口用于维护该控制任务的任务数据。
针对一个队列,队列中的各组控制任务被抽象封装成对应的各组任务API接口,则该队列对应的队列API接口分别与各组任务API接口关联。针对每组任务API接口,主任务API接口分别与各个从任务API接口关联。基于各个API接口之间的关联关系,相互关联的两个API接口之间能够进行通信、从对方API接口获取数据以及在对方API接口中写入数据等操作。
以图4和图5为例,图4所示的一组控制任务包括evt1和evt2,该组控制任务被抽象封装成的一组任务API接口包括主任务API接口520以及两个从任务API接口520-1和520-2。其中,从任务API接口520-1由控制任务evt1抽象封装得到的,从任务API接口520-1用于维护控制任务evt1的任务数据。从任务API接口520-2由控制任务evt2抽象封装得到的,从任务API接口520-2用于维护控制任务evt2的任务数据。
基于队列API接口510与主任务API接口520的关联关系,主任务API接口520能够与队列API接口510进行通信、从对方API接口获取数据以及在对方API接口中写入数据等操作。比如,当主任务API接口520查询到关注的功能任务op0完成时,主任务API接口520可以将op0的序号写入队列API接口510中的同步点字段(即,completeOpSeq字段),以将同步点更新为op0的序号。
在本说明书的一个示例中,各个队列API接口还可以包括用于指向关联的主任务API接口的主任务指针,每个主任务指针指向一个主任务API接口,当队列API接口关联有多个主任务API接口时,相应地,队列API接口包括对应的多个主任务指针。此外,各个主任务API接口可以包括用于指向所关联的队列API接口的队列指针。通过主任务指针和队列指针来将队列API接口与主任务API接口关联起来。
如图5所示,队列API接口510中的主任务指针可以用leaderEvt_p字段来表示,其中,指向主任务API接口520的主任务指针是leaderEvt_p1,指向主任务API接口530的主任务指针是leaderEvt_p2。主任务API接口520和主任务API接口530中的队列指针可以用vStream_p字段来表示,主任务API接口520和530中的vStream_p都指向队列API接口510。
针对主任务API接口与从任务API接口的关联,各个从任务API接口可以包括用于指向关联的主任务API接口的主任务指针,从任务API接口中的主任务指针用字段leaderEvt_p来表示。当各个从任务API接口指向同一主任务API接口时,该各个从任务API接口中的主任务指针leaderEvt_p相同。
一个示例中,各个主任务API接口还可以包括所关联的从任务API接口的计数以及用于指向所关联的从任务API接口中序号最小的从任务API接口的从任务指针。其中,计数可以用refCnt字段表示,从任务指针可以用vEvt_p字段来表示。
对于主任务API接口来说,在从任务指针所指向的从任务API接口的序号的基础上依次累加,直至累加的数值达到主任务API接口中记录的计数,在此过程中依次累加得到的序号即为关联的各个从任务API接口的序号。
以图5为例,从任务API接口520-1和520-2分别对应图4中的控制任务evt1和evt2,从任务API接口520-1和520-2对应的序号分别是1和2,则主任务API接口520中的计数refCnt是2,从任务指针vEvt_p指向从任务API接口520-1。
主任务API接口通过记录计数refCnt和从任务指针vEvt_p不仅能知道关联的从任务API接口的数量,而且能够确切地知道所指向的各个从任务API接口。主任务API接口仅通过两个数据字段便能知道关联的所有从任务API接口,减少了主任务API接口中的数据字段,从而使得主任务API接口的数据结构更简洁。
在另一个示例中,主任务API接口可以包括多个从任务指针vEvt_p,主任务API接口中的从任务指针vEvt_p的数量与关联的从任务API接口的数量相同,每一个从任务指针vEvt_p一一对应的指向一个从任务API接口。
例如,图5中的主任务API接口520关联从任务API接口520-1和520-2,则主任务API接口520中包括两个从任务指针vEvt_p1和vEvt_p2,其中,vEvt_p1指向从任务API接口520-1,vEvt_p2指向从任务API接口520-2。
以上述示例中的方式将主任务API接口和从任务API接口关联,主任务API接口中的每个从任务指针指向一个从任务API接口,从而更直观的确定主任务API接口关联的每个从任务API接口。
在队列和队列中的控制任务被分别抽象封装成队列API接口和任务API接口后,队列API接口和各组任务API接口可以存储在GPU的框架层连接的动态链接库中。基于此,动态链接库可以为应用层的应用提供所需的队列API接口和任务API接口,从而使得应用能够使用相应的队列API接口和任务API接口访问GPU来执行查询、同步等控制任务。
此外,主任务API接口还可以包括关注功能任务序号,关注功能任务序号可以用watchOpSeq字段表示。各个主任务API接口通过关注功能任务序号watchOpSeq来表示各自的组任务API接口所关注的功能任务,以此便于主任务API接口对所关注的功能任务进行实时查询,以确定该功能任务的任务状态。
不同的主任务API接口中的关注功能任务序号不同。例如,图5所示的主任务API接口520中的watchOpSeq与主任务API接口530中的watchOpSeq不同。主任务API接口520中的watchOpSeq是0,主任务API接口530中的watchOpSeq是3。
队列API接口还可以包括seqNr字段和pendingOpSeq字段,队列API接口中的seqNr字段用于记录当前队列中的队列元素的最大序号,pendingOpSeq字段用于记录队列同步点,队列同步点用于指示对队列进行同步操作的同步点。主任务API接口还可以包括seqNr字段和state字段,主任务API接口中的seqNr字段用于记录该主任务API接口对应的控制任务的序号,state字段记录该主任务API接口关注的功能任务的任务状态。从任务API接口还可以包括seqNr字段和state字段,从任务API接口中的seqNr字段用于记录该从任务API接口对应的控制任务的序号,从任务API接口中的state字段记录该从任务API接口关注的功能任务的任务状态。
图6示出了本说明书实施例的用于执行GPU中的控制任务的方法600的一个示例的流程图。该方法中的GPU可以是上述图1所示的GPU,还可以是上述图2所示的GPU。在该方法中的GPU是图1所示的GPU时,该方法的执行主体可以是GPU。在该方法中的GPU是图2所示的GPU时,该方法的执行主体可以是客户端。
如图6所示,在块610,响应于第一队列中的第一控制任务的执行指令,利用第一控制任务对应的第一组任务API接口中的第一主任务API接口来针对第一控制任务关注的第一功能任务执行查询操作,以确定第一功能任务的任务状态。
在本说明书实施例中,第一队列可以是GPU并行处理的多个队列中的任一个队列,第一控制任务可以是第一队列中的至少一个控制任务中的任一个控制任务。
第一控制任务可以包括查询任务或者同步任务。查询任务是用来查询第一控制任务关注的第一功能任务的任务状态。同步任务是根据第一功能任务的任务状态来进行同步操作,具体地,可以实时查询第一功能任务的任务状态,当查询到第一功能任务的任务状态是完成时,执行同步操作。这里的同步操作可以是功能任务之间的任务同步,比如,功能任务A和B需要同时完成才能执行后续操作,由此对该功能任务A和B执行同步操作;还可以是队列之间的队列同步,比如,两个队列中的任务都执行完成后才能允许插入新的功能任务,由此对该两个队列执行同步操作;还可以是功能任务与队列之间的同步,比如,一个队列中的功能任务与另一个队列中的功能任务是顺序执行的,该功能任务完成后才能执行该另一个队列中的功能任务,由此对该功能任务执行同步操作。
第一控制任务的执行指令可以是指第一控制任务插入到第一队列时生成的指令,第一控制任务在插入第一队列后成为待执行的任务,然后再执行,接着在满足停止执行条件时停止执行,停止执行条件可以包括关注的第一功能任务完成,第一控制任务从第一队列中删除等。
第一主任务API接口可以通过执行查询操作来确定第一功能任务的任务状态。具体地,第一主任务API接口可以调用驱动程序中的相关函数(例如cuEventCreate函数),以将查询对象转换为生成终止状态,运行时调用驱动程序的相关函数(例如cuEventRecord),以将查询对象转换为已发送状态。运行时调用驱动程序的相关函数(例如cuEventQuery)来检测查询是否已转换为终止状态。如果查询处于终止状态,则可以向后传递返回的数据,该数据适用于pData参数指向的内存区域中的查询。
然后,在块620,根据查询结果来判断第一功能任务的任务状态是已完成、且第一队列API接口中的当前同步点小于第一功能任务的第一序号,如果是,则可以执行块630的操作。
当判断的结果为否时,可以不更新同步点。此时,判断的结果可以包括:第一功能任务的任务状态是未完成;或者第一功能任务的任务状态是完成,但第一队列API接口中的当前同步点不小于第一功能任务的第一序号。
在一个示例中,第一主任务API接口在查询到第一功能任务的任务状态是已完成、且第一队列API接口中的当前同步点不小于第一序号时,可以确定后续执行查询操作的查询结果还是和当前的查询结果相同,即,后续的查询结果始终是:第一功能任务的任务状态是已完成、且第一队列API接口中的当前同步点不小于第一序号。此时,第一主任务API接口可以停止执行查询操作,减少后续的查询操作,进而可以相应地减少执行查询操作的进程,从而减少资源开销,以提高GPU的性能。
以图4为例,evt4是第一控制任务,第一控制任务evt4关注的第一功能任务是op3,第一序号是3,当第一控制任务evt4对应的第一组任务API接口中的第一主任务API接口查询到op3的任务状态是完成、且当前同步点也是3时,可以确定后续的查询结果仍然会是完成且当前同步点不小于第一序号3,此时第一主任务API接口可以停止执行查询操作。
接着,在第一功能任务的任务状态是已完成、且当前同步点小于第一序号时,在块630,可以利用第一主任务API接口将同步点更新为第一序号。
在更新方式的一个示例中,第一主任务API接口与队列API接口通信连接,第一主任务API接口可以将第一序号发送给队列API接口,队列API接口接收到第一序号后,将同步点更新为第一序号。
在更新方式的另一个示例中,基于第一主任务API接口与队列API接口的关联关系,第一主任务API接口可以将第一序号写入队列API接口中的同步点字段,以实现对同步点的更新。
队列API接口关联的各个主任务API接口都可以根据各自关注的功能任务的任务状态来对队列API接口中的同步点进行更新,当一个主任务API接口查询到关注的功能任务完成、且当前同步点小于该功能任务的序号时,该主任务API接口可以对队列API接口中的同步点进行更新。通过各个主任务API接口根据各自关注的功能任务的任务状态来更新同步点,从而实现了同步点可以实时指示队列中最新完成的功能任务。
接着,在块640,可以利用第一组任务API接口中的各个第一从任务API接口将获得的当前同步点与第一控制任务相关序号进行比较,以确定第一功能任务的任务状态。
具体地,在当前同步点小于第一控制任务相关序号时,可以确定第一功能任务的任务状态是未完成。在当前同步点不小于第一控制任务相关序号时,可以确定第一功能任务的任务状态是完成。
在当前同步点获取方式的一个示例中,各个第一从任务API接口可以根据第一从任务API接口与第一主任务API接口的关联关系以及第一主任务API接口与队列API接口的关联关系来从队列API接口获取当前的同步点。
具体地,第一从任务API接口可以根据主任务指针确定第一主任务API接口,然后从第一主任务API接口中获取队列指针,根据队列指针可以确定队列API接口,进而可以从所确定的队列API接口中获取到当前的同步点。
在当前同步点获取方式的另一个示例中,第一主任务API接口可以从第一队列API接口中获取当前同步点,并基于第一主任务API接口与第一从任务API接口的关联关系将当前同步点广播给关联的各个第一从任务API接口。
在一个示例中,第一主任API接口可以每执行一次查询操作,从第一队列API接口中获取一次同步点,然后将每次获取的同步点作为当前同步点广播给各个第一从任务API接口。这样,可以保证第一主任务API接口每次查询到的同步点都能被各个第一从任务API接口获取到,从而避免各个第一从任务API接口漏掉更新的同步点。
在另一个示例中,第一主任务API接口每次查询第一队列API接口中的同步点时,可以先判断当前查询到的同步点与上一次查询到的同步点是否相同。若相同,表示同步点未更新,则可以不广播同步点;若不同,表示同步点已更新,则可以将当前查询到的同步点广播给各个第一从任务API接口。这样避免了第一主任务API接口执行无效的广播操作,从而减少了执行广播操作所需的资源开销。
第一控制任务相关序号可以包括第一控制任务的序号或者第一序号。在第一控制任务相关序号包括第一序号的情况下,在一个示例中,第一主任务API接口中的关注功能任务序号watchOpSeq即为第一序号,各个第一从任务API接口可以从关联的第一主任务API接口中获取第一序号,然后将当前同步点与第一序号进行比较,以确定第一功能任务的任务状态。
在另一个示例中,各个第一从任务API接口还可以包括一个用于记录关注的第一功能任务的第一序号的数据字段,各个第一从任务API接口可以从各自包括的数据字段中获取第一序号,并将其与当前同步点进行比较。
在第一控制任务相关序号包括第一控制任务的序号的情况下,各个第一从任务API接口中包括各自对应的第一控制任务的序号,如图5所示,各个从任务API接口中的seqNr字段用来记录该从任务API接口对应的控制任务的序号。例如,从任务API接口520-1对应的控制任务是图4中的evt1,从任务API接口520-2对应的控制任务是图4中的evt2,则从任务API接口520-1中的seqNr是1,从任务API接口520-2中的seqNr是2。
当各个第一从任务API接口获取到当前同步点时,各个第一从任务API接口可以从各自包括的seqNr字段中获取对应的第一控制任务的序号,并将获得的当前同步点与第一控制任务的序号进行比较,以确定第一功能任务的任务状态。
在本说明书的一个示例中,各个从任务API接口中包括有任务状态信息,任务状态信息用于指示对应的功能任务的任务状态。如图5所示,各个从任务API接口包括的state字段用来记录任务状态信息。
在每个从任务API接口被创建时,每个从任务API接口中的任务状态信息初始设置为未完成。然后,第一主任务API接口每次执行针对第一功能任务的查询操作时,若查询到第一功能任务的任务状态是完成,则第一主任务API接口可以直接对各个第一从任务API接口中的任务状态信息进行写入操作,以将各个第一从任务API接口中的任务状态信息更新为完成。
各个第一从任务API接口可以直接查看各自的state字段中的任务状态信息,以确定第一功能任务的任务状态。
通过该示例,对于各个从任务API接口来说,只需查看各自的任务状态消息便能够确定各自对应的功能任务的任务状态,进一步地减少了操作所需的资源开销,从而进一步地提高了GPU性能。
此外,第一主任务API接口也可以包括用于指示第一功能任务的任务状态的任务状态信息,如图5所示,第一主任务API接口中的state字段可以用于记录任务状态信息。当第一主任务API接口查询到第一功能任务的任务状态是完成时,第一主任务API接口也将自身的任务状态信息更新为完成状态。这样第一主任务API接口通过任务状态信息实时记录第一功能任务的任务状态,在有其他API接口向第一主任务API接口请求查询第一功能任务的任务状态时,第一主任务API接口可以直接从任务状态信息查看第一功能任务的任务状态,无需再执行查询操作,减少了查询操作所需的资源开销,并且提高了第一主任务API接口获取第一功能任务的任务状态的效率。
在本说明书的一个示例中,响应于关注第一功能任务的第二控制任务的创建指令,第二控制任务被创建后,可以插入到第一队列中等待执行,插入第一队列中的第二控制任务会设置对应的序号。
第二控制任务可以被抽象封装成第二从任务API接口,然后查看动态链接库中是否有第二从任务API接口所需关联的第一主任务API接口。若动态链接库中有第一主任务API接口,可以将第二从任务API接口与第一主任务API接口关联。
此时,第一主任务API接口关联的从任务API接口的数量增加,即,关注第一功能任务的控制任务增加,此时可以将第一主任务API接口中的计数增加,以使得增加后的计数为第一主任务API接口关联的从任务API接口的数量。
另外,队列中的控制任务还能被删除,或者被调整为关注其他功能任务,此时,第一主任务API接口关联的从任务API接口的数量会减少,即,关注第一功能任务的控制任务减少。在这种情况下,首先判断减少的从任务API接口是否是第一主任务API接口中的从任务指针所指向的从任务API接口,如果不是,则可以将第一主任务API接口中的计数减少,以使得减少后的计数为第一主任务API接口关联的从任务API接口的数量。
如果减少的从任务API接口是第一主任务API接口中的从任务指针指向的从任务API接口,即,从任务指针所指向的从任务API接口被删除,则可以将从任务指针调整为指向当前从任务API接口中的序号最小的从任务API接口,并且将第一主任务API接口中的计数减少,以使得减少后的计数为第一主任务API接口关联的当前从任务API接口的数量。
以图5为例,图5所示的主任务API接口530关联有3个从任务API接口530-1、530-2和530-3,则主任务API接口530中的计数refCnt为3,从任务指针vEvt_p指向从任务API接口530-1。在从任务API接口530-1对应的控制任务被删除后,相应地,从任务API接口530-1也被删除,此时将主任务API接口530中的计数refCnt调整为2,将从任务指针vEvt_p调整为指向从任务API接口530-2。
若查看动态链接库中没有第二从任务API接口所需关联的第一主任务API接口,可以创建第一主任务API接口,并将所创建的第一主任务API接口存储至动态链接库中。再将第一主任务API接口分别与第一队列API接口、第二从任务API接口关联,并对第一主任务API接口中的队列指针、从任务指针、计数等进行调整。
其中,各个从任务API接口可以由应用层的应用来创建,这样便于用户通过应用对从任务API接口进行删除、增加等操作。各个主任务API接口可以由框架层来创建,由框架层创建的主任务API接口不能被应用删除,从而避免了用户通过应用删除主任务API接口。
在本说明书的一个示例中,第一队列API接口中包括pendingOpSeq字段,该pendingOpSeq字段用于指示对第一队列进行同步操作的队列同步点,队列同步点对应于第一队列中的一个功能任务,队列同步点对应的功能任务是针对第一队列的同步操作前的最后一个功能任务,针对队列同步点对应的功能任务的同步操作,可以等同于针对第一队列的同步操作。由此,该示例中将针对队列的同步操作,转换成针对一个功能任务的同步操作,无需对整个队列进行监控查询,从而简化了针对队列的同步操作,提高了同步操作的效率,并且减少了针对队列的同步操作所需的资源开销。
GPU中的多个队列之间可以进行队列同步,一个队列与另一队列中的一个功能任务之间也可以进行同步,在上述两种场景中都需要针对队列进行队列同步操作,当然,队列同步操作不仅限于上述两种场景。响应于针对所述第一队列的队列同步任务,确定队列同步任务对应的队列同步点。
如果第一队列API接口包括有队列同步点,该队列同步点对应的功能任务是该队列同步操作之前的最后一个功能任务,则可以将队列同步转化成针对队列同步点的功能任务的同步操作,将第一队列API接口中的队列同步点(即pendingOpSeq)和同步点(即completeOpSeq)进行比较,当队列同步点与同步点相同时,表示队列同步之前的所有功能任务都已完成,此时可以执行队列同步操作。
针对一个功能任务的同步操作所占用的资源远远小于针对一个队列的同步操作所占用的资源,通过设置队列同步点,可以将队列同步转化为针对一个功能任务的同步操作,从而节省了GPU的资源开销。
此外,在一个示例中,如果队列同步操作之前的最后一个功能任务关联有控制任务,也就是说存在关注该最后一个功能任务的主任务API接口,则可以将针对队列同步转化成针对该最后一个功能任务的同步操作。如果该最后一个功能任务完成,则表示队列同步之前的所有功能任务都已完成,此时可以执行队列同步操作。
如果队列同步操作之前的最后一个功能任务没有关联的控制任务,也就是说不存在关注该最后一个功能任务的主任务API接口,则可以创建一个关注该最后一个功能任务的主任务API接口,此时可以将针对队列同步转化成针对该最后一个功能任务的同步操作。后续再利用所创建的主任务API接口查询该最后一个功能任务的任务状态,当该最后一个功能任务完成,则表示队列同步之前的所有功能任务都已完成,此时可以执行队列同步操作。
通过上述示例,可以利用现有的主任务API接口或者创建一个新的主任务API接口,将队列同步转化为针对一个功能任务的同步操作,从而实现减少GPU的资源开销。
图7示出了本说明书实施例的用于执行GPU中的控制任务的装置(以下称为控制任务执行装置700)的一个示例的方框图。
控制任务执行装置700可以应用于GPU,GPU对多个队列并行处理,各个队列中具有序号的队列元素包括功能任务和控制任务。
每个队列被抽象封装成用于维护队列数据的队列API接口,队列中关注同一功能任务的一组控制任务被抽象封装成一组任务API接口,队列API接口和各组任务API接口存储在所述GPU的框架层连接的动态链接库中;针对一个队列,队列API接口与各组任务API接口关联。
每组任务API接口包括一个主任务API接口和至少一个从任务API接口,从任务API接口与对应的一组控制任务中的控制任务一一对应,每个控制任务被抽象封装成一个用于维护控制任务数据的从任务API接口;针对每组任务API接口,主任务API接口与各个从任务API接口关联。
队列API接口包括用于指示对应队列中最新完成的功能任务的同步点,主任务API接口包括关注功能任务序号。
在一个示例中,各个队列API接口还包括用于指向关联的主任务API接口的主任务指针,各个主任务API接口还包括用于指向所关联的队列API接口的队列指针、所关联的从任务API接口的计数以及用于指向所关联的从任务API接口中序号最小的从任务API接口的从任务指针,各个从任务API接口包括主任务指针。
如图7所示,控制任务执行装置700可以包括主任务API接口调用单元710和从任务API接口调用单元720。
主任务API接口调用单元710被配置为响应于第一队列中的第一控制任务的执行指令,利用第一控制任务对应的第一组任务API接口中的第一主任务API接口来针对第一控制任务关注的第一功能任务执行查询操作,以确定第一功能任务的任务状态;并在查询到第一功能任务的任务状态是完成、且第一队列API接口中的当前同步点小于第一功能任务的第一序号时,将同步点更新为第一序号。主任务API接口调用单元710的操作可以参考上面参照图6描述的块610、块620以及块630的操作。
从任务API接口调用单元720被配置为利用第一组任务API接口中的各个第一从任务API接口将获得的当前同步点与第一控制任务相关序号进行比较,以确定第一功能任务的任务状态。从任务API接口调用单元720的操作可以参考上面参照图6描述的块640的操作。其中,第一控制任务相关序号包括:第一控制任务的序号或者第一序号。在第一控制任务相关序号包括第一控制任务的序号时,各个第一从任务API接口包括第一控制任务的序号。
在一个示例中,从任务API接口调用单元720进一步地被配置为:在当前同步点小于第一控制任务相关序号时,利用各个第一从任务API接口确定第一功能任务的任务状态是未完成;在当前同步点不小于第一控制任务相关序号时,利用各个第一从任务API接口确定第一功能任务的任务状态是完成。
在一个示例中,主任务API接口调用单元710被配置为:利用第一主任务API接口将第一队列API接口中的当前同步点广播给各个第一从任务API接口;或者,从任务API接口调用单元,利用各个第一从任务API接口根据该第一从任务API接口中的主任务指针以及第一主任务API接口中的队列指针来从第一队列API接口中获取当前同步点。
在一个示例中,主任务API接口调用单元710进一步地被配置为:在第一主任务API接口每次查询第一队列API接口中的同步点时,利用第一主任务API接口将所查询到的同步点广播给各个第一从任务API接口;或者,在第一主任务API接口每次查询第一队列API接口中的同步点时,利用第一主任务API接口判断当前查询到的同步点与上一次查询到的同步点是否相同,若不同,则将当前查询到的同步点广播给各个第一从任务API接口。
在一个示例中,主任务API接口调用单元710进一步地被配置为:在查询到第一功能任务的任务状态是已完成、且第一队列API接口中的当前同步点不小于所述第一序号时,利用第一主任务API接口停止执行查询操作。
在一个示例中,各个从任务API接口还包括任务状态信息,主任务API接口调用单元710进一步地被配置为:在第一主任务API接口查询到第一功能任务的任务状态是完成时,利用第一主任务API接口将各个第一从任务API接口中的任务状态信息更新为完成;以及从任务API接口调用单元720进一步地被配置为:利用各个第一从任务API接口查看各自的任务状态信息中的任务状态。
在一个示例中,控制任务执行装置700还可以包括控制任务抽象封装单元和API接口关联单元,控制任务抽象封装单元被配置为响应于关注第一功能任务的第二控制任务的创建指令,将第二控制任务抽象封装成第二从任务API接口;API接口关联单元被配置为在动态链接库中有所述第一主任务API接口时,将第二从任务API接口与第一主任务API接口关联;在动态链接库中没有第一主任务API接口时,创建第一主任务API接口,并将第一主任务API接口分别与第一队列API接口、第二从任务API接口关联。
在一个示例中,主任务API接口调用单元710进一步地被配置为:在关注第一功能任务的控制任务被调整时,利用第一主任务API接口对计数进行调整,或者对计数和从任务指针进行调整。
在一个示例中,第一队列API接口还包括队列同步点,控制任务执行装置700还可以包括队列同步单元,队列同步单元被配置为响应于针对第一队列的队列同步任务,基于第一队列API接口中的队列同步点对第一队列进行同步操作。
在一个示例中,GPU被配置为包括一个服务器端和至少一个客户端,服务器端与各个客户端通信连接,GPU中的队列API接口和任务API接口被配置在位于客户端的框架层连接的动态链接库中。
此外,本说明书实施例还提供一种用于执行控制任务的GPU,其中,该GPU可以包括上述图7任一所述的用于执行GPU中的控制任务的装置。
以上参照图1到图7,对根据本说明书实施例的用于执行GPU中的控制任务的方法、装置及GPU的实施例进行了描述。
本说明书实施例的用于执行GPU中的控制任务的装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将存储器中对应的计算机程序指令读取到内存中运行形成的。在本说明书实施例中,用于执行GPU中的控制任务的装置例如可以利用电子设备实现。
图8示出了本说明书的实施例的实现用于执行GPU中的控制任务的方法的电子设备800的方框图。
如图8所示,电子设备800可以包括至少一个处理器810、存储器(例如,非易失性存储器)820、内存830和通信接口840,并且至少一个处理器810、存储器820、内存830和通信接口840经由总线850连接在一起。至少一个处理器810执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器810:响应于第一队列中的第一控制任务的执行指令,利用第一控制任务对应的第一组任务API接口中的第一主任务API接口来针对第一控制任务关注的第一功能任务执行查询操作,以确定第一功能任务的任务状态;并在查询到第一功能任务的任务状态是完成、且第一队列API接口中的当前同步点小于第一功能任务的第一序号时,将同步点更新为第一序号;以及利用第一组任务API接口中的各个第一从任务API接口将获得的当前同步点与第一控制任务相关序号进行比较,以确定第一功能任务的任务状态。
应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器810进行本说明书的各个实施例中以上结合图1-7描述的各种操作和功能。
根据一个实施例,提供了一种例如机器可读介质的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本说明书的各个实施例中以上结合图1-7描述的各种操作和功能。
具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。
在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本说明书实施例的一部分。
本说明书各部分操作所需的计算机程序代码可以用任意一种或多种程序语言编写,包括面向对象编程语言,如Java、Scala、Smalltalk、Eiffel、JADE、Emerald、C++、C#、VB、NET以及Python等,常规程序化编程语言如C语言、Visual Basic 2003、Perl、COBOL 2002、PHP以及ABAP,动态编程语言如Python、Ruby和Groovy,或者其他编程语言等。该程序编码可以在用户计算机上运行,或者作为独立的软件包在用户计算机上运行,或者部分在用户计算机上运行另一部分在远程计算机运行,或者全部在远程计算机或服务器上运行。在后一种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(LAN)或广域网(WAN),或连接至外部计算机(例如通过因特网),或者在云计算环境中,或者作为服务使用,比如软件即服务(SaaS)。
可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD-RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。
以上结合附图详细描述了本说明书的实施例的可选实施方式,但是,本说明书的实施例并不限于上述实施方式中的具体细节,在本说明书的实施例的技术构思范围内,可以对本说明书的实施例的技术方案进行多种简单变型,这些简单变型均属于本说明书的实施例的保护范围。
本说明书内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本说明书内容。对于本领域普通技术人员来说,对本说明书内容进行的各种修改是显而易见的,并且,也可以在不脱离本说明书内容的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。因此,本说明书内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。
Claims (31)
1.一种用于执行GPU中的控制任务的方法,其中,所述GPU对多个队列并行处理,各个队列中具有序号的队列元素包括功能任务和控制任务,
每个队列被抽象封装成用于维护队列数据的队列API接口,队列中关注同一功能任务的一组控制任务被抽象封装成一组任务API接口,队列API接口和各组任务API接口存储在所述GPU的框架层连接的动态链接库中;针对一个队列,队列API接口与各组任务API接口关联,
每组任务API接口包括一个主任务API接口和至少一个从任务API接口,从任务API接口与对应的一组控制任务中的控制任务一一对应,每个控制任务被抽象封装成一个用于维护控制任务数据的从任务API接口;针对每组任务API接口,主任务API接口与各个从任务API接口关联,
队列API接口包括用于指示对应队列中最新完成的功能任务的同步点,主任务API接口包括关注功能任务序号,
所述方法包括:
响应于第一队列中的第一控制任务的执行指令,利用所述第一控制任务对应的第一组任务API接口中的第一主任务API接口来针对所述第一控制任务关注的第一功能任务执行查询操作,以确定所述第一功能任务的任务状态;并在查询到所述第一功能任务的任务状态是完成、且第一队列API接口中的当前同步点小于所述第一功能任务的第一序号时,将同步点更新为所述第一序号;以及
利用所述第一组任务API接口中的各个第一从任务API接口将获得的当前同步点与第一控制任务相关序号进行比较,以确定所述第一功能任务的任务状态。
2.如权利要求1所述的方法,其中,所述第一控制任务包括查询任务或同步任务。
3.如权利要求1所述的方法,其中,各个队列API接口还包括用于指向关联的主任务API接口的主任务指针,
各个主任务API接口还包括用于指向所关联的队列API接口的队列指针、所关联的从任务API接口的计数以及用于指向所关联的从任务API接口中序号最小的从任务API接口的从任务指针,
各个从任务API接口包括主任务指针。
4.如权利要求1所述的方法,其中,所述第一控制任务相关序号包括:所述第一控制任务的序号或者所述第一序号。
5.如权利要求4所述的方法,其中,在第一控制任务相关序号包括所述第一控制任务的序号时,各个第一从任务API接口包括所述第一控制任务的序号。
6.如权利要求1所述的方法,其中,按照以下方式来确定所述第一功能任务的任务状态:
在所述当前同步点小于所述第一控制任务相关序号时,确定所述第一功能任务的任务状态是未完成;
在所述当前同步点不小于所述第一控制任务相关序号时,确定所述第一功能任务的任务状态是完成。
7.如权利要求3所述的方法,其中,根据以下方式所述各个第一从任务API接口获得所述当前同步点:
所述第一主任务API接口将所述第一队列API接口中的当前同步点广播给所述各个第一从任务API接口;或者,
各个第一从任务API接口根据该第一从任务API接口中的主任务指针以及所述第一主任务API接口中的队列指针来从所述第一队列API接口中获取当前同步点。
8.如权利要求7所述的方法,其中,所述第一主任务API接口将所述第一队列API接口中的当前同步点广播给所述各个第一从任务API接口包括:
所述第一主任务API接口每次查询所述第一队列API接口中的同步点时,将所查询到的同步点广播给所述各个第一从任务API接口;或者,
所述第一主任务API接口每次查询所述第一队列API接口中的同步点时,判断当前查询到的同步点与上一次查询到的同步点是否相同,若不同,则将当前查询到的同步点广播给所述各个第一从任务API接口。
9.如权利要求1所述的方法,还包括:
所述第一主任务API接口在查询到所述第一功能任务的任务状态是已完成、且第一队列API接口中的当前同步点不小于所述第一序号时,停止执行所述查询操作。
10.如权利要求3所述的方法,其中,各个从任务API接口还包括任务状态信息,
所述方法还包括:
在所述第一主任务API接口查询到所述第一功能任务的任务状态是完成时,利用所述第一主任务API接口将所述各个第一从任务API接口中的任务状态信息更新为完成;以及
利用所述各个第一从任务API接口查看各自的任务状态信息中的任务状态。
11.如权利要求1所述的方法,还包括:
响应于关注所述第一功能任务的第二控制任务的创建指令,将所述第二控制任务抽象封装成第二从任务API接口;
在所述动态链接库中有所述第一主任务API接口时,将所述第二从任务API接口与所述第一主任务API接口关联;
在所述动态链接库中没有所述第一主任务API接口时,创建所述第一主任务API接口,并将所述第一主任务API接口分别与所述第一队列API接口、第二从任务API接口关联。
12.如权利要求3所述的方法,还包括:
在关注所述第一功能任务的控制任务被调整时,对所述第一主任务API接口中的计数进行调整,或者对所述第一主任务API接口中的计数和从任务指针进行调整。
13.如权利要求1所述的方法,其中,所述第一队列API接口还包括队列同步点,
所述方法还包括:
响应于针对所述第一队列的队列同步任务,基于所述第一队列API接口中的队列同步点对所述第一队列进行同步操作。
14.如权利要求1所述的方法,其中,所述GPU被配置为包括一个服务器端和至少一个客户端,所述服务器端与各个客户端通信连接,
所述GPU中的队列API接口和任务API接口被配置在位于客户端的框架层连接的动态链接库中。
15.如权利要求1所述的方法,其中,所述GPU被部署在裸机环境、容器环境和虚拟机环境中的任一种。
16.一种用于执行GPU中的控制任务的装置,其中,所述GPU对多个队列并行处理,各个队列中具有序号的队列元素包括功能任务和控制任务,
每个队列被抽象封装成用于维护队列数据的队列API接口,队列中关注同一功能任务的一组控制任务被抽象封装成一组任务API接口,队列API接口和各组任务API接口存储在所述GPU的框架层连接的动态链接库中;针对一个队列,队列API接口与各组任务API接口关联,
每组任务API接口包括一个主任务API接口和至少一个从任务API接口,从任务API接口与对应的一组控制任务中的控制任务一一对应,每个控制任务被抽象封装成一个用于维护控制任务数据的从任务API接口;针对每组任务API接口,主任务API接口与各个从任务API接口关联,
队列API接口包括用于指示对应队列中最新完成的功能任务的同步点,主任务API接口包括关注功能任务序号,
所述装置包括:
主任务API接口调用单元,响应于第一队列中的第一控制任务的执行指令,利用所述第一控制任务对应的第一组任务API接口中的第一主任务API接口来针对所述第一控制任务关注的第一功能任务执行查询操作,以确定所述第一功能任务的任务状态;并在查询到所述第一功能任务的任务状态是完成、且第一队列API接口中的当前同步点小于所述第一功能任务的第一序号时,将同步点更新为所述第一序号;以及
从任务API接口调用单元,利用所述第一组任务API接口中的各个第一从任务API接口将获得的当前同步点与第一控制任务相关序号进行比较,以确定所述第一功能任务的任务状态。
17.如权利要求16所述的装置,其中,各个队列API接口还包括用于指向关联的主任务API接口的主任务指针,
各个主任务API接口还包括用于指向所关联的队列API接口的队列指针、所关联的从任务API接口的计数以及用于指向所关联的从任务API接口中序号最小的从任务API接口的从任务指针,
各个从任务API接口包括主任务指针。
18.如权利要求16所述的装置,其中,所述第一控制任务相关序号包括:所述第一控制任务的序号或者所述第一序号。
19.如权利要求18所述的装置,其中,在第一控制任务相关序号包括所述第一控制任务的序号时,各个第一从任务API接口包括所述第一控制任务的序号。
20.如权利要求16所述的装置,其中,所述从任务API接口调用单元进一步地:
在所述当前同步点小于所述第一控制任务相关序号时,利用所述各个第一从任务API接口确定所述第一功能任务的任务状态是未完成;
在所述当前同步点不小于所述第一控制任务相关序号时,利用所述各个第一从任务API接口确定所述第一功能任务的任务状态是完成。
21.如权利要求17所述的装置,其中,
所述主任务API接口调用单元,利用所述第一主任务API接口将所述第一队列API接口中的当前同步点广播给所述各个第一从任务API接口;或者,
所述从任务API接口调用单元,利用各个第一从任务API接口根据该第一从任务API接口中的主任务指针以及所述第一主任务API接口中的队列指针来从所述第一队列API接口中获取当前同步点。
22.如权利要求21所述的装置,其中,所述主任务API接口调用单元进一步地:
在所述第一主任务API接口每次查询所述第一队列API接口中的同步点时,利用所述第一主任务API接口将所查询到的同步点广播给所述各个第一从任务API接口;或者,
在所述第一主任务API接口每次查询所述第一队列API接口中的同步点时,利用所述第一主任务API接口判断当前查询到的同步点与上一次查询到的同步点是否相同,若不同,则将当前查询到的同步点广播给所述各个第一从任务API接口。
23.如权利要求16所述的装置,所述主任务API接口调用单元进一步地:
在查询到所述第一功能任务的任务状态是已完成、且第一队列API接口中的当前同步点不小于所述第一序号时,利用所述第一主任务API接口停止执行所述查询操作。
24.如权利要求17所述的装置,其中,各个从任务API接口还包括任务状态信息,
所述主任务API接口调用单元进一步地:在所述第一主任务API接口查询到所述第一功能任务的任务状态是完成时,利用所述第一主任务API接口将所述各个第一从任务API接口中的任务状态信息更新为完成;以及
所述从任务API接口调用单元进一步地:利用所述各个第一从任务API接口查看各自的任务状态信息中的任务状态。
25.如权利要求16所述的装置,还包括:
控制任务抽象封装单元,响应于关注所述第一功能任务的第二控制任务的创建指令,将所述第二控制任务抽象封装成第二从任务API接口;
API接口关联单元,在所述动态链接库中有所述第一主任务API接口时,将所述第二从任务API接口与所述第一主任务API接口关联;在所述动态链接库中没有所述第一主任务API接口时,创建所述第一主任务API接口,并将所述第一主任务API接口分别与所述第一队列API接口、第二从任务API接口关联。
26.如权利要求17所述的装置,所述主任务API接口调用单元进一步地:
在关注所述第一功能任务的控制任务被调整时,利用所述第一主任务API接口对计数进行调整,或者对计数和从任务指针进行调整。
27.如权利要求16所述的装置,其中,所述第一队列API接口还包括队列同步点,
所述装置还包括:
队列同步单元,响应于针对所述第一队列的队列同步任务,基于所述第一队列API接口中的队列同步点对所述第一队列进行同步操作。
28.如权利要求16所述的装置,其中,所述GPU被配置为包括一个服务器端和至少一个客户端,所述服务器端与各个客户端通信连接,
所述GPU中的队列API接口和任务API接口被配置在位于客户端的框架层连接的动态链接库中。
29.一种用于执行控制任务的GPU,其中,所述GPU包括权利要求16到28中任一所述的装置。
30.一种电子设备,包括:
至少一个处理器,以及
与所述至少一个处理器耦合的存储器,所述存储器存储指令,当所述指令被所述至少一个处理器执行时,使得所述至少一个处理器执行如权利要求1到15中任一所述的方法。
31.一种机器可读存储介质,其存储有可执行指令,所述指令当被执行时使得所述机器执行如权利要求1到15中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010772890.3A CN111782408B (zh) | 2020-08-04 | 2020-08-04 | 用于执行gpu中的控制任务的方法、装置及gpu |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010772890.3A CN111782408B (zh) | 2020-08-04 | 2020-08-04 | 用于执行gpu中的控制任务的方法、装置及gpu |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111782408A CN111782408A (zh) | 2020-10-16 |
CN111782408B true CN111782408B (zh) | 2024-02-09 |
Family
ID=72765749
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010772890.3A Active CN111782408B (zh) | 2020-08-04 | 2020-08-04 | 用于执行gpu中的控制任务的方法、装置及gpu |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111782408B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10262390B1 (en) * | 2017-04-14 | 2019-04-16 | EMC IP Holding Company LLC | Managing access to a resource pool of graphics processing units under fine grain control |
CN111026529A (zh) * | 2019-11-26 | 2020-04-17 | 支付宝(杭州)信息技术有限公司 | 分布式任务处理系统的任务停止方法及装置 |
-
2020
- 2020-08-04 CN CN202010772890.3A patent/CN111782408B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10262390B1 (en) * | 2017-04-14 | 2019-04-16 | EMC IP Holding Company LLC | Managing access to a resource pool of graphics processing units under fine grain control |
CN111026529A (zh) * | 2019-11-26 | 2020-04-17 | 支付宝(杭州)信息技术有限公司 | 分布式任务处理系统的任务停止方法及装置 |
Non-Patent Citations (1)
Title |
---|
基于线程池的GPU任务并行计算模式研究;李涛;董前琨;张帅;孔令晏;康宏;杨愚鲁;;计算机学报(10);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111782408A (zh) | 2020-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021051914A1 (zh) | 基于gpu资源的数据处理方法、电子设备及系统 | |
US11010681B2 (en) | Distributed computing system, and data transmission method and apparatus in distributed computing system | |
US10528390B2 (en) | Idempotent task execution in on-demand network code execution systems | |
US11836516B2 (en) | Reducing execution times in an on-demand network code execution system using saved machine states | |
CN110750282B (zh) | 用于运行应用程序的方法、装置及gpu节点 | |
CN111309649B (zh) | 一种数据传输和任务处理方法、装置及设备 | |
JP7100154B2 (ja) | プロセッサコアのスケジューリング方法、装置、端末及び記憶媒体 | |
US11321090B2 (en) | Serializing and/or deserializing programs with serializable state | |
CN109657174A (zh) | 用于更新数据的方法和装置 | |
US10824480B2 (en) | Method and machine for application migration | |
CN110971939A (zh) | 一种违规图片的识别方法及相关装置 | |
CN106648831B (zh) | 基于萤火虫算法和动态优先级的云工作流调度方法 | |
CN109992956A (zh) | 容器的安全策略的处理方法和相关装置 | |
US20220374742A1 (en) | Method, device and storage medium for running inference service platform | |
CN116820764A (zh) | 一种计算资源的提供方法、系统、电子设备及存储介质 | |
KR20210021261A (ko) | 가속기에서 이종 컴포넌트들을 구성하기 위한 방법들 및 장치 | |
US10802874B1 (en) | Cloud agnostic task scheduler | |
CN111782407B (zh) | 用于执行gpu中的控制任务的方法、装置及gpu | |
CN111782408B (zh) | 用于执行gpu中的控制任务的方法、装置及gpu | |
CN110445874A (zh) | 一种会话处理方法、装置、设备和存储介质 | |
US11475009B2 (en) | Intelligent memory allocation and deallocation of data | |
WO2021232860A1 (zh) | 通信方法、装置及系统 | |
CN110309365B (zh) | 一种基于Mybatis实现的openstack数据查询方法与装置 | |
CN110971928B (zh) | 一种图片识别方法及相关装置 | |
US11733729B2 (en) | Centralized imposing of multi-cloud clock speeds |
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 |