[go: up one dir, main page]

CN117193951A - 调度装置、方法及相关设备 - Google Patents

调度装置、方法及相关设备 Download PDF

Info

Publication number
CN117193951A
CN117193951A CN202210601624.3A CN202210601624A CN117193951A CN 117193951 A CN117193951 A CN 117193951A CN 202210601624 A CN202210601624 A CN 202210601624A CN 117193951 A CN117193951 A CN 117193951A
Authority
CN
China
Prior art keywords
target
task
tasks
descriptor
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210601624.3A
Other languages
English (en)
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202210601624.3A priority Critical patent/CN117193951A/zh
Priority to EP23815120.3A priority patent/EP4495768A4/en
Priority to PCT/CN2023/096700 priority patent/WO2023231937A1/zh
Publication of CN117193951A publication Critical patent/CN117193951A/zh
Priority to US18/963,706 priority patent/US20250094218A1/en
Pending legal-status Critical Current

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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • 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/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • 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/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/486Scheduler internals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5017Task decomposition
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/543Local

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请提供一种调度装置、方法及相关设备。其中,调度装置包括与执行装置耦合的派发器;派发器包括多个第一缓存器,多个第一缓存器中的每个第一缓存器用于缓存一个任务类型的目标任务;目标任务包括线程子任务和缓存管理操作任务;缓存管理操作任务用于指示对线程子任务的输入数据或输出数据进行缓存管理操作;派发器用于:接收多个第一目标任务,并根据任务类型将多个第一目标任务缓存在多个第一缓存器中;向执行装置派发多个第二目标任务,多个第二目标任务中的任意一个第二目标任务为多个第一缓存器缓存的目标任务,多个第二目标任务分别由不同的第一缓存器缓存。采用本申请,能够提升图计算效率。

Description

