CN112395010A - 实现工作负载的静态映射的乱序流水线执行的方法和装置 - Google Patents

实现工作负载的静态映射的乱序流水线执行的方法和装置 Download PDF

Info

Publication number
CN112395010A
CN112395010A CN202010559855.3A CN202010559855A CN112395010A CN 112395010 A CN112395010 A CN 112395010A CN 202010559855 A CN202010559855 A CN 202010559855A CN 112395010 A CN112395010 A CN 112395010A
Authority
CN
China
Prior art keywords
credits
buffer
workload
threshold number
scheduler
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
CN202010559855.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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Priority to CN202210600897.6A priority Critical patent/CN114895965A/zh
Publication of CN112395010A publication Critical patent/CN112395010A/zh
Pending legal-status Critical Current

Links

Images

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/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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
    • 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/22Microcontrol or microprogram arrangements
    • G06F9/28Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy
    • 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/505Allocation 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 load
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • 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/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Biophysics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Neurology (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)

Abstract

本公开涉及实现工作负载的静态映射的乱序流水线执行的方法和装置。公开了实现到加速器的一个或多个计算构建块的工作负载的静态映射的乱序流水线执行的方法、装置、系统和制品。示例装置包括:接口,该接口用于将第一数量的信用加载到存储器中;比较器,该比较器用于将第一数量的信用与阈值信用数量进行比较,其中,阈值信用数量与缓冲器中的存储器可用性相关联;以及分派器,该分派器用于当第一数量的信用满足阈值信用数量时,选择工作负载中要在一个或多个计算构建块中的第一计算构建块处执行的工作负载节点。

Description

