CN117032999B - 一种基于异步运行时的cpu-gpu协同调度方法及装置 - Google Patents

一种基于异步运行时的cpu-gpu协同调度方法及装置 Download PDF

Info

Publication number
CN117032999B
CN117032999B CN202311298504.1A CN202311298504A CN117032999B CN 117032999 B CN117032999 B CN 117032999B CN 202311298504 A CN202311298504 A CN 202311298504A CN 117032999 B CN117032999 B CN 117032999B
Authority
CN
China
Prior art keywords
subtask
executed
subtasks
processor
task
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
Application number
CN202311298504.1A
Other languages
English (en)
Other versions
CN117032999A (zh
Inventor
白文媛
高丰
郑楚
毛良献
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Lab
Original Assignee
Zhejiang Lab
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhejiang Lab filed Critical Zhejiang Lab
Priority to CN202311298504.1A priority Critical patent/CN117032999B/zh
Publication of CN117032999A publication Critical patent/CN117032999A/zh
Application granted granted Critical
Publication of CN117032999B publication Critical patent/CN117032999B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation 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/5038Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation 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/5044Allocation 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 hardware capabilities
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)

Abstract

本说明书公开了一种基于异步运行时的CPU‑GPU协同调度方法及装置,确定待执行任务,将所述待执行任务分解成包含若干子任务的子任务队列,针对每个子任务,根据执行该子任务所需的计算资源类型,确定用于执行该子任务的处理器类型,当要执行该子任务时,将该子任务调度至与该子任务的处理器类型对应的处理器执行。该方法提供的协同调度方法,能够将待执行子任务分解成子任务队列,并将队列中获得的待执行子任务合理的调度到CPU和GPU处理器上执行,通过避免和减少CPU、GPU的空闲时间,做到高效地利用CPU和GPU协同计算资源,获得对整体计算资源的更高利用效能,以解决现有技术中存在的CPU、GPU计算资源空闲率高,但资源占用时间长的问题。

Description

