优化硬件fifo指令

文档序号:74757 发布日期:2021-10-01 浏览:27次 >En<

阅读说明:本技术 优化硬件fifo指令 (Optimizing hardware FIFO instructions ) 是由 徐元仲 詹姆斯·M·施蒂希诺特 戴维·亚历山大·迈内默 于 2019-11-26 设计创作,主要内容包括:描述了用于调度先进先出(FIFO)指令的方法、系统和装置。在一个方面,一种方法包括接收表示将由具有硬件处理器的处理单元执行的程序的代码的数据。对于一个或多个硬件处理器中的每一个,在表示代码的数据中标识用于由硬件处理器执行的独立FIFO指令组的顺序。对于用于由硬件处理器执行的每个独立的FIFO指令组,确定表示从独立的FIFO指令组到达程序的末尾需要多长时间的路径长度度量。至少基于用于由硬件处理器执行的每个独立FIFO指令组的路径长度度量来生成用于由硬件处理器执行的独立FIFO指令组的新顺序。(Methods, systems, and apparatus are described for scheduling first-in-first-out (FIFO) instructions. In one aspect, a method includes receiving data representing code of a program to be executed by a processing unit having a hardware processor. For each of the one or more hardware processors, an order of the independent FIFO instruction groups for execution by the hardware processor is identified in data representing the code. For each independent FIFO instruction group for execution by the hardware processor, a path length metric is determined that indicates how long it takes to reach the end of the program from the independent FIFO instruction group. A new order of the independent FIFO instruction groups for execution by the hardware processor is generated based at least on the path length metric for each independent FIFO instruction group for execution by the hardware processor.)

优化硬件FIFO指令

背景技术

一些处理器(例如,域特定处理器)可以包括长延迟、高吞吐量硬件单元。例如,一些处理器可以包括脉动阵列以有效地计算复杂的数值工作负荷。用于这种硬件单元的自然编程接口是在处理器的指令集架构(ISA)中定义的先进先出(FIFO)队列,因为存在负责将数据压入(push)到这些单元并将数据弹出(pop)这些单元的指令。然而,硬件FIFO对指令施加排序约束,并且可以将额外的状态保持为配置,使得编译器难以有效地优化和调度指令。

发明内容

本说明书描述了涉及例如在编译时改进FIFO指令的顺序以减少执行机器学习和其他计算时的延迟的技术。

通常,本说明书中描述的主题的一个创新方面可以体现在一种方法中,该方法包括接收表示要由包括硬件处理器的处理单元执行的程序的代码的数据。该方法包括对于一个或多个硬件处理器中的每一个:在表示程序的代码的数据中标识用于由硬件处理器执行的独立的先进先出(FIFO)指令组的顺序;对于由硬件处理器执行的每个独立的FIFO指令组,确定路径长度度量,路径长度度量表示从独立的FIFO指令组到达程序的末尾将花费多长时间;以及至少基于用于由硬件处理器执行的每个独立的FIFO指令组的路径长度度量,生成用于由硬件处理器执行的独立的FIFO指令组的新顺序。至少基于用于一个或多个硬件处理器的独立的FIFO指令组的每个新顺序来生成用于程序的更新代码。基于用于程序的更新代码,生成用于由硬件处理器执行的输出代码。将输出代码提供给硬件处理器。该方面和其他方面的其他实施方式包括被配置成执行在计算机存储设备上编码的方法的动作的相应系统、方法和计算机程序。能够借助于安装在系统上的软件、固件、硬件或它们的组合来如此配置一个或多个计算机的系统,这些软件、固件、硬件或它们的组合在操作中使系统执行动作。能够借助于当由数据处理装置执行时使该装置执行动作的指令来如此配置一个或多个计算机程序。

这些和其他实施方式可以各自可选地包括以下特征中的一个或多个。在一些方面,表示程序的代码的数据包括程序的源代码的编译器中间表示。在一些方面,输出代码包括可由一个或多个硬件处理器执行的编译机器代码。

一些方面包括基于表示程序的代码的数据,生成表示用于程序的指令序列的图。对给定硬件处理器生成独立的FIFO指令组的新顺序可以包括在图中重新排序独立的FIFO指令组以生成更新图。至少基于用于一个或多个硬件处理器的独立FIFO指令组的每个新顺序来生成用于程序的更新代码可以包括基于更新图来生成更新指令序列。

在一些方面,至少基于用于一个或多个硬件处理器的独立FIFO指令组的每个新顺序来生成用于程序的更新代码可以包括,在更新图中标识未被标识为FIFO指令的指令;对于所标识的指令中的一个或多个:至少基于独立的FIFO指令组与更新图中的已标识的指令之间的路径长度来选择独立的FIFO指令组;以及在更新代码中调度已标识的指令以及所选择的长延迟组。