实现工作负载的静态映射的乱序流水线执行的方法和装置
技术领域
本公开总体涉及处理,并且更具体地,涉及实现工作负载的静态映射的乱序流水线执行的方法和装置。
背景技术
计算机硬件制造商开发用于在计算机平台的各种组件中使用的硬件组件。例如,计算机硬件制造商开发主板、用于主板的芯片组、中央处理单元(CPU)、硬盘驱动器(HDD)、固态驱动器(SSD)、以及其他计算机组件。此外,计算机硬件制造商开发被称为加速器的处理元件,以加速对工作负载的处理。例如,加速器可以是CPU、图形处理单元(GPU)、视觉处理单元(VPU)、和/或现场可编程门阵列(FPGA)。
发明内容
根据本公开的实施例,提供了一种实现工作负载的静态映射的乱序流水线执行的装置,该装置包括:接口,所述接口用于将第一数量的信用加载到存储器中;比较器,所述比较器用于将所述第一数量的信用与阈值信用数量进行比较,其中,所述阈值信用数量与缓冲器中的存储器可用性相关联;以及分派器,所述分派器用于当所述第一数量的信用满足所述阈值信用数量时,选择所述工作负载中要在一个或多个计算构建块中的第一计算构建块处执行的工作负载节点。
根据本公开的实施例,提供了一种计算机可读存储介质,包括指令,所述指令当被执行时使得至少一个处理器至少执行以下操作:将第一数量的信用加载到存储器中;将所述第一数量的信用与阈值信用数量进行比较,其中,所述阈值信用数量与缓冲器中的存储器可用性相关联;以及当所述第一数量的信用满足所述阈值信用数量时,选择工作负载中要在计算构建块处执行的工作负载节点。
根据本公开的实施例,提供了一种实现工作负载的静态映射的乱序流水线执行的设备,包括:接口连接装置,所述接口连接装置用于进行接口连接以将第一数量的信用加载到存储器中;比较装置,所述比较装置用于将所述第一数量的信用与阈值信用数量进行比较,其中,所述阈值信用数量与缓冲器中的存储器可用性相关联;以及分派装置,所述分派装置用于当所述第一数量的信用满足所述阈值信用数量时,选择工作负载中要在一个或多个计算构建块中的第一计算构建块处执行的工作负载节点。
根据本公开的实施例,提供了一种实现工作负载的静态映射的乱序流水线执行的方法,包括:将第一数量的信用加载到存储器中;将所述第一数量的信用与阈值信用数量进行比较,其中,所述阈值信用数量与缓冲器中的存储器可用性相关联;以及当所述第一数量的信用满足所述阈值信用数量时,选择工作负载中要在一个或多个计算构建块中的第一计算构建块处执行的工作负载节点。
附图说明
图1是表示在异构系统的加速器上执行的工作负载的图形的图形图示。
图2是表示在实现流水线和缓冲器的异构系统的加速器上执行的工作负载的图形的图形图示。
图3是示出根据本公开的教导构造的示例计算系统的框图。
图4是示出包括示例一个或多个调度器的示例计算系统的框图。
图5是可以实现图3和图4的调度器中的一个或多个的示例调度器的框图。
图6是示出图5的缓冲器信用存储器件进一步细节的示例调度器的框图。
图7是表示在实现流水线和缓冲器的异构系统的加速器上执行的工作负载的示例图形的图形图示。
图8是表示可以由机器可读指令来实现的过程的流程图,这些机器可读指令可以被执行以实现图5的调度器和/或图6的调度器。
图9是示例处理器平台的框图,该示例处理器平台被构造为执行图8的指令以实现图5的调度器和/或图6的调度器的实例中的一个或多个。
附图不是按比例的。一般而言,相同的标号将在各幅图和伴随的书面描述的各处用于指代相同或相似的部件。连接引用(例如,附接、耦合、连接、以及接合)应被广义地解释,并且除非另外指明,否则其可包括元件集合之间的中间构件以及元件之间的相对移动。因此,连接引用不一定表示两个元件直接连接并且彼此成固定关系。
本文中在识别可被分开提及的多个元素或组件时使用描述语“第一”、“第二”、“第三”等等。除非另有指明或者基于其使用上下文另有理解,否则这种描述语并不打算灌输优先级、物理顺序或者列表中的布置或者时间上的排序的任何含义,而只是用作用于分开提及多个元素或组件的标签,以便容易理解公开的示例。在一些示例中,描述语“第一”在具体实施方式中可用于提及某一元素,而同一元素在权利要求中可用不同的描述语来提及,例如“第二”或“第三”。在这种情况中,应当理解这种描述语只是为了容易引用多个元素或组件而使用的。
具体实施方式
许多计算机硬件制造商开发被称为加速器的处理元件,以加速对工作负载的处理。例如,加速器可以是中央处理单元(CPU)、图形处理单元(GPU)、视觉处理单元(VPU)、和/或现场可编程门阵列(FPGA)。此外,虽然加速器能够处理任何类型的工作负载,但其被设计为优化特定类型的工作负载。例如,虽然CPU和FPGA可以被设计为处置更一般的处理,但GPU可以被设计为改进对视频、游戏、和/或其他基于物理和数学的计算的处理,并且VPU可以被设计为改进对机器视觉任务的处理。
此外,一些加速器被专门设计为改进对人工智能(AI)应用的处理。虽然VPU是特定类型的AI加速器,但是可以使用许多不同的AI加速器。实际上,许多AI加速器可以由专用集成电路(ASIC)实现。这样的基于ASIC的AI加速器可被设计为改进对与特定类型的AI相关的任务的处理,例如,机器学习(ML)、深度学习(DL)、和/或其他人工机器驱动逻辑(包括支持向量机(SVM)、神经网络(NN)、递归神经网络(RNN)、卷积神经网络(CNN)、长短期存储器(LSTM)、门递归单元(GRU))。
计算机硬件制造商还开发包括多于一种类型的处理元件的异构系统。例如,计算机硬件制造商可以将通用处理元件(例如,CPU)与通用加速器(例如,FPGA)、和/或更专用的加速器(例如,GPU、VPU和/或其他AI加速器)组合。这样的异构系统可以被实现为片上系统(SoC)。
当开发者期望在异构系统上运行函数、算法、程序、应用、和/或其他代码时,开发者和/或软件在编译时针对该函数、算法、程序、应用、和/或其他代码生成调度。一旦生成了调度,该调度就与函数、算法、程序、应用、和/或其他代码规范进行组合以生成可执行文件(预先(Ahead of Time)或者实时(Just in Time)范式)。此外,函数、算法、程序、应用、和/或其他代码可以被表示为包括节点的图形,其中该图形表示工作负载,并且每个节点表示该工作负载的特定任务。此外,图形中的不同节点之间的连接表示为了执行特定节点而需要的数据输入和/或输出,并且图形的顶点表示图形的节点之间的数据依赖关系。
可执行文件包括一定数量的不同的可执行部分,其中,每个可执行部分可以由特定的处理元件(例如,CPU、GPU、VPU、和/或FPGA)执行。可执行文件的每个可执行部分还可以包括可执行子部分,其中,每个可执行子部分可以由特定处理元件的计算构建块(CBB)执行。附加地或替代地,在本文中所公开的一些示例中,开发者和/或软件开发软件可以定义用于确定可执行文件的成功执行的标准(例如,成功标准)。例如,这样的成功标准可以对应于执行可执行文件以满足和/或以其他方式达到异构系统和/或特定处理元件的利用阈值。在其他示例中,成功标准可以对应于在阈值时间量内执行可执行文件。然而,当确定如何在异构系统和/或特定处理元件上执行可执行文件时,可以利用任何合适的成功函数。如此,成功标准可以有利于开发者、软件、和/或人工智能系统生成可执行文件,该可执行文件包括被优化以满足成功标准的调度。
图1是表示工作负载在异构系统的加速器上执行的工作负载的图形100的图形图示。图形100包括第一工作负载节点102(WN[0])、第二工作负载节点104(WN[1])、第三工作负载节点106(WN[2])、第四工作负载节点108(WN[3])、以及第五工作负载节点110(WN[4])。在图1中,加速器正在通过静态软件调度来运行由图形100表示的工作负载。静态软件调度包括确定用于在加速器的计算构建块(CBB)上执行图形100的不同工作负载节点的预定义方式。例如,静态软件调度将第一工作负载节点102(WN[0])分配给第一CBB 112,将第二工作负载节点104(WN[1])分配给第二CBB 114,将第三工作负载节点106(WN[2])分配给第三CBB 116,将第四工作负载节点108(WN[3])分配给第四CBB118,将第五工作负载节点110(WN[4])分配给第二CBB 114。
在图1中,静态软件调度描绘(outline)了:与在第四CBB 118上执行第四工作负载节点108(WN[3])并行地,将在第一CBB 112上执行第一工作负载节点102(WN[0])。在图1中,第四CBB 118执行第四工作负载节点108(WN[3])的速度比第一CBB 112执行第一工作负载节点102(WN[0])的速度更快。由于静态软件调度描绘第二CBB 114将在第二CBB 114执行第五工作负载节点110(WN[4])之前执行第二工作负载节点104(WN[1]),第二CBB 114直到第一CBB 112完成第一工作负载节点102(WN[0])的执行为止是空闲的。此外,等待工作负载节点被完全执行之后再执行后续工作负载节点需要很大的存储器开销,因为在CBB能够执行第二工作负载节点(例如,第二工作负载节点104(WN[1]))之前,由CBB执行第一工作负载节点(例如,第一工作负载节点102(WN[0])产生的数据需要被存储在加速器上。
图2是表示在实现流水线和缓冲器的异构系统的加速器上执行的工作负载的图形200的图形图示。图形200包括第一工作负载节点102(WN[0])、第二工作负载节点104(WN[1])、第三工作负载节点106(WN[2])、第四工作负载节点108(WN[3])、以及第五工作负载节点110(WN[4])。在图2中,加速器通过静态软件调度来运行由图形200表示的工作负载。图2的静态软件调度描绘针对图形200的不同工作负载节点在加速器的CBB上的执行调度,该加速器实现流水线并且包括第一缓冲器202、第二缓冲器204、以及第三缓冲器206。此外,静态软件调度将第一工作负载节点102(WN[0])分配给第一CBB 112,将第二工作负载节点104(WN[1])分配给第二CBB 114,将第三工作负载节点106(WN[2])分配给第三CBB 116,将第四工作负载节点108(WN[3])分配给第四CBB 118,将第五工作负载节点110(WN[4])分配给第二CBB114。第一缓冲器202耦合到第一CBB 112和第二CBB 114,第二缓冲器204耦合到第二CBB 114和第三CBB 116,第三缓冲器206耦合到第四CBB 118和第二CBB 114。
缓冲器202、204、以及206允许静态软件调度以描绘每个CBB将在一时间间隔内处理工作负载节点的一部分(例如,瓦片(tile)),而非在该时间间隔内执行整个工作负载节点。类似地,静态软件调度可以描绘:当工作负载的部分(例如,瓦片)可用时,处理由其他CBB(例如,消耗者)产生的数据的CBB可以执行工作负载节点的这些部分。然而,由于执行工作负载节点的CBB处理可用数据并且将新数据写入到存储器,因此为了在CBB上执行给定的工作负载节点,在运行时必须有阈值数量的数据可用,并且存储器中必须有阈值数量的空间以在运行时写入结果。虽然缓冲器通过基础的静态软件调度减少了存储器开销,但由于静态软件调度高度地依赖于运行时的数据可用性和/或依赖性,因此越来越难以描绘使用缓冲器的静态软件调度。此外,由于整个加速器的负载可能影响加速器上每个CBB的处理速度,因此很难开发有效地利用给定加速器的CBB的静态软件调度。
本文中公开的示例包括用于实现工作负载的静态映射的乱序流水线执行的方法和装置。与静态软件调度相反,本文中公开的示例不依赖于预定的静态软件调度。而是,本文中公开的示例基于加速器和/或其他处理元件上的可用数据和可用存储器来确定要运行已分配给给定CBB的哪些工作负载节点。此外,每个CBB追踪与给定工作负载相关联的、第一缓冲器中可用的数据量(表示为第一数量的信用),以及追踪第二缓冲器中可用的空间量(表示为第二数量的信用)。这允许对给定CBB上的工作负载节点进行动态运行时调度。
针对每个工作负载节点,当第一数量的信用满足第一阈值并且第二数量的信用满足第二阈值时,CBB可以执行工作负载节点。这允许独立于给定总体工作负载图形的乱序流水线执行。本文中公开的示例提供用于实现工作负载到加速器的一个或多个计算构建块的静态映射的乱序流水线执行的装置。示例装置包括:接口,该接口用于将第一数量的信用加载到存储器中;比较器,该比较器用于将第一数量的信用与阈值信用数量进行比较,该阈值信用数量与缓冲器中的存储器可用性相关联;以及分派器,该分派器当第一数量的信用满足阈值信用数量时,选择工作负载中要在一个或多个计算构建块中的第一计算构建块上执行的工作负载节点。
图3是示出根据本发明的教导构造的示例计算系统300的框图。在图3的示例中,计算系统300包括示例系统存储器302和示例异构系统304。示例异构系统304包括示例主机处理器306、示例第一通信总线308、示例第一加速器310a、示例第二加速器310b、以及示例第三加速器310c。示例第一加速器310a、示例第二加速器310b、以及示例第三加速器310c中的每一者包括各种CBB,这些CBB中的一部分通用于加速器的操作,一部分特定于相应加速器的操作。
在图3的示例中,系统存储器302耦合到异构系统304。系统存储器302是存储器。在图3中,系统存储器302是主机处理器306、第一加速器310a、第二加速器310b和第三加速器310c中的至少一者之间的共享存储器件。在图3的示例中,系统存储器302是在计算系统300本地的物理存储器件;然而,在其他示例中,系统存储器302可以位于计算系统300外部和/或以其他方式相对于计算系统是远程的。在另外的示例中,系统存储器302可以是虚拟存储器件。在图3的示例中,系统存储器302是永久性存储器件(例如,只读存储器(ROM)、可编程ROM(PROM)、可擦除PROM(EPROM)、电可擦除PROM(EEPROM)等)。在其他示例中,系统存储器302可以是永久性基本输入/输出系统(BIOS)或闪存。在另外的示例中,系统存储器302可以是易失性存储器。
在图3中,异构系统304耦合到系统存储器302。在图3的示例中,异构系统304通过在主机处理器306和/或第一加速器310a、第二加速器310b、或第三加速器310c中的一者或多者上执行工作负载来处理工作负载。在图3中,异构系统304是SoC。替代地,异构系统304可以是任何其他类型的计算或硬件系统。
在图3的示例中,主机处理器306是执行指令(例如,机器可读指令)以执行、运行和/或促进完成与计算机或计算设备(例如,计算系统300)相关联的操作的处理元件。在图3的示例中,主机处理器306是异构系统304的主要处理元件,并且其包括至少一个核心。替代地,主机处理器306可以是共同主处理元件(例如,在使用多于一个CPU的示例中),而在其他示例中,主机处理器306可以是次要处理元件。
在图3的所示示例中,第一加速器310a、第二加速器310b、和/或第三加速器310c中的一者或多者是可以由在异构系统304上执行的程序用于计算任务(例如,硬件加速)的处理元件。例如,第一加速器310a是包括处理资源的处理元件,该处理资源被设计和/或以其他方式配置或构造为改进处理AI(例如,VPU)的机器视觉任务的处理速度和整体性能。
在本文中公开的示例中,主机处理器306、第一加速器310a、第二加速器310b、以及第三加速器310c中的每一者与计算系统300和/或系统存储器302的其他元件通信。例如,主机处理器306、第一加速器310a、第二加速器310b、第三加速器310c、和/或系统存储器302通过第一通信总线308进行通信。在本文中公开的一些示例中,主机处理器306、第一加速器310a、第二加速器310b、第三加速器310c、和/或系统存储器302可以通过任何合适的有线和/或无线通信系统进行通信。此外,在本文中公开的一些示例中,主机处理器306、第一加速器310a、第二加速器310b、第三加速器310c、和/或系统存储器302中的每一者可以通过任何合适的有线和/或无线通信系统与计算系统300外部的任何组件进行通信。
在图3的示例中,第一加速器310a包括示例卷积引擎312、示例RNN引擎314、示例存储器316、示例存储器管理单元(MMU)318、示例DSP 320、示例控制器322、以及示例直接存储器访问(DMA)单元324。此外,示例卷积引擎312、示例RNN引擎314、示例DMA单元324、示例DSP320、以及示例控制器322中的每一者分别包括示例第一调度器326、示例第二调度器328、示例第三调度器330、示例第四调度器332、以及示例第五调度器334。示例DSP 320和示例控制器322中的每一者附加地包括示例第一内核库336和示例第二内核库338。
在图3的示例中,卷积引擎312是被配置为改进对与卷积相关联的任务的处理的装置。此外,卷积引擎312改进对与视觉图像的分析相关联的任务和/或与CNN相关联的其他任务的处理。在图3中,RNN引擎314是被配置为改进对与RNN相关联的任务的处理的设备。此外,RNN引擎314改进对与未分段、连接的手写识别、语音识别的分析相关联的任务和/或与RNN相关联的其他任务的处理。
在图3的示例中,存储器316是卷积引擎312、RNN引擎314、MMU318、DSP 320、控制器322和DMA单元324中的至少一者之间的共享存储器件。在图3的示例中,存储器316是在第一加速器310a本地的物理存储器件;然而,在其他示例中,存储器316可以位于第一加速器310a外部和/或以其他方式相对于第一加速器310a是远程的。在另外的示例中,存储器316可以是虚拟存储器件。在图3的示例中,存储器316是永久性存储器件(例如,ROM、PROM、EPROM、EEPROM等)。在其他示例中,存储器316可以是永久性BIOS或闪存。在另外的示例中,存储器316可以是易失性存储器。
在图3的所示示例中,示例MMU 318是包括对存储器316和/或系统存储器302的地址的引用的设备。MMU 318附加地将卷积引擎312、RNN引擎314、DSP 320、和/或控制器322中的一者或多者所使用的虚拟存储器地址转换为存储器316和/或系统存储器302中的物理地址。
在图3的示例中,DSP 320是改进对数字信号的处理的设备。例如,DSP 320促进处理以测量、过滤、和/或压缩连续的真实世界信号(例如,来自相机、和/或与计算机视觉相关的其他传感器的数据)。在图3中,控制器322被实现为第一加速器310a的控制单元。例如,控制器322引导第一加速器310a的操作。在一些示例中,控制器322实现信用管理器。此外,控制器322可以指示卷积引擎312、RNN引擎314、存储器316、MMU 318、和/或DSP 320中的一者或多者如何对从主机处理器306接收的机器可读指令进行响应。
在图3所示的示例中,DMA单元324是这样的设备:其允许卷积引擎312、RNN引擎314、DSP 320、以及控制器322中的至少一者访问独立于主机处理器306的系统存储器302。例如,DMA单元324可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)图形处理单元(GPU)、(一个或多个)数字信号处理器(DSP)、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)和/或现场可编程逻辑器件(FPLD)来实现。
在图3的示例中,第一调度器326、第二调度器328、第三调度器330、第四调度器332、以及第五调度器334中的每一者是这样的设备:其确定卷积引擎312、RNN引擎314、DMA单元324、DSP 320、以及控制器322分别何时执行已被卸载和/或以其他方式被发送到第一加速器310a的工作负载的一部分。此外,第一内核库336和第二内核库338中的每一者是包括一个或多个内核的数据构造(data structure)。例如,第一内核库336和第二内核库338的内核分别是针对DSP 320和控制器322上的高吞吐量编译的例程。内核对应于例如要在计算系统300上运行的可执行文件的可执行子部分。
在本文中公开的示例中,卷积引擎312、RNN引擎314、存储器316、MMU 318、DSP320、控制器322、以及DMA单元324中的每一者与第一加速器310a的其他元件通信。例如,卷积引擎312、RNN引擎314、存储器316、MMU 318、DSP 320、控制器322、以及DMA单元324通过示例第二通信总线340进行通信。在一些示例中,第二通信总线340可以由配置和控制(CnC)基础结构以及数据基础结构(data fabric)来实现。在本文中公开的一些示例中,卷积引擎312、RNN引擎314、存储器316、MMU 318、DSP 320、控制器322、以及DMA单元324可以通过任何合适的有线和/或无线通信系统进行通信。此外,在本文中公开的一些示例中,卷积引擎312、RNN引擎314、存储器316、MMU 318、DSP320、控制器322、以及DMA单元324中的每一者可以通过任何合适的有线和/或无线通信系统与第一加速器310a外部的任何组件进行通信。
如前所述,示例第一加速器310a、示例第二加速器310b、以及示例第三加速器310c中的每一者包括各种CBB,这些CBB中的一部分通用于加速器的操作,一部分特定于相应加速器的操作。例如,第一加速器310a、第二加速器310b、以及第三加速器310c中的每一者包括通用CBB,例如,存储器、MMU、控制器、以及用于CBB中的每个的相应调度器。
虽然在图3的示例中,第一加速器310a实现VPU并且包括卷积引擎312、RNN引擎314、以及DSP 320(例如,特定于第一加速器310a的操作的CBB),但是第二加速器310b和第三加速器310c可以包括特定于第二加速器310b和/或第三加速器310c的操作的附加或替代CBB。例如,如果第二加速器310b实现GPU,则特定于第二加速器310b的操作的CBB可以包括线程分派器、图形技术接口、和/或期望改进处理计算机图形和/或图像处理的处理速度和总体性能的任何其他CBB。此外,如果第三加速器310c实现FPGA,则特定于第三加速器310c的操作的CBB可包括一个或多个算术逻辑单元(ALU)、和/或期望改进处理通用计算的处理速度和总体性能的任何其他CBB。
虽然图3的异构系统304包括主机处理器306、第一加速器310a、第二加速器310b、以及第三加速器310c,但是在一些示例中,异构系统304可以包括任何数量的处理元件(例如,主机处理器和/或加速器),这些处理元件包括专用指令集处理器(ASIP)、物理处理单元(PPU)、指定的DSP、图像处理器、协处理器、浮点单元、网络处理器、多核心处理器、以及前端处理器。
此外,虽然在图3的示例中,卷积引擎312、RNN引擎314、存储器316、MMU 318、DSP320、控制器322、DMA单元324、第一调度器326、第二调度器328、第三调度器330、第四调度器332、第五调度器334、第一内核库336,以及第二内核库338在第一加速器310a上实现,但卷积引擎312、RNN引擎314、存储器316、MMU 318、DSP 320、控制器322、DMA单元324、第一调度器326、第二调度器328、第三调度器330、第四调度器332、第五调度器334、第一内核库336、以及第二内核库338中的一者或多者可以在主机处理器306、第二加速器310b、和/或第三加速器310c上实现。
图4是示出包括示例一个或多个调度器的示例计算系统400的框图。在一些示例中,计算系统400可以对应于图3的计算系统300。在图4的示例中,计算系统400包括示例输入402、示例编译器404、以及示例加速器406。在一些示例中,加速器406可以对应于图3的第一加速器310a。在图4中,输入402耦合到编译器404。输入402是要由加速器406执行的工作负载。在一些示例中,编译器404可以对应于图3的主机处理器306和/或外部设备。
在图4的示例中,输入402例如是函数、算法、程序、应用、和/或要由加速器406执行的其他代码。在一些示例中,输入402是函数、算法、程序、应用、和/或其他代码的图形描述。在附加或替换示例中,输入402是与AI处理(例如,深度学习和/或计算机视觉)相关的工作负载。
在图4的所示示例中,编译器404耦合到输入402和加速器406。编译器404接收输入402并且将输入402编译为要由加速器406执行的一个或多个可执行文件。例如,编译器404是图形编译器,其接收输入402并且将工作负载(例如,输入402)的各个工作负载节点分配给加速器406的各种CBB。此外,编译器404为加速器406的存储器中的一个或多个缓冲器分配存储器。
在图4的示例中,加速器406耦合到编译器404并且包括示例信用管理器408、示例CnC基础结构410、示例数据基础结构411、示例卷积引擎412、示例DMA单元414、示例RNN引擎416、示例DSP 418、示例存储器420、以及示例MMU 422。此外,示例卷积引擎412、示例DMA单元414、示例RNN引擎416、以及示例DSP 418中的每一者分别包括示例第一调度器424、示例第二调度器426、示例第三调度器428、以及示例第四调度器430。此外,示例DSP 418包括示例内核库432。在一些示例中,第一调度器424可以对应于图3的第一调度器326。在附加或替代示例中,第二调度器426可以对应于图3的第三调度器330。在另外的示例中,第三调度器428可以对应于图3的第二调度器328。在一些示例中,第四调度器430可以对应于图4的第四调度器332。
在图4所示的示例中,信用管理器408耦合到编译器404、以及CnC基础结构410。信用管理器408是这样的设备:其管理与卷积引擎412、DMA单元414、RNN引擎416、和/或DSP418中的一者或多者相关联的信用。在一些示例中,信用管理器408可以由控制器实现为信用管理器控制器。信用表示与存储器420中可用的工作负载节点相关联的数据和/或存储器420中可用于工作负载节点的输出的空间量。例如,信用管理器408可以基于从编译器404接收到的一个或多个可执行文件,将存储器420划分为与给定工作负载的每个工作负载节点相关联的一个或多个缓冲器。如果工作负载节点被配置为将数据写入到缓冲器,则工作负载节点是生产者,而如果工作负载节点被配置为从缓冲器中读取数据,则工作负载节点是消耗者。
在图4的示例中,信用管理器408附加地被配置为向卷积引擎412、DMA单元414、RNN引擎416、和/或DSP 418中的一者或多者发送信用和/或从其接收信用。在一些示例中,信用管理器408被实现为加速器406的控制单元。例如,信用管理器408可以引导加速器406的操作。此外,信用管理器408可以指示卷积引擎412、DMA单元414、RNN引擎416、和/或DSP 418中的一者或多者如何对从编译器404接收到的可执行文件和/或其他机器可读指令进行响应。
在图4的示例中,CnC基础结构410耦合到信用管理器408、卷积引擎412、DMA单元414、RNN引擎416、以及DSP 418。CnC基础结构410是具有电子互连和至少一个逻辑电路的网络,其允许信用管理器408、卷积引擎412、DMA单元414、RNN引擎416、和/或DSP 418中的一者或多者向信用管理器408、卷积引擎412、DMA单元414、RNN引擎416、和/或DSP 418中的一者或多者传输信用和/或从其接收信用。在一些示例中,CnC基础结构410可以对应于图3的第二通信总线340。
在图4的示例中,数据基础结构411耦合到卷积引擎412、DMA单元414、RNN引擎416、DSP 418、存储器420、以及MMU 422。数据基础结构411是具有电子互连和至少一个逻辑电路的网络,其允许信用管理器408、卷积引擎412、RNN引擎416、DSP 418、存储器420、和/或MMU422中的一者或多者向信用管理器408、卷积引擎412、RNN引擎416、DSP 418、存储器420、和/或MMU 422中的一者或多者传输数据和/或从其接收数据。在一些示例中,数据基础结构411可以对应于图3的第二通信总线340。
在图4所示的示例中,卷积引擎412耦合到CnC基础结构410和数据基础结构411。卷积引擎412是被配置为改进对与卷积相关联的任务的处理的设备。此外,卷积引擎412改进对与视觉图像分析相关联的任务和/或与CNN相关联的其他任务的处理。在一些示例中,卷积引擎412可以对应于图3的卷积引擎312。
在图4所示的示例中,DMA单元414耦合到CnC基础结构410和数据基础结构411。DMA单元414是这样的设备:其允许卷积引擎412、RNN引擎416、或DSP 418中的至少一者访问在独立于相应处理器(例如,主机处理器306)的加速器406远程的存储器(例如,系统存储器302)。在一些示例中,DMA单元414可以对应于图3的DMA单元324。例如,DMA单元414可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)GPU、(一个或多个)DSP、(一个或多个)ASIC、(一个或多个)PLD、和/或(一个或多个)FPLD来实现。
在图4中,RNN引擎416耦合到CnC基础结构410和数据基础结构411。RNN引擎416是被配置为改进对与RNN相关联的任务的处理的设备。此外,RNN引擎416改进对与未分段的、连接的手写识别、语音识别的分析相关联的任务、和/或与RNN相关联的其他任务的处理。在一些示例中,RNN引擎416可以对应于图3的RNN引擎314。
在图4的示例中,DSP 418耦合到CnC基础结构410和数据基础结构411。DSP 418是改进对数字信号的处理的设备。例如,DSP 418促进处理以测量、过滤、和/或压缩连续的现实世界信号,例如,来自相机和/或与计算机视觉相关的其他传感器的数据。在一些示例中,DSP 418可以对应于图3的DSP 320。
在图4的示例中,存储器420耦合到数据基础结构411。存储器420是卷积引擎412、DMA单元414、RNN引擎416、以及DSP 418中的至少一者之间的共享存储器件。在一些示例中,存储器420可以对应于图3的存储器316。存储器420可以被划分为与工作负载的一个或多个工作负载节点相关联的一个或多个缓冲器,该工作负载与由信用管理器408接收到的可执行文件相关联。在图4的示例中,存储器420是在加速器406本地的物理存储器件。然而,在其他示例中,存储器420可以是位于加速器406的外部和/或以其他方式相对于其是远程的。在另外的示例中,存储器420可以是虚拟存储器件。在图4的示例中,存储器420是永久性存储器(例如,ROM、PROM、EPROM、EEPROM等)。在其他示例中,存储器420可以是永久性BIOS或闪存。在另外的示例中,存储器420可以是易失性存储器。
在图4的所示示例中,示例MMU 422耦合到数据基础结构411。MMU 422是这样的设备:其包括对存储器420的地址的引用和/或相对于加速器406在远程的存储器。MMU 422附加地将由卷积引擎412、DMA单元414、RNN引擎416、和/或DSP 418中的一者或多者所使用的虚拟存储器地址转换为存储器420和/或相对于加速器406在远程的存储器中的物理地址。在一些示例中,MMU 422可以对应于图3的MMU 318。
在图4的示例中,第一调度器424、第二调度器426、第三调度器428、以及第四调度器430中的每一者是这样的设备:其确定卷积引擎412、DMA单元414、RNN引擎416、以及DSP418分别何时执行已分别由信用管理器408和/或加速器406的附加CBB分配给卷积引擎412、DMA单元414、RNN引擎416和DSP 418的工作负载(例如工作负载节点)的一部分。根据给定工作负载节点的任务和/或其他操作,工作负载节点可以是生产者或消耗者。生产者工作负载节点产生由另一工作负载节点利用的数据,而消耗者工作负载节点消耗和/或以其他方式处理由另一工作负载节点产生的数据。
在图4的所示示例中,内核库432是包括一个或多个内核的数据构造。在一些示例中,内核库432可以对应于图3的第一内核库336。内核库432的内核是例如针对DSP 418上的高吞吐量编译的例程。内核对应于例如要在加速器406上运行的可执行文件的可执行子部分。而在图4的示例中,加速器406实现VPU并且包括信用管理器408、CnC基础结构410、数据基础结构411、卷积引擎412、DMA单元414、RNN引擎416、DSP 418、存储器420、以及MMU 422,加速器406可以包括除图4中所示的CBB之外的附加CBB或替代CBB。
在图4的示例中,在操作中,第一调度器424加载与去往工作负载节点的输入缓冲器以及来自工作负载节点的输出缓冲器相对应的信用,以用于被分配给卷积引擎412的工作负载节点。例如,输入缓冲器这样的缓冲器:工作负载节点被配置为从中读取数据,而输出缓冲器是这样的缓冲器:工作负载节点被配置为向其写入数据。在一些示例中,第一工作负载节点的输入缓冲器可以是第二工作负载节点的输出缓冲器。此外,第一调度器424从信用管理器408接收和/或以其他方式从信用管理器408获得信用。
在图4的示例中,在操作中,第一调度器424选择被分配给卷积引擎412的工作负载节点,并且确定第一调度器424是否已接收到阈值量的信用以便对存储在去往所选工作负载节点的输入缓冲器中的数据进行操作。例如,第一调度器424将从生产者工作负载节点接收到的、用于输入缓冲器的信用的数量与针对输入缓冲器的阈值信用数量进行比较。如果第一调度器424未接收到阈值量的信用,则第一调度器424对被分配给卷积引擎412的另一工作负载节点重复该过程。
在图4中的所示示例中,在操作中,如果第一调度器424已接收到阈值量的信用以便对存储在去往所选工作负载节点的输入缓冲器中的数据进行操作,则第一调度器424确定第一调度器424是否接收到阈值量的信用以便将数据写入用于所选工作负载节点的输出缓冲器。例如,第一调度器424将从消耗者工作负载节点接收到、用于输出缓冲器的信用的数量与针对用于所选工作负载节点的输出缓冲器的阈值信用数量进行比较。如果第一调度器424未接收到阈值量的信用,则第一调度器424对被分配给卷积引擎412的另一工作负载节点重复该过程。如果第一调度器424已接收到阈值量的信用以便将数据写入到输出缓冲器,则第一调度器424指示所选工作负载节点已准备好执行。随后,第一调度器424针对被分配给卷积引擎412的附加工作负载节点重复该过程。
在图4的示例中,在操作中,在被分配给卷积引擎412的工作负载节点已被分析之后,第一调度器424对已准备好执行的工作负载节点进行调度。第一调度器424随后根据该调度来分派工作负载节点。在所分派的工作负载节点被卷积引擎412执行之后,第一调度器424将与输入缓冲器和/或输出缓冲器相对应的信用发送到信用管理器408。第一调度器424确定调度中是否存在要执行的额外工作负载节点。如果调度中存在额外工作负载节点,则第一调度器424使调度中的下一工作负载节点在卷积引擎412上被执行。
图5是可以实现图3和图4的调度器中的一个或多个的示例调度器500的框图。例如,调度器500是以下调度器的示例实现方式:图3的第一调度器326、第二调度器328、第三调度器330、第四调度器332、和/或第五调度器334;和/或图4的第一调度器424、第二调度器426、第三调度器428、和/或第四调度器430;和/或图6的调度器600;和/或图7的第一调度器722、第二调度器724、第三调度器726、和/或第四调度器728。
在图5的示例中,调度器500包括示例工作负载接口502、示例缓冲器信用存储器件504、示例信用比较器506、示例工作负载节点分派器508、以及示例通信总线510。调度器500是这样的设备:其确定与调度器500相关联的CBB何时执行已被分配给与调度器500相关联的CBB的工作负载的一部分(例如,工作负载节点)。
在图5的所示的示例中,工作负载接口502是这样的设备:其被配置为与位于调度器500外部的其他设备、缓冲器信用存储器件504、信用比较器506、和/或工作负载节点分派器508进行通信。例如,工作负载接口502可以接收和/或以其他方式获得要由与调度器500相关联的CBB执行的工作负载节点。附加地或替代地,工作负载接口502可以从其他调度器、其他CBB、和/或其他设备传输和/或接收信用。此外,工作负载接口502可以将与去往工作负载节点的输入缓冲器和/或来自工作负载节点的输出缓冲器相对应的信用载入和/或载出缓冲器信用存储器件504。
在一些示例中,示例工作负载接口502实现用于接口连接的示例装置。接口连接装置通过可执行指令来实现,例如,至少由图8的块802、818、以及822实现的指令。例如,图8的块802、818、以及822的可执行指令可以在至少一个处理器上执行,例如,图9的示例所示的示例处理器910和/或示例加速器912。在其他示例中,接口连接装置由硬件逻辑、硬件实现的状态机、逻辑电路、和/或硬件、软件、和/或固件的任何其他组合来实现。
在图5所示的示例中,缓冲器信用存储器件504是工作负载接口502、信用比较器506、和/或工作负载节点分派器508中的至少一者之间的共享存储器件。缓冲器信用存储器件504是在调度器500本地的物理存储器件;然而,在其他示例中,缓冲器信用存储器件504可以位于调度器500外部和/或以其他方式相对其是远程的。在另外的示例中,缓冲器信用存储器件504可以是虚拟存储器件。在图5的示例中,缓冲器信用存储器件504是永久性存储器件(例如,ROM、PROM、EPROM、EEPROM等)。在其他示例中,缓冲器信用存储器件504可以是永久性BIOS或闪存。在另外的示例中,缓冲器信用存储器件504可以是易失性存储器。
在图5的示例中,缓冲器信用存储器件504是这样的存储器:其与存储与去往工作负载节点的输入缓冲器和/或来自工作负载节点的输出缓冲器相对应的信用相关联,这些缓冲器与被分配给与调度器500相关联的CBB的工作负载节点相关联。例如,缓冲器信用存储器件504可以实现为这样的数据构造:其包括用于被分配给与调度器500相关联的CBB的每个工作负载节点的字段和用于去往工作负载节点的每个输入缓冲器和/或来自工作负载节点的每个输出缓冲器的字段,这些缓冲器与被分配给与调度器500相关联的CBB的工作负载节点相关联。
在图5的所示示例中,缓冲器信用存储器件504可以附加地或替代地存储已被分配给与调度器500相关联的CBB的工作负载节点和/或与去往工作负载节点的输入缓冲器和/或来自工作负载节点的输出缓冲器相对应的阈值信用量。此外,缓冲器信用存储器件504包括与针对去往每个工作负载节点的输入缓冲器和/或来自每个工作负载节点的输出缓冲器的阈值信用数量相关联的字段。
在图5的示例中,当工作负载节点是生产者(例如,工作负载节点生成数据以供另一工作负载节点利用)时,阈值信用数量对应于输出缓冲器中的阈值空间量(例如,存储器420中所划分的空间),其中,要满足该阈值空间量之后,与调度器500相关联的CBB才能执行生产者工作负载节点。此外,当工作负载节点是消耗者(例如,工作负载节点处理由另一工作负载节点生成的数据)时,阈值信用数量对应于输入缓冲器中的阈值数据量(例如,存储器420中所划分的空间),其中,要满足该阈值数据量之后,与调度器500相关联的CBB才能执行消耗者工作负载节点。
在一些示例中,示例缓冲器信用存储器件504实现示例存储装置。该存储装置可以通过如图8中实现的可执行指令来实现。例如,可执行指令可以在至少一个处理器上执行,例如,图9的示例中所示的示例处理器910和/或示例加速器912。在其他示例中,存储装置由硬件逻辑、硬件实现的状态机、逻辑电路、和/或硬件、软件、和/或固件的任何其他组合来实现。
在图5所示的示例中,信用比较器506是这样的设备:其被配置为确定是否已接收到阈值数量的信用,该阈值数量的信用对应于被分配给与调度器500相关联的CBB的去往工作负载节点的输入缓冲器和/或来自工作负载节点的输出缓冲器。信用比较器506被配置为选择被分配给与调度器500相关联的CBB的工作负载节点。
在图5的示例中,信用比较器506还被配置为确定调度器500是否已接收到阈值量的信用以便对存储在用于所选工作负载节点的输入缓冲器中的数据进行操作。例如,信用比较器506将缓冲器信用存储器件504中与从外部设备(例如,信用管理器408、控制器322等)接收到的信用的数量相关联的字段与缓冲器信用存储器件504中与针对去往所选工作负载节点的输入缓冲器的阈值信用数量相关联的字段进行比较。如果调度器500未接收到阈值量的信用,则信用比较器506对被分配给与调度器500相关联的CBB的另一工作负载节点重复该过程。
在图5中的所示示例中,如果调度器500已接收到阈值量的信用以便对存储在输入缓冲器中的数据进行操作,则信用比较器506确定调度器500是否已接收到阈值量的信用以便将数据写入到用于所选工作负载节点的输出缓冲器。例如,信用比较器506将缓冲器信用存储器件504中与从外部设备(例如,信用管理器408、控制器322等)接收到的针对用于所选工作负载节点的输出缓冲器的信用的数量相关联的字段与缓冲器信用存储器件504中与针对输出缓冲器的阈值信用数量相关联的字段进行比较。
在图5的示例中,如果调度器500未接收到阈值量的信用,则信用比较器506对被分配给与调度器500相关联的CBB的另一工作负载节点重复该过程。如果调度器500已接收到阈值量的信用以便将数据写入输出缓冲器,则信用比较器506指示所选的工作负载节点已准备好执行。随后,信用比较器506对被分配给与调度器500相关联的CBB的附加工作负载节点重复该过程。
在一些示例中,示例信用比较器506实现示例比较装置。该比较装置由可执行指令实现,例如,至少由图8的块804、806、808、810、以及812实现的可执行指令。例如,图8的块804、806、808、810、以及812的可执行指令可以在至少一个处理器上执行,例如,图9的示例中所示的示例处理器910和/或示例加速器912。在其他示例中,该比较装置由硬件逻辑、硬件实现的状态机、逻辑电路、和/或硬件、软件和/或固件的任何其他组合来实现。
在图5的示例中,工作负载节点分派器508是这样的设备:其将被分配给与调度器500相关联的CBB的一个或多个工作负载节点调度为在与调度器500相关联的CBB上执行。例如,在被分配给与调度器500相关联的CBB的工作负载节点已被分析之后,工作负载节点分派器508调度已准备好执行的工作负载节点。例如,工作负载节点分派器508基于诸如轮询调度(round robin schedule)之类的调度算法来调度已准备好执行的工作负载节点。工作负载节点分派器508随后根据该调度来分派工作负载节点。在其他示例中,工作负载节点分派器508可以利用任何其他合适的仲裁算法来调度已准备好执行的工作负载节点。
在图5中的所示示例中,当所分派的工作负载节点被与调度器500相关联的CBB执行时,工作负载接口502将与输入缓冲器相关联的信用发送到外部设备(例如,信用管理器408、控制器322等),其中,工作负载接口502从该外部设备接收到信用。工作负载节点分派器508附加地确定调度中是否存在要执行的额外工作负载节点。如果调度中存在额外工作负载节点,则工作负载节点分派器508分派调度中的下一工作负载节点。
在一些示例中,示例工作负载节点分派器508实现示例分派装置。该分派装置由可执行指令实现,例如,至少由图8的块814、816、以及820实现的可执行指令。例如,图8的块814、816、以及820的可执行指令可以在至少一个处理器上执行,例如,图9的示例中所示的示例处理器910和/或示例加速器912。在其他示例中,该调度装置由硬件逻辑、硬件实现的状态机、逻辑电路、和/或硬件、软件和/或固件的任何其他组合来实现。
在本文中公开的示例中,工作负载接口502、缓冲器信用存储器件504、信用比较器506、以及工作负载节点分派器508中的每一者与调度器500的其他元件进行通信。例如,工作负载接口502、缓冲器信用存储器件504、信用比较器506、以及工作负载节点分派器508通过示例通信总线510进行通信。在本文中公开的一些示例中,工作负载接口502、缓冲器信用存储器件504、信用比较器506、以及工作负载节点分派器508可以通过任何合适的有线和/或无线通信系统进行通信。此外,在本文中公开的一些示例中,工作负载接口502、缓冲器信用存储器件504、信用比较器506、以及工作负载节点分派器508中的每一者可以通过任何合适的有线和/或无线通信系统与位于调度器500外部的任何组件进行通信。
图6是示出图5的缓冲器信用存储器件504的进一步细节的示例调度器600的框图。调度器600是以下调度器的示例实现方式:图3的第一调度器326、第二调度器328、第三调度器330、第四调度器332、和/或第五调度器334;和/或图4的第一调度器424、第二调度器426,第三调度器428和/或第四调度器430;和/或图5的调度器500;和/或图7的第一调度器722、第二调度器724、第三调度器726、和/或第四调度器728。
在图6的示例中,调度器600包括示例工作负载接口502、示例缓冲器信用存储器件504、示例信用比较器506、以及示例工作负载节点分派器508。调度器600是这样的设备:其确定与调度器600相关联的CBB何时执行已被分配给与调度器600相关联的CBB的工作负载的一部分(例如,工作负载节点)。
在图6所示的示例中,工作负载接口502耦合到位于调度器600外部的一个或多个设备、缓冲器信用存储器件504以及工作负载节点分派器508。工作负载接口502是这样的设备:其被配置为与位于调度器600外部的其他设备、缓冲器信用存储器件504、和/或工作负载节点分派器508进行通信。例如,工作负载接口502可以接收和/或以其他方式获得要由与调度器600相关联的CBB执行的工作负载节点。附加地或替代地,工作负载接口502可以向位于调度器600外部的一个或多个设备发送信用和/或从位于调度器600外部的一个或多个设备接收信用。此外,工作负载接口502可以将与去往工作负载节点的输入缓冲器和/或来自工作负载节点的输出缓冲器相对应的信用载入和/或载出缓冲器信用存储器件504。
在图6所示的示例中,缓冲器信用存储器件504是工作负载接口502、信用比较器506、和/或工作负载节点分派器508中的至少一者之间的共享存储器件。缓冲器信用存储器件504是在调度器500本地的物理存储器件。然而,在其他示例中,缓冲器信用存储器件504可以位于调度器500外部和/或以其他方式相对其是远程的。在另外的示例中,缓冲器信用存储器件504可以是虚拟存储器件。在图6的示例中,缓冲器信用存储器件504是永久性存储器件(例如,ROM、PROM、EPROM、EEPROM等)。在其他示例中,缓冲器信用存储器件504可以是永久性BIOS或闪存。在另外的示例中,缓冲器信用存储器件504可以是易失性存储器。
在图6的示例中,缓冲器信用存储器件504是这样的数据构造:其包括与第一工作负载节点WN[0]、第二工作负载节点WN[1]、以及第n工作负载节点WN[n]的相对应的行。缓冲器信用存储器件504还包括这样的列:其与用于第一消耗者(例如,消耗者[0])的输入缓冲器、用于第l消耗者(例如,消耗者[l])的输入缓冲器、用于第一生产者(例如,生产者[0])的输出缓冲器、以及用于第m生产者(例如,生产者[m])的输出缓冲器相对应。缓冲器信用存储器件504还包括这样的列:其与针对去往每个工作负载节点的输入缓冲器和/或来自每个工作负载节点的输出缓冲器的阈值信用数量相对应。
在图6所示的示例中,第一工作负载节点WN[0]、第二工作负载节点WN[1]、以及第n工作负载节点WN[n]中的每一者被分配给与调度器600相关联的CBB。在缓冲器信用存储器件504中,与第一工作负载节点WN[0]、第二工作负载节点WN[1]、以及第n工作负载节点WN[n]相对应的行和与用于第一消费者(例如消费者[0])的输入缓冲器、用于第l消费者(例如消费者[l])的输入缓冲器、用于第一生产者(例如生产者[0])的输出缓冲器、以及用于第m生产者(例如生产者[m])的输出缓冲器相对应的列之间的交集(intersection)表示与从一个或多个外部设备接收到的、用于该缓冲器的信用的数量相对应的字段。此外,与针对去往每个工作负载节点的输入缓冲器和/或来自每个工作负载节点的输出缓冲器的阈值信用数量相对应的列表示这样的阈值信用数量:缓冲器要满足该阈值信用数量之后,与调度器600相关联的CBB才能对相应的工作负载节点进行操作。
在图6的示例中,由外部设备(例如,信用管理器408、控制器322等)将缓冲器信用存储器件504中在以下交集处的字段初始化为值零:该交集位于与第一工作负载节点WN[0]、第二工作负载节点WN[1]、以及第n工作负载节点WN[n]相对应的行和与用于第一消费者(例如消费者[0])的输入缓冲器、用于第l消费者(例如消费者[l])的输入缓冲器相对应的列之间。此外,由外部设备(例如,信用管理器408、控制器322等)将缓冲器信用存储器件504中在以下交集处的字段初始化为与相关联的缓冲器中所划分的存储器的量相对应的值:该交集位于与第一工作负载节点WN[0]、第二工作负载节点WN[1]、以及第n工作负载节点WN[n]相对应的行和与用于第一生产者(例如生产者[0])的输出缓冲器、用于第m生产者(例如生产者[m])的输出缓冲器相对应的列之间。此外,由外部设备(例如,信用管理器408、控制器322、在主机处理器306上执行的软件等)初始化与针对输入缓冲器和/或输出缓冲器的阈值信用数量相对应的列。
在图6中的所示示例中,信用比较器506耦合到缓冲器信用存储器件504和工作负载节点分派器508。用比较器506是这样的设备:其被配置为确定是否已接收到阈值数量的信用,该阈值数量的信用对应于被分配给与调度器600相关联的CBB的去往工作负载节点的输入缓冲器和/或来自工作负载节点的输出缓冲器。在图6的示例中,工作负载节点分派器508耦合到工作负载接口502、缓冲器信用存储器件504、信用比较器506、以及位于调度器600外部的一个或多个设备。工作负载节点分派器508例如是这样的设备:其将被分配给与调度器600相关联的CBB的一个或多个工作负载节点调度为在与调度器600相关联的CBB上执行。
在图6的示例中,在操作中,当工作负载接口502从外部设备(例如,信用管理器408、控制器322等)接收到和/或以其他方式从外部设备获得工作负载节点时,工作负载接口502将工作负载节点加载到缓冲器信用存储器件504中与工作负载节点相对应的相应字段中。此外,信用比较器506选择被分配给与调度器600相关联的CBB的工作负载节点。
在图6所示的示例中,信用比较器506确定调度器600是否已接收到阈值量的信用以便对存储在用于所选工作负载节点的输入缓冲器中的数据进行操作。例如,信用比较器506将缓冲器信用存储器件504中与从外部设备(例如,信用管理器408、控制器322等)接收到的信用的数量相关联的字段与缓冲器信用存储器件504中与针对去往所选工作负载节点的输入缓冲器的阈值信用数量相关联的字段进行比较。阈值信用数量对应于输入缓冲器中的阈值数据量(例如,存储器420中所划分的空间),其中,要满足该阈值数据量之后,与调度器600相关联的CBB才能执行消耗者工作负载节点。如果调度器600未接收到阈值量的信用,则信用比较器506对被分配给与调度器600相关联的CBB的另一工作负载节点重复该过程。
在图6中的所示示例中,如果调度器600已接收到阈值量的信用以便对存储在输入缓冲器中的数据进行操作,则信用比较器506确定调度器600是否已接收到阈值量的信用以便将数据写入到用于所选工作负载节点的输出缓冲器。例如,信用比较器506将缓冲器信用存储器件504中与从外部设备(例如,信用管理器408、控制器322等)接收到的针对用于所选工作负载节点的输出缓冲器的信用的数量相关联的字段与缓冲器信用存储器件504中与针对输出缓冲器的阈值信用数量相关联的字段进行比较。阈值信用数量可以对应于输出缓冲器中的阈值空间量(例如,存储器中所划分的空间),其中,要满足该阈值空间量之后,与调度器600相关联的CBB才能执行生产者工作负载节点。
在图6的示例中,如果调度器600未接收到阈值量的信用,则信用比较器506对被分配给与调度器600相关联的CBB的另一工作负载节点重复该过程。如果调度器600已接收到阈值量的信用以便将数据写入到输出缓冲器,则信用比较器506指示所选的工作负载节点已准备好执行。随后,信用比较器506对被分配给与调度器600相关联的CBB的附加工作负载节点重复该过程。
在图6的示例中,工作负载节点分派器508是这样的设备:其将被分配给与调度器600相关联的CBB的一个或多个工作负载节点调度为在与调度器600相关联的CBB上执行。例如,在被分配给与调度器600相关联的CBB的工作负载节点已被分析之后,工作负载节点分派器508调度已准备好执行的工作负载节点。例如,工作负载节点分派器508基于诸如轮询调度之类的调度算法来调度已准备好执行的工作负载节点。工作负载节点分派器508随后根据该调度来分派工作负载节点。在其他示例中,工作负载节点分派器508可以利用任何其他合适的仲裁算法来调度已准备好执行的工作负载节点。
在图6中的所示示例中,当所分派的工作负载节点被与调度器600相关联的CBB执行时,工作负载接口502将与输入缓冲器相关联的信用发送到外部设备(例如,信用管理器408、控制器322等),其中,工作负载接口502从该外部设备接收到信用。工作负载节点分派器508附加地确定调度中是否存在要执行的额外工作负载节点。如果调度中存在额外工作负载节点,则工作负载节点分派器508分派调度中的下一工作负载节点。
图7是表示在实现流水线和缓冲器的异构系统的加速器上执行的工作负载的示例图形700的图形图示。例如,加速器是第一加速器310a,异构系统是图3的异构系统304。示例图形700包括示例第一工作负载节点702(WN[0])、示例第二工作负载节点704(WN[1])、示例第三工作负载节点706(WN[2])、示例第四工作负载节点708(WN[3])、以及示例第五工作负载节点710(WN[4])。在图7的示例中,加速器被配置为基于来自将工作负载节点分配给各个CBB的示例信用管理器712的调度来执行由图形700表示的工作负载。例如,信用管理器712和/或另一控制器将第一工作负载节点702(WN[0])分配给示例第一CBB 714,将第二工作负载节点704(WN[1])分配给示例第二CBB 716,将第三工作负载节点706(WN[2])分配给示例第三CBB 718,将第四工作负载节点708(WN[3])分配给示例第四CBB 720,将第五工作负载节点710(WN[4])分配给示例第二CBB 716。
在图7的示例中,示例第一CBB 714、示例第二CBB 716、示例第三CBB 718、以及示例第四CBB 720中的每一者包括示例第一调度器722、示例第二调度器724、示例第三调度器726、以及示例第四调度器728。第一调度器722、第二调度器724、第三调度器726、以及第四调度器728中的每一者都可以由图5的调度器500和/或图6的调度器600来实现。
在图7的所示示例中,第一工作负载节点702(WN[0])和第二工作负载节点704(WN[1])与示例第一缓冲器730相关联。第一缓冲器730是第一工作负载节点702(WN[0])的输出缓冲器和去往第二工作负载节点704(WN[1])的输入缓冲器。第二工作负载节点704(WN[1])和第三工作负载节点706(WN[2])与示例第二缓冲器732相关联。第二缓冲器732是第二工作负载节点704(WN[1])的输出缓冲器和去往第三工作负载节点706(WN[2])的输入缓冲器。第四工作负载节点708(WN[3])和第五工作负载节点710(WN[4])与示例第三缓冲器734相关联。第三缓冲器734是第四工作负载节点708(WN[3])的输出缓冲器和去往第五工作负载节点710(WN[4])的输入缓冲器。第一缓冲器730、第二缓冲器732和第三缓冲器734中的每一者可以由循环缓冲器实现。在图7的示例中,第一缓冲器730、第二缓冲器732、以及第三缓冲器734中的每一者包括加速器的存储器的五个分区,每个分区可以存储数据瓦片。
在图7中的所示示例中,由于第一工作负载节点702(WN[0])是生产者工作负载节点,因此信用管理器712使用用于第一缓冲器730的五个信用来初始化第一调度器722。类似地,由于第二工作负载节点704(WN[1])是生产者工作负载节点,因此信用管理器712使用用于第二缓冲器732的五个信用来初始化第二调度器724。此外,由于第四工作负载节点708(WN[3])是生产者工作负载节点,因此信用管理器712使用用于第三缓冲器734的五个信用来初始化第四调度器728。
被提供给第一调度器722、第二调度器724、以及第四调度器728中的每一者的五个信用表示第一缓冲器730、第二缓冲器732、以及第三缓冲器734的大小。此外,由于第二工作负载节点704(WN[1])也是消耗者工作负载节点,因此信用管理器712使用用于第一缓冲器730的零个信用来初始化第二调度器724。此外,由于第三工作负载节点706(WN[2])是消耗者工作负载节点,因此信用管理器712使用用于第二缓冲器732的零个信用来初始化第三调度器726。此外,由于第五工作负载节点710(WN[4])是消耗者工作负载节点,因此信用管理器712使用用于第二调度器724的零个信用来初始化第三缓冲器734。
在图7的示例中,由于第一调度器722已接收到用于去往第一工作负载节点702(WN[0])的输入缓冲器和来自第一工作负载节点702(WN[0])的输出缓冲器两者的阈值数量的信用,因此第一调度器722分派第一工作负载节点702(WN[0])在第一CBB 714上执行。此外,由于第四调度器728已经接收到针对去往第四工作负载节点708(WN[3])的输入缓冲器和来自第四工作负载节点708(WN[3])的输出缓冲器两者的阈值数量的信用,因此第四调度器728分派第四工作负载节点708(WN[3])在第四CBB 720上执行。当第一工作负载节点702(WN[0])在第一CBB 714上执行时,第一CBB 714向第一缓冲器730传输数据。类似地,当第四工作负载节点708(WN[3])在第四CBB 720上执行时,第四CBB 720向第三缓冲器734传输数据。
在图7所示的示例中,由于第一CBB 714和第四CBB 720中的每一者分别传输与第一工作负载节点702(WN[0])和第四工作负载节点708(WN[3])相关联的数据瓦片,因此第一调度器722和第四调度器728分别针对被从第一CBB 714和第四CBB 720传输到第一缓冲器730和第三缓冲器734的每个数据瓦片向信用管理器712传输信用。信用管理器712将从第一调度器722接收到的信用传输到第二调度器724,并且将从第四调度器728接收到的信用传输到第二调度器724。当第四CBB 720执行第四工作负载节点708(WN[3])时,第四CBB 720生成两个数据瓦片以存储在第三缓冲器734中。类似地,当第一CBB 714执行第一工作负载节点702(WN[0])时,第一CBB 714生成五个数据瓦片以存储在第一缓冲器730中。
在图7的示例中,第四CBB 720执行第四工作负载节点708(WN[3])的速度比第一CBB 714执行第一工作负载节点702(WN[0])的速度更快。尽管在第二缓冲器732中存在可用的存储器,但是由于第五工作负载节点710(WN[4])所依赖的数据已准备好是在第二工作负载节点704(WN[1])所依赖的数据已准备好之前,因此第二调度器724选择第五工作负载节点710(WN[4])(而非第二工作负载节点704(WN[1]))以在第二CBB 716上执行。
在图7的所示示例中,随着第五工作负载节点710(WN[4])在第二CBB 716上执行并且第二CBB 716消耗存储在第三缓冲器734中的数据瓦片,针对由第二CBB 716消耗的每个来自第三缓冲器734的数据瓦片,第二调度器724将与第三缓冲器734相关联的信用发送回信用管理器712。随后,在满足针对第一缓冲器730和第二缓冲器732的阈值信用量的情况下,第二调度器724分派第二工作负载节点704(WN[1])以在第二CBB716上执行。随着第二CBB 716生成与第二工作负载节点704(WN[1])相关联的数据瓦片并且将数据输出到第二缓冲器732,针对从第二CBB716传输到第二缓冲器732的每个数据瓦片,第二调度器724将与第二缓冲器732相关联的信用发送到信用管理器712。
在图7的示例中,在从第二调度器724接收到与第二缓冲器732相关联的信用的情况下,信用管理器712将与第二缓冲器732相关联的信用发送到第三调度器726。当第三调度器726接收到与第二缓冲器732相关联的阈值信用量时,第三调度器726分派第三工作负载节点706(WN[2])在第三CBB 718上执行。随着第三CBB 718执行第三工作负载节点706(WN[2])并且第三CBB 718消耗存储在第二缓冲器732中的数据瓦片,针对由第三CBB 718消耗的每个来自第二缓冲器732的数据瓦片,第三调度器726将与第二缓冲器732相关联的信用发送回信用管理器712。
在附加或替代示例中,第一CBB 714可以对应于图4的卷积引擎412,第一调度器722可以对应于图4的第一调度器424。在一些示例中,第二CBB 716可以对应于图4的RNN引擎416,第二调度器724可以对应于图4的第三调度器428。在进一步的示例中,第三CBB 718可以对应于图4的DMA单元414,第三调度器726可以对应于图4的第二调度器426。在一些示例中,第四CBB 720可以对应于图4的DSP 418,第四调度器728可以对应于图4的第四调度器430。
虽然在图5和/或图6中示出了实现以下调度器的示例方式:图3的第一调度器326、第二调度器328、第三调度器330、第四调度器332、和/或第五调度器334;和/或图4的第一调度器424、第二调度器426、第三调度器428、和/或第四调度器430;和/或图7的第一调度器722、第二调度器724、第三调度器726、和/或第四调度器728,但图5和/或图6中示出的元件、过程和/或设备中的一个或多个可以以任何其他方式被组合、分开、重新排列、省略、消除和/或实现。此外,示例工作负载接口502、示例缓冲器信用存储器件504、示例信用比较器506、示例工作负载节点分派器508、示例通信总线510、和/或更一般地,图5的示例调度器500和/或图6的示例调度器600可以由硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实现。因此,例如,示例工作负载接口502、示例缓冲器信用存储器件504、示例信用比较器506、示例工作负载节点分派器508、示例通信总线510和/或更一般地,图5的示例调度器500和/或图6的示例调度器600中的任何一者可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)图形处理单元(GPU)、(一个或多个)数字信号处理器(DSP)、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)和/或(一个或多个)现场可编程逻辑器件(FPLD)来实现。当阅读本专利的任何装置或系统权利要求以涵盖纯软件和/或固件实现方式时,示例工作负载接口502、示例缓冲器信用存储器件504、示例信用比较器506、示例工作负载节点分派器508、示例通信总线510、和/或更一般地,图5的示例调度器500和/或图6的示例调度器600中的至少一者在此被明确地定义为包括非暂态计算机可读存储设备或存储盘,例如,存储器、数字多功能盘(DVD)、光盘(CD)、蓝光盘等(包括软件和/或固件)。此外,图5的示例调度器500和/或图6的示例调度器600可以包括除图5和/或图6所示的元件、处理和/或设备之外的或作为其替代的一个或多个元件、处理和/或设备,和/或图5的示例调度器500和/或图6的示例调度器600可以包括所示的任何或全部元件、处理和设备中的多于一个元件、处理和/或设备。如本文所使用的,短语“进行通信”(包括其变体)涵盖直接通信和/或通过一个或多个中间组件进行的间接通信,并且其不需要直接物理(例如,有线)通信和/或持续通信,而是附加地包括在周期性间隔、调度间隔、非周期性间隔、和/或一次性事件处的选择性通信。
图8示出了表示用于实现图5的调度器500和/或图6的调度器600的示例硬件逻辑、机器可读指令、硬件实现的状态机、和/或其任何组合的流程图。机器可读指令可以是一个或多个可执行程序或可执行程序的(一个或多个)部分,以供诸如以下结合图9讨论的示例处理器平台900中所示的处理器910和/或加速器912之类的计算机处理器执行。程序可以被体现在诸如CD-ROM、软盘、硬盘驱动器、DVD、蓝光盘、或与处理器910和/或加速器912相关联的存储器之类的非暂态计算机可读存储介质上存储的软件中,但整个程序和/或其部分可以替代地由除处理器910和/或加速器912之外的设备执行和/或体现在固件或专用硬件中。此外,虽然示例程序是参考图8中所示的流程图来描述的,但是可以替代地使用实现示例性的图5的调度器500和/或图6的调度器600的许多其他方法。例如,可以改变块的执行顺序,和/或可以改变、消除、或组合所描述的块中的一部分。附加地或替代地,任一个或全部块可由一个或多个硬件电路(例如,离散和/或集成模拟和/或数字电路、FPGA、ASIC、比较器、运算放大器(op-amp)、逻辑电路等)来实现,这些硬件电路被结构化为在不执行软件或固件的情况下执行相应的操作。
可以以压缩格式、加密格式、分段格式、编译格式、可执行格式、封装格式等中的一个或多个格式来存储本文中描述的机器可读指令。如本文中所述的机器可读指令可以被存储为数据(例如,指令的部分、代码、代码的表示等),其可以被用于创建、制造、和/或产生机器可执行指令。例如,机器可读指令可以被分段并存储在一个或多个存储设备和/或计算设备(例如,服务器)上。机器可读指令可能需要以下操作中的一个或多个:安装、修改、自适应、更新、组合、补充、配置、解密、解压缩、解封装、分发、重新分配、编译等,以便使它们可由计算设备和/或其他机器直接读取、解释、和/或执行。例如,机器可读指令可以存储在多个部分中,这多个部分被单独地压缩、加密并且存储在单独的计算设备上,其中,这些部分在被解密、解压缩、以及组合时形成实现诸如本文中所描述的程序之类的可执行指令集。
在另一示例中,机器可读指令可以以它们可由计算机读取的状态存储,但是需要添加库(例如,动态链接库(DLL))、软件开发工具包(SDK)、应用编程接口(API)等,以便在特定计算设备或其他设备上执行指令。在另一示例中,在机器可读指令和/或相应的程序可以整体或部分地执行之前,可能需要配置机器可读指令(例如,存储的设置、输入的数据、记录的网络地址等)。因此,所公开的机器可读指令和/或(一个或多个)相应的程序旨在涵盖这样的机器可读指令和/或程序,而不管机器可读指令和/或程序在被存储或以其他方式处于静止或传输时的特定格式或状态。
本文中描述的机器可读指令可以由任何过去、现在、或将来的指令语言、脚本语言、编程语言等来表示。例如,机器可读指令可以使用以下语言中的任何一种来表示:C、C++、Java、C#、Perl、Python、JavaScript、超文本标记语言(HTML)、结构化查询语言(SQL)、Swift等。
如上所述,可以使用存储在非暂态计算机和/或机器可读介质上的可执行指令(例如,计算机和/或机器可读指令)来实现图8的示例过程,该非暂态计算机和/或机器可读介质为例如硬盘驱动器、闪存、只读存储器、光盘、数字多功能盘、缓存、随机存取存储器和/或任何其他存储设备或存储盘(其中信息被存储任何持续时间(例如,存储延长的时间段、永久地存储、在短暂的情况下存储、存储来用于暂时地缓冲、和/或缓存信息))。如本文中所使用的,术语非暂态计算机可读介质被明确定义为包括任何类型的计算机可读存储设备和/或存储盘,并且排除传播信号和排除传输介质。
“包括”和“包含”(以及其所有形式和时态)在本文中用作开放式术语。因此,无论何时权利要求采用任何形式的“包括”或“包含”(例如,包括、包含、具有等)作为前序或在任何种类的权利要求记载内,都应当理解,在不落在对应的权利要求或记载的范围之外的情况下,可以存在附加的元件、术语等。如本文中所用,当短语“至少”用作例如权利要求的前序部分中的过渡术语时,其为开放式的(以与术语“包括”和“包含”为开放式的相同方式)。术语“和/或”当例如以A、B、和/或C的形式使用时,是指A、B、C的任何组合或子集,例如(1)单独的A、(2)单独的B、(3)单独的C、(4)A与B、(5)A与C、(6)B与C、以及(7)A与B以及与C。如本文中所用,在描述结构、部件、物体、对象、和/或事物的上下文中,短语“A和B中的至少一个”旨在指代包括以下项中任何一个的实现方式:(1)至少一个A、(2)至少一个B、以及(3)至少一个A和至少一个B。类似地,如本文中所用,在描述结构、组件、物体、对象、和/或事物的上下文中,短语“A或B中的至少一个”旨在指代包括以下项中任何一个的实现方式:(1)至少一个A、(2)至少一个B、以及(3)至少一个A和至少一个B。如本文中所用,在描述过程、指令、动作、活动和/或步骤的执行或运行的上下文中,短语“A和B中的至少一个”旨在指代包括以下项中任何一个的实现方式:(1)至少一个A、(2)至少一个B、以及(3)至少一个A和至少一个B。类似地,如本文中所用,在描述过程、指令、动作、活动和/或步骤的执行或运行的上下文中,短语“A或B中的至少一个”旨在指代包括以下项中任何一个的实现方式:(1)至少一个A、(2)至少一个B、以及(3)至少一个A和至少一个B。
如本文中所使用的,单数引用(例如,“一”、“一个”、“第一”、“第二”等)不排除多个。如本文中所使用的,术语“一”或“一个”实体是指一个或多个该实体。术语“一”(或“一个”)、“一个或多个”、以及“至少一个”在本文中可互换使用。此外,尽管被单独列出,但是多个装置、元件或方法动作可以由例如单个单元或处理器来实现。另外,尽管各个特征可以被包括在不同的示例或权利要求中,但是这些特征可以被组合,并且包括在不同的示例或权利要求中并不意味着特征的组合是不可行的和/或不利的。
图8是表示可以由机器可读指令来实现的过程800的流程图,这些机器可读指令可以被执行以实现图5的调度器500和/或图6的调度器600。过程800从块802开始,其中工作负载接口502将与去往被分配给与调度器500和/或调度器600相关联的CBB的工作负载节点的输入缓冲器和/或来自这些工作节点的输出缓冲器相对应的信用加载到缓冲器信用存储器件504中。
在图8中的所示示例中,过程800在块804处继续,其中,信用比较器506选择被分配给与调度器500和/或调度器600相关联的CBB的工作负载节点。在块806处,信用比较器506确定调度器500和/或调度器600是否已经接收到了阈值量的信用,以便对存储在用于所选工作负载节点的输入缓冲器中的数据进行操作。例如,信用比较器506将阵列或其他数据构造中与从外部设备(例如,信用管理器408、控制器322等)接收到的信用的数量相关联的字段与阵列或其他数据构造中与针对去往所选工作负载节点的输入缓冲器的阈值信用数量相关联的字段进行比较。如果信用比较器506确定调度器500和/或调度器600未接收到阈值量的信用以对存储在用于所选工作负载节点的输入缓冲器中的数据进行操作(块806:否),则过程800前进到块812。
在图8的示例中,如果信用比较器506确定调度器500和/或调度器600已接收到阈值量的信用以便对存储在输入缓冲器中的数据进行操作(块806:是),则过程800前进到块808。在块808处,信用比较器506确定调度器500和/或调度器600是否已接收到阈值量的信用,以便将数据写入到用于所选工作负载节点的输出缓冲器。例如,信用比较器506将阵列或其他数据构造中与从外部设备(例如,信用管理器408、控制器322等)接收到的、针对用于所选工作负载节点的输出缓冲器的信用的数量相关联的字段与阵列或其他数据构造中与用于输出缓冲器的阈值信用数量相关联的字段进行比较。如果信用比较器506确定调度器500和/或调度器600未接收到阈值量的信用(块808:否),则过程800前进到块812。如果信用比较器506确定调度器500和/或调度器600已接收到阈值量的信用以便将数据写入到输出缓冲器(块808:是),则信用比较器506指示所选工作负载节点已准备好在块810处执行。
在图8的示例中,在块812处,信用比较器506确定是否存在要处理的额外工作负载节点。如果信用比较器506确定存在要处理的额外工作负载节点(块812:是),则信用比较器506选择额外工作负载节点,并且过程800前进到块806。如果信用比较器506确定不存在要处理的额外工作负载节点(块812:否),则过程800前进到块814。
在图8的所示示例中,在块814处,工作负载节点分派器508调度已准备好执行的工作负载节点。在块816处,工作负载节点分派器508根据调度来分派工作负载节点。在块818处,当所分派的工作负载节点被与调度器500和/或调度器600相关联的CBB执行时,工作负载接口502将与输入缓冲器相关联的信用发送到外部设备(例如,信用管理器408、控制器322等),其中,工作负载接口502从该外部设备接收到信用。
在图8所示的示例中,在块820处,工作负载节点分派器508确定在调度中是否存在要执行的额外工作负载节点。如果工作负载节点分派器508确定在调度中存在额外工作负载节点(块820:是),则过程800前进到块816。如果工作负载节点分派器508确定调度中不存在额外工作负载节点(块820:否),则过程800前进到块822。
在图8的示例中,在块822处,工作负载接口502确定是否继续进行操作。例如,将使得工作负载接口502确定继续进行操作的条件包括接收到额外工作负载节点。如果工作负载接口502确定继续进行操作(块822:是),则过程800前进到块802。如果工作负载接口502确定不继续进行操作(块822:否),则进程800终止。
图9是被构造为执行图8的指令以实现图5的调度器500和/或图6的调度器600的一个或多个实例的示例处理器平台900的框图。处理器平台900可以为例如服务器、个人计算机、工作站、自学习机器(例如,神经网络)、移动设备(例如,手机、智能电话、诸如iPadTM之类的平板电脑)、个人数字助理(PDA)、因特网设备、DVD播放器、CD播放器、数字视频记录器、蓝光播放器、游戏控制台、个人视频记录器、机顶盒、耳机、或其他可穿戴设备、或者任何其他类型的计算设备。
所示示例的处理器平台900包括处理器910和加速器912。所示示例的处理器910是硬件。例如,处理器910可以由一个或多个集成电路、逻辑电路、微处理器、GPU、DSP、或来自任何期望系列或制造商的控制器实现。硬件处理器可以是基于半导体(例如,基于硅)的设备。此外,加速器912可以通过例如一个或多个集成电路、逻辑电路、微处理器、GPU、DSP、FPGA、VPU、控制器、和/或来自任何期望系列或制造商的其他CBB来实现。所示示例的加速器912是硬件。硬件加速器可以是基于半导体(例如,基于硅)的设备。在此示例中,加速器912实现示例卷积引擎312、示例RNN引擎314、示例存储器316、示例MMU 318、示例DSP 320、示例控制器322、以及示例DMA单元324。此外,示例卷积引擎312、示例RNN引擎314、示例DMA单元324、示例DSP 320、以及示例控制器322中的每一者分别包括示例第一调度器326、示例第二调度器328、示例第三调度器330、示例第四调度器332、以及示例第五调度器334。在图9的示例中,示例第一调度器326、示例第二调度器328、示例第三调度器330、示例第四调度器332、以及示例第五调度器334中的每一者包括示例工作负载接口502、示例缓冲器信用存储器件504、示例信用比较器506、示例工作负载节点分派器508、和/或更一般地,调度器500。
在附加或替代示例中,处理器910实现示例卷积引擎312、示例RNN引擎314、示例存储器316、示例MMU 318、示例DSP 320、示例控制器322、以及示例DMA单元324。此外,在这样的附加或替代示例中,示例卷积引擎312、示例RNN引擎314、示例DMA单元324、示例DSP320、以及示例控制器322中的每一者分别包括示例第一调度器326、示例第二调度器328、示例第三调度器330、示例第四调度器332、以及示例第五调度器334。在这样的附加或替代示例中,示例第一调度器326、示例第二调度器328、示例第三调度器330、示例第四调度器332、以及示例第五调度器334中的每一者包括示例工作负载接口502、示例缓冲器信用存储器件504、示例信用比较器506,示例工作负载节点分派器508、和/或更一般地,调度器500。
所示示例中的处理器910包括本地存储器911(例如,缓存)。所示示例的处理器910通过总线918与包括易失性存储器914和非易失性存储器916的主存储器进行通信。此外,所示示例的加速器912包括本地存储器913(例如,缓存)。所示示例的加速器912通过总线918与包括易失性存储器914和非易失性存储器916的主存储器进行通信。易失性存储器914可以通过同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、
Figure BDA0002545881870000361
动态随机存取存储器
Figure BDA0002545881870000362
和/或任何其他类型的随机存取存储器设备来实现。非易失性存储器916可以由闪存和/或任何其他期望类型的存储器设备来实现。对主存储器914、916的访问由存储器控制器控制。
所示示例的处理器平台900还包括接口电路920。接口电路920可以通过任何类型的接口标准来实现,例如,以太网接口、通用串行总线(USB)、
Figure BDA0002545881870000363
接口、近场通信(NFC)接口、和/或PCI-express接口。
在所示的示例中,一个或多个输入设备922连接到接口电路920。(一个或多个)输入设备922允许用户将数据和/或命令输入到处理器910和/或加速器912中。(一个或多个)输入设备可以通过例如音频传感器、麦克风、相机(静物相机或摄像机)、键盘、按钮、鼠标、触摸屏、轨迹板、轨迹球、等电位点(isopoint)和/或语音识别系统来实现。
一个或多个输出设备924也连接到所示示例的接口电路920。输出设备924可以例如通过显示设备(例如,发光二极管(LED)、有机发光二极管(OLED)、液晶显示器(LCD)、阴极射线管显示器(CRT)、平面转换(IPS)显示器、触摸屏等)、触觉输出设备、打印机和/或扬声器来实现。因此,所示示例的接口电路920通常包括图形驱动卡、图形驱动芯片和/或图形驱动处理器。
所示示例中的接口电路920还包括诸如发射器、接收器、收发器、调制解调器、住宅网关、无线接入点、和/或网络接口之类的通信设备,以促进通过网络926与外部机器(例如,任何种类的计算设备)交换数据。通信可以通过例如以太网连接、数字用户线(DSL)连接、电话线连接、同轴电缆系统、卫星系统、现场线路无线系统、蜂窝电话系统等来进行。
所示示例的处理器平台900还包括用于存储软件和/或数据的一个或多个大容量存储设备928。这样的大容量存储设备928的示例包括软盘驱动器、硬驱动盘、光盘驱动器、蓝光盘驱动器、独立磁盘冗余阵列(RAID)系统、以及数字多功能盘(DVD)驱动器。
图8的机器可执行指令932可以存储在大容量存储设备928中、易失性存储器914中、非易失性存储器916中、和/或诸如CD或DVD之类的可移动非暂态计算机可读存储介质上。
根据前文,应理解,已公开了示例方法、装置和制品,这些方法、装置和制品实现工作负载的静态映射的乱序流水线执行。此外,已公开了示例方法、装置和制品,这些方法、装置和制品允许计算构建块在工作负载节点所依赖的数据可用并且存在足够的可用存储器来存储通过执行工作负载节点而生成的输出时执行工作负载节点。此外,本文中公开的示例允许工作负载节点由独立于调度和/或其他排序而被分配工作负载节点的计算构建块执行。所公开的方法、装置和制品通过提高处理设备的利用率来改进使用计算设备的效率。此外,如本文中所公开的示例方法、装置和制品减少被处理设备用于处理和/或以其他方式执行工作负载的计算周期的数量。所公开的方法、装置和制品是相应地针对计算机功能的(一个或多个)改进。
本文中公开了用于实现工作负载的静态映射的乱序流水线执行的示例方法、装置、系统、以及制品。进一步的示例及其组合包括以下项:示例1包括装置,该装置包括:接口,该接口用于将第一数量的信用加载到存储器中;比较器,该比较器用于将第一数量的信用与阈值信用数量进行比较,其中,阈值信用数量与缓冲器中的存储器可用性相关联;以及分派器,该分派器当第一数量的信用满足阈值信用数量时,选择工作负载中要在一个或多个计算构建块中的第一计算构建块处执行的工作负载节点。
示例2包括示例1的装置,其中,接口用于:当接口从信用管理器接收到第一数量的信用时,将第一数量的信用加载到存储器中;以及随着与工作负载节点相关联的一个或多个数据瓦片被从一个或多个计算构建块中的第一计算构建块传输到缓冲器,针对被传输到缓冲器的每个瓦片向信用管理器传输信用。
示例3包括示例1的装置,其中,缓冲器是与工作负载节点相关联的输出缓冲器,第一数量的信用对应于输出缓冲器,并且阈值信用数量对应于输出缓冲器中的阈值存储器量。
示例4包括示例1的装置,其中,缓冲器是与工作负载节点相关联的输入缓冲器,第一数量的信用对应于输入缓冲器,并且阈值信用数量对应于输入缓冲器中的阈值数据量。
示例5包括示例1的装置,其中,缓冲器是第一缓冲器,阈值信用数量是第一阈值信用数量,比较器用于:将第二数量的信用与第二阈值信用数量进行比较,其中,第二阈值信用数量与第二缓冲器中的存储器可用性相关联,并且分派器用于:当(1)第一数量的信用满足第一阈值信用数量并且(2)第二数量的信用满足第二阈值信用数量时,选择要在一个或多个计算构建块中的第一计算构建块处执行的工作负载节点。
示例6包括示例5的装置,其中,第二缓冲器是与工作负载节点相关联的输入缓冲器,第二数量的信用对应于输入缓冲器,并且第二阈值信用数量对应于输入缓冲器中的阈值数据量。
示例7包括示例1的装置,其中,阈值信用数量是第一阈值信用数量,工作负载节点是第一工作负载节点,并且分派器用于:当(1)第一数量的信用满足第一阈值信用数量并且(2)第二数量的信用满足第二阈值信用数量时,将第一工作负载节点和第二工作负载节点调度为在一个或多个计算构建块中的第一计算构建块处执行。
示例8包括非暂态计算机可读存储介质,该非暂态计算机可读存储介质包含指令,该指令当被执行时使得至少一个处理器至少执行以下操作:将第一数量的信用加载到存储器中;将第一数量的信用与阈值信用数量进行比较,其中,阈值信用数量与缓冲器中的存储器可用性相关联;以及当第一数量的信用满足阈值信用数量时,选择工作负载中要在计算构建块处执行的工作负载节点。。
示例9包括示例8的非暂态计算机可读存储介质,其中,该指令当被执行时使得至少一个处理器执行以下操作:当从信用管理器接收到第一数量的信用时,将第一数量的信用加载到存储器中;以及随着与工作负载节点相关联的一个或多个数据瓦片被从计算构建块传输到缓冲器,针对被传输到缓冲器的每个瓦片向信用管理器传输信用。
示例10包括示例8的非暂态计算机可读存储介质,其中,缓冲器是与工作负载节点相关联的输出缓冲器,第一数量的信用对应于输出缓冲器,并且阈值信用数量对应于输出缓冲器中的阈值存储器量。
示例11包括示例8的非暂态计算机可读存储介质,其中,缓冲器是与工作负载节点相关联的输入缓冲器,第一数量的信用对应于输入缓冲器,并且阈值信用数量对应于输入缓冲器中的阈值数据量。
示例12包括示例8的非暂态计算机可读存储介质,其中,缓冲器是第一缓冲器,阈值信用数量是第一阈值信用数量,并且其中,该指令当被执行时使得至少一个处理器执行以下操作:将第二数量的信用与第二阈值信用数量进行比较,其中,第二阈值信用数量与第二缓冲器中的存储器可用性相关联;以及当(1)第一数量的信用满足第一阈值信用数量并且(2)第二数量的信用满足第二阈值信用数量时,选择要在计算构建块处执行的工作负载节点。
示例13包括示例12的非暂态计算机可读存储介质,其中,第二缓冲器是与工作负载节点相关联的输入缓冲器,第二数量的信用对应于第二缓冲器,并且第二阈值信用数量对应于输入缓冲器中的阈值数据量。
示例14包括示例8的非暂态计算机可读存储介质,其中,阈值信用数量是第一阈值信用数量,工作负载节点是第一工作负载节点,并且指令当被执行时使得至少一个处理器执行以下操作:当(1)第一数量的信用满足第一阈值信用数量并且(2)第二数量的信用满足第二阈值信用数量时,将第一工作负载节点和第二工作负载节点调度为在计算构建块处执行。
示例15包括一种设备,该设备包括:接口连接装置,该接口连接装置用于:进行接口连接以将第一数量的信用加载到存储器中;比较装置,该比较装置用于:将第一数量的信用与阈值信用数量进行比较,其中,阈值信用数量与缓冲器中的存储器可用性相关联;以及分派装置,该分派装置用于:当第一数量的信用满足阈值信用数量时,选择工作负载中要在一个或多个计算构建块中的第一计算构建块处执行的工作负载节点。
示例16包括示例15的设备,其中,接口连接装置用于:当接口连接装置从信用管理器接收到第一数量的信用时,将第一数量的信用加载到存储器中;并且随着与工作负载节点相关联的一个或多个数据瓦片被从一个或多个计算构建块中的第一计算构建块传输到缓冲器,针对被传输到缓冲器的每个瓦片向信用管理器传输信用。
示例17包括示例15的设备,其中,缓冲器是与工作负载节点相关联的输出缓冲器,第一数量的信用对应于输出缓冲器,并且阈值信用数量对应于输出缓冲器中的阈值存储器量。
示例18包括示例15的设备,其中,缓冲器是与工作负载节点相关联的输入缓冲器,第一数量的信用对应于输入缓冲器,并且阈值信用数量对应于输入缓冲器中的阈值数据量。
示例19包括示例15的设备,其中,缓冲器是第一缓冲器,阈值信用数量是第一阈值信用数量,比较装置用于:将第二数量的信用与第二阈值信用数量进行比较,其中,第二阈值信用数量与第二缓冲器中的存储器可用性相关联,并且分派装置用于:当(1)第一数量的信用满足第一阈值信用数量并且(2)第二数量的信用满足第二阈值信用数量时,选择要在一个或多个计算构建块中的第一计算构建块处执行的工作负载节点。
示例20包括示例19的设备,其中,第二缓冲器是与工作负载节点相关联的输入缓冲器,第二数量的信用对应于输入缓冲器,并且第二阈值信用数量对应于输入缓冲器中的阈值数据量。
示例21包括示例15的设备,其中,阈值信用数量是第一阈值信用数量,工作负载节点是第一工作负载节点,并且当(1)第一数量的信用满足第一阈值信用数量并且(2)第二数量的信用满足第二阈值信用数量时,分派装置用于将第一工作负载节点和第二工作负载节点调度为在一个或多个计算构建块中的第一计算构建块处执行。
示例22包括一种方法,该方法包括:将第一数量的信用加载到存储器中;将第一数量的信用与阈值信用数量进行比较,其中,阈值信用数量与缓冲器中的存储器可用性相关联;以及当第一数量的信用满足阈值信用数量时,选择工作负载中要在一个或多个计算构建块中的第一计算构建块处执行的工作负载节点。
示例23包括示例22的方法,还包括:当从信用管理器接收到第一数量的信用时,将第一数量的信用加载到存储器中;以及随着与工作负载节点相关联的一个或多个数据瓦片被从一个或多个计算构建块中的第一计算构建块传输到缓冲器,针对被传输到缓冲器的每个瓦片向信用管理器传输信用。
示例24包括示例22的方法,其中,缓冲器是与工作负载节点相关联的输出缓冲器,第一数量的信用对应于输出缓冲器,并且阈值信用数量对应于输出缓冲器中的阈值存储器量。
示例25包括示例22的方法,其中,缓冲器是与工作负载节点相关联的输入缓冲器,第一数量的信用对应于输入缓冲器,并且阈值信用数量对应于输入缓冲器中的阈值数据量。
尽管本文中公开了某些示例方法、装置和制品,但本专利的覆盖范围不限于此。相反,本专利覆盖了完全落入本专利的权利要求的范围内的所有方法、装置和制品。
所附权利要求通过引用结合到本具体实施方式中,其中每个权利要求独立地作为本公开的单独实施例。