一种基于异步运行时的CPU-GPU协同调度方法及装置
技术领域
本说明书涉及计算机技术领域,尤其涉及一种基于异步运行时的CPU-GPU协同调度方法及装置。
背景技术
目前,人工智能进入新的阶段,人工智能的发展依赖算力、算法和数据三大关键要素,而为了应对日益增加的算力资源需求,使用异构计算方式来实现对CPU和GPU的协同调度从而提升算力已经成为主流方案。
例如,在处理海量数据时,CPU能够快速完成基本的计算,而GPU则能够高效地完成并行计算。这两种处理器相互配合,就可以提供更好的计算性能。
然而,如何实现CPU和GPU的协同调度,高效地利用CPU和GPU协同计算资源,获得对整体计算资源的更高利用效能,是一个亟待解决的问题。
发明内容
本说明书实施例提供一种基于异步运行时的CPU-GPU协同调度方法及装置,以部分解决上述现有技术存在的问题。
本说明书实施例采用下述技术方案:
本说明书提供的一种基于异步运行时的CPU-GPU协同调度方法,所述方法包括:
确定待执行任务;
将所述待执行任务分解成包含若干子任务的子任务队列;
针对每个子任务,根据执行该子任务所需的计算资源类型,确定用于执行该子任务的处理器类型;其中,所述处理器类型包括CPU和GPU;
当要执行该子任务时,将该子任务调度至与该子任务的处理器类型对应的处理器执行。
可选地,将所述待执行任务分解成包含若干子任务的子任务队列,具体包括:
将所述待执行任务分解成若干子任务;
确定所述若干子任务间的依赖关系,根据所述依赖关系,生成子任务依赖关系图,并,生成包含所述若干子任务的子任务队列。
可选地,确定用于执行该子任务的处理器类型后,所述方法还包括:
针对每个子任务,根据所述子任务依赖关系图,确定该子任务所依赖的其他子任务;
判断该子任务所依赖的其他子任务是否均执行完成;
若是,确定该子任务为待执行状态;
否则,确定该子任务不是为待执行状态。
可选地,当要执行该子任务时,将该子任务调度至与该子任务的处理器类型对应的处理器执行,具体包括:
当该子任务为待执行状态时,将该子任务作为待执行子任务添加到任务池中;
针对所述任务池中的每个待执行子任务,将该待执行子任务调度至与该待执行子任务的处理器类型对应的处理器执行。
可选地,将该子任务调度至与该子任务的处理器类型对应的处理器执行,具体包括:
查询与该子任务的处理器类型对应的处理器的状态;
若查询到的状态为空闲状态,则将该子任务调度至与该子任务的处理器类型对应的处理器执行。
可选地,执行该子任务之后,所述方法还包括:
将该子任务的状态更新为已执行状态;
根据更新后的该子任务的状态,从所述子任务队列中去除状态为已执行状态的子任务,得到更新后的子任务队列;
根据更新后的子任务队列中包含的子任务,更新所述子任务依赖关系图;
根据更新后的子任务依赖关系图继续执行更新后的子任务队列中包含的子任务。
可选地,针对所述任务池中的每个待执行子任务,将该待执行子任务调度至与该待执行子任务的处理器类型对应的处理器执行,具体包括:
按照设定周期,读取所述任务池中的待执行子任务;
将读取的待执行子任务调度至与该读取的待执行子任务的处理器类型对应的处理器执行。
本说明书提供的一种基于异步运行时的CPU-GPU协同调度装置,所述装置包括:
确定模块,用于确定待执行子任务;
分解模块,用于将所述待执行任务分解成包含若干子任务的子任务队列;
判断模块,用于针对每个子任务,根据执行该子任务所需的计算资源类型,确定用于执行该子任务的处理器类型;其中,所述处理器类型包括CPU和GPU;
调度模块,用于当要执行该子任务时,将该子任务调度至与该子任务的处理器类型对应的处理器执行。
本说明书提供的一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述的基于异步运行时的CPU-GPU协同调度方法。
本说明书提供的一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述的基于异步运行时的CPU-GPU协同调度方法。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:
本说明书实施例公开了一种基于异步运行时的CPU-GPU协同调度方法,确定待执行任务,将所述待执行任务分解成包含若干子任务的子任务队列,针对每个子任务,根据执行该子任务所需的计算资源类型,确定用于执行该子任务的处理器类型,当要执行该子任务时,将该子任务调度至与该子任务的处理器类型对应的处理器执行。该方法提供的协同调度方法,能够将待执行子任务分解成子任务队列,并将队列中获得的待执行子任务合理的调度到CPU和GPU处理器上执行,通过避免和减少CPU、GPU的空闲时间,做到高效地利用CPU和GPU协同计算资源,获得对整体计算资源的更高利用效能,以解决现有技术中存在的CPU、GPU计算资源空闲率高,但资源占用时间长的问题。
附图说明
此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,本说明书的示意性实施例及其说明用于解释本说明书,并不构成对本说明书的不当限定。在附图中:
图1为本说明书中一种基于异步运行时的CPU-GPU协同调度方法的流程示意图;
图2为本说明书中提供的子任务依赖关系图;
图3为本说明书中更新并执行子任务队列流程示意图;
图4为本说明书提供的一种基于异步运行时的CPU-GPU协同调度装置示意图;
图5为本说明书实施例提供的电子设备的结构示意图。
具体实施方式
为使本说明书的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本说明书技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本说明书保护的范围。
自从人工智能技术蓬勃发展以来,尤其是大型语言模型(Chat Generative Pre-trained Transformer,ChatGPT)重新定义“生产方式”的理念推出后,已经催生了海量应用,人工智能进入了新的阶段。人工智能的发展依赖算力、算法和数据三大关键要素,算力决定了迭代的效率,因此,为人工智能计算提供的算力资源需求也是现在关注的要点。许多研究人员发现中央处理器(Central Processing Unit,CPU)和图形处理器(GraphicProcessing Unit,GPU)是人工智能计算中最重要的多核处理器,也是机构中已广泛存在的资源,对这些已有存量资源的高效运用是更为迫切且实际的需求。
同构计算(Homogeneous Computing)是较传统的计算方式,如CPU的多内核处理形式。异构计算(Heterogeneous Computing)是与同构计算相对的另一种形式,通过设计并行分布式计算系统,实现高计算能力。例如,在处理海量数据时,CPU能够快速完成基本的计算,而GPU则能够高效地完成并行计算,这两种处理器相互配合,就可以提供更好的计算性能。因此,使用异构计算已成为提升算力的主流方案。
例如,OpenMP技术,OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多线程程序设计的一套指导性注释(Compiler Directive)。OpenMP实现跨平台的多线程方式为,主线程(顺序的执行命令)生成一系列的子线程,并将任务划分给这些子线程进行执行,这些子线程并行的运行,由运行时环境将线程分配给不同的处理器。要进行并行执行的代码片段需要进行相应的标记,用预编译指令使得在代码片段被执行前生成线程,默认情况下,各个线程独立地执行并行区域的代码,使得OpenMP可以实现任务并行和数据并行。运行时环境分配给每个处理器的线程数取决于使用方法、机器负载和其他因素。
但是,OpenMP并不适合需要复杂的线程间同步和互斥的场合,而且不能再非共享内存系统(如计算机集群)上使用,而GPU和CPU之间是不能共享内存的,因此,不能支持GPU和CPU的协同调度场景。
而本技术方案,提供一种基于异步运行时的CPU的GPU协同调度方法,是使用异步编程模式编写的程序,在异步程序中,任务之间的依赖关系和执行顺序是通过异步调度和异步运行时来管理的,而不是通过传统的同步方式(如函数调用和线程)进行控制。异步程序通常使用异步关键字、回调函数、协程等机制来定义和管理异步任务。它可以是单线程或多线程的,但通过异步调度和非阻塞的方式,可以更好地利用系统资源,提高程序的并发性和性能。本发明所述技术允许运行时系统精心安排任务的无序执行,并且可以将分解后的子任务调度到CPU、GPU计算单元上,支持GPU和CPU的协同调度场景,以保障动态地适应负载不均衡的情况。
上述提到的异步调度(Asynchronous Scheduling)是指在异步编程中,任务的执行不按照严格的顺序进行,而是根据任务的就绪状态和可用资源来动态地进行调度。这种调度方式允许程序在执行一个任务的同时,可以处理其他任务或等待外部事件的发生,而不需要阻塞整个程序。通过合理的异步调度,可以充分利用计算资源,并提高程序的吞吐量和响应速度。
此外,上述提到的异步运行时(Asynchronous Runtime)是支持异步编程的运行时环境或框架。它提供了一套机制,用于管理异步任务的执行、调度和协调。异步运行时通常提供异步任务的创建和启动、异步任务之间的通信和同步机制,以及处理异步任务的结果和异常等功能。常见的异步运行时包括Node.js中的事件循环(Event Loop)、Python中的asyncio库等。
以下结合附图,详细说明本说明书各实施例提供的技术方案。
图1为本说明书中一种基于异步运行时的CPU-GPU协同调度方法的流程示意图,具体可包括以下步骤:
S100:确定待执行任务。
执行本说明书实施例的执行主体可以为电子设备中的CPU处理器,CPU是电子设备的核心部件,主要负责解释计算机指令、处理数据和控制计算机的各种操作。
针对电子设备中的每一个任务,当该任务需要执行时,则将该任务确定为待执行任务。此外,确定的待执行的任务可以为多个。
S102:将所述待执行任务分解成包含若干子任务的子任务队列。
在确定待执行任务后,需要对待执行任务进行任务预处理,任务预处理部分作为整个流程的输入,将待执行任务通过任务分解的方法,分解成包含若干子任务的子任务队列。
在将待执行任务分解为若干个子任务时,可以根据任务的性质、可并行化的程度或其他因素进行划分,例如,对于一个图像处理任务,可以将其分解成多个子任务,每个子任务处理图像的不同部分。具体的任务分解方法本说明书实例不做限制。待执行任务分解后,可根据分解后的子任务的执行顺序确定分解后的任务队列。
此外,若有多个待执行任务,则生成多个子任务队列,每个待执行任务生成一个对应的包含若干子任务的子任务队列。
S104:针对每个子任务,根据执行该子任务所需的计算资源类型,确定用于执行该子任务的处理器类型;其中,所述处理器类型包括CPU和GPU。
具体的,对每个子任务进行分析,确定其所需的计算资源类型,然后根据确定的计算资源类型,确定用于执行该子任务的处理器类型;其中,所述处理器类型包括CPU和GPU。例如,某个子任务可能需要进行大量的数值计算和逻辑运算,这时候CPU可能是更适合的处理器类型。而对于需要进行大规模并行计算的子任务,如图像处理或机器学习模型的训练,使用GPU可能会更高效。
当然,这里只提到CPU和GPU两种处理器,是由两种处理器构成的异构计算系统,本方法的处理器还可由更多类型处理器组成,本说明书实例也不做限制。
S106:当要执行该子任务时,将该子任务调度至与该子任务的处理器类型对应的处理器执行。
换句话说,当要执行已经确定处理器类型的子任务时,将该子任务调度至与该子任务的处理器类型对应的处理器执行。即当要执行需要CPU处理器执行的子任务时,则将该子任务调度到CPU处理器执行,当要执行需要GPU处理器执行的子任务时,则将该子任务调度到GPU处理器执行。
基于图1提供的一种基于异步运行时的CPU-GPU协同调度方法,能够将待执行子任务分解成子任务队列,并将队列中获得的待执行子任务合理的调度到CPU和GPU处理器上执行,通过避免和减少CPU、GPU的空闲时间,做到高效地利用CPU和GPU协同计算资源,获得对整体计算资源的更高利用效能,以解决现有技术中存在的CPU、GPU计算资源空闲率高,但资源占用时间长的问题。
进一步的,上述图1所述的S102步骤,将所述待执行任务分解成包含若干子任务的子任务队列,可具体为,将所述待执行任务分解成若干子任务,确定所述若干子任务间的依赖关系,根据所述依赖关系,生成子任务依赖关系图,并,生成包含所述若干子任务的子任务队列。
该过程通常可以按以下步骤进行:
任务分解:将待执行任务分解为若干个更小、更可管理的子任务。
依赖关系确定:确定子任务之间的依赖关系。某些子任务可能需要在其他子任务完成后才能执行,形成了依赖关系。例如,有两个子任务分别为子任务A和子任务B,子任务A为完成图像的预处理,子任务B为对图像进行特征提取,对图像进行特征提取需要先完成图像的预处理,即先执行完成子任务A才能执行子任务B,子任务A和子任务B间形成了依赖关系。
子任务依赖关系图生成:使用依赖关系确定的结果,生成子任务依赖关系图,可以用一个有向无环图(Directed Acyclic Graph,DAG)表示。这里提到的有向无环图是指一个无回路的有向图,包含节点(Vertex)和边(Edge)两种基本元素,节点表示实体,边表示实体间的依赖关系,这种依赖关系表示两个实体的计算先后顺序,也可以表示不同实体之间的传输。在上述子任务依赖关系图中,节点表示子任务,有向边表示子任务间的依赖关系,这种依赖关系表示两个子任务的执行先后顺序,后执行的子任务依赖于先执行的子任务。如图2所示,此图中的空心圆圈表示待执行的子任务,而实心圆圈表示已执行子任务,箭头表示依赖关系,空心圆圈指向实心圆圈表示空心圆圈依赖于实心圆圈,即待执行子任务依赖于已执行子任务。
子任务队列生成:根据子任务依赖关系图,生成包含多个子任务的子任务队列。通常,可以使用拓扑排序算法来确定子任务的执行顺序,以保证每个子任务的依赖关系得到满足。拓扑排序可以确保在执行子任务时,所有依赖的子任务已经完成。
另外,基于上述生成的任务依赖关系图,在图1所述的步骤S104后,还需针对每个子任务,根据上面生成的子任务依赖关系图,确定该子任务所依赖的其他子任务,并判断该子任务所依赖的其他子任务是否均执行完成,若是,确定该子任务为待执行状态,否则,确定该子任务不是为待执行状态。通常,除上述待执行状态外,子任务还包括已执行状态(该子任务执行完成)和执行中状态(该子任务执行中),亦可包含其他状态。
进一步的,上述图1所述的S106步骤,当要执行该子任务时,将该子任务调度至与该子任务的处理器类型对应的处理器执行。可具体为,读取子任务依赖关系图,识别每个子任务状态,针对每个子任务,当该子任务为待执行状态时,将该子任务作为待执行子任务添加到任务池中,针对所述任务池中的每个待执行子任务,将该待执行子任务调度至与该待执行子任务的处理器类型对应的处理器执行。
这里提到的任务池为待执行子任务的任务池,在任务预处理后,任务队列中可能有多个待执行子任务,可以通过设置待执行子任务池,让电子设备集中管理和调度这些待执行子任务,简化待执行子任务的调度和管理。同时,任务池可以支持异步执行,即在任务提交后,不需要等待任务的执行结果立即返回,而是可以继续执行其他任务,这样可以提高系统的响应速度和并发性能,提高系统的资源利用率。
进一步的,上述读取子任务依赖关系图可按照设定周期定时读取,针对所述任务池中的每个待执行子任务,将该待执行子任务调度至与该待执行子任务的处理器类型对应的处理器执行时,也可按照设定周期,读取所述任务池中的待执行子任务,将读取的待执行子任务调度至与该读取的待执行子任务的处理器类型对应的处理器执行。
此外,将该子任务调度至与该子任务的处理器类型对应的处理器执行,具体步骤为:查询与该子任务的处理器类型对应的处理器的状态,若查询到的状态为空闲状态,则将该子任务调度至与该子任务的处理器类型对应的处理器执行,将该子任务的状态更新为已执行状态。例如,从待执行任务池中获取了一个待执行子任务,首先就需要根据其资源类型标签判断该子任务的执行是需要CPU资源还是GPU资源,若需要CPU资源,则查询CPU处理器的空闲状态,如果空闲,则将该子任务调度到CPU处理器上执行,并将该子任务的状态更新为已执行状态;若需要GPU资源,则查询GPU处理器的空闲状态,如果空闲,则将该子任务调度到GPU处理器上执行,并将该子任务的状态更新为已执行状态。
在S106步骤完成后,需要更新待执行子任务队列,根据更新后的该子任务的状态,从所述子任务队列中去除状态为已执行状态的子任务,得到更新后的子任务队列,根据更新后的子任务队列中包含的子任务,更新所述子任务依赖关系图,根据更新后的子任务依赖关系图继续执行更新后的子任务队列中包含的子任务。其具体操作流程如附图3所示。
S100:确定待执行任务。
S1020:将所述待执行任务分解成若干子任务。
S1022:确定所述若干子任务间的依赖关系,根据所述依赖关系,生成子任务依赖关系图,并,生成包含所述若干子任务的子任务队列。
S104:针对每个子任务,根据执行该子任务所需的计算资源类型,确定用于执行该子任务的处理器类型;其中,所述处理器类型包括CPU和GPU。
S1060:更新当前子任务队列中包含的各子任务的状态,去除所述子任务队列中已执行状态的子任务。
这里可以为循环的开始,最开始的包含若干个子任务的子任务队列由待执行任务分解并根据子任务间的依赖关系得到,后面则针对上述S106步骤完成后的当前子任务队列中包含的每一个子任务,更新该子任务的状态,从所述子任务队列中去除状态为已执行状态的子任务,得到更新后的子任务队列。
值得注意的是,从所述子任务队列去除子任务时,被去除的每一个子任务只能是状态更新为已执行状态的子任务。状态为执行中的子任务可能会执行出错或者失败需要再次执行,不适合被去除,若子任务为执行中状态就被去除,则不能保证子任务队列中的每一个子任务都执行完成。
S1062:将状态为待执行状态的子任务添加到任务池。
具体的,根据更新后的子任务队列中包含的子任务,更新所述子任务依赖关系图。根据更新后的子任务依赖关系图,更新待执行子任务池。其中,针对每一个子任务,只有当其依赖的所有子任务都已更新为已执行状态,才能将该子任务更新为待执行状态。
S1064:读取任务池中的待执行子任务。
S1066:将读取的待执行子任务调度至与该读取的待执行子任务的处理器类型对应的处理器执行,并返回步骤S1060。
在此过程中,针对每个更新后的待执行子任务池中的每个待执行子任务,当读取到该待执行子任务后,应将该待执行子任务的状态从待执行状态更新为执行中状态,当该执行中状态的子任务被成功执行后,才将该执行中状态的子任务的更新为已执行子任务。
进一步的,在上述方法中,子任务队列中各子任务的性质可以用标签来表示,所述标签包括两类,资源类型标签和子任务状态标签。
其中,资源类型标签用于表示该子任务执行时所需的资源,可根据该子任务执行时所需的资源将子任务分为两种子任务,CPU子任务和GPU子任务。若该子任务执行时需要GPU资源,则为GPU子任务,若不需要使用GPU资源,则为CPU子任务。
子任务状态标签用于表示该子任务的状态,可以有三种,分别是已执行状态、执行中状态和待执行状态。已执行状态表明该子任务执行完成,执行中状态表明该子任务正在执行中,待执行状态表明其依赖的前序子任务都已执行完成,该子任务的前提条件已具备,随时可以执行。
需要说明的是,执行本说明书实施例上述的方法之前,需要先启动异步运行时,并基于异步运行时提供的框架,执行上述方法。
以上为本说明书实施例提供的基于异步运行时的CPU-GPU协同调度控制方法,基于同样的思路,本说明书还提供了相应的装置,如图4所示。
图4为本说明书提供的一种基于异步运行时的CPU-GPU协同调度装置示意图,具体包括:
确定模块400,用于确定待执行子任务;
分解模块402,用于将所述待执行任务分解成包含若干子任务的子任务队列;
判断模块404,用于针对每个子任务,根据执行该子任务所需的计算资源类型,确定用于执行该子任务的处理器类型;其中,所述处理器类型包括CPU和GPU;
调度模块406,用于当要执行该子任务时,将该子任务调度至与该子任务的处理器类型对应的处理器执行。
可选地,所述分解模块402具体用于,将所述待执行任务分解成若干子任务;确定所述若干子任务间的依赖关系,根据所述依赖关系,生成子任务依赖关系图,并,生成包含所述若干子任务的子任务队列。
可选地,所述判断模块404还用于,确定用于执行该子任务的处理器类型后,针对每个子任务,根据所述子任务依赖关系图,确定该子任务所依赖的其他子任务;判断该子任务所依赖的其他子任务是否均执行完成;若是,确定该子任务为待执行状态;否则,确定该子任务不是为待执行状态。
可选地,所述调度模块406具体用于,当该子任务为待执行状态时,将该子任务作为待执行子任务添加到任务池中;
针对所述任务池中的每个待执行子任务,将该待执行子任务调度至与该待执行子任务的处理器类型对应的处理器执行。
可选地,所述调度模块406具体用于,查询与该子任务的处理器类型对应的处理器的状态;若查询到的状态为空闲状态,则将该子任务调度至与该子任务的处理器类型对应的处理器执行。
可选地,所述调度模块406还用于,执行该子任务之后,将该子任务的状态更新为已执行状态;根据更新后的该子任务的状态,从所述子任务队列中去除状态为已执行状态的子任务,得到更新后的子任务队列;根据更新后的子任务队列中包含的子任务,更新所述子任务依赖关系图;根据更新后的子任务依赖关系图继续执行更新后的子任务队列中包含的子任务。
可选地,所述判断模块404具体用于,按照设定周期,读取所述任务池中的待执行子任务;将读取的待执行子任务调度至与该读取的待执行子任务的处理器类型对应的处理器执行。
本说明书还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时可用于执行上述图1提供的基于异步运行时的CPU-GPU协同调度方法。
基于图1提供的基于异步运行时的CPU-GPU协同调度方法,本说明书实施例还提供了图5所示的电子设备的结构示意图。如图5所述,在硬件层面,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,以实现上述图1所述基于异步运行时的CPU-GPU协同调度方法。
当然,除了软件实现方式之外,本说明书并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device, PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20 以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (7)