在一些方面,多个硬件处理器执行独立的FIFO指令组。一些方面可以包括对于多个硬件处理器中的至少一个,基于独立的FIFO指令组是否在程序的关键路径上,确定由至少一个硬件处理器执行的独立的FIFO指令集的顺序。一些方面可以包括确定第一硬件处理器包括多个独立的FIFO指令组;以及确定第二硬件处理器的独立FIFO指令组是接收由第一硬件处理器的多个独立的FIFO指令组中的一个输出的数据的指令。在一些方面中,生成用于由第一硬件处理器执行的独立的FIFO指令组的新顺序可以包括响应于确定多个硬件处理器中的第二硬件处理器的独立的FIFO指令组是接收由第一硬件处理器的多个独立的FIFO指令组中的一个输出的数据的指令,移动第一硬件处理器的一个独立的FIFO指令组以在第一硬件处理器的一个或多个其他独立的FIFO指令组之前执行。

在一些方面中,每个独立的FIFO指令组包括用于向硬件处理器提供输入数据的一或多个输入指令以及用于基于输入数据从硬件处理器输出数据的一或多个输出指令。在一些方面中,处理单元的特定硬件处理器是使用多种不同配置执行指令的可配置硬件处理器。一些方面可以包括在表示程序的代码的数据中标识将由特定硬件处理器使用用于特定硬件处理器的相同配置执行的FIFO指令集;以及在用于应用的更新代码中确定用于FIFO指令集的新顺序,使得在没有需要特定硬件处理器的不同配置的任何居间FIFO指令的情况下,按序列执行FIFO指令集。

在一些方面中,一个或多个硬件处理器包括多个处理器。一些方面可以包括对于多个硬件处理器中的每一个,确定表示硬件处理器将花费多长时间来完成用于硬件处理器的所有FIFO指令的性能度量;基于用于多个硬件处理器中的每一个的性能度量来确定多个硬件处理器的评估顺序;以及按照所确定的评估顺序,一次确定一个用于多个硬件处理器中的每一个的独立的FIFO指令组的新顺序。

本说明书中描述的主题可以在特定实施例中实现,以便实现以下优点中的一个或多个。通过生成由硬件处理器使用以输入和输出数据的FIFO指令的改进顺序,可以减少执行程序时的延迟。非FIFO指令可以与FIFO指令(例如,与最接近的FIFO指令)一起分组,以进一步改善来减少执行程序时的延迟。例如,通过将为FIFO指令提供数据以加载到硬件处理器中的另一指令与FIFO指令分组,可以将指令一起调度使得FIFO指令必须等待这类数据的时间量减少。通过减少执行程序时的延迟,可以更快且更有效地完成复杂的工作负荷,例如深度神经网络工作负荷。因此,通过在编译时间利用所描述的技术,相对于在相同硬件处理器上执行的常规编译程序,可以在运行时以减少的延迟执行给定程序。此外,通过在生成FIFO指令的改进顺序期间考虑特定硬件处理器的特性,FIFO指令的执行可以被定制/适应于执行FIFO指令的系统中存在的特定硬件处理器。

在以下附图和描述中阐述了本说明书中描述的主题的一个或多个实施方式的细节。根据说明书、附图和权利要求书,本主题的其他潜在特征、方面和优点将变得显而易见。

附图说明

图1是程序处理系统修改程序并且使用所修改的程序执行计算的示例性环境的框图。

图2描绘了程序的指令的有向图和程序的指令的更新图。

图3是图示用于修改程序的示例性过程的流程图。

在各个附图中,相似的附图标记和名称指示相似的元素。

具体实施方式

通常,本说明书中描述的主题涉及调度用于硬件处理器的硬件FIFO指令以减少由处理器执行的程序的总延迟。处理单元可以包括多个硬件处理器,包括高效地执行复杂计算的长延迟、高吞吐量硬件处理器。例如,长延迟硬件处理器可以被配置为使用专用硬件来执行机器学习模型的矩阵乘法计算或其他复杂计算(例如,数字信号处理、视频编码、解码等),并且这样的计算可能花费多个处理器循环来计算输出。

这些长延迟硬件处理器可以经由用于将输入数据发送到硬件处理器的压入指令以及用于从硬件处理器提取结果数据以提供给另一硬件处理器或硬件处理器的另一FIFO的弹出指令来编程。压入和弹出通常以FIFO顺序发生,使得硬件处理器可以被建模为FIFO队列。在一些情况下,硬件处理器还可以维持额外的状态以表示配置,其可以经由附加指令而变化。例如,硬件处理器可以具有多种配置并且硬件处理器可以维护指定当前配置的统计信息。

