CN112394938A - 在加速器中配置异构组件的方法和装置 - Google Patents

在加速器中配置异构组件的方法和装置 Download PDF

Info

Publication number
CN112394938A
CN112394938A CN202010585112.3A CN202010585112A CN112394938A CN 112394938 A CN112394938 A CN 112394938A CN 202010585112 A CN202010585112 A CN 202010585112A CN 112394938 A CN112394938 A CN 112394938A
Authority
CN
China
Prior art keywords
workload
node
selector
accelerator
building block
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
CN202010585112.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
Publication of CN112394938A publication Critical patent/CN112394938A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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
    • 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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30079Pipeline control instructions, e.g. multicycle NOP
    • 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, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/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
    • 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
    • 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
    • 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
    • G06F8/453Data distribution
    • 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/5055Allocation 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 software capabilities, i.e. software resources associated or available to the machine

Abstract

本发明公开了在加速器中配置异构组件的方法和装置。一种示例装置包括:图编译器,该图编译器用于标识工作负载中的工作负载节点并且为该工作负载节点生成选择器;和该选择器,该选择器用于标识计算构建块的输入条件和输出条件,其中图编译器用于响应于从选择器获得所标识的输入条件和输出条件,将工作负载节点映射到计算构建块。

Description

在加速器中配置异构组件的方法和装置
技术领域
本公开总体涉及处理,并且更特别地,涉及在加速器中配置异构组件的方法和装置。
背景技术
计算机硬件制造商开发了用于在计算机平台的各种组件中使用的硬件组件。例如,计算机硬件制造商开发了主板、主板用芯片组、中央处理单元(CPU)、硬盘驱动器(HDD)、固态驱动器(SSD)和其他计算机组件。另外,计算机硬件制造商开发了称为加速器的处理元件,以加速对工作负载的处理。例如,加速器可以是CPU、图形处理单元(GPU)、视觉处理单元(VPU)和/或现场可编程门阵列(FPGA)。
发明内容
根据本公开的实施例,提供了一种用于在加速器中配置异构组件的装置,所述装置包括:图编译器,所述图编译器用于:标识工作负载中的工作负载节点;并且为所述工作负载节点生成选择器;和所述选择器,所述选择器用于标识计算构建块的输入条件和输出条件,其中所述图编译器用于响应于从所述选择器获得所标识的输入条件和输出条件,将所述工作负载节点映射到所述计算构建块。
根据本公开的实施例,提供了至少一种非暂态计算机可读存储介质,所述至少一种非暂态计算机可读存储介质包括指令,所述指令当被执行时,使至少一个处理器至少执行以下操作:标识工作负载中的工作负载节点;为所述工作负载节点生成选择器,所述选择器与用于执行所述工作负载节点的计算构建块相关联;标识所述计算构建块的输入条件和输出条件;并且响应于获得所标识的输入条件和输出条件,将所述工作负载节点映射到所述计算构建块。
根据本公开的实施例,提供了一种设备,所述设备包括:编译装置,用于:标识工作负载中的工作负载节点;并且为所述工作负载节点生成选择装置,所述选择装置与用于执行所述工作负载节点的计算构建块相关联;和所述选择装置,所述选择装置用于标识所述计算构建块的输入条件和输出条件,其中所述编译装置还用于响应于获得所标识的输入条件和输出条件,将所述工作负载节点映射到所述计算构建块。
根据本公开的实施例,提供了一种用于在加速器中配置异构组件的方法,所述方法包括:标识工作负载中的工作负载节点;为所述工作负载节点生成选择器,所述选择器与用于执行所述工作负载节点的计算构建块相关联;标识所述计算构建块的输入条件和输出条件;以及响应于获得所标识的输入条件和输出条件,将所述工作负载节点映射到所述计算构建块。
附图说明
图1是图示了在加速器中配置异构组件的示例计算系统的框图。
图2是图示了包括示例图编译器和一个或多个示例选择器的示例计算系统的框图。
图3是图示了图2的一个或多个选择器中的示例选择器的示例框图。
图4是图示了图2的图编译器的示例框图。
图5是表示使用示例第一CBB和示例第二CBB来执行的工作负载的示例流水线的图形图示。
图6是表示可以被执行以实现图2、图3和/或图4的图编译器、选择器和/或一个或多个选择器以生成图2的可执行文件的过程的流程图。
图7是表示可以被执行以实现图2的信用管理器和/或配置控制器以促进图2的可执行文件的执行的过程的流程图。
图8是被构造为执行图6和/或图7的指令以实现图2、图3和/或图4的示例图编译器、示例一个或多个选择器、示例选择器和/或加速器的示例处理器平台的框图。
附图不是按比例的。一般而言,相同的标号将在各幅图和伴随的书面描述的各处用于指代相同或相似的部件。连接引用(例如,附接、耦合、连接、以及接合)应被广义地解释,并且除非另外指明,否则其可包括元件集合之间的中间构件以及元件之间的相对移动。因此,连接引用不一定表示两个元件直接连接并且彼此成固定关系。
本文中在识别可被分开提及的多个元素或组件时使用描述语“第一”、“第二”、“第三”等等。除非另有指明或者基于其使用上下文另有理解,否则这种描述语并不打算灌输优先级、物理顺序或者列表中的布置或者时间上的排序的任何含义,而只是用作用于分开提及多个元素或组件的标签,以便容易理解公开的示例。在一些示例中,描述语“第一”在具体实施方式中可用于提及某一元素,而同一元素在权利要求中可用不同的描述语来提及,例如“第二”或“第三”。在这种情况中,应当理解这种描述语只是为了容易引用多个元素或组件而使用的。
具体实施方式
许多计算硬件制造商开发了称为加速器的处理元件,以加速对工作负载的处理。例如,加速器可以是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)范式)。此外,可以将与函数、算法、程序、应用和/或其他代码组合的调度表示为包括节点的图,其中图表示工作负载并且每个节点(例如,工作负载节点)表示那个工作负载的特定任务。此外,图中的不同节点之间的连接表示为了执行特定工作负载节点所需的数据输入和/或输出,并且图的顶点表示图的工作负载节点之间的数据依赖关系。
编译调度(例如,图)的常见实现方式包括图编译器,所述图编译器接收调度(例如,图)并且将工作负载的各种工作负载节点指派给位于加速器内的各种计算构建块(CBB)。在异构系统中,图编译器被单独地配置为与每个独立CBB进行通信。例如,为了让图编译器将工作负载节点指派和/或以其他方式发送给DSP和/或位于DSP中的内核,这样的图编译器必须具有DSP包括的输入条件和输出条件(例如,输入的类型和输出的类型)的知识。在包括各种计算构建块(CBB)的异构系统中,或者在接收和/或以其他方式获得要在各种CBB上执行的各种工作负载节点的异构系统中,使用单个图编译器的执行变得计算密集。此外,由于系统的异构性质,在运行时期间CBB之间的通信和控制常常是不切实际的。同样地,CBB之间的数据交换同步常常是计算密集的。
另外,将工作负载的各个工作负载节点指派给位于异构系统内的各个内核同样地要求图编译器被单独地配置为与每个独立内核进行通信。另外,内核常常由用户加载到加速器后生产中,因此,将要求重新配置图编译器。例如,图编译器可能无法在图编译器的初始配置之后与已经生产和/或以其他方式加载到加速器中的内核进行通信(例如,发送工作负载节点)。
本文公开的示例包括在加速器中配置异构组件的方法和装置。本文公开的示例包括可使用任何任意调度(arbitrary schedule)和/或图来操作的加速器。例如,本文公开的示例包括可高效地理解任意调度和/或图并且将任意调度和/或图映射到加速器中的图编译器。在下面更详细地说明本文公开的此类示例的操作。
本文公开的示例包括在编译时间期间对各种CBB的抽象和/或概括。本文公开的示例包括对于CBB采纳常见标识。例如,无论是否是异构的,都可以通过生成相应的选择器来与CBB交互而标识每个CBB。在这样的示例中,响应于分析工作负载中的工作负载节点而生成选择器。因为每个工作负载节点常常包括关于要用于执行的CBB的类型的细节,所以可做出选择器与这样的CBB交互。在本文公开的示例中,选择器确定这种CBB的输入条件和/或输出条件。所做出的选择器是能够与工作负载和工作负载中的CBB进行通信(例如,在工作负载域和CBB域中通信)的不同实体。结果,图编译器包括用以在工作负载域中启用操作的插件。如本文所用,工作负载域指代基于工作负载的抽象和/或概括级别。同样地,如本文所用,CBB域比工作负载域更详细地指代基于(一个或多个)CBB的抽象和/或概括级别。本文公开的此类示例使得能实现对系统固有的或在稍后的时间包括在系统中的CBB的抽象。
本文公开的示例利用被标识为输入缓冲器和输出缓冲器的缓冲器。在本文公开的此类示例中,使用缓冲器来实现作为生产者(例如,生成和/或以其他方式写入供由另一CBB使用的数据的CBB)或消耗者(例如,获得和/或以其他方式读取由另一CBB生产的数据的CBB)的CBB的流水线。通过实现作为生产者或消耗者的CBB的流水线,图编译器可在调整大小和/或将工作负载(例如,图)的工作负载节点(例如,任务)分配给每个CBB时使用通用启发式方法(例如,为了解决问题而设计的技术、在工作负载域中操作的启发式方法)。在本文公开的一些示例中,图编译器可以提供信息,所述信息可以包括用于执行工作负载节点(例如,任务)的缓冲器的大小和槽数(例如,存储大小)。以这样的方式,示例信用管理器可以基于缓冲器中的n个数量的槽来生成n个数量的信用。因此,n个数量的信用指示CBB可以写入或读取的存储器中可用的n个数量的空间。信用生成器将n个数量的信用提供给示例配置控制器以封装并发送给由配置控制器确定并且在示例基础结构(fabric)(例如,控制和配置基础结构)上传送的对应的生产者和/或消耗者。
此外,本文公开的示例包括对于图编译器实现CBB的标准表示。本文公开的示例包括为工作负载中的每个工作负载节点所配置的选择器。选择器被配置为标识由所对应的工作负载节点标识的CBB的标准输入条件和/或输出条件。进一步地,这样的选择器被配置为向图编译器提供通过抽象化设备的输入条件和/或输出条件所指定的抽象化设备的列表。在本文公开的此类示例中,图编译器包括可形成工作负载(例如,图)中的工作负载节点(例如,任务)与各种CBB之间的转换层(例如,CBB域与工作负载域之间的转换层)以使得能够将工作负载节点(例如,任务)映射到各种CBB的插件。另外,在本文公开的一些示例中,选择器可以将相关CBB的具体要求输送回给图编译器。例如,选择器可以向图编译器传送:这样的CBB要求一定百分比的存储器分配以便操作。
在运行时期间,本文公开的示例包括用于配置CBB以使得能够在CBB之间通信的常见架构。本文公开的示例结合由图编译器生成的流水线利用信用的系统。这样的系统既使得图编译器能够将来自工作负载(例如,图)的工作负载节点(例如,任务)映射到生产者和消耗者流水线中,又使得能够在CBB之间通信。一旦作为初始生产者的CBB(例如,执行指示要写入数据的工作负载节点的CBB)完成工作负载节点的执行,就将信用发送回到如由CBB所看到的起始点,而不是发送回到下一CBB。在本文公开的示例中,这种起始点可以是信用管理器。
图1是图示了在加速器中配置异构组件的示例计算系统100的框图。在图1的示例中,计算系统100包括示例系统存储器102和示例异构系统104。示例异构系统104包括示例主机处理器106、示例第一通信总线108、示例第一加速器110a、示例第二加速器110b和示例第三加速器110c。示例第一加速器110a、示例第二加速器110b和示例第三加速器110c中的每一个均包括对相应的加速器的操作通用和/或特定的各种CBB。
在图1的示例中,系统存储器102可以由用于存储数据的任何设备来实现,所述任何设备例如为闪速存储器、磁性介质、光学介质等。此外,存储在示例系统存储器102中的数据可以具有任何数据格式,例如二进制数据、逗号分隔的数据、制表符分隔的数据、结构化查询语言(SQL)结构等。系统存储器102耦合到异构系统104。在图1中,系统存储器102是主机处理器106、第一加速器110a、第二加速器110b和第三加速器110c中的至少一者之间的共享存储装置。在图1的示例中,系统存储器102是计算系统100本地的物理存储装置;然而,在其他示例中,系统存储器102可以在计算系统100外部和/或以其他方式远离计算系统100。在另外的示例中,系统存储器102可以是虚拟存储装置。在图1的示例中,系统存储器102是非易失性存储器(例如,只读存储器(ROM)、可编程ROM(PROM)、可擦除PROM(EPROM)、电可擦除PROM(EEPROM)等)。在其他示例中,系统存储器102可以是非易失性基本输入/输出系统(BIOS)或闪存存储装置。在另外的示例中,系统存储器102可以是易失性存储器。
在图1中,异构系统104耦合到系统存储器102。在图1的示例中,异构系统104通过在主机处理器106和/或第一加速器110a、第二加速器110b或第三加速器110c中的一者或多者上执行工作负载来处理工作负载。在图1中,异构系统104是片上系统(SoC)。或者,异构系统104可以是任何其他类型的计算或硬件系统。
在图1的示例中,主机处理器106是被配置为执行指令(例如,机器可读指令)以执行与计算机和/或计算设备(例如,计算系统100)相关联的操作和/或以其他方式促进所述操作的完成的处理元件。在图1的示例中,主机处理器106是用于异构系统104的主处理元件并且包括至少一个核心。或者,主机处理器106可以是共同主处理元件(例如,在利用不止一个CPU的示例中),然而在其他示例中,主机处理器106可以是辅处理元件。
在所图示的图1的示例中,第一加速器110a、第二加速器110b和/或第三加速器110c中的一者或多者是可以由在异构系统104上为了计算任务(例如硬件加速)而执行的程序所利用的处理元件。例如,第一加速器110a是包括被设计和/或以其他方式配置或构造为改进处理AI(例如,VPU)的机器视觉任务的整体性能和处理速度的处理资源的处理元件。
在本文公开的示例中,主机处理器106、第一加速器110a、第二加速器110b和第三加速器110c中的每一者均与计算系统100和/或系统存储器102的其他元件通信。例如,主机处理器106、第一加速器110a、第二加速器110b、第三加速器110c和/或系统存储器102经由第一通信总线108通信。在本文公开的一些示例中,主机处理器106、第一加速器110a、第二加速器110b、第三加速器110c和/或系统存储器102可以经由任何合适的有线和/或无线通信方法通信。另外,在本文公开的一些示例中,主机处理器106、第一加速器110a、第二加速器110b、第三加速器110c和/或系统存储器102中的每一者均可以经由任何合适的有线和/或无线通信方法与计算系统100外部的任何组件通信。
在图1的示例中,第一加速器110a包括示例卷积引擎112、示例RNN引擎114、示例存储器116、示例存储器管理单元(MMU)118、示例DSP 120和示例控制器122。在本文公开的示例中,卷积引擎112、RNN引擎114、存储器116、存储器管理单元(MMU)118、DSP 120和/或控制器122中的任一者可以被称为CBB。在本文公开的一些示例中,存储器116和/或MMU 118可以被称为基础设施元件。例如,可以在第一加速器110a外部实现存储器116和/或MMU 118。示例卷积引擎112、示例RNN引擎114、示例存储器116、示例MMU 118、示例DSP120和示例控制器122中的每一者分别包括示例第一调度器124、示例第二调度器126、示例第三调度器128、示例第四调度器130、示例第五调度器132和示例第六调度器134。示例DSP 120和示例控制器122的每一者均另外包括示例第一内核库136和示例第二内核库138。
在所图示的图1的示例中,卷积引擎112由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。卷积引擎112是被配置为改进对与卷积相关联的任务的处理的设备。此外,卷积引擎112改进对与视觉影像的分析相关联的任务和/或与CNN相关联的其他任务的处理。
在图1的示例中,RNN引擎114由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。RNN引擎114是配置为改进对与RNN相关联的任务的处理的设备。另外,RNN引擎114改进对与未分段的连接手写识别、语音识别的分析相关联的任务和/或与RNN相关联的其他任务的处理。
在图1的示例中,存储器116可以由用于存储数据的任何设备来实现,所述任何设备例如为闪速存储器、磁性介质、光学介质等。此外,存储在示例存储器116中的数据可以具有任何数据格式,例如二进制数据、逗号分隔的数据、制表符分隔的数据、结构化查询语言(SQL)结构等。存储器116是卷积引擎112、RNN引擎114、MMU 118、DSP120和包括直接存储器存取(DMA)功能性的控制器122中的至少一者之间的共享存储装置。此外,存储器116允许卷积引擎112、RNN引擎114、MMU 118、DSP 120和控制器122中的至少一者独立于主机处理器106访问系统存储器102。在图1的示例中,存储器116是第一加速器110a本地的物理存储装置;然而,在其他示例中,存储器116可以在第一加速器110a外部和/或以其他方式远离第一加速器110a。在另外的示例中,存储器116可以是虚拟存储装置。在图1的示例中,存储器116是非易失性存储装置(例如,只读存储器(ROM)、可编程ROM(PROM)、可擦除PROM(EPROM)、电可擦除PROM(EEPROM)等)。在其他示例中,存储器116可以是非易失性基本输入/输出系统(BIOS)或闪存存储装置。在另外的示例中,存储器116可以是易失性存储器。
在所图示的图1的示例中,示例MMU 118由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。MMU 118是包括对存储器116和/或系统存储器102的所有地址的引用的设备。MMU 118附加地将由卷积引擎112、RNN引擎114、DSP 120和/或控制器122中的一者或多者利用的虚拟存储器地址转换为存储器116和/或系统存储器102中的物理地址。
在图1的示例中,DSP 120由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。DSP 120是改进对数字信号的处理的设备。例如,DSP 120促进用于对连续真实世界信号(例如来自相机和/或与计算机视觉有关的其他传感器的数据)进行测量、滤波和/或压缩的处理。更一般地,DSP 120用于经由第一内核库136中的示例内核实现来自不由其他固定功能CBB(例如,RNN引擎114、CNN引擎等)服务的工作负载的任何工作负载节点。此外,如果工作负载包括基于第一语言(例如,TensorFlow、CAFFE、ONNX等)编写的100个工作负载节点,则第一加速器110a、第二加速器110b和/或第三加速器110c可以将100个工作负载节点中的20个工作负载节点作为固定功能来执行(例如,使用RNN引擎114、CNN引擎等来执行),然后使用第一内核库136中的相应的内核来执行100个工作负载节点中的剩余80个工作负载节点。以这种方式,可将基于相同语言(例如,TensorFlow、CAFFE、ONNX等)的任何任意工作负载节点映射到第一加速器110a、第二加速器110b和/或第三加速器110c中。
在图1中,控制器122由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。控制器122作为第一加速器110a的控制单元被实现。例如,控制器122指导第一加速器110a的操作。在一些示例中,控制器122实现信用管理器。此外,控制器122可指示卷积引擎112、RNN引擎114、存储器116、MMU 118和/或DSP 120中的一者或多者如何对从主机处理器106接收的机器可读指令做出响应。
在图1的示例中,第一调度器124、第二调度器126、第三调度器128、第四调度器130、第五调度器132和第六调度器134中的每一者均是确定卷积引擎112、RNN引擎114、存储器116、MMU 118、DSP120和控制器122何时分别执行已经被卸载到和/或以其他方式发送到第一加速器110a的工作负载的部分的设备。另外,第一内核库136和第二内核库138中的每一者均是包括一个或多个内核的数据结构。第一内核库136和第二内核库138的内核例如是分别为了DSP 120和控制器122上的高吞吐量而编译的例程。内核对应于例如要在计算系统100上运行的可执行文件的可执行子部分。
在本文公开的示例中,卷积引擎112、RNN引擎114、存储器116、MMU 118、DSP 120和控制器122中的每一者与第一加速器110a的其他元件通信。例如,卷积引擎112、RNN引擎114、存储器116、MMU118、DSP 120和控制器122经由示例第二通信总线140通信。在一些示例中,第二通信总线140可以由一个或多个计算基础结构(例如,配置和控制基础结构、数据基础结构等)来实现。在本文公开的一些示例中,卷积引擎112、RNN引擎114、存储器116、MMU118、DSP 120和控制器122可以经由任何合适的有线和/或无线通信方法通信。另外,在本文公开的一些示例中,卷积引擎112、RNN引擎114、存储器116、MMU 118、DSP 120和控制器122中的每一者均可以经由任何合适的有线和/或无线通信方法与第一加速器110a外部的任何组件通信。
如前所述,示例第一加速器110a、示例第二加速器110b和/或示例第三加速器110c中的任一者可以包括对相应的加速器的操作通用和/或特定的各种CBB。例如,第一加速器110a、第二加速器110b和第三加速器110c中的每一者均包括通用CBB,例如存储器、MMU、控制器以及用于每个CBB的相应的调度器。附加地或替代地,可以包括和/或添加不位于第一加速器110a、示例第二加速器110b和/或示例第三加速器110c中的任一者中的外部CBB。例如,计算系统100的用户可以利用第一加速器110a、第二加速器110b和/或第三加速器110c中的任一者来操作外部RNN引擎。
虽然在图1的示例中,第一加速器110a实现VPU并且包括卷积引擎112、RNN引擎114和DSP 120(例如,特定于第一加速器110a的操作的CBB),第二加速器110b和第三加速器110c可以包括特定于第二加速器110b和/或第三加速器110c的操作的附加或替代CBB。例如,如果第二加速器110b实现GPU,则特定于第二加速器110b的操作的CBB可以包括线程分配器、图形技术接口和/或期望改进处理计算机图形和/或图像处理的处理速度和整体性能的任何其他CBB。此外,如果第三加速器110c实施FPGA,则特定于第三加速器110c的操作的CBB可包括一个或多个算术逻辑单元(ALU)和/或期望改进处理一般计算的处理速度和整体性能的任何其他CBB。
虽然图1的异构系统104包括主机处理器106、第一加速器110a、第二加速器110b和第三加速器110c,但是在一些示例中,异构系统104可以包括任何数量的处理元件(例如,主机处理器和/或加速器),包括专用指令集处理器(ASIP)、物理处理单元(PPU)、指定DSP、图像处理器、协处理器、浮点单元、网络处理器、多核心处理器和前端处理器。
图2是图示了包括示例图编译器202和一个或多个示例选择器204的示例计算系统200的框图。在图2的示例中,计算系统200还包括示例工作负载206和示例加速器208。此外,在图2中,加速器208包括示例信用管理器210、示例控制和配置(CnC)基础结构212、示例卷积引擎214、示例MMU 216、示例RNN引擎218、示例DSP 220、示例存储器222和示例配置控制器224。在图2的示例中,存储器222包括示例DMA单元226和一个或多个示例缓冲器228。在本文公开的其他示例中,可以包括任何合适的CBB和/或将其添加到加速器208中。
在所图示的图2的示例中,示例图编译器202是用于编译的装置或编译装置。在所图示的图2的示例中,一个或多个选择器的示例选择器是用于选择的装置或选择装置。在所图示的图2的示例中,示例信用管理器210是用于信用管理的装置或信用管理装置。在所图示的图2的示例中,示例配置控制器224是用于控制的装置或控制装置。在图2的示例中,卷积引擎214、MMU 216、RNN引擎218、DSP 220、存储器222和/或内核存储体(kernel bank)232中的内核中的任一者可以是用于计算的装置或计算装置。
在所图示的图2的示例中,图编译器202由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。在图2中,图编译器202耦合到一个或多个选择器204并且耦合到加速器208。在操作中,图编译器202接收工作负载206并且将工作负载206编译成要由加速器208执行的示例可执行文件230。例如,图编译器202接收工作负载206并且将工作负载206(例如,图)的各种工作负载节点指派给加速器208的各种CBB(例如,卷积引擎214、MMU 216、RNN引擎218、DSP220和/或DMA单元226中的任一者)。图编译器202还生成与工作负载206中的每个工作负载节点相对应的一个或多个选择器204的示例选择器。另外,图编译器202为加速器208的存储器222中的一个或多个缓冲器228分配存储器。在本文公开的示例中,可执行文件230可以在单独的系统(例如,编译系统和/或编译处理器)上生成并且存储以供以后在不同的系统(例如,部署系统、运行时系统、部署处理器等)上使用。例如,图编译器202和一个或多个选择器204可以位于与加速器208分开的系统上。
在所图示的图2的示例中,一个或多个选择器204由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。一个或多个选择器204耦合到图编译器202、加速器208,并且耦合到位于DSP 220内的示例内核存储体232。一个或多个选择器204耦合到图编译器202以获得工作负载206。工作负载206中的每个工作负载节点(例如,任务)指示要用于执行相关工作负载节点的CBB(例如,卷积引擎214、MMU 216、RNN引擎218、DSP 220和/或DMA单元226中的任一者)。在本文公开的示例中,一个或多个选择器204中的选择器是为每个工作负载节点而生成的并且与所对应的CBB(例如,卷积引擎214、MMU216、RNN引擎218、DSP 220和/或DMA单元226中的任一者)和/或内核存储体232中的内核相关联。一个或多个选择器204是由图编译器202响应于工作负载206而生成的,因此可标识各种CBB(例如,卷积引擎214、MMU216、RNN引擎218、DSP 220和/或DMA单元226中的任一者)和/或内核存储体232中的内核的相应的输入条件和/或输出条件。可以将由一个或多个选择器进行的这样的标识表示为供由图编译器202使用的抽象知识。这种抽象知识使得图编译器202能够独立于加速器208的异构性质而操作。
另外,图编译器202利用一个或多个选择器204来将来自工作负载206的相应的工作负载节点映射到对应的CBB(例如,卷积引擎214、MMU 216、RNN引擎218、DSP 220和/或DMA单元226中的任一者)和/或内核存储体232中的内核。此外,图编译器202利用一个或多个选择器204来按适当量的信用等针对每个对应的工作负载节点和相邻工作负载节点(例如,工作负载节点的所得消耗者和/或生产者)的具体操作和参数配置对应的CBB(例如,卷积引擎214、MMU 216、RNN引擎218、DSP 220和/或DMA单元226中的任一者)。在本文公开的一些示例中,一个或多个选择器204可以将来自工作负载206的相应的工作负载节点映射到对应的CBB(例如,卷积引擎214、MMU 216、RNN引擎218、DSP 220和/或DMA单元226中的任一者)和/或内核存储体232中的内核。
在本文公开的示例中,可以将一个或多个选择器204包括在图编译器202中。在本文公开的此类示例中,可将附加选择器包括到一个或多个选择器204中,或者替代地,可以响应于工作负载206和/或加速器208中的变化(例如,提供新工作负载206、向加速器208添加附加CBB等)而更改一个或多个选择器204中的当前选择器。
在一些示例中,图编译器202从工作负载206中标识指示数据将被缩放的工作负载节点。指示数据将被缩放的这样的工作负载节点被发送到与这样的任务相关联的一个或多个选择器204。与所标识的工作负载节点相关联的一个或多个选择器204可标识CBB(例如,卷积引擎214、MMU 216、RNN引擎218、DSP 220和/或DMA单元226中的任一者)和/或内核存储体232中的内核以及这种标识的CBB和/或内核存储体232中的内核的经标识的输入条件和/或输出条件,以便让图编译器202执行工作负载节点。
在图2的示例中,工作负载206例如是要由加速器208执行的图、函数、算法、程序、应用和/或其他代码。在一些示例中,工作负载206是图、函数、算法、程序、应用和/或其他代码的描述。工作负载206可以是从用户和/或任何合适的输入获得的任何任意图。例如,工作负载206可以是与AI处理有关的工作负载,例如深度学习拓扑和/或计算机视觉。在操作中,工作负载206(例如,图)中的每个工作负载节点包括指定具体CBB(例如,卷积引擎214、MMU216、RNN引擎218、DSP 220和/或DMA单元226中的任一者)、内核存储体232中的内核和/或用于在工作负载节点中执行任务的输入条件和/或输出条件的约束。因此,图编译器202中包括的示例插件236使得能实现工作负载206(例如,图)的工作负载节点与相关联的CBB和/或内核存储体232中的内核之间的映射。插件236与由一个或多个选择器204获得的抽象知识(例如,每个CBB和/或内核存储体232中的内核的相应的标准输入定义和/或输出定义)交互以指派工作负载206(例如,图)中的工作负载节点。在本文公开的此类示例中,插件236可以在工作负载206(例如,图)中的工作负载节点与各种CBB(例如,卷积引擎214、MMU216、RNN引擎218、DSP 220和/或DMA单元226中的任一者)和/或内核存储体232中的内核之间形成转换层以使得能够基于由一个或多个选择器204获得的抽象知识(例如,每个CBB和/或内核存储体232中的内核的相应的标准输入定义和/或输出定义)将工作负载206中的工作负载节点映射到各种CBB(例如,卷积引擎214、MMU 216、RNN引擎218、DSP 220和/或DMA单元226中的任一者)和/或内核存储体232中的内核。
在图2的示例中,加速器208耦合到图编译器202并且耦合到一个或多个选择器204。在本文公开的一些示例中,在编译时间期间图编译器202可以在编译系统(例如,第一处理器)上操作并且利用一个或多个选择器204来执行编译过程(例如,生成可执行文件230)。结果,图编译器202在编译系统(例如,第一处理器)上生成示例可执行文件230。附加地或替代地,可以将可执行文件230存储在数据库中以供以后使用。例如,可以在编译系统(例如,第一处理器)和/或任何外部和/或内部系统(例如,部署系统、第二处理器等)上存储并执行可执行文件230。在运行时期间,可执行文件230可在部署系统(例如,图1的系统100、第二处理器等)中操作。编译系统(例如,第一处理器)可以在与部署系统(例如,图1的系统100、第二处理器等)分开的位置中操作。或者,编译系统和/或部署系统可以被组合,并且因此,使得能够将任意工作负载(例如,工作负载206)即时(JIT)编译成正由加速器立即执行的可执行文件(例如,可执行文件230)。
在所图示的图2的示例中,信用管理器210耦合到CnC基础结构212。信用管理器210由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。信用管理器210是管理与卷积引擎214、MMU216、RNN引擎218和/或DSP 220中的一者或多者相关联的信用的设备。在一些示例中,信用管理器210可由控制器实现为信用管理器控制器。信用表示与在存储器222中可用的工作负载节点相关联的数据和/或存储器222中可用于工作负载节点的输出的空间量。在另一示例中,信用和/或信用值可以指示可用于存储和/或以其他方式写入数据的缓冲器(例如,缓冲器228中的一个缓冲器)中的槽数。
信用管理器210和/或配置控制器224可基于从图编译器202接收并由配置控制器224分发的可执行文件230来将存储器222划分成与给定工作负载的每个工作负载节点相关联的一个或多个缓冲器(例如,缓冲器228)。因此,信用可以表示可用于存储和/或以其他方式写入数据的相关缓冲器(例如,缓冲器228)中的槽。例如,信用管理器210接收与工作负载206相对应的信息(例如,配置和控制消息234和/或以其他方式的配置消息和控制消息)。例如,信用管理器210经由CnC基础结构212从配置控制器224接收由配置控制器224确定的指示初始化为生产者的CBB和初始化为消耗者的CBB的信息。
在本文公开的示例中,响应于从配置控制器224接收到的指示要执行某个工作负载节点的指令(例如,响应于配置控制器224发送配置和控制消息234),信用管理器210将所对应的信用提供和/或以其他方式发送给作为初始生产者的CBB(例如,将三个信用提供给卷积引擎214以将数据写入到缓冲器的三个槽中)。一旦作为初始生产者的CBB完成了工作负载节点,就将信用发送回给如由CBB所看到的起始点(例如,信用管理器210)。信用管理器210响应于从生产者获得信用而将信用提供和/或以其他方式发送给作为消耗者的CBB(例如,DSP 220获得用于从缓冲器的三个槽读取数据的三个信用)。使用可执行文件230来确定生产者和消耗者的这样的次序。以这种方式,CBB通过信用管理器210传送对操作能力的指示,而不管它们的异构性质如何。生产者CBB生产由另一CBB利用的数据,然而消耗者CBB消耗和/或以其他方式处理由另一CBB生产的数据。
在本文公开的一些示例中,信用管理器210可以被配置为确定工作负载节点的执行是否完成。在这样的示例中,信用管理器210可以清除与工作负载节点相关联的CBB中的所有信用。
在图2的示例中,CnC基础结构212耦合到信用管理器210、卷积引擎214、MMU 216、RNN引擎218、DSP 220、存储器222和配置控制器224。在本文公开的一些示例中,存储器222和/或MMU 216可以被称为基础设施元件并且不耦合到CnC基础结构212。CnC基础结构212是包括电线和至少一个逻辑电路的网络的控制基础结构,所述电线和至少一个逻辑电路允许信用管理器210、卷积引擎214、MMU 216、RNN引擎218和/或DSP 220中的一者或多者向信用管理器210、卷积引擎214、MMU 216、RNN引擎218、DSP 220、存储器222和/或配置控制器224中的一者或多者发送信用并且/或者从信用管理器210、卷积引擎214、MMU 216、RNN引擎218、DSP 220、存储器222和/或配置控制器224中的一者或多者接收信用。另外,CnC基础结构212被配置为向和/或从一个或多个选择器204发送示例配置和控制消息234。在本文公开的其他示例中,可以使用任何合适的计算结构来实现CnC基础结构212(例如,高级可扩展接口(AXI)等)。
在所图示的图2的示例中,卷积引擎214由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。卷积引擎214耦合到CnC基础结构212。卷积引擎214是被配置为改进对与卷积相关联的任务的处理的设备。此外,卷积引擎214改进了对与视觉影像的分析相关联的任务和/或与CNN相关联的其他任务的处理。
在所图示的图2的示例中,示例MMU 216由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如、一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。MMU 216耦合到CnC基础结构212。MMU 216是使得能够转换存储器222和/或远离加速器208的存储器的地址的设备。MMU 216附加地将由信用管理器210、卷积引擎214、RNN引擎218和/或DSP 220中的一者或多者利用的虚拟存储器地址转换到存储器222和/或远离加速器208的存储器中的物理地址。
在图2中,RNN引擎218由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。RNN引擎218耦合到CNC基础结构212。RNN引擎218是被配置为改进对与RNN相关联的任务的处理的设备。另外,RNN引擎218改进了对与未分段的连接手写识别、语音识别的分析相关联的任务和/或与RNN相关联的其他任务的处理。
在图2的示例中,DSP 220由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。DSP 220耦合到CnC基础结构212。DSP 220是改进对数字信号的处理的设备。例如,DSP 220促进用于对连续现实世界信号(例如来自相机和/或与计算机视觉有关的其他传感器的数据)进行测量、滤波和/或压缩的处理。
在图2的示例中,存储器222可以由用于存储数据的任何设备来实现,所述任何设备例如为闪速存储器、磁性介质、光学介质等。此外,存储在示例存储器222中的数据可以具有任何数据格式,例如二进制数据、逗号分隔的数据、制表符分隔的数据、结构化查询语言(SQL)结构等。存储器222耦合到CnC基础结构212。存储器222是信用管理器210、卷积引擎214、MMU 216、RNN引擎218、DSP 220和/或配置控制器224中的至少一者之间的共享存储装置。存储器222包括DMA单元226。另外,可将存储器222划分成与和由配置控制器224和/或信用管理器210接收到的可执行文件相关联的工作负载的一个或多个工作负载节点相关联的一个或多个缓冲器228。此外,存储器222的DMA单元226响应于由配置控制器224经由CnC基础结构212提供的命令而操作。在本文公开的一些示例中,存储器222的DMA单元226允许信用管理器210、卷积引擎214、MMU 216、RNN引擎218、DSP 220和/或配置控制器224中的至少一者独立于相应的处理器(例如,主机处理器106)而访问远离加速器208的存储器(例如,系统存储器102)。在图2的示例中,存储器222是加速器208本地的物理存储装置。附加地或替代地,在其他示例中,存储器222可以在加速器208外部和/或以其他方式远离加速器208。在本文公开的另外的示例中,存储器222可以是虚拟存储装置。在图2的示例中,存储器222是非易失性存储装置(例如,ROM、PROM、EPROM、EEPROM等)。在其他示例中,存储器222可以是非易失性BIOS或闪存存储装置。在另外的示例中,存储器222可以是易失性存储器。
在本文公开的示例中,配置控制器224由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。配置控制器224作为加速器208的控制单元被实现。在本文公开的示例中,一个或多个选择器204将配置和控制消息234发送到图编译器202以便生成可执行文件230。在本文公开的一些示例中,配置控制器224可以获取并解析可执行文件230以标识指示可执行文件230中包括的工作负载节点的配置和控制消息(例如,由一个或多个选择器204获得和/或发送到一个或多个选择器204的配置和控制消息234)。因此,配置控制器224将配置和控制消息(例如,由一个或多个选择器204获得和/或发送到一个或多个选择器204的配置和控制消息234)提供给各种CBB以便执行可执行文件230的任务。在本文公开的这样的示例中,配置和控制消息234被嵌入在可执行文件230中,因此,被提供给配置控制器224并且发送到各种CBB和/或位于内核存储体232中的内核。例如,配置控制器224解析可执行文件230以标识可执行文件中的工作负载节点并且指示卷积引擎214、MMU 216、RNN引擎218、DSP 220、内核存储体232中的内核和/或存储器222中的一者或多者如何对经由信用管理器210从图编译器202接收到的可执行文件230和/或其他机器可读指令做出响应。
在本文公开的示例中,配置控制器224将来自所获得的可执行文件230的工作负载节点(例如,以配置和控制消息格式)发送到标识的所对应的CBB。同样地,配置控制器224可以将工作负载节点(例如,以配置和控制消息格式)发送到信用管理器210以启动信用的分发。
在图2的示例中,卷积引擎214、MMU 216、RNN引擎218和/或DSP 220分别可以包括相应的调度器238、240、242和244。在操作中,调度器238、240、242和244分别执行已经分别由加速器208的配置控制器224、信用管理器210和/或附加CBB指派给卷积引擎214、MMU216、RNN引擎218和/或DSP 220的工作负载206的部分(例如,工作负载节点)。取决于给定工作负载节点的任务和/或其他操作,工作负载节点可以是生产者和/或消耗者。
在图2的示例中,响应于信用管理器210提供的指示,调度器238、240、242、244中的任一者可以接收与工作负载节点相关联的信用值和/或以其他方式将与工作负载节点相关联的信用值加载到存储器中,该信用值指示要将数据(例如,生产者)写入到所对应的CBB(例如,卷积引擎214、MMU 216、RNN引擎218和/或DSP 220中的任一者)的缓冲器(例如,缓冲器228中的至少一者)中。例如,如果可执行文件230指示RNN引擎218作为生产者并且将三个比特的数据写入到缓冲器(例如,缓冲器228中的一个)中,则调度器242可以将三个信用值加载到RNN引擎218中。另外,在这样的示例中,可执行文件230可以指示MMU 216读取由RNN引擎218(例如,作为消耗者)先前写入的三个比特。因此,调度器242(或RNN引擎218)经由CnC基础结构212和信用管理器210将曾经使用的三个信用发送到MMU 216。
在操作中,调度器238、240、242、244和/或CBB(例如,卷积引擎214,MMU 216,RNN引擎218和/或DSP 220中的任一者)可以递增地和/或使用任何合适的方法来发送信用。在另一示例中,第一CBB可以具有被提供来执行第一工作负载节点的第一信用值。在这样的示例中,响应于执行第一工作负载节点,第一CBB将数据写入到存储器222中的第一缓冲器(例如,缓冲器228中的一个),将第二信用值发送到信用管理器210。第二信用值表示用于将数据写入到第一缓冲器(例如,缓冲器228中的一个)中的第一信用值的量。例如,如果第一信用值是三,并且第一CBB写入到缓冲器(例如,缓冲器228中的一个)的两个槽中,则第一CBB将两个信用发送到信用管理器210。作为响应,信用管理器210将第二信用值(例如,两个信用)发送到第二CBB,所述第二CBB利用第二信用值(例如,两个信用)来读取缓冲器(例如,缓冲器228中的一个)的两个槽中的数据。这样,第二CBB然后可执行第二工作负载节点。在本文公开的示例中,利用循环缓冲器来实现缓冲器228,所述循环缓冲器包括用于在读取和/或写入数据时使用的任何合适数量的数据槽。
在图2所示的示例中,内核存储体232是包括一个或多个内核的数据结构。内核存储体232的内核例如是为DSP 220上的高吞吐量而编译的例程。在本文公开的其他示例中,每个CBB(例如,卷积引擎214、MMU 216、RNN引擎218和/或DSP 220中的任一者)可以包括相应的内核存储体。内核对应于例如要在加速器208上运行的可执行文件的可执行子部分。虽然在图2的示例中,加速器208实现VPU并且包括信用管理器210、CnC基础结构212、卷积引擎214、MMU 216、RNN引擎218、DSP 220和存储器222以及配置控制器224,但是加速器208可以包括图2所示的那些的附加或替代CBB。在本文公开的附加和/或替代示例中,内核存储体232耦合到一个或多个选择器204以被抽象为供图编译器202使用。
在图2的示例中,数据基础结构233耦合到信用管理器210、卷积引擎214、MMU 216、RNN引擎218、DSP 220、存储器222、配置控制器224和CnC基础结构212。数据基础结构233是电线和至少一个逻辑电路的网络,所述电线和至少一个逻辑电路允许信用管理器210、卷积引擎214、MMU 216、RNN引擎218、DSP 220、存储器222和/或配置控制器224中的一者或多者交换数据。例如,数据基础结构233允许生产者CBB将数据的块片(tile)写入到存储器的缓冲器中,所述存储器例如为存储器222和/或位于卷积引擎214、MMU 216、RNN引擎218和DSP220中的一者或多者中的存储器。另外,数据基础结构233允许消耗CBB从存储器的缓冲器读取数据的块片,所述存储器例如为存储器222和/或位于卷积引擎214、MMU 216、RNN引擎218和DSP 220中的一者或多者中的存储器。数据基础结构233取决于数据包中提供的信息而向且从存储器转移数据。例如,可通过分组的方法来转移数据,其中分组包括报头、净荷和尾部。分组的报头是数据的目的地地址、数据的源地址、发送数据的协议类型和分组编号。净荷是CBB产生或消耗的数据。数据基础结构233可以通过分析预定目的地地址来基于分组的报头促进CBB之间的数据交换。在本文公开的一些示例中,可以使用单个计算基础结构和/或使用多个计算基础结构来实现数据基础结构233和CnC基础结构212。
图3是图示了图2的一个或多个选择器204的示例选择器300的示例框图。选择器300表示由图2的图编译器202为具体工作负载节点生成的示例选择器。在这样的示例中,可以将选择器300生成为与特定CBB(例如,卷积引擎214、MMU 216、RNN引擎218和/或DSP 220中的任一者)和/或图2的内核存储体232中的内核进行通信。可以为图2的工作负载206中的单独的工作负载节点实现选择器300。另外,可以为工作负载206中的每个单独的工作负载节点实现单独的选择器。图3所示的选择器300包括示例CBB分析器302、示例内核分析器304和示例编译器接口306。在操作中,CBB分析器302、内核分析器304和/或编译器接口306中的任一者可以经由示例通信总线308通信。在图3中,可以使用任何合适的通信方法和/或设备(例如,
Figure BDA0002554354950000241
通信、LAN通信、WLAN通信等)来实现通信总线308。在本文公开的一些示例中,选择器300图示了一个或多个选择器204的示例选择器并且可以被包括在图2的图编译器202中。
在图3所示的示例中,CBB分析器302是用于计算元件分析的装置或计算元件分析装置。在图3的示例中,内核分析器304是用于内核分析的装置或内核分析装置。在图3的示例中,编译器接口306是用于编译器通信的装置或编译器通信装置。
在图3所示的示例中,CBB分析器302由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。在操作中,CBB分析器302被配置为标识与工作负载节点相关联的CBB(例如,卷积引擎214、MMU 216、RNN引擎218和/或DSP 220中的任一者)的输入和输出条件。图3的CBB分析器302被配置为标识与标准输入要求(例如,数据结构、输入的数量等)相对应的输入条件的类型,并且与被标识为执行工作负载节点的CBB相关联。另外,CBB分析器302被配置为标识与标准结果(例如,数量输出、结果的类型等)相对应的输出条件的类型,并且与被标识为执行工作负载节点的CBB相关联。以这种方式,所标识的输入和输出条件由CBB分析器302标识并且以标准格式提供以供图编译器202使用。
在本文公开的另一示例中,CBB分析器302可以与相关CBB进行通信以标识操作要求。例如,如果CBB要求一定百分比的存储器分配来执行示例工作负载节点,则这样的要求可由CBB分析器302确定并且经由编译器接口306发送到图编译器202。
在本文公开的一些示例中,CBB分析器302通过利用相关联的CBB的内部知识和/或当前和/或先前的建模来间接与相关联的CBB进行通信。示例内部知识和/或当前和/或先前的建模可以包括CBB操作要求的知识。此外,CBB分析器302可以对相关工作负载节点执行节点分析以标识节点类型。可以利用位于选择器300中的节点分析器来执行这种示例分析。进一步地在这样的示例中,利用所标识的节点类型可以由图编译器202传送、提供和/或以其他方式利用。以这种方式,选择器300获得关于对应的CBB和/或可以为用于映射对应的工作负载节点的目标的CBB的知识。例如,可以操作标识为执行乘法的工作负载节点。因此,图2的图编译器202可以(例如,基于分析所标识的节点类型)调用具有关于乘法的知识的选择器300和/或以其他方式与选择器300进行通信,并且将工作负载节点的相关参数提供给选择器300。选择器300的CBB分析器302将标识执行工作负载节点的CBB以在映射时使用。在本文公开的一些示例中,CBB分析器302可以将所对应的工作负载节点映射到对应的CBB。
在图3中,示例内核分析器304由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。在操作中,内核分析器304被配置为标识内核(例如,图2的内核存储体232中包括的内核)的输入和输出条件。例如,内核分析器304被配置为标识与标准输入要求(例如,数据结构、输入的数量等)相对应并且与被标识为执行工作负载节点的内核相关联的输入条件的类型。另外,内核分析器304被配置为标识与标准结果(例如,数量输出、结果的类型等)相对应的输出条件的类型,并且与被标识为执行工作负载节点的内核相关联。以这种方式,以标准格式提供所标识的输入和输出条件以供图编译器202使用。在本文公开的示例中,内核分析器304可以标识被包括在加速器208中的任何内核(例如,下载到加速器上的新内核等)的输入条件和/或输出条件的类型。
在本文公开的另一示例中,内核分析器304可以与相关联的内核进行通信以标识操作要求。例如,如果内核要求一定百分比的存储器分配来执行示例工作负载节点,则这样的要求可由内核分析器304确定并且经由编译器接口306发送到图编译器202。
在本文公开的一些示例中,内核分析器304通过利用相关联的内核的内部知识和/或当前和/或先前的建模来间接与相关内核进行通信。示例内部知识和/或当前和/或先前的建模可以包括内核操作要求的知识。此外,内核分析器304可以对相关工作负载节点执行节点分析以标识节点类型。可以利用位于选择器300中的节点分析器来执行这种示例分析。进一步地在这样的示例中,所标识的节点类型可以由图编译器202传送、提供和/或以其他方式利用。例如,可以有标识为执行乘法的工作负载节点。因此,图2的图编译器202可以(例如,基于所标识的节点类型)调用具有关于乘法的知识的选择器300和/或以其他方式与选择器300进行通信并且将工作负载节点的相关参数提供给选择器300。选择器300的内核分析器304将标识用于执行工作负载节点的内核以在映射时使用。在本文公开的一些示例中,内核分析器304可以将对应的工作负载节点映射到对应的内核。
在本文公开的示例中,CBB分析器302和/或内核分析器304中的任一者可以经由编译器接口306将标识的约束和/或要求传送给图编译器202。
在图3所示的示例中,编译器接口306由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、数字信号处理器(DSP)等。在本文公开的一些示例中,可以使用可在硬件电路上执行的软件应用编程接口(API)来实现编译器接口306。这样的示例编译器接口306使得能够在选择器300和图2的图编译器202之间通信。另外,可以通过任何类型的接口标准来实现编译器接口306,所述接口标准例如以太网接口、通用串行总线(USB)、
Figure BDA0002554354950000271
接口、近场通信(NFC)接口和/或PCI快速接口。编译器接口306被配置为从CBB分析器302和/或内核分析器304获得输入和输出条件并且将这些输入和输出条件发送到图编译器202。附加地或替代地,编译器接口306可以被配置为将由CBB分析器302和/或内核分析器304确定的要求发送到图编译器202。
图4是图示了图2的图编译器202的示例框图。如图4中所图示的,图编译器202包括示例图接口402、示例选择器接口404、示例工作负载分析器406、示例可执行文件生成器408、示例数据储存器(datastore)410和图2的插件236。在操作中,图接口402、选择器接口404、工作负载分析器406、可执行文件生成器408、数据储存器410和/或插件236中的任一个可以经由示例通信总线412通信。在图4中,可以使用任何合适的通信方法和/或设备(例如,
Figure BDA0002554354950000272
通信、LAN通信、WLAN通信等)来实现通信总线412。
在图4所示的示例中,图接口402是用于图通信的装置或图通信装置。在图4的示例中,选择器接口404是用于选择器通信的装置或选择器通信装置。在图4所示的示例中,工作负载分析器406是用于工作负载分析的装置或工作负载分析装置。在图4的示例中,插件236是用于转换的装置或转换装置。在图4的示例中,可执行文件生成器408是用于可执行文件生成的装置或可执行文件生成装置。在图4的示例中,数据储存器410是用于存储数据的装置或数据存储装置。
在图4所示的示例中,图接口402由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。另外,可以通过任何类型的接口标准来实现图接口402,所述接口标准例如以太网接口、通用串行总线(USB)、
Figure BDA0002554354950000281
接口、近场通信(NFC)接口和/或PCI快速接口。图接口402被配置为确定是否接收到工作负载(例如,图2的工作负载206)。在本文公开的示例中,如果工作负载206是可用的,则图接口402可以将工作负载206存储在数据储存器410中。
在图4中,示例选择器接口404由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。另外,可以通过任何类型的接口标准来实现选择器接口404,所述接口标准例如以太网接口、通用串行总线(USB)、
Figure BDA0002554354950000282
接口、近场通信(NFC)接口和/或PCI快速接口。选择器接口404被配置为响应于获得工作负载206,为工作负载206中的每个工作负载节点生成和/或以其他方式提供一个或多个选择器204。另外,选择器接口404被配置为从一个或多个选择器204获得和/或以其他方式接收输入条件和/或输出条件。例如,选择器接口404被配置为获得加速器208中的每个CBB(例如,卷积引擎214、MMU 216、RNN引擎218和/或DSP 220中的任一者)的输入和输出条件。在这样的操作中,选择器接口404获得CBB的通用列表,其中列表指定用于操作CBB的输入和输出条件。在另一示例中,选择器接口404被配置为获得加速器208中的每个内核(例如,内核存储体232中的任何内核和/或任何合适的内核)的输入和输出条件。在这样的操作中,选择器接口404获得内核的通用列表,其中列表指定用于操作内核的输入和输出条件。在操作中,选择器接口404将由一个或多个选择器204标识的输入条件和/或输出条件存储在数据储存器410中。
在图4所示的示例中,工作负载分析器406由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。工作负载分析器406解析工作负载(例如,图6的工作负载206)中包括的工作负载节点。工作负载分析器406解析工作负载节点以标识用于执行工作负载节点的输入和输出条件。工作负载分析器406可以将经解析的工作负载节点发送到供一个或多个选择器204使用的选择器接口404和/或供插件236使用的数据储存器410。
在图4的示例中,插件236由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。在操作中,插件236被配置为与选择器接口404、工作负载分析器406和存储在数据储存器410中的数据进行通信,以将由工作负载分析器406标识的工作负载节点映射到CBB(例如,卷积引擎214、MMU 216、RNN引擎218和/或DSP 220中的任一者)。例如,插件236基于所标识的输入条件和/或输出条件将工作负载节点映射和/或以其他方式指派给加速器208中的CBB和/或内核。进一步地在这样的示例中,插件236获得用于实现工作负载节点的输入条件和/或输出条件并且基于同样地包括相同或基本上类似的输入条件和/或输出条件的设备(例如,卷积引擎214、MMU 216、RNN引擎218、DSP 220和/或位于内核存储体232中的内核中的任一个)来指派要执行的工作负载节点。以这种方式,插件236不具有正被指派工作负载节点的特定设备(例如,卷积引擎214、MMU 216、RNN引擎218、DSP220和/或位于内核存储体232中的内核中的任一者)的直接知识。
在本文公开的一些示例中,可以使用合适的AI技术来实现插件236以从中学习和/或预测可为哪个CBB和/或内核指派特定工作负载节点。例如,如果插件236先前已指派了指示要将数据备份到特定CBB的工作负载节点,则在将来要指派这样的工作负载节点的情况下,插件236可以将它指派给该特定CBB,而不依赖于分析存储在数据储存器410中的数据。
在图4中,示例可执行文件生成器408由逻辑电路(例如,硬件处理器)来实现。然而,可以附加地或替代地使用任何其他类型的电路,例如,一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)、(一个或多个)现场可编程逻辑器件(FPLD)、(一个或多个)数字信号处理器(DSP)等。在插件236将工作负载节点指派给包括类似的输入条件和/或输出条件的设备之后,可执行文件生成器408被配置为生成图2的要由加速器208执行的可执行文件230。可执行文件生成器408还将可执行文件230发送到配置控制器224。另外,可执行文件生成器408可以生成要由加速器208执行的一个或多个可执行文件。
在图4所示的示例中,数据储存器410可以由用于存储数据的任何设备来实现,所述任何设备例如为闪速存储器、磁性介质、光学介质等。此外,存储在示例数据储存器410中的数据可以具有任何数据格式,例如二进制数据、逗号分隔的数据、制表符分隔的数据、结构化查询语言(SQL)结构等。在图4中,数据储存器410被配置为存储从选择器接口404获得的输入条件和/或输出条件、从图接口402获得的工作负载(例如,图2的工作负载206)和/或用于执行工作负载节点的输入条件和/或输出条件(例如,由工作负载分析器406标识的输入条件和/或输出条件)。数据储存器410可以由图接口402、选择器接口404、工作负载分析器406、插件236和/或可执行文件生成器408中的任一者写入和/或从中读取。
图5是表示使用示例第一CBB 502和示例第二CBB 504来执行的工作负载的示例流水线500的图形图示。第一CBB 502和/或第二CBB504可以是图1的示例CBB(例如,卷积引擎214、MMU 216、RNN引擎218和/或DSP 220中的任一者)。或者,可以使用任何合适的内核(例如,位于内核存储体232中的内核)来实现第一CBB 502和/或第二CBB 504。在图5的示例中,第一CBB 502是生产者而第二CBB 504是消耗者。示例流水线500包括示例第一工作负载节点506和示例第二工作负载节点508。在图5的示例中,第一CBB 502被配置为执行第一工作负载节点506。类似地,第二CBB 504被配置为执行第二工作负载节点508。在操作中,示例信用管理器510被配置为向第一CBB 502提供第一信用值以便执行第一工作负载节点506。例如,第一信用值是五个信用(例如,最初在缓冲器512中的数据槽可用性),因此,给第一CBB502提供要开始执行第一工作负载节点506的指示。在图5中,缓冲器512是循环缓冲器。
在图5所示的示例中,通过写入到缓冲器512的两个槽(例如,数据槽的子集)来执行第一工作负载节点506。因此,第一CBB 502写入到缓冲器512的前两个可用槽。作为响应,第一CBB 502将两个信用发送到信用管理器510。一旦可用,信用管理器510就将两个信用发送到第二CBB 504。提供给第二CBB 504的两个信用操作来向第二CBB504指示要开始执行第二工作负载节点508。在图5中,通过在先进先出(FIFO)基础上读取缓冲器512中的接下来两个槽来执行第二工作负载节点508。
虽然在图3和/或图4中图示了实现图2的示例图编译器202、示例一个或多个选择器204、示例选择器300和/或加速器208的示例方式,但是可以以任何其他方式组合、划分、重新布置、省略、消除和/或实现图2、图3和/或图4所示的元件、过程和/或设备中的一个或多个。进一步地,示例CBB分析器302、示例内核分析器304、示例编译器接口306和/或更一般地图2和/或3的示例选择器300和/或示例一个或多个选择器204、示例图接口402、示例选择器接口404、示例工作负载分析器406、示例可执行文件生成器408、示例数据储存器410、示例插件236和/或更一般地图2和/或图4的示例图编译器202和/或示例信用管理器210、示例CnC基础结构212、示例卷积引擎214、示例MMU 216、示例RNN引擎218、示例DSP 220、示例存储器222、示例配置控制器224、示例内核存储体232和/或更一般地图2的示例加速器208可以由硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实现。因此,例如,示例CBB分析器302、示例内核分析器304、示例编译器接口306和/或更一般地图2和/或图3的示例选择器300和/或示例一个或多个选择器204、示例图接口402、示例选择器接口404、示例工作负载分析器406、示例可执行文件生成器408、示例数据储存器410、示例插件236和/或更一般地图2和/或图4的示例图编译器202和/或示例信用管理器210、示例CnC基础结构212、示例卷积引擎214、示例MMU 216、示例RNN引擎218、示例DSP 220、示例存储器222、示例配置控制器224、示例内核存储体232和/或更一般地图2的示例加速器208中的任一个能由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)图形处理单元(GPU)、(一个或多个)数字信号处理器(DSP)、(一个或多个)专用集成电路(ASIC)、(一个或多个)可编程逻辑器件(PLD)和/或(一个或多个)现场可编程逻辑器件(FPLD)来实现。当将本专利的设备或系统权利要求中的任一项读成涵盖纯软件和/或固件实现方式时,示例CBB分析器302、示例内核分析器304、示例编译器接口306和/或更一般地图2和/或3的示例选择器300和/或示例一个或多个选择器204、示例图接口402、示例选择器接口404、示例工作负载分析器406、示例可执行文件生成器408、示例数据储存器410、示例插件236和/或更一般地图2和/或图4的示例图编译器202和/或示例信用管理器210、示例CnC基础结构212、示例卷积引擎214、示例MMU 216、示例RNN引擎218、示例DSP220、示例存储器222、示例配置控制器224、示例内核存储体232和/或更一般地图2的示例加速器208中的至少一个被特此明确地定义为包括非暂态计算机可读存储设备或存储盘,例如包括软件和/或固件的存储器、数字通用盘(DVD)、光盘(CD)、蓝光盘等。更进一步地,图2、图3和/或图4的示例图编译器202、示例一个或多个选择器204、示例选择器300和/或加速器208可以包括除了图2、图3和/或图4所示的元件、过程和/或设备之外或代替那些的一个或多个元件、过程和/或设备,并且/或者可以包括所图示的元件、过程和设备中的任一个或全部的不止一个。如本文所用,短语“与…通信”(包括其变化)包含直接通信和/或通过一个或多个中间组件的间接通信,并且不要求直接物理(例如,有线)通信和/或恒定通信,而是相反附加地包括周期性间隔、计划间隔、非周期性间隔和/或一次性事件的选择性通信。
在图6和/或图7中示出了表示用于实现示例图编译器202、示例一个或多个选择器204、示例选择器300和加速器208的示例硬件逻辑、机器可读指令、硬件实现的状态机和/或它们的任何组合的流程图。机器可读指令可以是一个或多个可执行程序或供由计算机处理器例如在下面关于图8讨论的示例处理器平台800中示出的处理器810和/或加速器812执行的可执行程序的部分。程序可以用存储在非暂态计算机可读存储介质例如CD-ROM、软盘、硬盘驱动器、DVD、蓝光盘或与处理器810和//加速器812相关联的存储器上的软件加以体现,但是整个程序和/或其部分能替代地由除处理器810、加速器812以外的设备执行,并且/或者用固件或专用硬件加以体现。进一步地,尽管参考图4所示的流程图描述了示例程序,但是可以替代地使用实现示例图编译器202、示例一个或多个选择器204、示例选择器300和/或加速器208的许多其他方法。例如,可以改变框的执行次序,并且/或者可以改变、消除或组合所描述的框中的一些。附加地或替代地,这些框中的任一个或全部都可以由被构造为在不用执行软件或固件的情况下执行所对应的操作的一个或多个硬件电路(例如,分立和/或集成模拟和/或数字电路、FPGA、ASIC、比较器、运算放大器(op-amp)、逻辑电路等)来实现。
可以以压缩格式、加密格式、分段格式、编译格式、可执行格式、封装格式等中的一种或多种格式来存储本文描述的机器可读指令。可以将如本文所述的机器可读指令存储为可以用于创建、制造和/或生产机器可执行指令的数据(例如,指令的部分、代码、代码的表示等)。例如,可以将机器可读指令分段并存储在一个或多个存储装置和/或计算装置(例如,服务器)上。机器可读指令可以要求安装、修改、适配、更新、组合、补充、配置、解密、解压缩、解封装、分发、重新指派、编译等中的一个或多个以便使机器可读指令变得可由计算设备和/或其他机器直接读取、解释和/或执行。例如,可以将机器可读指令存储在被单独地压缩、加密并存储在单独的计算装置上的多个部分中,其中这些部分在被解密、解压缩和组合时形成实现程序例如本文所述的程序的一组可执行指令。
在另一示例中,机器可读指令可以被以它们可以由计算机读取的状态存储,但是要求添加库(例如,动态链接库(DLL))、软件开发套件(SDK)、应用编程接口(API)等以便在特定计算设备或其他设备上执行指令。在另一示例中,可能需要在可整个地或部分地执行机器可读指令和/或所对应的程序之前配置机器可读指令(例如,存储设置、输入数据、记录网络地址等)。因此,所公开的机器可读指令和/或对应的程序旨在涵盖此类机器可读指令和/或程序,而不管机器可读指令和/或程序在被存储或以其他方式处于静止或传输时的特定格式或状态。
可通过任何过去、现在或将来的指令语言、脚本语言、编程语言等来表示本文所述的机器可读指令。例如,可以使用以下语言中的任一种来表示机器可读指令:C++、Java、C#、Perl、Python、JavaScript、超文本标记语言(HTML)、结构化查询语言(SQL)、Swift等。
如上所述,可以使用存储在非暂态计算机和/或机器可读介质上的可执行指令(例如,计算机和/或机器可读指令)来实现图6和/或7的示例过程,所述非暂态计算机和/或机器可读介质例如硬盘驱动器、闪速存储器、只读存储器、光盘、数字通用盘、高速缓存、随机存取存储器和/或在任何持续时间内(例如,在延长时间段内、永久地、短暂地、为了暂时缓冲和/或为了缓存信息)存储有信息的任何其他存储设备或存储盘。如本文所用,术语非暂态计算机可读介质被明确地定义为包括任何类型的计算机可读存储设备和/或存储盘并且排除传播信号而且排除传输介质。
“包括”和“包含”(以及其所有形式和时态)在本文中用作开放式术语。因此,无论何时权利要求采用任何形式的“包括”或“包含”(例如,包括、包含、具有等)作为前序或在任何种类的权利要求记载内,都应当理解,在不落在对应的权利要求或记载的范围之外的情况下,可以存在附加的元件、术语等。如本文中所用,当短语“至少”用作例如权利要求的前序部分中的过渡术语时,其为开放式的(以与术语“包括”和“包含”为开放式的相同方式)。术语“和/或”当例如以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。如本文中所使用的,单数引用(例如,“一”、“一个”、“第一”、“第二”等)不排除多个。如本文中所使用的,术语“一”或“一个”实体是指一个或多个该实体。术语“一”(或“一个”)、“一个或多个”、以及“至少一个”在本文中可互换使用。此外,尽管被单独列出,但是多个装置、元件或方法动作可以由例如单个单元或处理器来实现。另外,尽管各个特征可以被包括在不同的示例或权利要求中,但是这些特征可以被组合,并且包括在不同的示例或权利要求中并不意味着特征的组合是不可行的和/或不利的。
图6是表示可以被执行以实现图2、图3和/或图4的图编译器202、选择器300和/或一个或多个选择器204以生成图2的可执行文件230的过程600的流程图。在所图示的图6的示例中,图接口402(图4)确定是否接收到和/或可以其他方式获得工作负载206(框602)。响应于图接口402确定未接收到和/或可以其他方式获得工作负载206(例如,框602的控制返回否的结果),过程600继续等待。或者,如果图接口402确定接收到和/或可以其他方式获得工作负载206(例如,框602的控制返回是的结果),则工作负载分析器406(图4)解析工作负载206以标识工作负载节点(框604)。
作为响应,选择器接口404(图4)为每个工作负载节点生成选择器(例如,图2的一个或多个选择器204)(框606)。CBB分析器302(图3)还获得和/或以其他方式标识相关CBB的输入和输出条件。(框608)。作为响应,选择器接口404确定所生成的所有选择器是否都已经提供了相应的输入条件和/或输出条件,并且由此确定是否有附加CBB要分析(框610)。如果选择器接口404确定有附加CBB要分析(例如,框610的控制返回是的结果),则控制返回到框608。或者,如果选择器接口404确定没有附加CBB要分析(例如,框610的控制返回否的结果),则内核分析器304(图3)进一步获得和/或以其他方式标识相关联的内核的输入和输出条件(框612)。作为响应,选择器接口404确定所生成的所有选择器是否都已经提供了相应的输入条件和/或输出条件,并由此确定是否有附加内核要分析(框614)。如果选择器接口404确定有附加内核要分析(例如,框614的控制返回是的结果),则控制返回到框612。或者,如果选择器接口404确定没有附加内核要分析(例如,框614的控制返回否的结果),则插件236(图2和/或图4)基于由(一个或多个)选择器(例如,图2的一个或多个选择器204)标识的输入和输出条件将工作负载节点映射到CBB和/或内核(框616)。
可执行文件生成器408(图4)然后生成可执行文件230(框618)。可执行文件生成器408还将可执行文件230发送到配置控制器224(框620)。在本文公开的另一示例中,响应于框618的执行,可执行文件生成器408可以将可执行文件230存储在数据储存器410中以供以后在外部和/或内部部署系统(例如,图1的系统100)中使用。在所图示的图6的示例中,图编译器202确定是否继续操作(框622)。如果图编译器202确定要继续操作(例如,框622的控制返回是的结果),则控制返回到框602,其中图接口402确定是否接收到和/或可以其他方式获得工作负载206。例如,如果可获得附加工作负载和/或如果在加速器208中包括新CBB和/或内核,则图编译器202可以确定要继续操作。
或者,如果图编译器202确定操作将不继续(例如,框622的控制返回否的结果),则图6的过程600终止。也就是说,如果不可获得更多的工作负载,则过程600可以停止。
图7是表示可以被执行以实现图2的信用管理器210和/或配置控制器224以促进图2的可执行文件230的执行的过程700的流程图。在图7中,配置控制器224(图2)确定是否从图编译器202接收到和/或可以其他方式获得可执行文件230(框702)。如果配置控制器224确定未接收到和/或不可以其他方式获得可执行文件230(例如,框702的控制返回否的结果),则过程700继续等待。或者,如果配置控制器224确定接收到和/或可以其他方式获得可执行文件230(例如,框702的控制返回是的结果),则配置控制器224解析可执行文件230以标识生产工作负载节点和消耗工作负载节点,以便于标识用于执行生产工作负载和消耗工作负载节点的相应的CBB(框704)。作为响应,配置控制器224将生产工作负载节点发送到第一选择的CBB(例如,卷积引擎214)(框706)。类似地,配置控制器224将消耗工作负载节点发送到第二选择的CBB(例如,DSP 220)(框708)。
作为响应或并行地,信用管理器210将信用分发给第一选择的CBB(例如,卷积引擎214)以启动生产工作负载节点的执行(框710)。在本文公开的一些示例中,框706、708和/或710的操作可以相对于所有产生工作负载节点和/或消耗工作负载节点操作。例如,信用管理器210可以将与所有生产工作负载节点相对应的信用分发给所有对应的生产CBB。在这样的示例中,基于所对应的CBB和/或信用管理器210之间的通信来实现运行时期间的同步。由于向且从信用管理器210发送信用,所以信用管理器210确定是否从第一选择的CBB(例如,卷积引擎214)接收到信用(框712)。如果信用管理器210确定尚未从第一选择的CBB(例如,卷积引擎214)获得或发送信用(例如,框712的控制返回否的结果),则过程700继续等待。或者,如果信用管理器210确定已经从第一选择的CBB(例如,卷积引擎214)获得和/或发送了信用(例如,框712的控制返回是的结果),则信用管理器210将信用分发给第二选择的CBB(例如,DSP 220)以启动消耗工作负载节点的执行。
(框714)。
作为响应,信用管理器210确定是否从第二选择的CBB(例如,DSP 220)接收到信用(框716)。如果信用管理器210确定尚未从第二选择的CBB(例如,DSP 220)获得或发送信用(例如,框716的控制返回否的结果),则过程700继续等待。或者,如果信用管理器210确定已经从第二选择的CBB(例如,DSP 220)获得和/或发送了信用(例如,框716的控制返回是的结果),则信用管理器210将信用分发给第一选择的CBB(例如,卷积引擎214)以继续生产工作负载节点的执行(框718)。
信用管理器210确定工作负载节点(例如,生产工作负载节点或消耗工作负载节点)的执行是否完成(框720)。在本文公开的一些示例中,信用管理器210可以基于针对缓冲器对所生成的信用进行计数来确定工作负载节点的执行是否完成。例如,信用管理器210可以从可执行文件230中获知作为生产者的CBB(例如,图5的第一CBB 502)将在执行和/或以其他方式处理所对应的工作负载节点的同时生成50个信用。因此,信用管理器210可以响应于从生产工作负载节点(例如,第一CBB 502)获得和/或接收到50个信用而确定工作负载节点的执行完成。如果信用管理器210确定工作负载节点(例如,生产工作负载节点或消耗工作负载节点)的执行未完成(例如,框720的控制返回否的结果),则控制返回到框712,其中信用管理器210确定是否从第一选择的CBB(例如,卷积引擎214)接收到信用。在本文公开的另一示例中,如果信用管理器确定工作负载节点(例如,生产工作负载节点或消耗工作负载节点)的执行未完成(例如,框720的控制返回否的结果),并且生产工作负载节点的执行完成,则控制可以进行到框714以完成消耗工作负载节点的执行。
或者,如果信用管理器210确定工作负载节点(例如,生产工作负载节点或消耗工作负载节点)的执行完成(例如,框720的控制返回是的结果),则配置控制器224确定是否可获得附加生产和消耗工作负载节点(框722)。如果配置控制器224确定可获得附加生产和消耗工作负载节点(例如,框722的控制返回是的结果),则控制返回到框704。或者,如果配置控制器224确定不可获得附加生产和消耗工作负载节点(例如,框722的控制返回否的结果),则过程700停止。
图8是被构造为执行图6和/或图7的指令以实现图2、图3和/或图4的示例图编译器202、示例一个或多个选择器204、示例选择器300和/或加速器208的示例处理器平台800(例如,耦合的编译和部署系统)的框图。或者,在本文公开的一些示例中,示例图编译器202、示例一个或多个选择器204和/或示例选择器300可以在除示例加速器208外的被构造为执行图6的指令的单独的编译系统(例如,编译处理器)上操作。在这种示例解耦系统操作中,加速器208可以操作来执行在除编译系统外的被构造为执行图7的指令的单独的部署系统(例如,部署处理器)上执行可执行文件。处理器平台800可以是例如服务器、个人计算机、工作站、自学习机器(例如,神经网络)、移动装置(例如,手机、智能电话、平板例如iPadTM)、个人数字助理(PDA)、因特网器具、游戏机、个人录像机、机顶盒、头戴式耳机或其他可穿戴装置,或任何其他类型的计算装置。
所图示的示例的处理器平台800包括处理器810和加速器812。所图示的示例的处理器810是硬件。例如,处理器810可由来自任何期望家族或制造商的一个或多个集成电路、逻辑电路、微处理器、GPU、DSP或控制器来实现。硬件处理器可以是基于半导体的(例如,基于硅的)设备。另外,加速器812可由例如来自任何期望家族或制造商的一个或多个集成电路、逻辑电路、微处理器、GPU、DSP、FPGA、FPGA、VPU、控制器和/或其他CBB来实现。所图示的示例的加速器812是硬件。硬件加速器可以是基于半导体的(例如,基于硅的)设备。在此示例中,加速器812实现示例信用管理器210、示例CnC基础结构212、示例卷积引擎214、示例MMU 216、示例RNN引擎218、示例DSP 220、示例存储器222、示例配置控制器224和/或示例内核存储体232。在此示例中,处理器实现示例CBB分析器302、示例内核分析器304、示例编译器接口306和/或更一般地图2和/或图3的示例选择器300和/或示例一个或多个选择器204、示例图接口402、示例选择器接口404、示例工作负载分析器406、示例可执行文件生成器408、示例数据储存器410、示例插件236和/或更一般地图2和/或图4的示例图编译器202和/或示例信用管理器210、示例CnC基础结构212、示例卷积引擎214、示例MMU 216、示例RNN引擎218、示例DSP 220、示例存储器222、示例配置控制器224、示例内核存储体232和/或更一般地图2的示例加速器208。
所图示的示例的处理器810包括本地存储器811(例如,缓存)。所图示的示例的处理器810经由总线818与包括易失性存储器814和非易失性存储器816的主存储器通信。此外,所图示的示例的加速器812包括本地存储器813(例如,缓存)。所图示的示例的加速器812经由总线818与包括易失性存储器814和非易失性存储器816的主存储器通信。易失性存储器814可以由同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、
Figure BDA0002554354950000411
动态随机存取存储器
Figure BDA0002554354950000412
和/或任何其他类型的随机存取存储器设备来实现。非易失性存储器816可以由闪速存储器和/或任何其他期望类型的存储器设备来实现。对主存储器814、816的访问由存储器控制器控制。
所图示的示例的处理器平台800还包括接口电路820。可以通过任何类型的接口标准来实现接口电路820,所述接口标准例如以太网接口、通用串行总线(USB)、
Figure BDA0002554354950000413
接口、近场通信(NFC)接口和/或PCI快速接口。
在所图示的示例中,一个或多个输入设备822连接到接口电路820。(一个或多个)输入设备822允许用户将数据和/或命令送入到处理器810和/或加速器812中。输入设备可由例如音频传感器、麦克风、相机(静止或视频)、键盘、按钮、鼠标、触摸屏、轨迹板、轨迹球、等点定位(isopoint)和/或语音识别系统来实现。
一个或多个输出设备824也连接到所图示的示例的接口电路820。输出设备824可例如由显示设备(例如,发光二极管(LED)、有机发光二极管(OLED)、液晶显示器(LCD)、阴极射线管显示器(CRT)、平面转换(in-palce switching,IPS)显示器、触摸屏等)、触觉输出设备、打印机和/或扬声器来实现。因此,所图示的示例的接口电路820通常包括图形驱动器卡、图形驱动器芯片和/或图形驱动器处理器。
所图示的示例的接口电路820还包括通信设备,诸如发送器、接收器、收发器、调制解调器、住宅网关、无线接入点和/或网络接口以促进经由网络826与外部机器(例如,任何种类的计算设备)交换数据。通信可经由例如以太网连接、数字订户线路(DSL)连接、电话线连接、同轴电缆系统、卫星系统、直线对传(line-of-site)无线系统、蜂窝电话系统等。
所图示的示例的处理器平台800还包括用于存储软件和/或数据的一个或多个大容量存储设备828。此类大容量存储设备828的示例包括软盘驱动器、硬盘驱动器、光盘驱动器、蓝光盘驱动器、独立磁盘冗余阵列(RAID)系统和数字通用盘(DVD)驱动器。
可以在大容量存储设备828中、在易失性存储器814中、在非易失性存储器816中和/或在可移动非暂态计算机可读存储介质例如CD或DVD上存储图6和/或图7的机器可执行指令832。
根据前文,将认识到已经公开了在加速器中配置异构组件的示例方法、装置和制品。所公开的方法、装置和制品通过为工作负载中的每个工作负载节点生成和/或以其他方式提供选择器来改进使用计算设备的效率。因此,所公开的方法、装置和制品使得图编译器能够在不必针对加速器中的每个异构计算构建块和/或内核单独地进行配置的情况下生成可执行文件。另外,本文公开的示例包括用于从加速器中的异构计算构建块和/或内核分发和/或接收信用的信用管理器。以这样的方式,计算构建块和/或内核能够通过中心基础结构和信用管理器与其他异构计算构建块和/或内核进行通信。本文公开的示例使得图编译器能够针对加速器中的任何数量的异构计算构建块和/或内核高效地映射工作负载(例如,接收到的图)。如果在加速器中稍后包括附加计算构建块和/或内核,或者如果当前计算构建块和/或内核被更改或调整,则本文公开的示例同样地使得图生成器能够高效地映射所接收到的工作负载(例如,图)。所公开的方法、装置和制品因此致力于计算机的功能性方面的一项或多项改进。
本文公开了在加速器中配置异构组件的示例方法、装置、系统和制品。另外的示例及其组合包括下列的:
示例1包括一种在加速器中配置异构组件的装置,所述装置包括:图编译器,所述图编译器用于标识工作负载中的工作负载节点,并且为所述工作负载节点生成选择器;和所述选择器,所述选择器用于标识计算构建块的输入条件和输出条件,其中所述图编译器用于响应于从所述选择器获得所标识的输入条件和输出条件,将所述工作负载节点映射到所述计算构建块。
示例2包括根据示例1所述的装置,其中所述图编译器用于标识所述工作负载中的第二工作负载节点,并且为所述第二工作负载节点生成第二选择器。
示例3包括根据示例2所述的装置,其中所述第二选择器用于标识内核的第二输入条件和第二输出条件。
示例4包括根据示例1所述的装置,其中所述工作负载是包括由所述图编译器获得的所述工作负载节点的图。
示例5包括根据示例1所述的装置,其中所述输入条件对应于所述计算构建块的输入要求,而所述输出条件对应于所述计算构建块的执行的结果。
示例6包括根据示例1所述的装置,其中所述图编译器用于响应于将所述工作负载节点映射到所述计算构建块而生成可执行文件。
示例7包括根据示例1所述的装置,其中所述图编译器还包括插件,所述插件用于基于所标识的输入条件和输出条件,在所述工作负载节点与所述计算构建块之间形成转换层以使得能够将所述工作负载节点映射到所述计算构建块。
示例8包括至少一种非暂态计算机可读存储介质,所述至少一种非暂态计算机可读存储介质包括指令,所述指令当被执行时,使至少一个处理器至少执行以下操作:标识工作负载中的工作负载节点;为所述工作负载节点生成选择器,所述选择器与用于执行所述工作负载节点的计算构建块相关联;标识所述计算构建块的输入条件和输出条件;并且响应于获得所标识的输入条件和输出条件,将所述工作负载节点映射到所述计算构建块。
示例9包括根据示例8所述的至少一种非暂态计算机可读存储介质,其中所述指令当被执行时,还使所述至少一个处理器标识所述工作负载中的第二工作负载节点,并且为所述第二工作负载节点生成第二选择器。
示例10包括根据示例9所述的至少一种非暂态计算机可读存储介质,其中所述指令当被执行时,还使所述至少一个处理器标识内核的第二输入条件和第二输出条件。
示例11包括根据示例8所述的至少一种非暂态计算机可读存储介质,其中所述工作负载是包括所述工作负载节点的图。
示例12包括根据示例8所述的至少一种非暂态计算机可读存储介质,其中所述输入条件对应于所述计算构建块的输入要求,而所述输出条件对应于所述计算构建块的执行的结果。
示例13包括根据示例8所述的至少一种非暂态计算机可读存储介质,其中所述指令当被执行时,还使所述至少一个处理器响应于将所述工作负载节点映射到所述计算构建块而生成可执行文件。
示例14包括根据示例8所述的至少一种非暂态计算机可读存储介质,其中所述指令当被执行时,还使所述至少一个处理器基于所标识的输入条件和输出条件,在所述工作负载节点与所述计算构建块之间形成转换层以使得能够将所述工作负载节点映射到所述计算构建块。
示例15包括一种设备,所述设备包括:编译装置,所述编译装置用于标识工作负载中的工作负载节点,并且为所述工作负载节点生成选择装置,所述选择装置与用于执行所述工作负载节点的计算构建块相关联;和所述选择装置,所述选择装置用于标识所述计算构建块的输入条件和输出条件,其中所述编译装置还用于响应于获得所标识的输入条件和输出条件,将所述工作负载节点映射到所述计算构建块。
示例16包括根据示例15所述的设备,其中所述编译装置还用于标识所述工作负载中的第二工作负载节点,并且为所述第二工作负载节点生成第二选择装置。
示例17包括根据示例16所述的设备,其中所述第二选择装置还用于标识内核的第二输入条件和第二输出条件。
示例18包括根据示例15所述的设备,其中所述工作负载是包括所述工作负载节点的图。
示例19包括根据示例15所述的设备,其中所述输入条件对应于所述计算构建块的输入要求,而所述输出条件对应于所述计算构建块的执行的结果。
示例20包括根据示例15所述的设备,其中所述编译装置还用于响应于将所述工作负载节点映射到所述计算构建块而生成可执行文件。
示例21包括根据示例15所述的设备,其中所述编译装置还用于基于所标识的输入条件和输出条件,在所述工作负载节点与所述计算构建块之间形成转换层以使得能够将所述工作负载节点映射所述计算构建块。
示例22包括一种用于在加速器中配置异构组件的方法,所述方法包括:标识工作负载中的工作负载节点;为所述工作负载节点生成选择器,所述选择器与用于执行所述工作负载节点的计算构建块相关联;标识所述计算构建块的输入条件和输出条件;以及响应于获得所标识的输入条件和输出条件,将所述工作负载节点映射到所述计算构建块。
示例23包括根据示例22所述的方法,还包括:标识所述工作负载中的第二工作负载节点;以及为所述第二工作负载节点生成第二选择器。
示例24包括根据示例23所述的方法,还包括:标识内核的第二输入条件和第二输出条件。
示例25包括根据示例22所述的方法,其中所述工作负载是包括所述工作负载节点的图。
示例26包括根据示例22所述的方法,其中所述输入条件对应于所述计算构建块的输入要求,而所述输出条件对应于所述计算构建块的执行的结果。
示例27包括根据示例22所述的方法,还包括:响应于将所述工作负载节点映射到所述计算构建块而生成可执行文件。
示例28包括根据示例22所述的方法,还包括:基于所标识的输入条件和输出条件,在所述工作负载节点与所述计算构建块之间形成转换层以使得能够将所述工作负载节点映射到所述计算构建块。
示例29包括一种用于操作异构组件的装置,所述装置包括:缓冲器,所述缓冲器包括多个数据槽;信用管理器;具有第一信用值的第一计算构建块,所述第一计算构建块用于执行第一工作负载节点,响应于执行所述第一工作负载节点,将数据写入到所述多个数据槽的子集,并且向所述信用管理器发送第二信用值,所述第二信用值小于所述第一信用值;和第二计算构建块,所述第二计算构建块用于响应于从所述信用管理器接收到所述第二信用值,读取所述多个数据槽的子集中的所述数据,并且执行第二工作负载节点。
示例30包括根据示例29所述的装置,所述装置还包括控制器,所述控制器用于向所述第一计算构建块发送控制消息和配置消息以提供所述第一工作负载节点。
示例31包括根据示例30所述的装置,其中所述控制器用于将所述第一工作负载节点发送到所述第一计算构建块并且将所述第二工作负载节点发送到所述第二计算构建块。
示例32包括根据示例29所述的装置,其中所述信用管理器还用于确定所述第一工作负载节点的执行是否完成。
示例33包括根据示例29所述的装置,其中所述第二计算构建块还用于向所述信用管理器发送第三信用值,所述第三信用值小于所述第二信用值。
示例34包括根据示例33所述的装置,其中所述信用管理器还用于将所述第三信用值发送到所述第一计算构建块。
示例35包括至少一种非暂态计算机可读存储介质,所述至少一种非暂态计算机可读存储介质包括指令,所述指令当被执行时,使至少一个处理器至少执行以下操作:执行第一工作负载节点;响应于执行所述第一工作负载节点,使用第一信用值来将数据写入到多个数据槽;向信用管理器发送第二信用值,所述第二信用值小于所述第一信用值;响应于从所述信用管理器接收到所述第二信用值,使用所述第二信用值来读取所述多个数据槽中的所述数据;并且执行第二工作负载节点。
示例36包括根据示例35所述的至少一种非暂态计算机可读存储介质,其中所述指令当被执行时,还使所述至少一个处理器发送控制消息和配置消息以提供所述第一工作负载节点。
示例37包括根据示例36所述的至少一种非暂态计算机可读存储介质,其中所述指令当被执行时,还使所述至少一个处理器将所述第一工作负载节点发送到第一计算构建块并且将所述第二工作负载节点发送到第二计算构建块。
示例38包括根据示例35所述的至少一种非暂态计算机可读存储介质,其中所述指令当被执行时,还使所述至少一个处理器确定所述第一工作负载节点的执行是否完成。
示例39包括根据示例35所述的至少一种非暂态计算机可读存储介质,其中所述指令当被执行时,还使所述至少一个处理器向所述信用管理器发送第三信用值,所述第三信用值小于所述第二信用值。
示例40包括根据示例39所述的至少一种非暂态计算机可读存储介质,其中所述指令当被执行时,还使所述至少一个处理器将所述第三信用值发送到计算构建块。
示例41包括一种设备,所述设备包括:用于第一计算装置,所述用于第一计算装置用于执行第一工作负载节点,响应于执行所述第一工作负载节点,使用第一信用值来将数据写入到多个数据槽,并且向信用管理装置发送第二信用值,所述第二信用值小于所述第一信用值;和第二计算装置,所述第二计算装置用于响应于从所述信用管理装置接收到所述第二信用值,使用所述第二信用值来读取所述多个数据槽中的所述数据,并且执行第二工作负载节点。
示例42包括根据示例41所述的设备,所述设备还包括控制装置,所述控制装置用于向所述第一计算装置发送控制消息和配置消息以提供所述第一工作负载节点。
示例43包括根据示例42所述的设备,其中所述控制装置还用于将所述第一工作负载节点发送到所述第一计算装置并且将所述第二工作负载节点发送到所述第二计算装置。
示例44包括根据示例41所述的设备,其中所述信用管理装置还用于确定所述第一工作负载节点的执行是否完成。
示例45包括根据示例41所述的设备,其中所述第二计算装置还用于向所述信用管理装置发送第三信用值,所述第三信用值小于所述第二信用值。
示例46包括根据示例45所述的设备,其中所述信用管理装置还将所述第三信用值发送到所述第一计算装置。
示例47包括一种用于操作异构组件的方法,所述方法包括:执行第一工作负载节点;响应于执行所述第一工作负载节点,使用第一信用值来将数据写入到多个数据槽;向信用管理器发送第二信用值,所述第二信用值小于所述第一信用值;响应于从所述信用管理器接收到所述第二信用值,使用所述第二信用值来读取所述多个数据槽中的所述数据;以及执行第二工作负载。
示例48包括根据示例47所述的方法,还包括:向计算构建块发送控制消息和配置消息以提供所述第一工作负载节点。
示例49包括根据示例47所述的方法,所述方法还包括:将所述第一工作负载节点发送到第一计算构建块并且将所述第二工作负载节点发送到第二计算构建块。
示例50包括根据示例47所述的方法,其中还包括:确定所述第一工作负载节点的执行是否完成。
示例51包括根据示例47所述的方法,所述方法还包括:向所述信用管理器发送第三信用值,所述第三信用值小于所述第二信用值。
示例52包括根据示例51所述的方法,所述方法还包括:将所述第三信用值发送到计算构建块。
尽管已经在本文中公开了某些示例方法、装置和制品,然而本专利的覆盖范围不限于此。相反,本专利涵盖完全落入本专利的权利要求的范围内的所有方法、装置和制品。
以下权利要求特此通过引用并入到此具体实施方式中,其中每个权利要求独立地作为本公开的单独的实施方式。