1.一种基于异步运行时的CPU-GPU协同调度方法,其特征在于,所述方法应用于由CPU和GPU构成的异构计算系统,所述异构计算系统通过异步运行时使用异步关键字、回调函数、协程机制来定义和管理异步任务,所述异步运行时是支持异步编程的运行时环境或框架,提供异步任务的创建和启动、异步任务之间的通信和同步机制,以及处理异步任务的结果和异常功能;所述方法包括:
确定待执行任务;所述任务支持在异步编程中,根据任务的就绪状态和可用资源来动态地进行异步调度;
根据任务的性质和可并行化的程度,将所述待执行任务分解成包含若干子任务的子任务队列;
针对每个子任务,根据执行该子任务所需的计算资源类型,确定用于执行该子任务的处理器类型;其中,所述处理器类型包括CPU和GPU;
当要执行该子任务时,将该子任务调度至与该子任务的处理器类型对应的处理器执行;
其中,将所述待执行任务分解成包含若干子任务的子任务队列,具体包括:
将所述待执行任务分解成若干子任务;
确定所述若干子任务间的依赖关系,根据所述依赖关系,生成子任务依赖关系图,并,生成包含所述若干子任务的子任务队列;
确定用于执行该子任务的处理器类型后,所述方法还包括:
针对每个子任务,根据所述子任务依赖关系图,确定该子任务所依赖的其他子任务;
判断该子任务所依赖的其他子任务是否均执行完成;
若是,确定该子任务为待执行状态;
否则,确定该子任务不是为待执行状态;
当要执行该子任务时,将该子任务调度至与该子任务的处理器类型对应的处理器执行,具体包括:
当该子任务为待执行状态时,将该子任务作为待执行子任务添加到任务池中;所述任务池支持异步执行;
针对所述任务池中的每个待执行子任务,将该待执行子任务调度至与该待执行子任务的处理器类型对应的处理器执行;
将该子任务调度至与该子任务的处理器类型对应的处理器执行后,所述方法还包括:
更新待执行子任务队列,根据更新后的该子任务的状态,从所述子任务队列中去除状态为已执行状态的子任务,得到更新后的子任务队列;
根据更新后的子任务队列中包含的子任务,更新所述子任务依赖关系图;
根据更新后的子任务依赖关系图继续执行更新后的子任务队列中包含的子任务。
2.如权利要求1所述的方法,其特征在于,将该子任务调度至与该子任务的处理器类型对应的处理器执行,具体包括:
查询与该子任务的处理器类型对应的处理器的状态;
若查询到的状态为空闲状态,则将该子任务调度至与该子任务的处理器类型对应的处理器执行。
3.如权利要求1所述的方法,其特征在于,执行该子任务之后,所述方法还包括:
将该子任务的状态更新为已执行状态;
根据更新后的该子任务的状态,从所述子任务队列中去除状态为已执行状态的子任务,得到更新后的子任务队列;
根据更新后的子任务队列中包含的子任务,更新所述子任务依赖关系图;
根据更新后的子任务依赖关系图继续执行更新后的子任务队列中包含的子任务。
4.如权利要求1所述的方法,其特征在于,针对所述任务池中的每个待执行子任务,将该待执行子任务调度至与该待执行子任务的处理器类型对应的处理器执行,具体包括:
按照设定周期,读取所述任务池中的待执行子任务;
将读取的待执行子任务调度至与该读取的待执行子任务的处理器类型对应的处理器执行。
5.一种基于异步运行时的CPU-GPU协同调度装置,其特征在于,所述装置应用于由CPU和GPU构成的异构计算系统,所述异构计算系统通过异步运行时使用异步关键字、回调函数、协程机制来定义和管理异步任务,所述异步运行时是支持异步编程的运行时环境或框架,提供异步任务的创建和启动、异步任务之间的通信和同步机制,以及处理异步任务的结果和异常功能;所述装置包括:
确定模块,用于确定待执行子任务;所述任务支持在异步编程中,根据任务的就绪状态和可用资源来动态地进行异步调度;
分解模块,用于根据任务的性质和可并行化的程度,将所述待执行任务分解成包含若干子任务的子任务队列;
判断模块,用于针对每个子任务,根据执行该子任务所需的计算资源类型,确定用于执行该子任务的处理器类型;其中,所述处理器类型包括CPU和GPU;
调度模块,用于当要执行该子任务时,将该子任务调度至与该子任务的处理器类型对应的处理器执行;
所述分解模块,具体用于将所述待执行任务分解成若干子任务;确定所述若干子任务间的依赖关系,根据所述依赖关系,生成子任务依赖关系图,并,生成包含所述若干子任务的子任务队列;
所述判断模块,还用于针对每个子任务,根据所述子任务依赖关系图,确定该子任务所依赖的其他子任务;判断该子任务所依赖的其他子任务是否均执行完成;若是,确定该子任务为待执行状态;否则,确定该子任务不是为待执行状态;
所述调度模块,具体用于当该子任务为待执行状态时,将该子任务作为待执行子任务添加到任务池中;所述任务池支持异步执行;针对所述任务池中的每个待执行子任务,将该待执行子任务调度至与该待执行子任务的处理器类型对应的处理器执行;
所述调度模块,还用于更新待执行子任务队列,根据更新后的该子任务的状态,从所述子任务队列中去除状态为已执行状态的子任务,得到更新后的子任务队列;根据更新后的子任务队列中包含的子任务,更新所述子任务依赖关系图;根据更新后的子任务依赖关系图继续执行更新后的子任务队列中包含的子任务。
6.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述权利要求1-4任一项所述的方法。
7.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述权利要求1-4任一项所述的方法。
CN202311298504.1A 2023-10-09 2023-10-09 一种基于异步运行时的cpu-gpu协同调度方法及装置 Active CN117032999B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311298504.1A CN117032999B (zh) 2023-10-09 2023-10-09 一种基于异步运行时的cpu-gpu协同调度方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311298504.1A CN117032999B (zh) 2023-10-09 2023-10-09 一种基于异步运行时的cpu-gpu协同调度方法及装置