一些硬件处理器基于单个输入产生结果。在该示例中,来自FIFO的一个弹出(例如,输出)对应于到FIFO的一个压入(例如,输入)。其他硬件处理器需要多个输入以生成一个或多个结果。在该示例中,来自FIFO的一个或多个弹出的组对应于到FIFO的一组压入。例如,执行矩阵乘法运算的硬件处理器可以包括向硬件处理器提供矩阵的值的多个压入,以及将计算出的值输出到另一硬件处理器或FIFO的一个或多个弹出。这样的一组相关压入和基于压入的相应弹出表示由硬件处理器执行的不可分割的计算单元。来自对应于到同一FIFO的一个或多个压入的来自FIFO的一个或多个弹出的每个组(例如来自输出基于到同一FIFO的一个或多个压入的一个或多个结果的FIFO的一个或多个弹出的每个组)是独立的FIFO指令组。可以重新排序不同的独立的FIFO指令组以减少延迟。在一些实施方式中,独立组内的FIFO指令不被重新排序。

可以在有向图中建模指令之间的依赖性。指令是图中的顶点或节点,并且依赖性是顶点或节点之间的边。如果在后续指令开始之前后续指令必须等待在前指令完成,则该图可以包括从在前指令到后续指令的有向边。边的长度可以表示指令之间的等待时间。该图可以编码指令中的所有类型的依赖性,包括生产者到消费者、存储器先写后读以及FIFO排序约束。

存在多种类型的FIFO排序依赖性,包括控制依赖性和数据依赖性。控制依赖性由硬件处理器的FIFO处理顺序施加。从第一指令到第二指令的控制依赖性边表示第二指令在第一指令之后执行,并且在第二指令开始之前必须等待第一指令完成。从第一指令到第二指令的数据依赖性表示第二指令使用由第一指令产生的数据。例如,数据依赖性可以表示操作结果的弹出必须等待另一指令,例如,运算的输入的压入。

控制依赖性的示例是FIFO队列的后续压入(或弹出),其必须等待同一FIFO队列的在前压入或弹出。在该示例中,指令之间的等待时间基于硬件处理器的吞吐量。控制依赖性的另一示例是当FIFO队列没有足够的空间用于新的压入时。新压入必须等待弹出,这将在FIFO队列中为新压入腾出足够的空间。数据依赖性的示例是,在独立的FIFO指令组中,结果弹出必须等待输入压入。在该示例中,硬件处理器使用由输入压入接收的数据来执行计算以确定由输出弹出输出的数据。该示例中的等待时间由硬件处理器的延迟确定。这些依赖性中的每一个都限制了如何确定或修改FIFO指令的顺序。

如果FIFO指令的原始顺序不是最优的,则FIFO控制依赖性可以防止硬件处理器的最优指令调度。例如,考虑两个硬件FIFO(例如,被建模为FIFO队列的硬件处理器),FIFO1和FIFO2。还考虑到FIFO1有10次独立的压入,并且来自FIFO1的最后结果被用作对FIFO2的第一次压入的输入。FIFO控制依赖性要求在调度第一次FIFO1压入之前,需要完成所有10个FIFO1运算。为了解决该问题,可以例如在确定最终控制依赖性之前,确定FIFO指令的新顺序。在该示例中,FIFO指令的新顺序可以将FIFO1的前一最后结果作为FIFO1的第一结果,使得FIFO2等待该结果的延迟减少。本文描述的技术使用性能度量、关键路径试探法和其他考虑来调度独立的FIFO指令组和其他相关指令,使得程序的执行延迟减少。

图1是程序处理系统130修改程序并使用所修改的程序执行计算的示例性环境100的框图。机器学习处理系统130可以通过数据通信网络120(例如,局域网(LAN)、广域网(WAN)、互联网、移动网络或其组合)从用户设备110接收程序112。

程序112可以包括工作负荷,诸如机器学习工作负荷、数字信号处理工作负荷、视频编码/解码工作负荷或其他适当的工作负荷。例如,每个程序112可以定义有向计算图或者是以有向计算图的形式,该有向计算图指定用于工作负荷的运算符。每个运算符表示将由机器学习处理系统130的处理单元160执行的运算,例如数值运算。例如,运算符可以表示数学运算(例如,加法、乘法、最大值、最小值等)、张量运算(例如,整形、转置等)、数据复制运算和/或其他适当的运算。

程序处理系统130包括编译器140,其将程序112编译成用于处理单元160的机器指令。处理单元160可以包括一个或多个硬件处理器,其执行机器指令以执行由程序112和/或程序的修改版本定义的计算,如下所述。在该示例中,处理单元160包括硬件处理器164的脉动阵列162。也可以使用处理器的其他适当布置。例如,处理单元160可以是图形处理单元(GPU)或专用集成电路,例如机器学习加速器专用集成电路,诸如张量处理单元(TPU)。

编译器140还可以修改程序112以改进处理单元160在执行机器指令时的性能。例如,编译器140可以基于将执行程序112的计算的处理单元160的特性来修改程序112。编译器140还可以调整或确定指令的调度以改进处理单元160在执行程序时的性能,例如,以减少在运行时执行程序的延迟。

具体地,编译器140包括FIFO调度器142,其可以确定是否可以在处理器164的指令调度中移动一个或多个FIFO指令。如果是,则FIFO调度器142可以确定FIFO指令的新顺序。FIFO调度器142还可以例如基于FIFO指令的新顺序来确定其他非FIFO指令的新顺序。