Claims (25)

1.一种用于在加速器中配置异构组件的装置,所述装置包括:
图编译器,所述图编译器用于:
标识工作负载中的工作负载节点;并且
为所述工作负载节点生成选择器;和
所述选择器,所述选择器用于标识计算构建块的输入条件和输出条件,其中所述图编译器用于响应于从所述选择器获得所标识的输入条件和输出条件,将所述工作负载节点映射到所述计算构建块。
2.根据权利要求1所述的装置,其中所述图编译器用于:
标识所述工作负载中的第二工作负载节点;并且
为所述第二工作负载节点生成第二选择器。
3.根据权利要求1或2中任一项所述的装置,其中所述第二选择器用于标识内核的第二输入条件和第二输出条件。
4.根据权利要求1-3中任一项所述的装置,其中所述工作负载是包括由所述图编译器获得的所述工作负载节点的图。
5.根据权利要求1-3中任一项所述的装置,其中所述输入条件对应于所述计算构建块的输入要求,而所述输出条件对应于所述计算构建块的执行的结果。
6.根据权利要求1-3中任一项所述的装置,其中所述图编译器用于响应于将所述工作负载节点映射到所述计算构建块而生成可执行文件。
7.根据权利要求1-3中任一项所述的装置,其中所述图编译器还包括插件,所述插件用于基于所标识的输入条件和输出条件,在所述工作负载节点与所述计算构建块之间形成转换层以使得能够将所述工作负载节点映射到所述计算构建块。
8.至少一种非暂态计算机可读存储介质,所述至少一种非暂态计算机可读存储介质包括指令,所述指令当被执行时,使至少一个处理器至少执行以下操作:
标识工作负载中的工作负载节点;
为所述工作负载节点生成选择器,所述选择器与用于执行所述工作负载节点的计算构建块相关联;
标识所述计算构建块的输入条件和输出条件;并且
响应于获得所标识的输入条件和输出条件,将所述工作负载节点映射到所述计算构建块。
9.根据权利要求8所述的至少一种非暂态计算机可读存储介质,其中所述指令当被执行时,还使所述至少一个处理器执行以下操作:
标识所述工作负载中的第二工作负载节点;并且
为所述第二工作负载节点生成第二选择器。
10.根据权利要求8或9中任一项所述的至少一种非暂态计算机可读存储介质,其中所述指令当被执行时,还使所述至少一个处理器标识内核的第二输入条件和第二输出条件。
11.根据权利要求8-10中任一项所述的至少一种非暂态计算机可读存储介质,其中所述工作负载是包括所述工作负载节点的图。
12.根据权利要求8-10中任一项所述的至少一种非暂态计算机可读存储介质,其中所述输入条件对应于所述计算构建块的输入要求,而所述输出条件对应于所述计算构建块的执行的结果。
13.根据权利要求8-10中任一项所述的至少一种非暂态计算机可读存储介质,其中所述指令当被执行时,还使所述至少一个处理器响应于将所述工作负载节点映射到所述计算构建块而生成可执行文件。
14.根据权利要求8-10中任一项所述的至少一种非暂态计算机可读存储介质,其中所述指令当被执行时,还使所述至少一个处理器基于所标识的输入条件和输出条件,在所述工作负载节点与所述计算构建块之间形成转换层以使得能够将所述工作负载节点映射到所述计算构建块。
15.一种设备,所述设备包括:
编译装置,用于:
标识工作负载中的工作负载节点;并且
为所述工作负载节点生成选择装置,所述选择装置与用于执行所述工作负载节点的计算构建块相关联;和
所述选择装置,所述选择装置用于标识所述计算构建块的输入条件和输出条件,其中所述编译装置还用于响应于获得所标识的输入条件和输出条件,将所述工作负载节点映射到所述计算构建块。
16.根据权利要求15所述的设备,其中所述编译装置还用于:
标识所述工作负载中的第二工作负载节点;并且
为所述第二工作负载节点生成第二选择装置。
17.根据权利要求15或16中任一项所述的设备,其中所述第二选择装置还用于标识内核的第二输入条件和第二输出条件。
18.根据权利要求15-17中任一项所述的设备,其中所述工作负载是包括所述工作负载节点的图。
19.根据权利要求15-17中任一项所述的设备,其中所述输入条件对应于所述计算构建块的输入要求,而所述输出条件对应于所述计算构建块的执行的结果。
20.一种用于在加速器中配置异构组件的方法,所述方法包括:
标识工作负载中的工作负载节点;
为所述工作负载节点生成选择器,所述选择器与用于执行所述工作负载节点的计算构建块相关联;
标识所述计算构建块的输入条件和输出条件;以及
响应于获得所标识的输入条件和输出条件,将所述工作负载节点映射到所述计算构建块。
21.根据权利要求20所述的方法,还包括:
标识所述工作负载中的第二工作负载节点;以及
为所述第二工作负载节点生成第二选择器。
22.根据权利要求20-21中任一项所述的方法,还包括:标识内核的第二输入条件和第二输出条件。
23.根据权利要求20-22中任一项所述的方法,其中所述工作负载是包括所述工作负载节点的图。
24.根据权利要求20-22中任一项所述的方法,还包括:响应于将所述工作负载节点映射到所述计算构建块而生成可执行文件。
25.根据权利要求20-22中任一项所述的方法,还包括:基于所标识的输入条件和输出条件,在所述工作负载节点与所述计算构建块之间形成转换层以使得能够将所述工作负载节点映射到所述计算构建块。
CN202010585112.3A 2019-08-15 2020-06-24 在加速器中配置异构组件的方法和装置 Pending CN112394938A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/541,979 2019-08-15
US16/541,979 US11675630B2 (en) 2019-08-15 2019-08-15 Methods and apparatus to configure heterogenous components in an accelerator