Claims (25)

1.一种实现工作负载的静态映射的乱序流水线执行的装置,该装置包括:
接口,所述接口用于将第一数量的信用加载到存储器中;
比较器,所述比较器用于将所述第一数量的信用与阈值信用数量进行比较,其中,所述阈值信用数量与缓冲器中的存储器可用性相关联;以及
分派器,所述分派器用于当所述第一数量的信用满足所述阈值信用数量时,选择所述工作负载中要在一个或多个计算构建块中的第一计算构建块处执行的工作负载节点。
2.根据权利要求1所述的装置,其中,所述接口用于:
当所述接口从信用管理器接收到所述第一数量的信用时,将所述第一数量的信用加载到存储器中;以及
随着与所述工作负载节点相关联的一个或多个数据瓦片被从所述一个或多个计算构建块中的所述第一计算构建块传输到所述缓冲器,针对被传输到所述缓冲器的每个瓦片向所述信用管理器传输信用。
3.根据权利要求1所述的装置,其中,所述缓冲器是与所述工作负载节点相关联的输出缓冲器,所述第一数量的信用对应于所述输出缓冲器,并且所述阈值信用数量对应于所述输出缓冲器中的阈值存储器量。
4.根据权利要求1所述的装置,其中,所述缓冲器是与所述工作负载节点相关联的输入缓冲器,所述第一数量的信用对应于所述输入缓冲器,并且所述阈值信用数量对应于所述输入缓冲器中的阈值数据量。
5.根据权利要求1所述的装置,其中,所述缓冲器是第一缓冲器,所述阈值信用数量是第一阈值信用数量,所述比较器用于:将第二数量的信用与第二阈值信用数量进行比较,其中,所述第二阈值信用数量与第二缓冲器中的存储器可用性相关联,并且所述分派器用于:当(1)所述第一数量的信用满足所述第一阈值信用数量并且(2)所述第二数量的信用满足所述第二阈值信用数量时,选择要在所述一个或多个计算构建块中的所述第一计算构建块处执行的所述工作负载节点。
6.根据权利要求1至5中任一项所述的装置,其中,所述第二缓冲器是与所述工作负载节点相关联的输入缓冲器,所述第二数量的信用对应于所述输入缓冲器,并且所述第二阈值信用数量对应于所述输入缓冲器中的阈值数据量。
7.根据权利要求1所述的装置,其中,所述阈值信用数量是第一阈值信用数量,所述工作负载节点是第一工作负载节点,并且当(1)所述第一数量的信用满足所述第一阈值信用数量并且(2)第二数量的信用满足第二阈值信用数量时,所述分派器用于将所述第一工作负载节点和第二工作负载节点调度为在所述一个或多个计算构建块中的第一计算构建块处执行。
8.一种计算机可读存储介质,包括指令,所述指令当被执行时使得至少一个处理器至少执行以下操作:
将第一数量的信用加载到存储器中;
将所述第一数量的信用与阈值信用数量进行比较,其中,所述阈值信用数量与缓冲器中的存储器可用性相关联;以及
当所述第一数量的信用满足所述阈值信用数量时,选择工作负载中要在计算构建块处执行的工作负载节点。
9.根据权利要求8所述的计算机可读存储介质,其中,所述指令当被执行时使得所述至少一个处理器执行以下操作:
当从信用管理器接收到所述第一数量的信用时,将所述第一数量的信用加载到存储器中;以及
随着与所述工作负载节点相关联的一个或多个数据瓦片被从所述计算构建块传输到所述缓冲器,针对被传输到所述缓冲器的每个瓦片向所述信用管理器传输信用。
10.根据权利要求8所述的计算机可读存储介质,其中,所述缓冲器是与所述工作负载节点相关联的输出缓冲器,所述第一数量的信用对应于所述输出缓冲器,并且所述阈值信用数量对应于所述输出缓冲器中的阈值存储器量。
11.根据权利要求8所述的计算机可读存储介质,其中,所述缓冲器是与所述工作负载节点相关联的输入缓冲器,所述第一数量的信用对应于所述输入缓冲器,并且所述阈值信用数量对应于所述输入缓冲器中的阈值数据量。
12.根据权利要求8所述的计算机可读存储介质,其中,所述缓冲器是第一缓冲器,所述阈值信用数量是第一阈值信用数量,并且其中,所述指令当被执行时使得所述至少一个处理器执行以下操作:
将第二数量的信用与第二阈值信用数量进行比较,其中,所述第二阈值信用数量与第二缓冲器中的存储器可用性相关联;以及
当(1)所述第一数量的信用满足所述第一阈值信用数量并且(2)所述第二数量的信用满足所述第二阈值信用数量时,选择要在所述计算构建块处执行的所述工作负载节点。
13.根据权利要求8至12中任一项所述的计算机可读存储介质,其中,所述第二缓冲器是与所述工作负载节点相关联的输入缓冲器,所述第二数量的信用对应于所述第二缓冲器,并且所述第二阈值信用数量对应于所述输入缓冲器中的阈值数据量。
14.根据权利要求8所述的计算机可读存储介质,其中,所述阈值信用数量是第一阈值信用数量,所述工作负载节点是第一工作负载节点,并且所述指令当被执行时使得所述至少一个处理器执行以下操作:当(1)所述第一数量的信用满足所述第一阈值信用数量并且(2)第二数量的信用满足第二阈值信用数量时,将所述第一工作负载节点和第二工作负载节点调度为在所述计算构建块处执行。
15.一种实现工作负载的静态映射的乱序流水线执行的设备,包括:
接口连接装置,所述接口连接装置用于进行接口连接以将第一数量的信用加载到存储器中;
比较装置,所述比较装置用于将所述第一数量的信用与阈值信用数量进行比较,其中,所述阈值信用数量与缓冲器中的存储器可用性相关联;以及
分派装置,所述分派装置用于当所述第一数量的信用满足所述阈值信用数量时,选择工作负载中要在一个或多个计算构建块中的第一计算构建块处执行的工作负载节点。
16.根据权利要求15所述的设备,其中,所述接口连接装置用于:
当所述接口连接装置从信用管理器接收到所述第一数量的信用时,将所述第一数量的信用加载到存储器中;并且
随着与所述工作负载节点相关联的一个或多个数据瓦片被从所述一个或多个计算构建块中的所述第一计算构建块传输到所述缓冲器,针对被传输到所述缓冲器的每个瓦片向所述信用管理器传输信用。
17.根据权利要求15所述的设备,其中,所述缓冲器是与所述工作负载节点相关联的输出缓冲器,所述第一数量的信用对应于所述输出缓冲器,并且所述阈值信用数量对应于所述输出缓冲器中的阈值存储器量。
18.根据权利要求15所述的设备,其中,所述缓冲器是与所述工作负载节点相关联的输入缓冲器,所述第一数量的信用对应于所述输入缓冲器,并且所述阈值信用数量对应于所述输入缓冲器中的阈值数据量。
19.一种实现工作负载的静态映射的乱序流水线执行的方法,包括:
将第一数量的信用加载到存储器中;
将所述第一数量的信用与阈值信用数量进行比较,其中,所述阈值信用数量与缓冲器中的存储器可用性相关联;以及
当所述第一数量的信用满足所述阈值信用数量时,选择工作负载中要在一个或多个计算构建块中的第一计算构建块处执行的工作负载节点。
20.根据权利要求19所述的方法,还包括:
当从信用管理器接收到所述第一数量的信用时,将所述第一数量的信用加载到存储器中;以及
随着与所述工作负载节点相关联的一个或多个数据瓦片被从所述一个或多个计算构建块中的所述第一计算构建块传输到所述缓冲器,针对被传输到所述缓冲器的每个瓦片向所述信用管理器传输信用。
21.根据权利要求19所述的方法,其中,所述缓冲器是与所述工作负载节点相关联的输出缓冲器,所述第一数量的信用对应于所述输出缓冲器,并且所述阈值信用数量对应于所述输出缓冲器中的阈值存储器量。
22.根据权利要19所述的方法,其中,所述缓冲器是与所述工作负载节点相关联的输入缓冲器,所述第一数量的信用对应于所述输入缓冲器,并且所述阈值信用数量对应于所述输入缓冲器中的阈值数据量。
23.根据权利要19所述的方法,其中,所述缓冲器是第一缓冲器,所述阈值信用数量是第一阈值信用数量,并且所述方法还包括:
将第二数量的信用与第二阈值信用数量进行比较,其中,所述第二阈值信用数量与第二缓冲器中的存储器可用性相关联;以及
当(1)所述第一数量的信用满足所述第一阈值信用数量并且(2)所述第二数量的信用满足所述第二阈值信用数量时,选择要在所述计算构建块处执行的所述工作负载节点。
24.根据权利要求19至23中任一项所述的方法,其中,所述第二缓冲器是与所述工作负载节点相关联的输入缓冲器,所述第二数量的信用对应于所述第二缓冲器,并且所述第二阈值信用数量对应于所述输入缓冲器中的阈值数据量。
25.根据权利要19所述的方法,其中,所述阈值信用数量是第一阈值信用数量,所述工作负载节点是第一工作负载节点,并且所述方法还包括:当(1)所述第一数量的信用满足所述第一阈值信用数量并且(2)第二数量的信用满足第二阈值信用数量时,将所述第一工作负载节点和第二工作负载节点调度为在所述计算构建块处执行。
CN202010559855.3A 2019-08-15 2020-06-18 实现工作负载的静态映射的乱序流水线执行的方法和装置 Pending CN112395010A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210600897.6A CN114895965A (zh) 2019-08-15 2020-06-18 实现工作负载的静态映射的乱序流水线执行的方法和装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/542,012 US11231963B2 (en) 2019-08-15 2019-08-15 Methods and apparatus to enable out-of-order pipelined execution of static mapping of a workload
US16/542,012 2019-08-15

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202210600897.6A Division CN114895965A (zh) 2019-08-15 2020-06-18 实现工作负载的静态映射的乱序流水线执行的方法和装置