在一些实施方式中,编译器140生成或接收定义用于程序112的指令的有向图的数据。例如,编译器140可以接收程序112并且将程序112转换为编译器中间表示。编译器中间表示可以是以静态单个分配形式,例如,在寄存器分配之前。编译器140可以基于编译器中间表示中的程序的指令集来生成该图。如上所述,指令是该图中的顶点或节点,并且依赖性是顶点或节点之间的边。该图可以包括用于FIFO指令和非FIFO指令的节点,诸如运算、为未被建模为FIFO队列的硬件处理器传输数据、存储数据等。

FIFO调度器142可以分析该图并确定独立的FIFO指令组的顺序。如上所述,独立的FIFO指令组是来自FIFO的一个或多个弹出的组,其对应于对同一FIFO的一个或多个压入。由于处理单元160可以包括多个硬件FIFO,FIFO调度器142可以确定每个硬件FIFO的FIFO指令的顺序,例如,一次一个。

FIFO调度器142可以移除该图中的独立的FIFO指令组之间的控制依赖性。FIFO调度器142可以使独立的FIFO指令组内的控制依赖性保持原样,因为这些指令可以不被FIFO调度器142重新排序。然后,FIFO调度器142可以确定用于每个硬件FIFO的独立FIFO指令组的顺序。

在一些实施方式中,FIFO调度器142评估指令,并且一次一个地(例如,以特定顺序)确定用于每个硬件FIFO的独立的FIFO指令组的顺序。例如,FIFO调度器142可以基于硬件FIFO在程序112中的性能优势程度来依次确定用于每个硬件FIFO的独立的FIFO指令组的顺序。

为了确定评估硬件FIFO的顺序,FIFO调度器142可以确定程序112中的每个硬件FIFO的性能度量。硬件FIFO的性能度量可以表示由硬件FIFO执行的运算在程序112中的性能优势程度。在一些实施方式中,硬件FIFO的性能度量基于例如与执行硬件FIFO的所有压入和弹出花费多长时间成比例。例如,FIFO的性能度量可以基于执行所有压入和弹出的估计或实际持续时间(例如,与之成比例),其可以基于硬件FIFO的吞吐量、硬件FIFO对数据执行的计算和/或硬件FIFO对其执行计算的数据量。由于弹出用于输出由硬件FIFO使用由相应的压入输入的数据执行的计算的数据,因此弹出必须等待直到计算完成为止。因此,硬件FIFO的性能度量可以基于执行计算花费多长时间,例如,基于硬件FIFO的吞吐量和计算。

FIFO调度器142可以基于性能度量,按从性能最占优势的硬件FIFO(例如,最长完成压入和弹出)到性能最不占优势的FIFO(例如,最短完成压入和弹出)的顺序来评估每个硬件FIFO。硬件FIFO的独立FIFO指令组的顺序成为对其他硬件FIFO的约束。由于性能越占优势的硬件FIFO可以对程序112的整体性能具有最大的影响,因此对性能优势的硬件FIFO施加的约束应当比对性能最不占优势的硬件FIFO施加的约束更少。基于性能度量以该顺序确定每个硬件FIFO的独立FIFO指令组的顺序可以导致相对于其他评估顺序,对于程序112具有减少的延迟的更好的指令调度。

为了确定给定硬件FIFO的独立FIFO指令组的顺序,FIFO调度器142可以确定硬件FIFO的每个独立FIFO指令组的路径长度度量。独立的FIFO指令组的路径长度度量可以表示从独立的FIFO指令组到达程序112的末尾将花费多长时间。例如,路径长度度量可以基于从独立的FIFO指令组到程序112的末尾(例如,到表示程序112的指令的图的末尾)的最长路径的长度。每个路径的长度可以基于沿着路径的边的长度,因为边表示指令之间的等待时间。每个路径的长度还可以基于沿着每个路径的指令、将执行指令的(多个)硬件处理器的延迟和/或(多个)硬件处理器的吞吐量,因为这些参数影响遍历到程序112的末尾的路径要花费多长时间。例如,每个路径的长度可以基于沿着路径的边的聚合长度以及基于参数在路径执行每个指令将花费多长时间(例如,估计的持续时间)(例如,与沿着路径的边的聚合长度以及基于参数在路径执行每个指令将花费多长时间成比例)。

FIFO调度器142可以基于为每个独立的FIFO指令组确定的路径长度对硬件FIFO的独立的FIFO指令组进行分类。FIFO调度器142可以基于所确定的路径长度来确定硬件FIFO的独立FIFO指令组的顺序。例如,FIFO调度器142可以将硬件FIFO的独立FIFO指令组从最长路径长度到最短路径长度排序。也就是说,FIFO调度器142可以确定顺序,使得具有最长确定路径长度的独立FIFO指令组(例如,最短路径长度是独立组中最长的独立组)对于硬件FIFO是第一,具有第二最长路径长度的独立组是第二,等等。

