CN112148472A - 用于提高执行软件的异构系统的利用率的方法和装置 - Google Patents

用于提高执行软件的异构系统的利用率的方法和装置 Download PDF

Info

Publication number
CN112148472A
CN112148472A CN202010227282.4A CN202010227282A CN112148472A CN 112148472 A CN112148472 A CN 112148472A CN 202010227282 A CN202010227282 A CN 202010227282A CN 112148472 A CN112148472 A CN 112148472A
Authority
CN
China
Prior art keywords
algorithm
block
variant
processing element
heterogeneous system
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
CN202010227282.4A
Other languages
English (en)
Inventor
A·赫尔
S·沙尔马
M·布尔戈斯-塞维尼尔
J·高茨克里奇
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 CN112148472A publication Critical patent/CN112148472A/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/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/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • G06N20/10Machine learning using kernel methods, e.g. support vector machines [SVM]
    • 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)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

公开了提高执行软件的异构系统的利用率的方法、装置、系统和制品。所公开的方法、装置、系统和制品包括一种装置,包括:变体管理器,用于基于到算法的输入数据的第一大小和来自算法的输出数据的第二大小中的至少一个来确定算法是否是子算法分割SAP的候选;分割器,用于将算法分割为至少第一块和第二块;以及编译器,用于将基于第一块的第一变体和基于第二块的第二变体编译到可执行文件中,第一变体用于在异构系统的第一处理元件上执行,第二变体用于在异构系统的第二处理元件上执行。

Description

