CN118605971A - 初始化片上操作的方法和系统 - Google Patents
初始化片上操作的方法和系统 Download PDFInfo
- Publication number
- CN118605971A CN118605971A CN202410746265.XA CN202410746265A CN118605971A CN 118605971 A CN118605971 A CN 118605971A CN 202410746265 A CN202410746265 A CN 202410746265A CN 118605971 A CN118605971 A CN 118605971A
- Authority
- CN
- China
- Prior art keywords
- block
- data
- state
- hardware
- hardware block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 64
- 230000015654 memory Effects 0.000 claims description 70
- 230000001360 synchronised effect Effects 0.000 claims description 4
- 230000003213 activating effect Effects 0.000 claims 2
- 238000012545 processing Methods 0.000 description 67
- 238000004891 communication Methods 0.000 description 60
- 230000004913 activation Effects 0.000 description 40
- 230000008569 process Effects 0.000 description 33
- 230000006870 function Effects 0.000 description 19
- 238000010586 diagram Methods 0.000 description 16
- 230000008859 change Effects 0.000 description 15
- 238000013528 artificial neural network Methods 0.000 description 13
- 238000004364 calculation method Methods 0.000 description 13
- 239000004065 semiconductor Substances 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 238000010801 machine learning Methods 0.000 description 5
- 230000000644 propagated effect Effects 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 238000009434 installation Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 239000000872 buffer Substances 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000010304 firing Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 238000011022 operating instruction Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/25—Routing or path finding in a switch fabric
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
- G06F30/347—Physical level, e.g. placement or routing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/177—Initialisation or configuration control
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/10—Packet switching elements characterised by the switching fabric construction
- H04L49/109—Integrated on microchip, e.g. switch-on-chip
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/25—Routing or path finding in a switch fabric
- H04L49/253—Routing or path finding in a switch fabric using establishment or release of connections between ports
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/30—Peripheral units, e.g. input or output ports
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2115/00—Details relating to the type of the circuit
- G06F2115/06—Structured ASICs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Evolutionary Computation (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Geometry (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Neurology (AREA)
- Logic Circuits (AREA)
- Multi Processors (AREA)
- Advance Control (AREA)
Abstract
本发明涉及初始化片上操作的方法和系统。一种配置包括多个硬件区块的集成电路的方法,包括:通过将多个硬件区块中除了最后一个硬件区块之外的每个硬件区块配置为处于数据转发状态来建立通过多个硬件区块的数据转发路径,其中将除了最后一个硬件区块之外的每个硬件区块配置为处于转发状态包括安装指定硬件区块处于数据转发状态的对应预定义时间长度的相应转发状态计数器;沿着数据转发路径,向多个硬件区块中的每个硬件区块供应包括该硬件区块的程序数据的相应程序数据分组;以及为多个硬件区块中的每个硬件区块安装相应的程序数据。
Description
本申请是申请日为2020年08月20日、申请号为202080074234.4的发明专利申请的分案申请。
技术领域
本公开涉及集成电路操作和不同集成电路硬件块的初始化操作。
背景技术
由处理器和微控制器芯片发送的数据通常包括编码信息,诸如指定数据将被递送到哪里的报头。因此,接收这种数据的每个其他处理器或微控制器必须包括解码逻辑以解码报头,并确定是应该保存接收的数据、安装接收的数据以初始化处理器或微控制器,还是将接收的数据转发到另一电路
发明内容
总的来说,本公开涉及半导体芯片的初始化配置,其中在芯片上执行的操作被显式地调度(这些操作可以被称为“确定性的”)。更具体地,本公开涉及被划分成单独硬件块的半导体芯片,其中数据根据显式调度在硬件块之间传输。不是构造硬件块以包括解码逻辑或类似特征,而是硬件块被预先配置以根据预定动作来处理数据,该解码逻辑或类似特征基于接收到的数据的内容来确定是安装、保存到存储器还是将接收到的数据转发到另一硬件块。以这种方式,硬件块可以被表征为关于接收到的数据的最终目的地“不可知(agnostic)”。
总的来说,在一些方面,本公开的主题体现在配置包括多个硬件区块(tile)的集成电路的方法中,其中该方法包括:通过将多个硬件区块中除了最后一个硬件区块之外的每个硬件区块配置为处于数据转发状态来建立通过多个硬件区块的数据转发路径,其中将除了最后一个硬件区块之外的每个硬件区块配置为处于转发状态包括安装相应的转发状态计数器,该转发状态计数器指定硬件区块处于数据转发状态的对应预定义时间长度;沿着数据转发路径,向多个硬件区块中的每个硬件区块供应包括该硬件区块的程序数据的相应程序数据分组;以及为多个硬件区块中的每个硬件区块安装相应的程序数据。
该方法的实施方式可以包括一个或多个以下特征。例如,在一些实施方式中,在接收到通过数据转发路径传递的第一数据分组时,安装多个硬件区块中除了最后一个硬件区块之外的每个硬件区块的转发状态计数器。第一数据分组可以包括程序数据分组,该程序数据分组包括多个硬件区块中的最后一个硬件区块的程序数据。
在一些实施方式中,为每个硬件区块安装相应的转发状态计数器包括在硬件区块的触发器表中定义转发状态计数器。当每个硬件区块的转发状态计数器达到对应预定义时间长度时,触发器表可以触发硬件区块的程序数据的安装,并使硬件区块退出数据转发状态。对于包括相应转发状态计数器的每个硬件区块,转发状态计数器的对应预定义时间长度是数据转发路径中后续硬件区块数量的函数。
在一些实施方式中,多个硬件区块中的每个硬件区块在本地存储器中存储该硬件区块的相应程序数据。
在一些实施方式中,每个硬件区块包括相应的转发状态计数器,该转发状态计数器将至少一个程序数据分组转发到数据转发路径中的至少一个其他硬件区块。
在一些实施方式中,每个硬件区块包括电路元件的脉动阵列(systolic array)。
在一些实施方式中,以一维阵列或二维阵列布置多个区块被。
在一些实施方式中,该方法还包括在多个硬件区块中的至少一些上安装相应启动计数器,该启动计数器指定直到硬件区块开始由安装在硬件区块上的程序数据定义的操作为止的对应预定义时间长度。多个硬件区块中除了最后一个硬件区块之外的每个硬件区块的相应启动计数器可以在接收到第一数据分组时被安装。每个启动计数器的预定义时间长度可以不同。每个启动计数器的预定义时间长度可以是数据转发路径中硬件区块数量的函数。可以定义每个启动状态计数器的预定义时间长度,使得多个硬件区块同时执行它们相应的程序数据。安装每个硬件区块的相应启动计数器可以包括在硬件区块的触发器表中定义启动计数器。
总的来说,在一些其他方面,本公开的主题可以体现在配置包括多个硬件区块的集成电路的方法中,其中该方法包括:建立通过除了多个区块的最后一个硬件区块的、多个区块的每个硬件区块的数据转发路径,其中建立数据转发路径包括通过以下顺序地配置数据转发路径的每个硬件区块:(a)为区块安装程序数据,(b)将区块配置为处于转发状态,以及(c)安装指定硬件区块处于数据转发状态的对应预定义时间长度的程序启动计数器。
这些方法的实施方式可以包括一个或多个以下特征。例如,在一些实施方式中,对于数据转发路径的特定区块,预定义时间长度是多个区块中尚未安装程序数据的区块的数量的函数。
在一些实施方式中,一旦每个程序启动计数器达到对应预定义时间长度,其上安装有程序启动计数器的区块开始根据安装在区块上的程序数据执行操作。
各种实施方式包括一个或多个以下优点。例如,在一些实施方式中,本文描述的过程允许配置位于要被配置的硬件块阵列内部的多个硬件块,而不需要内部硬件块直接连线到它们的数据源。在一些实施方式中,本文描述的过程允许硬件块的配置,而不需要在数据分组内对目的地数据进行编码。在一些实现中,本文描述的过程允许配置硬件块,而不需要在硬件块中安装解码逻辑。
一个或多个实施例的细节在附图和下面的描述中阐述。从说明书、附图和权利要求书中,其他特征和优点将变得显而易见。
附图说明
图1是图示被配置为根据调度操作进行操作的示例集成电路设备的示意图。
图2是图示用配置数据初始化硬件区块的示例过程的流程图。
图3是图示用于初始化一组硬件区块的过程的示例的流程图。
图4是图示触发器表的示例的示意图。
图5是图示能够被配置为根据调度操作进行操作的专用逻辑电路的示例的示意图。
图6是图示用于图5的ASIC芯片的区块的示例的示意图。
图7A、图8A、图9A、图10A、图11、图12A和图13A是图示在由ASIC实现的示例性过程中在不同时间通过ASIC的数据流的概况的示意图。
图7B、图8B、图9B、图10B、图12B和图13B是分别图示在与图7A、图8A、图9A、图10A、图12A和图13A相关联的时间在ASIC的单个区块内的数据流的细节的示意图。
具体实施方式
总的来说,本公开涉及初始化半导体芯片的配置,其中在芯片上执行的操作被显式地调度(这些操作可以被称为“确定性的”)。在一个示例中,半导体芯片可以被划分成单独的硬件块,其中数据根据显式调度在硬件块之间传输。更具体地,各个硬件块可以根据个性化的操作调度来操作,以作为整体执行由半导体芯片运行的协调程序。换句话说,各个硬件块根据时钟(例如,计数器)在调度的时间执行它们相应的操作,而不是例如响应于控制信号或根据处理指令的非调度顺序列表来执行操作。每个硬件块表示一组相关的复制逻辑,诸如芯片上的电子电路(例如,逻辑电路)的子集,其被配置为独立于由其他硬件块执行的任务来执行一组特定的任务。这些操作包括但不限于数据转发操作、初始化操作、矩阵操作、向量操作、标量操作、逻辑操作、存储器访问操作、外部通信操作或其组合。
并非将硬件块构造成包括确定接收到的数据是应该被安装(例如,用于初始化硬件块中的程序操作)、被保存在存储器中还是被转发到另一硬件块的解码逻辑或类似特征,本公开的硬件块被预先配置为以特定方式处理数据。例如,硬件块可以被预先配置为安装接收的数据(例如,初始化硬件块中的程序操作),将接收的数据保存到存储器,或者将接收的数据转发到另一硬件块。以这种方式,硬件块可以被表征为被预先配置为独立于接收到的数据以特定方式处理数据。硬件块可以被预先配置为在执行操作的调度期间在预定义时间/在预定义时间期间以特定方式处理数据,即,硬件块可以被配置为在预定义时间改变它们处理数据的方式。
每个硬件块执行专用于该硬件块的操作的单独调度。每个硬件块的单独调度一起表示由芯片作为整体执行的完整程序(例如,神经网络操作)。然而,在执行这些操作之前,指定要被执行的特定操作的程序数据被传送到并被安装在每个硬件块上。为了向每个硬件块提供程序数据而不包括解码逻辑,一种选择是将程序数据源直接连线到每个块。对于大量的硬件模块,布线量可能需要大量的空间,并且作为解决方案变得不可行。
替代地,如本公开中所描述的,只有一些硬件块(例如,二维块阵列中最外面的硬件块)被直接绑定到程序数据源。为了到达位于阵列内部的硬件块,多组硬件块可以被置于数据转发状态,使得每个组建立到内部块的数据转发路径。在特定于该硬件块的预定时间量之后,处于转发状态的每个硬件块可以自动重新配置进入新的非数据转发状态。例如,一个或多个硬件块可以自动重新配置进入存储在硬件块中接收的数据的数据存储状态。替代地或附加地,一个或多个硬件块可以自动重新配置进入初始化将由硬件块运行的程序的数据初始化状态,其中程序由接收的数据定义。在一些情况下,硬件块可以在预定的计数器时间执行由程序数据指定的调度的操作。
在一些实施方式中,包括硬件块的半导体芯片是被设计为执行机器学习操作的专用集成电路(ASIC)。ASIC包括例如为特殊用途定制的集成电路(IC)。例如,ASIC可以被设计为执行机器学习模型的操作,包括例如作为深度神经网络的一部分来识别图像中的对象、机器翻译、语音识别或其他机器学习算法。例如,当被用作神经网络的加速器时,ASIC能够接收神经网络的输入,并为输入计算神经网络推断。到神经网络层的数据输入,例如,到神经网络的输入或神经网络的另一层的输出,能够被称为激活输入。能够根据与神经网络的层相关联的相应的权重输入集来计算推断。例如,一些或所有层可以接收激活输入集,并根据该层的权重输入集来处理激活输入,以生成输出。此外,为计算神经网络推断而执行的计算操作的重复性质有助于显式地调度芯片操作。
图1是图示根据本公开的集成电路芯片10的简化示例的示意图。芯片10能够是通用集成电路或专用集成电路。例如,芯片10能够是ASIC、现场可编程门阵列(FPGA)、图形处理单元(GPU)或任何其他合适的集成电路。芯片10包括以阵列布置的多个硬件区块14(标记为“A”、“B”和“C”),在本文中也称为“区块”。硬件区块14可以使用数据总线线路16彼此耦合。尽管图1中仅示出了三个硬件区块14,但是芯片10可以包括其他数量的硬件区块,诸如10、20、30、40、50、100或200个等。此外,尽管硬件区块14被描绘为以线性阵列布置,但是硬件区块14也可以以其他配置布置,诸如具有多行和多列的二维阵列。芯片10也包括通信接口12。通信接口12使用数据总线17耦合到至少第一硬件区块14(例如,区块A)。通信接口12可以包括例如一组或多组串行器/解串器(SerDes)接口和通用输入/输出(GPIO)接口。SerDes接口被配置为接收ASIC 10的数据(例如,如本文所描述的硬件区块的配置数据或程序数据)并将数据从ASIC 10输出到外部电路。出于说明和讨论的目的,以简化的方式示出了芯片10。然而,在一些实施方式中,芯片10将包括附加组件,诸如存储器和适合于芯片10目的的其他电路。
硬件区块14表示复制逻辑集,诸如芯片10上的电子电路(例如,逻辑电路)的子集,其被设计为独立于由其他硬件区块14执行的任务来执行特定的一组任务。每个硬件区块14能够表示相同或不同类型的电路,例如,硬件区块A、B和C能够表示被设计为执行机器学习功能的专用芯片的区块(下面将更详细地讨论)。例如,硬件区块A、B和C能够表示被配置为执行矩阵运算的神经网络的计算节点。
硬件区块14的操作可以根据芯片10上的公共时钟信号在预定时间执行。每个硬件区块14根据其自身的个性化操作调度进行操作。每个操作调度表示将由芯片10作为整体执行的程序的一部分(例如“子程序”),并且每个操作调度表示将由相应的单独硬件区块14执行的程序的部分。操作调度包括一组将由硬件区块14在预定计数器值下执行的程序操作。换句话说,操作调度能够被认为是触发特定操作(例如,参见图4)由特定硬件区块14在预调度的“芯片时间”执行的定时器列表。例如,每个调度能够包括执行计数器值(例如,执行时间)的列表,以及要在计数器值处执行的相关操作。在一些示例中,每个操作由调度的计数器值和数据表示,诸如操作码,该数据标识在调度的计数器值将由特定硬件区块14执行的操作。由硬件区块14执行的操作可以与由其他硬件区块执行的操作相协调。可以使用“触发器表”在每个区块上实现操作调度,下面将更详细地描述。
如图1所示,每个硬件区块14能够包括控制电路18、本地存储器20和一个或多个计算单元22。在一些实施方式中,由操作调度指定的程序能够被存储在硬件区块14的本地存储器20中。计算单元22表示被配置为执行特定计算(例如,加法、减法、乘法、逻辑运算等)的电路。控制电路18能够被配置为读取和执行存储在存储器20中的程序的操作。例如,控制电路18能够包括控制元件,诸如在存储器20、输入缓冲器或总线线路16和适当的计算单元22之间路由数据的多路复用器和触发器,以执行调度的操作。如本文所述,程序的操作调度能够用作一系列定时器,一系列定时器触发控制电路18在特定的计数器值开始执行特定的功能。因此,操作调度能够触发控制电路18的控制元件将硬件区块14内的数据路由到适当的计算单元22,以便在调度的时间执行调度的操作。
如本文所解释的,定义硬件区块的操作调度的程序数据必须首先被提供给每个硬件区块14并在其上初始化。为了到达不直接耦合到通信接口12的区块,一组硬件区块14(例如,区块A和B)可以被单独置于数据转发中以建立数据转发路径。然后,可以从通信接口12沿着转发路径递送各个区块14的程序数据。一旦每个硬件区块14接收到其对应的程序数据,区块14可以在预定时间量之后自动重新配置进入新的非数据转发状态。在这种新状态下,区块14可以被初始化以执行由程序数据定义的操作,或者执行一些其他功能。
图2是描绘用于加载和初始化硬件区块以便执行预定义程序的示例性过程(30)的流程图。关于图1所示的示例性芯片10描述了过程(30),但是该过程也适用于包括硬件区块阵列的其他芯片。出于本公开的目的,配置数据分组包括使区块改变状态的配置数据,例如,从其中区块可操作来读取接收的数据分组中的数据的状态改变到其中区块可操作来转发接收的数据分组的状态,或者从其中区块可操作来转发接收的数据分组的状态改变到其中区块可操作来读取接收的数据分组中的数据的状态。出于本公开的目的,程序数据分组包括定义硬件区块的操作调度的程序数据。
在第一步骤(32)中,沿着硬件区块14阵列中的一组硬件区块14(例如,区块A、B和C)建立数据转发路径。通过建立数据转发路径,来自通信接口12的数据能够到达没有通过通信总线线路16直接耦合到接口12的内部区块14。建立数据转发路径包括将除了阵列中最后一个硬件区块(例如,硬件区块C)之外的每个硬件区块14配置(33)为处于转发状态达对应预定义时间量。当处于转发状态时,区块14可操作来经由一个或多个数据链路将接收到的数据分组转发到数据转发路径中的一个或多个其他区块14。
将除了阵列中最后一个硬件区块之外的每个硬件区块14配置为处于转发状态的过程(33)包括向除了最后一个区块14之外的每个硬件区块14连续递送将区块14配置为处于转发状态的对应配置数据。递送配置数据可以以多种不同的方式来实现。例如,在一些实施方式中,递送配置数据分组包括向阵列中的第一区块递送具有多个报头的单个数据分组。数据分组的每个报头可以包含将区块配置为改变状态的区块不可知数据(tile-agnostic data)。在接收到数据分组时,阵列中的第一区块将读取数据分组的第一报头,并基于第一报头的配置数据改变状态。例如,配置数据可以将区块的状态改变为转发状态。然后,数据分组可以由阵列中的第一区块传递到下一个(第二)区块,其中第二区块读取数据分组的第二报头,并基于第二报头的配置数据改变状态。例如,配置数据可以将第二块的状态改变为转发状态。这可以对阵列中的每个区块或者仅对N区块阵列的前N-1个区块继续进行。
在一些实施方式中,单独的数据分组被发送到区块,每个数据分组具有其自身的配置数据。例如,具有配置数据的第一数据分组可以被递送到第一区块,之后第一区块可以安装配置数据(例如,将第一区块状态改变为转发状态)。然后具有配置数据的第二数据分组可以被递送到第一区块,第一区块将第二数据分组转发到阵列中的第二区块。在接收到第二数据分组时,第二区块可以安装配置数据(例如,将第二区块状态改变为转发状态)。这可以对阵列中的每个区块或者仅对N区块阵列的前N-1个区块继续进行。
沿着硬件区块A、B和C建立转发数据路径的示例性过程也在图3的时间流程图中图示。例如,在一个示例中,诸如通信接口12的数据源将通过在时间t1向图1所示的第一硬件区块A递送包括配置数据的第一数据分组而开始。在接收到包含配置数据的第一数据分组时,第一硬件区块A不存储第一数据分组。相反,响应于接收到第一数据分组,第一硬件区块A被配置为在数据转发状态下操作。在数据转发状态下,硬件区块A将转发其接收的数据,而不是将接收的数据存储在本地存储器中。例如,配置数据可以使区块A被配置为将数据转发到阵列中的下一个相邻区块,诸如区块B。因此,配置数据包括当被安装在第一区块A中时使第一区块被置于转发状态的数据。第一硬件区块A能够读取第一数据分组,因为其被设置在“监听配置分组”状态。也就是说,第一硬件区块A此时已经被配置为读取到达第一硬件区块的数据分组。在一些实施方式中,在其中芯片10被重置的重置操作之后,可以设置每个区块14的这种配置状态。因此,递送的第一分组,即配置“数据转发状态”的分组,包含区块不可知数据,该数据仅简单地配置区块来转发数据并停止“监听”
更一般地,硬件区块阵列中的每个硬件区块可以被初始化为被称为“监听配置分组”的状态,在本文中也被称为“监听”状态。如上所述,这种监听配置状态可以在其中芯片10被重置的重置操作之后实现。在监听配置状态下接收到数据分组时,监听状态下的每个区块将读取并“消费”报头,该报头包含配置区块以改变状态的区块不可知数据,例如切换到转发状态并停止“监听”配置数据。因此,被配置为处于监听状态的区块可以不需要解码逻辑。此外,还应注意的是,在一些实施方式中,存在数量与沿着特殊状态改变操作的路径的硬件区块的数量一样多的包含提供给阵列的区块配置数据的报头,因为每个块将消费一个报头。例如,以相同方式改变N个区块(例如,创建由N个区块构成的转发路径)可以需要递送一串N个连续数据分组,每个分组包括使区块改变到不同状态的配置数据(例如,使区块从监听状态改变到转发状态的配置数据)。
因此,在递送第一数据分组之后,数据源(例如,通信接口12)在时间t2向第一硬件区块A递送包括配置数据的第二数据分组。因为硬件区块A处于转发状态,所以区块A将第二数据分组转发到阵列中的另一区块。例如,区块A可以将第二数据分组转发到硬件区块B。在接收到包含配置数据的第二数据分组时,处于监听状态的第二硬件区块B不存储第二数据分组。相反,响应于接收到并读取第二数据分组,第二硬件区块B被配置为在数据转发状态下操作。在数据转发状态下,硬件区块B将转发其接收的数据,而不是将接收的数据存储在本地存储器中。例如,第二数据分组中的配置数据可以使区块B被配置为将数据转发到阵列中的下一个相邻区块,例如区块C。
鉴于上述情况,区块A和B两者都处于转发状态,沿着硬件区块A、B和C建立数据转发路径。因为硬件区块C是阵列内的最后一个区块,所以不需要将硬件区块C配置为处于转发状态。相反,区块C可以保持被配置在“监听”状态,准备接收和安装程序数据以执行本文描述的调度操作。
因为可能希望也在剩余的硬件区块中接收并安装程序数据,所以被配置处于数据转发状态的硬件区块被调度为在预定义的时间点顺序退出数据转发状态。例如,区块A和B可以被配置为在最后一个硬件区块(例如,硬件区块C)已经接收并安装了其程序数据之后,顺序退出它们相应的数据转发状态。以这种方式,处于转发状态的每个硬件区块转移回其能够接收并安装打算用于该硬件区块的程序数据的状态。
配置硬件区块以退出转发状态可以包括,例如在被置于转发状态的每个区块上安装相应的转发状态计数器。在区块中安装转发状态计数器可以作为区块从监听状态到转发状态的状态改变的一部分而发生,例如当区块接收到配置数据分组时。转发状态计数器包括递减计数(或递增计数)直到经过预定义时间段为止的计数器。当转发状态计数器递减计数(或递增计数)时,其上安装该计数器的硬件区块将保持转发状态。当转发状态计数器达到预定义的时间段时,计数器可以引发触发器激发使得硬件区块退出转发状态。例如,在一些实施方式中,触发器可以激发使得硬件区块14被重新配置,使得对于在区块14处接收的任何新的数据分组,该数据分组被保存到区块14上的本地存储器(例如,存储器20)。替代地或附加地,触发器可以使硬件区块14重新配置,使得它安装来自存储器的数据或者安装来自区块14接收的任何新的数据分组的数据。替代地或附加地,触发器可以使硬件区块14重新配置,使得区块返回到监听状态。安装在区块14上的计数器可以与芯片10上的全局时钟或者在区块14上运行的本地时钟同步。预定义的时间段可以包括多个时钟周期。例如,预定义的时间段可以包括2、5、10、20、50或100个时钟周期等。预定义的时间段可以在[2,100]个时钟周期的范围内,例如在[10,50]个时钟周期的范围内,诸如20个时钟周期。计数器的预定义时间段可以在配置数据中被定义,该配置数据在接收到配置数据分组时由区块读取。
被配置处于转发状态的硬件区块14(例如,区块A和B)不应该一下子退出它们相应的转发状态。相反,由于阵列中的硬件区块14共享转发数据路径,因此它们各自将在不同的时间接收它们的程序数据分组。因此,每个区块在不同的时间退出其转发状态,并且每个转发状态计数器的预定义时间长度不同。为每个转发状态计数器指定的预定义时间长度是当前硬件区块向其转发数据分组的数据转发路径内的硬件区块数量的函数。例如,在由图1的区块A、B和C建立的数据转发路径中,存在第一区块A向其转发数据的两个硬件区块(B和C)。因此,与区块A上的转发状态计数器相关联的预定义时间段是向区块B和C发送程序数据以及在区块B和C上安装程序数据的时间的函数。参考图3,这可以发生在例如与第一硬件区块A被配置处于转发状态的时间(在t1)和当第一硬件区块A接收到意欲被安装在区块A上的数据程序分组的时间(在t5)之间的差值相等的时间,即在t5–t1的时间。类似地,在由图1的区块A、B和C建立的数据转发路径中,存在第二区块B向其转发数据的一个硬件区块(C)。因此,与区块B上的转发状态计数器相关联的预定义时间段是向区块C发送程序数据和在区块C上安装程序数据的时间的函数。参考图3,这可以发生在例如与第二硬件区块B被配置在转发状态下的时间(在t2)和当第二硬件区块B接收到意欲被安装在区块B上的数据程序分组的时间(在t4)之间的差值相等的时间,即在t4–t2的时间。可以预先计算与每个转发状态计数器相关联的特定时间,并将其包括在与第一数据分组和第二数据分组一起提供的配置数据中。硬件区块C未被设置为转发状态,因此未被配置为包括转发状态计数器。
在转发数据路径被建立之后,数据源(例如,通信接口12)沿着数据转发路径向硬件区块14提供(34)它们相应的程序数据分组。程序数据分组包括定义硬件区块的操作调度的程序数据。程序数据分组可以被顺序地提供,使得数据转发路径中的最后一个硬件区块(例如,离数据源最远的硬件区块)首先接收其程序数据,而数据转发路径中的第一个硬件区块(例如,离数据源最近的硬件区块)最后接收其程序数据。当接收到程序数据分组时,它们可以被安装(36)在硬件区块上。
例如,在由图1中的硬件区块A、B和C建立的数据转发路径中,通信接口12在时间t3将第一程序数据分组递送到硬件区块A,硬件区块A然后将第一程序数据分组转发到硬件区块B,硬件区块B然后将第一程序数据分组转发到硬件区块C。在接收到第一程序数据分组时,硬件区块C可以将第一程序数据分组保存到本地存储器(例如,存储器20)和/或安装包含在该数据分组中的程序数据。
随后,通信接口12在时间t4向硬件区块B发送第二程序数据分组。然而,在硬件区块B能够保存和/或安装包含在第二程序数据分组中的程序数据之前,安装在硬件区块B上的转发状态计数器激发触发器,该触发器使硬件区块B从转发状态改变到被配置为保存和/或安装硬件区块B接收的数据分组的新状态。如本文所解释的,这种触发可以发生在t4–t2的时间。以这种方式,第二程序数据分组被保留在硬件区块B处,而不是被转发到硬件区块C。
随后,通信接口12在时间t5向硬件区块A发送第三程序数据分组。然而,在硬件区块A能够保存和/或安装包含在第二程序数据分组中的程序数据之前,安装在硬件区块A上的转发状态计数器激发触发器,该触发器使硬件区块A从转发状态改变到被配置为保存和/或安装硬件区块A接收的数据分组的新状态。如本文所解释的,这种触发可以发生在t5–t1的时间。以这种方式,第三程序数据分组被保留在硬件区块A处,而不是被转发到硬件区块B。
在一些实施方式中,希望阵列中的所有硬件区块同时执行它们安装/初始化的程序。在这种情况下,首先接收并初始化/安装它们的程序数据的硬件区块等待,直到阵列中的其他硬件区块也已经接收并初始化/安装了它们相应的程序数据为止。所有硬件区块开始执行它们安装的程序数据的时间被称为“启动(kickoff)”时间。为了确保每个硬件区块同时启动,数据程序分组的安装(36)可以包括,例如,配置每个硬件区块以包括对应的程序启动计数器(37),在本文中也称为启动状态计数器。
启动状态计数器包括递减计数(或递增计数)直到经过预定义时间段的计数器。为每个硬件区块指定的预定义时间段指定了在该区块内的程序数据中定义的操作开始之前的时间。当启动状态计数器递减计数(或递增计数)时,其上安装计数器的硬件区块将维持保持状态,在保持状态期间不执行任何操作。当启动状态计数器达到预定义时间段时,计数器可以引发触发器激发,使硬件区块开始执行由区块内的程序数据定义的操作。每个启动状态计数器的预定义时间段被计算为以下值:该值导致阵列内的所有硬件区块同时执行它们的安装/初始化程序。如本文所解释的,每个启动状态计数器的预定义时间段可以不同。
例如,在一些实施方式中,触发器可以激发,使硬件区块14开始执行在程序数据中定义的操作,该程序数据先前已经在区块14处被接收并存储在区块的本地存储器(例如,存储器20)中。预定义的间段可以包括多个时钟周期。例如,预定义时间段可以包括2、5、10、20、50或100个时钟周期等。如本文所解释的,安装在区块14上的启动状态计数器相对于全局时钟与其他启动状态计数器同步。
因为阵列中的硬件区块14共享转发数据路径,所以它们将分别在不同的时间接收并安装它们的程序数据分组。也就是说,每个区块14在它能够开始执行操作之前等待不同的时间量,并且每个启动状态计数器的预定义时间长度不同。为每个启动状态计数器指定的预定义时间长度可以是,例如,尚未接收并安装它们的程序数据的硬件区块的数量的函数。这确保了阵列中的所有区块同时执行它们安装/初始化的程序。例如,在由图1的区块A、B和C建立的数据转发路径中,一旦硬件区块C接收到它的程序数据,区块C就等待,直到它安装了它自己的程序数据并且直到另外两个硬件区块(A和B)接收并安装了它们相应的程序数据为止。因此,与区块C上的启动状态计数器相关联的预定义时间段可以是,例如向区块A和B发送程序数据并在其上安装程序数据所需的时间以及在区块C上安装程序数据所需的时间的函数。参考图3,这可以发生在,例如与所有硬件区块启动的时间(在t6)和最后一个硬件区块C接收到意欲被安装在区块C上的数据程序分组的时间(在t3)之间的差值相等的时间,即在t6-t3的时间。
类似地,一旦硬件区块B接收到它的程序数据,区块B就等待,直到它安装了它自身的程序数据并且直到另一硬件区块(区块A)接收并安装了其相应的程序数据为止。因此,与区块B上的启动状态计数器相关联的预定义时间段可以是,例如向区块A发送程序数据并在区块A上安装程序数据的时间以及在区块B上安装程序数据的时间的函数。参考图3,这可以发生在,例如与所有硬件区块启动的时间(在t6)和硬件区块B接收到意欲被安装在区块B上的数据程序包的时间(在t4)之间的差值相等的时间,即在t6-t4的时间。
类似地,一旦硬件区块A接收到它的程序数据,区块A在能够启动程序数据的执行之前等待,直到它安装了它自身的程序数据。因此,与区块A上的启动状态计数器相关联的预定义时间段可以,是例如在区块A上安装程序数据所需的时间的函数。参考图3,这可以发生在,例如与所有硬件区块启动的时间(在t6)和硬件区块A接收到意欲被安装在区块A上的数据程序分组的时间(在t5)之间的差值相等的时间,即在t6-t5的时间。
与每个启动状态计数器相关联的特定时间可以被预先计算,并被包括在与每个程序数据分组一起提供的程序数据中。如本文所解释的,可以计算并定义与每个启动状态计数器相关联的不同特定时间,使得所有区块同时执行它们的安装/初始化程序。在一些实施方式中,阵列中的每个区块可以被配置为包括对应的启动状态计数器。例如,区块A、B和C中的每一个可以被配置为包括具有不同的预定义时间段的对应启动状态计数器以等待执行其存储的程序数据。
在一些实施方式中,阵列中的至少一些区块可以被配置为包括对应的启动状态计数器。例如,如果阵列中有N个区块,则N-1个区块可以被配置为包括对应的启动状态计数器。这可以包括配置阵列中除了阵列的第一区块之外的所有区块包括对应的启动状态计数器。使用本申请的示例,区块B和C中的每一个可以被配置为包括具有不同预定义时间段的对应的启动状态计数器以等待执行其存储的程序数据。但是区块A可以不被配置为具有对应的启动状态计数器。在这种情况下,区块B和C可以等待,直到它们的启动状态计数器被触发以执行它们接收的程序数据,但是区块A在接收到程序数据时,可以立即执行程序数据,使得区块A、B和C中的每一个同时执行它们相应的程序数据。
如本文所解释的,本文描述的芯片不同于传统的处理器,在传统的处理器中,指令在每个周期发出,并且包含用于芯片功能单元的各种配置的源和目的寄存器。相反,芯片上的每个硬件区块由被称为配置状态的一组逻辑状态控制。配置状态描述硬件区块是被配置为转发数据、在存储器中存储数据、安装数据还是执行程序以及其他功能。取决于其中硬件区块被配置的特定状态,该状态将指定硬件区块中各种多路复用器的控制信号,以及硬件区块中存储器和寄存器的读取和写入操作。通过触发器表更新硬件区块的配置状态(例如,切换到转发状态或其他状态)。
图4是图示触发器表40的示例的示意图。触发器表40是一组可寻址的配置状态更新,当满足特定条件时应用每一个配置状态更新。例如,在如本文所述在硬件区块中安装转发状态计数器时,可以将条件和相关配置添加到触发器表40中。当转发状态计数器递减计数到0(或者递增计数到预定义时间段)时,已经被添加到表40中的条件被满足,因此激发触发器,并且与该条件相关联的配置被应用到硬件区块。启动状态计数器可以以类似的方式实现。
触发器表40包括多个条目50。每个条目50可以包括,例如触发器ID 52、地址54、配置空间更新56、使能标志58以及一个或多个附加标志60。触发器ID 52描述触发器类型,并充当指向任何相关状态的指针。地址54和配置空间更新56的组合描述如何更新硬件区块的配置状态。使能标志58指定触发器当前是否是激活的,并且可以在任何时候激发。附加标志60可以指定与触发器相关的其他方面,诸如触发器是否在上一个时钟周期内被激发。触发器表40可以包括多个条目,包括例如8、16、32或64个条目。触发器表40可以通过在存储器中本地存储触发器表40的不同配置状态并使用硬件区块中的一个或多个多路复用器来选择状态来实现。
已经描述了修改区块的配置状态的特定实现。然而,其他实现也是可能的。例如,在一些实施方式中,不是如本文所述创建转发路径,然后将程序数据顺序地加载到区块,而是可以在将区块配置为处于转发状态的同时将程序数据安装到区块,并且安装启动状态计数器以开始区块内的程序。例如,使用图1所示的区块结构,将描述用于加载程序数据的替换或附加示例性过程。例如,在一些实施方式中,通信接口12向第一区块(例如,区块A)递送包含配置数据(例如,作为数据分组的报头)和程序数据(例如,作为数据分组的有效载荷)的第一数据分组。当由区块A读取时,配置数据使得区块A将来自数据分组的程序数据存储在本地存储器中和/或配置逻辑电路以执行预定义的一组操作。此外,配置分组可以将区块A配置为置于转发状态,同时初始化启动状态计数器。如本文所解释的,启动状态计数器可以是对预定时间进行计数的计数器,直到使区块改变其配置状态以使得安装在区块上的程序开始运行(即,“启动”)。区块A中的启动状态计数器计数的时间长度取决于区块A之后的区块所需的数据量,而不是区块A之前的区块所需的数据量。例如,如果区块A之后有两个区块,则区块A中的启动状态计数器的值基于将配置和程序数据转发到接下来的两个区块所花费的时间来确定。
此外,应当注意的是,配置区块以安装程序数据同时将区块置于转发状态可以包括设置关于转发状态的单独的定时器,该定时器被设置为0个时钟周期。
一旦第一区块处于转发状态,通信接口12递送第二数据分组。第二数据分组可以通过处于转发状态的第一区块并到达阵列中的第二区块(例如,区块B)。第二数据分组类似于第一数据分组。例如,第二数据分组包含配置数据(例如,作为第二数据分组的报头)和程序数据(例如,作为第二数据分组的有效载荷)。当由第二区块读取时,配置数据使第二区块将来自第二数据分组的程序数据存储在本地存储器中和/或配置逻辑电路以执行预定义的一组操作。此外,配置分组可以将第二区块配置为置于转发状态,同时初始化启动状态计数器。第二区块中的启动状态计数器的值由阵列中第二区块之后的剩余区块所要转发和配置的数据量来确定。
在该实施方式中,除了路径中的最后一个区块(例如,区块C)之外,路径中的每个区块以与第一区块和第二区块相同的方式被配置。对于最后一个区块,通信接口12递送最后一个数据分组。最后一个数据分组包括配置数据和程序数据。与之前的数据分组相反,最后一个区块不被配置为处于转发状态。相反,最后一个区块被配置为安装程序数据,并且一旦安装完成就开始使用程序数据执行操作。同时,路径中每个先前区块(例如,区块A和B)的启动状态计数器达到它们的极限,并且使它们相应的区块开始使用被本地保存到它们的区块的程序数据来执行操作。以这种方式,可以说是通过通信接口直接对区块进行编程,其中转发路径当程序数据被安装在区块上并且启动状态计数器被初始化时被建立,这与通过首先建立转发路径,然后在转发路径被建立之后发送每个区块的程序数据而被间接编程相反,也如本文所述。
图5是图示专用逻辑电路的示例的示意图,该专用逻辑电路可以被配置为根据调度的操作进行操作,并且可以如本文所述进行初始化。例如,专用逻辑电路可以包括ASIC100。ASIC 100包括各种不同类型的硬件块,这些硬件块可以被配置为根据单独的操作调度来执行ASIC 100的全部操作。可以根据单独的操作调度操作的示例硬件块包括区块102和向量处理单元104(类似于图1中的硬件区块14)以及通信接口108(类似于图1中的通信接口12)。
更具体地,ASIC 100包括多个区块102,其中一个或多个区块102包括被配置为执行诸如乘法操作和加法操作的操作的专用电路。具体而言,每个区块102能够包括单元的计算阵列(例如,类似于图1的计算单元22),其中每个单元被配置为执行数学运算(例如,参见图6所示的示例性区块200,和本文描述的)。在一些实施方式中,区块102以网格图案布置,其中区块102沿着第一维度101(例如,行)和沿着第二维度103(例如,列)布置。例如,在图5所示的示例中,区块102被划分成四个不同的部分(110a、110b、110c、110d),每个部分包含以18个区块向下乘16个区块的网格排列的288个区块。在一些实施方式中,图5所示的ASIC100可以被理解为包括被细分/布置成单独区块的单个单元脉动阵列,其中每个区块包括单元的子集/子阵列、本地存储器和总线线路(例如,参见图6)。
ASIC 100还包括向量处理单元104。向量处理单元104包括被配置为接收来自区块102的输出并基于从区块102接收的输出来计算向量计算输出值的电路。例如,在一些实施方式中,向量处理单元104包括被配置为对从区块102接收的输出执行累加操作的电路(例如,乘法电路、加法电路、移位器和/或存储器)。替代地或附加地,向量处理单元104包括被配置为将非线性函数应用于区块102的输出的电路。替代地或附加地,向量处理单元104生成归一化值、池化值或两者。向量处理单元的向量计算输出能够被存储在一个或多个区块中。例如,向量计算输出能够被存储在与区块102唯一关联的存储器中。替代地或附加地,向量处理单元104的向量计算输出能够被传输到ASIC 100外部的电路,例如作为计算的输出。此外,区块102和向量处理单元104的各个操作调度的操作协调区块输出到向量处理单元104的传输。
在一些实施方式中,向量处理单元104被分成分段,使得每个分段包括被配置为从对应的区块102的集合接收输出并基于接收的输出计算向量计算输出的电路。例如,在图5所示的示例中,向量处理单元104包括沿第一维101延伸的两行,每行包括布置在32列中的32个分段106。每个分段106包括电路(例如,乘法电路、加法电路、移位器和/或存储器),电路被配置为基于来自对应的一列区块102的输出(例如,累加和)来执行向量计算,如本文所解释的。向量处理单元104能够位于区块102的网格的中间,如图5所示。向量处理单元104的其他位置布置也是可能的。
ASIC 100也包括通信接口108(例如,接口1010A、1010B)。通信接口108包括一组或多组串行器/解串器(SerDes)接口和通用输入/输出(GPIO)接口。SerDes接口被配置为接收ASIC 100的指令(例如,ASIC 100的各个硬件区块的操作调度)和/或输入数据,并将数据从ASIC 100输出到外部电路。例如,SerDes接口能够被配置为以32Gbps、56Gbps或任何合适的数据速率通过包括在通信接口108内的SerDes接口组发送和接收数据(例如,操作调度和/或输入/输出数据)。例如,ASIC 100可以在开启时运行引导程序。GPIO接口可以用于将操作调度加载到ASIC 100上,以执行特殊类型的机器学习模型。
ASIC 100还包括被配置为在通信接口108、向量处理单元104和多个区块102之间传送数据的多条可控总线线路(例如,参见图6)。可控总线线路包括例如沿着网格的第一维度101(例如行)和网格的第二维度103(例如列)二者延伸的布线。沿着第一维度101延伸的可控总线线路的第一子集能够被配置为在第一方向上(例如,向图5的右侧)传输数据。沿着第一维度101延伸的可控总线线路的第二子集可以被配置为在第二方向上(例如,向图5的左侧)传输数据。沿着第二维度103延伸的可控总线线路的第一子集可以被配置为在第三方向上(例如,向图5的顶部)传输数据。沿着第二维度103延伸的可控总线线路的第二子集可以被配置为在第四方向(例如,向图5的底部)传输数据。如上所述,不同硬件块的各个操作调度能够协调对诸如可控总线线路的共享资源的访问,以防止ASIC 100内的通信错误。
每条可控总线线路包括多个传送器元件,诸如触发器,用于根据时钟信号沿线路传送数据。通过可控总线线路传输数据能够包括在每个时钟周期将数据从可控总线线路的第一传送器元件移位到可控总线线路的第二相邻传送器元件。在一些实施方式中,在时钟周期的上升沿或下降沿,数据通过可控总线线路传送。例如,在第一时钟周期,在可控总线线路的第一传送器元件(例如,触发器)上存在的数据能够在第二时钟周期被传输到可控总线线路的第二传送器元件(例如,触发器)。在一些实施方式中,传送器元件能够彼此以固定距离周期性地间隔开。例如,在一些情况下,每个可控总线线路包括多个传送器元件,每个传送器元件位于对应的区块102内或附近。
每条可控总线线路也包括多个多路复用器和/或多路解复用器。可控总线线路的多路复用器/多路解复用器被配置为在总线线路和ASIC芯片100的组件之间传输数据。例如,可控总线线路的多路复用器/多路解复用器能够被配置为向和/或从区块102、向和/或从向量处理单元104,或者向和/或从通信接口108传输数据。在区块102、向量处理单元104和通信接口之间传输数据能够通过操作调度来协调。操作调度能够在每个计数器协调哪个ASIC 100硬件块正在向控制器发送数据或从其接收数据。在任何给定计数器时间调度的操作可以确定,例如,什么数据从源(例如,区块102内的存储器或向量处理单元104)传送到可控总线线路,或者,什么数据从可控总线线路传送到宿(例如,区块102内的存储器或向量处理单元104)。
可控总线线路被配置为在本地级别上被控制,使得每个区块、向量处理单元和/或通信接口包括其自身的一组控制元件,用于操纵可控总线线路穿过该区块、向量处理单元和/或通信接口。例如,每个区块、1D向量处理单元和通信接口可以包括对应的一组传送元件、多路复用器和/或多路解复用器,用于控制去往和来自该区块、1D向量处理单元和通信接口的数据传输。因此,每个区块、1D向量处理单元和通信接口的操作调度能够触发相应的硬件块向其传送器元件提供适当的控制信号,以便根据所调度的操作来路由数据。
为了最小化与ASIC芯片100的操作相关联的延迟,区块102和向量处理单元104能够被定位以减少数据在各种组件之间行进的距离。在特定实施方式中,区块102和通信接口108二者能够被分成多个部分,其中区块部分和通信接口部分都被布置使得数据在区块和通信接口之间行进的最大距离被减小。例如,在一些实施方式中,第一组区块102能够被布置在通信接口108的第一侧上的第一部分中,并且第二组区块102能够被布置在通信接口的第二侧上的第二部分中。结果,与所有区块102被布置在通信接口一侧的单个部分中的配置相比,从通信接口到最远区块的距离可以减半。
可选地,区块可以被布置在不同数量的部分中,诸如四个部分。例如,在图5所示的示例中,ASIC 100的多个区块102被布置在多个部分110(110a、110b、110c、110d)中。每个部分110包括以网格图案布置的相似数量的区块102(例如,每个部分110可以包括排列在16行和16列中的256个区块)。通信接口108也被划分成多个部分:第一通信接口1010A和第二通信接口1010B,被布置在区块102的部分110的任一侧。第一通信接口1010A能够通过可控总线线路耦合到ASIC芯片100左侧的两个区块部分110a、110c。第二通信接口1010B能够通过可控总线线路耦合到ASIC芯片100右侧的两个区块部分110b、110d。结果,与仅单个通信接口可用的布置相比,数据向和/或从通信接口108行进的最大距离(以及因此与数据传播相关联的延迟)能够减半。区块102和通信接口108的其他耦合布置也可以减少数据延迟。通过向可控总线线路的传送器元件和多路复用器提供控制信号,能够对区块102和通信接口108的耦合布置进行编程。
在一些实施方式中,一个或多个区块102被配置为发起相对于ASIC 100内的可控总线线路和/或其他区块(本文称为“控制区块”)的读取操作和写入操作。ASIC 100内的剩余区块能够被配置为基于输入数据执行计算(例如,计算层推断)。在一些实施方式中,控制区块包括与ASIC 100内的其他区块相同的组件和配置。控制区块能够作为ASIC 100的一个或多个额外区块、一个或多个额外行或一个或多个额外列被添加。例如,对于区块102的对称网格,其中每个区块102被配置为对输入数据执行计算,能够包括一行或多行额外的控制区块来处理对输入数据执行计算的区块102的读取和写入操作。例如,每个部分110包括18行区块,其中最后两行区块可以包括控制区块。在一些实施方式中,提供单独的控制区块增加了用于执行计算的其他区块中的可用存储量。提供单独的控制区块也可以帮助操作调度之间的数据传输操作的协调。例如,使用控制区块来控制关于ASIC 100内的可控总线线路和/或其他区块的读取和写入操作可以减少需要被检查调度冲突的各个调度的数量。换句话说,如果控制区块的操作调度被协调以避免在同一计数器时间“双重预订”使用特定可控总线线路,那么就有理由保证在可控总线线路上不会发生通信错误。然而,如本文所述,专用于提供控制的单独的区块不是必需的,并且在一些情况下,不提供单独的控制区块。相反,每个区块可以在其本地存储器中存储用于启动该区块的读取和写入操作的指令。
此外,虽然图5中所示的每个部分110包括以18行×16列布置的区块,但是区块102的数量和它们在部分中的布置可以不同。例如,在一些情况下,部分110可以包括相等数量的行和列。
此外,尽管在图5中被示为分成四个部分,但是区块102能够被分成其他不同的分组。例如,在一些实施方式中,区块102被分组为两个不同的部分,诸如向量处理单元104上方的第一部分(例如,更靠近图5所示页面的顶部)和向量处理单元104下方的第二部分(例如,更靠近图5所示页面的底部)。在这种布置中,每个部分可以包含例如以向下18个区块(沿着方向103)且横向32个区块(沿着方向101)的网格布置的596个区块。部分可以包含其他总数的区块,并且可以以不同大小的阵列布置。在一些情况下,部分之间的划分由ASIC100的硬件特征来描绘。例如,如图5所示,向量处理单元104可以将部分110a、110b与部分110c、110d分开。
图6中示出了用于ASIC芯片100中的区块200的示例的示意图。每个区块200包括本地存储器202和耦合到存储器202的计算阵列204。本地存储器202包括位于计算阵列204附近的物理存储器。计算阵列204包括多个单元206。计算阵列204的每个单元206包括被配置为基于对单元206的数据输入(诸如激活输入和权重输入)来执行计算(例如,乘法操作和累加操作)的电路。每个单元能够在时钟信号的周期上执行计算(例如,乘法操作和累加操作)。计算阵列204能够具有比列更多的行、比行更多的列或者相等数量的列和行。例如,在图6所示的示例中,计算阵列204包括以8行8列布置的64个单元。其他计算阵列大小也是可能的,诸如具有16个单元、32个单元、128个单元或256个单元等的计算阵列。每个区块能够包括相同数量的单元和/或相同大小的计算阵列。对于ASIC芯片,能够并行执行的操作总数取决于芯片内具有相同大小计算阵列的区块的总数。例如,对于图5所示的包含大约1150个区块的ASIC芯片100,这意味着每个周期能够并行执行大约92000次计算。可以使用的时钟速度的示例包括但不限于225MHz、500MHz、950MHz、1GHz、1.25GHz、1.5GHz、1.95GHz或2GHz。如图5所示,每个单独区块的计算阵列204是更大的区块脉动阵列的子集。
包含在区块200中的存储器202能够包括例如随机存取存储器(RAM),诸如SRAM。能够使用其他存储器来代替。每个存储器202能够被配置为存储与ASIC芯片的n个区块102相关联的总存储器的第1/n。存储器202能够被提供为单个芯片或多个芯片。例如,图6中所示的存储器202被提供为四个单端口SRAM,其中的每一个都耦合到计算阵列204。可选地,除了其他配置之外,存储器202能够被提供为两个单端口SRAM或八个单端口SRAM。在纠错编码之后,存储器的联合容量能够是但不限于,例如,16kB、32kB、64kB或128kB。在一些实施方式中,通过向计算阵列本地提供物理存储器202,能够极大地降低ASIC 100的布线密度。在替代配置中,其中存储器集中在ASIC 100内,而不是如本文所述本地提供,可以需要用于存储器带宽的每一位的导线。覆盖ASIC 100的每个区块所需的导线总数将远远超过ASIC 100内的可用空间。相比之下,通过为每个区块提供专用存储器,跨越ASIC 100的面积所需的总数量能够大大减少。
区块200也包括可控总线线路。可控总线线路可以被分类为多个不同的组。例如,可控总线线路能够包括第一组通用可控总线线路210,其被配置为在每个主要方向上在区块之间传输数据。也就是说,第一组可控总线线路210能够包括:总线线路210a,被配置为沿着区块网格的第一维度101向第一方向(在图6中称为“东”)传输数据;总线线路210b,被配置为沿着区块网格的第一维度101向第二方向(在图6中被称为“西”)传输数据,其中第二方向与第一方向相反;总线线路210c,被配置为沿着区块网格的第二维度103向第三方向(在图6中称为“北”)传输数据;以及总线线路210d,被配置为沿着区块网格的第二维度103向第四方向(在图6中称为“南”)传输数据,其中第四方向与第三方向相反。通用总线线路210能够被配置为携带控制数据、激活输入数据、来自和/或去往通信接口的数据、来自和/或去往向量处理单元的数据,以及将被区块200存储和/或使用的数据(例如,权重输入)。区块200可以包括一个或多个控制元件221(例如,触发器和多路复用器),用于控制可控总线线路,从而将数据路由到区块200和/或从区块200和/或从存储器202路由数据。
可控总线线路也可以包括第二组可控总线线路,本文称为计算阵列部分和总线线路220。计算阵列部分和总线线路220能够被配置为携带从由计算阵列204执行的计算输出的数据。例如,如图6所示,总线线路220能够被配置为携带从计算阵列204中的行获得的部分和(partial sum)数据。在这种情况下,总线线路220的数量将与阵列204中的行数相匹配。例如,对于8×8计算阵列,将有8条部分和总线线路220,其中每条都耦合到计算阵列204中相应行的输出。计算阵列输出总线线路220能够进一步被配置为耦合到ASIC芯片内的另一区块,例如,作为ASIC芯片内的另一区块的计算阵列的输入。例如,区块200的阵列部分和总线线路220能够被配置为接收位于距区块200至少一个区块处的第二区块的计算阵列的输入(例如,部分和220a)。然后,计算阵列204的输出被加到部分和线路220,以产生新的部分和220b,其可以从区块200输出。然后,部分和220b可以被传递到另一区块,或者替代地,传递到向量处理单元。例如,每条总线线路220可以被耦合到向量处理单元的对应分段(例如图5中的分段106)。
如参考图5所解释的,可控总线线路能够包括诸如传送器元件(例如,触发器)的电路,其被配置为允许数据沿着总线线路传送。在一些实施方式中,对于每个区块,每个可控总线线路包括对应的传送器元件。如参考图5进一步解释的,可控总线线路能够包括诸如多路复用器的电路,多路复用器被配置为允许数据在ASIC芯片的不同区块、向量处理单元和通信接口之间传输。多路复用器可以位于任何有数据源或数据宿的地方。例如,在一些实施方式中,如图6所示,诸如多路复用器的控制电路221能够位于可控总线线路的交叉处(例如,在通用总线线路210a和210d的交叉处、在通用总线线路210a和210c的交叉处、在通用总线线路210b和210d的交叉处,和/或在通用总线线路210b和210c的交叉处)。总线线路交叉处的多路复用器能够被配置为在交叉处的总线线路之间传输数据。控制电路221能够通过将数据路由到区块102内的适当组件(例如,将激活数据或层权重路由到SRAM 202或从SRAM202路由到计算阵列204中的适当单元206)或者将输出数据和输入数据路由到可控总线线路或从可控总线线路路由输出数据和输入数据来执行操作调度的操作。
图7A-图13B是图示其中ASIC 100被用作计算神经网络推断的硬件加速器的示例过程的示意图。图7A、图8A、图9A、图10A、图11、图12A和图13A是图示了在过程中的不同时间通过ASIC 100的数据流的概况的示意图。图7B、图8B、图9B、图10B、图12B和图13B是分别图示在与图7A、图8A、图9A、图10A、图12A和图13A相关联的时间ASIC 100的单个区块(例如,控制区块或其他区块102)内的数据流的示意图。图7A-图13B中的省略号指示图中未示出的重复特征的存在。在图7A-图13B的每一个中提供了指南针300,以提供数据流的方向。标签“N”、“W”、“S”和“E”并不与实际的地理方向相对应,而是用于指示数据能够在网格中流动的不同相对方向。在由标记“N”、“W”、“S”和“E”指示的方向上传送数据的可控总线线路在本文被称为北向总线线路、西向总线线路、南向总线线路和东向总线线路。
图7A-图13A中的区块102和向量处理单元104的布置类似于图5中所示的布置。例如,一半的区块102能够被布置在向量处理单元104的第一侧,而另一半的区块102能够被布置在向量处理单元104的第二相对侧。通信接口108在图7A-图13A中被示出为完全布置在区块网格的右侧,但是其能够位于区块栅格的任一侧,如图5的示意图所示。
在第一步骤中,如图7A所示,模型(例如,神经网络模型)的第一层的输入值(例如,激活输入和/或权重输入)从通信接口108加载到ASIC 100内的一个或多个区块102(例如,所有区块102)上。也就是说,从通信接口108接收数据,诸如本文参考图1-图3描述的配置数据分组或程序操作分组。从通信接口108,输入值沿着可控总线线路(例如,诸如本文描述的通用可控总线线路)跟随数据路径到达一个或多个控制区块。通过在不同总线线路交叉的位置使用多路复用器,能够在不同总线线路之间传输数据(例如,参见图6中的路由元件221)。例如,如图7A所示,输入数据沿着以下数据路径流动:该数据路径需要在西向通用可控总线线路上行进,然后在南向通用可控总线线路上行进。通过在西向总线线路和南向总线线路交叉的位置使用多路复用器,能够将输入数据从西向总线线路传送到南向总线线路。在一些实施方式中,当ASIC 100正在执行先前的第一推断时,能够将第二推断的权重输入加载到一个或多个控制区块。换句话说,控制区块的操作调度与正在计算推断的其他区块102的操作调度协调,使得在其他区块102正在计算第一推断的相同计数器时间,控制区块102正在为下一个推断准备新的激活数据和/或权重,以递送到用于下一个推断的计算的其他区块102。
图7B是图示来自ASIC 100的区块102的示例的详细视图的示意图。如图7B所示,区块102能够包括其上存储输入值的存储器302。存储器302能够包括如本文参考图6所述的任何合适的存储器。如上所述,存储器302能够用于存储配置状态数据(例如,来自配置数据分组)或程序数据,诸如区块的单独操作调度。输入值从邻近或穿过区块102的一条或多条南向通用可控总线线路310d获得。来自南向可控总线线路310d的数据能够通过使用多路复用器被传输到存储器302。在该步骤期间,不使用其他通用可控总线线路(310a、310b、310c)。
区块102也包括直接耦合到存储器302的计算单元阵列306。如本文所解释的,计算单元阵列306可以是构成ASIC的区块的更大的单元脉动阵列的子集。单元306以阵列布置,图7B中所示的单个单元306位于位置(i,j)=(0,0),其中参数i表示阵列中的单元行位置,j表示阵列中的单元列位置。在图7B所示的示例中,计算阵列具有8行和8列,尽管其他大小也是可能的。计算阵列的每个单元306能够包括被配置为基于在区块处接收的数据执行计算的电路。例如,每个单元306能够包括乘法器电路、加法器电路和一个或多个寄存器。每个单元306的输出能够作为部分和被传递到计算阵列内的相邻单元或ASIC 100中另一区块的计算阵列内的单元。在后面的步骤中使用单元306的计算阵列。
区块102也包括用于提供来自先前区块的数据的可控总线线路320。例如,可控总线线路320能够携带从ASIC 100中的先前区块的计算阵列获得的部分和输出数据,并将该部分和输出数据作为输入提供给区块102内的计算阵列的单元。在这个步骤中不使用可控总线线路320。
区块102也包括用于将激活输入值作为输入提供给计算阵列的单元306可控总线线路330。例如,激活输入值能够被提供给单元306内的乘法器电路。激活输入值能够从通信接口108或者从ASIC 100中的另一区块内的单元获得。来自可控总线线路330的数据能够通过使用多路复用器被传输到单元306。在图7A-图7B所示的示例步骤中没有使用可控总线线路330。
如本文所解释的,在一些实施方式中,一个或多个区块102专用于存储程序数据,诸如操作调度和/或来自向量处理单元104的输出信息。在一些实施方式中,一个或多个控制区块内的计算阵列可以不用于执行计算。或者,一个或多个控制区块能够被配置为除了对诸如接收到的权重输入和激活值的输入数据执行计算之外,还存储诸如操作调度的程序数据。在一些实施方式中,权重输入被加载到将使用权重输入的每个区块102的存储器中,而不是首先将权重输入存储在一个或多个控制区块的子集中。
在第二步骤中,如图8A所示,在调度的计数器值处,权重输入301被加载到区块102内的计算阵列的各个单元306中。将权重输入301加载到各个单元306中可以包括将数据从一个或多个控制区块的存储器传输到权重输入301所属的对应区块102。权重输入301能够沿着通用可控总线线路传送到区块102,并通过耦合到总线线路和存储器的多路复用器传输到存储器。图8B是区块102的示例的详细视图。权重输入301能够在模型执行的持续时间中被存储在存储器302中,这可以包括多个推断的计算。作为从一个或多个控制区块加载权重输入301的替代,权重输入301可以已经直接从通信接口108预加载到区块102的存储器中。为了准备用于执行的模型,能够将每个区块102的权重输入301从区块102的存储器302加载到该区块102内的计算阵列的每个单元306中。例如,权重输入301能够被加载到单元306内的寄存器400(也称为“后端寄存器(back register)”)中。后端寄存器的使用允许单元306在当前权重输入上执行计算,同时下一个权重输入被加载到后端寄存器中。尽管在图8B中只为一个单元306示出了加载权重寄存器,但是在这个步骤期间也能够加载计算阵列内的其他单元的权重寄存器。
在第三步骤中,如图9A所示,在调度的计数器值处,激活值500被引入到区块102中,并且可以被存储在那里的存储器302中。激活值500能够在多个时钟周期内传输。然后,每个区块102的计算阵列利用激活值500和从区块102中的存储器302接收的权重输入301来执行计算。例如,计算能够包括将激活值乘以权重输入,然后将结果与不同权重输入和激活值的乘积求和。在一些实施方式中,激活值500在可控总线线路330上被传送到区块102并且在区块102之间传送。每个可控总线线路330能够沿着相同的方向延伸。例如,如图9B所示,可控总线线路330沿着与可控总线线路320延伸的网格维度正交的网格维度横向延伸。此外,如图9A中的箭头501和图9B中的可控总线线路330上的箭头501所示,激活输入数据500在总线线路330上以相同(例如,东向)的方向行进。替代地,在一些实施方式中,一些激活输入值500在一些可控总线线路330上沿第一方向(例如,东向方向)行进,而一些其它激活输入值500在一些其它可控总线线路330上沿第二相反方向(例如,西向方向)行进。
在一些实施方式中,延伸穿过每个区块102的可控总线线路330的数量由计算阵列的大小决定。例如,延伸穿过每个区块102的可控总线线路330的数量可以至少等于计算阵列内单元的行数。在图9B所示的示例中,假设在区块102的计算阵列内有8行单元306,则有8条可控总线线路330穿过区块102。在一些实施方式中,每个单独的可控总线线路330将激活输入值500传输到计算阵列的对应行内的单元306。例如,对于区块102内的单元306的8×8计算阵列,第一可控总线线路330将激活输入值500传输到阵列第一行内的单元306,第二可控总线线路330将激活输入值500传输到阵列第二行内的单元306,等等,直到最后一个可控总线线路330,其将激活输入值500传输到阵列最后一行内的单元306。附加的可控总线线路(例如,部分和总线线路)可以穿过每个区块,以提供来自另一区块的部分和、接收区块内的计算结果并将其组合到所提供的部分和,以及将新的部分和输出到新的区块或向量处理单元。
在一些实施方式中,可控总线线路330将激活输入值500传送到被配置为在单元306内执行计算的电路。例如,如图9B所示,可控总线线路330被配置为将激活输入值500传输到单元306内的乘法器电路502。通过使用可控总线线路330上的多路复用器,能够将激活输入值500传输到乘法器电路502。
在一些实施方式中,一旦激活输入值500和权重输入值301被确定就位(例如,在执行加载操作所需的预定数量的计数器周期之后),区块102内的计算阵列的单元306使用激活输入值500和从区块102中的存储器302接收的权重输入值301来执行计算。例如,如图9B所示,先前存储在寄存器400中的权重输入值301被传输到寄存器504(也称为“前端寄存器”)。然后,使用乘法器电路502,权重输入值301与接收的激活输入值500相乘。
如本文所解释的,激活输入值500在可控总线线路330上传送。在一些实施方式中,可控总线线路330是通用可控总线线路。在一些实施方式中,可控总线线路330能够专用于提供激活输入。例如,如图9B所示,激活输入值能够通过线路330被提供给区块102(例如,提供给区块102内的计算阵列的单元306),而其他通用可控总线线路310b能够用于向区块102提供其他数据和/或指令。
在第四步骤中,如图10B所示,在调度的计数器值处,每个单元306内的权重输入值301和激活输入值500之间的计算结果被传递到单元306内的电路602,以产生输出值600。在图10B的示例中,电路602包括求和电路。每个单元306内的求和电路602被配置为将乘法器电路502的积与从ASIC 100中的另一区块102或从计算阵列内的另一单元306获得的另一值求和。从另一区块102或从另一单元306获得的值能够包括例如累加值。因此,求和电路602的输出值600是新的累加值。然后求和电路602能够将新的累加值600递送到位于区块102内的计算阵列的底部(例如,沿南向方向)相邻单元中的另一单元。新的累加值600能够被用作底部相邻单元中求和的操作数。对于计算阵列内的最后一行单元,新的累加值600能够被传输到ASIC 100内的另一区块102,如图10A所示。在另一示例中,新的累加值600能够被传输到与生成新的累加值600的区块102相距至少一个区块的另一区块102。替代地,也如图10A所示,来自计算阵列内最后一行单元的新的累加值600被传输到向量处理单元104。
传输到区块102中或传输出区块102的累加值600能够沿着可控总线线路320传送。每条可控总线线路320沿着相同的方向延伸。例如,如图10B所示,可控总线线路320沿着与可控总线线路330延伸的网格维度正交的网格维度垂直延伸。此外,如图10A中的箭头604和图10B中的箭头604所示,取决于向量处理单元104相对于生成累加值600的区块102的位置,累加值600在可控总线线路320上沿北向或南向方向行进。例如,对于位于图10A中的向量处理单元104上方的块102,累加值600在可控总线线路320上沿朝向向量处理单元104的南向方向行进,而对于位于向量处理单元104下方的块102,累加值600沿朝向向量处理单元104的北向方向行进。
在如图11所示的第五步骤中,在调度的计数器值处,由向量处理单元104接收的数据(例如,累加值)由向量处理单元104处理以提供处理值900。向量处理单元104处的数据处理能够包括对向量处理单元104处接收的数据施加偏置、执行附加的累加运算,和/或对接收的数据施加非线性函数(例如,神经网络系统中已知的整流器函数或sigmoid函数)。向量处理单元104也能够应用其他操作。向量处理单元104能够包括布置在多个分段106中的电路,其中每个分段106被配置为处理从对应的区块102的一列接收的数据,并生成对应的处理值900。
在第六步骤中,如图12A所示,在调度的计数器值处,来自向量处理单元104的处理值900被传输并存储在ASIC 100的一个或多个区块中,例如ASIC 100的区块的子集。例如,处理值900能够被递送到控制区块103,控制区块103位于与向量处理单元104直接相邻的位置。替代地或附加地,处理值900能够被递送到ASIC 100内的一个或多个其他区块102。处理值900能够通过诸如可控总线线路310c的通用可控总线线路被传输到一个或多个区块。在到达区块(例如,控制区块或其他区块102)时,处理值900能够被存储在区块的存储器202中。例如,能够使用与可控总线线路310c相关联的多路复用器将处理值900传输到存储器902。存储处理值的步骤900能够发生在获得每个模型层的推断之后。在一些实施方式中,处理值900能够作为输入值被提供给模型的下一层。
在第七步骤中,如图13A和图13B所示,在调度的计数器值处,处理值900能够从ASIC 100输出。例如,处理值900能够从一个或多个控制区块的存储器202被传输到通信接口108。处理值900能够在可控总线线路(例如,可控总线线路310c和/或310d)上被传送到通信接口108。处理值900能够通过与总线线路相关联的多路复用器被传输到可控总线线路。
例如,如果已经获得了模型的最终层的推断,或者如果已经在多个ASIC之间被划分并且已经获得了与ASIC 100相关联的最终层的推断,则可以从ASIC 100导出处理值900。处理值900能够由通信接口108的SerDes接口接收并输出到另一目的地,包括但不限于例如另一ASIC 100或现场可编程门阵列芯片。
参考图7A-图13B描述的示例过程可以需要在执行单元计算之前激活值和权重输入被完全传播到每个区块的计算阵列,或者单元可以在所有值被完全传播之前执行计算。在任一情况下,能够协调各个区块的操作调度,以便计算被适当地定时。例如,如果特定的机器学习程序要求在执行单元计算之前,激活值和权重输入被完全传播通过每个区块的计算阵列,则操作指令能够在确保激活值和权重被完全传播的一段时间中调度计算的执行。此外,尽管已经利用权重输入被递送到计算阵列的列且激活输入被递送到计算阵列的行而描述了ASIC 100,但是在一些实施方式中,权重输入被递送到阵列的行并且激活输入被递送到阵列的列。
此外,尽管计算阵列在本文被描述为在每个单元内使用单独的求和电路,但是计算阵列内的单元组(例如,一列内的所有单元)可以直接耦合到单个求和电路,该求和电路对来自该组中的单元的接收的输出进行求和,从而减少存储输出所需的求和电路的数量。
本说明书中描述的主题和功能操作的实施例能够在数字电子电路、计算机硬件中实现,包括本说明书中公开的结构及其结构等同物,或者它们中的一个或多个的组合。本说明书中描述的主题的实施例能够被实现为一个或多个计算机程序,即编码在有形非暂时性程序载体上的计算机程序指令的一个或多个模块,用于由数据处理装置执行或控制数据处理装置的操作。替代地或附加地,程序指令能够被编码在人工生成的传播信号上,例如,机器生成的电、光或电磁信号,其被生成以编码信息,用于传输到合适的接收器设备,以由数据处理设备执行。计算机存储介质能够是机器可读存储设备、机器可读存储基底、随机或串行存取存储设备,或者它们中的一个或多个的组合。
术语“数据处理装置”包含用于处理数据的所有种类的装置、设备和机器,包括例如可编程处理器、计算机或多个处理器或计算机。装置能够包括专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC。除了硬件之外,装置还能够包括为所讨论的计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或它们中的一个或多个的组合的代码。
本说明书中描述的过程和逻辑流程能够由一个或多个可编程计算机执行,一个或多个可编程计算机执行一个或多个计算机程序以通过对输入数据进行操作并生成输出来执行功能。过程和逻辑流程也能够由专用逻辑电路执行,并且装置也能够被实现为专用逻辑电路,例如FPGA、ASIC或GPGPU(通用图形处理单元)。
虽然本说明书包含许多具体的实施细节,但是这些不应该被解释为对任何发明或所要求保护的范围的限制,而是对特定发明的特殊实施例所特有的特征的描述。本说明书中在独立实施例的上下文中描述的某些特征也能够在单个实施例中组合实现。相反,在单个实施例的上下文中描述的各种特征也能够在多个实施例中单独或以任何合适的子组合来实现。此外,尽管特征可以在上面被描述为在某些组合中起作用,并且甚至最初被如此要求保护,但是来自所要求保护的组合的一个或多个特征在一些情况下能够从该组合中删除,并且所要求保护的组合可以针对子组合或子组合的变体。
类似地,虽然在附图中以特定的顺序描述了操作,但是这不应该被理解为要求这些操作以所示的特定顺序或顺序执行,或者要求所有示出的操作都被执行,以获得期望的结果。在某些情况下,多任务和并行处理可以是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中都需要这样的分离,并且应该理解,所描述的程序组件和系统通常能够一起集成在单个软件产品中或者打包成多个软件产品。
已经描述了主题的特定实施例。其他实施例在以下权利要求的范围内。例如,尽管总线线路被描述为“可控的”,但并非所有总线线路都需要具有相同的控制级别。例如,能够有不同程度的可控性,其中一些总线线路仅在一些总线线路在它们能够从其获取数据或者它们能够向其发送数据的区块的数量方面受到限制的情况下能够被控制。在另一示例中,一些总线线路可以专用于沿着单个方向提供数据,例如本文描述的北、东、西或南。在一些情况下,权利要求中所述的动作能够以不同的顺序执行,并且仍能获得期望的结果。作为一个示例,附图中描绘的过程不一定需要所示的特定顺序或连续顺序来实现期望的结果。在某些实现中,多任务和并行处理可以是有利的。
Claims (16)
1.一种配置硬件区块的方法,所述方法包括:
由硬件区块接收第一数据分组,其中,第一数据分组包括配置数据,并且其中,硬件区块在接收到第一数据分组时处于第一状态;
基于第一数据分组的配置数据,
将硬件区块切换到第二状态达预定时间长度;
一旦预定时间长度到期,就从第二状态退出。
2.根据权利要求1所述的方法,其中,第二状态包括数据转发状态,使得硬件区块被配置为在处于数据转发状态时转发在硬件区块处接收的数据。
3.根据权利要求2所述的方法,包括:
在硬件区块处于数据转发状态时,由硬件区块接收第二数据分组;和
在硬件区块处于转发状态时,从硬件区块转发第二数据分组。
4.根据权利要求1所述的方法,其中,当硬件区块处于第一状态时,硬件区块被配置为读取在硬件区块处接收的数据分组。
5.根据权利要求4所述的方法,其中,将硬件区块切换到第二状态包括读取第一数据分组的配置数据。
6.根据权利要求5所述的方法,其中,将硬件区块切换到第二状态包括安装以及运行状态计数器,所述状态计数器指定硬件区块处于第二状态的预定义时间长度。
7.根据权利要求6所述的方法,其中,一旦状态计数器达到预定时间长度,从第二状态退出就发生。
8.根据权利要求5所述的方法,其中,读取第一数据分组的配置数据包括读取第一数据分组的报头。
9.根据权利要求1所述的方法,其中,从第二状态退出包括激发使得硬件区块重新配置到新的状态的触发器。
10.根据权利要求9所述的方法,其中,在新的状态下,硬件区块被配置为将在硬件区块处接收的数据分组存储在存储器中。
11.根据权利要求9所述的方法,其中,在新的状态下,硬件区块被配置为安装来自存储器的数据。
12.根据权利要求9所述的方法,其中,在新的状态下,硬件区块被配置为安装来自在硬件区块处接收的数据分组的数据。
13.根据权利要求1所述的方法,其中,从第二状态退出包括激发使得硬件区块重新配置回到第一状态的触发器。
14.根据权利要求1所述的方法,其中,将硬件区块切换到第二状态包括安装以及运行状态计数器,所述状态计数器指定硬件区块处于第二状态的预定义时间长度,其中,计数器与硬件区块被装在其上的芯片的全局时钟同步,或者其中,计数器与硬件区块的本地时钟同步。
15.根据权利要求1所述的方法,其中,从第二状态退出包括激发使得硬件区块重新配置到新的状态的触发器,其中,重新配置到新的状态包括安装以及运行状态计数器,所述状态计数器指定硬件区块处于新的状态的预定义时间长度。
16.一种包括集成电路的系统,包括:
前述权利要求中任一项中所述的硬件区块。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962890149P | 2019-08-22 | 2019-08-22 | |
US62/890,149 | 2019-08-22 | ||
CN202080074234.4A CN116057914B (zh) | 2019-08-22 | 2020-08-20 | 初始化片上操作的方法和系统 |
PCT/US2020/047120 WO2021035015A1 (en) | 2019-08-22 | 2020-08-20 | Initializing on-chip operations |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080074234.4A Division CN116057914B (zh) | 2019-08-22 | 2020-08-20 | 初始化片上操作的方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118605971A true CN118605971A (zh) | 2024-09-06 |
Family
ID=72422232
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410746265.XA Pending CN118605971A (zh) | 2019-08-22 | 2020-08-20 | 初始化片上操作的方法和系统 |
CN202080074234.4A Active CN116057914B (zh) | 2019-08-22 | 2020-08-20 | 初始化片上操作的方法和系统 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080074234.4A Active CN116057914B (zh) | 2019-08-22 | 2020-08-20 | 初始化片上操作的方法和系统 |
Country Status (7)
Country | Link |
---|---|
US (1) | US12124783B2 (zh) |
EP (1) | EP4000229A1 (zh) |
JP (2) | JP7282980B2 (zh) |
KR (1) | KR20220051367A (zh) |
CN (2) | CN118605971A (zh) |
TW (1) | TWI758833B (zh) |
WO (1) | WO2021035015A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220413721A1 (en) * | 2021-06-28 | 2022-12-29 | Google Llc | Control of machine-learning systems |
CN118401936A (zh) * | 2021-12-16 | 2024-07-26 | 谷歌有限责任公司 | 用于集成电路的一维计算单元 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0991262A (ja) * | 1995-09-20 | 1997-04-04 | Fuji Xerox Co Ltd | マルチプロセッサシステム |
US7394288B1 (en) * | 2004-12-13 | 2008-07-01 | Massachusetts Institute Of Technology | Transferring data in a parallel processing environment |
JP2009271724A (ja) | 2008-05-07 | 2009-11-19 | Toshiba Corp | ハードウェアエンジン制御装置 |
KR101017977B1 (ko) | 2009-08-11 | 2011-03-02 | 주식회사 케피코 | 복수개의 제어기의 리프로그래밍 방법 |
WO2012154596A1 (en) * | 2011-05-06 | 2012-11-15 | Xcelemor, Inc. | Computing system with data and control planes and method of operation thereof |
US9620213B2 (en) | 2013-12-27 | 2017-04-11 | Cavium, Inc. | Method and system for reconfigurable parallel lookups using multiple shared memories |
US9952831B1 (en) | 2017-02-16 | 2018-04-24 | Google Llc | Transposing in a matrix-vector processor |
US10909447B2 (en) | 2017-03-09 | 2021-02-02 | Google Llc | Transposing neural network matrices in hardware |
US10261786B2 (en) | 2017-03-09 | 2019-04-16 | Google Llc | Vector processing unit |
CN109194499A (zh) | 2018-08-01 | 2019-01-11 | 湖北微源卓越科技有限公司 | 网络数据流可靠性保护方法 |
-
2020
- 2020-08-20 EP EP20768147.9A patent/EP4000229A1/en active Pending
- 2020-08-20 KR KR1020227009163A patent/KR20220051367A/ko not_active Application Discontinuation
- 2020-08-20 CN CN202410746265.XA patent/CN118605971A/zh active Pending
- 2020-08-20 JP JP2022512407A patent/JP7282980B2/ja active Active
- 2020-08-20 CN CN202080074234.4A patent/CN116057914B/zh active Active
- 2020-08-20 US US17/636,785 patent/US12124783B2/en active Active
- 2020-08-20 WO PCT/US2020/047120 patent/WO2021035015A1/en unknown
- 2020-08-21 TW TW109128679A patent/TWI758833B/zh active
-
2023
- 2023-05-17 JP JP2023081795A patent/JP2023107786A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
US20220277125A1 (en) | 2022-09-01 |
CN116057914B (zh) | 2024-06-28 |
EP4000229A1 (en) | 2022-05-25 |
JP2022545115A (ja) | 2022-10-25 |
TWI758833B (zh) | 2022-03-21 |
KR20220051367A (ko) | 2022-04-26 |
JP2023107786A (ja) | 2023-08-03 |
TW202127840A (zh) | 2021-07-16 |
WO2021035015A1 (en) | 2021-02-25 |
JP7282980B2 (ja) | 2023-05-29 |
CN116057914A (zh) | 2023-05-02 |
US12124783B2 (en) | 2024-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US12057834B2 (en) | Application specific integrated circuit accelerators | |
EP3533001B1 (en) | Neural network compute tile | |
CN111164616A (zh) | 能够后向传播的脉动神经网络引擎 | |
JP2023107786A (ja) | オンチップ動作の初期化 | |
CN110100255B (zh) | 区域有效、可重新配置、节能、速度有效的神经网络基板 | |
EP3859543A1 (en) | Parallel processing of reduction and broadcast operations on large datasets of non-scalar data | |
CN115244909A (zh) | 机器学习加速器中的队列分配 | |
JP7342247B2 (ja) | オンチップ動作の明示的なスケジューリング | |
JP7541163B2 (ja) | 伝搬レイテンシの短縮 | |
CN112631982B (zh) | 基于众核架构的数据交换方法及装置 | |
JP7423755B2 (ja) | 特定用途向け集積回路のデュアルモード動作 | |
US20230306240A1 (en) | Processing method in a convolutional neural network accelerator, and associated accelerator | |
TWI766211B (zh) | 可重組態資料處理器的組態加載和卸載 | |
US20200311020A1 (en) | Networked Computer With Embedded Rings Field | |
WO2023285113A1 (en) | Synchronisation for a multi-tile processing unit | |
WO2021130075A1 (en) | Communication in a computer having multiple processors |
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 |