然而,这种排序必须遵守硬件FIFO的控制依赖性和硬件FIFO的独立FIFO指令组之间的任何数据依赖性。例如,如果具有最长路径长度的独立FIFO指令组将由不同的独立FIFO指令组输出的数据压入硬件FIFO中,则可以在具有最长路径长度的独立FIFO指令组之前调度不同的独立FIFO指令组。

在确定用于硬件FIFO的独立FIFO指令组的顺序之后,FIFO调度器142可以基于所确定的顺序将控制依赖性添加到该图。然后,FIFO调度器142可以移动到下一个性能优势的硬件FIFO,并且确定该硬件FIFO的硬件FIFO指令的顺序。FIFO调度器142可以继续该过程,直到已经评估了所有硬件FIFO为止,并且如果适当,已经为硬件FIFO确定了独立的FIFO指令组的新顺序。

在一些实施方式中,FIFO调度器142还可以在确定独立的FIFO指令组的顺序时使用调度启发法,诸如该图上的关键路径以及硬件FIFO之间的相互依赖性。例如,FIFO调度器142可以以缩短该图的关键路径的方式对独立的FIFO指令组进行排序,这减少了程序112的总延迟。

在一些实施方式中,FIFO调度器142评估该图以标识在该图的关键路径上的独立的FIFO指令组。该图的关键路径可以是从该图的开始到该图的末尾的最长路径。用于确定关键路径的路径的长度可以基于遍历路径要花费多长时间,例如,使用边的长度、路径上的硬件FIFOs的延迟、路径上的硬件FIFOs的吞吐量和/或其他适当的数据,如上所述。

FIFO调度器142可以评估关键路径上的每个独立的FIFO指令组,以确定重新排序其他独立的FIFO指令组是否将缩短关键路径。如果是,则可以重新排序不在关键路径上的FIFO指令的顺序以缩短关键路径。

例如,第一硬件FIFO(FIFO1)可以具有多个独立的FIFO指令组,每个FIFO指令组包括一个或多个压入和一个或多个弹出。第二硬件FIFO(FIFO2)可以具有独立的FIFO指令组,其在程序112的关键路径上并且具有由FIFO1的一个弹出输出的结果的压入。如果FIFO1的该弹出不是FIFO1的FIFO指令的顺序的第一个,则FIFO调度器142可以确定FIFO1的FIFO指令的新顺序,使得FIFO2所需的数据的该弹出是该新顺序的第一个。这减少了关键路径上的FIFO2必须等待所需数据进行其计算的时间量,这减少了程序112的总延迟。

如果FIFO1的其它独立的FIFO指令组输出被输入到程序的关键路径上的其它FIFO的数据,则FIFO调度器142可以基于其它FIFO何时需要数据和/或其它FIFO在程序112中的性能优势程度来确定这些指令的顺序。例如,如果另一个FIFO比FIFO2更具性能优势,并且需要来自FIFO1的不同的独立FIFO指令组的输出,则对于FIFO1该不同的独立组可以是顺序中的第一个。

在一些实施方式中,FIFO调度器142可以省略或组合硬件处理器164上的一些FIFO运算以提高效率。例如,当硬件处理器164可配置时,改变硬件处理器164的配置需要附加指令。这些附加指令的执行在处理要求和/或延迟方面可能很昂贵。在一些情况下,硬件处理器164的配置可以基于将由硬件处理器164执行的运算和/或使用压入指令输入到硬件处理器164的数据来周期性地在配置之间切换。

如果共享相同配置的多个FIFO运算可以共置于该图中或由该图生成的调度中,则可以降低切换硬件处理器164的配置的频率,从而导致更快和更有效的计算。FIFO调度器142可以标识硬件处理器164的FIFO指令,在执行程序期间将改变硬件处理器164的配置。

对于每个这样的硬件处理器164,FIFO调度器142可以标识可以被分组在一起的候选FIFO指令。例如,对于每个配置,FIFO调度器142可以标识硬件处理器164的每个FIFO指令,其需要硬件处理器164具有该配置。然后,FIFO调度器142可以确定将具有相同配置的候选FIFO指令(或具有相同配置的FIFO指令的至少一部分)分组成组是否将导致程序112的延迟减少。例如,FIFO调度器142可以确定调整该图中的一个或多个FIFO指令的位置以对具有相同配置的FIFO指令进行分组是否将对该图的关键路径产生负面影响,例如,分组是否将延长关键路径的长度。如果是,则FIFO调度器142可以确定不对FIFO指令进行分组。如果不是,则FIFO调度器142可以将该图中的FIFO指令分组在一起,使得在不必切换硬件处理器164的配置的情况下,执行组中的所有FIFO指令。

共置FIFO指令的另一示例是用于硬件处理器,该硬件处理器处理数据大小比其输入的数据大小要大的数据。例如,硬件处理器164可以被配置为处理32位数据,但是输入数据仅是16位数据。可以组合16位数据的两个输入,并且硬件处理器164可以处理组合的数据。然而,在该示例中,对数据进行组合也可能对该图的关键路径产生负面影响。