Publications (1)

Publication Number Publication Date
CN112395010A true CN112395010A (zh) 2021-02-23

Family

ID=68693863

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202210600897.6A Pending CN114895965A (zh) 2019-08-15 2020-06-18 实现工作负载的静态映射的乱序流水线执行的方法和装置
CN202010559855.3A Pending CN112395010A (zh) 2019-08-15 2020-06-18 实现工作负载的静态映射的乱序流水线执行的方法和装置

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202210600897.6A Pending CN114895965A (zh) 2019-08-15 2020-06-18 实现工作负载的静态映射的乱序流水线执行的方法和装置

Country Status (6)

Country Link
US (2) US11231963B2 (zh)
JP (1) JP7400169B2 (zh)
KR (1) KR102684511B1 (zh)
CN (2) CN114895965A (zh)
DE (1) DE102020119519A1 (zh)
TW (1) TWI802800B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10901657B2 (en) * 2018-11-29 2021-01-26 International Business Machines Corporation Dynamic write credit buffer management of non-volatile dual inline memory module
US11231963B2 (en) 2019-08-15 2022-01-25 Intel Corporation Methods and apparatus to enable out-of-order pipelined execution of static mapping of a workload
US11875247B1 (en) * 2020-06-18 2024-01-16 Amazon Technologies, Inc. Input batching with serial dynamic memory access
US11704058B2 (en) * 2020-07-28 2023-07-18 Samsung Electronics Co., Ltd. Systems and methods for resource-based scheduling of commands
US11620159B2 (en) 2021-04-23 2023-04-04 Samsung Electronics Co., Ltd. Systems and methods for I/O command scheduling based on multiple resource parameters
US12001701B2 (en) * 2022-01-26 2024-06-04 Western Digital Technologies, Inc. Storage biasing for solid state drive accelerators

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5418953A (en) * 1993-04-12 1995-05-23 Loral/Rohm Mil-Spec Corp. Method for automated deployment of a software program onto a multi-processor architecture
JP3892829B2 (ja) 2003-06-27 2007-03-14 株式会社東芝 情報処理システムおよびメモリ管理方法
JP5349515B2 (ja) * 2011-03-14 2013-11-20 株式会社東芝 バッファ管理装置、バッファ管理方法及び記憶装置
JP6695320B2 (ja) 2014-07-30 2020-05-20 リニア アルジェブラ テクノロジーズ リミテッド 低電力コンピュータイメージング
US10002099B2 (en) * 2014-11-13 2018-06-19 Cavium, Inc. Arbitrated access to resources among multiple devices
GB2569271B (en) * 2017-10-20 2020-05-13 Graphcore Ltd Synchronization with a host processor
US10649813B2 (en) * 2018-03-29 2020-05-12 Intel Corporation Arbitration across shared memory pools of disaggregated memory devices
US11231963B2 (en) 2019-08-15 2022-01-25 Intel Corporation Methods and apparatus to enable out-of-order pipelined execution of static mapping of a workload