调度装置、方法及相关设备
技术领域
本申请涉及图计算技术领域,尤其涉及一种调度装置、方法及相关设备。
背景技术
近年来,随着互联网的发展和大数据时代的到来,对海量大规模数据进行快速处理的需求变得更加迫切。在许多实际应用中,使用图数据结构来描述数据间的关系。例如,社交网络关系挖掘、电子商务推荐系统、交通事故对路网的影响、药物模型研究等场景中都涉及大规模图计算问题。此外,许多非图数据结构的大数据,也常常会被转换为图数据结构后再进行处理和分析。面向大规模图数据处理的研究正成为学术界和工业界广泛关注的焦点。如何提升图计算效率已成为急需解决的技术问题。
发明内容
本申请提供一种调度装置、方法及相关设备,能够提升图计算效率。
第一方面,本申请提供一种调度装置,包括派发器,所述派发器与执行装置耦合;所述派发器包括多个第一缓存器,所述多个第一缓存器中的每个第一缓存器用于缓存一个任务类型的目标任务;所述目标任务包括线程子任务和缓存管理操作任务;所述线程子任务是对节点子任务进行切分得到的,所述节点子任务是对子图任务进行切分得到的,所述子图任务是对子图进行编译得到的;所述缓存管理操作任务用于指示对线程子任务的输入数据或输出数据进行缓存管理操作;所述派发器,用于:接收多个第一目标任务,并根据任务类型将所述多个第一目标任务缓存在所述多个第一缓存器中;向所述执行装置派发多个第二目标任务,所述多个第二目标任务中的任意一个第二目标任务为所述多个第一缓存器缓存的目标任务,所述多个第二目标任务分别由不同的第一缓存器缓存。需要说明的是,本申请的调度装置与主机耦合,在调度装置中调度、派发以及执行的目标任务初始来源于主机的内存。在本申请中,用于图计算的调度装置包括派发器,派发器可以并行接收不同任务类型的目标任务,并将接收到的不同任务类型的目标任务缓存在不同的第一缓存器中,以及将不同第一缓存器缓存的不同任务类型的目标任务并行派发给执行装置。其中,派发器将不同任务类型的目标任务缓存在不同的第一缓存器中,能够解决异构任务派发时的队头阻塞问题,提升目标任务的派发效率。派发器将不同任务类型的目标任务并行派发给执行装置,能够降低目标任务的派发时延,提升目标任务的派发效率。进一步地,由于派发器将不同任务类型的目标任务并行派发给执行装置,如此执行装置也可以并行执行不同任务类型的目标任务。例如,执行装置包括不同类型的执行单元(也即异构的执行单元),派发器将不同任务类型的目标任务并行派发给不同类型的执行单元执行,从而能够提升执行单元的利用率以及目标任务的执行效率。综上,本申请提供的调度装置能够提升图计算效率。此外,本申请通过调度装置进行目标任务的调度派发,也即将调度派发目标任务的功能进行硬化,相比通过软件调度,能够减轻软件的调度负载。
在一种可能的实现方式中,所述调度装置还包括调度器,所述调度器包括多个第二缓存器;所述调度器,用于:接收多个第三目标任务,并将所述多个第三目标任务缓存在所述多个第二缓存器中;向所述派发器发送所述多个第一目标任务,所述多个第一目标任务中的任意一个第一目标任务为所述多个第二缓存器缓存的目标任务。其中,调度器接收到的目标任务为控制依赖解除或不存在控制依赖的目标任务。多个第三目标任务为控制依赖解除或不存在控制依赖的目标任务。在本实现方式中,调度装置还包括调度器,调度器可以并行接收不同的目标任务,并将接收到的目标任务缓存在多个第二缓存器中,以及将多个第二缓存器缓存的不同任务类型的目标任务并行调度给派发器。如此,调度器可以缓存控制依赖解除或不存在控制依赖的目标任务,并按照特定的调度策略将缓存的目标任务下发到派发器中,能够最大化派发器中的第一缓存器的存储利用率。
在一种可能的实现方式中,所述多个第二缓存器中的每个第二缓存器用于缓存一个类别的目标任务;其中,同一个类别的目标任务的以下其中一项相同:任务类型,优先级,执行单元。在本实现方式中,提供多种目标任务的调度策略,提升目标任务的调度灵活性。例如,调度器将不同任务类型的目标任务缓存在不同的第二缓存器中,或将不同优先级的目标任务缓存在不同的第二缓存器中,或将不同执行单元执行的目标任务缓存在不同的第二缓存器中。如此,能够解决异构任务调度到派发器时的队头阻塞问题,提升目标任务的调度效率。
在一种可能的实现方式中,所述调度装置还包括微控制单元MCU和第三缓存器;所述第三缓存器缓存有第四目标任务的描述符,所述第四目标任务为所述多个第三目标任务中的任意一个;所述MCU,用于:从所述第三缓存器中读取所述第四目标任务的描述符;所述第四目标任务的描述符包括第一目标计数,所述第一目标计数用于表示未执行完成的第五目标任务的数量,所述第四目标任务依赖于所述第五目标任务;若所述第一目标计数为零,则向所述调度器发送所述第四目标任务。应理解,当某一目标任务依赖的其他目标任务的数量为零,说明该目标任务为控制依赖解除或不存在控制依赖的目标任务。其中,调度装置与主机耦合,MCU从主机的内存中获取第四目标任务,并向调度器发送第四目标任务。在本实现方式中,调度装置通过MCU和第三缓存器配合完成目标任务的控制依赖管理,提供了更加灵活多变的控制依赖管理的控制功能,避免了调度装置适配性差的问题。在复杂多变的业务场景下,可以有效提升调度装置与应用场景的贴合度,降低成本。
在一种可能的实现方式中,所述MCU,还用于:通知所述第三缓存器获取并缓存第四目标任务的描述符。其中,第四目标任务可以为不存在控制依赖的目标任务,或者说,第四目标任务为控制依赖初始解除的目标任务。其中,调度装置与主机耦合,第三缓存器从主机的内存中获取第四目标任务的描述符。在本实现方式中,MCU通知第三缓存器预取目标任务的描述符,并且第三缓存器将预取到的目标任务的描述符缓存在本地。如此,MCU在对目标任务进行控制依赖管理时,该目标任务的描述符已经缓存在第三缓存器中了,从而降低对目标任务进行控制依赖管理的时延。
在一种可能的实现方式中,所述执行装置包括多个执行单元;所述多个第一目标任务包括所述第四目标任务,所述多个第二目标任务包括所述第四目标任务;所述派发器,具体用于:从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第一目标数量,则将所述第四目标任务切分为所述第一目标数量个第一块子任务,以及向所述多个执行单元中的至少一个执行单元派发所述第一目标数量个第一块子任务,所述第一目标数量用于表示所述第四目标任务包括的第一块子任务的数量。在本实现方式中,派发器在将目标任务切分成更细粒度的可独立派发的多个块子任务,以及将多个块子任务派发给多个执行单元执行。如此,提供更细粒度的子图任务派发和执行策略,充分挖掘子图内子任务的派发和执行并行性,实现子图内块子任务的并行执行,能够提升执行单元的利用率和减少整体执行时间。
在一种可能的实现方式中,所述派发器,还用于:在接收到来自所述至少一个执行单元的所述第一目标数量个第一块子任务执行完成的通知之后,向所述MCU发送所述第四目标任务执行完成的通知。在本实现方式中,执行单元可以向派发器返回块子任务的执行状态,在一个目标任务切分得到的所有块子任务执行完成以后,说明该目标任务执行完成,派发器向MCU发送该目标任务执行完成的通知。如此,实现通知MCU对该目标任务的后序任务进行控制依赖管理。其中,该目标任务的后序任务为依赖于该目标任务的其他目标任务。
在一种可能的实现方式中,所述调度器,还用于:从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第一目标索引号,则通知所述第三缓存器获取并缓存第一目标数据的描述符,所述第一目标索引号用于标识所述第一目标数据,所述第四目标任务的输入数据包括所述第一目标数据。其中,调度装置与主机耦合,第三缓存器从主机的内存中获取第一目标数据的描述符。在本实现方式中,调度器在将目标任务调度给派发器的过程中,例如目标任务在出第二缓存器的时候,调度器可以读取该目标任务的描述符,判断在执行该目标任务之前是否需要预取该目标任务的输入数据。如果需要预取该目标任务的输入数据,则调度器通知第三缓存器预取并缓存该目标任务的输入数据的描述符。应理解的是,派发器在生成用于指示预取该目标任务的输入数据的缓存操作管理任务时,需要用到该目标任务的输入数据的描述符。如此,在派发器需要使用该目标任务的输入数据的描述符时,该目标任务的输入数据的描述符已经缓存在第三缓存器中,从而能够提高派发器从第三缓存器中读取输入数据的描述符的命中率。
在一种可能的实现方式中,所述多个第一目标任务包括所述第四目标任务;所述派发器,还用于:从所述第三缓存器中读取所述第一目标数据的描述符;若所述第一目标数据的描述符包括第二目标索引号,则生成第一缓存管理操作任务,以及向所述执行装置派发所述第一缓存管理操作任务,所述第二目标索引号用于标识所述第四目标任务,所述第一缓存管理操作任务用于指示预取所述第一目标数据。在本实现方式中,派发器可以生成用于指示预取目标任务的输入数据的缓存管理操作任务,并将该缓存管理操作任务派发给执行装置执行,以预取该目标任务的输入数据。如此,在执行该目标任务之前,及时预取该目标任务的输入数据,并缓存在本地。例如,执行装置包括第四缓存器,执行装置将预取的目标任务的输入数据缓存在第四缓存器中。在执行该目标任务时,调度装置无需去外部获取该目标任务的输入数据,而直接在本地缓存获取该目标任务的输入数据,能够有效提升获取该目标任务的输入数据的命中率,减少获取该目标任务的输入数据的访问带宽和时延。需要说明的是,目标任务的输入数据包括共享型输入数据和独享型输入数据。其中,共享型输入数据为多个目标任务共享的输入数据,而独享型输入数据仅为特定的目标任务专属的输入数据。对于共享型输入数据,只需要预取一次,无需每次执行目标任务之前都进行预取,从而节省预取输入数据的访问带宽和降低预取输入数据的时延。例如,在大规模图计算任务中,多个子节点任务之间的输入数据具有重复性,即多个子节点任务使用同一套公共配置参数,如权重等。因此可以将目标任务的输入数据划分为共享型输入数据和独享型输入数据。对于共享型数据,只需要在执行第一个输入该共享型数据的目标任务时预取一次,避免重复预取,造成带宽浪费和增加时延。本申请提供的输入数据预取机制尤其适用于访问主机的内存频繁的数据型应用场景,通过及时的预取,避免了有效数据缓存丢失。
在一种可能的实现方式中,所述多个第二目标任务包括所述第四目标任务;所述第一目标数据的描述符还包括第二目标计数,所述第二目标计数用于表示未执行完成的第六目标任务的数量,所述第六目标任务的输入数据包括所述第一目标数据,所述第六目标任务包括所述第四目标任务;所述MCU,还用于:在接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通知所述第三缓存器将所述第二目标计数减一。在本实现方式中,第一目标数据为共享型输入数据,其为第六目标任务这一类目标任务是输入数据。第六目标任务是数量可以为一个或多个。故第一目标数据只需要预取一次,无需每次执行目标任务之前都进行预取。如此,可以节省预取第一目标数据的访问带宽和降低预取第一目标数据的时延。并且,MCU在接收到任意一个第六目标任务执行完成的通知以后,例如MCU在接收到第四目标任务执行完成的通知以后,对第一目标数据进行数据生命周期管理。如此,便于在第一目标数据不需要被使用时,及时释放第一目标数据,提升调度装置内本地缓存的命中率和有效利用率。
在一种可能的实现方式中,所述MCU,还用于:在所述第二目标计数减为零的情况下,向所述调度器发送第二缓存管理操作任务,所述第二缓存管理操作任务用于指示无效所述第一目标数据。在本实现方式中,在第一目标数据不需要被使用时,及时无效第一目标数据。如此,及时释放缓存中使用过且不再使用的数据,从而不会造成无效数据长时间占用缓存空间,导致缓存命中率和有效利用率降低的问题。
在一种可能的实现方式中,所述多个第一目标任务包括所述第四目标任务;所述派发器,还用于:从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第三目标索引号,则通知所述第三缓存器获取并缓存第二目标数据的描述符,所述第三目标索引号用于标识所述第二目标数据,所述第二目标数据包括所述第四目标任务的输出数据的部分或全部。其中,调度装置与主机耦合,第三缓存器从主机的内存中获取第二目标数据的描述符。在本实现方式中,派发器在将目标任务派发给执行装置的过程中,例如目标任务在出第一缓存器的时候,派发器可以读取该目标任务的描述符,判断该目标任务是否存在需要进行数据生命周期管理的输出数据。如果存在需要进行数据生命周期管理的输出数据,则派发器通知第三缓存器预取并缓存该需要进行数据生命周期管理的输出数据的描述符。应理解,MCU对该目标任务的输出数据进行数据生命周期管理时,需要用到该目标任务的输出数据的描述符。如此,在MCU需要使用该目标任务的输出数据的描述符时,该目标任务的输出数据的描述符已经缓存在第三缓存器中,从而能够提高MCU从第三缓存器中读取输出数据的描述符的命中率。
在一种可能的实现方式中,所述多个第二目标任务包括所述第四目标任务;所述第二目标数据的描述符包括第三目标计数,所述第三目标计数用于表示未执行完成的第七目标任务的数量,所述第二目标数据包括所述第七目标任务的输出数据的部分或全部,所述第七目标任务包括所述第四目标任务;所述MCU,还用于:在接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通知所述第三缓存器将所述第三目标计数减一。在本实现方式中,第二目标数据由第七目标任务这一类目标任务的输出数据的部分或全部组成。第七目标任务是数量可以为一个或多个。如此,MCU在接收到任意一个第七目标任务执行完成的通知以后,例如MCU在接收到第四目标任务执行完成的通知以后,对第二目标数据进行数据生命周期管理。如此,便于在第二目标数据生成时,及时将第二目标数据回写到主机的内存,释放调度装置内本地缓存空间,提升调度装置内本地缓存的有效利用率。
在一种可能的实现方式中,所述MCU,还用于:在所述第三目标计数减为零的情况下,向所述调度器发送第三缓存管理操作任务,所述第三缓存管理操作任务用于指示将所述第二目标数据写入主机,所述调度装置与所述主机耦合。在本实现方式中,在第二目标数据生成时,及时回写第二目标数据。如此,将目标任务的输出数据回写到主机的内存,释放调度装置内本地缓存空间,从而不会造成目标任务的输出数据长时间占用缓存空间,导致缓存命中率和有效利用率降低的问题。
在一种可能的实现方式中,所述多个第一目标任务包括所述第四目标任务,所述多个第二目标任务包括所述第四目标任务;所述派发器,还用于:从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第四目标索引号,则通知所述第三缓存器获取并缓存第八目标任务的描述符,所述第四索引号用于标识所述第八目标任务,所述第八目标任务依赖于所述第四目标任务。其中,调度装置与主机耦合,第三缓存器从主机的内存中获取第八目标任务的描述符。其中,第八目标任务依赖于第四目标任务,第八目标任务为第四目标任务的后序任务。在本实现方式中,派发器在将目标任务派发给执行装置的过程中,例如目标任务在出第一缓存器的时候,派发器通知第三缓存器预取并缓存该目标任务的后序任务的描述符。应理解,MCU对该目标任务的后序任务进行控制依赖管理时,需要用到该目标任务的后序任务的描述符。如此,在MCU需要使用该目标任务的后序任务的描述符时,该目标任务的后序任务的描述符已经缓存在第三缓存器中,从而能够提高MCU从第三缓存器中读取后序任务的描述符的命中率。
在一种可能的实现方式中,所述第八目标任务的描述符包括第四目标计数,所述第四目标计数用于表示未执行完成的第九目标任务的数量,所述第八目标任务依赖于所述第九目标任务,所述第九目标任务包括所述第四目标任务;所述MCU,还用于:在接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通知所述第三缓存器将所述第四目标计数减一。其中,第八目标任务依赖于第九目标任务这一类目标任务,第八目标任务为第九目标任务这一类目标任务的后序任务,第四目标任务为第九目标任务这一类目标任务中的其中一个。在本实现方式中,在第四目标任务执行完成以后,MCU会对第八目标任务进行控制依赖管理。与此同时,由于派发器是不断向执行装置派发目标任务的,故在第四目标任务执行完成后,派发器紧接着派发另一个目标任务给原来执行第四目标任务的执行单元执行。如此,能够保证某一目标任务的依赖关系解除与其他目标任务的执行并行进行,将目标任务的依赖关系解除时延掩盖在其他目标任务执行的背后,提升整体性能。示例性地,在大规模图计算任务中,子图任务间常存在复杂的依赖关系,限制了子图任务执行的并行度,通过本申请能够有效掩盖任务的依赖关系解除时延,降低整体调度时延并提升执行单元的利用率。例如,在目标任务A依赖于目标任务B,目标任务C依赖于目标任务D的场景下。当目标任务A执行完成后,可以并行执行目标任务C和解除目标任务B的依赖关系,将目标任务B的依赖关系解除时间完全隐藏在目标任务C的执行时间中。当目标任务C执行完后,则可无缝继续执行目标任务B和解除目标任务D的依赖关系。
在一种可能的实现方式中,所述MCU,还用于:在所述第四目标计数减为零的情况下,向所述调度器发送所述第八目标任务。其中,调度装置与主机耦合,MCU从主机的内存中获取第八目标任务,以及向调度器发送第八目标任务。在本实现方式中,第八目标任务依赖于第四目标任务,当第四目标任务执行完成后且第八目标任务的依赖关系解除之后,即可将第八目标任务推送到调度器中调度,进而调度到派发器中派发,再派发到执行装置中执行。如此,构成子图内任务的环路反复执行,直至子图执行结束。
第二方面,本申请提供一种调度方法,应用于调度装置,所述调度装置包括派发器,所述派发器与执行装置耦合;所述派发器包括多个第一缓存器,所述多个第一缓存器中的每个第一缓存器用于缓存一个任务类型的目标任务;所述目标任务包括线程子任务和缓存管理操作任务;所述线程子任务是对节点子任务进行切分得到的,所述节点子任务是对子图任务进行切分得到的,所述子图任务是对子图进行编译得到的;所述缓存管理操作任务用于指示对线程子任务的输入数据或输出数据进行缓存管理操作;所述方法包括:通过所述派发器接收多个第一目标任务,并根据任务类型将所述多个第一目标任务缓存在所述多个第一缓存器中;通过所述派发器向所述执行装置派发多个第二目标任务,所述多个第二目标任务中的任意一个第二目标任务为所述多个第一缓存器缓存的目标任务,所述多个第二目标任务分别由不同的第一缓存器缓存。
在一种可能的实现方式中,所述调度装置还包括调度器,所述调度器包括多个第二缓存器;所述方法还包括:通过所述调度器接收多个第三目标任务,并将所述多个第三目标任务缓存在所述多个第二缓存器中;通过所述调度器向所述派发器发送所述多个第一目标任务,所述多个第一目标任务中的任意一个第一目标任务为所述多个第二缓存器缓存的目标任务。
在一种可能的实现方式中,所述多个第二缓存器中的每个第二缓存器用于缓存一个类别的目标任务;其中,同一个类别的目标任务的以下其中一项相同:任务类型,优先级,执行单元。
在一种可能的实现方式中,所述调度装置还包括微控制单元MCU和第三缓存器;所述第三缓存器缓存有第四目标任务的描述符,所述第四目标任务为所述多个第三目标任务中的任意一个;所述方法还包括:通过所述MCU从所述第三缓存器中读取所述第四目标任务的描述符;所述第四目标任务的描述符包括第一目标计数,所述第一目标计数用于表示未执行完成的第五目标任务的数量,所述第四目标任务依赖于所述第五目标任务;若所述第一目标计数为零,则通过所述MCU向所述调度器发送所述第四目标任务。
在一种可能的实现方式中,所述方法还包括:通过所述MCU通知所述第三缓存器获取并缓存第四目标任务的描述符。
在一种可能的实现方式中,所述执行装置包括多个执行单元;所述多个第一目标任务包括所述第四目标任务,所述多个第二目标任务包括所述第四目标任务;所述向所述执行装置派发多个第二目标任务,包括:从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第一目标数量,则将所述第四目标任务切分为所述第一目标数量个第一块子任务, 以及向所述多个执行单元中的至少一个执行单元派发所述第一目标数量个第一块子任务,所述第一目标数量用于表示所述第四目标任务包括的第一块子任务的数量。
在一种可能的实现方式中,所述方法还包括:在通过所述派发器接收到来自所述至少一个执行单元的所述第一目标数量个第一块子任务执行完成的通知之后,通过所述派发器向所述MCU发送所述第四目标任务执行完成的通知。
在一种可能的实现方式中,所述方法还包括:通过所述调度器从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第一目标索引号,则通过所述调度器通知所述第三缓存器获取并缓存第一目标数据的描述符,所述第一目标索引号用于标识所述第一目标数据,所述第四目标任务的输入数据包括所述第一目标数据。
在一种可能的实现方式中,所述多个第一目标任务包括所述第四目标任务;所述方法还包括:通过所述派发器从所述第三缓存器中读取所述第一目标数据的描述符;若所述第一目标数据的描述符包括第二目标索引号,则通过所述派发器生成第一缓存管理操作任务,以及向所述执行装置派发所述第一缓存管理操作任务,所述第二目标索引号用于标识所述第四目标任务,所述第一缓存管理操作任务用于指示预取所述第一目标数据。
在一种可能的实现方式中,所述多个第二目标任务包括所述第四目标任务;所述第一目标数据的描述符还包括第二目标计数,所述第二目标计数用于表示未执行完成的第六目标任务的数量,所述第六目标任务的输入数据包括所述第一目标数据,所述第六目标任务包括所述第四目标任务;所述方法还包括:在通过所述MCU接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通过所述MCU通知所述第三缓存器将所述第二目标计数减一。
在一种可能的实现方式中,所述方法还包括:在所述第二目标计数减为零的情况下,通过所述MCU向所述调度器发送第二缓存管理操作任务,所述第二缓存管理操作任务用于指示无效所述第一目标数据。
在一种可能的实现方式中,所述多个第一目标任务包括所述第四目标任务;所述方法还包括:通过所述派发器从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第三目标索引号,则通过所述派发器通知所述第三缓存器获取并缓存第二目标数据的描述符,所述第三目标索引号用于标识所述第二目标数据,所述第二目标数据包括所述第四目标任务的输出数据的部分或全部。
在一种可能的实现方式中,所述多个第二目标任务包括所述第四目标任务;所述第二目标数据的描述符包括第三目标计数,所述第三目标计数用于表示未执行完成的第七目标任务的数量,所述第二目标数据包括所述第七目标任务的输出数据的部分或全部,所述第七目标任务包括所述第四目标任务;所述方法还包括:在通过所述MCU接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通过所述MCU通知所述第三缓存器将所述第三目标计数减一。
在一种可能的实现方式中,所述方法还包括:在所述第三目标计数减为零的情况下,通过所述MCU向所述调度器发送第三缓存管理操作任务,所述第三缓存管理操作任务用于指示将所述第二目标数据写入主机,所述调度装置与所述主机耦合。
在一种可能的实现方式中,所述多个第一目标任务包括所述第四目标任务,所述多个第二目标任务包括所述第四目标任务;所述方法还包括:通过所述派发器从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第四目标索引号,则通过所述派发器通知所述第三缓存器获取并缓存第八目标任务的描述符,所述第四索引号用于标识所述第八目标任务,所述第八目标任务依赖于所述第四目标任务。
在一种可能的实现方式中,所述第八目标任务的描述符包括第四目标计数,所述第四目标计数用于表示未执行完成的第九目标任务的数量,所述第八目标任务依赖于所述第九目标任务,所述第九目标任务包括所述第四目标任务;所述方法还包括:在通过所述MCU接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通过所述MCU通知所述第三缓存器将所述第四目标计数减一。
在一种可能的实现方式中,所述方法还包括:在所述第四目标计数减为零的情况下,通过所述MCU向所述调度器发送所述第八目标任务。
需要说明的是,第二方面的有益效果可以参照第一方面的描述,此处不再重复描述。
第三方面,本申请提供一种电子设备,该电子设备具有实现上述第二方面中任意一种调度方法的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
第四方面,本申请提供一种电子设备,该电子设备包括上述第一方面中任意一种调度装置。该电子设备还可以包括存储器,存储器用于与该调度装置耦合,其保存该调度装置中处理器的必要的程序指令和数据。该电子设备还可以包括通信接口,用于该电子设备与其它设备或通信网络通信。
第五方面,本申请提供一种计算机存储介质,所述计算机存储介质存储有计算机程序,该计算机程序被调度装置执行时,使得该调度装置可以执行上述第二方面中任意一项所述的调度方法流程。
第六方面,本申请提供一种计算机程序,该计算机程序包括指令,当该计算机程序被调度装置执行时,使得该调度装置可以执行上述第二方面中任意一项所述的调度方法流程。
第七方面,本申请提供一种芯片系统,该芯片系统包括上述第一方面中任意一种调度装置。在一种可能的实现方式中,所述芯片系统还包括存储器,所述存储器,用于保存所述调度装置中处理器的必要或相关的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其它分立器件。
附图说明
图1是本申请提供的一种计算图的编译和执行系统的软件架构示意图。
图2是本申请提供的一种计算图的编译和执行系统的硬件架构示意图。
图3是图2所示的系统进行计算图的编译和执行的步骤流程图。
图4是本申请提供的一个TST或CMO任务的调度和派发流程示意图。
图5是本申请提供的一种调度方法的流程示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
在本说明书中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本说明书所描述的实施例可以与其它实施例相结合。
首先,对本申请涉及的相关知识进行介绍,以便本领域技术人员理解本申请。
随着移动互联网技术、5G网络、传感器、物联网技术的发展,世界上每时每刻都在产生大量的数据。很多领域抽象出来的图规模呈指数级增长。图中边的数量可达到亿万级别,再加上自然图往往表现出非常倾斜的幂律分布(power-law)特性,这给图计算带来了巨大挑战。受限于内存资源和图的规模,在图计算领域中经常面对无法将整个图存储在内存中的情况。如何在有限的内存空间中完成图相关的算法也是图计算研究的重点之一。在图计算中如何将一个大规模的图分割成若干子图更是件非常有考究的工作。
在大数据应用场景下,数据价值会随着时间的流逝而衰减,因此期望能够尽快对最新的数据做出分析并给出结果,并实时展示。在大规模图计算任务中,由于存在图中顶点和边的数量巨大,且图中任务和数据存在复杂的依赖关系等特点,这也成为大规模图计算任务可实时计算的一个难题。
为适应图数据规模巨大、动态变化等特点,多核异构系统由于具有可将不同类型的计算任务分配到不同类型的处理器核上并行处理,为不同需求的应用提供更加灵活、高效的处理机制的特点,从而被广泛用于实现大规模图数据的高效分析计算中。在多核异构系统集成了丰富的异构计算和通信资源的背景下,如何降低CPU的调度负载,并设计合理的调度策略,将不同类型的计算/通信任务并行分配给不同的计算/通信资源,以减少调度时延,提升各计算单元的资源利用率,最终提升计算任务的整体效率和实时性,是从业人员需要面对的一大难题。
此外,对于超大计算图来说,为了提高计算的并行度,根据依赖关系和执行代价等综合策略将大规模数据流图切分成多个可并行执行的子图也是一种常见的处理方法。但子图内部的任务之间常常存在依赖关系,例如语音识别中的上下文依赖,视频监控的前后帧依赖等。如何在图计算系统中最小化计算执行时间和图内依赖关系解除时间,达到提升调度时延的目的,是从业人员需要面对的另一大难题。
而在图规模庞大但内存空间有限的现实限制下,如何提升系统内存的有效利用率,降低内存访问时延以及减少内存带宽,从而提升大规模图计算任务的性能,对从业人员来说也是一个巨大的挑战。
因此,本申请需要解决的技术问题为:大规模图计算任务中,由于计算规模大、图内任务存在依赖关系、内存空间有限、任务类型多等原因导致的任务计算时延大、计算效率低的问题。例如可以包括:
(1)当计算图内含有多种任务类型的计算/通信任务时,需要同时调度不同的异构资源执行。如果不能合理地卸载CPU的调度事务,并通过设计合理的调度策略将不同任务类型的计算/通信任务分配给不同的计算/通信资源,就会造成异构任务间互相阻塞、执行单元利用率低、调度时延增大等问题。
(2)当计算图内的任务间存在依赖关系时,如果无法解决任务间的依赖关系解除与计算执行异步的问题,则会因计算执行时间无法掩盖任务间的依赖关系解除的时间,而导致整体计算时延增大。
(3)在大规模图计算过程中,会产生和依赖大量的中间数据,如果不能高效地管理数据,充分利用有限的内存空间,提高系统缓存的利用率,则会造成系统的内存访问开销增大,最终导致计算性能变差。
鉴于上述存在的技术问题,本申请提供一种调度装置、方法及相关设备。下面具体介绍。
请参阅图1,图1是本申请提供的一种计算图的编译和执行系统的软件架构示意图。该系统包括但不限于图编译层、子图调度层和执行层,下面分别介绍。
一、图编译层
图编译层接收来自编程前端框架的计算图,并对该计算图进行编译,得到该计算图的编译数据。其中,该计算图的编译数据用于执行该计算图,可以包括执行该计算图所需的所有数据。
图编译层首先对计算图进行子图切分,从而将计算图切分成多个子图。图编译层再针对每个子图创建一个子图任务(SubGraph Task,SGT)。其中,每个SGT包括一个或多个节点子任务(Node SubTask,NST),NST可以为计算或通信等任务。进一步地,图编译层可以将每个NST切分成一个或多个线程子任务(Thread SubTask,TST),TST为可被独立调度的比NST更细粒度的任务。并且,图编译层可以构建子图内的TST之间的控制依赖关系,以及根据TST的输入数据、输出数据构建TST和数据之间的数据依赖关系。
图编译层可以针对TST构造约定格式的任务的描述符(SQE)。TST的描述符即对TST的说明,用于描述TST的控制依赖关系、TST的数据依赖关系、TST的执行代码指针及TST执行时的输入数据的内存地址等信息。针对TST所消费或所生产的数据,也即TST的输入数据或输出数据,图编译层可以构建数据(Ticket)的描述符进行描述。数据的描述符用于追踪数据的状态及其生产者TST或消费者TST的执行状态等信息。数据的状态是指数据是否已经准备好被使用,或者数据是否已经被使用完等状态。数据的生产者TST是指输出数据包括该数据的全部或部分的TST。数据的消费者TST是指输入数据包括该数据的TST。
在一种可能的实现方式中,TST的描述符如表1所示。
表1TST的描述符示例
successor_list:后序任务的索引号列表,记录该任务的所有后序任务的索引号。某一任务的索引号用于标识该任务。某一任务的后序任务是指在该任务之后执行的其他任务,也即依赖于该任务的其他任务。在TST的描述符中,successor_list记录该TST的所有后序TST的索引号(TST Context ID),TST的索引号可以用于标识该TST。某一TST的后序TST是指在该TST之后执行的其他TST,也即依赖于该TST的其他TST。为了便于描述,本申请将后序任务的索引号称为第一索引号,以及将后序任务的索引号列表称为第一索引号列表。
pred_cnt:未完成前序任务计数,记录未执行完成的前序任务的数量。某一任务的前序任务是指在该任务之前执行的其他任务,也即该任务依赖的其他任务。在TST的描述符中,pred_cnt记录该TST的未执行完成的前序TST的数量。前序TST指在该TST之前执行的其他TST,也即该TST依赖的其他TST。当未完成前序任务计数为零时,也即当该TST的前序TST计数为零时,表示该TST的控制依赖解除或者不存在控制依赖,该TST为就绪的TST,可以被调度执行。为了便于描述,本申请将未完成前序任务计数称为第一计数。
pred_cnt_init:初始前序任务计数,记录总共的前序任务的数量。在TST的描述符中,pred_cnt_init记录该TST总共的前序TST的数量。当初始前序任务计数为零时,也即当该TST总共的前序TST的数量为零时,表示该TST的初始不存在控制依赖,该TST为初始就绪的TST,可以直接被调度执行。为了便于描述,本申请将初始前序任务计数称为第一计数的初始值。
itkt_list:该TST需要进行数据生命周期管理的输入数据的索引号(TicketContext ID)列表,记录该TST需要进行数据生命周期管理的输入数据的索引号。数据的索引号可以用于标识该数据。需要说明的是,itkt_list可仅包含该TST的部分输入数据,而非必须该TST的全部输入数据。其中,该TST的部分输入数据为该TST的全部输入数据中需要进行数据生命周期管理的部分。为了便于描述,本申请将TST需要进行数据生命周期管理的输入数据称为TST的目标输入数据,以及将TST需要进行数据生命周期管理的输入数据的索引号称为第二索引号,以及将TST需要进行数据生命周期管理的输入数据的索引号列表称为第二索引号列表。
otkt_list:该TST需要进行数据生命周期管理的输出数据的索引号列表,记录该TST需要进行数据生命周期管理的输出数据的索引号。需要说明的是,otkt_list可仅包含该TST的部分输出数据,而非必须该TST的全部输出数据。其中,该TST的部分输出数据为该TST的全部输出数据中需要进行数据生命周期管理的部分。为了便于描述,本申请将TST需要进行数据生命周期管理的输出数据称为目标输出数据,以及将TST需要进行数据生命周期管理的输入数据的索引号称为第三索引号,以及将TST需要进行数据生命周期管理的输出数据的索引号列表称为第三索引号列表。
其它任务相关描述字段:主要描述任务的类型、任务的输入数据的内存地址、任务的大小;指令的地址;预取输入数据的配置信息等。在TST的描述符中,其它任务相关描述字段可以包括TST的类型、TST的输入数据的内存地址、TST的大小、TST的执行代码指针、TST的执行单元、TST的优先级等。
在一种可能的实现方式中,数据的描述符如表2所示。
表2数据的描述符示例
cons_cnt:该数据的未完成消费者TST计数,记录未执行完成的该数据的消费者TST的数量。该数据的消费者TST的输入数据包括该数据。为了便于描述,本申请将数据的未完成消费者TST计数称为第二计数。
prod_cnt:该数据的未完成生产者TST计数,记录未执行完成的该数据的生产者TST的数量。该数据的生产者TST的输出数据的部分或全部用于构成该数据,或者说,该数据包括该数据的生产者TST的输出数据的部分或全部。为了便于描述,本申请将数据的未完成生产者TST计数称为第三计数。
cons_cnt_init:该数据的初始消费者TST计数,记录该数据总共的消费者TST的数量。
为了便于描述,本申请将数据的初始消费者TST计数称为第二计数的初始值。
prod_cnt_init:该数据的初始生产者TST计数,记录该数据总共的生产者TST的数量。
为了便于描述,本申请将数据的初始生产者TST计数称为第三计数的初始值。
cons_list:该数据的消费者TST的索引号列表,记录该数据的消费者TST的索引号。
为了便于描述,本申请将数据的消费者TST的索引号称为第四索引号,以及将数据的消费者TST的索引号列表称为第四索引号列表。
其它数据相关描述字段:主要描述数据地址、数据大小等等。需要说明的是,数据的描述符只是对数据的一些信息的描述,通过数据的描述符中的数据地址域段,指向真正的数据内容。
需要说明的是,TST可以被切分成一个或多个块子任务(Block SubTask,BST)。BST为比TST更细粒度的任务,BST为在执行单元上实际执行的任务的最小单元。由同一个TST切分得到的BST可以在一个或多个执行单元上执行。
在一种可能的实现方式中,TST的描述符还可以包括BLK DIM域段,BLK DIM域段用于表示该TST包括的BST的数量。
在一种可能的实现方式中,图编译层在编译得到TST的过程中,还可以针对TST生成缓存管理操作(Cache Management Operation,CMO)任务,该CMO任务用于指示对该TST的输入数据或输出数据进行缓存管理操作。该CMO任务用于指示以下情况:(1)对该TST的输入数据进行预取操作;(2)对该TST的输出数据进行回写操作;(3)对该TST的输入数据或输出数据进行无效操作;(4)对该TST的输入数据或输出数据进行刷新操作。其中,对于一个计算图编译得到的所有TST,仅针对输入数据或输出数据需要进行数据生命周期管理的TST生成CMO任务,而非针对所有TST都分别生成CMO任务。
应理解的是,CMO任务的描述符可以参照TST的描述符,此处不再重复描述。此外,CMO任务描述符也可以包括BLK DIM域段,BLK DIM域段用于表示该CMO任务包括的BST的数量。为了便于描述,本申请将TST或CMO任务包括的BST的数量称为目标数量。
为了便于描述,本申请将TST或CMO任务统称为目标任务。
二、子图调度层
图编译层编译得到的TST或CMO任务,在子图调度层中进行依赖关系管理和具体调度。子图调度层包括依赖管理模块、调度模块和派发模块,下面分别介绍。
(1)依赖管理模块
依赖管理模块控制计算任务和相关数据的依赖关系,依赖管理模块实现的功能至少包括以下两种:
第一种,控制依赖管理(Control Dependency Management,CDM):管理TST和TST之间、TST和CMO任务之间的直接依赖关系。
第二种,数据生命周期管理(Data Life Cycle Management,DLCM):通过TST和数据之间的生产者消费者模型,管理数据生命周期,并执行相应的资源操作,例如缓存管理操作。
(2)调度模块
调度模块从依赖管理模块接收就绪的TST或CMO任务,并将就绪的TST或就绪的CMO任务按既定调度策略调度给派发模块,从而实现就绪的TST或就绪的CMO任务的调度管理。其中,就绪的CMO任务是指控制依赖解除或者不存在控制依赖的CMO任务。
在一种可能的实现方式中,调度模块通过就绪队列(Ready Queue)实现对就绪的TST或就绪的CMO任务的调度。具体地,调度模块可以通过就绪队列来缓存就绪的TST或就绪的CMO任务,并按照特定的调度模式将就绪队列中就绪的TST或就绪的CMO任务下发到派发模块中进行派发。
其中,调度模块中实现有多个就绪队列,多个就绪队列可以缓存就绪的目标任务。调度模块可以将接收到的目标任务划分为不同类别。如前所述,目标任务的描述符包括:目标任务的任务类型、目标任务的优先级、目标任务的执行单元。调度模块根据目标任务的任务类型、目标任务的优先级、目标任务的执行单元,将接收到的目标任务划分为不同的类别。并且,调度模块可以将不同类别的目标任务放入不同的就绪队列中。例如,调度模块将不同任务类型的目标任务缓存在不同的就绪队列中,或将不同优先级的目标任务缓存在不同的就绪队列中,或将不同执行单元执行的目标任务缓存在不同的就绪队列中。为了便于描述,本申请将任务类型、优先级、执行单元等称为任务属性。
其中,根据任务类型可以将目标任务分为多个层级,具体如下:
(1)第一层级划分,目标任务包括TST和CMO任务;
(2)第二层级划分,TST包括计算、通信等类型的TST,以及CMO任务包括预取、无效、回写、刷新等类型的CMO任务;
(3)第三层级划分,计算类型的TST包括加、减、乘、除等类型的TST。
应理解的是,在将目标任务按照任务类型划分类别时,具体划分到上述哪一层级根据实际需求确定,本申请对此不做具体限定。
示例性地,可以将不同任务类型的目标任务放入不同的就绪队列中。如此,不同任务类型的目标任务可以并行调度,避免不同任务类型的目标任务的队头阻塞问题。例如,可以将不同TST和CMO任务分别放入不同的就绪队列中。如此,TST和CMO任务可以并行调度,避免TST和CMO任务的队头阻塞问题。
示例性地,可以将不同执行单元执行的目标任务放入不同的就绪队列中。如此,不同执行单元执行的目标任务可以并行调度,避免不同执行单元执行的目标任务的队头阻塞问题。
示例性地,可以将不同优先级的目标任务放入不同的就绪队列中。如此,可以实现不同任务类型的目标任务的优先级调度。
示例性地,可以将同一任务类型的目标任务划分成多个优先级,并将同一任务类型的不同优先级的目标任务放入不同的就绪队列中。如此,可以实现同一任务类型的目标任务的优先级调度。
示例性地,多个就绪队列支持独享或共享缓存空间,每个就绪队列的深度不做限制,当总的任务数量超过缓存空间深度的时候进行反压,本申请支持缓存空间深度可灵活配置。
示例性地,每个就绪队列支持多种调度模式,包括但不限于先进先出、广度优先、深度优先等。
应理解的是,调度模块通过就绪队列实现对就绪的目标任务的调度只是本申请的其中一种实现方式,实际支持的调度方式不仅限于此。
需要说明的是,调度模块还可以对不同类别对应的就绪队列进行基于优先级的调度,以将就绪队列中的TST或CMO任务作为待执行的TST或待执行的CMO任务调度给派发模块。
(3)派发模块
派发模块从调度模块接收待执行的TST或待执行的CMO任务,并根据特定的策略分配执行单元。派发模块可以将待执行的TST或待执行的CMO任务中的BST派发给不同的执行单元执行,接收到所有的BST都执行完成之后,确定该TST或CMO任务执行完成。
在一种可能的实现方式中,派发模块可以通过派发队列(Dispatch Queue)实现对待执行的TST或待执行的CMO任务的派发。
其中,派发模块中实现有多个派发队列,多个派发队列可以缓存待执行的TST和待执行的CMO任务。派发模块可以根据任务类型将接收到的TST或待执行的CMO任务放入不同的派发队列中。派发模块还可以从派发队列中读取待执行的TST或待执行的CMO任务,并根据任务类型向对应的执行单元派发。
其中,每个派发队列支持先进先出的调度模式。
示例性地,每种类型的TST或CMO任务都有自己独立的一个派发队列,深度可配,防止异构任务队头阻塞。
需要说明的是,派发模块通过派发队列实现对待执行的TST或待执行的CMO任务的派发只是本申请的其中一种实现方式,实际支持的派发方式不仅限于此。
在一种可能的实现方式中,派发模块在派发TST的过程中,读取该TST的描述符,并读取到的该TST的描述符将该TST切分为一个或多个BST。具体地,派发模块读取该TST的描述符中的目标数量,并根据读取到的该目标数量将该TST切分为一个或多个BST。派发模块将该一个或多个BST派发给相应的执行单元来执行。当该TST中的所有BST都执行完成之后,派发模块通过完成队列返回完成事件(CQE)通知依赖管理模块进行完成事件处理。同理,派发模块在派发CMO任务的过程中,读取该CMO任务的描述符,并读取到的该CMO任务的描述符将该CMO任务切分为一个或多个BST。具体地,派发模块读取该CMO任务的描述符中的目标数量,并根据读取到的该目标数量将该CMO任务切分为一个或多个BST。派发模块将该一个或多个BST派发给相应的执行单元来执行。当该CMO任务中的所有BST都执行完成之后,派发模块通过完成队列返回完成事件(CQE)通知依赖管理模块进行完成事件处理。
其中,派发模块可以根据该TST或CMO任务的描述符中的目标数量,将该TST或CMO任务包括的所有BST派发给目标数量个执行单元同时并行执行。或者,派发模块可以根据执行单元的空闲状态分配执行单元,从而分批次派发BST直到该TST或CMO任务所包含的所有BST都执行完成。
在一种可能的实现方式中,派发模块可以生成预取TST的目标输入数据的CMO任务。当TST的描述符中包含预取目标输入数据的配置信息时,派发模块可以针对该TST生成预取目标输入数据的CMO任务,并将该预取目标输入数据的CMO任务派发给对应的执行单元执行。提前对TST的目标输入数据进行预取,降低执行过程中数据访问延迟。目标输入数据预取的提前量支持软件可配置,且支持取消机制。需要说明的是,派发模块生成的预取目标输入数据的CMO任务由派发模块管理,其完成事件不发送给依赖管理模块。
三、执行层
执行层包括不同类型的执行单元,也即执行层包括异构的执行单元。不同类型的执行单元负责执行对应任务类型的TST或CMO任务。每个执行单元在执行完接收到的任务之后,向派发模块返回任务执行结果。每个执行单元每次执行的任务粒度为BST。
请参阅图2,图2是本申请提供的一种计算图的编译和执行系统的硬件架构示意图。该系统包括主机(Host)和调度装置。该主机可以实现图1所示的软件架构的图编译层的功能,该调度装置可以实现图1所示的软件架构的子图调度层的功能,具体可参见图1所示的实施例的描述。该调度装置包括但不限于:调度器、派发器、微控制单元(Microcontroller Unit,MCU)和第三缓存器。
第三缓存器可以为高速缓存(Cache)。第三缓存器用于缓存TST的描述符、CMO任务的描述符和数据的描述符(包括TST的目标输入数据的描述符和TST的目标输出数据的描述符),减小任务的访问延迟。其中,第三缓存器除了支持普通读写操作外,还支持对特定域段(例如表1所示的TST的描述符中的域段、表2所示的数据的描述符中的域段)的减一操作、重置操作等原子操作,用以加速调度装置对描述符的操作,减小访问延迟。
MCU可以实现子图调度层中的依赖管理模块的功能。具体地,MCU控制整个子图任务(SGT)的执行,包括但不限于子图内依赖管理、条件跳转以及LOOP循环等控制,并将就绪的TST或就绪的CMO任务发送给调度器。
在一种可能的实现方式中,MCU进行控制依赖管理的过程包括:(1)当某一TST或CMO任务执行完成之后,从第三缓存器中读取该TST的描述符或该CMO任务的描述符中的第一索引号列表(successor_list)。(2)根据该第一索引号列表中的第一索引号确定该TST或该CMO任务的所有后序任务,以及通知第三缓存器对每个后序任务的描述符中的第一计数(pred_cnt)进行减一操作。(3)对于该TST或该CMO任务的任一个后序任务,当该任一个后序任务的描述符中的第一计数减为零时,将该任一个后序任务向调度器发送。应理解的是,某一TST或CMO任务的后序任务包括后序TST和后序CMO任务。
在一种可能的实现方式中,MCU进行数据生命周期管理的过程包括:(1)当某一TST执行完成之后,从第三缓存器中读取该TST的描述符中的第二索引号列表(itkt_list)和第三索引号列表(otkt_list)。(2)根据该第二索引号列表中的第二索引号确定该TST的所有目标输入数据,以及通知第三缓存器对每个目标输入数据的描述符中的第二计数(cons_cnt)进行减一操作。其中,该TST的目标输入数据为该TST需要进行数据生命周期管理的输入数据。(3)对于该TST的任一个目标输入数据,当该任一个目标输入数据的描述符中的第二计数减为零时,说明该任一个目标输入数据处于空闲状态,也即该任一个目标输入数据被消费完成,可被丢弃。此时,可对该任一个目标输入数据进行无效(Invalidate)操作,以将该任一个目标输入数据丢弃,释放对应的缓存。例如,通过向调度器下发一个无效该任一个目标输入数据的CMO任务,以实现将该任一个目标输入数据无效掉。(4)根据该第三索引号列表中第三索引号确定该TST的所有目标输出数据,以及通知第三缓存器对每个目标输出数据的描述符中的第三计数(prod_cnt)进行减一操作。其中,该TST的目标输出数据为该TST需要进行数据生命周期管理的输出数据。(5)对于该TST的任一个目标输出数据,当该任一个目标输出数据的描述符中的第三计数减为零时,说明该任一个目标输出数据处于就绪状态,即该任一个目标输出数据已生产完成并可被消费。此时,可选择性对该任一个目标输出数据进行回写(Writeback)操作,将该任一个目标输出数据写入主机的内存。例如,通过向调度器下发一个回写该任一个目标输出数据的CMO任务,以实现将该任一个目标输出数据写入主机的内存。
调度器可以实现子图调度层中的调度模块的功能。调度器包括多个第二缓存器,第二缓存器可以为高速缓存。每个第二缓存器中存在一个就绪队列,每个就绪队列用于缓存就绪的TST(包括初始就绪的TST)或就绪的CMO任务(包括初始就绪的CMO任务)。
派发器可以实现子图调度层中的派发模块的功能。派发器包括多个第一缓存器,第一缓存器可以为高速缓存。每个第一缓存器中存在一个派发队列,每个派发队列用于缓存待执行的TST或待执行的CMO任务。
可选地,派发器还包括预取控制装置。预取控制装置可以生成预取TST的输入数据的CMO任务。当TST的描述符中包含预取输入数据的配置信息时,派发模块可以针对该TST生成预取输入数据的CMO任务,并将该预取输入数据的CMO任务派发给执行装置执行。
图2所示的系统还可以包括执行装置,该执行装置可以实现图1所示的软件架构的执行层的功能。可选地,调度装置还可以包括执行装置,调度装置也可以不包括执行装置。当调度装置不包括执行装置时,执行装置为与调度装置相互独立且相互通信的硬件。其中,图2以调度装置包括执行装置为例进行说明。
执行装置包括异构的多个执行单元和第四缓存器。第四缓存器可以为高速缓存。多个执行单元共享第四缓存器。第四缓存器用于缓存TST的输入数据、输出数据等。例如,调度装置可以预取TST的输入数据,并缓存在第四缓存器中,以供该TST执行时使用。又例如,调度装置可以将TST的输出数据缓存在第四缓存器中,以供其他TST执行时使用。
其中,上述多个执行单元包括不同类型的计算单元或通信单元,具体包括但不限于:图形处理器(GPU),专用加速器,直接存储器访问(Direct Memory Access,DMA)控制器等。例如,图2以执行单元A、执行单元B、执行单元C和执行单元D这4种类型的执行单元为例,每种类型的执行单元的个数可以为2。执行单元A、执行单元B、执行单元C和执行单元D为异构的执行单元。应理解的是,本申请支持执行单元的类型和数量可灵活配置,执行单元的类型之间无绑定关系,执行单元的数量之间也无绑定关系。需要说明的是,对于执行装置中的不同执行单元,本申请提供全硬化的通信机制,执行单元之间可以相互通信。
进一步需要说明的是,多个执行单元与多个第一缓存器具有对应关系。派发器将每个第一缓存器缓存的待执行的TST或待执行的CMO任务派发给该第一缓存器对应的执行单元。应理解的是,由于不同的第一缓存器缓存不同的派发队列,不同的派发队列缓存不同任务类型的待执行的TST或待执行的CMO任务,从而实现将不同任务类型的待执行的TST或待执行的CMO任务派发到不同的执行单元上。如此,本申请并行化地将不同任务类型的TST或CMO任务分配给不同的执行单元,提升调度效率和执行效率。
需要说明的是,图2所示实施例中各模块的功能描述,可参见前述图1所示实施例中的相关描述,此处不再赘述。
为了便于理解本申请,下面以信息流向对图2所示系统的各个模块做进一步地介绍。
主机在编译得到编译数据之后,将其存储在主机的内存中。其中,编译数据包括:TST、TST的描述符、数据的描述符(包括TST的目标输入数据的描述符和TST的目标输出数据的描述符)、CMO任务、CMO任务的描述符等。
在主机的内存存储有编译数据之后,主机向调度装置发送执行编译数据的通知。例如,主机通过向调度装置发送该执行编译数据的通知,来通知调度装置主机的内存存储有编译数据,调度装置可以从主机的内存获取该编译数据,并执行该编译数据。
应理解的是,一个SGT的执行包括一个或多个TST的执行,还可能包括一个或多个CMO任务的执行。一个或多个TST中,存在初始就绪的TST,初始就绪的TST也即第一计数的初始值(pred_cnt_init)为零的TST。此外,一个或多个CMO任务中,也可能存在初始就绪的CMO任务,初始就绪的CMO任务也即第一计数的初始值为零的CMO任务。
在一种可能的实现方式中,该执行编译数据的通知可以包括TST的描述符中的信息,以及CMO任务的描述符中的信息,该TST的描述符中的信息用于调度装置确定该编译数据中的初始就绪的TST,该CMO任务的描述符中的信息用于调度装置确定该编译数据中的初始就绪的CMO任务。
具体地,主机通知调度装置中的MCU执行编译数据。MCU在接收到来自主机的执行编译数据的通知之后,通知第三缓存器从主机的内存获取并缓存初始就绪的TST的描述符和初始就绪的CMO任务的描述符。在第三缓存器缓存有初始就绪的TST的描述符之后,MCU从第三缓存器中读取该初始就绪的TST的描述符,以确定其为初始就绪的TST,并从主机的内存获取该初始就绪的TST,以及向调度器发送该初始就绪的TST。同理,在第三缓存器缓存有初始就绪的CMO任务的描述符之后,MCU从第三缓存器中读取该初始就绪的CMO任务的描述符,以确定其为初始就绪的CMO任务,并从主机的内存获取该初始就绪的CMO任务,以及向调度器发送该初始就绪的CMO任务。
需要说明的是,MCU可以向调度器并行发送多个目标任务,该多个目标任务均为初始就绪的目标任务,该多个目标任务中的任意一个目标任务可以为TST,也可以为CMO任务。
进一步需要说明的是,随着初始就绪的TST或初始就绪的CMO任务的执行,非初始就绪的TST的控制依赖需要被解除以成为就绪的TST,以及非初始就绪的CMO任务的控制依赖需要被解除以成为就绪的CMO任务。
在一种可能的实现方式中,MCU可以对非初始就绪的TST进行控制依赖管理,以将该非初始就绪的TST变成就绪的TST,以及对非初始就绪的CMO任务进行控制依赖管理,以将该非初始就绪的CMO任务变成就绪的CMO任务。
具体地,MCU每接收到一个非初始就绪的TST的前序任务执行完成的通知之后,MCU则通知第三缓存器将该TST的描述符中的第一计数(pred_cnt)减一。该TST的前序任务可以为其他TST,也可以为CMO任务。当该TST的描述符中的第一计数减为零时之后,该TST的控制依赖解除,也即该TST成为就绪的TST。MCU从主机的内存获取该TST,以及向调度器发送该TST。同理,MCU每接收到一个非初始就绪的CMO任务的前序任务执行完成的通知之后,MCU则通知第三缓存器将该CMO任务的描述符中的第一计数(pred_cnt)减一。该CMO任务的前序任务可以为其他CMO任务,也可以为TST。当该CMO任务的描述符中的第一计数减为零之后,该CMO任务的控制依赖解除,也即该CMO任务成为就绪的CMO任务。MCU从主机的内存获取该CMO任务,以及向调度器发送该CMO任务。
其中,该非初始就绪的TST的描述符是在其前序任务的调度、派发或执行过程中,第三缓存器从主机的内存获取并缓存的。例如,派发器在派发该TST的最先被执行的前序任务的过程中,通知第三缓存器从主机的内存获取并缓存该TST的描述符。同理,该非初始就绪的CMO任务的描述符是在其前序任务的调度、派发或执行过程中,第三缓存器从主机的内存获取并缓存的。又例如,派发器在派发该CMO任务的最先被执行的前序任务的过程中,通知第三缓存器从主机的内存获取并缓存该CMO任务的描述符。
需要说明的是,MCU可以向调度器并行发送多个目标任务,该多个目标任务均为就绪的目标任务,该多个目标任务中的任意一个目标任务可以为TST,也可以为CMO任务。
调度器可以接收来自MCU的TST和CMO任务。其中,调度器接收到的TST包括初始就绪的TST和就绪的TST。同理,调度器接收到的CMO任务包括初始就绪的CMO任务和就绪的CMO任务。调度器将接收到的每一个TST缓存在多个第二缓存器中的其中一个第二缓存器中,将接收到的每一个CMO任务缓存在多个第二缓存器中的其中一个第二缓存器中。具体地,将接收到的每一个TST缓存在其中一个第二缓存器中的就绪队列中,以及将接收到的每一个CMO任务缓存在其中一个第二缓存器中的就绪队列中。
在一种可能的实现方式中,针对接收到的每一个TST,调度器根据该TST的任务属性将该TST缓存在多个第二缓存器中的其中一个第二缓存器的就绪队列中。同理,针对接收到的每一CMO任务,调度器根据该CMO任务的任务属性将该CMO任务缓存在多个第二缓存器中的其中一个第二缓存器的就绪队列中。其中,前述任务属性包括:任务类型、优先级、执行单元。
应理解的是,MCU在向调度器发送TST或CMO任务之前,第三缓存器中就已经缓存有该TST的描述符或该CMO任务的描述符。其中,对于初始就绪的TST或CMO任务,是由MCU通知第三缓存器获取并缓存该TST或CMO任务的描述符的。对于非初始就绪的TST或CMO任务,是由派发器通知第三缓存器获取并缓存该TST或CMO任务的描述符的。因此,对于任一个第二缓存器缓存的任一TST或CMO任务,调度器可以从第三缓存器中读取该TST或CMO任务的描述符。
在一种可能的实现方式中,针对任一个第二缓存器缓存的任一个TST,调度器可以从第三缓存器中读取该TST的描述符,并根据该TST的描述符通知第三缓存器获取并缓存该TST的目标输入数据的描述符。具体地,该TST的描述符包括第二索引号列表,该第二索引号列表包括第二索引号,该第二索引号用于标识该TST的目标输入数据。调度器从第三缓存器中获取该第二索引号,并根据该第二索引号通知第三缓存器预取该TST的目标输入数据的描述符。例如,在该TST出该第二缓存器中的就绪队列的时候,调度器通知第三缓存器获取并缓存该TST的目标输入数据的描述符。应理解的是,派发器在生成预取该TST的目标输入数据的CMO任务时,以及MCU在对该TST的目标输入数据进行数据生命周期管理时,需要使用该TST的目标输入数据的描述符。如此,在派发器需要使用该TST的目标输入数据的描述符的时候,以及在MCU需要使用该TST的目标输入数据的描述符的时候,该TST的目标输入数据的描述符已经缓存在第三缓存器中,从而提高缓存命中率。
调度器还将就绪队列中缓存的TST作为待执行的TST向派发器发送,以及将就绪队列中缓存的CMO任务作为待执行的CMO任务向派发器发送。需要说明的是,调度器可以向派发器并行发送多个目标任务,该多个目标任务中的任意一个目标任务可以为TST,也可以为CMO任务。例如,调度器从多个第二缓存器中的每个第二缓存器中获取一个TST或CMO任务,从而得到多个目标任务,并向派发器发送该多个目标任务。
派发器可以接收来自调度器的待执行的TST或待执行的CMO任务。并且,派发器将接收到的每一个TST缓存在多个第一缓存器中的其中一个第一缓存器中,以及将接收到的每一个CMO任务缓存在多个第一缓存器中的其中一个第一缓存器中。具体地,派发器将接收到的每一个TST缓存在其中一个第一缓存器中的派发队列中,以及将接收到的每一个CMO任务缓存在其中一个第一缓存器中的派发队列中。
在一种可能的实现方式中,针对接收到的每一个TST,派发器根据该TST的任务类型将该TST缓存在多个第一缓存器中的其中一个第一缓存器的派发队列中。同理,针对接收到的每一CMO任务,派发器根据该CMO任务的任务类型将该CMO任务缓存在多个第一缓存器中的其中一个第一缓存器的派发队列中。
在一种可能的实现方式中,针对任一个第一缓存器缓存的任一个TST,派发器中的预取控制装置可以从第三缓存器中获取该TST的目标输入数据的描述符,并根据该TST的目标输入数据的描述符生成预取该TST的目标输入数据的CMO任务,以及将预取该TST的目标输入数据的CMO任务派发给对应的执行单元执行。其中,该TST的目标输入数据的描述符是调度器通知第三缓存器提前获取并缓存的。如图2所示,预取控制装置将该TST的目标输入数据的CMO任务派发给执行单元D执行,执行单元D可以为DMA控制器。执行单元D执行预取该TST的目标输入数据的CMO任务,从主机的内存获取该TST的目标输入数据,并将该TST的目标输入数据缓存在第四缓存器中。当执行单元在执行该TST时,该TST的目标输入数据已经缓存在第四缓存器中,执行单元可以直接从第四缓存器中获取该TST的目标输入数据。如此,本申请可以预取需要使用的数据,从而有效提升缓存命中率,减少数据获取的时延。
在一种可能的实现方式中,针对任一个第一缓存器缓存的任一个TST,派发器可以从第三缓存器中读取该TST的描述符,并根据该TST的描述符通知第三缓存器预取该TST的后序任务的描述符。具体地,该TST的描述符包括第一索引号列表,该第一索引号列表包括第一索引号,该第一索引号用于标识该TST的后序任务。派发器从第三缓存器中读取该第一索引号,并根据该第一索引号通知第三缓存器预取该TST的后序任务的描述符。应理解的是,该TST的后序任务可以为其他TST,也可以为CMO任务。如此,MCU在对该TST的后序任务进行控制依赖管理时,该TST的后序任务的描述符已经缓存在第三缓存器中,从而可以减少MCU读取该TST的后序任务的描述符的时延,以及提高MCU读取该TST的后序任务的描述符的命中率。同理,针对任一个第一缓存器缓存的任一个CMO任务,派发器可以从第三缓存器中读取该CMO任务的描述符,并根据该CMO任务的描述符通知第三缓存器预取该CMO任务的后序任务的描述符。具体地,该CMO任务的描述符包括第一索引号列表,该第一索引号列表包括第一索引号,该第一索引号用于标识该CMO任务的后序任务。派发器从第三缓存器中读取该第一索引号,并根据该第一索引号通知第三缓存器预取该CMO任务的后序任务的描述符。应理解的是,该CMO任务的后序任务可以为其他CMO任务,也可以为TST。如此,MCU在对该CMO任务的后序任务进行控制依赖管理时,该CMO任务的后序任务的描述符已经缓存在第三缓存器中,从而可以减少MCU读取该CMO任务的后序任务的描述符的时延,以及提高MCU读取该CMO任务的后序任务的描述符的命中率。
在一种可能的实现方式中,针对任一个第一缓存器缓存的任一个TST,派发器可以从第三缓存器中获取该TST的描述符,并根据该TST的描述符通知第三缓存器预取该TST的目标输出数据的描述符。具体地,该TST的描述符包括第三索引号列表,该第三索引号列表包括第三索引号,该第三索引号用于标识该TST的目标输出数据。派发器从第三缓存器中获取该第三索引号,并根据该第三索引号通知第三缓存器预取该TST的目标输出数据的描述符。应理解的是,MCU在对该TST的目标输出数据进行数据生命周期管理时,需要使用该TST的目标输出数据的描述符。如此,在MCU需要使用该TST的目标输出数据的描述符的时候,该TST的目标输出数据的描述符已经缓存在第三缓存器中,从而提高缓存命中率。
派发器还将派发队列中缓存的TST向执行装置派发,以及将派发队列中缓存的CMO任务向执行装置派发。需要说明的是,派发器可以向执行装置并行发送多个目标任务,该多个目标任务中的任意一个目标任务可以为TST,也可以为CMO任务。例如,派发器从多个第一缓存器中的每个第一缓存器中获取一个TST或CMO任务,从而得到多个目标任务,并向执行装置发送该多个目标任务。
在一种可能的实现方式中,TST的描述符包括目标数量(BLK DIM),该目标数量用于表示该TST包括的BST的数量。针对任一个第一缓存器缓存的任一个TST,派发器向执行装置派发的过程为:从所述第三缓存器中读取该TST的描述符中的目标数量,并将该TST切分成该目标数量个BST,以及将该目标数量个BST派发给对应的执行单元。同理,CMO任务的描述符也包括目标数量,该目标数量用于表示该CMO任务包括的BST的数量。针对任一个第一缓存器缓存的任一个CMO任务,派发器向执行装置派发的过程为:从所述第三缓存器中读取该CMO任务的描述符中的目标数量,并将该CMO任务切分成该目标数量个BST,以及将该目标数量个BST派发给对应的执行单元。如此,将一个TST或CMO任务切分成多个BST,多个BST可以派发给多个执行单元执行,从而提高执行的并行度,减少执行的时延。
在一种可能的实现方式中,执行单元在执行完任一个BST之后,向派发器发送该BST执行完成的通知。此外,如果该BST存在输出数据,执行单元还将该BST的输出数据缓存在第四缓存器中。应理解的是,一个TST包括多个BST,执行单元将每一个BST的输出数据缓存在第四缓存器中,从而将该TST的输出数据缓存在第四缓存器中。
需要说明的是,对于派发器生成的CMO任务,派发器也可以将其切分成一个或多个BST,以及向执行装置发送该一个或多个BST。
在一种可能的实现方式中,针对任一个TST或CMO任务,当派发器接收到该TST或CMO任务的所有BST执行完成的通知之后,派发器确定该TST或CMO任务执行完成,向MCU发送该TST或CMO任务执行完成的通知。
在一种可能的实现方式中,MCU在接收到任一个TST执行完成的通知之后,从第三缓存器中读取该TST的描述符,并根据该TST的描述符对该TST的后序任务进行控制依赖管理。具体地,该TST的描述符包括第一索引号列表,该第一索引号列表包括第一索引号,该第一索引号用于标识该TST的后序任务。MCU对该TST的后序任务进行控制依赖管理的过程如下:(1)MCU从第三缓存器中读取该第一索引号。(2)MCU根据该第一索引号,通知第三缓存器对该TST的后序任务的描述符中的第一计数进行减一操作。如前所述,该TST的后序任务的描述符是派发器提前通知第三缓存器从主机的内存获取并缓存的。(3)当该TST的后序任务的描述符中的第一计数减为零时,MCU将该TST的后序任务向调度器发送。应理解的是,该TST的后序任务的控制依赖解除,也即该TST的后序任务已成为就绪的任务,之后MCU可以将该TST的后序任务发送给调度器。同理,MCU在接收到任一个CMO任务执行完成的通知之后,从第三缓存器中读取该CMO任务的描述符,并根据该CMO任务的描述符对该CMO任务的后序任务进行控制依赖管理。具体地,该CMO任务的描述符包括第一索引号列表,该第一索引号列表包括第一索引号,该第一索引号用于标识该CMO任务的后序任务。MCU对该CMO任务的后序任务进行控制依赖管理的过程如下:(1)MCU从第三缓存器中读取该第一索引号。(2)MCU根据该第一索引号,通知第三缓存器对该CMO任务的后序任务的描述符中的第一计数进行减一操作。如前所述,该CMO任务的后序任务的描述符是派发器提前通知第三缓存器从主机的内存获取并缓存的。(3)当该CMO任务的后序任务的描述符中的第一计数减为零时,MCU将该CMO任务的后序任务向调度器发送。应理解的是,该CMO任务的后序任务的控制依赖解除,也即该CMO任务的后序任务已成为就绪的任务,之后MCU可以将该CMO任务的后序任务发送给调度器。如此,本申请通过MCU完成TST或CMO任务的控制依赖管理,提供了更加灵活多变的控制依赖管理功能,避免了调度装置适配性差的问题,在复杂多变的业务场景下,可以有效提升系统与应用场景的贴合度,降低成本。
在一种可能的实现方式中,MCU在接收到任一个TST执行完成的通知之后,从第三缓存器中读取该TST的描述符,并根据该TST的描述符对该TST的目标输入数据进行数据生命周期管理。具体地,该TST的描述符包括第二索引号列表,该第二索引号列表包括第二索引号,该第二索引号用于标识该TST的目标输入数据。MCU对该TST的目标输入数据进行数据生命周期管理的过程如下:(1)MCU从第三缓存器中读取该第二索引号。(2)MCU根据该第二索引号,通知第三缓存器对该TST的目标输入数据的描述符中的第二计数进行减一操作。如前所述,该TST的目标输入数据的描述符是调度器提前通知第三缓存器从主机的内存获取并缓存的。(3)当该TST的目标输入数据的描述符中的第二计数减为零时,MCU向调度器发送一个用于指示无效该TST的目标输入数据的CMO任务。应理解的是,该CMO任务为该TST的后序任务,其控制依赖也在此时解除,具体过程如前所述,此处不再赘述。该CMO任务经过调度器调度以及派发器派发后,被派发到执行装置。例如,该CMO任务被派发给执行单元D,执行单元D将该TST的目标输入数据无效掉。其中,执行单元D可以为DMA控制器。如此,本申请可以对子图内各个目标输入数据进行生命周期管理,释放不再需要使用的目标输入数据,能够有效提升缓存命中率。
在一种可能的实现方式中,MCU在接收到任一个TST执行完成的通知之后,从第三缓存器中读取该TST的描述符,并根据该TST的描述符对该TST的目标输出数据进行数据生命周期管理。具体地,该TST的描述符包括第三索引号列表,该第三索引号列表包括第三索引号,该第三索引号用于标识该TST的目标输入数据。MCU对该TST的目标输入数据进行数据生命周期管理的过程如下:(1)MCU从第三缓存器中读取该第三索引号。(2)MCU根据该第三索引号,通知第三缓存器对该TST的目标输出数据的描述符中的第三计数进行减一操作。如前所述,该TST的目标输出数据的描述符是派发器提前通知第三缓存器从主机的内存获取并缓存的。(3)当该TST的目标输出数据的描述符中的第三计数减为零时,MCU向调度器发送一个用于指示回写该TST的目标输出数据的CMO任务。应理解的是,该CMO任务为该TST的后序任务,其控制依赖也在此时解除,具体过程如前所述,此处不再赘述。该CMO任务经过调度器调度以及派发器派发后,被派发到执行装置。例如,该CMO任务被派发给执行单元D,执行单元D可以为DMA控制器,执行单元D将第四缓存器缓存的该TST的目标输出数据写入主机的内存。如前所述,该TST的目标输出数据是由执行装置写入第四缓存器的。如此,本申请可以对子图内各个目标输出数据进行生命周期管理,及时将目标输出数据回写到主机的内存,能够合理利用第四缓存器的存储空间。
下面以一个具体的示例,对图2所示系统中的调度装置做进一步地介绍。
如图2所示,所述调度装置包括派发器,所述派发器与执行装置耦合;所述派发器包括多个第一缓存器,所述多个第一缓存器中的每个第一缓存器用于缓存一个任务类型的目标任务;所述目标任务包括线程子任务和缓存管理操作任务;所述线程子任务是对节点子任务进行切分得到的,所述节点子任务是对子图任务进行切分得到的,所述子图任务是对子图进行编译得到的;所述缓存管理操作任务用于指示对线程子任务的输入数据或输出数据进行缓存管理操作;所述派发器,用于:接收多个第一目标任务,并根据任务类型将所述多个第一目标任务缓存在所述多个第一缓存器中;向所述执行装置派发多个第二目标任务,所述多个第二目标任务中的任意一个第二目标任务为所述多个第一缓存器缓存的目标任务,所述多个第二目标任务分别由不同的第一缓存器缓存。需要说明的是,本申请的调度装置与主机耦合,在调度装置中调度、派发以及执行的目标任务初始来源于主机的内存。
其中,根据任务类型可以将目标任务分为多个层级,具体如下:
(1)第一层级划分,目标任务包括TST和CMO任务;
(2)第二层级划分,TST包括计算、通信等类型的TST,以及CMO任务包括预取、无效、回写、刷新等类型的CMO任务;
(3)第三层级划分,计算类型的TST包括加、减、乘、除等类型的TST。
应理解的是,在将目标任务按照任务类型划分类别时,具体划分到上述哪一层级根据实际需求确定,本申请对此不做具体限定。
在本申请中,用于图计算的调度装置包括派发器,派发器可以并行接收不同任务类型的目标任务,并将接收到的不同任务类型的目标任务缓存在不同的第一缓存器中,以及将不同第一缓存器缓存的不同任务类型的目标任务并行派发给执行装置。其中,派发器将不同任务类型的目标任务缓存在不同的第一缓存器中,能够解决异构任务派发时的队头阻塞问题,提升目标任务的派发效率。派发器将不同任务类型的目标任务并行派发给执行装置,能够降低目标任务的派发时延,提升目标任务的派发效率。进一步地,由于派发器将不同任务类型的目标任务并行派发给执行装置,如此执行装置也可以并行执行不同任务类型的目标任务。例如,执行装置包括不同类型的执行单元(也即异构的执行单元),派发器将不同任务类型的目标任务并行派发给不同类型的执行单元执行,从而能够提升执行单元的利用率以及目标任务的执行效率。综上,本申请提供的调度装置能够提升图计算效率。此外,本申请通过调度装置进行目标任务的调度派发,也即将调度派发目标任务的功能进行硬化,相比通过软件调度,能够减轻软件的调度负载。
在一种可能的实现方式中,所述调度装置还包括调度器,所述调度器包括多个第二缓存器;所述调度器,用于:接收多个第三目标任务,并将所述多个第三目标任务缓存在所述多个第二缓存器中;向所述派发器发送所述多个第一目标任务,所述多个第一目标任务中的任意一个第一目标任务为所述多个第二缓存器缓存的目标任务。其中,调度器接收到的目标任务为控制依赖解除或不存在控制依赖的目标任务。多个第三目标任务为控制依赖解除或不存在控制依赖的目标任务。
在本实现方式中,调度装置还包括调度器,调度器可以并行接收不同的目标任务,并将接收到的目标任务缓存在多个第二缓存器中,以及将多个第二缓存器缓存的不同任务类型的目标任务并行调度给派发器。如此,调度器可以缓存控制依赖解除或不存在控制依赖的目标任务,并按照特定的调度策略将缓存的目标任务下发到派发器中,能够最大化派发器中的第一缓存器的存储利用率。
在一种可能的实现方式中,所述多个第二缓存器中的每个第二缓存器用于缓存一个类别的目标任务;其中,同一个类别的目标任务的以下其中一项相同:任务类型,优先级,执行单元。
在本实现方式中,提供多种目标任务的调度策略,提升目标任务的调度灵活性。例如,调度器将不同任务类型的目标任务缓存在不同的第二缓存器中,或将不同优先级的目标任务缓存在不同的第二缓存器中,或将不同执行单元执行的目标任务缓存在不同的第二缓存器中。如此,能够解决异构任务调度到派发器时的队头阻塞问题,提升目标任务的调度效率。
在一种可能的实现方式中,所述调度装置还包括微控制单元MCU和第三缓存器;所述第三缓存器缓存有第四目标任务的描述符,所述第四目标任务为所述多个第三目标任务中的任意一个;所述MCU,用于:从所述第三缓存器中读取所述第四目标任务的描述符;所述第四目标任务的描述符包括第一目标计数,所述第一目标计数用于表示未执行完成的第五目标任务的数量,所述第四目标任务依赖于所述第五目标任务;若所述第一目标计数为零,则向所述调度器发送所述第四目标任务。
其中,第四目标任务为多个第三目标任务中的任意一个。第五目标任务为第四目标任务的前序任务。第一目标计数为第四目标任务的任务描述符中的第一计数。应理解,当某一目标任务依赖的其他目标任务的数量为零,说明该目标任务为控制依赖解除或不存在控制依赖的目标任务。
其中,调度装置与主机耦合,MCU从主机的内存中获取第四目标任务,并向调度器发送第四目标任务。
在本实现方式中,调度装置通过MCU和第三缓存器配合完成目标任务的控制依赖管理,提供了更加灵活多变的控制依赖管理的控制功能,避免了调度装置适配性差的问题。在复杂多变的业务场景下,可以有效提升调度装置与应用场景的贴合度,降低成本。
在一种可能的实现方式中,所述MCU,还用于:通知所述第三缓存器获取并缓存第四目标任务的描述符。其中,第四目标任务可以为不存在控制依赖的目标任务,或者说,第四目标任务为控制依赖初始解除的目标任务。其中,调度装置与主机耦合,第三缓存器从主机的内存中获取第四目标任务的描述符。
在本实现方式中,MCU通知第三缓存器预取目标任务的描述符,并且第三缓存器将预取到的目标任务的描述符缓存在本地。如此,MCU在对目标任务进行控制依赖管理时,该目标任务的描述符已经缓存在第三缓存器中了,从而降低对目标任务进行控制依赖管理的时延。
在一种可能的实现方式中,所述执行装置包括多个执行单元;所述多个第一目标任务包括所述第四目标任务,所述多个第二目标任务包括所述第四目标任务;所述派发器,具体用于:从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第一目标数量,则将所述第四目标任务切分为所述第一目标数量个第一块子任务,以及向所述多个执行单元中的至少一个执行单元派发所述第一目标数量个第一块子任务,所述第一目标数量用于表示所述第四目标任务包括的第一块子任务的数量。
其中,第一目标数量为第四目标任务的描述符中的目标数量,由BLK DIM域段表示。
在本实现方式中,派发器在将目标任务切分成更细粒度的可独立派发的多个块子任务,以及将多个块子任务派发给多个执行单元执行。如此,提供更细粒度的子图任务派发和执行策略,充分挖掘子图内子任务的派发和执行并行性,实现子图内块子任务的并行执行,能够提升执行单元的利用率和减少整体执行时间。
在一种可能的实现方式中,所述派发器,还用于:在接收到来自所述至少一个执行单元的所述第一目标数量个第一块子任务执行完成的通知之后,向所述MCU发送所述第四目标任务执行完成的通知。
在本实现方式中,执行单元可以向派发器返回块子任务的执行状态,在一个目标任务切分得到的所有块子任务执行完成以后,说明该目标任务执行完成,派发器向MCU发送该目标任务执行完成的通知。如此,实现通知MCU对该目标任务的后序任务进行控制依赖管理。其中,该目标任务的后序任务为依赖于该目标任务的其他目标任务。
在一种可能的实现方式中,所述调度器,还用于:从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第一目标索引号,则通知所述第三缓存器获取并缓存第一目标数据的描述符,所述第一目标索引号用于标识所述第一目标数据,所述第四目标任务的输入数据包括所述第一目标数据。其中,调度装置与主机耦合,第三缓存器从主机的内存中获取第一目标数据的描述符。
其中,第一目标索引号为第四目标任务的描述符中的第二索引号。第一目标数据为第四目标任务的目标输入数据。
在本实现方式中,调度器在将目标任务调度给派发器的过程中,例如目标任务在出第二缓存器的时候,调度器可以读取该目标任务的描述符,判断在执行该目标任务之前是否需要预取该目标任务的输入数据。如果需要预取该目标任务的输入数据,则调度器通知第三缓存器预取并缓存该目标任务的输入数据的描述符。应理解的是,派发器在生成用于指示预取该目标任务的输入数据的缓存操作管理任务时,需要用到该目标任务的输入数据的描述符。如此,在派发器需要使用该目标任务的输入数据的描述符时,该目标任务的输入数据的描述符已经缓存在第三缓存器中,从而能够提高派发器从第三缓存器中读取输入数据的描述符的命中率。
在一种可能的实现方式中,所述多个第一目标任务包括所述第四目标任务;所述派发器,还用于:从所述第三缓存器中读取所述第一目标数据的描述符;若所述第一目标数据的描述符包括第二目标索引号,则生成第一缓存管理操作任务,以及向所述执行装置派发所述第一缓存管理操作任务,所述第二目标索引号用于标识所述第四目标任务,所述第一缓存管理操作任务用于指示预取所述第一目标数据。
其中,第二目标索引号为第一目标数据的描述符中的第四索引号。
应理解的是,对于派发器自己生成的缓存管理操作任务,派发器也可以将该缓存管理操作任务切分成多个块子任务,并将该多个块子任务派发给对应的执行单元执行。例如,向所述执行装置派发所述第一缓存管理操作任务,包括:将所述第一缓存管理操作任务切分成第二目标数量个第二块子任务,以及向执行装置派发所述第二目标数量个第二块子任务。
在本实现方式中,派发器可以生成用于指示预取目标任务的输入数据的缓存管理操作任务,并将该缓存管理操作任务派发给执行装置执行,以预取该目标任务的输入数据。如此,在执行该目标任务之前,及时预取该目标任务的输入数据,并缓存在本地。例如,执行装置包括第四缓存器,执行装置将预取的目标任务的输入数据缓存在第四缓存器中。在执行该目标任务时,调度装置无需去外部获取该目标任务的输入数据,而直接在本地缓存获取该目标任务的输入数据,能够有效提升获取该目标任务的输入数据的命中率,减少获取该目标任务的输入数据的访问带宽和时延。需要说明的是,目标任务的输入数据包括共享型输入数据和独享型输入数据。其中,共享型输入数据为多个目标任务共享的输入数据,而独享型输入数据仅为特定的目标任务专属的输入数据。对于共享型输入数据,只需要预取一次,无需每次执行目标任务之前都进行预取,从而节省预取输入数据的访问带宽和降低预取输入数据的时延。例如,在大规模图计算任务中,多个子节点任务之间的输入数据具有重复性,即多个子节点任务使用同一套公共配置参数,如权重等。因此可以将目标任务的输入数据划分为共享型输入数据和独享型输入数据。对于共享型数据,只需要在执行第一个输入该共享型数据的目标任务时预取一次,避免重复预取,造成带宽浪费和增加时延。本申请提供的输入数据预取机制尤其适用于访问主机的内存频繁的数据型应用场景,通过及时的预取,避免了有效数据缓存丢失。
在一种可能的实现方式中,所述多个第二目标任务包括所述第四目标任务;所述第一目标数据的描述符还包括第二目标计数,所述第二目标计数用于表示未执行完成的第六目标任务的数量,所述第六目标任务的输入数据包括所述第一目标数据,所述第六目标任务包括所述第四目标任务;所述MCU,还用于:在接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通知所述第三缓存器将所述第二目标计数减一。
其中,第二目标计数为第一目标数据的描述符中的第二计数。第六目标任务为第一目标数据的消费者TST。
在本实现方式中,第一目标数据为共享型输入数据,其为第六目标任务这一类目标任务是输入数据。第六目标任务是数量可以为一个或多个。故第一目标数据只需要预取一次,无需每次执行目标任务之前都进行预取。如此,可以节省预取第一目标数据的访问带宽和降低预取第一目标数据的时延。并且,MCU在接收到任意一个第六目标任务执行完成的通知以后,例如MCU在接收到第四目标任务执行完成的通知以后,对第一目标数据进行数据生命周期管理。如此,便于在第一目标数据不需要被使用时,及时释放第一目标数据,提升调度装置内本地缓存的命中率和有效利用率。
在一种可能的实现方式中,所述MCU,还用于:在所述第二目标计数减为零的情况下,向所述调度器发送第二缓存管理操作任务,所述第二缓存管理操作任务用于指示无效所述第一目标数据。
在本实现方式中,在第一目标数据不需要被使用时,及时无效第一目标数据。如此,及时释放缓存中使用过且不再使用的数据,从而不会造成无效数据长时间占用缓存空间,导致缓存命中率和有效利用率降低的问题。
在一种可能的实现方式中,所述多个第一目标任务包括所述第四目标任务;所述派发器,还用于:从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第三目标索引号,则通知所述第三缓存器获取并缓存第二目标数据的描述符,所述第三目标索引号用于标识所述第二目标数据,所述第二目标数据包括所述第四目标任务的输出数据的部分或全部。其中,调度装置与主机耦合,第三缓存器从主机的内存中获取第二目标数据的描述符。
其中,第三目标索引号为第四目标任务的描述符中的第三索引号。第二目标数据包括第四目标任务的目标输入数据,或者,第二目标数据为第四目标任务的目标输入数据。
在本实现方式中,派发器在将目标任务派发给执行装置的过程中,例如目标任务在出第一缓存器的时候,派发器可以读取该目标任务的描述符,判断该目标任务是否存在需要进行数据生命周期管理的输出数据。如果存在需要进行数据生命周期管理的输出数据,则派发器通知第三缓存器预取并缓存该需要进行数据生命周期管理的输出数据的描述符。应理解,MCU对该目标任务的输出数据进行数据生命周期管理时,需要用到该目标任务的输出数据的描述符。如此,在MCU需要使用该目标任务的输出数据的描述符时,该目标任务的输出数据的描述符已经缓存在第三缓存器中,从而能够提高MCU从第三缓存器中读取输出数据的描述符的命中率。
在一种可能的实现方式中,所述多个第二目标任务包括所述第四目标任务;所述第二目标数据的描述符包括第三目标计数,所述第三目标计数用于表示未执行完成的第七目标任务的数量,所述第二目标数据包括所述第七目标任务的输出数据的部分或全部,所述第七目标任务包括所述第四目标任务;所述MCU,还用于:在接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通知所述第三缓存器将所述第三目标计数减一。
其中,第三目标计数为第二目标数据的描述符中的第三计数。第七目标任务为第二目标数据的生产者TST。
在本实现方式中,第二目标数据由第七目标任务这一类目标任务的输出数据的部分或全部组成。第七目标任务是数量可以为一个或多个。如此,MCU在接收到任意一个第七目标任务执行完成的通知以后,例如MCU在接收到第四目标任务执行完成的通知以后,对第二目标数据进行数据生命周期管理。如此,便于在第二目标数据生成时,及时将第二目标数据回写到主机的内存,释放调度装置内本地缓存空间,提升调度装置内本地缓存的有效利用率。
在一种可能的实现方式中,所述MCU,还用于:在所述第三目标计数减为零的情况下,向所述调度器发送第三缓存管理操作任务,所述第三缓存管理操作任务用于指示将所述第二目标数据写入主机,所述调度装置与所述主机耦合。
在本实现方式中,在第二目标数据生成时,及时回写第二目标数据。如此,将目标任务的输出数据回写到主机的内存,释放调度装置内本地缓存空间,从而不会造成目标任务的输出数据长时间占用缓存空间,导致缓存命中率和有效利用率降低的问题。
在一种可能的实现方式中,所述多个第一目标任务包括所述第四目标任务,所述多个第二目标任务包括所述第四目标任务;所述派发器,还用于:从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第四目标索引号,则通知所述第三缓存器获取并缓存第八目标任务的描述符,所述第四索引号用于标识所述第八目标任务,所述第八目标任务依赖于所述第四目标任务。其中,调度装置与主机耦合,第三缓存器从主机的内存中获取第八目标任务的描述符。
其中,第四目标索引号为第四目标任务的描述符中的第一索引号。
其中,第八目标任务依赖于第四目标任务,第八目标任务为第四目标任务的后序任务。
在本实现方式中,派发器在将目标任务派发给执行装置的过程中,例如目标任务在出第一缓存器的时候,派发器通知第三缓存器预取并缓存该目标任务的后序任务的描述符。应理解,MCU对该目标任务的后序任务进行控制依赖管理时,需要用到该目标任务的后序任务的描述符。如此,在MCU需要使用该目标任务的后序任务的描述符时,该目标任务的后序任务的描述符已经缓存在第三缓存器中,从而能够提高MCU从第三缓存器中读取后序任务的描述符的命中率。
在一种可能的实现方式中,所述第八目标任务的描述符包括第四目标计数,所述第四目标计数用于表示未执行完成的第九目标任务的数量,所述第八目标任务依赖于所述第九目标任务,所述第九目标任务包括所述第四目标任务;所述MCU,还用于:在接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通知所述第三缓存器将所述第四目标计数减一。
其中,第四目标计数为第八目标任务的描述符中的第一计数。
其中,第八目标任务依赖于第九目标任务这一类目标任务,第八目标任务为第九目标任务这一类目标任务的后序任务,第四目标任务为第九目标任务这一类目标任务中的其中一个。
在本实现方式中,在第四目标任务执行完成以后,MCU会对第八目标任务进行控制依赖管理。与此同时,由于派发器是不断向执行装置派发目标任务的,故在第四目标任务执行完成后,派发器紧接着派发另一个目标任务给原来执行第四目标任务的执行单元执行。如此,能够保证某一目标任务的依赖关系解除与其他目标任务的执行并行进行,将目标任务的依赖关系解除时延掩盖在其他目标任务执行的背后,提升整体性能。示例性地,在大规模图计算任务中,子图任务间常存在复杂的依赖关系,限制了子图任务执行的并行度,通过本申请能够有效掩盖任务的依赖关系解除时延,降低整体调度时延并提升执行单元的利用率。例如,在目标任务A依赖于目标任务B,目标任务C依赖于目标任务D的场景下。当目标任务A执行完成后,可以并行执行目标任务C和解除目标任务B的依赖关系,将目标任务B的依赖关系解除时间完全隐藏在目标任务C的执行时间中。当目标任务C执行完后,则可无缝继续执行目标任务B和解除目标任务D的依赖关系。
在一种可能的实现方式中,所述MCU,还用于:在所述第四目标计数减为零的情况下,向所述调度器发送所述第八目标任务。其中,调度装置与主机耦合,MCU从主机的内存中获取第八目标任务,以及向调度器发送第八目标任务。
在本实现方式中,第八目标任务依赖于第四目标任务,当第四目标任务执行完成后且第八目标任务的依赖关系解除之后,即可将第八目标任务推送到调度器中调度,进而调度到派发器中派发,再派发到执行装置中执行。如此,构成子图内任务的环路反复执行,直至子图执行结束。
需要说明的是,图2所示实施例中各模块的功能描述,可参见前述图1所示实施例中的相关描述,此处不再赘述。
请参阅图3,图3是图2所示的系统进行计算图的编译和执行的步骤流程图。具体包括但不限于如下步骤:
301:主机生成计算图的编译数据,并将该编译数据存储在主机的内存中,以及向调度装置发送执行编译数据的通知。
在一种可能的实现方式中,在步骤301之前,系统进行初始化配置。例如,由主机进行初始化配置。其中,初始化配置包括以下部分:
(1)根据各业务流吞吐量的大小,分配合适数量的任务下发通道。
(2)对执行单元进行统筹划分,将执行单元根据实际应用需求分配到不同的执行资源池中,实现硬件资源的物理隔离。
在完成初始化配置之后,主机对接收到的计算图进行编译,得到编译数据,以及将该编译数据填充到初始化配置时分配的任务下发通道的内存中。其中,编译数据包括:TST、TST的描述符、数据的描述符(包括TST的目标输入数据的描述符和TST的目标输出数据的描述符)、CMO任务、CMO任务的描述符等。
主机向调度装置发送执行编译数据的通知,主机通过向调度装置发送该执行编译数据的通知,来通知调度装置主机的内存中存储有编译数据,调度装置可以去主机的内存获取该编译数据,并且执行该编译数据。
302:调度装置通过MCU通知第三缓存器预取初始就绪的目标任务的描述符。
其中,目标任务包括TST和CMO任务,初始就绪的目标任务包括初始就绪的TST和初始就绪的CMO任务。
具体地,该执行编译数据的通知可以包括TST的描述符中的信息,以及CMO任务的描述符中的信息,该TST的描述符中的信息用于调度装置确定该编译数据中的初始就绪的TST,该CMO任务的描述符中的信息用于调度装置确定该编译数据中的初始就绪的CMO任务。MCU可以根据TST的描述符中的信息通知第三缓存器将初始就绪的TST的描述符预取回来并缓存在本地,以及根据CMO任务的描述符中的信息通知第三缓存器将初始就绪的CMO任务的描述符预取回来并缓存在本地。
303:调度装置通过MCU从第三缓存器中读取目标任务的描述符,并根据该目标任务的描述符向调度器发送该目标任务。
其中,MCU从第三缓存器中读取的目标任务的描述符包括初始就绪的目标任务的描述符和后期就绪的目标任务的描述符。当第一次执行步骤303时,MCU从第三缓存器中读取初始就绪的目标任务的描述符。之后,MCU还可以从第三缓存器中读取就绪的目标任务的描述符。
具体地,调度装置通过MCU从第三缓存器中读取TST的描述符,并根据该TST的描述符向调度器发送该TST。以及,调度装置通过MCU从第三缓存器中读取CMO任务的描述符,并根据该CMO任务的描述符向调度器发送该CMO任务。
需要说明的是,MCU可以向调度器并行发送多个目标任务。其中,并行发送的多个目标任务中的任意一个目标任务可以为TST,也可以为CMO任务。并行发送的多个目标任务中的每一个目标任务的发送过程相同。
以一个TST为例,调度装置通过MCU从第三缓存器中读取该TST的描述符,并根据该TST的描述符从主机的内存中获取该TST,以及向调度器发送该TST。例如,MCU过软硬件接口从第三缓存器中读取TST的描述符,若该TST的描述符中的第一计数为零,则从主机的内存中获取该TST,并向调度器发送该TST。
或者,以一个CMO任务为例,调度装置通过MCU从第三缓存器中读取该CMO任务的描述符并根据该CMO任务的描述符从主机的内存中获取该CMO任务,以及向调度器发送该CMO任务。例如,MCU通过软硬件接口从第三缓存器中读取CMO任务的描述符,若该CMO任务的描述符中的第一计数为零,则从主机的内存中获取该CMO任务,并向调度器发送该CMO任务。
其中,TST的描述符还包括:该TST的任务类型、该TST的优先级以及该TST的执行单元等信息,MCU向调度器发送该TST时,还将该TST的任务类型、该TST的优先级以及该TST的执行单元等信息一并向调度器发送。如此,针对接收到的每一个TST,调度器根据该TST的任务属性将该TST缓存在多个第二缓存器中的其中一个第二缓存器的就绪队列中。
同理,CMO任务的描述符还包括:该CMO任务的任务类型、该CMO任务的优先级以及该CMO任务的执行单元等信息,MCU向调度器发送该CMO任务时,还将该CMO任务的任务类型、该CMO任务的优先级以及该CMO任务的执行单元等信息一并向调度器发送。如此,针对接收到的每一CMO任务,调度器根据该CMO任务的任务属性将该CMO任务缓存在多个第二缓存器中的其中一个第二缓存器的就绪队列中。
其中,前述任务属性包括:任务类型、优先级、执行单元。
304:调度装置通过调度器进行目标任务的调度以及通过派发器进行目标任务的派发。
具体地,调度装置通过调度器将多个第二缓存器缓存的TST或CMO任务调度到派发器中,以及通过派发器将多个第一缓存器缓存的TST或CMO任务派发到执行装置中对应的执行单元中。
应理解的是,调度装置可以通过调度器将多个第二缓存器缓存的多个目标任务一次并行调度到派发器中。其中,并行调度的多个目标任务中的任意一个目标任务可以为TST,也可以为CMO任务。进一步应理解的是,调度装置可以通过派发器将多个第一缓存器缓存的多个目标任务一次并行派发到执行装置中对应的执行单元中。其中,并行派发的多个目标任务中的任意一个目标任务可以为TST,也可以为CMO任务。
请参阅图4,图4是本申请提供的一个TST或CMO任务的调度和派发流程示意图。该调度和派发流程具体包括如下步骤:
3041:调度器判断多个第二缓存器是否缓存有TST或CMO任务。
应理解的是,多个第二缓存器用于缓存TST和CMO任务。
如此,若调度器判断到多个第二缓存器中缓存有TST或CMO任务,则执行步骤3042。否则,调度器继续判断多个第二缓存器是否缓存有TST或CMO任务。
其中,一个TST或CMO任务的调度过程如步骤3042至步骤3044所示。
3042:调度器判断是否需要预取目标输入数据的描述符。
应理解的是,只有TST才存在输入数据、输出数据,而CMO任务不存在输入数据、输出数据。
具体地,对于存在目标输入数据的TST,调度器判断到需要预取该TST的目标输入数据的描述符,则执行步骤3043。对于CMO任务以及不存在目标输入数据的TST,调度器判断到不需要预取目标输入数据的描述符,执行步骤3044。
在一种可能的实现方式中,针对多个第二缓存器缓存的任一个TST,调度器可以从第三缓存器中读取该TST的描述符,并根据该TST的描述符判断该TST是否存在目标输入数据,进而判断是否需要预取该TST的目标输入数据的描述符。具体地,若该TST的描述符包括用于标识该TST的目标输入数据的第二索引号,则该TST是否存在目标输入数据,进而需要预取该TST的目标输入数据的描述符。
3043:调度器通知第三缓存器获取并缓存TST的目标输入数据的描述符。
具体地,调度器从第三缓存器中获取第二索引号,该第二索引号用于标识该TST的目标输入数据。调度器根据该第二索引号通知第三缓存器预取该TST的目标输入数据的描述符。
应理解的是,调度器通知第三缓存器获取并缓存TST的目标输入数据的描述符之后,执行步骤3044,以将该TST向派发器发送。
3044:调度器向派发器发送TST或CMO任务。
具体地,若前一个执行的步骤为3042,则调度器向派发器发送TST或CMO任务,其中,该TST不存在目标输入数据。若前一个执行的步骤为3043,则调度器向派发器发送TST,其中,该TST存在目标输入数据。
其中,调度器向派发器发送CMO任务时,会将该CMO任务的任务类型一并发送给派发器。同理,调度器向派发器发送TST时,会将该TST的任务类型一并发送给派发器。
如此,针对接收到的每一个TST,派发器根据该TST的任务类型将该TST缓存在多个第一缓存器中的其中一个第一缓存器的派发队列中。同理,针对接收到的每一CMO任务,派发器根据该CMO任务的任务类型将该CMO任务缓存在多个第一缓存器中的其中一个第一缓存器的派发队列中。
其中,一个TST或CMO任务的派发过程如步骤3045至步骤3048所示。
3045:派发器判断是否需要预取目标输入数据。
具体地,对于存在目标输入数据的TST,派发器判断到需要预取该TST的目标输入数据,则执行步骤3046至3048。对于CMO任务以及不存在目标输入数据的TST,派发器判断到不需要预取目标输入数据,执行步骤3048。
在一种可能的实现方式中,调度器在向派发器发送TST时,还可以会将该TST存在目标输入数据的信息一并发送给派发器。如此,派发器可以根据该信息中判断到需要预取该TST的目标输入数据。
在另一种可能的实现方式中,针对多个第一缓存器缓存的任一个TST,派发器可以去第三缓存器中读取该TST的目标输入数据的描述符。若派发器在第三缓存器中读取到该TST的目标输入数据的描述符,则派发器判断到需要预取该TST的目标输入数据。
3046:派发器生成预取目标输入数据的CMO任务。
在一种可能的实现方式中,针对任一个第一缓存器缓存的任一个TST,派发器从第三缓存器中读取该TST的目标输入数据的描述符,并根据该TST的目标输入数据的描述符生成预取该TST的目标输入数据的CMO任务。
3047:派发器向执行装置发送预取TST的目标输入数据的CMO任务。
其中,执行装置执行预取TST的目标输入数据的CMO任务,以将该TST的目标输入数据缓存在第四缓存器中。
3048:派发器向执行装置发送TST或CMO任务。
其中,对于CMO任务以及不需要预取目标输入数据的TST,派发器在执行完步骤3045后,执行步骤3048。对于需要预取目标输入数据的TST,派发器在执行完步骤3045后,可以先执行步骤3046和步骤3047,在执行装置预取到该TST的目标输入数据之后,再执行步骤3048。或者,对于需要预取目标输入数据的TST,步骤3046和步骤3047与步骤3048可以并行执行。具体视实际需求而定。
在一种可能的实现方式中,针对任一个第一缓存器缓存的任一个TST,派发器可以从第三缓存器中读取该TST的描述符,并根据该TST的描述符通知第三缓存器预取该TST的后序任务的描述符。同理,针对任一个第一缓存器缓存的任一个CMO任务,派发器可以从第三缓存器中读取该CMO任务的描述符,并根据该CMO任务的描述符通知第三缓存器预取该CMO任务的后序任务的描述符。
在一种可能的实现方式中,针对任一个第一缓存器缓存的任一个TST,派发器可以从第三缓存器中获取该TST的描述符,并根据该TST的描述符通知第三缓存器预取该TST的目标输出数据的描述符。
在一种可能的实现方式中,派发器可以将TST或CMO任务切分成一个或多个BST,并向执行装置发送该一个或多个BST。执行装置执行的最小单元为一个BST。
需要说明的是,图4介绍的是一个TST或CMO任务的调度和派发流程。实际上,调度器可能并行执行多个目标任务的调度,其中的每个目标任务的调度流程如图4所示。此外,派发器可能并行执行多个目标任务的派发,其中的每个目标任务的派发流程也如图4所示。
305:调度装置通过执行装置执行目标任务。
其中,执行装置包括多种类型的执行单元,不同类型的执行单元并行执行不同任务类型的目标任务,并给派发器返回目标任务执行完成的通知。
在一种可能的实现方式中,执行装置可以接收来自派发器的一个或多个BST,该一个或多个BST由同一个TST或CMO任务切分得到。由同一个TST或CMO任务切分得到的多个BST可以由相同类型的多个执行单元共同执行。多个执行单元中的每个执行单元执行多个BST中的至少一个BST。在每执行完该一个BST之后,执行单元向派发器返回该BST执行完成的通知。此外,如果该BST存在输出数据,执行单元还将该BST的输出数据缓存在第四缓存器中。应理解的是,一个TST包括多个BST,执行单元将每一个BST的输出数据缓存在第四缓存器中,从而将该TST的输出数据缓存在第四缓存器中。
306:调度装置通过派发器向MCU发送目标任务执行完成的通知。
其中,派发器在接收到一个目标任务执行完成的通知后,向MCU发送该目标任务执行完成的通知。
在一种可能的实现方式中,派发器在接收到一个TST或CMO任务的所有BST执行完成的通知后,向MCU发送该TST或CMO任务执行完成的通知。
307:调度装置通过MCU对执行完成的目标任务的后序任务进行控制依赖管理,以及对执行完成的目标任务的目标输入数据和目标输出数据进行数据生命周期管理。
具体地,MCU在接收到任一个目标任务执行完成的通知之后,对该目标任务的后序任务进行控制依赖管理。当该目标任务的后序任务的控制依赖解除以后,执行步骤308。
在一种可能的实现方式中,MCU在接收到任一个TST执行完成的通知之后,从第三缓存器中读取该TST的描述符。MCU根据该TST的描述符通知第三缓存器对该TST的后序任务的描述符中的第一计数进行减一操作。该TST的后序任务的描述符中的第一计数减为零时,该TST的后序任务的控制依赖解除。同理,MCU在接收到任一个CMO任务执行完成的通知之后,从第三缓存器中读取该CMO任务的描述符。MCU根据该CMO任务的描述符通知第三缓存器对该CMO任务的后序任务的描述符中的第一计数进行减一操作。该CMO任务的后序任务的描述符中的第一计数减为零时,该CMO任务的后序任务的控制依赖解除。
此外,MCU在接收到任一个目标任务执行完成的通知之后,还对目标任务的目标输入数据和目标输出数据进行数据生命周期管理。
在一种可能的实现方式中,MCU在接收到任一个TST执行完成的通知之后,从第三缓存器中读取该TST的描述符。MCU根据该TST的描述符通知第三缓存器对该TST的目标输入数据的描述符中的第二计数进行减一操作。当该TST的目标输入数据的描述符中的第二计数减为零时,则说明需要无效该TST的目标输入数据。
在一种可能的实现方式中,MCU在接收到任一个TST执行完成的通知之后,从第三缓存器中读取该TST的描述符。MCU根据该TST的描述符通知第三缓存器对该TST的目标输出数据的描述符中的第三计数进行减一操作。当该TST的目标输出数据的描述符中的第三计数减为零时,则说明需要回写该TST的目标输出数据。
308:调度装置通过MCU向调度器发送控制依赖解除的目标任务,返回执行步骤303。
其中,控制依赖解除的目标任务包括控制依赖解除的TST和CMO任务。
应理解的是,上述步骤303至步骤308中的每一步骤,均可以针对多个目标任务并行执行。也即,上述步骤303至步骤308中的每一步骤描述的目标任务可以是一个或多个。
需要说明的是,图3和图4所示实施例中各步骤的描述,可参见前述图1和图2所示实施例中的相关描述,此处不再赘述。
请参阅图5,图5是本申请提供的一种调度方法的流程示意图。该调度方法应用于调度装置,所述调度装置包括派发器,所述派发器与执行装置耦合;所述派发器包括多个第一缓存器,所述多个第一缓存器中的每个第一缓存器用于缓存一个任务类型的目标任务;所述目标任务包括线程子任务和缓存管理操作任务;所述线程子任务是对节点子任务进行切分得到的,所述节点子任务是对子图任务进行切分得到的,所述子图任务是对子图进行编译得到的;所述缓存管理操作任务用于指示对线程子任务的输入数据或输出数据进行缓存管理操作;该调度方法包括但不限于如下步骤或操作:
501:通过所述派发器接收多个第一目标任务,并根据任务类型将所述多个第一目标任务缓存在所述多个第一缓存器中;
502:通过所述派发器向所述执行装置派发多个第二目标任务,所述多个第二目标任务中的任意一个第二目标任务为所述多个第一缓存器缓存的目标任务,所述多个第二目标任务分别由不同的第一缓存器缓存。
在一种可能的实现方式中,所述调度装置还包括调度器,所述调度器包括多个第二缓存器;所述方法还包括:通过所述调度器接收多个第三目标任务,并将所述多个第三目标任务缓存在所述多个第二缓存器中;通过所述调度器向所述派发器发送所述多个第一目标任务,所述多个第一目标任务中的任意一个第一目标任务为所述多个第二缓存器缓存的目标任务。
在一种可能的实现方式中,所述多个第二缓存器中的每个第二缓存器用于缓存一个类别的目标任务;其中,同一个类别的目标任务的以下其中一项相同:任务类型,优先级,执行单元。
在一种可能的实现方式中,所述调度装置还包括微控制单元MCU和第三缓存器;所述第三缓存器缓存有第四目标任务的描述符,所述第四目标任务为所述多个第三目标任务中的任意一个;所述方法还包括:通过所述MCU从所述第三缓存器中读取所述第四目标任务的描述符;所述第四目标任务的描述符包括第一目标计数,所述第一目标计数用于表示未执行完成的第五目标任务的数量,所述第四目标任务依赖于所述第五目标任务;若所述第一目标计数为零,则通过所述MCU向所述调度器发送所述第四目标任务。
在一种可能的实现方式中,所述方法还包括:通过所述MCU通知所述第三缓存器获取并缓存第四目标任务的描述符。
在一种可能的实现方式中,所述执行装置包括多个执行单元;所述多个第一目标任务包括所述第四目标任务,所述多个第二目标任务包括所述第四目标任务;所述向所述执行装置派发多个第二目标任务,包括:从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第一目标数量,则将所述第四目标任务切分为所述第一目标数量个第一块子任务,以及向所述多个执行单元中的至少一个执行单元派发所述第一目标数量个第一块子任务,所述第一目标数量用于表示所述第四目标任务包括的第一块子任务的数量。
在一种可能的实现方式中,所述方法还包括:在通过所述派发器接收到来自所述至少一个执行单元的所述第一目标数量个第一块子任务执行完成的通知之后,通过所述派发器向所述MCU发送所述第四目标任务执行完成的通知。
在一种可能的实现方式中,所述方法还包括:通过所述调度器从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第一目标索引号,则通过所述调度器通知所述第三缓存器获取并缓存第一目标数据的描述符,所述第一目标索引号用于标识所述第一目标数据,所述第四目标任务的输入数据包括所述第一目标数据。
在一种可能的实现方式中,所述多个第一目标任务包括所述第四目标任务;所述方法还包括:通过所述派发器从所述第三缓存器中读取所述第一目标数据的描述符;若所述第一目标数据的描述符包括第二目标索引号,则通过所述派发器生成第一缓存管理操作任务,以及向所述执行装置派发所述第一缓存管理操作任务,所述第二目标索引号用于标识所述第四目标任务,所述第一缓存管理操作任务用于指示预取所述第一目标数据。
在一种可能的实现方式中,所述多个第二目标任务包括所述第四目标任务;所述第一目标数据的描述符还包括第二目标计数,所述第二目标计数用于表示未执行完成的第六目标任务的数量,所述第六目标任务的输入数据包括所述第一目标数据,所述第六目标任务包括所述第四目标任务;所述方法还包括:在通过所述MCU接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通过所述MCU通知所述第三缓存器将所述第二目标计数减一。
在一种可能的实现方式中,所述方法还包括:在所述第二目标计数减为零的情况下,通过所述MCU向所述调度器发送第二缓存管理操作任务,所述第二缓存管理操作任务用于指示无效所述第一目标数据。
在一种可能的实现方式中,所述多个第一目标任务包括所述第四目标任务;所述方法还包括:通过所述派发器从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第三目标索引号,则通过所述派发器通知所述第三缓存器获取并缓存第二目标数据的描述符,所述第三目标索引号用于标识所述第二目标数据,所述第二目标数据包括所述第四目标任务的输出数据的部分或全部。
在一种可能的实现方式中,所述多个第二目标任务包括所述第四目标任务;所述第二目标数据的描述符包括第三目标计数,所述第三目标计数用于表示未执行完成的第七目标任务的数量,所述第二目标数据包括所述第七目标任务的输出数据的部分或全部,所述第七目标任务包括所述第四目标任务;所述方法还包括:在通过所述MCU接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通过所述MCU通知所述第三缓存器将所述第三目标计数减一。
在一种可能的实现方式中,所述方法还包括:在所述第三目标计数减为零的情况下,通过所述MCU向所述调度器发送第三缓存管理操作任务,所述第三缓存管理操作任务用于指示将所述第二目标数据写入主机,所述调度装置与所述主机耦合。
在一种可能的实现方式中,所述多个第一目标任务包括所述第四目标任务,所述多个第二目标任务包括所述第四目标任务;所述方法还包括:通过所述派发器从所述第三缓存器中读取所述第四目标任务的描述符;若所述第四目标任务的描述符还包括第四目标索引号,则通过派发器通知所述第三缓存器获取并缓存第八目标任务的描述符,所述第四索引号用于标识所述第八目标任务,所述第八目标任务依赖于所述第四目标任务。
在一种可能的实现方式中,所述第八目标任务的描述符包括第四目标计数,所述第四目标计数用于表示未执行完成的第九目标任务的数量,所述第八目标任务依赖于所述第九目标任务,所述第九目标任务包括所述第四目标任务;所述方法还包括:在通过所述MCU接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通过所述MCU通知所述第三缓存器将所述第四目标计数减一。
在一种可能的实现方式中,所述方法还包括:在所述第四目标计数减为零的情况下,通过所述MCU向所述调度器发送所述第八目标任务。
需要说明的是,图5所示实施例中各步骤的描述,可参见上述图1至图4所示实施例中的相关描述,此处不再赘述。
本申请提供一种电子设备,该电子设备具有实现上述图5所示实施例中任意一种调度方法的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
本申请提供一种电子设备,该电子设备包括上述图2所示实施例中任意一种调度装置。该电子设备还可以包括存储器,存储器用于与该调度装置耦合,其保存该调度装置中处理器的必要的程序指令和数据。该电子设备还可以包括通信接口,用于该电子设备与其它设备或通信网络通信。
本申请提供一种计算机存储介质,所述计算机存储介质存储有计算机程序,该计算机程序被调度装置执行时,使得该调度装置可以执行上述图5所示实施例中任意一项所述的调度方法流程。
本申请提供一种计算机程序,该计算机程序包括指令,当该计算机程序被调度装置执行时,使得该调度装置可以执行上述图5所示实施例中任意一项所述的调度方法流程。
本申请提供一种芯片系统,该芯片系统包括上述图2所示实施例中任意一种调度装置。在一种可能的实现方式中,所述芯片系统还包括存储器,所述存储器,用于保存所述调度装置中处理器的必要或相关的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其它分立器件。
应理解的是,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本说明书中所提供的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
上述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例上述方法的全部或部分步骤。
本申请方法中的步骤可以根据实际需要进行顺序调整、合并和删减。此外,本申请各实施例中的术语、解释说明,可以参照其他实施例中相应的描述。
本申请装置中的模块可以根据实际需要进行合并、划分和删减。
以上描述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (34)