Publications (1)

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

Family

ID=68695232

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010585112.3A Pending CN112394938A (zh) 2019-08-15 2020-06-24 在加速器中配置异构组件的方法和装置

Country Status (5)

Country Link
US (2) US11675630B2 (zh)
EP (1) EP3779673B1 (zh)
JP (1) JP2021034023A (zh)
KR (1) KR20210021261A (zh)
CN (1) CN112394938A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11675630B2 (en) 2019-08-15 2023-06-13 Intel Corporation Methods and apparatus to configure heterogenous components in an accelerator

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11669473B2 (en) * 2020-06-26 2023-06-06 Advanced Micro Devices, Inc. Allreduce enhanced direct memory access functionality
US20240020251A1 (en) * 2022-07-12 2024-01-18 Dell Products L.P. System operations controller

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100274972A1 (en) * 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing
US8914805B2 (en) 2010-08-31 2014-12-16 International Business Machines Corporation Rescheduling workload in a hybrid computing environment
US8707314B2 (en) 2011-12-16 2014-04-22 Advanced Micro Devices, Inc. Scheduling compute kernel workgroups to heterogeneous processors based on historical processor execution times and utilizations
US11373088B2 (en) 2017-12-30 2022-06-28 Intel Corporation Machine learning accelerator mechanism
US10635419B2 (en) * 2018-07-13 2020-04-28 Fungible, Inc. Incremental compilation of finite automata for a regular expression accelerator
US10929175B2 (en) * 2018-11-21 2021-02-23 Fungible, Inc. Service chaining hardware accelerators within a data stream processing integrated circuit
US11675630B2 (en) 2019-08-15 2023-06-13 Intel Corporation Methods and apparatus to configure heterogenous components in an accelerator

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11675630B2 (en) 2019-08-15 2023-06-13 Intel Corporation Methods and apparatus to configure heterogenous components in an accelerator