用于提高执行软件的异构系统的利用率的方法和装置
技术领域
本公开总体上涉及处理,并且更具体地,涉及用于提高执行软件的异构系统的利用率的方法和装置。
背景技术
计算机硬件制造商开发用于计算机平台的各种组件中使用的硬件组件。例如,计算机硬件制造商开发主板、用于主板的芯片组、中央处理单元(CPU)、批处理器(例如,设计用于批量数据的大规模并行计算的处理器)、图形处理单元(GPU)、视觉处理单元(VPU)、现场可编程门阵列(FPGA)、硬盘驱动器(HDD)、固态驱动器(SSD)和其他计算机组件。许多计算机硬件制造商开发程序和/或其他方法来编译算法和/或其他代码以用于在特定处理平台上运行。
附图说明
图1是图示出示例异构系统的框图。
图2是图示出示例软件调整系统的框图。
图3是图示出图2的变体生成器的示例实现的框图。
图4是图示出图2的运行时调度器的示例实现的框图。
图5A-图5E是图示出与要在异构系统上运行的算法相关联的各种示例分割策略的框图。
图6是图示出在示例异构系统上执行的算法的示例运行时调度配置的框图。
图7是表示可被执行以实现图2和图3的变体生成器的机器可读指令的流程图。
图8是表示可被执行以实现图2和图4的运行时调度器和/或更一般地,图2的可执行文件的机器可读指令的流程图。
图9是被构造用于执行图7的指令以实现图2和图3的变体生成器的示例处理平台的框图。
图10是被构造用于执行图8的指令以实现图2和图4的运行时调度器和/或更一般地,图2的可执行文件的示例处理平台的框图。
这些图并未按比例绘制。一般来说,在整个附图和所附书面描述中将使用相同的附图标记来指代相同或相似的组件。除非另有指示,否则连接参考(例如,附连的、耦合的、连接的、以及结合的)应被广义地解释并且可包括元件集合之间的中间构件以及元件之间的相对移动。由此,连接参考不必推断两个元件直接地连接并彼此处于固定的关系。
当标识可分开地引用的多个要素或组件时,在本文中使用描述符“第一”、“第二”、“第三”等。除非以其他方式指定或基于它们的使用上下文来理解,否则此类描述符不旨在归于优先级、物理次序或列表中的布置、或者时间上的排序的任何含义,而是为了便于理解所公开的示例而仅仅用作用于分开地引用多个要素或组件的标签。在一些示例中,在具体实施方式中可使用描述符“第一”来引用要素,而同一要素在权利要求中可利用诸如“第二”或“第三”之类的不同的描述符来引用。在此类情况下,应当理解,此类描述符仅用于易于引用多个要素或组件。
具体实施方式
如先前所提到,许多计算机硬件制造商和/或其他供应商开发程序和/或其他方法来编译算法和/或其他代码以用于在特定处理平台上运行。例如,一些计算机硬件制造商开发程序和/或其他方法来编译算法和/或其他代码以用于在GPU、VPU、CPU或FPGA上运行。此类程序和/或其他方法使用领域专用语言(DSL)来起作用。DSL(例如,Halide,OpenCL等)利用关注点分离原理来将算法(例如,程序、代码块等)如何被编写与算法如何被执行分离。例如,许多DSL允许开发人员用高级功能语言表示算法,而不必担心将性能映射到底层硬件,并且还允许开发人员实现和探索将算法映射到硬件的高级策略(例如,通过称为调度规范的过程)。
例如,算法可以被限定用于使图像模糊(例如,如何编写算法),并且开发人员可能希望该算法在CPU、VPU、GPU和FPGA上有效运行。为了在各种类型的处理元件(例如,CPU、VPU、GPU、FPGA、异构系统等)上有效地运行该算法,需要生成调度。调度指定如何根据特定的处理元件以不同的方式来变换算法,以便获得高性能的实现。已经开发了许多使算法的编译时间调度自动化的方法。例如,编译自动调度可以包括自动调节、启发式搜索和混合调度。
在某些情况下,算法和/或其他代码可能处理大量数据。例如,开发人员可能希望模糊一亿乘一亿像素的图像。这样的图像处理操作可以导致一个或多个一亿乘一亿矩阵的矩阵乘法。在典型的卸载场景中,可以将这样的操作卸载到GPU处理元件。然而,由于被处理的矩阵的巨大尺寸,相对于在异构系统的其他处理元件上执行的操作,在GPU上执行该操作将花费相当长的时间段。此外,如果异构系统的其他处理元件需要图像处理操作的输出,则其他处理元件将处于空闲,直到GPU完成操作为止。
为了避免该等待时间成为处理速度,可以将算法划分为子算法片段。这些片段能在单独的处理元件上执行,并且与单个处理元件执行合成算法相比,能在更少的时间内获得总体结果。然而,该方式要求程序员知道(a)确切地如何拆分算法,(b)在不同处理元件上进行编程的复杂性,(c)如何通过编写卸载语义来掩盖卸载等待时间,以及(d)如何同步来自不同片段的不同结果。即使程序员理解子算法片段的细微差别,由于不可预见的负荷和环境条件,以这种方式执行的算法仍然会崩溃。
此外,通常在编译时决定在哪里运行算法片段以及何时运行算法片段,但是,在运行时,负荷和环境条件可能导致预先确定的卸载计划变得不利。除非存在可供运行时调度器使用的该算法的已有替代子算法表示来满足环境和负荷需求,否则卸载的子算法表示将具有不期望的性能。此外,算法的手工编码的子算法表示在输入数据大小之间不会很好地缩放,并且随着异构系统包括越来越多独特的处理元件,期望程序员对算法的子算法表示进行手工编码是不现实的。
本文公开的示例包括用于提高执行软件的异构系统的利用率的方法和装置。所公开的示例提出了一种用于生成能在各种环境和负荷条件下运行的算法的子算法表示的相干编程模型。另外,本文公开的示例促进以子算法粒度对算法的运行时调度、在编译时对算法的子算法表示的生成、子算法处理结果的同步以及通知子算法调度决策的运行时性能特征。
在没有算法的子算法表示的情况下,异构系统的大部分可能在运行时仍未得到充分利用。本文公开的示例提高了执行软件的异构系统的利用率。本文所公开的示例提供了一种装置,包括:变体管理器,用于基于到算法的输入数据的第一大小和来自算法的输出数据的第二大小中的至少一个来确定算法是否是子算法分割SAP的候选;分割器,用于将算法分割为至少第一块和第二块;以及编译器,用于将基于第一块的第一变体和基于第二块的第二变体编译到可执行文件中,第一变体用于在异构系统的第一处理元件上执行,第二变体用于在异构系统的第二处理元件上执行。
图1是图示出示例异构系统100的框图。在图1的示例中,异构系统100包括示例CPU102、示例存储104、示例FPGA 108、示例VPU 110和示例GPU 112。示例CPU 102包括示例CPU存储103。示例存储104包括示例可执行文件106。替代地,存储104可以包括多于一个的可执行文件。示例FPGA108包括FPGA存储109。示例VPU 110包括示例VPU存储111。示例GPU 112包括示例GPU存储113。在图1的中,异构系统100是片上系统(SoC)。替代地,异构系统100可以是任何其他类型的计算或硬件系统。
在本文公开的示例中,CPU 102、存储104、FPGA 108、VPU 110和GPU 112中的每一者都与异构系统100的其他元件通信。例如,CPU 102、存储104、FPGA 108、VPU 110和GPU112经由通信总线通信。在本文公开的一些示例中,CPU 102、存储104、FPGA 108、VPU 110和GPU 112可以经由任何合适的有线和/或无线通信方法进行通信。另外,在本文公开的一些示例中,CPU 102、存储104、FPGA 108、VPU 110和GPU 112中的每一者可以经由任何合适的有线和/或无线通信方法与异构系统100外部的任何组件进行通信。
在图1的示例中,CPU 102是执行指令(例如,包含在可执行文件106中和/或以其他方式对应于可执行文件105的机器可读指令)以便执行、实施和/或促进与计算机或计算设备相关联的操作的完成的处理元件。在图1的示例中,CPU 102是异构系统100的主处理元件,并且包括至少一个核。替代地,CPU 102可以是协主处理元件(例如,在使用多于一个CPU的示例中),而在其他示例中,CPU 102可以是次级处理元件。
在图1所图示的示例中,存储104是包括可执行文件106的存储器。附加地或替代地,可执行文件106可以存储在CPU存储103、FPGA存储109、VPU存储111和/或GPU存储113中。在图1中,存储104是CPU 102、FPGA 106、VPU 110或GPU 112中的至少一者之间的共享存储。在图1的示例中,存储104是异构系统100本地的物理存储;然而,在其他示例中,存储104可以在异构系统100外部和/或以其他方式远程于异构系统100。在进一步的示例中,存储104可以是虚拟存储。在图1的示例中,存储104是持久存储(例如,只读存储器(ROM)、可编程ROM(PROM)、可擦除PROM(EPROM)、电可擦除PROM(EEPROM)等))。在其他示例中,存储104可以是持久性基本输入/输出系统(BIOS)或闪存存储。在进一步的示例中,存储104可以是易失性存储器。
在图1的所图示示例中,FPGA 108、VPU 110和GPU 112中的一者或多者是可以由在异构系统100上执行的程序用于诸如硬件加速之类的计算任务的处理元件。例如,FPGA 108是能用于可计算的操作或过程的通用可编程处理元件。在其他示例中,VPU 110是包括被设计和/或以其他方式配置或构造成用于改善用于AI的处理机器视觉任务的处理速度和整体性能的处理资源的处理元件。在又一些示例中,GPU 112是被设计成用于改善计算机图形和/或图像处理的处理速度和整体性能的处理元件。尽管FPGA 108、VPU 110和GPU 112包括支持特定处理任务的功能,但是FPGA 108、VPU 110和/或GPU112中的一者或多者能够对应于支持可以根据需要从CPU 102卸载的通用处理任务的处理元件。另外,FPGA 108、VPU 110和/或GPU 112中的一者或多者可将所执行的计算的结果分别本地存储在FPGA存储109、VPU存储111和/或GPU存储113上。
虽然图1的异构系统100包括CPU 102、存储104、FPGA 108、VPU 110和GPU 112,但在一些示例中,异构系统100可以包括任何数量的处理元件,包括专用指令集处理器(ASIP)、物理处理单元(PPU)、数字信号处理器(DSP)、图像处理器、协处理器、浮点单元、网络处理器、多核处理器和前端处理器。
图2是图示出示例软件调整系统200的框图。示例软件调整系统200包括示例变体生成器202和示例异构系统204。异构系统包括示例存储206,该示例存储206包括示例可执行文件208。示例可执行文件208包括示例变体库210、示例跳转表库212和示例运行时调度器214。示例异构系统204另外包括示例CPU 216、示例FPGA 218、示例VPU 220和示例GPU222。示例CPU 216、示例FPGA 218、示例VPU 220和示例GPU 222分别包括示例CPU存储217、示例FPGA存储219、示例VPU存储221和示例GPU存储223。
在图2的示例中,示例异构系统204类似于图1的异构系统100,其中,存储206在异构系统204内部。然而,在其他示例中,存储206可以在异构系统204的外部。在图2所图示的示例中,变体生成器202可以位于远程设施(例如,远程于异构系统204、开发人员的编译系统等),并且变体生成器202可以是计算机集群(例如,服务器机房)。
在图2的所图示示例中,变体生成器202耦合到一个或多个外部设备、存储206、变体库210和跳转表库212。在图2中,变体生成器202是将从外部设备接收的算法编译成可执行应用的设备,该可执行应用包括算法的子算法片段的多个变体。例如,如果从外部设备接收的算法是用C/C++编写的,则变体生成器202将算法编译为可执行应用,以用于存储在存储206中。在本文公开的示例中,由变体生成器202编译的可执行应用是FAT二进制文件。然而,在其他示例中,由变体生成器202编译的可执行应用可以是任何合适的可执行文件。
在图2的示例中,变体生成器202从诸如外部设备和/或代码开发人员的工作站之类的设备获得一个或多个算法。在本文公开的示例中,算法使用关注点分离DSL(诸如Halide)来编写,这促进沿着规则网格执行的计算。类似Halide的规则网格DSL使得SAP易于使用;然而,也可以通过考虑算法的接缝(例如,算法的不同部分之间的自然断裂点)来使用非规则网格。不管所使用的分割网格如何,变体生成器202都确定已为其编写算法的目标异构系统的处理元件。在确定目标异构系统的处理元件之后,变体生成器202确定所接收的每个算法是否是用于分割的候选。
在图2的示例中,变体生成器202通过分析到算法的输入数据的大小和来自算法的输出数据的大小来确定算法是否是子算法分割(SAP)的候选。变体生成器202确定算法输入和输出的大小是否证明将工作负荷从一个处理元件移动到已为其编译SAP变体的多个处理的相关联的等待时间是合理的。
在图2所图示的示例中,为了确定算法输入和输出的大小,变体生成器202分析用于该算法的缓冲区(buffer)边界。由于边界缓冲区与算法的输入数据和输出数据的大小相关联,因此变体生成器202能通过分析缓冲区边界来推断算法的输入数据和输出数据的大小。如果算法输入和输出的大小足够高(例如,如果执行算法的时间大于将SAP变体移动到它们相应的处理元件的时间),则变体生成器202可以确定该算法是用于分割的候选(例如,待分割的可行程序)。
在图2的所图示示例中,如果算法不包括边界缓冲区和/或没有以其他方式定义该算法的输入和输出的边界,则变体生成器202可以基于附加信息(例如,来自开发人员的信息)额外地确定算法是否是分割的候选。因此,变体生成器202基于输入数据和/或输出数据的阈值大小来确定算法是否为分割的候选。例如,如果输入数据的大小和/或输出数据的大小满足阈值(例如,大于阈值量),则变体生成器202确定该算法是分割的候选。
在图2的示例中,如果算法是分割的候选,则变体生成器202选择分割策略。变体生成器202基于算法的类型、算法的输入的大小和输出的大小以及目标系统的处理元件来选择分割策略。例如,如果算法包括较大的矩阵乘法,则变体生成器202可以选择将算法分割为并行矩阵乘法分区,诸如一个或多个可缩放通用矩阵乘法算法(SUMMA)。另外,例如,如果目标异构系统包括CPU和GPU,则变体生成器202可以为该算法选择一种分割策略,该分割策略将该算法分割为两个片段,一个片段相对于另一个片段非常大。有多种分割策略可供选择,其中一些将在图5A-图5E中进一步解释。为了选择分割策略,本文公开的示例利用机器学习(ML)/人工智能(AI)技术。尽管本文公开的示例基于ML/AI技术选择分割策略和/或多个分割策略,但是其他示例可以基于自动调节、启发式搜索和/或手动调节选择分割策略和/或多个分割策略。
自动调节包括为异构系统的每个处理元件适配一定范围的可行的分割大小并编译算法,执行算法,测量处理元件和/或多个处理元件的性能,并重复该过程直到已达到性能阈值(例如,功率消耗、执行速度等)。然而,为了达到期望的性能阈值,可能需要大量的编译时间,并且随着算法复杂度的增加,编译时间变得更长。
启发式搜索包括:(1)应用定义将提高性能以满足性能阈值的算法转换的类型的规则;以及(2)应用定义将不会提高性能以满足性能阈值的算法转换的类型的规则。然后,基于这些规则,能够基于成本模型来限定和搜索搜索空间。然而,成本模型通常是具体处理元件特定的。复杂的现代硬件(例如,一个或多个处理元件)难以凭经验建模,并且通常仅对硬件加速器进行建模。类似地,成本模型难以针对任意算法而使用。例如,成本模型在简单的预定条件下工作,但是对于复杂且随机的条件,成本模型通常会失效。
混合调度包括利用AI标识用于通用处理元件的成本模型。成本模型能够对应于表示、预测和/或以其他方式确定一个或多个处理元件执行一部分代码以促进对一个或多个工作负荷的处理的计算成本。例如,包括ML、深度学习(DL)和/或其他人工机器驱动逻辑的人工智能使机器(例如计算机、逻辑电路等)能够使用模型来处理输入数据以便基于模型先前通过训练过程学习的模式和/或关联来生成输出。例如,可以利用数据来训练模型以识别模式和/或关联,并且在处理输入数据时遵循这样的模式和/或关联,使得(多个)其他输入产生与所识别的模式和/或关联一致的(多个)输出。
存在许多不同类型的机器学习模型和/或机器学习架构。某些类型的机器学习模型包括,例如,支持向量机(SVM)、神经网络(NN)、递归神经网络(RNN)、卷积神经网络(CNN)、长短期记忆(LSTM)、门循环单元(GRU)等。
一般而言,实现ML/AI系统涉及两个阶段:学习/训练阶段和推理阶段。在学习/训练阶段,训练算法被用于训练模型以根据基于例如训练数据的模式和/或关联来操作。通常,模型包括引导如何将输入数据变换成输出数据的内部参数,诸如通过模型内的一系列节点和连接来将输入数据变换成输出数据。另外,将超参数用作训练过程的一部分,以控制学习的执行方式(例如,学习率、机器学习模型中要使用的层数等)。超参数被定义为是在发起训练过程之前确定的训练参数。
可以基于ML/AI模型的类型和/或预期输出来执行不同类型的训练。例如,有监督训练使用输入和对应的期望(例如,标记的)输出来选择用于ML/AI模型的减少模型误差的参数(例如,通过迭代多个选择参数的组合)。如本文所使用的,标记是指机器学习模型的预期输出(例如,分类、预期输出值等)。替代地,无监督训练(例如,用于深度学习、机器学习的子集等)涉及从输入推断模式来选择用于ML/AI模型的参数(例如,没有预期(例如,标记的)输出的益处)。
使用训练数据来执行训练。一旦训练完成,就将该模型部署为用作可执行构造,该可执行构造基于模型中定义的节点和连接的网络来处理输入并提供输出。
一旦被训练,就可以在推理阶段中操作所部署的模型来处理数据。在推理阶段,将要分析的数据(例如,实时数据)输入到模型,并且该模型执行以创建输出。该推理阶段可以被认为是AI“思考”以便基于其从训练中学习到的来生成输出(例如,通过执行模型以将所学习的模式和/或关联应用于实时数据)。在一些示例中,输入数据在被用作机器学习模型的输入之前经历预处理。此外,在一些示例中,在由AI模型生成输出数据之后,可以对该输出数据进行后处理,以将输出变换成有用的结果(例如,数据显示、循环转换、由机器执行的指令序列,等等)。
在一些示例中,可以捕获所部署模型的输出并将其作为反馈来提供。通过分析该反馈,能够确定所部署模型的准确性。如果反馈指示所部署的模型的准确性低于阈值或其他标准,则可以使用反馈和更新的训练数据集、超参数等来触发对更新的模型的训练,以生成更新的部署模型。
在图2的示例中,变体生成器202利用ML/AI技术。在本文所公开的示例中,变体生成器202利用深度神经网络(DNN)模型。一般而言,适于在本文所公开的示例方法中使用的机器学习模型/架构将是监督式的。然而,其他示例可以包括利用无监督学习的机器学习模型/架构。在本文所公开的示例中,使用梯度下降来训练ML/AI模型。在本文公开的示例中,用于训练ML/AI模型的超参数控制梯度下降的移动平均值的指数衰减率。这样的超参数例如通过以下方式来选择:迭代通过超参数的网格,直到超参数满足可接受的性能值。然而,可附加地或替代地使用任何其他训练算法。
在图2的所图示示例中,变体生成器202通过将算法的总输入和输出维度插入DNN来改变混合调度。通过使用通过根据成功函数(例如,实施的速度、功率消耗等)在硬件加速器上运行任意算法而获得的数据(例如,实施的速度、功率消耗等)来训练DNN。DNN的输出是成本模型,其允许变体生成器202比较和对比不同的分割策略。基于训练,变体生成器202能确定是针对给定算法的可行候选的分割策略。
与所使用的ML/AI模型无关,一旦训练了ML/AI模型,该ML/AI模型就会生成针对通用处理元件的成本模型。变体生成器202然后利用成本模型来选择作为对于给定算法的可行候选的分割策略和/或多个分割策略。在图2的示例中,在选择分割策略之后,变体生成器202将算法分割为多个块(tile)。
在图2的示例中,变体生成器202选择要处理的块。变体生成器202确定所选择的块是否具有与已经针对该算法处理过的任何先前块相同的边界。如果所选择的块确实具有与先前处理的块相同的边界,则变体生成器202确定是否有任何后续的块要处理。以该方式,仅算法的具有唯一边界的块将被处理,并且能在不同的分割策略之间再次使用。这消除了冗余变体,并减少了给定算法的不同变体所占用的存储器量。
在图2的所图示示例中,如果变体生成器202确定所选择的块不具有与先前处理的块相同的边界,则变体生成器202选择为其生成该相应块的变体的处理元件。变体生成器202随后生成用于所选处理元件的所选块的调度。这能通过在可能的变体空间中进行搜索并找到最佳候选来完成。候选之间的区分是使用成本模型来完成的,该成本模型可以是基于经验的,也可以是学习到的。在生成调度之后,变体生成器202编译能够在运行时在所选处理元件上执行的块的变体。然后,变体生成器202将编译后的变体添加到变体库210中,并且变体生成器202将对应的变体符号添加到与跳转表库212相关联的工作跳转表中。
在图2的示例中,变体生成器202针对每个处理元件、针对每个块以及针对每种分割策略重复该过程。在已经针对所有处理元件处理所有块并且所有分割策略已经被利用之后,变体生成器202将工作跳转表添加到跳转表库212中。然后,变体生成器202将变体库210中的所有变体、跳转表库212中的所有变体符号以及运行时调度器214编译到可执行文件208中。在本文公开的示例中,变体生成器202将可执行文件208编译为FAT二进制文件,但是,在其他示例中,可以使用任何合适的可执行文件。变体生成器202针对工作负荷中的每个算法重复该过程。
在图2所图示的示例中,变体库210是与可执行文件208相关联的数据结构,其存储以可执行文件208执行的子算法级别表示的算法的不同变体。例如,变体库210可以是FAT二进制文件的如下数据区段,其包括与特定算法相关联的不同变体,诸如用于每种块大小的变体、用于异构系统204的每个处理元件的每种分割策略的变体。此外,变体库210链接到示例跳转表库212和/或运行时调度器214。变体库210在可执行文件208的执行期间是静态库,但是可以用可执行文件208的多次执行之间的新的或改变后的变体来更新。
在图2的示例中,跳转表库212是与可执行文件208相关联的数据结构,其存储跳转表,该跳转表包括指向变体库212中的相应变体的位置的变体符号。例如,跳转表库212是可执行文件208的如下数据区段,其包括将各种变体符号(例如,指针)与位于变体库210中的相应变体相关联的跳转表。跳转表库212在可执行文件208的执行期间不改变,但是,跳转表库212可以被访问以调用相应的变体以被加载到异构系统的一个或多个处理元件上。
在图2所图示的示例中,运行时调度器214是确定如何在异构系统的运行时期间执行工作负荷(例如,算法和/或多个算法)的设备。例如,运行时调度器214可以是虚拟机(VM)。另外,例如,运行时调度器214确定是否应将工作负荷从一个处理元件卸载到另一处理元件,以便实现与整个异构系统相关联的性能目标和/或是否应在异构系统的多个处理元件之间拆分工作负荷。
在图2的示例中,在CPU 216上执行可执行文件208期间,运行时调度器214确定异构系统204的系统范围的成功函数。另外,运行时调度器214监视异构系统204的性能特征。例如,性能特征包括与包括在可执行文件208中的每个变体相关联的元数据和度量信息。例如,这样的元数据和度量信息包括工作负荷的标识符(例如,算法的名称)、与异构系统204的驱动器和其他硬件相关联的兼容性约束、用于生成变体的成本模型的版本、算法执行尺寸以及确保工作负荷(例如,变体)在每个处理元件上的执行之间的兼容性并向运行时调度器214通知卸载决策的其他数据。
在图2的示例中,由运行时调度器214收集的性能特征还可以包括在相应处理元件上的每个块上的变体的平均执行时间、每个处理元件在运行时期间的平均占用率、停顿率、各个处理元件的功耗、由处理元件利用的计算周期计数、转移工作负荷时的存储器等待时间、将工作负荷从一个处理元件卸载到另一个处理元件的危险、系统范围的电池寿命、已利用的存储器量、与各种处理元件之间的通信总线相关联的度量、以及与异构系统204的存储器(例如存储206)相关联的度量。
在图2的示例中,运行时调度器214确定分割对于给定算法是否是期望的。例如,运行时调度器214可以基于异构系统204的性能特征、跳转表库212中的变体符号和/或异构系统204的系统范围的成功函数,来确定分割是否是期望的。例如,在默认运行时,运行时调度器214可以确定具有可用块变体的算法被分割成批处理器(例如,GPU)上的大块和通用加速器(例如,FPGA)上的较小块。此外,如果GPU 222正在执行大的分区,则运行时调度器214可以选择将较小的分区卸载到FPGA 218和/或CPU 216,以便隐藏与在GPU 222上正执行的变体相关联的等待时间。
在图2的示例中,运行时调度器可以基于负荷和/或环境特性来确定分割对于给定算法而言是期望的。例如,在特定负荷和/或环境特性下,可以由于例如由于某些热约束(例如,系统范围的成功函数)的功率消耗考虑而不期望在GPU 222上连续执行算法分割变体(algorithm partition variants)。然而,运行时调度器214可以确定通过在GPU 222上间歇地执行算法分割变体,仍然可实现系统范围的成功函数。在这种情况下,运行时调度器214可以选择在偶数周期在CPU 216和VPU 220上执行算法分割变体,并且在奇数周期在CPU216和GPU 222上执行算法分割变体。另外,由于面向功率的成功函数,运行时调度器214可以仅选择异构系统204的处理元件的子集,在该子集上执行算法分割变体。
在图2的所图示示例中,如果运行时调度器214确定分割是不期望的,则运行时调度器214选择要在其上执行整个给定算法的处理元件,然后分派要由所选处理元件执行的该算法。然而,如果运行时调度器214确定分割是期望的,则运行时调度器214选择分割策略。运行时调度器214的主要关注点是选择算法的分割策略,该分割策略将在给定的系统范围的成功函数下在可用的处理元件上执行并收敛以完全执行该算法。
在图2的示例中,在选择分割策略之后,运行时调度器214为算法的每个输入和每个输出分配存储206和/或CPU存储217中的存储器。该存储器位置被称为根缓冲区,并且在分配存储206和CPU存储217中的存储器之后,运行时调度器214沿着在分割算法时使用的边界划分根缓冲区。例如,运行时调度器214基于边界缓冲区的哪些部分被访问作为输入(例如,输入是恒定值还是可变值)以及这些输入的访问间隔(例如,这些输入多长时间被访问一次)来划分根缓冲区,以便防止不同处理元件之间不必要的数据移动。
在图2所图示的示例中,运行时调度器214确定是否已经存在利用类似的分割策略的在先对算法的执行。相似度特性可以包括例如相似操作、抽象语法树相似度和/或相似度张量维度。如果运行时调度器214确定已经存在利用类似的分割策略的在先对算法的执行(例如,在处理元件上执行了一个或多个相同的SAP片段、块等),则运行时调度器214利用在先执行中已经确定的结果。
在图2的示例中,如果运行时调度器214确定尚未存在利用类似的分割策略的在先对算法的执行,则运行时调度器214确定为分割策略选择的处理元件是否能访问异构系统204的存储器(例如,存储206)。如果为分割策略选择的处理元件无法访问异构系统204的存储器,则运行时调度器214将根缓冲区的分割拆分备份到与该分割拆分相关联的相应处理元件上。例如,运行时调度器214可以通过利用计算应用编程接口(API)创建由处理元件侧存储器分配支持的系统存储器地址来备份分割的拆分。在这样的示例中,地址在设备之间被别名(aliased),并且数据移动被仔细地管理以防止损坏。
在本文公开的示例中,通过备份与分割拆分相关联的相应处理元件的根缓冲区的分割拆分,运行时调度器214能在计算之前卸载输入数据并推迟输出数据移动直到需要结果为止。
在图2所图示的示例中,如果为分割策略选择的处理元件能访问异构系统204的存储器,则运行时调度器214将算法分割变体分派给它们相应的处理元件以用于执行。在将算法分割变体分派给它们相应的处理元件以用于执行之后,运行时调度器214等待算法分割变体在它们相应的处理元件上完成执行。一旦算法分割变体已经完成执行,运行时调度器214将处理元件特定的存储器(例如,GPU存储223、VPU存储221等)上的算法分割变体的结果(如果有的话)移动到系统存储器(例如,存储206和/或CPU存储217)。然后,运行时调度器214输出经分割算法的合成结果以供使用。运行时调度器214随后针对工作负荷中的所有算法重复该过程。
图3是图示出图2的变体生成器202的示例实现的框图。示例变体生成器202包括示例变体管理器302、示例算法分割器304、示例编译自动调度器306、示例变体编译器308、示例跳转表310和示例应用编译器312。
在本文公开的示例中,变体管理器302、算法分割器304、编译自动调度器306、变体编译器308、跳转表310和应用编译器312中的每一者都与变体生成器202的其他元件通信。例如,变体管理器302、算法分割器304、编译自动调度器306、变体编译器308、跳转表310和应用编译器312经由通信总线进行通信。
在本文公开的一些示例中,变体管理器302、算法分割器304、编译自动调度器306、变体编译器308、跳转表310和应用编译器312可以经由任何适合的有线和/或无线通信方法进行通信。
另外,在本文公开的一些示例中,变体管理器302、算法分割器304、编译自动调度器306、变体编译器308、跳转表310和应用编译器312中的每一者可以经由任何合适的有线和/或无线通信方法与变体生成器202外部的任何组件进行通信。
在图3的示例中,变体管理器302从诸如外部设备和/或代码开发人员的工作站之类的设备获得一个或多个算法。变体管理器302确定为其编写了算法的目标异构系统的处理元件。在确定目标异构系统的处理元件之后,变体管理器302确定所接收的每个算法是否是用于分割的候选。
在一些示例中,变体管理器302实现用于管理变体生成器302要为其生成SAP变体的算法的示例装置。该管理装置由可执行指令实现,诸如至少由图7的框702、704、706、714、716、718、728、730、732和738所实现的可执行指令,其可以在诸如图9的示例中所示的示例处理器912之类的至少一个处理器上执行。在其他示例中,管理装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合实现。
在图3的示例中,变体管理器302通过分析到算法的输入数据的大小和来自算法的输出数据的大小来确定算法是否是SAP的候选。变体管理器302确定算法输入和输出的大小是否证明将工作负荷从一个处理元件移动到已为其编译SAP变体的多个处理的相关联的等待时间是合理的。例如,变体管理器302通过分析算法的一个或多个边界缓冲区来推断算法输入和输出的大小。如果算法输入的大小和/或算法输出的大小满足阈值,则变体管理器302确定该算法是分割的候选。如果算法不是分割的候选,则变体管理器302传送将由变体编译器308随后处理并编译成各个变体的编译自动调度器306,以在异构系统的相应处理元件上执行整个算法。
在图3的示例中,如果算法是分割的候选,则算法分割器304选择分割策略。算法分割器304基于算法的类型、算法的输入的大小和输出的大小以及目标系统的处理元件来选择分割策略。为了选择分割策略,本文公开的示例利用一个或多个DNN模型。
在一些示例中,示例算法分割器304实现用于将算法分割成SAP块的示例装置。该分割装置由可执行指令实现,诸如至少由图7的框708和712所实现的可执行指令,其可以在诸如图9的示例中所示的示例处理器912之类的至少一个处理器上执行。在其他示例中,分割装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合实现。
在图3的所图示示例中,算法分割器将算法的总输入和输出维度插入DNN。DNN的输出是成本模型,其允许算法分割器304确定对于给定算法是可行候选的分割策略和/或多个分割策略。在选择分割策略之后,算法分割器304将算法分割为块(分区、片段等)。
在图3的示例中,变体管理器302选择块以供变体生成器202来处理。变体管理器302确定所选择的块是否具有与已经针对该算法处理过的任何先前块相同的边界。如果所选择的块确实具有与先前处理的块相同的边界,则变体管理器302确定是否有任何后续的块要处理。
在图3的所图示示例中,如果变体管理器302确定所选择的块不具有与先前处理的块相同的边界,则变体管理器302选择为其生成该相应块的变体的处理元件。变体管理器302随后将所选择的块和所选择的处理元件的标识符传送到编译自动调度器306。
在图3所图示的示例中,编译自动调度器306为所选处理元件生成从变体管理器302接收和/或以其他方式获得的所选块(例如,分区、片段等)的调度。在本文公开的示例中,编译自动调度器306通过使用自动调节来生成调度。在其他示例中,可以使用任何合适的自动调度方法来生成用于所选处理元件的所选块(例如,分区、片段等)的调度。
在一些示例中,示例编译自动调度器306实现用于基于例如成本模型为所选处理元件调度SAP块的示例装置。该调度装置由可执行指令实现,诸如至少由图7的框720所实现的可执行指令,其可以在诸如图9的示例中所示的示例处理器912之类的至少一个处理器上执行。在其他示例中,调度装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合实现。
在图3的所图示示例中,变体编译器308将由编译自动调度器306生成的调度编译为能够在运行时在所选处理元件上执行的所选块的变体。例如,变体编译器308将用于所选处理元件的所选块的调度编译为能够由可执行应用调用的方法、类或对象。在编译变体之后,变体编译器308将变体传送到要编译的应用和/或其他可执行文件。另外,由变体编译器308编译的变体被传送到跳转表310。
在一些示例中,示例变体编译器308实现用于变体编译来编译由编译自动调度器生成的调度的示例装置。该变体编译装置由可执行指令实现,诸如至少由图7的框710、722、724和726所实现的可执行指令,其可以在诸如图9的示例中所示的示例处理器912之类的至少一个处理器上执行。在其他示例中,变体编译装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合实现。
在图3的示例中,跳转表310将由变体编译器308生成的不同变体与各个变体将在可执行应用(例如,FAT二进制文件)中位于的位置相关联。例如,跳转表310经由变体符号(例如,指针)将不同变体与它们在可执行应用中的相应位置相关联,该变体符号(例如,指针)指向相应变体在可执行应用中的位置。
在一些示例中,示例跳转表310实现用于存储变体符号以将不同变体与各个变体将在可执行应用中位于的位置相关联的示例装置。该存储装置由可执行指令实现,诸如至少由图7的框734所实现的可执行指令,其可以在诸如图9的示例中所示的示例处理器912之类的至少一个处理器上执行。在其他示例中,存储装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合实现。
在图3的示例中,应用编译器312将算法、各个变体、变体符号和运行时调度器(例如,运行时调度器214)编译为可执行应用以进行存储。应用编译器312将算法、各个变体和运行时调度器编译为由变体生成器202接收的原始算法(例如,代码)的编译后版本。例如,如果算法是用C/C++编写的,则应用编译器312将该算法、各个变体、变体符号和运行时调度器编译为可执行的C/C++应用,其包括以其相应的语言编写的变体以用于在相应的处理元件上执行。在本文公开的示例中,由应用编译器312编译的可执行应用是FAT二进制文件。然而,在其他示例中,由应用编译器312编译的可执行应用可以是任何合适的可执行文件。
在一些示例中,示例应用编译器312实现用于将算法、SAP变体、相应的SAP变体符号和运行时调度器编译为可执行应用以进行存储的示例装置。该编译装置由可执行指令实现,诸如至少由图7的框736所实现的可执行指令,其可以在诸如图9的示例中所示的示例处理器912之类的至少一个处理器上执行。在其他示例中,编译装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合实现。
图4是图示出图2的运行时调度器214的示例实现的框图。示例运行时调度器214包括示例工作负荷分析器402、示例系统概况分析器404、示例存储器控制器406和示例分派器408。在本文公开的示例中,工作负荷分析器402、系统概况分析器404、存储器控制器406和分派器408中的每一者与运行时调度器214的其他元件通信。例如,工作负荷分析器402、系统概况分析器404、存储器控制器406和分派器408经由通信总线进行通信。
在本文公开的一些示例中,工作负荷分析器402、系统概况分析器404、存储器控制器406和分派器408可以经由任何合适的有线和/或无线通信方法进行通信。
另外,在本文公开的一些示例中,工作负荷分析器402、系统概况分析器404、存储器控制器406和分派器408中的每一者可以经由任何合适的有线和/或无线通信方法与运行时调度器214外部的任何组件进行通信。
在图4的示例中,在处理元件上执行可执行文件208期间,工作负荷分析器402确定与异构系统的整体性能相关联的成功函数。工作负荷分析器402额外地确定分割对于给定算法是否是期望的。例如,工作负荷分析器402可以基于给定异构系统的性能特征、跳转表库212中的变体符号和/或与给定异构系统的整体性能相关联的成功函数,来确定分割是否是期望的。
在一些示例中,示例工作负荷分析器402实现用于分析工作负荷以用于异构系统上的运行时调度的示例装置。该分析装置由可执行指令实现,诸如至少由图8的框802、806、808、810、818、820、830和832所实现的可执行指令,其可以在诸如图10的示例中所示的示例处理器1012之类的至少一个处理器上执行。在其他示例中,分析装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合实现。
在图4的所图示示例中,如果工作负荷分析器402确定分割是不期望的,则工作负荷分析器402选择要在其上执行整个给定算法的处理元件,然后分派要由分派器408分派以由所选处理元件执行的算法。如果工作负荷分析器402确定分割是期望的,则工作负荷分析器402选择分割策略。工作负荷分析器402选择将在与给定异构系统的整体性能相关联的成功函数下在可用处理元件上执行的算法的分割策略和/或多个分割策略,以及将导致分割的收敛以用于完全执行算法的分割策略和/或多个分割策略。
在图4所图示的示例中,工作负荷分析器402额外地确定是否已经存在利用类似的分割策略的在先对算法的执行。如果已经存在利用类似分割策略的在先对算法的执行,则工作负荷分析器402利用在该在先执行中已经确定的结果。
在图4的示例中,系统概况分析器404监视给定异构系统(例如,异构系统204)的性能特征。例如,性能特征包括与包括在可执行文件208中的每个变体相关联的元数据和度量信息。由系统概况分析器404监视的给定异构系统的性能特征被运行时调度器214的其他元件利用。
在一些示例中,示例系统概况分析器404实现用于对执行工作负荷的异构系统进行概况分析的示例装置。该概况分析装置由可执行指令实现,诸如至少由图8的框804所实现的可执行指令,其可以在诸如图10的示例中所示的示例处理器1012之类的至少一个处理器上执行。在其他示例中,概况分析装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合实现。
在图4的示例中,在工作负荷分析器402选择分割策略之后,存储器控制器406为算法的每个输入和每个输出分配给定异构系统的共享存储中的存储器来作为根缓冲区。在分配了给定异构系统的共享存储器中的存储器之后,存储器控制器406沿着在分割算法中使用的边界来划分和/或以其他方式拆分根缓冲区。存储器控制器406可以基于例如缓冲区的哪些部分作为输入被访问以及这些输入的访问间隔来划分根缓冲区。
在一些示例中,示例存储器控制器406实现用于控制与异构系统相关联的各种存储器(例如,单独的处理元件存储器、异构系统存储器、共享存储器等)的示例装置。该控制装置由可执行指令实现,诸如至少由图8的框814、816、822、824和828所实现的可执行指令,其可以在诸如图10的示例中所示的示例处理器1012之类的至少一个处理器上执行。在其他示例中,概况分析装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合实现。
在图4的示例中,基于由工作负荷分析器402确定尚未存在利用类似的分割策略的在先对算法的执行,存储器控制器406确定为该分割策略选择的处理元件是否能访问给定异构系统的共享存储器。如果为分割策略选择的处理元件中的一些处理元件无法访问异构系统的共享存储器,则存储器控制器406将根缓冲区的分割拆分备份到与该分割拆分相关联的处理元件的相应存储器上。由于共享存储器已经由存储器控制器406备份在相应处理元件上,所以工作负荷分析器402能在计算之前卸载输入数据,并推迟输出数据移动,直到需要结果为止。
在图4所图示的示例中,如果(a)存储器控制器406确定为分割策略选择的所有处理元件都能访问给定异构系统的存储器和/或(b)存储器控制器406在不访问给定异构系统的共享存储器的情况下在处理元件上备份根缓冲区拆分,则工作负荷分析器402使分派器408将算法分割变体分派给将它们相应的处理元件以被执行。
在一些示例中,示例分派器408实现用于分派要在处理元件上执行以促进一个或多个算法的执行的变体的示例装置。该分派装置由可执行指令实现,诸如至少由图8的框812和826所实现的可执行指令,其可以在诸如图10的示例中所示的示例处理器1012之类的至少一个处理器上执行。在其他示例中,分派装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合实现。
在图4的示例中,在分派器408将算法分割变体分派给它们相应的处理元件以被执行之后,工作负荷分析器402等待算法分割变体在它们相应的处理元件上完成执行。一旦算法分割变体已经完成执行,工作负荷分析器402就向存储器控制器406发送信号以使存储器控制器406将处理元件特定的存储器上的算法分割变体的结果(如果有的话)移动到给定异构系统的共享存储器。然后,工作负荷分析器402输出经分割算法的合成结果以供使用。
图5A-图5E是图示出与要在异构系统上运行的算法相关联的各种示例分割策略的框图。总体上,算法分割器304能经由各种策略对算法进行分割,并且一种或多种分割策略可以适用于目标异构系统上的给定算法。总体而言,算法分割器304将算法分割为能在目标异构系统的不同处理元件上并发运行的块。
图5A是图示出用于对示例算法502进行分割的示例第一分割策略500的框图。例如,算法分割器304可以利用第一分割策略500来分割算法502。在这样的示例中,算法分割器304将算法502分割为示例第一块504和示例第二块506。在第一分割策略500中,算法分割器304将算法502分割为两个基本相等大小的子算法块。为了完成这种拆分,算法的输入和输出被附加地划分和/或以其他方式拆分成两半,使得第二块506的子算法分区不需要和/或以其他方式使用第一块504中使用的数据。算法分割器304的目标是将算法502划分为多个分区,其减少算法502的运行时执行期间的分区(例如,第一块504和第二块506)之间的整体数据移动。
在图5A的示例中,第一分割策略500适用于将在包括至少两个能够具有固定数据大小和/或固定计算大小的处理元件的异构系统上执行的工作负荷。例如,第一分割策略500可以对于包括两个批处理器(例如,GPU)的异构系统是期望的。在这样的示例中,第一分割策略500为批处理器提供足够大的块大小,其将证明与将算法从给定异构系统的主处理元件(例如CPU)上卸载相关联的等待时间是合理的。
然而,如果给定异构系统仅包括CPU和GPU,则由于CPU上的计算速度相对于GPU相对较慢,因此第一分割策略500可能是不受期望的。另外,给定异构系统的预期性能特征可以影响算法分割器304对分割策略的选择。
例如,如果由于给定的环境条件而预期给定的异构系统将在功率消耗限制下运行,则算法分割器304可以对算法502进行分割,使得不利用给定的异构系统的某些处理元件以便满足给定的功率消耗限制。这样的分割策略可能不会优化执行速度;但是,它符合预期的性能特征和预期的系统范围的成功函数。
图5B是图示出用于对示例算法502进行分割的示例第二分割策略508的框图。例如,算法分割器304可以利用第二分割策略508来分割算法502。在这样的示例中,算法分割器304将算法502分割为示例第三块510和示例第四块512。在第二分割策略508中,算法分割器304将算法502分割为第四块512和相对于第四块512小得多的第三块510。第二分割策略508更适合于包括至少一个批处理器和至少一个通用处理元件(例如,CPU)的给定的异构系统。
例如,第二分割策略508更适合于这种异构系统,因为能在通用处理元件上执行相对较小的第三块510,而能在批处理器上执行第四块512。由于第三块510在比第四块512上少得多的数据上操作,因此与批处理器相比,通用处理元件相对较慢的处理速度指示通用处理元件将以与批处理程序将执行第四块512大致相似的时间量执行第三块510。
图5C是图示出用于对示例算法502进行分割的示例第一分割策略500、示例第二分割策略508、示例第三分割策略514和示例第四分割策略520的框图。如图5A和图5B所示,对于不同的系统,或者对于给定的系统,在运行时考虑改变异构系统上的可用处理资源的不同性能特征,可能需要不同的分割策略。例如,当工作负荷实质上足够大而适合跨两个批处理器(例如GPU)并且这两个批处理器具有足够的可用处理资源来处理相当大的SAP块时,第一分割策略500可以是期望的。
由于不可能确定给定异构系统在任何负荷和/或环境条件下的实际性能特征,因此将给定算法(例如,算法502)分割为各种合适的分区使得运行时调度器(例如,运行时调度器214)能在运行时期间有效地将算法和/或算法的SAP块卸载到可用处理元件是有利的。例如,如先前所示,当两个批处理器(例如GPU)可用时,第一分割策略500是期望的,而当通用处理元件和批处理器可用时,第二分割策略508是期望的。
在图5C的示例中,第三分割策略514引入了新的分割策略。例如,算法分割器304可以利用第三分割策略514来分割算法502。在这样的示例中,算法分割器304将算法502分割为示例第五块516和示例第六块518。第三分割策略514与第二分割策略508相似;然而,在第三分割策略514下,算法分割器304将算法502分割为第六块518和相对于第六块518大得多的第五块516,而在第二分割策略508下,算法分割器304将该算法分割为第四块512和相对于第四块512小得多的第三块510。
在图5C的所图示示例中,第三分割策略514图示出算法分割器304分割算法(例如,算法502)的顺序与在运行时对算法的成功执行有关。例如,如果算法中存在中央访问,则算法分割器304可以根据第三分割策略514对算法进行分割。
在图5C的示例中,算法分割器304可以利用第四分割策略520来分割算法502。在这样的示例中,算法分割器304将算法502分割为示例第七块522、示例第八块524、示例第九块526和示例第十块528。在第四分割策略520中,算法分割器304将算法502分割为大小都基本相似的第七块522、第八块524、第九块526和第十块528。第四分割策略520更适合于如下这种给定异构系统,其中至少四个通用处理元件可用于卸载。例如,通用处理元件可以包括CPU的一个或多个核、一个或多个FPGA和/或任何其他合适的通用处理元件。
图5D是图示出用于对示例算法502进行分割的示例第一分割策略500、示例第二分割策略508、示例第三分割策略514和示例第四分割策略520的框图。图5D图示出了在各种分割策略之间可以利用相似的块大小(例如,分区大小、片段大小等)。在图5D的示例中,第三块510包括与第七块522相同的边界,因此,算法分割器304将来自第二分割策略508的第三块510再次用作第四分割策略520中的第七块522,和/或反之亦然。类似地,第六块518包括与第十块528相同的边界,因此,算法分割器304将来自第三分割策略514的第六块518再次用作第四分割策略520中的第十块528,和/或反之亦然。通过在分割策略之间再次使用类似边界的块,算法分割器304消除了子算法分区的冗余变体,并减少了包括SAP变体的可执行文件(例如,可执行文件208、FAT二进制文件等)所消耗的存储器的量。
图5E是图示出分割策略的层级结构530的框图。图5E图示出算法分割器304可以利用SAP以任何期望的粒度来分割算法。通过包括算法(例如,算法502)的各种粒度的分区,算法分割器304能增加作为SAP算法操作的算法的可缩放性。如图5E所图示,层级结构530包括三个粒度级,示例第一粒度532、示例第二粒度534和示例第三粒度536;然而,层级结构530中可以包括任何数量的粒度级。
在图5E的示例中,第一粒度532图示出当不将SAP应用于算法时的情况。该方案粒度可作用于输入数据大小和/或输出数据大小足够小的算法。在第二粒度534下,算法被分割为25个基本相等大小的块。在第三粒度536下,算法被分割为100个基本相等大小的块。在最高粒度级下,该算法被表达为单体块,但是随着粒度级降低,该算法被细分为N*M个块变体。对于每个块变体,变体生成器202可以产生处理元件特定的变体。此外,对于要在n个分割策略下分解为t个要在p个处理元件上执行的块大小的算法,变体生成器202将生成t*n*p个可能的变体。为了防止难以置信的大的可执行文件(例如,可执行文件208,FAT二进制文件等),变体生成器202能选择不为对于运行特定的处理元件可能不切实际的某些块大小生成变体。因此,算法分割器304至少基于顶层块大小、细分块的方法、细分的上限阈值以及定义何时块大小不适合给定处理元件的试探法来确定要使用的分割策略。
图6是图示出在示例异构系统上执行的算法的示例运行时调度配置600的框图。示例运行时调度配置600包括示例第一SAP变体602、示例第二SAP变体604、示例第三SAP变体606、示例第四SAP变体608和示例第五SAP变体610。
在图6的示例中,算法被分解成五个SAP变体,运行时调度器214将其“适配”到给定异构系统上。例如,至少基于给定异构系统的性能特征和系统范围的成功函数,运行时调度器214将通过利用跳转表库212中的变体符号调用相应位置来访问由变体生成器202生成并存储在变体库210中的特定SAP变体。
在图6的所图示示例中,运行时调度器214至少基于给定异构系统的性能特征,选择SAP变体在异构系统上的运行时配置来完全表示算法。例如,至少基于异构系统204的性能特征,运行时调度器214可以选择在CPU 216上执行第一SAP变体602、在CPU 216上执行第二SAP变体604、在VPU 220上执行第三SAP变体606、在GPU 222上执行第四SAP变体608和在FPGA 218上执行第五SAP变体。如图6所图示,相对于其他SAP变体,第一SAP变体602和第二SAP变体604构成给定算法的实质上较小的部分,因此CPU 216是异构系统204上用于执行算法的这种较小部分的合适位置。另外,第三SAP变体606、第四SAP变体608和第五SAP变体610比第一SAP变体602和第二SAP变体604大得多,因此VPU 220、GPU 222和FPGA 218分别是异构系统204上用于卸载给定算法的这种较大部分的期望位置。
虽然图3图示出了实现图2的变体生成器202的示例方式并且图2和图4示出了实现图2的可执行文件208的示例方式,但图2、图3和图4所图示的元件、过程和/或设备中的一个或多个可以被组合、拆分、重新布置、省略、消除和/或以任何其他方式被实现。此外,图3的示例变体管理器302、示例算法分割器304、示例编译自动调度器306、示例变体编译器308、示例跳转表310、示例应用编译器312和/或更一般地,图3的示例变体生成器202和/或示例变体库210、示例跳转表库212、示例工作负荷分析器402、示例系统概况分析器404、示例存储器控制器406、示例分派器408和/或更一般地,示例运行时调度器314和/或更一般地,图2的示例可执行文件208可以通过硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实现。因此,例如,示例变体管理器302、示例算法分割器304、示例编译自动调度器306、示例变体编译器308、示例跳转表310、示例应用编译器312和/或更一般地,图3的示例变体生成器202和/或示例变体库210、示例跳转表库212、示例工作负荷分析器402、示例系统概况分析器404、示例存储器控制器406、示例分派器408和/或更一般地,示例运行时调度器314和/或更一般地,图2的示例可执行文件208中的任何一个可以由一个或多个模拟或数字电路、逻辑电路、(多个)可编程处理器、(多个)可编程控制器、(多个)图形处理单元(GPU)、(多个)数字信号处理器(DSP)、(多个)专用集成电路(ASIC)、(多个)可编程逻辑器件(PLD)和/或(多个)现场可编程逻辑器件(FPLD)来实现。当阅读覆盖纯软件和/或固件实现的本专利的装置、或系统权利要求中的任一个时,示例变体管理器302、示例算法分割器304、示例编译自动调度器306、示例变体编译器308、示例跳转表310、示例应用编译器312和/或更一般地,图3的示例变体生成器202和/或示例变体库210、示例跳转表库212、示例工作负荷分析器402、示例系统概况分析器404、示例存储器控制器406、示例分派器408和/或更一般地,示例运行时调度器314和/或更一般地,图2的示例可执行文件208中的至少一个由此被明确地定义为包括包含软件和/或固件的非瞬态计算机可读存储设备或存储盘,诸如,存储器、数字多功能盘(DVD)、紧凑盘(CD)、蓝光盘等等。此外,图2和图3的示例变体生成器202和/或图2和图4的示例运行时调度器214和/或更一般地,图2的示例可执行文件208可以包括除图2、图3和图4所图示的那些的一个或多个元件、过程和/或设备,和/或可包括任意或所有被图示出的元件、过程和/或设备中的多个。如本文使用的,短语“通信”(包括其各种变形)包含直接通信和/或通过一个或多个中间组件的间接通信,并且不需要直接物理(例如,有线)通信和/或持续通信,而是附加地包括以周期性间隔、预定间隔、非周期性间隔、和/或一次性事件来进行的选择性通信。
在图7中示出了表示用于实现图2和图3的变体生成器202的示例硬件逻辑、机器可读指令、硬件实现的状态机和/或其任何组合的流程图。机器可读指令可以是由计算机处理器执行的一个或多个可执行程序或可执行程序的(多个)部分,计算机处理器诸如结合图9在下文中所讨论的示例处理器平台900中示出的处理器912。虽然程序能具体化在存储于与处理器912相关联的诸如CD-ROM、软盘、硬驱动器、DVD、蓝光盘或存储器之类的非瞬态计算机可读存储介质上的软件中,但是全部程序和/或其部分可替代地由除处理器912之外的设备执行,和/或具体化在固件或专用硬件中。此外,虽然参考图7所图示的流程图描述示例程序,但是可替代地使用实现示例变体生成器202的许多其他方法。例如,可改变框的执行次序,和/或可改变、消除或组合所描述的框中的一些框。附加地或替代地,任何或所有框可以由被构造成在不执行软件或固件的情况下执行相应的操作的一个或多个硬件电路(例如,分立的和/或集成的模拟和/或数字电路、FPGA、ASIC、比较器、运算放大器(op-amp)、逻辑电路等)来实现。
另外,在图8中示出了表示用于实现运行时调度器214和/或更一般地,图2和图4的可执行文件208的示例硬件逻辑、机器可读指令、硬件实现的状态机和/或其任何组合的流程图。机器可读指令可以是由计算机处理器执行的一个或多个可执行程序或可执行程序的(多个)部分,计算机处理器诸如结合图10在下文中所讨论的示例处理器平台1000中示出的处理器1012。虽然程序能具体化在存储于与处理器1012相关联的诸如CD-ROM、软盘、硬驱动器、DVD、蓝光盘或存储器之类的非瞬态计算机可读存储介质上的软件中,但是全部程序和/或其部分可替代地由除处理器1012之外的设备执行,和/或具体化在固件或专用硬件中。此外,虽然参考图8所例示的流程图描述了示例程序,但是可替代地使用实现示例运行时调度器214和/或更一般地,可执行文件208的许多其他方法。例如,可改变框的执行次序,和/或可改变、消除或组合所描述的框中的一些框。附加地或替代地,任何或所有框可以由被构造成在不执行软件或固件的情况下执行相应的操作的一个或多个硬件电路(例如,分立的和/或集成的模拟和/或数字电路、FPGA、ASIC、比较器、运算放大器(op-amp)、逻辑电路等)来实现。
本文中描述的机器可读指令可以以压缩格式、加密格式、片段格式、编译格式、可执行格式、封装格式等中的一种或多种来存储。本文描述的机器可读指令可以作为可用于创建、制造和/或产生机器可执行指令的数据(例如,指令的部分、代码、代码表示等)来存储。例如,机器可读指令可以被分段并被存储在一个或多个存储设备和/或计算设备(例如,服务器)上。机器可读指令可能要求安装、修改、适配、更新、组合、补充、配置、解密、解压缩、拆包、分发、重新分配、编译等中的一项或多项,以使得它们可直接由计算设备和/或其他机器读取、解释、和/或执行。例如,机器可读指令可以存储在多个部分中,这些部分被单独压缩、加密并存储在单独的计算设备上,其中,这些部分在解密、解压缩和组合时形成实现如本文所述的程序的一组可执行指令。
在另一示例中,机器可读指令可以以它们可被计算机读取的状态存储,但是需要添加库(例如,动态链接库(DLL))、软件开发工具包(SDK)、应用编程接口(API)等,以便在特定的计算设备或其他设备上执行指令。在另一个示例中,在可整体或部分地执行机器可读指令和/或对应的(多个)程序之前,可能需要配置机器可读指令(例如,存储的设置、数据输入、记录的网络地址等)。因此,所公开的机器可读指令和/或对应的(多个)程序旨在包含此类机器可读指令和/或(多个)程序,而不管机器可读指令和/或(多个)程序在存储时或以其他方式处于静态或在传输中时的特定格式或状态如何。
本文所描述的机器可读指令可以由任何过去、现在或将来的指令语言、脚本语言、编程语言等表示。例如,机器可读指令可以用以下中任何一种语言来表示:C、C++语言、Java、C#、Perl、Python、JavaScript、超文本标记语言(HTML)、结构化查询语言(SQL)、SWIFT等。
如上所提及的,可使用存储于非瞬态计算机和/或机器可读介质上的可执行指令(例如,计算机和/或机器可读指令)实现图7和图8的示例过程,非瞬态的计算机和/或机器可读介质例如:硬盘驱动器、闪存、只读存储器(ROM)、紧凑盘(CD)、数字多功能盘(DVD)、高速缓存、随机存取存储器(RAM)和/或其他任何在任何时长内(例如:在扩展时间段内、永久地、在简短的实例期间、在临时缓冲和/或信息高速缓存期间)将信息存储于其内的存储设备或存储盘。如本文中所使用的,术语“非瞬态计算机可读存储介质”被明确地定义为包括任何类型的计算机可读存储设备和/或存储盘,并且排除传播的信号以及排除传输介质。
“包含”和“包括”(及其所有形式和时态)在本文中用作开放式术语。因此,每当权利要求将任何形式的“包含”或“包括”(例如,包括、包含、具有等)用作前言或用于任何种类的权利要求叙述内时,要理解的是,附加的要素、项等可以存在而不超出对应权利要求或叙述的范围。如本文所使用的,当短语“至少”被用作例如与权利要求同步使用的过渡术语时是和术语“包含”和“包括”一样的开放式的。当例如以诸如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。
如本文所用,单数引用(例如,“一个(a)”、“一个(an)”、“第一”、“第二”等)不排除复数。本文所使用的术语“一个(a,an)”实体是指该实体中的一个或多个。术语“一个(a)”(或“一个(an)”)、“一个或多个”和“至少一个”可以在本文中互换使用。此外,尽管单独列出,但多个装置、元件或方法动作可由例如单个单元或处理器来实现。另外,虽然各个特征可以被包括在不同的示例或权利要求中,但是这些特征可能被组合,并且在不同的示例或权利要求中的包含并不意味着特征的组合是不可行和/或有利的。
图7是表示可被执行以实现图2和图3的变体生成器202的机器可读指令700的流程图。机器可读指令700在框702处,变体管理器302从诸如外部设备和/或代码开发人员的工作站之类的设备获得一个或多个算法。在框704处,变体管理器302确定已为其编写算法的目标异构系统的处理元件。在框706处,变体管理器302确定所接收的算法是否为分割的候选。例如,变体管理器302基于输入数据和/或输出数据的阈值大小来确定算法是否为分割的候选。
在图7的示例中,如果变体管理器302确定算法不是分割的候选(框706:否),则机器可读指令700进行到框710,在框710处,变体管理器302传送编译自动调度器306以随后由变体编译器308处理并编译成相应变体以在异构系统的相应处理元件上执行整个算法。在框710之后,机器可读指令700进行到框736。
在图7的示例中,如果变体管理器302确定算法是分割的候选(框706:是),则算法分割器304在框708处选择分割策略和/或多个分割策略。如果输入数据的大小和/或输出数据的大小满足阈值(例如,大于阈值量),则变体管理器302可以确定算法是分割的候选。为了选择分割策略,示例算法分割器304利用一个或多个DNN模型。在选择分割策略之后,算法分割器304在框712处将算法分割为块(分区、片段等)。
在图7的示例中,在框714处,变体管理器302选择块以供变体生成器202来处理。在框716处,变体管理器302确定所选择的块是否具有与已经针对该算法处理过的任何先前块相同的边界。如果变体管理器302确定所选择的块确实具有与先前处理的块相同的边界(框:716:是),则机器可读指令700进行到框730。
在图7的所图示示例中,如果变体管理器302确定所选择的块不具有与先前处理的块相同的边界(框716:否),则变体管理器302在框718处选择变体编译器308为其生成该相应块的变体的处理元件。变体管理器302随后将所选择的块和所选择的处理元件的标识符传送到编译自动调度器306。
在图7所图示的示例中,在框720处,编译自动调度器306为所选处理元件生成从变体管理器302接收和/或以其他方式获得的所选块(例如,分区、片段等)的调度。在框722处,变体编译器308将由编译自动调度器306生成的调度编译为能够在运行时在所选处理元件上执行的所选块的变体。在编译变体之后,在框724处,变体编译器308将变体添加到变体库210中以用于编译。另外,在框726处,变体编译器308将与被编译的变体相关联的变体符号添加到跳转表310中
在图7的示例中,在框728处,变体管理器302确定是否存在要为其生成针对所选块的变体的后续处理元件。如果变体管理器302确定存在要为其生成针对所选块的变体的后续处理元件(框728:是),则机器可读指令700进行至框718。如果变体管理器302确定不存在要为其生成针对所选块的变体的后续处理元件(框728:否),则机器可读指令700进行至框730。
在图7的所图示示例中,在框730处,变体管理器302确定是否存在要为其生成SAP变体的后续块。如果变体管理器302确定存在要为其生成SAP变体的后续块(框730:是),则机器可读指令700进行至框714。如果变体管理器302确定不存在要为其生成SAP变体的后续块(框730:否),则机器可读指令700进行至框732。
在图7所图示的示例中,在框732处,变体管理器302确定是否存在算法分割器304能通过其来分割算法的后续分割策略。如果变体管理器302确定存在算法分割器304能通过其来分割算法的后续分割策略(框732:是),则机器可读指令700进行至框708。如果变体管理器302确定不存在算法分割器304能通过其来分割算法的后续分割策略(框732:否),则机器可读指令700进行至框734。
在图7的示例中,在框734处,跳转表310将跳转表310的当前状态添加到跳转表库212中以用于编译。在框736处,应用编译器312将变体库210中针对各个处理元件的不同SAP变体、跳转表库212中的变体符号以及运行时调度器214编译为可执行文件208。
在图7所图示的示例中,在框738处,变体管理器302确定是否存在附加算法。如果存在附加算法(框:738:是),则机器可读指令700进行到框702。如果不存在附加算法(框:738:否),则机器可读指令700结束。
图8是表示可被执行以实现图2和图4的运行时调度器214和/或更一般地,图2的可执行文件208的机器可读指令的流程图。机器可读指令800开始于框802,在框802处,工作负荷分析器402确定与给定异构系统的整体性能相关联的成功函数。在框804处,系统概况分析器404监视给定异构系统的性能特征。
在图8的示例中,在框806处,工作负荷分析器402额外地确定分割对于给定算法是否是期望的。如果工作负荷分析器402确定分割对于给定算法是不期望的(框806:否),则机器可读指令800进行到框810,在框810处,工作负荷分析器402选择要在其上执行整个给定算法的处理元件。在框810之后,机器可读指令800进行到框812,在框812处,分派器408分派要由所选处理元件执行的算法。在框812之后,机器可读指令800进行到框832。
在图8的所图示示例中,如果工作负荷分析器402确定分割是期望的(框806:是),则工作负荷分析器402在框808处选择分割策略。在框808之后,机器可读指令800进行到框814。在框814处,在工作负荷分析器402选择分割策略之后,存储器控制器406为算法的每个输入和每个输出分配给定异构系统的共享存储中的存储器来作为根缓冲区。
在图8的示例中,在分配了给定异构系统的共享存储器中的存储器之后,存储器控制器406在框816处沿着在分割算法中使用的边界来划分和/或以其他方式拆分根缓冲区。在框818处,工作负荷分析器402确定是否已经存在利用类似的分割策略的在先对算法的执行。如果工作负荷分析器402确定已经存在利用类似的分割策略的在先对算法的执行(框818:是),则工作负荷分析器402在框820处利用在在先执行中已经确定的相似SAP变体的结果。在框820之后,机器可读指令800进行到框822。
在图8所图示的示例中,如果工作负荷分析器402确定尚不存在利用类似的分割策略的在先对算法的执行(框818:否),则机器可读指令800进行到框822。在框822处,存储器控制器406确定为分割策略选择的处理元件是否能访问给定异构系统的共享存储器。
在图8的示例中,如果存储器控制器406确定为分割策略选择的处理元件中的一些处理元件无法访问异构系统的共享存储器(框822:否),则存储器控制器406在框824处将根缓冲区的分割拆分备份到与该分割拆分相关联的处理元件的相应存储器上。在框824之后,机器可读指令800进行到框826。如果存储器控制器406确定为分割策略选择的所有处理元件都能访问异构系统的共享存储器(框822:是),则机器可读指令800进行到框826。
在图8所图示的示例中,在框826处,分派器408将算法分割变体(例如,SAP变体)分派给它们相应的处理元件以用于执行。在框828处,在各种SAP变体已经完成执行之后,存储器控制器406将处理元件特定的存储器上的算法分割变体的结果(如果有的话)移动到给定异构系统的共享存储器。
在图8的示例中,在框830处,工作负荷分析器402然后输出经分割算法的合成结果以供使用。在框832处,工作负荷分析器402确定是否存在附加算法。如果存在附加算法(框:832:是),则机器可读指令800进行到框802。如果不存在附加算法(框:832:否),则机器可读指令800结束。
图9是被构造用于执行图7的指令以实现图2和图3的变体生成器202的示例处理器平台900的框图。处理平台900可以是例如,服务器、个人计算机、工作站、自学习机(例如,神经网络)、移动设备(例如,手机、智能电话、诸如iPadTM的平板)、个人数字助理(PDA)、互联网设备、DVD播放器、CD播放器、数字视频记录仪、蓝光播放器、游戏控制台、个人视频记录仪、机顶盒、耳机或其他可穿戴设备、或任何其他类型的计算设备。
所图示示例的处理器平台900包括处理器912。所图示示例的处理器912是硬件。例如,处理器912可以由来自任何所需要的系列或制造商的一个或多个集成电路、逻辑电路、微处理器、GPU、DSP或控制器实现。硬件处理器可以是基于半导体的(例如,硅基)器件。在该示例中,处理器实现示例变体管理器302、示例算法分割器304、示例编译自动调度器306、示例变体编译器308、示例跳转表310和示例应用编译器312。
所图示示例的处理器912包括本地存储器913(例如,高速缓存)。所图示示例的处理器912经由总线918与包括易失性存储器914和非易失性存储器916的主存储器进行通信。易失性存储器914可由同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、
Figure BDA0002428125470000321
动态随机存取存储器
Figure BDA0002428125470000322
和/或任何其他类型的随机存取存储器设备实现。非易失性存储器916可由闪存和/或任何其他所期望类型的存储器设备实现。由存储器控制器控制对主存储器914、主存储器916的访问。
所图示示例的处理器平台900还包括接口电路920。接口电路920可由任何类型的接口标准实现,诸如以太网接口、通用串行总线(USB)、
Figure BDA0002428125470000331
Figure BDA0002428125470000332
接口、近场通信(NFC)接口和/或PCI快速接口。
在所图示示例中,一个或多个输入设备922被连接至接口电路920。(多个)输入设备922准许用户将数据和/或命令输入至处理器912中。(多个)输入设备可以由例如音频传感器、麦克风、相机(静止的或视频)、键盘、按钮、鼠标、触摸屏、轨迹板、轨迹球、等点鼠标和/或语音识别系统实现。
一个或多个输出设备924也被连接至所图示示例的接口电路920。输出设备924可例如由显示设备(例如,发光二极管(LED)、有机发光二极管(OLED)、液晶显示器(LCD)、阴极射线管显示器(CRT)、面内切换(IPS)显示器、触摸屏等)、触觉输出设备、打印机和/或扬声器实现。因此,所图示示例的接口电路920典型地包括图形驱动器卡、图形驱动器芯片和/或图形驱动器处理器。
所示出的示例的接口电路920还包括诸如发射机、接收机、收发机、调制解调器、住宅网关、无线接入点、和/或网络接口之类的通信设备,以促进经由网络926与外部机器(例如,任何种类的计算设备)交换数据。通信可经由例如以太网连接、数字订户线路(DSL)连接、电话线连接、同轴电缆系统、卫星系统、直线对传式无线系统、蜂窝电话系统等。
所图示示例的处理器平台900还包括用于存储软件和/或数据的一个或多个大容量存储设备928。此类大容量存储设备928的示例包括软盘驱动器、硬驱动器盘、光盘驱动器、蓝光盘驱动器、独立磁盘冗余阵列(RAID)系统和数字多功能盘(DVD)驱动器。
图7的机器可执行指令932可以被存储在大容量存储设备928中,存储在易失性存储器914中,存储在非易失性存储器916中,和/或存储在诸如CD或DVD的可移除非瞬态计算机可读存储介质上。
图10是被构造用于执行图8的指令以实现运行时调度器214和/或更一般地,图2和图4的可执行文件208的示例处理器平台1000的框图。处理平台1000可以是例如,服务器、个人计算机、工作站、自学习机(例如,神经网络)、移动设备(例如,手机、智能电话、诸如iPadTM的平板)、个人数字助理(PDA)、互联网设备、DVD播放器、CD播放器、数字视频记录仪、蓝光播放器、游戏控制台、个人视频记录仪、机顶盒、耳机或其他可穿戴设备、或任何其他类型的计算设备。
所图示示例的处理器平台1000包括处理器1012。所图示示例的处理器1012是硬件。例如,处理器1012可以由来自任何所需要的系列或制造商的一个或多个集成电路、逻辑电路、微处理器、GPU、DSP或控制器实现。硬件处理器可以是基于半导体的(例如,硅基)器件。另外,处理器平台1000可以包括诸如示例CPU 216、示例FPGA 218、示例VPU 220和示例GPU 222之类的附加处理元件。
所图示示例的处理器1012包括本地存储器1013(例如,高速缓存)。在该示例中,本地存储器1013包括示例变体库210、示例跳转表库212、示例工作负荷分析器402、示例系统概况分析器404、示例存储器控制器406、示例分派器408和/或更一般地,示例运行时调度器214和/或更一般地,示例可执行文件208。所图示示例的处理器1012经由总线1018与包括易失性存储器1014和非易失性存储器1016的主存储器进行通信。易失性存储器1014可由同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、
Figure BDA0002428125470000342
动态随机存取存储器
Figure BDA0002428125470000343
和/或任何其他类型的随机存取存储器设备实现。非易失性存储器1016可由闪存和/或任何其他所期望类型的存储器设备实现。由存储器控制器控制对主存储器1014、主存储器1016的访问。
所图示示例的处理器平台1000还包括接口电路1020。接口电路1020可由任何类型的接口标准实现,诸如以太网接口、通用串行总线(USB)、
Figure BDA0002428125470000341
接口、近场通信(NFC)接口和/或PCI快速接口。
在所图示示例中,一个或多个输入设备1022被连接至接口电路1020。(多个)输入设备1022准许用户将数据和/或命令输入至处理器1012中。(多个)输入设备可以由例如音频传感器、麦克风、相机(静止的或视频)、键盘、按钮、鼠标、触摸屏、轨迹板、轨迹球、等点鼠标和/或语音识别系统实现。
一个或多个输出设备1024也被连接至所图示示例的接口电路1020。输出设备1024可例如由显示设备(例如,发光二极管(LED)、有机发光二极管(OLED)、液晶显示器(LCD)、阴极射线管显示器(CRT)、面内切换(IPS)显示器、触摸屏等)、触觉输出设备、打印机和/或扬声器实现。因此,所图示示例的接口电路920典型地包括图形驱动器卡、图形驱动器芯片和/或图形驱动器处理器。
所示出的示例的接口电路1020还包括诸如发射机、接收机、收发机、调制解调器、住宅网关、无线接入点、和/或网络接口之类的通信设备,以促进经由网络1026与外部机器(例如,任何种类的计算设备)交换数据。通信可经由例如以太网连接、数字订户线路(DSL)连接、电话线连接、同轴电缆系统、卫星系统、直线对传式无线系统、蜂窝电话系统等。
所图示示例的处理器平台1000还包括用于存储软件和/或数据的一个或多个大容量存储设备1028。此类大容量存储设备1028的示例包括软盘驱动器、硬驱动器盘、光盘驱动器、蓝光盘驱动器、独立磁盘冗余阵列(RAID)系统和数字多功能盘(DVD)驱动器。
图8的机器可执行指令1032可以被存储在大容量存储设备1028中,存储在易失性存储器1014中,存储在非易失性存储器1016中,和/或存储在诸如CD或DVD的可移除非瞬态计算机可读存储介质上。
从前述内容将理解,已经公开了提高执行软件的异构系统的利用率的示例方法、装置和制品。此外,本文公开的示例将工作负荷内的算法分解为比在运行时能被调度的片段更小的片段(例如,块,分区等),以便有效利用异构系统的可用处理资源,同时通过并行化各个片段的执行来改善此类算法的执行。本文公开的示例包括确定是否应将SAP应用于算法,将算法分割为SAP块(例如,片段、分区等),为每个块生成处理元件特定的变体,确保由所有片段产生的数据有效地整理为单个结果,片段的变体的运行时选择,以及在运行时期间工作负荷卸载的协调。
所公开的方法、装置和制品通过减少执行工作负荷所需的计算周期的数量并增加各种异构处理元件的执行算法的利用率来提高使用计算设备的效率。所公开的方法、装置和制品相应地涉及计算机功能的一个或多个改善。
本文公开了用于提高执行软件的异构系统的利用率的示例方法、装置、系统和制品。其他示例及其组合包括以下内容:
示例1包括一种用于提高执行软件的异构系统的利用率的装置,该装置包括:变体管理器,用于基于到算法的输入数据的第一大小和来自所述算法的输出数据的第二大小中的至少一个来确定所述算法是否是子算法分割(SAP)的候选;分割器,用于将所述算法分割为至少第一块和第二块;以及编译器,用于将基于所述第一块的第一变体和基于所述第二块的第二变体编译到可执行文件中,所述第一变体用于在所述异构系统的第一处理元件上执行,所述第二变体用于在所述异构系统的第二处理元件上执行。
示例2包括示例1的装置,其中,当所述第一大小和所述第二大小中的至少一个满足阈值时,所述变体管理器确定所述算法是SAP的候选。
示例3包括示例1的装置,其中,所述分割器用于基于深度神经网络将所述算法分割为至少所述第一块和所述第二块。
示例4包括示例1的装置,其中,所述分割器用于基于第一分割策略生成所述第一块和所述第二块,所述分割器用于基于与所述第一分割策略不同的第二分割策略生成第三块和第四块。
示例5包括示例4的装置,其中,所述第一块包括与至少到所述算法的一组输入数据相关联的第一缓冲区;并且其中当所述第三块包括至少具有到所述算法的所述一组输入数据的第二缓冲区时,所述第一变体用于在所述第一处理元件上执行以实现所述第三块。
示例6包括示例1的装置,其中,所述第一块包括与至少到所述算法的第一组输入数据相关联的第一缓冲区,并且所述第二块包括与至少到所述算法的第二组输入数据相关联的第二缓冲区,所述第二组输入数据大于所述第一组输入数据。
示例7包括示例1的装置,其中,所述变体管理器用于确定所述异构系统包括所述第一处理元件和所述第二处理元件。
示例8包括一种非瞬态计算机可读存储介质,包括指令,所述指令在被执行时使得至少一个处理器至少用于:基于到算法的输入数据的第一大小和来自所述算法的输出数据的第二大小中的至少一个来确定所述算法是否是子算法分割(SAP)的候选;将所述算法分割为至少第一块和第二块;以及将基于所述第一块的第一变体和基于所述第二块的第二变体编译到可执行文件中,所述第一变体用于在异构系统的第一处理元件上执行,所述第二变体用于在所述异构系统的第二处理元件上执行。
示例9包括示例8的非瞬态计算机可读存储介质,其中,所述指令在被执行时使得所述至少一个处理器用于:当所述第一大小和所述第二大小中的至少一个满足阈值时,确定所述算法是SAP的候选。
示例10包括示例8的非瞬态计算机可读存储介质,其中,所述指令在被执行时使得所述至少一个处理器用于:基于深度神经网络将所述算法分割为至少所述第一块和所述第二块。
示例11包括示例8的非瞬态计算机可读存储介质,其中,所述指令在被执行时使得所述至少一个处理器用于:基于第一分割策略生成所述第一块和所述第二块,以及基于与所述第一分割策略不同的第二分割策略生成第三块和第四块。
示例12包括示例11的非瞬态计算机可读存储介质,其中,所述第一块包括与至少到所述算法的一组输入数据相关联的第一缓冲区;并且其中当所述第三块包括至少具有到所述算法的所述一组输入数据的第二缓冲区时,所述第一变体用于在所述第一处理元件上执行以实现所述第三块。
示例13包括示例8的非瞬态计算机可读存储介质,其中,所述第一块包括与至少到所述算法的第一组输入数据相关联的第一缓冲区,并且所述第二块包括与至少到所述算法的第二组输入数据相关联的第二缓冲区,所述第二组输入数据大于所述第一组输入数据。
示例14包括示例8的非瞬态计算机可读存储介质,其中,所述指令在被执行时使得所述至少一个处理器用于:确定所述异构系统包括所述第一处理元件和所述第二处理元件。
示例15包括一种用于提高执行软件的异构系统的利用率的设备,所述设备包括:用于管理的装置,所述用于管理的装置用于基于到算法的输入数据的第一大小和来自所述算法的输出数据的第二大小中的至少一个来确定所述算法是否是子算法分割(SAP)的候选;用于分割的装置,所述用于分割的装置用于将所述算法分割为至少第一块和第二块;以及用于编译的装置,所述用于编译的装置用于将基于所述第一块的第一变体和基于所述第二块的第二变体编译到可执行文件中,所述第一变体用于在所述异构系统的第一处理元件上执行,所述第二变体用于在所述异构系统的第二处理元件上执行。
示例16包括示例15的设备,其中,当所述第一大小和所述第二大小中的至少一个满足阈值时,所述用于管理的装置确定所述算法是SAP的候选。
示例17包括示例15的设备,其中,所述用于分割的装置用于基于深度神经网络将所述算法分割为至少所述第一块和所述第二块。
示例18包括示例15的设备,其中,所述用于分割的装置用于基于第一分割策略生成所述第一块和所述第二块,并且基于与所述第一分割策略不同的第二分割策略生成第三块和第四块。
示例19包括示例18的设备,其中,所述第一块包括与至少到所述算法的一组输入数据相关联的第一缓冲区;并且其中当所述第三块包括至少具有到所述算法的所述一组输入数据的第二缓冲区时,所述第一变体用于在所述第一处理元件上执行以实现所述第三块。
示例20包括示例15的设备,其中,所述第一块包括与至少到所述算法的第一组输入数据相关联的第一缓冲区,并且所述第二块包括与至少到所述算法的第二组输入数据相关联的第二缓冲区,所述第二组输入数据大于所述第一组输入数据。
示例21包括示例1的设备,其中,所述用于管理的装置用于确定所述异构系统包括所述第一处理元件和所述第二处理元件。
示例22包括一种用于提高执行软件的异构系统的利用率的方法,所述方法包括:基于到算法的输入数据的第一大小和来自所述算法的输出数据的第二大小中的至少一个来确定所述算法是否是子算法分割(SAP)的候选;将所述算法分割为至少第一块和第二块;以及将基于所述第一块的第一变体和基于所述第二块的第二变体编译到可执行文件中,所述第一变体用于在异构系统的第一处理元件上执行,所述第二变体用于在所述异构系统的第二处理元件上执行。
示例23包括示例22的方法,还包括:当所述第一大小和所述第二大小中的至少一个满足阈值时,确定所述算法是SAP的候选。
示例24包括示例22的方法,还包括:基于深度神经网络将所述算法分割为至少所述第一块和所述第二块。
示例25包括示例23的方法,还包括:基于第一分割策略生成所述第一块和所述第二块,并且基于与所述第一分割策略不同的第二分割策略生成第三块和第四块。
虽然本文中已公开了某些示例方法、装置和制品,但本专利涵盖的范围并不限于此。相反,本专利涵盖落入本专利权利要求范围内的全部方法、装置和制品。
所附的权利要求由此通过此种引用而被并入到该具体实施方式中,每一项权利要求本身作为本公开的单独的实施例。