Publications (2)

Publication Number Publication Date
CN117032999A CN117032999A (zh) 2023-11-10
CN117032999B true CN117032999B (zh) 2024-01-30

Family

ID=88637578

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311298504.1A Active CN117032999B (zh) 2023-10-09 2023-10-09 一种基于异步运行时的cpu-gpu协同调度方法及装置

Country Status (1)

Country Link
CN (1) CN117032999B (zh)

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104536811A (zh) * 2014-12-26 2015-04-22 广州华多网络科技有限公司 基于hive任务的任务调度方法及装置
CN104965761A (zh) * 2015-07-21 2015-10-07 华中科技大学 一种基于gpu/cpu混合架构的流程序多粒度划分与调度方法
CN105912387A (zh) * 2015-08-25 2016-08-31 乐视网信息技术(北京)股份有限公司 数据处理作业调度方法及装置
CN106358003A (zh) * 2016-08-31 2017-01-25 华中科技大学 一种基于线程级流水线的视频分析加速方法
CN109523187A (zh) * 2018-11-27 2019-03-26 北京字节跳动网络技术有限公司 任务调度方法、装置和设备
WO2020062086A1 (zh) * 2018-09-28 2020-04-02 华为技术有限公司 选择处理器的方法和装置
CN112001351A (zh) * 2020-09-01 2020-11-27 城云科技(中国)有限公司 多个视频流处理方法、系统、计算机设备和存储介质
CN112559152A (zh) * 2020-12-21 2021-03-26 南京南瑞信息通信科技有限公司 一种基于异步式编程的分布式任务注册及调度方法和系统
CN113168652A (zh) * 2020-08-03 2021-07-23 支付宝(杭州)信息技术有限公司 区块链交易处理系统和方法
CN113454597A (zh) * 2020-09-28 2021-09-28 支付宝(杭州)信息技术有限公司 区块链交易处理系统和方法
CN114201287A (zh) * 2022-02-17 2022-03-18 湖南迈曦软件有限责任公司 一种基于cpu+gpu异构平台协同处理数据的方法
CN115391053A (zh) * 2022-10-26 2022-11-25 北京云迹科技股份有限公司 基于cpu和gpu混合计算的在线服务方法及装置

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104536811A (zh) * 2014-12-26 2015-04-22 广州华多网络科技有限公司 基于hive任务的任务调度方法及装置
CN104965761A (zh) * 2015-07-21 2015-10-07 华中科技大学 一种基于gpu/cpu混合架构的流程序多粒度划分与调度方法
CN105912387A (zh) * 2015-08-25 2016-08-31 乐视网信息技术(北京)股份有限公司 数据处理作业调度方法及装置
CN106358003A (zh) * 2016-08-31 2017-01-25 华中科技大学 一种基于线程级流水线的视频分析加速方法
WO2020062086A1 (zh) * 2018-09-28 2020-04-02 华为技术有限公司 选择处理器的方法和装置
CN109523187A (zh) * 2018-11-27 2019-03-26 北京字节跳动网络技术有限公司 任务调度方法、装置和设备
CN113168652A (zh) * 2020-08-03 2021-07-23 支付宝(杭州)信息技术有限公司 区块链交易处理系统和方法
CN112001351A (zh) * 2020-09-01 2020-11-27 城云科技(中国)有限公司 多个视频流处理方法、系统、计算机设备和存储介质
CN113454597A (zh) * 2020-09-28 2021-09-28 支付宝(杭州)信息技术有限公司 区块链交易处理系统和方法
CN112559152A (zh) * 2020-12-21 2021-03-26 南京南瑞信息通信科技有限公司 一种基于异步式编程的分布式任务注册及调度方法和系统
CN114201287A (zh) * 2022-02-17 2022-03-18 湖南迈曦软件有限责任公司 一种基于cpu+gpu异构平台协同处理数据的方法
CN115391053A (zh) * 2022-10-26 2022-11-25 北京云迹科技股份有限公司 基于cpu和gpu混合计算的在线服务方法及装置

Also Published As

Publication number Publication date
CN117032999A (zh) 2023-11-10

Similar Documents

Publication Publication Date Title
US10963300B2 (en) Accelerating dataflow signal processing applications across heterogeneous CPU/GPU systems
US20150135183A1 (en) Method and system of a hierarchical task scheduler for a multi-thread system
US20050188177A1 (en) Method and apparatus for real-time multithreading
JP2007328415A (ja) ヘテロジニアス・マルチプロセッサシステムの制御方法及びマルチグレイン並列化コンパイラ
Hummel et al. Low-overhead scheduling of nested parallelism
Pienaar et al. MDR: performance model driven runtime for heterogeneous parallel platforms
CN116185532A (zh) 一种任务执行系统、方法、存储介质及电子设备
CN116107728B (zh) 一种任务执行方法、装置、存储介质及电子设备
CN117032999B (zh) 一种基于异步运行时的cpu-gpu协同调度方法及装置
US8356300B2 (en) Multi-threaded processes for opening and saving documents
CN111459573A (zh) 一种智能合约执行环境的启动方法以及装置
Bouakaz et al. Design of safety-critical Java level 1 applications using affine abstract clocks
Steinberger On dynamic scheduling for the gpu and its applications in computer graphics and beyond
Pinho et al. Real-time fine-grained parallelism in ada
CN111124695B (zh) 一种动效管理方法、系统及设备
Kumar et al. A systematic survey of multiprocessor real-time scheduling and synchronization protocol
US20120137300A1 (en) Information Processor and Information Processing Method
CN110032433B (zh) 一种任务执行方法、装置、设备及介质
Wu et al. Model-based dynamic scheduling for multicore implementation of image processing systems
Schuele Efficient parallel execution of streaming applications on multi-core processors
CN116302564B (zh) 一种基于无状态运行时的程序分布式执行方法
Budimlic et al. Deterministic reductions in an asynchronous parallel language
Hou et al. Taskworks: A task engine for empowering asynchronous operations in hpc applications
Singh Design and Evaluation of an Embedded Real-time Micro-kernel
Cardosi et al. Specx: a C++ task-based runtime system for heterogeneous distributed architectures

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