Also Published As

Publication number Publication date
KR102684511B1 (ko) 2024-07-15
KR20210021263A (ko) 2021-02-25
DE102020119519A1 (de) 2021-02-18
TW202109285A (zh) 2021-03-01
US11847497B2 (en) 2023-12-19
JP2021034020A (ja) 2021-03-01
TWI802800B (zh) 2023-05-21
US20220197703A1 (en) 2022-06-23
JP7400169B2 (ja) 2023-12-19
US20190370073A1 (en) 2019-12-05
CN114895965A (zh) 2022-08-12
US11231963B2 (en) 2022-01-25

Similar Documents

Publication Publication Date Title
US11847508B2 (en) Convergence among concurrently executing threads
US11847497B2 (en) Methods and apparatus to enable out-of-order pipelined execution of static mapping of a workload
US10372428B1 (en) Dynamic computational acceleration using a heterogeneous hardware infrastructure
JP6329274B2 (ja) コンパイラ最適化のためのメモリ参照メタデータ
KR101590734B1 (ko) 그래픽 프로세싱 유닛에서의 메모리 공유
US20230333913A1 (en) Methods and apparatus to configure heterogenous components in an accelerator
US11036477B2 (en) Methods and apparatus to improve utilization of a heterogeneous system executing software
US11880715B2 (en) Method and system for opportunistic load balancing in neural networks using metadata
EP3779778A1 (en) Methods and apparatus to enable dynamic processing of a predefined workload
US20240193721A1 (en) System and method for adaptive graph-to-stream scheduling
US11243752B2 (en) Multi-version shaders
US20190318229A1 (en) Method and system for hardware mapping inference pipelines
US20230236878A1 (en) Efficiently launching tasks on a processor
JP7523964B2 (ja) アクセラレータにおいてヘテロジニアスコンポーネントを設定する方法及び装置
CN112395249A (zh) 用于多个异步消耗者的方法和装置
US20220206851A1 (en) Regenerative work-groups
US20230136365A1 (en) Methods and apparatus to allocate accelerator usage
US20220222177A1 (en) Systems, apparatus, articles of manufacture, and methods for improved data transfer for heterogeneous programs

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