Claims (25)

1.一种用于提高执行软件的异构系统的利用率的装置,所述装置包括:
变体管理器,用于基于到算法的输入数据的第一大小和来自所述算法的输出数据的第二大小中的至少一个来确定所述算法是否是子算法分割SAP的候选;
分割器,用于将所述算法分割为至少第一块和第二块;以及
编译器,用于将基于所述第一块的第一变体和基于所述第二块的第二变体编译到可执行文件中,所述第一变体用于在所述异构系统的第一处理元件上执行,所述第二变体用于在所述异构系统的第二处理元件上执行。
2.如权利要求1所述的装置,其特征在于,当所述第一大小和所述第二大小中的至少一个满足阈值时,所述变体管理器确定所述算法是SAP的候选。
3.如权利要求1所述的装置,其特征在于,所述分割器用于基于深度神经网络将所述算法分割为至少所述第一块和所述第二块。
4.如权利要求1所述的装置,其特征在于,所述分割器用于基于第一分割策略生成所述第一块和所述第二块,所述分割器用于基于与所述第一分割策略不同的第二分割策略生成第三块和第四块。
5.如权利要求4所述的装置,其特征在于,所述第一块包括与至少到所述算法的一组输入数据相关联的第一缓冲区;并且其中当所述第三块包括至少具有到所述算法的所述一组输入数据的第二缓冲区时,所述第一变体用于在所述第一处理元件上执行以实现所述第三块。
6.如权利要求1所述的装置,其特征在于,所述第一块包括与至少到所述算法的第一组输入数据相关联的第一缓冲区,并且所述第二块包括与至少到所述算法的第二组输入数据相关联的第二缓冲区,所述第二组输入数据大于所述第一组输入数据。
7.如权利要求1所述的装置,其特征在于,所述变体管理器用于确定所述异构系统包括所述第一处理元件和所述第二处理元件。
8.一种计算机可读存储介质,包括指令,所述指令在被执行时使得至少一个处理器至少用于:
基于到算法的输入数据的第一大小和来自所述算法的输出数据的第二大小中的至少一个来确定所述算法是否是子算法分割SAP的候选;
将所述算法分割为至少第一块和第二块;以及
将基于所述第一块的第一变体和基于所述第二块的第二变体编译到可执行文件中,所述第一变体用于在异构系统的第一处理元件上执行,所述第二变体用于在所述异构系统的第二处理元件上执行。
9.如权利要求8所述的计算机可读存储介质,其特征在于,所述指令在被执行时使得所述至少一个处理器用于:当所述第一大小和所述第二大小中的至少一个满足阈值时,确定所述算法是SAP的候选。
10.如权利要求8所述的计算机可读存储介质,其特征在于,所述指令在被执行时使得所述至少一个处理器用于:基于深度神经网络将所述算法分割为至少所述第一块和所述第二块。
11.如权利要求8所述的计算机可读存储介质,其特征在于,所述指令在被执行时使得所述至少一个处理器用于:基于第一分割策略生成所述第一块和所述第二块,以及基于与所述第一分割策略不同的第二分割策略生成第三块和第四块。
12.如权利要求11所述的计算机可读存储介质,其特征在于,所述第一块包括与至少到所述算法的一组输入数据相关联的第一缓冲区;并且其中当所述第三块包括至少具有到所述算法的所述一组输入数据的第二缓冲区时,所述第一变体用于在所述第一处理元件上执行以实现所述第三块。
13.如权利要求8所述的计算机可读存储介质,其特征在于,所述第一块包括与至少到所述算法的第一组输入数据相关联的第一缓冲区,并且所述第二块包括与至少到所述算法的第二组输入数据相关联的第二缓冲区,所述第二组输入数据大于所述第一组输入数据。
14.如权利要求8所述的计算机可读存储介质,其特征在于,所述指令在被执行时使得所述至少一个处理器用于:确定所述异构系统包括所述第一处理元件和所述第二处理元件。
15.一种用于提高执行软件的异构系统的利用率的设备,所述设备包括:
用于管理的装置,所述用于管理的装置用于基于到算法的输入数据的第一大小和来自所述算法的输出数据的第二大小中的至少一个来确定所述算法是否是子算法分割SAP的候选;
用于分割的装置,所述用于分割的装置用于将所述算法分割为至少第一块和第二块;以及
用于编译的装置,所述用于编译的装置用于将基于所述第一块的第一变体和基于所述第二块的第二变体编译到可执行文件中,所述第一变体用于在所述异构系统的第一处理元件上执行,所述第二变体用于在所述异构系统的第二处理元件上执行。
16.如权利要求15所述的设备,其特征在于,当所述第一大小和所述第二大小中的至少一个满足阈值时,所述用于管理的装置确定所述算法是SAP的候选。
17.如权利要求15所述的设备,其特征在于,所述用于分割的装置用于基于深度神经网络将所述算法分割为至少所述第一块和所述第二块。
18.如权利要求15所述的设备,其特征在于,所述用于分割的装置用于基于第一分割策略生成所述第一块和所述第二块,并且基于与所述第一分割策略不同的第二分割策略生成第三块和第四块。
19.如权利要求18所述的设备,其特征在于,所述第一块包括与至少到所述算法的一组输入数据相关联的第一缓冲区;并且其中当所述第三块包括至少具有到所述算法的所述一组输入数据的第二缓冲区时,所述第一变体用于在所述第一处理元件上执行以实现所述第三块。
20.如权利要求15所述的设备,其特征在于,所述第一块包括与至少到所述算法的第一组输入数据相关联的第一缓冲区,并且所述第二块包括与至少到所述算法的第二组输入数据相关联的第二缓冲区,所述第二组输入数据大于所述第一组输入数据。
21.如权利要求15所述的设备,其特征在于,所述用于管理的装置用于确定所述异构系统包括所述第一处理元件和所述第二处理元件。
22.一种用于提高执行软件的异构系统的利用率的方法,所述方法包括:
基于到算法的输入数据的第一大小和来自所述算法的输出数据的第二大小中的至少一个来确定所述算法是否是子算法分割SAP的候选;
将所述算法分割为至少第一块和第二块;以及
将基于所述第一块的第一变体和基于所述第二块的第二变体编译到可执行文件中,所述第一变体用于在异构系统的第一处理元件上执行,所述第二变体用于在所述异构系统的第二处理元件上执行。
23.如权利要求22所述的方法,还包括:当所述第一大小和所述第二大小中的至少一个满足阈值时,确定所述算法是SAP的候选。
24.如权利要求22所述的方法,还包括:基于深度神经网络将所述算法分割为至少所述第一块和所述第二块。
25.如权利要求23所述的方法,还包括:基于第一分割策略生成所述第一块和所述第二块,并且基于与所述第一分割策略不同的第二分割策略生成第三块和第四块。
CN202010227282.4A 2019-06-27 2020-03-27 用于提高执行软件的异构系统的利用率的方法和装置 Pending CN112148472A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/455,628 US11036477B2 (en) 2019-06-27 2019-06-27 Methods and apparatus to improve utilization of a heterogeneous system executing software
US16/455,628 2019-06-27