FIFO调度器142可以标识用于硬件处理器164的FIFO指令,其中硬件处理器164处理具有比由FIFO指令输入到硬件处理器164的数据更大的数据大小的数据。然后,FIFO调度器142可以针对每个这样的硬件处理器164,确定是否添加指令以组合数据和/或是否使FIFO指令等待一些数据被组合将负面地影响该图的关键路径(例如,通过扩展关键路径的长度)。如果是,则FIFO调度器142可以确定不组合用于硬件处理器164的数据。如果不是,则FIFO调度器142可以调整该图以将输入组合到硬件处理器164,例如,通过将组合来自输入源的输入和边的数据的指令添加到用于组合该数据的指令。

当确定独立的FIFO指令组是否应当与其它独立的FIFO指令组共置或分组时,FIFO调度器142可以搜索潜在候选(例如,具有与硬件处理器处理的相同配置或更小数据大小的候选FIFO指令)。然后,FIFO调度器142可以确定在独立的FIFO指令组到该图的末尾的关键路径将仍然包括独立的FIFO指令组周围的控制依赖性边的位置中共置或组合。也就是说,在程序112受FIFO硬件处理器的控制依赖性约束的情况下,进行这种改进。

在确定FIFO指令的顺序之后,FIFO调度器142可以生成将由编译器140编译并由硬件处理器164执行的指令的调度,例如线性调度。如上所述,除了FIFO指令之外,该图还可以包括非FIFO指令。非FIFO指令通常具有比FIFO指令更短的延迟,并且通常不具有类似的排序约束。因此,关键路径试探法对于调度非FIFO指令不那么有用。

FIFO调度器142可以将非FIFO指令与FIFO指令进行聚类。在一些实施方式中,FIFO调度器142将每个非FIFO指令与该图中最接近非FIFO指令的FIFO指令进行聚类。如上所述,该图中的边的长度可以表示指令之间的等待时间。FIFO调度器142可以评估非FIFO指令与一个或多个FIFO指令(例如,连接到非FIFO指令的一个或多个FIFO指令)之间的边的长度,以确定到非FIFO指令最接近的FIFO指令。例如,如果在非FIFO指令与FIFO指令之间存在居间指令,则该图可以包括非FIFO指令和FIFO指令之间的多个边。在这种情况下,FIFO调度器142可以聚合边的长度(或由边表示的等待时间)以确定非FIFO指令之间的总长度。然后,FIFO调度器142可以将非FIFO指令与独立的FIFO指令组聚类,该独立的FIFO指令组包括具有距非FIFO指令最短长度的FIFO指令。FIFO调度器142可以对每个非FIFO指令这样做,直到所有非FIFO指令都在具有FIFO指令的集群中为止。

FIFO调度器142可以使用关键路径试探法对指令组进行分类。例如,对于指令的每一集群,FIFO调度可以确定集群的FIFO指令到程序末尾的关键路径的长度。该关键路径可以表示从集群的FIFO指令到程序末尾的最长路径。然后,FIFO调度器142可以基于关键路径的长度来调度指令的集群。例如,FIFO调度器142可以按照从最长长度到最短长度的顺序来调度指令的集群。

当程序涉及多个硬件FIFO并且它们之间存在数据依赖性时,如果不同FIFO的利用率不同,则该方法会导致寄存器的较大的有效范围。例如,如果从FIFO1弹出的每三个结果中有一个被压入FIFO2,则压入FIFO2的关键路径比从FIFO1弹出的关键路径短得多。因此,在基于关键路径的长度进行分类之后,弹出的有效范围可能非常长。在这种情况下,当不增加该图的关键路径时,FIFO调度器142可以使数据消耗FIFO指令移动到更靠近相应的数据产生FIFO指令。例如,FIFO调度器142可以将数据产生压入移动到该图中、可以移动数据产生压入而不增加图的关键路径长度的最早位置。

FIFO调度器142还可以使用一种或多种调度技术来调度每个集群内的指令。例如,FIFO调度器142可以使用具有基于硬件处理器164的硬件架构的图形拓扑和特性确定的优先级的列表调度技术。

编译器140可以基于指令的调度来完成编译程序,并且将编译程序150提供给处理单元160。处理单元160的硬件处理器164可以执行编译程序150。例如,硬件处理器164可以根据如由编译程序150所定义的所确定的调度的顺序来分别执行FIFO指令和非FIFO指令。

图2描绘了程序的指令的有向图205和程序的指令的更新图235。有向图205可以是表示程序的指令之间的依赖性的图的一部分。在该示例中,图205包括第一硬件FIFO(FIFO1)的独立的FIFO指令组A1-A4。独立的FIFO指令组A1-A4处于基于程序的第一版本(例如,从用户设备接收的程序的版本)的第一顺序210。图205还包括第一硬件FIFO(FIFO1)的独立的FIFO指令组B1-B4。基于程序的第一版本(例如,从用户设备接收的程序的版本),独立的FIFO指令组B1-B4也处于第一顺序220。

FIFO调度器142可以基于程序中FIFO1和FIFO2的性能优势程度来确定每个FIFO的FIFO指令的新顺序,例如,一次一个。在该示例中,假设FIFO2比FIFO1更具性能优势。

每个FIFO的独立FIFO指令组可以基于每个独立FIFO指令组到程序末尾的最长路径的长度来排序。在该示例中,每一独立FIFO指令组具有基于独立FIFO指令组的最长路径的相关联的估计持续时间。例如,独立的FIFO指令组A1具有2.1毫秒(ms)的估计持续时间。如上所述,持续时间可以是遍历路径的估计持续时间。

FIFO调度器142可以基于路径长度或估计持续时间来确定独立的FIFO指令组B1-B4的新顺序225。在该示例中,独立的FIFO指令组B1-B4的新顺序225是从最长持续时间到最短持续时间。由于独立的FIFO指令组B4具有最长的持续时间(4.9ms),因此该独立的FIFO指令组B4在更新图235的新顺序215中是第一个。

FIFO调度器142还可以基于路径长度或估计持续时间来确定独立的FIFO指令组A1-A4的新顺序215。例如,FIFO调度器142可以基于估计持续时间来确定新顺序215,类似于独立的指令组B1-B4的新顺序225。FIFO调度器142还可以考虑关键路径试探法和FIFO之间的相互依赖性。在该示例中,图205包括独立的FIFO指令组A4和B1之间的数据依赖性,如由边212所示。因此,B1必须等待输出数据从A4弹出,以便将数据压入其硬件处理器中。为了减少该等待时间,FIFO调度器142可以将A4首先置于新的顺序中,并且基于它们的估计持续时间对其他独立的FIFO指令组A1-A3进行排序。在该示例中,新顺序215首先具有A4,然后是A3、A1和A2

图3是示出用于修改程序的示例性过程300的流程图。过程300的操作可以由包括一个或多个数据处理装置的系统执行。例如,过程300的操作可以由图1的程序处理系统130执行。

系统接收要由包括硬件处理器的处理单元执行的程序(310)。程序可以包括一个或多个工作负荷,诸如机器学习工作负荷、数字信号处理工作负荷、视频编码/解码工作负荷或其他适当的工作负荷。例如,程序可以定义有向计算图或以有向计算图的形式,该有向计算图指定工作负荷的运算符。

处理单元可以包括可以被建模为FIFO队列的一个或多个长延迟、高吞吐量硬件处理器。处理单元还可以包括未被建模为FIFO队列的其他类型的较低延迟硬件处理器。

系统对于一个或多个硬件处理器中的每一个确定将由硬件处理器执行的独立FIFO指令组的新顺序(320)。例如,系统可以基于处理单元的硬件处理器来接收或确定程序的源代码的编译器中间表示。程序的该编译器中间表示可以包括将由硬件处理器执行的指令的有向图。该图还可以针对每个指令指示将执行该指令的硬件处理器。

系统可以将在该图中被建模为FIFO队列的每个硬件处理器标识为一个或多个硬件处理器。这些处理器在本文档中也被称为硬件FIFO。对于每个硬件FIFO,该图可以包括一个或多个独立的FIFO指令组。对于包括多个独立组的硬件FIFO,系统可以评估每个硬件FIFO的独立指令组,以使用硬件FIFO的独立FIFO指令组的新顺序来确定是否将缩短程序的延迟。如果是,则系统可以确定硬件FIFO的新顺序。系统可以使用组成操作321-324来确定一个或多个硬件FIFO中的每一个的FIFO指令的新顺序。如果一个或多个硬件处理器包括多个硬件处理器,则系统可以基于硬件处理器在程序中的性能优势程度来按顺序评估每个硬件处理器,如上所述。

系统在表示程序的代码的数据中标识用于由硬件处理器执行的独立FIFO指令组的顺序(321)。然后,系统可以确定每个所标识的独立FIFO指令组的路径长度度量(322)。

独立的FIFO指令组的路径长度度量可以表示从独立的FIFO指令组到达程序末尾将花费多长时间。例如,路径长度度量可以基于从独立的FIFO指令组到程序末尾的最长路径的长度。如上所述,每个路径的长度可以基于沿该路径的边的长度、沿着每个路径的指令、将执行指令的硬件处理器的延迟和/或硬件处理器的吞吐量。例如,每个路径的长度可以基于沿该路径的边的聚合长度以及基于参数在路径上执行每个指令将花费多长时间(例如,估计的持续时间)(例如,与基于沿该路径的边的聚合长度以及基于参数在路径上执行每个指令将花费多长时间成比例)。

系统基于路径长度度量生成独立的FIFO指令组的新顺序(323)。例如,系统可以生成新顺序,使得独立的FIFO指令组从具有表示最长路径长度的路径长度度量的独立组到具有表示最长路径长度的路径长度度量的独立组被排序。如上所述,当确定硬件FIFO的独立FIFO指令组的顺序时,系统还可以考虑硬件FIFO之间的其他关键路径试探法和相互依赖性。系统可以基于所确定的顺序来更新图,并且基于新顺序在FIFO指令之间添加控制依赖性。

系统确定是否存在为其评估独立FIFO指令组的顺序的附加硬件处理器(324)。如果是,则系统返回到操作321以评估另一硬件处理器。如果不是,则系统生成指令的调度。指令调度可以包括线性的指令调度,所述指令包括FIFO指令及非FIFO指令。

系统可以基于从每个独立的FIFO指令组到更新图的末尾的关键路径的长度来对调度中的独立的FIFO指令组进行排序。例如,调度中的独立的FIFO指令组的顺序可以是从具有最长关键路径的独立组到具有最短关键路径的独立组。对于非FIFO指令,系统可以将非FIFO指令与图中最接近的独立FIFO指令组进行分组,如上所述。

系统生成用于该程序的更新代码(340)。系统可以基于指令的调度来生成更新代码。然后,系统可以基于更新代码生成用于由硬件处理器执行的输出代码(350)。例如,系统可以完成将代码编译成用于每个硬件处理器的机器指令。

然后,系统可以将输出代码提供给每个硬件处理器(360)。当处理单元正在执行程序时,硬件处理器可以执行指令。

本说明书中描述的主题和功能操作的实施例可以用数字电子电路、用有形地体现的计算机软件或固件、用包括本说明书中公开的结构及其结构等同物的计算机硬件或者用它们中的一种或多种的组合来实现。本说明书中描述的主题的实施例可以被实现为一个或多个计算机程序,即在有形非暂时性程序载体上编码以供由数据处理装置执行或控制数据处理装置的操作的计算机程序指令的一个或多个模块。替代地或附加地,可以将程序指令编码在人工生成的传播信号(例如机器生成的电信号、光信号或电磁信号)上,该信号被生成来对信息进行编码以传输到合适的接收器装置以供由数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储设备或它们中的一种或多种的组合。

本说明书中描述的过程和逻辑流程可以通过执行一个或多个计算机程序的一个或多个可编程计算机执行以通过对输入数据进行操作并生成输出来执行功能。过程和逻辑流程也可以由专用逻辑电路执行,并且装置也可以实现为专用逻辑电路,该专用逻辑电路例如为FPGA(现场可编程门阵列)、ASIC(专用集成电路)或GPGPU(通用图形处理单元)。

作为示例,适合于执行计算机程序的计算机包括可以基于通用微处理器或专用微处理器或两者或任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的必要元件是用于执行或实行指令的中央处理单元以及用于存储指令和数据的一个或多个存储设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储器设备,例如,磁盘、磁光盘或光盘,或者可操作地耦合以从该一个或多个大容量存储器设备接收数据或者将数据传送到该一个或多个大容量存储器设备,或者两者。然而,计算机不必具有此类设备。此外,计算机能够被嵌入在另一设备,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏机、全球定位系统(GPS)接收器或便携式存储设备,例如通用串行总线(USB)闪存驱动器,仅举几例。

适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,作为示例包括半导体存储器设备,例如EPROM、EEPROM和闪存;磁盘,例如内部硬盘或可移动盘;磁光盘;以及CD ROM和DVD-ROM盘。处理器和存储器可以由专用逻辑电路补充,或者并入在专用逻辑电路中。

虽然本说明书包含许多具体实施方式细节,但是这些不应当被解释为对任何发明的或可能要求保护的范围的限制,而是被解释为对可能特定于具体发明的特定实施例的特征的描述。也可以在单个实施例中以组合方式实现在本说明书中在单独的实施例的上下文中描述的某些特征。相反地,还可以单独地或以任何合适的子组合在多个实施例中实现在单个实施例的上下文中描述的各种特征。此外,尽管特征可能在上面被描述为以某些组合起作用并且甚至最初如此要求保护,但是在一些情况下可以从该组合中除去来自要求保护的组合的一个或多个特征,并且所要求保护的组合可以针对子组合或子组合的变体。

类似地,虽然在附图中以特定顺序描绘了操作,但是这不应当被理解为要求以所示的特定顺序或以序列顺序执行此类操作,或者执行所有图示的操作以实现所希望的结果。在某些情况下,多任务处理和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应当被理解为在所有实施例中要求这种分离,并且应当理解到,所描述的程序组件和系统通常可以被集成在单个软件产品中或者打包到多个软件产品中。

已经描述了主题的特定实施例。其它实施例在以下权利要求的范围内。例如,权利要求中记载的动作可以以不同的顺序执行并且仍然实现所希望的结果。作为一个示例,附图中描绘的过程不一定要求所示的特定顺序或序列顺序来实现所希望的结果。在某些实施方式中,多任务处理和并行处理可能是有利的。

19页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:以从右向左的方向移动数据的指令

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!