1.一种调度装置,其特征在于,包括派发器,所述派发器与执行装置耦合;所述派发器包括多个第一缓存器,所述多个第一缓存器中的每个第一缓存器用于缓存一个任务类型的目标任务;所述目标任务包括线程子任务和缓存管理操作任务;所述线程子任务是对节点子任务进行切分得到的,所述节点子任务是对子图任务进行切分得到的,所述子图任务是对子图进行编译得到的;所述缓存管理操作任务用于指示对线程子任务的输入数据或输出数据进行缓存管理操作;
所述派发器,用于:
接收多个第一目标任务,并根据任务类型将所述多个第一目标任务缓存在所述多个第一缓存器中;
向所述执行装置派发多个第二目标任务,所述多个第二目标任务中的任意一个第二目标任务为所述多个第一缓存器缓存的目标任务,所述多个第二目标任务分别由不同的第一缓存器缓存。
2.根据权利要求1所述的调度装置,其特征在于,所述调度装置还包括调度器,所述调度器包括多个第二缓存器;
所述调度器,用于:
接收多个第三目标任务,并将所述多个第三目标任务缓存在所述多个第二缓存器中;
向所述派发器发送所述多个第一目标任务,所述多个第一目标任务中的任意一个第一目标任务为所述多个第二缓存器缓存的目标任务。
3.根据权利要求2所述的调度装置,其特征在于,所述多个第二缓存器中的每个第二缓存器用于缓存一个类别的目标任务;其中,同一个类别的目标任务的以下其中一项相同:任务类型,优先级,执行单元。
4.根据权利要求2或3所述的调度装置,其特征在于,所述调度装置还包括微控制单元MCU和第三缓存器;所述第三缓存器缓存有第四目标任务的描述符,所述第四目标任务为所述多个第三目标任务中的任意一个;
所述MCU,用于:
从所述第三缓存器中读取所述第四目标任务的描述符;所述第四目标任务的描述符包括第一目标计数,所述第一目标计数用于表示未执行完成的第五目标任务的数量,所述第四目标任务依赖于所述第五目标任务;
若所述第一目标计数为零,则向所述调度器发送所述第四目标任务。
5.根据权利要求4所述的调度装置,其特征在于,所述MCU,还用于:
通知所述第三缓存器获取并缓存第四目标任务的描述符。
6.根据权利要求4或5所述的调度装置,其特征在于,所述执行装置包括多个执行单元;所述多个第一目标任务包括所述第四目标任务,所述多个第二目标任务包括所述第四目标任务;
所述派发器,具体用于:
从所述第三缓存器中读取所述第四目标任务的描述符;
若所述第四目标任务的描述符还包括第一目标数量,则将所述第四目标任务切分为所述第一目标数量个第一块子任务,以及向所述多个执行单元中的至少一个执行单元派发所述第一目标数量个第一块子任务,所述第一目标数量用于表示所述第四目标任务包括的第一块子任务的数量。
7.根据权利要求6所述的调度装置,其特征在于,所述派发器,还用于:
在接收到来自所述至少一个执行单元的所述第一目标数量个第一块子任务执行完成的通知之后,向所述MCU发送所述第四目标任务执行完成的通知。
8.根据权利要求4-7任一项所述的调度装置,其特征在于,所述调度器,还用于:
从所述第三缓存器中读取所述第四目标任务的描述符;
若所述第四目标任务的描述符还包括第一目标索引号,则通知所述第三缓存器获取并缓存第一目标数据的描述符,所述第一目标索引号用于标识所述第一目标数据,所述第四目标任务的输入数据包括所述第一目标数据。
9.根据权利要求8所述的调度装置,其特征在于,所述多个第一目标任务包括所述第四目标任务;
所述派发器,还用于:
从所述第三缓存器中读取所述第一目标数据的描述符;
若所述第一目标数据的描述符包括第二目标索引号,则生成第一缓存管理操作任务,以及向所述执行装置派发所述第一缓存管理操作任务,所述第二目标索引号用于标识所述第四目标任务,所述第一缓存管理操作任务用于指示预取所述第一目标数据。
10.根据权利要求8或9所述的调度装置,其特征在于,所述多个第二目标任务包括所述第四目标任务;所述第一目标数据的描述符还包括第二目标计数,所述第二目标计数用于表示未执行完成的第六目标任务的数量,所述第六目标任务的输入数据包括所述第一目标数据,所述第六目标任务包括所述第四目标任务;
所述MCU,还用于:
在接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通知所述第三缓存器将所述第二目标计数减一。
11.根据权利要求10所述的调度装置,其特征在于,所述MCU,还用于:
在所述第二目标计数减为零的情况下,向所述调度器发送第二缓存管理操作任务,所述第二缓存管理操作任务用于指示无效所述第一目标数据。
12.根据权利要求4-11任一项所述的调度装置,其特征在于,所述多个第一目标任务包括所述第四目标任务;
所述派发器,还用于:
从所述第三缓存器中读取所述第四目标任务的描述符;
若所述第四目标任务的描述符还包括第三目标索引号,则通知所述第三缓存器获取并缓存第二目标数据的描述符,所述第三目标索引号用于标识所述第二目标数据,所述第二目标数据包括所述第四目标任务的输出数据的部分或全部。
13.根据权利要求12所述的调度装置,其特征在于,所述多个第二目标任务包括所述第四目标任务;所述第二目标数据的描述符包括第三目标计数,所述第三目标计数用于表示未执行完成的第七目标任务的数量,所述第二目标数据包括所述第七目标任务的输出数据的部分或全部,所述第七目标任务包括所述第四目标任务;
所述MCU,还用于:
在接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通知所述第三缓存器将所述第三目标计数减一。
14.根据权利要求13所述的调度装置,其特征在于,所述MCU,还用于:
在所述第三目标计数减为零的情况下,向所述调度器发送第三缓存管理操作任务,所述第三缓存管理操作任务用于指示将所述第二目标数据写入主机,所述调度装置与所述主机耦合。
15.根据权利要求4-14任一项所述的调度装置,其特征在于,所述多个第一目标任务包括所述第四目标任务,所述多个第二目标任务包括所述第四目标任务;
所述派发器,还用于:
从所述第三缓存器中读取所述第四目标任务的描述符;
若所述第四目标任务的描述符还包括第四目标索引号,则通知所述第三缓存器获取并缓存第八目标任务的描述符,所述第四索引号用于标识所述第八目标任务,所述第八目标任务依赖于所述第四目标任务。
16.根据权利要求15所述的调度装置,其特征在于,所述第八目标任务的描述符包括第四目标计数,所述第四目标计数用于表示未执行完成的第九目标任务的数量,所述第八目标任务依赖于所述第九目标任务,所述第九目标任务包括所述第四目标任务;
所述MCU,还用于:
在接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通知所述第三缓存器将所述第四目标计数减一。
17.根据权利要求16所述的调度装置,其特征在于,所述MCU,还用于:
在所述第四目标计数减为零的情况下,向所述调度器发送所述第八目标任务。
18.一种调度方法,其特征在于,应用于调度装置,所述调度装置包括派发器,所述派发器与执行装置耦合;所述派发器包括多个第一缓存器,所述多个第一缓存器中的每个第一缓存器用于缓存一个任务类型的目标任务;所述目标任务包括线程子任务和缓存管理操作任务;所述线程子任务是对节点子任务进行切分得到的,所述节点子任务是对子图任务进行切分得到的,所述子图任务是对子图进行编译得到的;所述缓存管理操作任务用于指示对线程子任务的输入数据或输出数据进行缓存管理操作;
所述方法包括:
通过所述派发器接收多个第一目标任务,并根据任务类型将所述多个第一目标任务缓存在所述多个第一缓存器中;
通过所述派发器向所述执行装置派发多个第二目标任务,所述多个第二目标任务中的任意一个第二目标任务为所述多个第一缓存器缓存的目标任务,所述多个第二目标任务分别由不同的第一缓存器缓存。
19.根据权利要求18所述的方法,其特征在于,所述调度装置还包括调度器,所述调度器包括多个第二缓存器;
所述方法还包括:
通过所述调度器接收多个第三目标任务,并将所述多个第三目标任务缓存在所述多个第二缓存器中;
通过所述调度器向所述派发器发送所述多个第一目标任务,所述多个第一目标任务中的任意一个第一目标任务为所述多个第二缓存器缓存的目标任务。
20.根据权利要求19所述的方法,其特征在于,所述多个第二缓存器中的每个第二缓存器用于缓存一个类别的目标任务;其中,同一个类别的目标任务的以下其中一项相同:任务类型,优先级,执行单元。
21.根据权利要求19或20所述的方法,其特征在于,所述调度装置还包括微控制单元MCU和第三缓存器;所述第三缓存器缓存有第四目标任务的描述符,所述第四目标任务为所述多个第三目标任务中的任意一个;
所述方法还包括:
通过所述MCU从所述第三缓存器中读取所述第四目标任务的描述符;所述第四目标任务的描述符包括第一目标计数,所述第一目标计数用于表示未执行完成的第五目标任务的数量,所述第四目标任务依赖于所述第五目标任务;
若所述第一目标计数为零,则通过所述MCU向所述调度器发送所述第四目标任务。
22.根据权利要求21所述的方法,其特征在于,所述方法还包括:
通过所述MCU通知所述第三缓存器获取并缓存第四目标任务的描述符。
23.根据权利要求21或22所述的方法,其特征在于,所述执行装置包括多个执行单元;所述多个第一目标任务包括所述第四目标任务,所述多个第二目标任务包括所述第四目标任务;
所述向所述执行装置派发多个第二目标任务,包括:
从所述第三缓存器中读取所述第四目标任务的描述符;
若所述第四目标任务的描述符还包括第一目标数量,则将所述第四目标任务切分为所述第一目标数量个第一块子任务,以及向所述多个执行单元中的至少一个执行单元派发所述第一目标数量个第一块子任务,所述第一目标数量用于表示所述第四目标任务包括的第一块子任务的数量。
24.根据权利要求23所述的方法,其特征在于,所述方法还包括:
在通过所述派发器接收到来自所述至少一个执行单元的所述第一目标数量个第一块子任务执行完成的通知之后,通过所述派发器向所述MCU发送所述第四目标任务执行完成的通知。
25.根据权利要求21-24任一项所述的方法,其特征在于,所述方法还包括:
通过所述调度器从所述第三缓存器中读取所述第四目标任务的描述符;
若所述第四目标任务的描述符还包括第一目标索引号,则通过所述调度器通知所述第三缓存器获取并缓存第一目标数据的描述符,所述第一目标索引号用于标识所述第一目标数据,所述第四目标任务的输入数据包括所述第一目标数据。
26.根据权利要求25所述的方法,其特征在于,所述多个第一目标任务包括所述第四目标任务;
所述方法还包括:
通过所述派发器从所述第三缓存器中读取所述第一目标数据的描述符;
若所述第一目标数据的描述符包括第二目标索引号,则通过所述派发器生成第一缓存管理操作任务,以及向所述执行装置派发所述第一缓存管理操作任务,所述第二目标索引号用于标识所述第四目标任务,所述第一缓存管理操作任务用于指示预取所述第一目标数据。
27.根据权利要求25或26所述的方法,其特征在于,所述多个第二目标任务包括所述第四目标任务;所述第一目标数据的描述符还包括第二目标计数,所述第二目标计数用于表示未执行完成的第六目标任务的数量,所述第六目标任务的输入数据包括所述第一目标数据,所述第六目标任务包括所述第四目标任务;
所述方法还包括:
在通过所述MCU接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通过所述MCU通知所述第三缓存器将所述第二目标计数减一。
28.根据权利要求27所述的方法,其特征在于,所述方法还包括:
在所述第二目标计数减为零的情况下,通过所述MCU向所述调度器发送第二缓存管理操作任务,所述第二缓存管理操作任务用于指示无效所述第一目标数据。
29.根据权利要求21-28任一项所述的方法,其特征在于,所述多个第一目标任务包括所述第四目标任务;
所述方法还包括:
通过所述派发器从所述第三缓存器中读取所述第四目标任务的描述符;
若所述第四目标任务的描述符还包括第三目标索引号,则通过所述派发器通知所述第三缓存器获取并缓存第二目标数据的描述符,所述第三目标索引号用于标识所述第二目标数据,所述第二目标数据包括所述第四目标任务的输出数据的部分或全部。
30.根据权利要求29所述的方法,其特征在于,所述多个第二目标任务包括所述第四目标任务;所述第二目标数据的描述符包括第三目标计数,所述第三目标计数用于表示未执行完成的第七目标任务的数量,所述第二目标数据包括所述第七目标任务的输出数据的部分或全部,所述第七目标任务包括所述第四目标任务;
所述方法还包括:
在通过所述MCU接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通过所述MCU通知所述第三缓存器将所述第三目标计数减一。
31.根据权利要求30所述的方法,其特征在于,所述方法还包括:
在所述第三目标计数减为零的情况下,通过所述MCU向所述调度器发送第三缓存管理操作任务,所述第三缓存管理操作任务用于指示将所述第二目标数据写入主机,所述调度装置与所述主机耦合。
32.根据权利要求21-31任一项所述的方法,其特征在于,所述多个第一目标任务包括所述第四目标任务,所述多个第二目标任务包括所述第四目标任务;
所述方法还包括:
通过所述派发器从所述第三缓存器中读取所述第四目标任务的描述符;
若所述第四目标任务的描述符还包括第四目标索引号,则通过所述派发器通知所述第三缓存器获取并缓存第八目标任务的描述符,所述第四索引号用于标识所述第八目标任务,所述第八目标任务依赖于所述第四目标任务。
33.根据权利要求32所述的方法,其特征在于,所述第八目标任务的描述符包括第四目标计数,所述第四目标计数用于表示未执行完成的第九目标任务的数量,所述第八目标任务依赖于所述第九目标任务,所述第九目标任务包括所述第四目标任务;
所述方法还包括:
在通过所述MCU接收到来自所述派发器的所述第四目标任务执行完成的通知之后,通过所述MCU通知所述第三缓存器将所述第四目标计数减一。
34.根据权利要求33所述的方法,其特征在于,所述方法还包括:
在所述第四目标计数减为零的情况下,通过所述MCU向所述调度器发送所述第八目标任务。
CN202210601624.3A 2022-05-30 2022-05-30 调度装置、方法及相关设备 Pending CN117193951A (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN202210601624.3A CN117193951A (zh) 2022-05-30 2022-05-30 调度装置、方法及相关设备
EP23815120.3A EP4495768A4 (en) 2022-05-30 2023-05-27 PROGRAMMING APPARATUS AND METHOD, AND ASSOCIATED DEVICE
PCT/CN2023/096700 WO2023231937A1 (zh) 2022-05-30 2023-05-27 调度装置、方法及相关设备
US18/963,706 US20250094218A1 (en) 2022-05-30 2024-11-28 Scheduling apparatus and method, and related device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210601624.3A CN117193951A (zh) 2022-05-30 2022-05-30 调度装置、方法及相关设备

Publications (1)

Publication Number Publication Date
CN117193951A true CN117193951A (zh) 2023-12-08

Family

ID=88992917

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210601624.3A Pending CN117193951A (zh) 2022-05-30 2022-05-30 调度装置、方法及相关设备

Country Status (4)

Country Link
US (1) US20250094218A1 (zh)
EP (1) EP4495768A4 (zh)
CN (1) CN117193951A (zh)
WO (1) WO2023231937A1 (zh)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109408243B (zh) * 2018-11-13 2021-08-10 郑州云海信息技术有限公司 一种基于rdma的数据处理方法、装置和介质
CN112463709B (zh) * 2019-09-09 2025-01-10 苏州登临科技有限公司 可配置的异构人工智能处理器
US11204872B2 (en) * 2019-10-25 2021-12-21 EMC IP Holding Company LLC Achieving guaranteed application performance using transactional I/O scheduling for SSD storage using known read/write latencies
US11726793B2 (en) * 2019-11-15 2023-08-15 Intel Corporation Data locality enhancement for graphics processing units
CN111813554A (zh) * 2020-07-17 2020-10-23 济南浪潮数据技术有限公司 一种任务调度处理方法、装置及电子设备和存储介质
CN112199180A (zh) * 2020-10-21 2021-01-08 北京三快在线科技有限公司 多任务调度的方法及装置、电子设备及可读存储介质

Also Published As

Publication number Publication date
US20250094218A1 (en) 2025-03-20
EP4495768A4 (en) 2025-07-09
WO2023231937A1 (zh) 2023-12-07
EP4495768A1 (en) 2025-01-22

Similar Documents

Publication Publication Date Title
US12131186B2 (en) Hardware accelerated dynamic work creation on a graphics processing unit
Zhou et al. S^ 3dnn: Supervised streaming and scheduling for gpu-accelerated real-time dnn workloads
US9009711B2 (en) Grouping and parallel execution of tasks based on functional dependencies and immediate transmission of data results upon availability
EP2652615B1 (en) Graphics compute process scheduling
US9176795B2 (en) Graphics processing dispatch from user mode
US20120229481A1 (en) Accessibility of graphics processing compute resources
US20120180072A1 (en) Optimizing Communication of System Call Requests
CN104102542A (zh) 一种网络数据包处理方法和装置
US20110063311A1 (en) Course Grain Command Buffer
Elliott et al. Supporting real-time computer vision workloads using OpenVX on multicore+ GPU platforms
Hartmann et al. Gpuart-an application-based limited preemptive gpu real-time scheduler for embedded systems
CN113874906B (zh) 资源受限调度的编程模型
CN104094235A (zh) 多线程计算
US20160371116A1 (en) Heterogeneous enqueuing and dequeuing mechanism for task scheduling
CN116414464B (zh) 调度任务的方法和装置、电子设备和计算机可读介质
CN104820582A (zh) 一种基于Navigator的多核嵌入式DSP并行编程模型实现方法
US12204774B2 (en) Allocation of resources when processing at memory level through memory request scheduling
CN111597044A (zh) 任务调度方法、装置、存储介质及电子设备
CN117193951A (zh) 调度装置、方法及相关设备
CN112114967B (zh) 一种基于服务优先级的gpu资源预留方法
Luley GPU Resource Optimization and Scheduling for Shared Execution Environments
Boukerche et al. Design and performance evaluation of a real-time RTI infrastructure for large-scale distributed simulations
Jr et al. Energy Reduction in Distributed Real-Time Embedded Applications

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