Publications (1)

Publication Number Publication Date
CN112148472A true CN112148472A (zh) 2020-12-29

Family

ID=68160331

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010227282.4A Pending CN112148472A (zh) 2019-06-27 2020-03-27 用于提高执行软件的异构系统的利用率的方法和装置

Country Status (3)

Country Link
US (1) US11036477B2 (zh)
CN (1) CN112148472A (zh)
DE (1) DE102020110655A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112612999A (zh) * 2020-12-30 2021-04-06 中国人民解放军战略支援部队信息工程大学 基于树结构的多样化变体生成方法及系统

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10977075B2 (en) * 2019-04-10 2021-04-13 Mentor Graphics Corporation Performance profiling for a multithreaded processor
US11269639B2 (en) 2019-06-27 2022-03-08 Intel Corporation Methods and apparatus for intentional programming for heterogeneous systems
US11060504B1 (en) * 2020-02-07 2021-07-13 General Electric Company Systems and methods for continuous machine learning based control of wind turbines
US11736822B1 (en) 2020-02-28 2023-08-22 Apple Inc. Controlling an image sensor based on GPU temporal processing values
US11649804B2 (en) 2021-06-07 2023-05-16 General Electric Renovables Espana, S.L. Systems and methods for controlling a wind turbine

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8296743B2 (en) 2007-12-17 2012-10-23 Intel Corporation Compiler and runtime for heterogeneous multiprocessor systems
US20100153934A1 (en) * 2008-12-12 2010-06-17 Peter Lachner Prefetch for systems with heterogeneous architectures
US20110289519A1 (en) 2010-05-21 2011-11-24 Frost Gary R Distributing workloads in a computing platform
US8959469B2 (en) 2012-02-09 2015-02-17 Altera Corporation Configuring a programmable device using high-level language
US9483282B1 (en) 2014-05-30 2016-11-01 Altera Corporation Methods and systems for run-time hardware configuration change management
US20160210174A1 (en) 2015-01-15 2016-07-21 Microsoft Corporation Hybrid Scheduler and Power Manager
US10152310B2 (en) 2015-05-27 2018-12-11 Nvidia Corporation Fusing a sequence of operations through subdividing
US9800466B1 (en) 2015-06-12 2017-10-24 Amazon Technologies, Inc. Tunable parameter settings for a distributed application
US10007520B1 (en) 2016-02-25 2018-06-26 Jpmorgan Chase Bank, N.A. Systems and methods for using alternate computer instruction sets
US20180082212A1 (en) 2016-09-20 2018-03-22 Intel Corporation Optimizing machine learning running time
US10713213B2 (en) 2016-12-21 2020-07-14 Intel Corporation Systems and methods for multi-architecture computing
US10187252B2 (en) 2016-12-27 2019-01-22 Cisco Technology, Inc. Configuring heterogeneous computing environments using machine learning
US10445118B2 (en) 2017-09-22 2019-10-15 Intel Corporation Methods and apparatus to facilitate field-programmable gate array support during runtime execution of computer readable instructions
US11269639B2 (en) 2019-06-27 2022-03-08 Intel Corporation Methods and apparatus for intentional programming for heterogeneous systems
US10908884B2 (en) 2019-06-27 2021-02-02 Intel Corporation Methods and apparatus for runtime multi-scheduling of software executing on a heterogeneous system
US20190317880A1 (en) 2019-06-27 2019-10-17 Intel Corporation Methods and apparatus to improve runtime performance of software executing on a heterogeneous system

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112612999A (zh) * 2020-12-30 2021-04-06 中国人民解放军战略支援部队信息工程大学 基于树结构的多样化变体生成方法及系统
CN112612999B (zh) * 2020-12-30 2022-11-15 中国人民解放军战略支援部队信息工程大学 基于树结构的多样化变体生成方法及系统