Also Published As

Publication number Publication date
KR20210021261A (ko) 2021-02-25
US20230333913A1 (en) 2023-10-19
US11675630B2 (en) 2023-06-13
EP3779673A1 (en) 2021-02-17
EP3779673B1 (en) 2022-08-24
US20190370084A1 (en) 2019-12-05
JP2021034023A (ja) 2021-03-01

Similar Documents

Publication Publication Date Title
US10942716B1 (en) Dynamic computational acceleration using a heterogeneous hardware infrastructure
US11847497B2 (en) Methods and apparatus to enable out-of-order pipelined execution of static mapping of a workload
CN111258744A (zh) 一种基于异构计算的任务处理方法及软硬件框架系统
US20230333913A1 (en) Methods and apparatus to configure heterogenous components in an accelerator
EP3886000A1 (en) Methods, systems, articles of manufacture, and apparatus to decode zero-value-compression data vectors
US10908884B2 (en) Methods and apparatus for runtime multi-scheduling of software executing on a heterogeneous system
CN114387379A (zh) 带表面相似度测试的光-重采样
EP3779778A1 (en) Methods and apparatus to enable dynamic processing of a predefined workload
US20190370074A1 (en) Methods and apparatus for multiple asynchronous consumers
CN117546139A (zh) 多线程处理器上的多线程踪迹的确定性重放
CN115202664A (zh) 云计算环境中的编译的着色器程序的高速缓存
CN115205093A (zh) 具有解耦的着色和重用的时空重采样
US20230244525A1 (en) Methods and apparatus for an xpu-aware dynamic compute scheduling framework
US20230168898A1 (en) Methods and apparatus to schedule parallel instructions using hybrid cores
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
WO2024060256A1 (en) Self-evolving and multi-versioning code
US20220114137A1 (en) Methods, apparatus, and articles of manufacture to generate command lists to be offloaded to accelerator circuitry
US20230176886A1 (en) Methods and apparatus to manage workload domains in virtualized computing environments
CN116324893A (zh) 实时焦散映射
CN117853306A (zh) 生成内插帧并将其与应用程序帧一起插入以供显示

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination