CN114026543A - 传播延迟降低 - Google Patents
传播延迟降低 Download PDFInfo
- Publication number
- CN114026543A CN114026543A CN202080047574.8A CN202080047574A CN114026543A CN 114026543 A CN114026543 A CN 114026543A CN 202080047574 A CN202080047574 A CN 202080047574A CN 114026543 A CN114026543 A CN 114026543A
- Authority
- CN
- China
- Prior art keywords
- layer
- matrix
- tile
- tiles
- blocks
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/088—Non-supervised learning, e.g. competitive learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Neurology (AREA)
- Databases & Information Systems (AREA)
- Algebra (AREA)
- Multi Processors (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Magnetic Resonance Imaging Apparatus (AREA)
- Measuring Pulse, Heart Rate, Blood Pressure Or Blood Flow (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
用于调度操作以降低加速器的瓦片之间的传播延迟的方法、系统和装置,包括编码在计算机存储介质上的计算机程序。其中一种方法包括:接收为要由加速器执行的程序的第一层生成调度的请求,该加速器被配置为至少部分并行地执行矩阵操作,其中该程序定义了包括第一层的多个层,该程序的每一层定义了要使用相应的值矩阵来执行的矩阵操作。根据初始分配方向来分配调度的多个初始块。以特定周期开始切换分配方向,使得在所选择的特定周期之后处理的块沿着第一矩阵的不同的第二维度被处理。然后根据切换后的分配方向来分配所有剩余的未分配块。
Description
背景技术
本说明书涉及机器学习加速器。
机器学习加速器是一种被设计用于执行高度并行的同步操作的专用集成电路(ASIC)。并行性是通过集成许多可以并发执行的不同独立处理元件来实现的。
这种设备非常适合于加速通过神经网络进行的推理。神经网络是采用多层操作从一个或多个输入中预测一个或多个输出的机器学习模型。神经网络通常包括位于输入层与输出层之间的一个或多个隐藏层。每一层的输出用作网络中另一层(例如,下一隐藏层或输出层)的输入。
通常,每一层所需的计算操作可以通过执行矩阵乘法来实现。通常,其中一个矩阵是向量,例如,矩阵乘向量乘法。机器学习加速器因此允许矩阵乘法的乘法和加法以高并行性执行。
然而,由于神经网络各层之间的依赖性,在这些计算机制中存在固有的延迟。延迟的产生是因为一层的输出变成了下一层的输入。因此,神经网络的各层通常必须顺序地执行,而不是并行地执行。换句话说,通常一层的最后一个计算操作必须在下一层的第一个计算开始之前完成。
两种类型的延迟通常发生在使用分配给不同的相应层的多个瓦片(tile)的机器学习加速器中。第一,计算延迟是由于芯片组件在实际可用于执行计算时等待输入数据而发生的。第二,传播延迟是由于需要将由一个瓦片计算的一层的输出传播到由第二个瓦片计算的另一层的输入而发生的。可以通过制造具有更多计算元件的更大设备来改善计算延迟。然而,传播延迟往往随着设备变大而增加,因为数据需要在瓦片之间行进的距离也变大。
发明内容
本说明书描述了系统如何为机器学习加速器生成降低机器学习加速器中的瓦片之间的计算延迟以及传播延迟的调度。
可以实施本说明书中描述的主题的特定实施例,以便实现一个或多个以下优点。机器学习加速器的计算延迟和传播延迟可以通过修改操作的调度来降低。这导致性能的提高,而不需要昂贵或复杂的硬件更改。当仅存在一个瓦片时,下面描述的调度技术的性能提高也提供了计算优势,在这种情况下,尽管存在固有的计算依赖性,但是一些调度可以实现接近100%的利用率。
本说明书的主题的一个或多个实施例的细节在附图和以下描述中阐述。根据描述、附图和权利要求,本主题的其他特征、方面和优点将变得显而易见。
附图说明
图1A示出了更改调度如何降低神经网络的两层之间的延迟。
图1B示出了用于单个瓦片的调度分配。
图2是用于生成降低加速器的瓦片之间的延迟的调度的示例过程的流程图。
图3A示出了执行行优先次序以及然后切换到列优先次序。
图3B示出了利用行限制(limit)来执行行优先次序。
图4示出了对角线调度。
图5是示出专用逻辑电路的示例的示意图。
图6示出了在ASIC芯片中使用的瓦片的示例。
各个附图中相同的附图标记和名称指示相同的元素。
具体实施方式
本说明书描述了用于调度瓦片操作以降低多瓦片加速器(例如,机器学习加速器)的瓦片之间的传播延迟的技术。
在本说明书中,瓦片是指具有可以对矩阵的一部分执行计算的计算单元阵列的设备。因此,瓦片是指被配置为执行矩阵向量乘法的固定大小的块的任何适当的加速器。每个单元可以包括允许该单元执行数学或其他计算的电路。在典型场景中,瓦片接收输入向量,使用计算阵列将输入向量乘以权重矩阵,并且生成输出向量。
在本说明书中,调度是指特定瓦片应当在其上进行操作的矩阵的部分的时序序列。在本说明书中,矩阵的这种离散部分也将被称为块(block)。因此,调度指定了针对特定瓦片的块的排序(ordering)。
每次瓦片对矩阵的不同块进行操作可以称为调度的一次迭代。如果矩阵完全容纳在瓦片的计算阵列内,则所有的矩阵操作都可以在没有任何调度的情况下执行。然而,当矩阵大于计算阵列时,系统可以生成指定应当以哪种次序来处理矩阵的不同块的调度。为方便起见,本说明书中的调度的操作将称为分配给特定可识别的时钟周期。然而,这些时钟周期不需要对应于实际的硬件时钟周期,并且相同的技术可以用于将计算分配给包括多个硬件时钟周期的时间段。
图1A示出了更改调度如何降低神经网络的两层之间的延迟。图1的左手边示出了一种简单直接的调度,在该调度中,两个瓦片用于执行两个神经网络层的操作。然而,这种简单直接的调度具有可以通过使用图1的右手边的增强调度来降低的延迟。
第一层102具有第一权重矩阵M1 110。第一层102的操作包括接收输入向量V1 115并且将输入向量115乘以第一权重矩阵110以生成输出向量V2 117。
在该示例中,第一权重矩阵110大于被分配来执行第一层102的操作的第一瓦片的计算阵列。第一权重矩阵110是第一瓦片的计算阵列的宽度的两倍和高度的两倍。因此,第一层的操作必须根据特定调度在多个时钟周期内在多个块中执行。
在图1的示例中,第一调度106将行优先(row-major)调度分配给第一层102的操作,这意味着被分配给第一层102的第一瓦片将对第一矩阵110的上半部上的两次迭代进行操作,然后对第一矩阵110的下半部上的两次迭代进行操作。在图1中,时钟周期分配被示出在对应的矩阵块上。因此,对于根据第一调度的第一矩阵110,第一瓦片将依次在周期0和周期1上处理矩阵的上半部,并且在周期2和周期3上处理矩阵的下半部。
第一层102的输出向量117然后通过对各个迭代的部分结果求和来生成。因此,输出向量117的第一半部包括对来自时钟周期0和2的部分结果求和。输出向量117的第二半部包括对来自时钟周期1和3的部分结果求和。
输出向量117然后通过通信硬件被传播到被分配来执行具有第二权重矩阵M2 120的第二层104的矩阵操作的第二瓦片。在该示例中,假设加速器的传播延迟为两个时钟周期。
在该图中,第二层104也具有根据第一调度106的行优先调度。
分别分配给第一层102和第二层104的第一瓦片和第二瓦片可以并发地执行操作。然而,层之间的计算自然引入了某些数据依赖性,并且传播延迟引入了影响第二层104的操作何时可以开始的延时。
具体地,直到周期0和周期2都已经被第一层102执行,第二矩阵120的左上块才可以被执行。因此,在已经执行了第一层的周期2之后,周期3和4将花费在将输出向量117的左半部传播到计算第二层104的第二瓦片。因此,可以计算第二层的结果的最早时间点是在周期5。
出于相同原因,直到周期1和周期3都已经在第一层102上被执行,并且直到数据已经被传播,第二层104的第二矩阵120的左下块才可以被执行,这引起了两个周期的传播延时。因为周期6已经被分配给右上块,所以第一调度106将第二矩阵120的左下部分分配为从周期7开始处理。
因此,图1A示出了第一调度106如何导致8个周期的总执行时间。
第二调度108调整第一层102的执行次序。第二调度108将列优先排序(column-major ordering)分配给第一层102,而不是行优先排序(row-major ordering)。
换句话说,第一层可以首先在周期0上对第一矩阵110的左上部分进行操作,随后在周期1上对第一矩阵110的左下部分进行操作。
注意,此时,第二层104的操作可以立即开始于处理第二矩阵120的左上块。因此,在周期2和3上的两个周期的传播延时之后,第二矩阵120的左上块已经可以在周期4上被处理,并且第二矩阵120的右上块可以在周期5上被处理。
第一层102的操作的行/列排序的这种重新布置将两层的总执行时间降低为7个周期。实际上,通过更改第一层102中的行/列排序,系统能够隐藏被分配为对第一层和第二层进行操作的两个瓦片之间的一个完整周期的传播延迟。虽然这是简单的示例,但是对于通过层102和104进行的单个遍次,时间节省仍然是12.5%。
这种技术可以被概括和细化为选择两个值的问题:(1)在其上执行分配方向切换的特定周期M,以及(2)在其上处理矩阵的“左下块”的特定周期Ti。在本说明书中,矩阵的“左下”块是指在后续层可以开始处理由该层生成的输出之前需要处理的矩阵的最后一个块。因此,“左下”块可以是矩阵的任何拐角块,或者使用来自前一层的行或列的最后到达部分的任何边缘块,这取决于调度中的特定布置。
对于在层n-1与层n之间具有N个周期的传播延迟的加速器,以及在层n与层n+1之间具有C个周期的传播延迟的加速器,系统可以通过调度层n的矩阵的左下块从该层起始起的至少N个周期和从该层末端起的至少C个周期被处理来减轻传播延迟。
因此,增强调度在所选择的周期M之后在分配方向上进行切换。通常,M指定在特定周期Ti处或之前的周期。在周期M处,调度可以从按行优先次序分配块切换到按列优先次序分配块,反之亦然。这是因为在周期Ti之后,瓦片继续接收足以为下一层生成进一步输出的数据。下面描述的技术进一步描述了如何更改调度的行/列分配方向以便为任意大小的矩阵减轻延迟。
在分配方向上的相同切换也可以降低仅有一个瓦片且很少或没有传播延迟的机器学习加速器中的延迟。例如,假设设备仅包括负责计算两层的结果的单个瓦片。
图1B示出了用于单个瓦片的调度分配,该瓦片在两层中的每一层上具有9个处理4×4矩阵的计算元件。
第一调度107示出了基本的行优先排序。可能出现的一个问题是,一些计算元件可能无事可做,因为它们在等待其他计算的结果完成。
在周期0上,所有9个计算元件成功地被投入在M1 111的前两行和M1111的第三行的第一个元素上工作。但是在第一调度107的周期1处,9个计算元件中只有7个可以被赋予工作。这是因为,当使用行优先调度时,在处理第一层的右下角之前,无法计算第二层的左上角。因此,第二层104的第一结果直到一个周期后才可以计算。
转而考虑使用分配方向切换的第二调度109。即,在分配矩阵111的第一行之后,系统可以切换到列优先分配。因此,矩阵111的左下块是在周期0而不是周期1上计算的。然后,第二层的操作可以在周期1上立即开始,因为左下块已经在周期0上处理了。
结果是,具有在分配方向上的切换的第二调度中的周期1能够实现100%的利用率,因为计算阵列的一些元素能够在第二层操作上开始工作,而无需等待第一层的操作完成。相同的技术可以通过神经网络的各层来提高利用率。
图2是用于生成为加速器降低延迟的调度的示例过程的流程图。为方便起见,该过程将被描述为由位于一个或多个位置且根据本说明书被适当编程的一个或多个计算机的系统来执行。
系统接收为具有第一矩阵的第一层生成调度的请求(210)。第一层可以是由指定每一层要执行的操作的输入程序定义的多个层中的一层。在具有多个瓦片的设备中,每一层可以被分配给具有多个瓦片的设备的相应瓦片。每一层可以具有各自的矩阵。例如,输入程序可以指定神经网络架构的操作。
系统根据第一维度中的初始分配方向来分配调度的多个初始块(220)。分配方向指定矩阵的第一维度,调度的迭代应当沿着第一维度被执行。例如,分配方向最初可以指定行优先排序或列优先排序。
系统为左下块选择周期(230)。如上所述,Ti表示其上将执行矩阵的左下块的周期。同样如上所述,Ti的选择以及特定类型的调度也可以确定M,M是分配方向切换的周期。
一般地,不管怎样选择Ti,Ti个周期的延迟都可以被隐藏在层i-1与层i之间,并且Wi x Hi-Ti个周期的延迟可以被隐藏在层i与层i+1之间。换句话说,系统可以选择Ti,以便在隐藏i-1至i转换的延迟与i至i+1转换的延迟之间进行权衡。
一些矩阵可能足够大,以至于传播延迟可以完全被隐藏。假设Li表示层i末端处的总末端层延迟(total end-layer latency),其包括任何结束计算或激活函数以及传播延迟。为了隐藏层i的所有延迟,以下不等式必须成立:
Wi x Hi≥Li-1+Li,
其中,Wi是以块为单位的矩阵宽度,并且Hi是以块为单位的矩阵高度。块大小可以由瓦片硬件来确定。
当条件成立时,系统可以将Ti选择为Li-1。
换句话说,系统可以调度块,使得左下块在前一层已经完成产生处理该块所需的输出之后尽快地执行。
然而,并不是所有矩阵都大到足以完全隐藏层之间的延迟。在这些情况下,调度可以引入空闲周期,以便强制等待结果就绪。如果层i之后是Si个空闲周期,则以下不等式对于层i的所有有效调度来说都成立:
Wi x Hi≥max(Li-1–Si-1,0)+max(Li–Si,0)
如果该不等式对有效调度来说成立,则系统可以根据下式来分配Ti:
Ti=max(Li-1-Si-1,0)
当对空闲周期使用这种布置时,系统还以编程方式选择通过每一层的空闲周期数量,以便最小化由空闲周期引入的总延时。为此,系统可以执行优化过程来为每一层k选择整数个空闲周期Sk,使得以下不等式成立:
Wi x Hi-max(Li–Si,0)≥0
和
Si-1≥Li-1+max(Li–Si,0)-Wi x Hi
系统切换分配方向,使得在特定块之后处理的块沿着第二维度被顺序处理(240)。M(切换周期)的选择取决于所使用的调度的类型。下面参考图3A-图3C更详细地描述选择M的示例
系统根据切换后的分配方向来分配所有剩余的未分配块(250)。换句话说,系统可以按照根据第二维度的排序来分配所有的未调度块。
图3A-图4示出了使用切换后的分配方向的示例调度。在图3A-图3C中,带编号的箭头表示被指定为以特定次序执行的成线路的块。
图3A示出了执行行优先次序并且然后切换到列优先次序。换句话说,系统沿着顶部行来分配块以首先进行处理,然后沿着第二行来分配块以进行其次处理,依此类推。
在该示例中,周期M发生在沿着块的第四行的中间某处。因此,系统在分配方向上进行切换,并且开始以列优先次序来分配块。系统可以这样做,以便调度矩阵的左下角在所选择的周期Ti上执行。换句话说,系统计算行优先次序,直到未接触的行数等于当前周期与Ti之间的差。
图3A所示的调度导致大部分计算被花费在列优先阶段。这倾向于以非常均匀的速率递送输出,并且在每一列的末端留下一些空闲周期。例如,对于当每一层的输出需要额外的处理时的情况(如LSTM的情况),这可能是有利的。
图3B示出了利用行限制来执行优先次序。在该示例中,行优先阶段在移动到下一行之前只处理有限数量的块。在该示例调度中,初始行比后面的行包括更多的块。在一些实施方式中,系统通过计算值N=(Ti/Hi-1)来计算行限制,其中Hi是矩阵的每一列中的块数。然后,系统可以对初始行使用N的上限,并且对后面的行使用N的下限。
因此,该示例中左下块Ti的周期由两个N值和矩阵中的行数给出。换句话说,如果矩阵中有8行,floor(N)=3,并且ceiling(N)=4,那么Ti=5x4+3x3–(3-1)=27。这种情况下的切换周期M由M=5x4+3x3=29给出。
图3B中的调度消除了当处理前几列时的延时,并且降低了内存需求。然而,图3B中的调度实施起来可能更复杂。
图4示出了对角线调度。如图所示,在行优先次序期间,每一行接收由对角线的斜率定义的递减数量的块。在该示例中,系统通过计算填充左上对角线所需的块数来选择Ti,并且系统可以选择M=Ti。
对角线调度在行优先阶段与列优先阶段之间具有对称性,但是具有上述两种调度的缺点。
图5是示出专用逻辑电路(特别是ASIC 500)的示例的示意图。ASIC 500包括多个同步处理器,为简洁起见,将这些处理器称为瓦片。例如,ASIC 500包括瓦片502,其中一个或多个瓦片502包括被配置为执行同步计算(诸如乘法和加法操作)的专用电路。具体地,每个瓦片502可以包括单元的计算阵列,其中每个单元被配置为执行数学操作(例如,参见图6中所示并本文描述的示例性瓦片200)。在一些实施方式中,瓦片502以网格图案进行布置,其中瓦片502沿着第一维度501(例如,行)和沿着第二维度503(例如,列)进行布置。例如,在图5所示的示例中,瓦片502被划分成四个不同的部分(510a、510b、510c、510d),每个部分包含被布置成纵向18个瓦片乘横向16个瓦片的网格的288个瓦片。在一些实施方式中,图5中所示的ASIC500可以被理解为包括被细分/布置成分开的瓦片的单个脉动单元阵列,其中每个瓦片包括单元、本地存储器和总线线路的子集/子阵列(例如,参见图6)。
ASIC 500还包括向量处理单元504。向量处理单元504包括被配置为从瓦片502接收输出并基于从瓦片502接收的输出来计算向量计算输出值的电路。例如,在一些实施方式中,向量处理单元504包括被配置为对从瓦片502接收的输出执行累加操作的电路(例如,乘法电路、加法器电路、移位器和/或存储器)。替代地或附加地,向量处理单元504包括被配置为向瓦片502的输出应用非线性函数的电路。替代地或附加地,向量处理单元504生成归一化值、池化值或两者。向量处理单元的向量计算输出可以被存储在一个或多个瓦片中。例如,向量计算输出可以被存储在与瓦片502唯一关联的存储器中。替代地或附加地,向量处理单元504的向量计算输出可以被传送到ASIC 500外部的电路,例如,作为计算的输出。在一些实施方式中,向量处理单元504被分隔,使得每个分段包括被配置为从对应的瓦片502的集合接收输出并基于接收的输出来计算向量计算输出的电路。例如,在图5所示的示例中,向量处理单元504包括沿着第一维501跨越的两行,每一行包括被布置成32列的32个分段506。每个分段506包括被配置为基于来自瓦片502的对应的列的输出(例如,累积总和)来执行向量计算的电路(例如,乘法电路、加法器电路、移位器和/或存储器),如本文所解释的。如图5所示,向量处理单元504可以位于瓦片502的网格的中间。向量处理单元504的其他位置布置也是可能的。
ASIC 500还包括通信接口508(例如,接口508a、508b)。通信接口508包括串行器/解串行器(SerDes)接口和通用输入/输出(GPIO)接口的一个或多个集合。SerDes接口被配置为接收用于ASIC 500的指令(例如,用于操作下述可控总线线路的指令)和/或输入数据,并且将数据从ASIC 500输出到外部电路。例如,SerDes接口可以被配置为以32Gbps、56Gbps或任何合适的数据速率通过通信接口508内包括的SerDes接口集合来传输指令和/或输入数据。GPIO接口被配置为提供用于调试和/或引导的接口。例如,当开启ASIC 500时,ASIC500可以运行引导程序。如果程序失败,则管理员可以使用GPIO接口来调试失败的来源。
ASIC 500还包括被配置为在通信接口508、向量处理单元504和多个瓦片502之间传送数据的多个可控总线线路(例如,参见图6)。可控总线线路包括例如沿着网格的第一维度501(例如,行)和网格的第二维度503(例如,列)延伸的布线。沿着第一维度501延伸的可控总线线路的第一子集可以被配置为在第一方向上(例如,向图5的右侧)传输数据。沿着第一维度501延伸的可控总线线路的第二子集可以被配置为在第二方向上(例如,向图5的左侧)传输数据。沿着第二维度503延伸的可控总线线路的第一子集可以被配置为在第三方向上(例如,向图5的顶部)传输数据。沿着第二维度503延伸的可控总线线路的第二子集可以被配置为在第四方向上(例如,向图5的底部)传输数据。
每个可控总线线路包括用于根据时钟信号沿着线路传送数据的多个传送器元件,诸如触发器(flip-flop)。通过可控总线线路传输数据可以包括在每个时钟周期处将数据从可控总线线路的第一传送器元件移位到可控总线线路的第二相邻传送器元件。在一些实施方式中,数据在时钟周期的上升沿或下降沿通过可控总线线路来传送。例如,在第一时钟周期处,在可控总线线路的第一传送器元件(例如,触发器)上存在的数据可以在第二时钟周期处被传输到可控总线线路的第二传送器元件(例如,触发器)。在一些实施方式中,传送器元件可以以固定的距离周期性地彼此分隔开。例如,在一些情况下,每个可控总线线路包括多个传送器元件,其中每个传送器元件位于对应的瓦片502内或附近。
每个可控总线线路还包括多个多路复用器和/或解复用器。可控总线线路的多路复用器/解复用器被配置为在总线线路与ASIC芯片500的组件之间传输数据。例如,可控总线线路的多路复用器/解复用器可以被配置为将数据传输到瓦片502和/或从瓦片502传输数据,将数据传输到向量处理单元504和/或从向量处理单元504传输数据,或者将数据传输到通信接口508和/或从通信接口508传输数据。在瓦片502、向量处理单元504和通信接口之间传输数据可以包括基于所期望的要发生的数据传输向多路复用器发送控制信号。控制信号可以被存储在直接耦合到多路复用器和/或解复用器的寄存器中。然后,控制信号的值可以确定,例如,什么数据从来源(例如,瓦片502或向量处理单元504内的存储器)传输到可控总线线路,或者替代地,什么数据从可控总线线路传输到槽(sink)(例如,瓦片502或向量处理单元504内的存储器)。
可控总线线路被配置为在本地级别上被控制,使得每个瓦片、向量处理单元和/或通信接口包括其自己的控制元件集合,以用于操纵穿过该瓦片、向量处理单元和/或通信接口的可控总线线路。例如,每个瓦片、1D向量处理单元和通信接口可以包括传送器元件、多路复用器和/或解复用器的对应集合,以用于控制去往和来自瓦片、1D向量处理单元和通信接口的数据传输。
为了最小化与ASIC 500的操作相关联的延迟,瓦片502和向量处理单元504可以被定位成减小数据在各种组件之间行进的距离。在特定实施方式中,瓦片502和通信接口508都可以被分割成多个部分,其中瓦片部分和通信接口部分都被布置成使得数据在瓦片与通信接口之间行进的最大距离减小。例如,在一些实施方式中,第一组瓦片502可以被布置在通信接口508的第一侧的第一部分中,并且第二组瓦片502可以被布置在通信接口的第二侧的第二部分中。结果,与所有瓦片502被布置在通信接口一侧的单个部分中的配置相比,从通信接口到最远瓦片的距离可以被减半。
替代地,瓦片可以被布置在不同数量的部分(诸如四个部分)中。例如,在图5所示的示例中,ASIC 500的多个瓦片502被布置在多个部分510(510a、510b、510c、510d)中。每个部分510包括被布置成网格图案的相似数量的瓦片502(例如,每个部分510可以包括被布置成16行和16列的256个瓦片)。通信接口508也被划分成多个部分:第一通信接口508a和第二通信接口508b被布置在瓦片502的部分510的任一侧。第一通信接口508a可以通过可控总线线路耦合到ASIC芯片500左侧的两个瓦片部分510a、510c。第二通信接口508b可以通过可控总线线路耦合到ASIC芯片500右侧的两个瓦片部分510b、510d。结果,与只有单个通信接口可用的布置相比,数据去往和/或来自通信接口508所行进的最大距离(因此还有与数据传播相关联的延迟)可以被减半。瓦片502和通信接口508的其他耦合布置也可能降低数据延迟。瓦片502和通信接口508的耦合布置可以通过向可控总线线路的传送器元件和多路复用器提供控制信号来编程。
在一些实施方式中,一个或多个瓦片502被配置为发起关于可控总线线路和/或ASIC 500内的其他瓦片(本文称为“控制瓦片”)的读取和写入操作。ASIC 500内的剩余瓦片可以被配置为基于输入数据来执行计算(例如,计算层推断)。在一些实施方式中,控制瓦片包括与ASIC 500内的其他瓦片相同的组件和配置。控制瓦片可以作为ASIC 500的一个或多个额外瓦片、一个或多个额外行、或一个或多个额外列来添加。例如,对于瓦片502的对称网格(其中每个瓦片502被配置为对输入数据执行计算),可以包括附加的一行或多行控制瓦片来处理用于对输入数据执行计算的瓦片502的读取和写入操作。例如,每个部分510包括18行瓦片,其中最后两行瓦片可以包括控制瓦片。在一些实施方式中,提供分开的控制瓦片增加了用于执行计算的其它瓦片中的可用内存量。然而,专用于提供如本文所述的控制的分开的瓦片不是必需的,并且在一些情况下,不提供分开的控制瓦片。相反,每个瓦片可以在其本地存储器中存储用于发起用于该瓦片的读取和写入操作的指令。
此外,虽然图5所示的每个部分510包括被布置成18行乘16列的瓦片,但是瓦片502的数量和它们在一个部分中的布置可以是不同的。例如,在一些情况下,部分510可以包括相等数量的行和列。
此外,尽管在图5中被示为划分成四个部分,但是瓦片502可以被划分成其他不同的分组。例如,在一些实施方式中,瓦片502被分组成两个不同的部分,诸如向量处理单元504上方的第一部分(例如,更靠近图5所示的页面顶部)和向量处理单元504下方的第二部分(例如,更靠近图5所示的页面底部)。在这种布置中,每个部分可以包含例如被布置成纵向(沿着方向503)18个瓦片乘横向(沿着方向501)32个瓦片的网格的576个瓦片。部分可以包含其他总数的瓦片,并且可以被布置成不同大小的阵列。在一些情况下,部分之间的划分由ASIC 500的硬件特征来描绘。例如,如图5所示,部分510a、510b与部分510c、510d可以被向量处理单元504分隔开。
通过将向量处理单元504相对于瓦片部分510在中心定位,也可以降低延迟。在一些实施方式中,瓦片502的第一半部被布置在向量处理单元504的第一侧,并且瓦片502的第二半部被布置在向量处理单元504的第二侧。
例如,在图5所示的ASIC芯片500中,向量处理单元504包括两个部分(例如,两行),每个部分包括与瓦片502的列数相匹配的多个分段506。每个分段506可以被定位和配置为从瓦片的部分510内的瓦片502的对应列接收输出,诸如累积总和。在图5所示的示例中,位于向量处理单元504的第一侧(例如,在向量处理单元504之上)的瓦片部分510a、510b可以通过可控总线线路耦合到分段506的顶部行。位于向量处理单元504的第二侧(例如,在向量处理单元504下方)的瓦片部分510c、510d可以通过可控总线线路耦合到分段506的底部行。此外,处理单元504上方的第一半部内的每个瓦片502可以与处理单元504下方的第二半部内的相应瓦片502位于距离向量处理单元504相同的距离处,使得两个半部之间的总延迟没有差异。例如,第一部分510a中的行i中的瓦片502(其中变量i对应于行位置)可以与瓦片的第二部分(例如,部分510c)中的行m-1-i中的瓦片502位于距离向量处理单元504相同的距离处(其中m表示每个部分中的总行数,并且假设行在两个部分中沿着相同的方向递增)。
与向量处理单元504位于所有瓦片502的远端(例如,底部)的布置相比,以这种方式配置瓦片部分510可以将数据去往和/或来自向量处理单元504所行进的距离(因此还有与数据传播相关联的延迟)减半。例如,与通过一列瓦片502从部分510a接收累积总和相关联的延迟可以是与通过一列瓦片502从部分510a和510c接收累积总和相关联的延迟的一半。瓦片502和向量处理单元504的耦合布置可以通过向可控总线线路的传送器元件和多路复用器提供控制信号来编程。
在ASIC芯片500的操作期间,激活输入可以在瓦片之间移位。例如,激活输入可以沿着第一维度501移位。此外,来自由瓦片502执行的计算的输出(例如,由瓦片502内的计算阵列执行的计算的输出)可以在瓦片之间沿着第二维度503移位。
在一些实施方式中,可控总线线路可以被物理地硬连线以使得数据跳过瓦片502,从而降低与ASIC芯片500的操作相关联的延迟。例如,由第一瓦片502执行的计算的输出可以沿着网格的第二维度503移位到距离第一瓦片502至少一个瓦片而定位的第二瓦片502,从而跳过其间的瓦片。在另一示例中,来自第一瓦片502的激活输入可以沿着网格的第一维度501移位到距离第一瓦片502至少一个瓦片而定位的第二瓦片502,从而跳过其间的瓦片。通过在对激活输入或输出数据进行移位时跳过至少一个瓦片,可以减少总的数据路径长度,使得数据被更快地传输(例如,不需要利用时钟周期在跳过的拼块处存储数据),并且降低延迟。
在示例实施方式中,部分510a的每一列内的每个瓦片502可以被配置为通过可控总线线路沿着第二维度503朝向向量处理单元504传递输出数据。每一列内的瓦片502还可以被配置为通过跳过下一相邻瓦片(例如,通过瓦片之间的可控总线线路的物理硬连线)朝向向量处理单元504传递数据。也就是说,在第一部分510a中的位置(i,j)=(0,0)处的瓦片502(其中变量i对应于行位置,并且变量j对应于列位置)可以被硬连线以将输出数据传递到位置(i,j)=(2,0)处的瓦片502;类似地,在第一部分510a中的位置(i,j)=(2,0)处的瓦片502可以被硬连线以将输出数据传递到位置(i,j)=(4,0)处的瓦片502,等等。未被跳过的最后一个瓦片(例如,位于位置(i,j)=(16,0)处的瓦片502)将输出数据传递到向量处理单元504。对于具有18行瓦片的部分510,诸如图5所示的示例,瓦片跳过(skip)确保部分510内的所有瓦片距离向量处理单元504最多9次“瓦片跳跃”,从而通过将数据路径长度和产生的数据延迟减半来提高ASIC芯片500的性能。
在另一示例实施方式中,区段510a、510c的每一排内和区段510b、510d的每一排内的每个瓦片502可以被配置为通过可控总线线路沿着第一维度501传递激活输入。例如,部分510a、510b、510c、510d内的一些瓦片可以被配置为朝向网格500的中心或朝向通信接口508传递激活输入。每一行内的瓦片502还可以被配置为跳过相邻瓦片,例如,通过在瓦片之间硬连线可控总线线路。例如,在第一部分510a中的位置(i,j)=(0,0)处的瓦片502(其中变量i对应于行位置,并且变量j对应于列位置)可以被配置为将激活输入传递到位置(i,j)=(0,2)处的瓦片502;类似地,在第一部分510a中的位置(i,j)=(0,2)处的瓦片502可以被配置为将激活输入传递到位置(i,j)=(0,4)处的瓦片502,等等。在一些情况下,未被跳过的最后一个瓦片(例如,位于位置(i,j)=(0,14)处的瓦片502)不将激活输入传递到另一瓦片。
类似地,被跳过的瓦片可以在相反方向上传递激活输入。例如,在第一部分510a中的位置(i,j)=(0,15)处的瓦片502(其中变量i对应于行位置,并且变量j对应于列位置)可以被配置为将激活输入到位置(i,j)=(0,13)处的瓦片502;类似地,在第一部分510a中的位置(i,j)=(0,13)处的瓦片502可以被配置为将激活输入传递到位置(i,j)=(0,11)处的瓦片502,等等。在一些情况下,未被跳过的最后一个瓦片(例如,位于位置(i,j)=(0,1)处的瓦片502)不将激活输入传递到另一瓦片。通过跳过瓦片,在一些实施方式中,可以通过将数据路径长度和产生的数据延迟减半来提高ASIC芯片500的性能。
如本文所解释的,在一些实施方式中,一个或多个瓦片502专用于存储控制信息。也就是说,专用于存储控制信息的瓦片502不参与对诸如权重输入和激活输入的输入数据执行计算。控制信息可以包括例如用于在ASIC芯片500的操作期间配置可控总线线路的控制数据,使得数据可以在ASIC芯片500周围移动。控制数据可以以控制信号的形式提供给可控总线线路,以用于控制可控总线线路的传送器元件和多路复用器。控制数据指定可控总线线路的特定传送器元件是否将数据传递到可控总线线路的下一传送器元件,使得数据根据预定调度在瓦片之间进行传输。控制数据另外指定数据是从总线线路传输还是传输到总线线路。例如,控制数据可以包括指导多路复用器将数据从总线线路传输到瓦片内的存储器和/或其他电路的控制信号。在另一示例中,控制数据可以包括指导多路复用器将数据从瓦片内的存储器和/或电路传输到总线线路的控制信号。在另一示例中,控制数据可以包括指导多路复用器在总线线路与通信接口508之间和/或在总线线路与向量处理单元504之间传输数据的控制信号。替代地,如本文所公开的,不使用专用的控制瓦片。相反,在这种情况下,每个瓦片的本地存储器存储该特定瓦片的控制信息。
图6示出了在ASIC芯片500中使用的瓦片600的示例。每个瓦片600包括本地存储器602和耦合到存储器602的计算阵列604。本地存储器602包括位于计算阵列604附近的物理存储器。计算阵列604包括多个单元606。计算阵列604的每个单元606包括被配置为基于对单元606的数据输入(诸如激活输入和权重输入)来执行计算(例如,乘法和累加操作)的电路。每个单元可以对一个周期的时钟信号执行计算(例如,乘法和累加操作)。计算阵列604可以具有比列多的行、比行多的列、或者相等数量的列和行。例如,在图6所示的示例中,计算阵列604包括被布置成8行和8列的64个单元。其他计算阵列大小也是可能的,诸如具有16个单元、32个单元、128个单元或256个单元等的计算阵列。每个瓦片可以包括相同数量的单元和/或相同大小的计算阵列。然后,可以为ASIC芯片并行地执行的操作的总数取决于芯片内具有相同大小计算阵列的瓦片的总数。例如,对于图5所示的包含大约1150个瓦片的ASIC芯片500,这意味着每个周期可以并行地执行大约72000次计算。可以使用的时钟速度的示例包括但不限于225MHz、500MHz、750MHz、1GHz、1.25GHz、1.5GHz、1.75GHz或2GHz。如图1所示,每个单独瓦片的计算阵列604是瓦片的较大脉动阵列的子集。
包含在瓦片600中的存储器602可以包括例如随机存取存储器(RAM),诸如SRAM。每个存储器602可以被配置为存储与图5所示的ASIC芯片的n个瓦片502相关联的总内存的1/n。存储器602可以被提供为单个芯片或多个芯片。例如,图6中所示的存储器602被提供为四个单端口SRAM,每个SRAM耦合到计算阵列604。替代地,存储器602可以被提供为两个单端口SRAM或八个单端口SRAM以及其他配置。在纠错编码之后,存储器的联合容量可以是但不限于例如16kB、32kB、64kB或128kB。在一些实施方式中,通过将物理存储器602本地提供给计算阵列,可以极大地降低ASIC500的布线密度。在存储器集中在ASIC 500内的替代配置中,与本文所描述的本地提供相反,可能需要对于存储器带宽的每个比特的布线。覆盖ASIC500的每个瓦片所需的布线总数将远远超过ASIC 100内的可用空间。相反,利用为每个瓦片提供专用存储器,跨越ASIC 500的区域所需的总数可以显著减少。
瓦片600还包括可控总线线路。可控总线线路可以被分类为多个不同的组。例如,可控总线线路可以包括第一组通用可控总线线路610,该第一组通用可控总线线路610被配置为在每个主方向上的瓦片之间传输数据。也就是说,第一组可控总线线路610可以包括:总线线路610a,被配置为沿着瓦片的网格的第一维度501朝向第一方向(在图6中称为“东”)传输数据;总线线路610b,被配置为沿着瓦片的网格的第一维度101朝向第二方向(在图6中称为“西”)传输数据,其中第二方向与第一方向相反;总线线路610c,被配置为沿着瓦片的网格的第二维度103朝向第三方向(在图6中称为“北”)传输数据;以及总线线路610d,被配置为沿着瓦片的网格的第二维度103朝向第四方向(在图6中称为“南”)传输数据,其中第四方向与第三方向相反。通用总线线路610可以被配置为携带控制数据、激活输入数据、来自和/或去往通信接口的数据、来自和/或去往向量处理单元的数据、以及要被瓦片600存储和/或使用的数据(例如,权重输入)。瓦片600可以包括一个或多个控制元件621(例如,触发器和多路复用器),以用于控制可控总线线路,并且因此将数据路由到瓦片600和/或存储器602和/或从瓦片600和/或存储器602路由数据。
可控总线线路还可以包括第二组可控总线线路,本文称为计算阵列部分总和总线线路620。计算阵列部分总和总线线路620可以被配置为携带来自由计算阵列604执行的计算的数据输出。例如,总线线路620可以被配置为携带从计算阵列604中的行获得的部分总和数据,如图6所示。在这种情况下,总线线路620的数量将与阵列604中的行数相匹配。例如,对于8×8计算阵列,将有8个部分总和总线线路620,每个总线线路耦合到计算阵列604中对应的行的输出。计算阵列输出总线线路620还可以被配置为耦合到ASIC芯片内的另一瓦片,例如,作为ASIC芯片内的另一瓦片的计算阵列的输入。例如,瓦片600的阵列部分总和总线线路620可以被配置为接收位于距离瓦片600至少一个瓦片处的第二瓦片的计算阵列的输入(例如,部分总和620a)。计算阵列604的输出然后被添加到部分总和线路620以产生新的部分总和620b,可以从瓦片600输出部分总和620b。然后,部分总和620b可以被传递到另一瓦片,或替代地,被传递到向量处理单元。例如,每个总线线路620可以耦合到向量处理单元的对应分段(诸如图5中的分段506)。
如参考图5所解释的,可控总线线路可以包括被配置为允许数据沿着总线线路传送的诸如传送器元件(例如,触发器)的电路。在一些实施方式中,对于每个瓦片,每个可控总线线路包括对应的传送器元件。如参考图5进一步解释的,可控总线线路可以包括被配置为允许数据在不同的瓦片、向量处理单元和ASIC芯片的通信接口之间进行传输的诸如多路复用器的电路。多路复用器可以位于任何有数据源或数据槽的地方。例如,在一些实施方式中,如图6所示,控制电路621(诸如多路复用器)可以位于可控总线线路的交叉点(例如,通用总线线路610a和610d的交叉点,通用总线线路610a和610c的交叉点,通用总线线路610b和610d的交叉点,和/或通用总线线路610b和610c的交叉点)。总线线路交叉点处的多路复用器可以被配置为在交叉点处的总线线路之间传输数据。相应地,通过多路复用器的适当操作,可以更改数据在可控总线线路上行进的方向。例如,在通用总线线路610a上沿着第一维度101行进的数据可以被传输到通用总线线路610d,使得数据转而沿着第二维度103行进。在一些实施方式中,多路复用器可以位于瓦片600的存储器602附近,使得数据可以被传输到存储器602和/或从存储器602传输。
本说明书中描述的主题和功能操作的实施例可以在数字电子电路中、在有形体现的计算机软件或固件中、在包括本说明书中公开的结构及其结构等同物的计算机硬件中、或者在它们中的一个或多个的组合中实施。本说明书中描述的主题的实施例可以被实施为一个或多个计算机程序,即编码在有形的非暂时性存储介质上的计算机程序指令的一个或多个模块,用于由数据处理装置执行或控制数据处理装置的操作。计算机存储介质可以是机器可读存储设备、机器可读存储基底、随机或串行存取存储器设备、或者它们中的一个或多个的组合。替代地或附加地,程序指令可以被编码在人工生成的传播信号上,例如,机器生成的电、光或电磁信号,该传播信号被生成来对信息进行编码以传输到合适的接收器这种供数据处理装置执行。
术语“数据处理装置”是指数据处理硬件,并且涵盖用于处理数据的各种装置、设备和机器,包括例如可编程处理器、计算机、或者多个处理器或计算机。该装置还可以是或还包括专用逻辑电路,例如,FPGA(现场可编程门阵列)或ASIC(专用集成电路)。除了硬件之外,该装置可以可选地包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统、或者它们中的一个或多个的组合的代码。
计算机程序(也可以称为或描述为程序、软件、软件应用、小应用、模块、软件模块、脚本或代码)可以用任何形式的编程语言来编写,包括编译性或解释性语言、或者声明性或过程性语言,并且它可以以任何形式来部署,包括作为独立程序或作为模块、组件、子例程或适合在计算环境中使用的其他单元。程序可以但不必对应于文件系统中的文件。程序可以被存储在保存其他程序或数据的文件的一部分(例如,标记语言文档中所存储的一个或多个脚本)中,被存储在专用于所讨论的程序的单个文件中,或者被存储在多个协同文件(例如,存储一个或多个模块、子程序或部分代码的文件)中。计算机程序可以被部署为在一个计算机上执行,或者在位于一个站点或跨多个站点分布并通过数据通信网络互连的多个计算机上执行。
对于一个或多个计算机的系统来说,被配置为执行特定的操作或动作意味着,系统已经在其上安装了软件、固件、硬件或它们的组合,这些软件、固件、硬件或它们的组合在操作中使得系统执行这些操作或动作。对于一个或多个计算机程序来说,被配置为执行特定的操作或动作意味着,该一个或多个程序包括指令,该指令在由数据处理装置执行时使得该装置执行这些操作或动作。
如在本说明书中所使用的,“引擎”或“软件引擎”是指提供不同于输入的输出的软件实施的输入/输出系统。引擎可以是经编码的功能块,诸如库、平台、软件开发工具包(“SDK”)或对象。每个引擎可以在任何适当类型的计算设备上实施,例如,服务器、移动电话、平板计算机、笔记本计算机、音乐播放器、电子书阅读器、膝上型或台式计算机、PDA、智能电话、或者包括一个或多个处理器和计算机可读介质的其他固定或便携式设备。另外,两个或更多个引擎可以被实施在相同的计算设备上,或者在不同的计算设备上。
本说明书中描述的过程和逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机来执行,以通过对输入数据进行操作并生成输出来执行功能。这些过程和逻辑流程也可以由专用逻辑电路(例如,FPGA或ASIC)来执行,或者由专用逻辑电路和一个或多个编程计算机的组合来执行。
适合于执行计算机程序的计算机可以基于通用或专用微处理器或两者,或者任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本元件是用于执行或运行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。中央处理单元和存储器可以由专用逻辑电路来补充,或者被包含在专用逻辑电路中。通常,计算机还将包括或可操作地耦合到用于存储数据的一个或多个大容量存储设备(例如磁盘、磁光盘或光盘),以从其接收数据,或向其发送数据,或两者兼有。然而,计算机不需要具有这样的设备。此外,计算机可以嵌入到另一个设备中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收器或便携式存储设备(例如,通用串行总线(USB)闪存驱动器),仅举几例。
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,包括例如:半导体存储器设备,例如EPROM、EEPROM和闪存设备;磁盘,例如内部硬盘或可移动磁盘;磁光盘;以及光CD-ROM和DVD-ROM盘。
为了提供与用户的交互,本说明书中描述的主题的实施例可以在计算机上实施,该计算机具有用于向用户显示信息的显示设备(例如,CRT(阴极射线管)或LCD(液晶显示器)监视器,)以及用户可通过其向计算机提供输入的键盘和定点设备(例如,鼠标、轨迹球、或者压敏显示器或其他表面)。也可以使用其他类型的设备来提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感官反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以以任何形式接收来自用户的输入,包括声音、语音或触觉输入。此外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户交互;例如,通过响应于从网络浏览器接收的请求而将网页发送到用户设备上的网络浏览器。此外,计算机可以通过向个人设备(例如,智能电话)发送文本消息或其他形式的消息、运行消息传递应用并从用户接收响应消息作为交换来与用户交互。
本说明书中描述的主题的实施例可以在计算系统中实施,该计算系统包括后端组件(例如,作为数据服务器),或者包括中间件组件(例如,应用服务器),或者包括前端组件(例如,具有图形用户界面的客户端计算机、网络浏览器、或者用户可以通过其与本说明书中描述的主题的实施方式进行交互的应用),或者一个或多个这样的后端、中间件或前端组件的任意组合。系统的组件可以通过任何形式或介质的数字数据通信(例如,通信网络)来互连。通信网络的示例包括局域网(LAN)和广域网(WAN),例如互联网。
计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离,并且通常通过通信网络进行交互。客户机和服务器的关系是通过运行在相应计算机上并且彼此之间具有客户端-服务器关系的计算机程序而产生的。在一些实施例中,服务器将数据(例如,HTML页面)发送到用户设备,例如,为了向与充当客户端的设备进行交互的用户显示数据和从其接收用户输入。在用户设备处生成的数据(例如,用户交互的结果)可以在服务器处从设备接收。
除了上述实施例之外,以下实施例也是创新的:
实施例1是一种方法,包括:
接收为要由加速器执行的程序的第一层生成调度的请求,该加速器被配置为至少部分并行地执行矩阵操作,其中,程序定义包括第一层的多个层,程序的每一层定义要使用相应的值矩阵来执行的矩阵操作;
根据初始分配方向来分配调度的多个初始块,其中,初始分配方向指定用于第一层的第一矩阵的第一维度,多个初始块将要沿着第一维度被执行;
选择特定周期以处理在后续层可以开始处理之前所需的矩阵的最后一个块;
切换分配方向,使得在所选择的特定周期之后处理的块沿着第一矩阵的不同的第二维度被处理;以及
根据切换后的分配方向来分配所有剩余的未分配块。
实施例2是根据实施例1所述的方法,其中选择特定周期包括:
计算前一层的传播延迟;以及
基于前一层的传播延迟来分配特定周期。
实施例3是根据实施例1-2中任一实施例所述的方法,其中选择特定周期包括:
计算前一层的传播延迟;
计算前一层的空闲周期数量;以及
选择前一层的传播延迟与前一层的空闲周期数量之间的最大值。
实施例4是根据实施例1-3中任一实施例所述的方法,其中调度以行优先次序来分配多个初始块,并且其中分配所有剩余的未分配块以列优先次序来分配块。
实施例5是根据实施例4所述的方法,还包括选择切换分配方向的周期,包括:选择未调度的行数等于当前周期与所选择的特定周期之间的差的周期。
实施例6是根据实施例4所述的方法,其中调度仅沿着矩阵的部分行来分配多个初始块。
实施例7是根据实施例6所述的方法,其中调度分配多个初始部分行和多个后续部分行,其中后续部分行小于初始部分行。
实施例8是根据实施例7所述的方法,其中初始部分行具有由ceiling(N)给出的长度,并且后续部分行具有由floor(N)给出的长度,其中N通过所选择的周期除以前一层上的矩阵的块高度而给出。
实施例9是根据实施例4所述的方法,其中调度以行优先次序来分配初始块,以填充矩阵中由对角线定义的空间。
实施例10是根据实施例9所述的方法,其中切换分配方向发生在特定的所选择的周期。
实施例11是根据实施例1-10中任一实施例所述的方法,其中加速器具有多个瓦片,并且每一层将由多个瓦片中的相应瓦片来计算。
实施例12是根据实施例1-10中任一实施例所述的方法,其中加速器具有单个瓦片来执行两层的操作。
实施例13是一种系统,包括:一个或多个计算机和存储指令的一个或多个存储设备,该指令在由一个或多个计算机执行时可操作以使得一个或多个计算机执行根据实施例1至64中任一实施例所述的方法。
实施例14是用计算机程序编码的计算机存储介质,该程序包括指令,该指令在由数据处理装置执行时可操作以使得数据处理装置执行根据实施例1至64中任一实施例所述的方法。
尽管本说明书包含许多具体的实施细节,但是这些不应被解释为对任何发明的范围或对所要求保护的范围的限制,而是对特定发明的特定实施例可能特有的特征的描述。本说明书中在分开的实施例的上下文中描述的某些特征也可以在单个实施例中组合实施。相反,在单个实施例的上下文中描述的各种特征也可以在多个实施例中分开实施或者以任何合适的子组合来实施。此外,尽管特征可以在上面被描述为在某些组合中起作用,并且甚至最初被这样要求保护,但是在一些情况下,来自所要求保护的组合的一个或多个特征可以从该组合中删除,并且所要求保护的组合可以指向子组合或子组合的变体。
类似地,虽然在附图中以特定次序描述了操作,但是这不应被理解为要求以所示的特定次序或顺序次序来执行这些操作,或者要求执行所有示出的操作,以获得期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中都需要这种分离,并且应当理解,所描述的程序组件和系统通常可以集成在单个软件产品中或者封装到多个软件产品中。
已经描述了主题的特定实施例。其他实施例在以下权利要求的范围内。例如,权利要求中列举的动作可以以不同的次序来执行,并且仍然获得期望的结果。作为一个示例,附图中描述的过程不一定需要所示的特定次序或顺序次序来获得期望的结果。在某些情况下,多任务和并行处理可能是有利的。
Claims (12)
1.一种计算机实施的方法,包括:
接收为要由加速器执行的程序的第一层生成调度的请求,所述加速器被配置为至少部分并行地执行矩阵操作,其中,所述程序定义包括所述第一层的多个层,所述程序的每一层定义要使用相应的值矩阵来执行的矩阵操作;
根据初始分配方向来分配所述调度的多个初始块,其中,所述初始分配方向指定用于所述第一层的第一矩阵的第一维度,所述多个初始块将要沿着所述第一维度被执行;
选择特定周期以处理在后续层可以开始处理之前所需的矩阵的最后一个块;
切换分配方向,使得在所选择的特定周期之后处理的块沿着所述第一矩阵的不同的第二维度被处理;以及
根据切换后的分配方向来分配所有剩余的未分配块。
2.根据权利要求1所述的方法,其中,选择所述特定周期包括:
计算前一层的传播延迟;以及
基于所述前一层的传播延迟来分配所述特定周期。
3.根据权利要求1所述的方法,其中,选择所述特定周期包括:
计算前一层的传播延迟;
计算所述前一层的空闲周期的数量;以及
选择所述前一层的传播延迟与所述前一层的空闲周期的数量之间的最大值。
4.根据权利要求1所述的方法,其中,所述调度以行优先次序来分配所述多个初始块,并且其中,分配所有剩余的未分配块以列优先次序来分配块。
5.根据权利要求4所述的方法,还包括:选择切换所述分配方向的周期,包括:选择未调度的行数等于当前周期与所选择的特定周期之间的差的周期。
6.根据权利要求4所述的方法,其中,所述调度仅沿着所述矩阵的部分行来分配所述多个初始块。
7.根据权利要求6所述的方法,其中,所述调度分配多个初始部分行和多个后续部分行,其中所述后续部分行小于所述初始部分行。
8.根据权利要求7所述的方法,其中,所述初始部分行具有由ceiling(N)给出的长度,并且所述后续部分行具有由floor(N)给出的长度,其中N通过所选择的周期除以前一层上的矩阵的块高度而给出。
9.根据权利要求4所述的方法,其中,所述调度以行优先次序来分配所述初始块,以填充由所述矩阵中的对角线定义的空间。
10.根据权利要求9所述的方法,其中,切换所述分配方向发生在特定的所选择的周期。
11.根据权利要求1所述的方法,其中,所述加速器具有多个瓦片,并且每一层将要由所述多个瓦片中的相应瓦片来计算。
12.根据权利要求1所述的方法,其中,所述加速器具有单个瓦片来执行两层的操作。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962890351P | 2019-08-22 | 2019-08-22 | |
US62/890,351 | 2019-08-22 | ||
PCT/US2020/047254 WO2021035079A1 (en) | 2019-08-22 | 2020-08-20 | Propagation latency reduction |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114026543A true CN114026543A (zh) | 2022-02-08 |
Family
ID=72428336
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080047574.8A Pending CN114026543A (zh) | 2019-08-22 | 2020-08-20 | 传播延迟降低 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20220318638A1 (zh) |
EP (1) | EP3973394A1 (zh) |
JP (2) | JP7326501B2 (zh) |
CN (1) | CN114026543A (zh) |
TW (2) | TWI817490B (zh) |
WO (1) | WO2021035079A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113469631B (zh) * | 2021-09-03 | 2021-12-10 | 浙江凯乐士科技集团股份有限公司 | 拣选调度方法、设备及矩阵分拣系统 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7814297B2 (en) * | 2005-07-26 | 2010-10-12 | Arm Limited | Algebraic single instruction multiple data processing |
US8181003B2 (en) * | 2008-05-29 | 2012-05-15 | Axis Semiconductor, Inc. | Instruction set design, control and communication in programmable microprocessor cores and the like |
US8766666B2 (en) * | 2010-06-10 | 2014-07-01 | Micron Technology, Inc. | Programmable device, hierarchical parallel machines, and methods for providing state information |
US9378065B2 (en) * | 2013-03-15 | 2016-06-28 | Advanced Elemental Technologies, Inc. | Purposeful computing |
US9501325B2 (en) * | 2014-04-11 | 2016-11-22 | Maxeler Technologies Ltd. | System and method for shared utilization of virtualized computing resources |
CN107113719B (zh) * | 2014-10-08 | 2020-06-23 | 美国亚德诺半导体公司 | 可配置的预处理阵列器 |
CN107168683B (zh) * | 2017-05-05 | 2020-06-09 | 中国科学院软件研究所 | 申威26010众核cpu上gemm稠密矩阵乘高性能实现方法 |
US10671349B2 (en) * | 2017-07-24 | 2020-06-02 | Tesla, Inc. | Accelerated mathematical engine |
US10482337B2 (en) * | 2017-09-29 | 2019-11-19 | Infineon Technologies Ag | Accelerating convolutional neural network computation throughput |
CN111194451B (zh) * | 2017-10-20 | 2024-02-27 | 渊慧科技有限公司 | 门控激活单元运算的并行执行 |
CN108462495A (zh) * | 2018-04-03 | 2018-08-28 | 北京航空航天大学 | 一种基于gpu的多元ldpc码高速并行译码器及其译码方法 |
-
2020
- 2020-08-20 WO PCT/US2020/047254 patent/WO2021035079A1/en unknown
- 2020-08-20 EP EP20768427.5A patent/EP3973394A1/en active Pending
- 2020-08-20 JP JP2021577625A patent/JP7326501B2/ja active Active
- 2020-08-20 US US17/636,662 patent/US20220318638A1/en active Pending
- 2020-08-20 CN CN202080047574.8A patent/CN114026543A/zh active Pending
- 2020-08-21 TW TW111117324A patent/TWI817490B/zh active
- 2020-08-21 TW TW109128654A patent/TWI767303B/zh active
-
2023
- 2023-08-02 JP JP2023126257A patent/JP2023145676A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
JP2022544739A (ja) | 2022-10-21 |
TW202109341A (zh) | 2021-03-01 |
TW202301172A (zh) | 2023-01-01 |
EP3973394A1 (en) | 2022-03-30 |
TWI817490B (zh) | 2023-10-01 |
US20220318638A1 (en) | 2022-10-06 |
JP7326501B2 (ja) | 2023-08-15 |
TWI767303B (zh) | 2022-06-11 |
JP2023145676A (ja) | 2023-10-11 |
KR20220011740A (ko) | 2022-01-28 |
WO2021035079A1 (en) | 2021-02-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI767310B (zh) | 處理器、運算方法及電腦程式產品 | |
JP6983154B2 (ja) | 計算グラフの処理 | |
US9753726B2 (en) | Computer for amdahl-compliant algorithms like matrix inversion | |
US20240104012A1 (en) | Topological scheduling | |
US10790828B1 (en) | Application specific integrated circuit accelerators | |
JP7476299B2 (ja) | 同期プロセッサのためのコンパイル | |
JP2023145676A (ja) | 伝搬レイテンシの短縮 | |
KR102670905B1 (ko) | 전파 지연 감소 | |
CN114258538A (zh) | 片上操作的显式调度 | |
US20240192897A1 (en) | Enhanced input of machine-learning accelerator activations | |
CN114270307A (zh) | 用于同步处理器的分片 | |
JP7004083B2 (ja) | 演算処理装置及び演算処理装置の制御方法 | |
EP4113312A1 (en) | Control of machine-learning systems |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40068376 Country of ref document: HK |