Also Published As

Publication number Publication date
US11036477B2 (en) 2021-06-15
DE102020110655A1 (de) 2020-12-31
US20190317741A1 (en) 2019-10-17

Similar Documents

Publication Publication Date Title
US11941400B2 (en) Methods and apparatus for intentional programming for heterogeneous systems
CN112148472A (zh) 用于提高执行软件的异构系统的利用率的方法和装置
US11243816B2 (en) Program execution on heterogeneous platform
US11144348B2 (en) Heterogeneous computing system and method including analyzing expected costs of compute kernels
US20190317880A1 (en) Methods and apparatus to improve runtime performance of software executing on a heterogeneous system
JP5984158B2 (ja) 異種構成コンピュータ上でハイ・レベルのプログラムをコンパイルし、実行するための技法
US10908884B2 (en) Methods and apparatus for runtime multi-scheduling of software executing on a heterogeneous system
US20210382754A1 (en) Serverless computing architecture for artificial intelligence workloads on edge for dynamic reconfiguration of workloads and enhanced resource utilization
US11385931B2 (en) Method, electronic device, and computer program product for processing computing job
Raju et al. A survey on techniques for cooperative CPU-GPU computing
Wu et al. Compiler-assisted workload consolidation for efficient dynamic parallelism on GPU
CN112395010A (zh) 实现工作负载的静态映射的乱序流水线执行的方法和装置
Sioutas et al. Schedule synthesis for halide pipelines on gpus
Papadimitriou et al. Multiple-tasks on multiple-devices (MTMD): exploiting concurrency in heterogeneous managed runtimes
US11573777B2 (en) Method and apparatus for enabling autonomous acceleration of dataflow AI applications
Tarakji et al. The development of a scheduling system GPUSched for graphics processing units
Imes et al. Compiler abstractions and runtime for extreme-scale sar and cfd workloads
Li et al. CoCoPIE XGen: A Full-Stack AI-Oriented Optimizing Framework
US20220222177A1 (en) Systems, apparatus, articles of manufacture, and methods for improved data transfer for heterogeneous programs
JP7523964B2 (ja) アクセラレータにおいてヘテロジニアスコンポーネントを設定する方法及び装置
WO2024039923A1 (en) Method of compile-time optimization for nested parallel for-loops for deep learning neural network computation
JP2021034023A (ja) アクセラレータにおいてヘテロジニアスコンポーネントを設定する方法及び装置
Fumero et al. Programming and Architecture Models
Sabne Programming models, compilers, and runtime systems for accelerator computing
Fonseca Automatic Optimization of Granularity Control Algorithms for Parallel 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