神经网络计算模组的制作方法

文档序号:14389864阅读:204来源:国知局
神经网络计算模组的制作方法

本申请涉及神经网络计算模组。



背景技术:

本说明书大体上涉及一种用于计算深度神经网络(“dnn”)层的神经网络计算模组(tile),该神经网络计算模组允许减小的指令带宽和指令存储器。



技术实现要素:

大体上,本说明书中描述的一个创新方面可以体现为一种用于加速张量计算的计算单元。该计算单元包括具有第一数据宽度的第一存储器群和具有比第一数据宽度大的第二数据宽度的第二存储器群,第一存储器群用于存储输入激活或者输出激活中的至少一个,第二存储器群用于存储执行计算时使用的一个或者多个参数。计算单元可以进一步包括至少一个cell,该至少一个cell包括从第二存储器群接收参数并执行计算的至少一个乘法累加(“mac”)运算器。计算单元可以进一步包括:与至少第一存储器群进行数据通信的第一遍历单元,该第一遍历单元被配置为向第一存储器群提供控制信号以使输入激活被提供至能够由mac运算器访问的数据总线。计算单元执行与数据阵列中的至少一个元素相关联的一个或者多个计算,该一个或多个计算由mac运算器执行并且部分地包括从数据总线接收的输入激活与从第二存储器群接收的参数的乘法运算。

本说明书中描述的主题的另一个创新方面可以体现为一种用于加速张量计算的计算机实现的方法。该计算机实现的方法包括:响应于第一存储器群接收到来自第一遍历单元的控制信号,通过具有第一数据宽度的第一存储器群,发送第一输入激活,第一存储器群被设置在计算单元中,并且其中,第一输入激活由能够通过计算单元的至少cell访问的数据总线来提供。该方法进一步包括:通过该至少一个cell,接收来自具有比第一数据宽度大的第二数据宽度的第二存储器群的一个或者多个参数,并且其中,该至少一个cell包括至少一个乘法累加(“mac”)运算器。该方法还可以进一步包括:通过mac运算器,执行与数据阵列中的至少一个元素相关联的一个或者多个计算,其中,该一个或者多个计算部分地包括从数据总线访问的至少第一输入激活和从第二存储器群接收到的至少一个参数的乘法运算。

本说明书中描述的主题的另一个创新方面可以体现为一种非暂时性计算机可读存储介质。该非暂时性计算机可读存储介质包括能够由一个或者多个处理器执行的指令,该指令在这样的执行时使一个或者多个处理器执行操作,该操作包括:响应于第一存储器群接收到来自第一遍历单元的控制信号,通过具有第一数据宽度的第一存储器群,发送第一输入激活,第一存储器群被设置在计算单元中,并且其中,第一输入激活由能够通过计算单元的至少cell访问的数据总线来提供。所执行的操作还可以包括:通过该至少一个cell,接收来自具有比第一数据宽度大的第二数据宽度的第二存储器群的一个或者多个参数,并且其中,该至少一个cell包括至少一个乘法累加(“mac”)运算器。所执行的操作还可以包括:通过mac运算器,执行与数据阵列中的至少一个元素相关联的一个或者多个计算,其中,该一个或者多个计算部分地包括从数据总线访问的至少第一输入激活和从第二存储器群接收到的至少一个参数的乘法运算。

可以在特定实施例中实现本说明书中描述的主题,以便实现下面的优点中的一个或者多个。使用寄存器来保持跟踪存储器地址值允许程序用一条指令迭代深层嵌套循环。基于从寄存器检索到的存储器地址值,遍历从单个计算模组中的窄存储器单元和宽存储器单元访问的张量。存储器地址值与张量的元素相对应。张量计算基于深度循环嵌套的执行发生在单独的计算模组中。计算可以跨多个模组分布。基于将多层神经网络的张量计算跨多个计算模组分布,来增强并且加速计算效率。可以遍历张量,并且可以利用数量减少的指令来执行张量计算。

在本说明书中描述的主题也可以实现在特定实施例中,以便实现其它优点。例如,通过采用将允许灵活寻址以按照任何顺序遍历多维度阵列的窄低带宽存储器与高带宽宽存储器耦合的存储器层级,可以针对迥然不同维度的dnn层实现mac运算器的高利用率并且可以最大程度地利用计算局部性。

该方面和其它方面的其它实施方式包括对应的系统、装置、和被配置为执行方法的动作并且编码在计算机存储设备上的计算机程序。可以通过安装在系统上的、在操作时使系统执行动作的软件、固件、硬件、或者其组合来如此配置一个或者多个计算机的系统。可以通过具有指令来如此配置一个或者多个计算机程序,该指令在由数据处理装置执行时使该装置执行动作。

本说明书中描述的主题还涉及一种图像识别和/或分类方法/系统。可以使用所公开的技术和所描述的具有硬件计算单元或者计算模组的硬件计算系统来实现系统。计算单元使用具有多个神经网络层的神经网络来处理用于计算推理(inference)的张量运算。

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

附图说明

图1是示例计算系统的框图。

图2图示出了示例神经网络计算模组。

图3图示出了示例张量遍历单元(ttu)结构。

图4图示出了包括向一个或者多个乘法累加(mac)运算器提供输入激活的窄存储器单元的示例架构。

图5图示出了包括向图2和图4的窄存储器单元提供输出激活的输出总线的示例架构。

图6是使用图2中的神经网络计算模组来执行张量计算的过程的示例流程图。

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

具体实施方式

本说明书中描述的主题涉及一种包括多个计算单元的硬件计算系统,所述多个计算单元被配置为加速神经网络层的机器学习推理工作量。硬件计算系统的每个计算单元是自包含的,并且可以独立地执行多层神经网络的给定层所需的计算。

可以使用具有多个层的神经网络来计算推理。例如,在输入给定的情况下,神经网络可以计算该输入的推理。神经网络通过神经网络的每个层处理该输入来计算该推理。具体地,神经网络的层分别具有相应的权重集。每个层接收输入并且根据该层的权重集来处理该输入以生成输出。

因此,为了从接收到的输入计算推理,神经网络接收输入并且通过每个神经网络层对所述输入进行处理以便生成推理,其中,一个神经网络层的输出被提供为下一个神经网络层的输入。神经网络层的数据输入,例如,神经网络的输入或者序列中的在该层下面的层到神经网络层的输出,可被称为该层的激活输入。

在一些实施方式中,将神经网络的层布置成序列。在其它实施方式中,将层布置成有向图。也就是说,任何特定的层可以接收多个输入、多个输出、或者两者。也可以将神经网络的层布置成使得可以将一个层的输出向回发送作为上一个层的输入

本说明书中描述的硬件计算系统可以通过跨多个计算模组分布张量计算来执行神经网络层的计算。在神经网络层内执行的计算过程可以包括:包括输入激活的输入张量与包括权重的参数张量的乘法。该计算包括将输入激活与一个或者多个循环上的权重相乘,并且在多个循环上执行乘积的累加。

张量是多维几何对象,并且示例多维几何对象包括矩阵和数据阵列。通常,由计算模组执行软件算法,以通过对嵌套循环进行处理以遍历n维张量来执行张量计算。在一个示例计算过程中,每个循环可以负责遍历n维张量的特定维度。对于给定的张量构造,计算模组可以要求访问特定张量的元素以执行与张量相关联的多个点积计算。计算发生在由窄存储器结构提供的输入激活与由宽存储器结构提供的参数或者权重相乘时。因为张量存储在存储器中,所以张量索引集可以要求转换成存储器地址集。通常,计算模组的张量遍历单元执行控制操作,该控制操作提供与张量相关联的每个维度的索引和遍历索引元素以执行计算的顺序。当将乘法结果写入输出总线并且存储在存储器中时,张量计算结束。

图1示出了用于加速与深度神经网络(dnn)相关联的张量计算的示例计算系统100的框图。系统100通常包括控制器102、主机接口108、输入/输出(i/o)链路110、包括第一模组集112和第二模组集114的多个模组、分类器部分116、以及在总线图118中识别的数据总线(为了清楚的目的而示出,但是不包括在系统100中)。控制器102通常包括数据存储器104、指令存储器106、以及被配置为执行编码在计算机可读存储介质中的一个或多个指令的至少一个处理器。指令存储器106可以存储一个或者多个机器可读指令,该一个或者多个机器可读指令可以由控制器102的一个或者多个处理器执行。数据存储器104可以是用于存储和随后访问与发生在系统100内的计算相关的各种数据的各种数据存储介质中的任何一种。

控制器102被配置为执行与系统100内的张量运算相关的一个或者多个指令,该一个或者多个指令包括存储在指令存储器106中的指令。在一些实施方式中,数据存储器104和指令存储器106是易失性存储器单元。在一些其它实施方式中,数据存储器104和指令存储器106是非易失性存储器单元。数据存储器104和指令存储器106也可以是另一种形式的计算机可读介质,诸如:软盘设备、硬盘设备、光盘设备、或者磁带设备、闪速存储器或者其它相似的固态存储器设备、或者设备阵列,包括:在存储区域网络中的设备或者其它配置的设备。在各种实施方式中,控制器102也可以引用为或者称为核心管理器102。

如图描绘的,主机接口108耦合到i/o链路110、控制器102、和分类器部分116。主机接口108从i/o链路110接收指令和数据参数并且向控制器102提供指令和参数。通常,指令可以通过指令总线124(下文待述)提供至系统100中的一个或者多个设备,并且参数可以通过环形总线128(下文待述)被提供至系统100中的一个或者多个设备。在一些实施方式中,控制器102在初始时间从主机接口118接收指令并且将其存储在指令存储器106中,以供控制器102在稍后时间执行。

分类器部分116同样耦合至控制器102和第二模组集114的模组7。在一些实施方式中,分类器部分116被实现为系统100内的单独的模组。在替代实施方式中,分类器部分116设置或者位于控制器102内,作为控制器102的子电路或者子设备。分类器部分116通常被配置为对累加的预激活值执行一个或者多个函数,这些预激活值作为完全连接的层的输出被接收。可以将完全连接的层划分到模组集112和114中的模组中。因此,每个模组被配置为产生可以存储在模组的存储器单元中的预激活值(即,线性输出)的子集。分类结果总线120提供从分类器部分116到控制器102的数据路径。经由分类结果总线120将包括函数后值(即,结果)的数据从分类器部分116提供至控制器102。

总线图118示出了在第一模组集112的模组与第二模组集114的模组之间提供一个或者多个相互连接的数据通信路径的数据总线。总线图118提供用于识别分类结果总线120、csr/主总线122、指令总线124、网状总线126和环形总线128的图例,如图1所描绘。通常,模组是系统100的加速器架构内的核心组件,并且是在系统中发生的张量计算的焦点。每个模组是单独的计算单元,并且多个模组可以与系统中的其它模组进行交互以加速多层神经网络的一个或者多个层间的计算(例如张量计算)。例如,计算可以分布在多个模组间。基于将多层神经网络的张量计算分布在多个计算模组之间,可以增强并且加速计算效率。虽然模组集112、114中的模组可以共享与给定指令相关联的张量计算的执行,但是单个计算单元是自包含的计算组件,这种计算组件被配置为相对于模组集112、114内的其它对应模组独立地执行张量计算的子集。

控制和状态寄存器(csr)总线122是单主多从总线,该单主多从总线使控制器102能够传送一个或者多个指令,该一个或者多个指令设置程序配置并且读取与一个或者多个模组相关联的状态寄存器。csr总线122可以与一个主总线片段和多个从总线片段连接成单个菊花链配置。如图1所示,csr总线122通过将环中的模组集112、114中的模组与控制器102连接至主机接口110的总线数据路径提供通信耦合。在一些实施方式中,主机接口110是csr总线环的单个主机,并且整个csr总线地址空间被存储器映射到主机接口110中的存储器空间。

主机接口110可以使用csr总线122来执行一个或者多个操作,所述操作包括:例如,对控制器102中的存储器缓冲器指针进行编程以使控制器102能够开始从指令存储器106预取指令、对在一个或者多个计算期间保持不变的各种模组设置(例如,多项式近似计算的系数表)进行更新/编程、和/或将固件加载/重新加载到分类部分116。在一个示例中,固件重新加载可以包括要应用于线性输出的新函数(即,预激活值)。因此,具有访问csr总线122权限的每个从设备将具有被绑定到该从设备并且识别该从设备的不同节点标识符(节点id)。该节点id将是指令地址的部分,并且将被csr从设备(即,控制器102、模组112、114、和分类器116)使用、检验或者检查以确定该csr分组是否被寻址到从设备。

在一些实施方式中,主机接口102可以通过控制器102传送一个或者多个指令。例如,所述指令的宽度可以是32位,其中前7位包括指示要接收并且执行指令的指令地址/目的地的报头信息。报头的前7位可以包含表示特定节点id的数据参数。因此,csr总线环上的从设备(例如,每个模组)可以检验指令的报头以确定主设备(主机接口110)提出的请求是否被寻址到检查报头的模组。如果报头的节点id未指示目的地是检验模组,该检验模组会将输入的csr指令分组复制到连接至下一个模组的csr总线输入以供由下一个模组检验。

指令总线124起始于控制器102,并且,与csr总线122相似,也通过将环中的模组集112、114中的模组连接回到控制器102的总线数据路径提供通信耦合。在一种实施方式中,控制器102经由指令总线124广播一个或者多个指令。由控制器102广播的指令可以与经由csr总线122提供的指令不同。然而,模组接收和/或消耗或者执行经由总线124接收到的指令的方式可以与用于执行经由csr总线122接收到的指令的过程相似。

在一个示例中,指令的报头(例如,位图)向接收模组指示该接收模组需要基于与指令相关联的位图来消耗特定指令。该位图可以具有按照位来定义的特定宽度。通常基于指令的参数将指令从一个模组转发到下一个模组。在一种实施方式中,指令总线124的宽度可以被配置为小于指令的大小/宽度。因此,在这种配置中,指令的传送将需要多个周期,并且指令总线124的总线站将具有解码器以将从模组处接收到的指令放置在与该模组相关联的适当的目标指令缓冲器中。

如下面进一步描述的,模组集112、114中的模组通常被配置为支持两大类别的指令。这两大类别也可以被称为指令类型。指令类型包括张量运算(tensorop)指令和直接存储器访问(dmaop)指令。在一些实施方式中,dmaop指令具有被允许同时进行的一个或者多个特殊化(specialization)。该一个或者多个特殊化可以被称为dmaop指令子类型或者操作码。在一些情况下,每个唯一的和/或有效的dmaop指令类型/子类型元组在特定模组内将具有单独的指令缓冲器。

在模组112、114中的特定模组处,与指令总线124相关联的总线站将检查报头位图以确定指令类型/子类型。指令可以由模组接收并且随后在模组执行指令之前写入到模组的指令缓冲器。可以通过指令的类型和子类型指示符/字段来确定写入有指令的模组的指令缓冲器。指令缓冲器可以包括对一个或者多个相关指令的消耗进行优先级排序的先进先出(fifo)控制方案。因此,在该fifo控制方案下,将始终按照指令到达指令总线的顺序来执行相同类型/子类型的指令

模组内的不同指令缓冲器是tensorop指令缓冲器和dmaop指令缓冲器。如上面所描述的,指令类型包括tensorop指令和dmaop指令。关于dmaop指令,指令子类型(指示“写入”缓冲器位置)包括以下:1)网格传入指令缓冲器;2)网格传出指令缓冲器;3)窄-宽dma指令缓冲器;4)宽-窄dma指令缓冲器;和5)环形总线dma指令缓冲器。下面将参照图2更详细地描述这些缓冲器位置。在整个说明书中使用宽和窄标号,并且这些标号通常指的是一个或者多个存储器单元的宽度(位/字节)的大致大小。如本文所使用的,“窄”可以指分别具有小于16位的大小或者宽度的一个或者多个存储器单元,并且“宽”可以指具有小于64位的大小或者宽度的一个或者多个存储器单元。

网状总线126提供与csr总线122、指令总线124和环形总线128(下文待述)不同的数据通信路径。如图1所描绘的,网状总线126提供在x和y维度两者中将每个模组耦合或者连接到其对应的相邻模组的通信路径。在各种实施方式中,网状总线126可以用于在相邻模组中的一个或者多个窄存储器单元之间传送输入激活量。如图所示,网状总线126不允许将输入激活数据直接转发到非相邻模组。

在各种实施方式中,网状总线126和经由网状总线126连接的各种模组可以具有以下配置。网格的四个拐角模组具有两个传出端口和两个传入端口。网格的四个边缘模组具有三个传入端口和三个传出端口。所有非边缘非拐角模组具有四个传入端口和四个传出端口。通常,给定一个示例n×n模组布局,边缘模组是仅仅具有三个相邻模组的模组,而拐角模组是具有两个相邻模组的模组。关于经由网状总线126的数据流方法,通常,必须将经由网格总线126到达特定模组的每个输入激活提交到模组的一个或者多个窄存储器单元。此外,对于具有少于四个传入端口的模组配置,dmaop指令可以将零值写入模组的窄存储器中的位置,而不是等待不存在的输入端口上的数据。同样,对于具有少于四个传出端口的模组配置,dmaop指令将不执行与用于任何不存在的端口的传输相关的窄存储器读取和端口写入。

在一些实施方式中,基于经由网状总线126提供的传入/传出dmaop,张量遍历单元(以下简称“ttu”)将生成将被写入或从其读取特定输入激活的窄存储器单元的位置或者地址。可以同时执行传入dmaop和传出dmaop,并且将通过由控制器102管理的同步标志控制方案来管理任何所需的同步。以下参照图2和图3进一步详细描述ttu。

环形总线128起始于控制器102,并且与csr总线122和指令总线124相似,也通过将环中的模组112、114连接回到控制器102的总线数据路径来提供通信耦合。在各种实施方式中,环形总线128通常连接或者耦合在所有模组112、114中的所有宽存储器单元(下面将参照图2更详细地描述)。因此,环形总线128的有效载荷宽度与设置在模组集112、114中的每个模组内的宽存储器单元的宽度相对应。如上面所讨论的,环形总线128还包括指示需要消耗包括经由环形总线128通信的指令或者参数的有效载荷数据的模组的位图头。

关于经由环形总线128在特定模组处接收到的数据(即,有效载荷),响应于接收到该信息,每个模组将清零(即,清除)在位图头中指示的位置数据,该位图头在将数据转发至另一模组之前对于接收模组是唯一的。因此,当头位图不具有指示要接收有效载荷的特定模组的剩余位设置数据时,将会停止将有效载荷转发到另一模组。有效载荷数据通常是指,在基于深嵌套循环的执行来执行张量计算期间,由一个或者多个模组使用的激活和权重。

在一些实施方式中,控制器102可以被描述为环形总线128的部分。在一个示例中,对于在特定模组内执行的dmaop指令,控制器102可以用于弹出来自环形总线站的数据/有效载荷,并且将有效载荷转发到环中的下个模组中的环形总线站。如果位图头中的指令需要这样的动作,则控制器102还可以使有效载荷数据被提交至模组中的一个或者多个宽存储器单元。需要写入数据的一个或者多个宽存储器单元的地址可以由特定模组内的dmaop指令生成。

在各种实施方式中,模组集112、114的每个模组可以是有效载荷数据的生产者或者有效载荷数据的消耗者。当模组是有效载荷数据的生产者时,模组从该模组中的一个或者多个宽存储器单元读取数据,并且通过环形总线128来多播数据以供一个或者多个其它模组消耗。当模组是有效载荷数据的消耗者时,模组接收数据并且将数据写入到模组内的一个或者多个宽存储器单元,并且转发有效载荷数据以供一个或者多个其它模组消耗。关于经由环形总线128的有效载荷数据的移动,在任何给定时间处,环形总线128上通常都仅存在一个数据生产者/主设备。在所有模组中的dmaop指令执行顺序(例如,fifo控制方案)将确保在给定时间处在环形总线128上仅存在一个数据生产者/主设备。

在一些实施方式中,控制器102使用同步标志控制架构来确保在给定时间处在环形总线128上仅存在一个有效载荷数据生产者/主设备。在一个示例中,由模组到环形输出的每次写入都会触发对应的同步标志计数的增量。控制器102可以检查有效载荷数据以确定包括有效载荷的数据块或者段的数量。控制器102然后监视模组的执行,以确保在另一模组以主模式执行之前,该模组转发和/或消耗了预期数量的数据段。

当存在经由环形总线128连接的、在环形总线上没有重叠区域的本地多播组时,确保在给定时间处在环形总线128上仅存在一个数据生产者/主设备发生了例外。例如,模组0(主)可以多播(即,生产数据)至模组0-模组3聚组中的模组,而模组4(主)可以同样多播至模组4–模组7聚组中的模组。这种双主多播方法的一个重要要求是,不允许不同的多播组看到彼此的数据分组,因为可能会发生分组重叠并且引起一个或者多个数据计算错误。

如图1所示,控制器102提供通信数据路径,该通信数据路径将模组集112、114中的模组耦合或者连接至i/o110并且包括多个核心函数。控制器102的核心函数通常包括:向模组集112、114中的模组馈送一个或者多个i/o输入激活、向模组馈送从i/o110接收的一个或者多个输入激活和参数、向模组馈送从i/o110接收的一个或者多个指令、向主机接口108发送i/o输出激活、以及作为csr总线122和环形总线128的环形站。如下面更详细地描述的,第一模组集112和第二模组集114均包括用于执行一个或者多个张量计算的多个模组,所述一个或者多个张量计算是基于由内部循环和外部循环组成的深度循环嵌套来执行的。

系统100通常如下操作。主机接口108将向控制器102提供一个或者多个指令,所述一个或者多个指令定义针对给定的计算发生的直接存储器访问操作(dmaop)。与馈送至控制器102的指令相关联的描述符将包括控制器所要求的信息,以促进与多维数据阵列(张量)相关联的大型点积计算。通常,控制器102从主机接口108接收输入激活、模组指令、以及用于针对神经网络的给定层执行张量计算的模型参数(即,权重)。控制器102然后可以通过由指令定义的数据流的方式使指令被多播至模组112、114。如上面所讨论的,消耗指令的模组然后可以基于指令报头中的位图数据发起将新的/随后的指令广播至另一模组。

关于数据流,经由环形总线128将输入激活和参数传送至模组集112、114中的模组。模组112、114中的每个模组将存储计算指派给该特定模组的输出激活的子集所需的输入激活的子集。用于模组的dmaop指令将使输入激活被从宽存储器移动至窄存储器。当要求的输入激活、参数/权重以及计算指令(ttu操作、存储地址等)在模组内可用时,模组内的计算开始。当模组内的mac运算器(下文待述)完成了由指令集定义的所有点积运算并且预激活函数被应用于乘法运算的结果(即,输出激活)时,发生在模组内的计算结束。

一个或者多个张量计算的结果包括将计算层的输出激活写入到执行该计算的模组的窄存储器单元。对于某些张量计算,经由网格总线126将输出边缘激活传送到相邻的模组。当计算跨了多个层时,需要将输出边缘激活传送到相邻的模组以计算后续层的输出激活。当所有层的计算完成时,dmaop将通过环形总线128将最终激活移动到分类器模组116。控制器102然后将从分类器模组116读取最终激活并且执行dmaop以将该最终激活移动到主机接口108。在一些实施方式中,分类器部分116执行nn的输出层(即,最后一层)的计算。在其它实施方式中,nn的输出层是以下中的一种:分类器层、回归层、或者通常与神经网络相关联的另一种层类型。

图2图示出了示例神经网络(nn)计算模组200。通常,示例模组200可以与上面参照图1所讨论的第一模组集112和第二模组集114内的模组中的任一个相对应。在各种实施方式中,也可以将计算模组200引用或者称为计算单元200。每个计算模组200是自包含的计算单元,该计算单元被配置为相对于模组集112、114内的其它对应模组独立地执行指令。如上面简要讨论的,每个计算模组200执行两种类型的指令:tensorop指令和dmaop指令。通常,每个指令类型将包括与深度循环嵌套相关联的计算操作,并且因此,每个指令类型通常将在多个时间点内执行,以确保所有循环迭代的完成。

如下面更详细地讨论的,不同的指令类型由计算模组200内的独立控制单元执行,该独立控制单元通过在计算模组200内管理的同步标志控件在数据上同步。该同步标志控件管理计算模组200内的不同指令类型的执行之间的同时性。将严格依照下发的顺序(即,先进先出)来执行与每个指令类型相关联的每个计算操作。关于这两个指令类型,tensorop和dmaop,这些不同指令类型之间不存在顺序保证,并且每个类型被计算模组200视为独立的控制线程。

关于数据流构造,计算模组200通常包括数据路径202和数据路径205,所述数据路径202和数据路径205分别为进出计算模组200的数据流提供通信路径。如上面所描述的,系统100包括布置成环形配置的三个不同的数据总线结构:csr总线122、指令总线124以及环形总线128。参照图2,数据路径205与指令总线124相对应,而数据路径202通常与csr总线122和环形总线128中的一个相对应。如图所示,数据路径202包括为离开计算模组200的数据提供输出路径的环形输出203和为进入计算模组200的数据提供输入路径的环形输入204。

计算模组200进一步包括tensorop控件206和dmaop控件208,所述tensorop控件206包括tensorop张量遍历单元(ttu)226,所述dmaop控件208包括dmaopttu228。tensorop控件206通常管理对tensoropttu寄存器232的写入和从tensoropttu寄存器232的读取,并且监管遍历操作以供dmaopttu226执行。同样,dmaop控件208通常管理对tensoropttu寄存器234的写入和从tensoropttu寄存器234的读取,并且监管遍历操作以供dmaopttu228执行。ttu寄存器232包括指令缓冲器,该指令缓冲器用于存储包括在tensorop控件206执行指令时待由tensoropttu226执行的操作的一个或者多个指令。同样,ttu寄存器234包括指令缓冲器,该指令缓冲器用于存储包括在dmaop控件208执行指令时待由ttu228执行的操作的一个或者多个指令。

如下面进一步所描述的,ttu226和/或228由计算模组200用来遍历通常驻留在窄存储器210和宽存储器212中的一个或者多个张量的阵列元素。在一些实施方式中,ttu226由tensorop控件206用来基于深度循环嵌套的执行来提供用于遍历多维张量的维度的张量运算。

在一些实施方式中,由计算模组200执行的某些指令经由数据路径205(即,指令总线124的一部分)到达模组。计算模组200将检查头位图以确定指令类型(tensorop或者dmaop)和指令子类型(读取操作或者写入操作)。随后按照指令类型将计算模组200接收到的指令写入特定指令缓冲器。通常,在计算模组200的组件执行指令之前,接收并且存储指令(即,写入缓冲器)。如图2所示,指令缓冲器(即tensoropttu寄存器232和dmaopttu寄存器234)可以分别包括先进先出(fifo)控制方案,该方案对一个或者多个相关指令的消耗(执行)进行优先级排序。

如上面简要讨论的,张量是多维几何对象,并且示例多维几何对象包括矩阵和数据阵列。计算模组200可以执行一种算法(包括深层嵌套循环)以通过迭代一个或者多个嵌套循环遍历n维张量来执行张量运算。在一个示例计算过程中,循环嵌套中的每个循环可以负责遍历n维张量的特定维度。如本文所描述的,tensorop控件206通常监管一个或者多个张量运算,该张量运算驱动遍历和访问特定张量构造的维度元素的序列以完成由深层嵌套循环定义的计算。

计算模组200进一步包括窄存储器210和宽存储器212。窄和宽的标号通常指窄存储器210和宽存储器212的存储器单元的宽度大小(位/字节)。在一些实施方式中,窄存储器210包括分别具有小于16位的大小或者宽度的存储器单元,宽窄存储器212包括分别具有小于32位的大小或者宽度的存储器单元。通常,计算模组200经由数据路径205接收输入激活并且dma控件208执行将该输入激活写入窄存储器210的操作。同样,计算模组200经由数据路径202接收参数(权重)并且dma控件208执行将该参数写入宽存储器212的操作。在一些实施方式中,窄存储器210可以包括通常在共享存储系统中使用的存储器仲裁器,以针对每个存储器循环来决定允许哪个控制设备(例如,tensorop控件206或dmaop控件208)访问窄存储器210的该共享存储器单元。

计算模组200进一步包括输入激活总线216和包括多个cell(cell)的mac阵列214,该多个cell中的每个cell包括mac运算器215与和寄存器220。通常,mac阵列214使用多个cell上的mac运算器215和和寄存器220来执行张量计算,该张量计算包括与点积计算相关的算术运算。输入激活总线216提供数据路径,在该数据路径中,通过窄存储器210针对mac阵列214中的每个mac运算器215的相应访问逐一提供输入激活。因此,基于对输入激活的逐一广播,特定cell的单个mac运算器215将分别接收输入激活。由mac阵列214的mac运算器所执行的算数运算通常包括将窄存储器210提供的输入激活与从宽存储器212访问的参数相乘来产生单个输出激活值。

在算数运算期间,可以将部分和累加并且存储在对应的,例如,和寄存器220中,或者写入宽存储器212并且由mac阵列214中的特定cell再次访问,以完成随后的乘法运算。张量计算可以被描述为具有第一部分和第二部分。当乘法运算产生输出激活时,例如,通过完成输入激活与参数相乘来生成输出激活,则第一部分完成。第二部分包括将非线性函数应用到输出激活,并且,在应用该函数之后,当输出激活被写入窄存储器210时,第二部分完成。

计算模组200进一步包括输出激活总线218、包括输出激活流水线224的非线性单元(nlu)222、nlu控件238、以及参考图230,该参考图230指示计算模组200中的组件的核心属性。为了清楚起见示出了参考图230,但是参考图230不包括在计算模组200中。核心属性包括特定组件是单元、存储设备、运算器、控制设备还是数据路径。通常,在张量计算的第一部分完成后,经由输出激活总线218将输出激活从mac阵列214提供至nlu222。在到达nlu22之后,将经由激活流水线224接收到的指定激活函数的数据应用于输出激活并且然后将该输出激活写入窄存储器210。在一些实施方式中,输出激活总线218包括至少一个流水线式移位寄存器236,并且,完成张量计算的第二部分包括使用激活总线218的移位寄存器236向窄存储器210移位输出激活。

关于例如两个多维数据阵列的点积计算,对于单个计算模组200,mac阵列214提供稳健的单指令多数据(simd)功能。simd通常意味着所有的并行单元(多个mac运算器215)共享相同的指令(基于深度循环嵌套),但是每个mac运算器215在不同的数据元素上执行指令。在一个基本示例中,在一个循环中加入阵列[1、2、3、4]和[5、6、7、8]元素级以获得阵列[6,8,10,12]通常需要四个算数单元来对每个元素执行运算。通过使用simd,这四个单元可以共享相同的指令(例如,“添加”)并且并行执行计算。因为指令共享,所以减少了对指令宽度和指令存储器的要求,因此提高了效率。因此,相较于现有方法,系统100和计算模组200在张量计算中提供了增强的加速和并行。

在一个示例中,并且如下面更详细地所描述的,单个指令可以由控制器102提供至多个计算模组200(见图1中的模组集112、114)以供多个mac阵列214消耗。通常,神经网络层可以包括多个输出神经元,并且所述输出神经元可以被划分从而可以将与输出神经元的子集相关联的张量计算指派至模组集112、114中的特定模组。随后,模组集112、114中的特定模组可以对给定的层而对不同神经元的组执行相关的张量计算。因此,计算模组200可以提供至少两种形式的并行:1)一种形式包括在模组集112、114中的多个模组中划分输出激活(与输出神经元的子集相对应);以及2)另一种形式包括基于在模组集112、114中的模组中进行的划分,同时计算(利用单个指令)输出神经元的多个子集。

图3图示出了示例张量遍历单元(ttu)结构300,该示例张量遍历单元(ttu)结构300包括四个要跟踪的张量,每个所述张量的深度为8。ttu300通常包括计数器张量302、步幅张量304、初始化张量306、以及限制张量308。ttu300进一步包括加法器群310和张量地址索引312。如上面所描述的,张量是多维几何对象,并且,为了访问张量的元素,必须提供每个维度的索引。因为张量被存储在窄存储器210和宽存储器212中,所以必须将张量索引集转换为存储地址集。在一些实施方式中,通过经由张量地址索引312使存储器地址成为索引和反映的地址的线性组合,来完成索引到存储器地址的转换。

在计算模组200中,每个控制线程存在一个ttu,并且每种指令类型(tensorop和dmaop)存在一个控制线程。因此,如上面所讨论的,在计算模组200中存在两个ttu集:1)tensoropttu226;以及2)dmaopttu228。在各种实施方式中,tensorop控件206将使ttu300在特定张量运算开始时加载tensoropttu计数器302、限制308和步幅值304,并且在指令回退之前不会改变寄存器的值。所述两个ttu中的每一个将需要在计算模组200中生成以下存储器地址端口的地址:1)宽存储器212地址端口,以及2)具有四个独立仲裁的群的窄存储器210,这四个独立仲裁的群被表示为四个地址端口。

如上面所讨论的,在一些实施方式中,窄存储器210可以包括存储器仲裁器,该存储器仲裁器通常用在共享存储器系统中以针对每个存储器循环决定允许哪个控制设备(例如,tensorop控件206或者dmaop控件208)访问窄存储器210的共享存储器资源。在一个示例中,不同的指令类型(tensorop和dmaop)是独立的控制线程,该控制线程请求需要被仲裁的存储器访问。当特定控制线程向存储器提交张量元素时,控制线程对提交给存储器的张量引用的计数器302进行增量。

在一个示例中,当tensorop控件206执行用于访问张量的特定元素的指令时,ttu300可以确定该张量的特定元素的地址,从而使控件206可以访问存储,例如,使窄存储器210读取表示特定元素的激活值的数据。在一些实施方式中,程序可以包括嵌套循环,并且控件206可以根据与嵌套循环相关联的当前索引变量值来执行访问嵌套循环中的二维阵列变量的元素的指令。

ttu300可以同时保持给定张量的多达x个ttu行的遍历状态。同时驻留在ttu300中的每个张量占用专用硬件张量控制描述符。硬件控制描述符可以由每行位置的x个ttu计数器302、步幅304、以及支持张量的限制寄存器308,该张量每行维度具有多达x个ttu计数器。在一些实施方式中,行的数量和每行计数器的数量可以不同。

对于给定的位置寄存器,通过包括将位置寄存器加在一起的加法运算,来计算最终的存储器地址。将基地址包含到计数器302中。驻留在相同存储器中的张量参考共享一个或者多个加法器。在一种实施方式中,因为在循环中的任何给定端口上可能只有一个单独的加载/存储,所以循环嵌套控制的功能是确保驻留在相同窄或者宽存储器中的多个张量参考在任何给定的循环上都不使其计数器增量。使用寄存器来计算存储器访问地址值包括偏移值的确定,2016年2月3日提交的标题为“matrixprocessingapparatus”》的专利申请序列号为15/014,265对此进行了更详细的描述,其全部公开内容通过引用合并于此。

例如,当软件算法处理n维张量时,可以使用嵌套循环,每个循环负责遍历该n维张量中的每个维度。多维张量可以是矩阵或者多维矩阵。n维张量中的每个维度可以包括一个或者多个元素,其中每个元素可以存储相应的数据值。例如,张量可以是程序中的变量,其中,该变量可以具有三个维度。第一维度可以具有三百个元素的长度,第二维度可以具有一千个元素的长度,并且第三维度可以具有二十个元素的长度。

遍历嵌套循环中的张量可以要求计算元素的存储器地址值以加载或者存储该元素的对应数据值。例如,for循环是嵌套循环,其中,由三个循环索引变量跟踪的三个循环可以被嵌套以遍历三维张量。在某些情况下,处理器可能需要执行循环边界条件,诸如,用外循环索引变量设置内循环的循环边界。例如,在确定是否退出嵌套循环的最内部循环时,程序可以将最内部循环的循环索引变量的当前值与嵌套循环的最外部循环的循环索引变量的当前值进行比较。

通常,当计算模组的处理单元执行访问张量的特定元素的指令时,张量遍历单元确定该张量的特定元素的地址,从而使处理单元可以访问存储介质(存储器)以读取表示特定元素的值的数据。例如,程序可以包括嵌套循环,并且处理单元可以根据与嵌套循环相关联的当前索引变量值来执行访问嵌套循环中的二维阵列变量的元素的指令。基于与嵌套循环相关联的当前索引变量值,张量遍历单元可以确定表示与二维阵列变量的第一元素的偏移量的偏移值。然后处理单元可以使用该偏移值从存储器访问二维阵列变量的特定元素。

下面提供可以用于示例专门的ttu300的模板参数:1)x个ttu行;2)每行x个ttu计数器;3)x个ttu加法器单元;4)每个ttu行指示共享加法器参考;以及5)每个计数器指示x计数器大小[ttu][行][深度]。所有的ttu寄存器从架构上看都是可见的。计算需要访问的特定张量元素的地址(即,张量地址312)是计数器的加法结果。当从控制线程向ttu的一行发出增量信号时,ttu300执行单个循环运算并且通过该维度的步幅304来增加最内部的维度,并且通过所有深度来传播调用(rollover)。

通常,ttu300确定与一个或者多个张量相关联的状态。该状态可以包括循环边界值、当前循环索引变量值、用于计算存储器地址值的维度乘数、和/或用于处理分支循环边界的程序计数器值。ttu300可以包括一个或者多个张量状态元素和算术逻辑单元。张量状态元素中的每一个可以是存储元素,例如,寄存器或者任何其它合适的存储电路。在一些实施方式中,张量状态元素可以从物理上或者逻辑上排列成不同的组,如在专利申请序列号15/014,265中更详细地描述的。

图4图示出了示例架构,该示例架构包括窄存储器210经由输入总线216将激活404广播至一个或者多个乘法累加(mac)运算器。移位寄存器404提供移位功能,借此,将激活404发送到输入总线216,每次发送一个,以供maccell410中的一个或者多个mac运算器215接收。通常,可以将maccell410(包括mac运算器215)定义为计算cell,该计算cell计算部分和,并且在一些实施方式中,被配置为将部分和数据写入输出总线218。如图所示,cell410可以由一个或者多个mac运算器组成。在一种实施方式中,maccell410中的mac运算器215的数量被称为cell的发射宽度。作为一个示例,双发射cell指带有两个mac运算器的cell,这两个mac运算器可以计算带有两个参数(来自宽存储器212)的两个激活值(来自窄存储器210)的乘法并且执行这两个乘数的积与当前部分和的结果之间的加法。

如上面所描述的,输入总线216是广播总线,该广播总线将输入激活提供至线性单元(即,mac阵列214)中的mac运算器215。在一些实施方式中,所有的mac运算器215之间共享相同的输入。输入总线216的宽度必须足够宽以将该广播输入供应至给定mac阵列214的对应数量的cell。考虑以下示例来说明输入总线216的结构。在线性单元中的cell的数量等于四并且激活宽度等于8位时,输入总线216可以被配置为在每个循环提供多达四个输入激活。在该示例中,mac阵列214中的每个cell将只访问所广播的这四个激活外的一个激活。

基于由计算模组200接收到的指令的tensorop字段设置,mac阵列214的cell可能需要使用相同的输入激活来执行计算。这可以被称为mac阵列214的cell内的zout划分。同样,在mac阵列214的cell需要不同的激活以执行计算时,则发生cell内的zin划分。在前一种情况下,复制四次单个输入激活并且在四个周期内广播从窄存储器210读取的四个激活。在后一种情况下,每个周期均要求窄存储器210的读取。对于上面所提及的示例,tensorop控件206基于从控制器102接收到的指令的执行来编排该广播方法。

图5图示出了示例架构,该示例架构包括用于将输出激活提供至图2与图4中的窄存储器单元210的输出总线218。通常,计算模组200中的mac阵列214的每个maccell215计算不同的输出激活。然而,关于输出特征阵列,在输出特征深度小于计算模组200中的maccell215的数量的情况下,则可以对cell进行聚组以形成一个或者多个cell组。cell组中的所有maccell215计算相同的输出(即,针对输出特征图),然而每个cell只计算与zin维度的子集对应的输出的子集。结果,maccell215的输出现在是部分和,而不是最终的线性输出。在一些实施方式中,nlu222将基于由nlu控件238提供至nlu222的控制信号,将这些部分和整合到最终的线性输出中。

如上面所讨论的,输出总线218是流水式移位寄存器。在各种实施方式中,当张量计算的第一部分结束并且tensorop控件206指示(通过执行指令)需要写出部分和时,将存在提供至输出总线218的部分和的并行负载。并行负载的数量将与计算模组200中的maccell的数量相对应。tensorop控件206然后会使该部分和的量被移出并且通过非线性流水线发送。在一些实施方式中,可能存在实际上不利用模组中的所有mac单元来执行计算的情况。在这种情况下,并非所有移位至输出总线上的部分和都是有效的。在该示例中,tensorop控件206可以向mac阵列214提供控制信号以指示应该被移出的有效cell的数量。加载到输出总线218上的并行负载的量将仍然与计算模组中的maccell的数量相对应,然而,只有有效值才会被移出并且被提交至窄存储器210。

图6是使用图2中的神经网络计算模组200来执行张量计算的过程600的示例流程图。过程600开始于框602并且计算模组200的窄存储器210向输入激活数据总线216逐一发送(即,广播)激活。激活值被存储在窄存储器210中。窄存储器210可以是静态随机存取存储器(sram)群的集合,所述静态随机存取存储器群允许寻址到特定存储器位置以访问输入量。经由输入激活总线216将从窄存储器210读取的激活被广播至mac阵列214的线性cell(即,线性单元),该线性cell包括多个mac运算器215与和寄存器220。在过程600中的框604中,计算模组200中的mac运算器215分别接收两个输入:从输入激活总线216接收到一个输入(激活);并且从宽存储器212接收到另一个输入(参数)。因此,该激活向每个mac运算器215馈送所述输入中的一个输入,并且mac阵列214的cell中的每个mac运算器215从宽存储器212获得其第二乘数输入。

在过程600中的框606中,计算模组200的mac阵列214基于从存储器访问的数据阵列结构的元素来执行包括点积计算的张量计算。宽存储器212具有以位为单位的宽度,该宽度等于线性单元的宽度(32位)。因此,线性单元(lu)是从向量存储器(即,宽存储器212)接收数据的simd向量算术逻辑单元(alu)。在一些实施方式中,mac运算器215也可以从宽存储器212获得累加器输入(部分和)。在一些实施方式中,相对于宽存储器212端口,存在用于与两个不同操作数(参数和部分和)相关的读取和/或写入的时间共享。通常,为了对面积进行最优化,宽存储器212可以具有有限数量的端口。结果,当需要从宽存储器212读取操作数(例如,参数)并且同时将操作数(例如,部分和)写入宽存储器212时,可以阻塞与特定操作数相关联的流水线。

在框608中,计算模组200的计算cell(具有mac运算器215与和寄存器220)基于由mac/计算cell执行的乘法运算而产生至少一个输出激活。maccell运算的结果包括(在部分和算术运算期间)写回宽存储器的部分和或者发送至输出总线218的输出激活。在框610中,计算模组200的nlu222将非线性激活函数应用于输出激活并且然后将该激活写入窄存储器210。在一些实施方式中,输出总线218是移位寄存器并且可以累加来自mac运算器215的结果/输出激活的并行负载,但是将它们移出,每次一个,以便将非线性函数和写入操作应用于相同模组的窄存储器210。

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

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

适合执行计算机程序的计算机包括,例如,可以基于通用或者专用微处理器或者两者、或者任何其它类型的中央处理单元。通常,中央处理单元将接收来自只读存储器或者随机存取存储器或者两者的指令和数据。计算机的必要元件是用于进行或者执行指令的中央处理单元、和用于存储指令和数据的一个或者多个存储器设备。通常,计算机还将包括用于存储数据的一个或者多个海量存储设备(例如,磁盘、磁光盘、或者光盘),或者计算机可以操作地耦合以接收来自该海量存储设备的数据或者将数据传输至该海量存储设备或者进行两者。然而,计算机无需具有这种设备。

适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,包括:例如,半导体存储器设备(例如,eprom、eeprom、和闪速存储器设备)、磁盘(例如,内部硬盘或者可移动盘)。处理器和存储器可以由专用逻辑电路系统补充或者可以并入该专用逻辑电路系统中。

虽然本说明书包含了许多具体实施细节,但是不应该将这些细节视为对任何发明或者可能被要求保护的内容的范围的限制,而是作为针对特定发明的特定实施例的特征的描述。在本说明书中在单独实施例的场境下描述的某些特征还可以组合地实施在单个实施例中。相反,在单个实施例的场境中描述的各种特征也可以单独地或者按照任何合适的子组合来实施在多个实施例中。此外,尽管可能将特征描述为在某些组合中起作用并且甚至最初如此要求保护,但是在一些情况下来自所要求保护的组合的一个或多个特征能够从组合中被删去,并且所要求保护的组合可以涉及子组合或子组合的变型。

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

在以下示例中总结了进一步的实施方式:

示例1:一种用于加速张量计算的计算单元,该计算单元包括:具有第一数据宽度的第一存储器群,所述第一存储器群用于存储输入激活或者输出激活中的至少一个;具有比所述第一数据宽度大的第二数据宽度的第二存储器群,所述第二存储器群用于存储在执行计算时使用的一个或者多个参数;至少一个cell,所述至少一个cell包括从所述第二存储器群接收参数并且执行计算的至少一个乘法累加(“mac”)运算器;与至少所述第一存储器群进行数据通信的第一遍历单元,所述第一遍历单元被配置为向所述第一存储器群提供控制信号以使输入激活被提供至能够由mac运算器访问的数据总线;并且其中,所述计算单元执行与数据阵列中的至少一个元素相关联的一个或者多个计算,所述一个或多个计算由所述mac运算器执行并且部分地包括从所述数据总线接收的所述输入激活与从所述第二存储器群接收的参数的乘法运算。

示例2:根据示例1的计算单元,其中,计算单元通过执行包括多个循环的循环嵌套来执行所述计算中的一个或者多个计算,其中所述循环嵌套的结构包括由所述第一遍历单元使用来遍历所述数据阵列的一个或者多个维度的相应循环。

示例3:根据示例2的计算单元,其中,所述一个或者多个计算部分地基于由所述第一遍历单元提供的张量运算来执行,该张量运算包括用于访问数据阵列中的一个或者多个元素的循环嵌套结构。

示例4:根据示例1至3的计算单元,进一步包括第二遍历单元,该第二遍历单元被配置为基于从所述计算单元外部的源接收的指令来访问所述第一存储器群的至少一个存储器位置和所述第二存储器群的至少一个存储器位置。

示例5:根据示例4的计算单元,其中,所述第一遍历单元是张量运算遍历单元,并且所述第二遍历单元是直接存储器访问遍历单元,并且其中,数据阵列与包括多个元素的张量相对应。

示例6:根据示例1至5的计算单元,其中,所述计算单元包括非线性单元,并且所述计算的第一部分包括基于乘法运算产生一个或者多个输出激活,并且所述计算的第二部分包括:通过所述非线性单元将非线性函数应用到一个或者多个输出激活。

示例7:根据示例6的计算单元,其中,由所述计算单元执行的一个或者多个计算包括使用移位寄存器将所述输出激活移位到所述第一存储器群。

示例8:根据示例1至8的计算单元,进一步包括延伸到所述计算单元外部的环形总线的部分,其中,该环形总线在所述第一存储器群与另一相邻计算单元的存储器群之间以及所述第二存储器群和另一相邻计算单元的存储器群之间提供数据路径。

示例9:根据示例1至8中的一个示例的计算单元,其中,第二存储器群被配置为存储部分和或一个或者多个池化层输入中的至少一种。

示例10:一种用于加速张量计算的计算机实现的方法,该方法包括:响应于第一存储器群接收到来自第一遍历单元的控制信号,通过具有第一数据宽度的第一存储器群,发送第一输入激活,所述第一存储器群被设置在计算单元中,并且其中,所述第一输入激活由能够通过该计算单元的至少cell访问的数据总线来提供;通过该至少一个cell,接收来自具有比所述第一数据宽度大的第二数据宽度的第二存储器群的一个或者多个参数,并且其中,该至少一个cell包括至少一个乘法累加(“mac”)运算器;通过所述mac运算器,执行与数据阵列中的至少一个元素相关联的一个或者多个计算,其中,所述一个或者多个计算部分地包括从所述数据总线访问的至少所述第一输入激活和从所述第二存储器群接收到的至少一个参数的乘法运算。

示例11:根据示例10的计算机实现的方法,其中,所述一个或者多个计算部分地基于所述计算单元执行包括多个循环的循环嵌套来执行,其中,该循环嵌套的结构指示所述第一遍历单元遍历所述数据阵列中的一个或者多个维度的方式。

示例12:根据示例11的计算机实现的方法,进一步包括:通过所述第一遍历单元,提供包括用于访问所述数据阵列的一个或者多个元素的循环嵌套结构的张量运算。

示例13:根据示例10至12中的一个示例的计算机实现的方法,其中,所述第一遍历单元是张量运算遍历单元,并且所述第二遍历单元是直接存储器访问遍历单元,并且其中,数据阵列与包括多个元素的张量相对应。

示例14:根据示例10至13中的一个示例的计算机实现的方法,进一步包括:通过基于所述乘法计算产生至少一个输出激活来执行所述一个或多个计算的第一部分。

示例15:根据示例14的计算机实现的方法,进一步包括:通过将非线性函数应用到所述一个或者多个输出激活来执行所述一个或者多个计算的第二部分。

示例16:一种非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质包括能够由一个或者多个处理器执行的指令,该指令在这样的执行时使所述一个或者多个处理器执行操作,该操作包括:响应于所述第一存储器群接收到来自第一遍历单元的控制信号,通过具有第一数据宽度的第一存储器群,发送第一输入激活,所述第一存储器群被设置在计算单元中,并且其中,所述第一输入激活由能够通过该计算单元的至少cell访问的数据总线来提供;通过该至少一个cell,接收来自具有比所述第一数据宽度大的第二数据宽度的第二存储器群的一个或者多个参数,并且其中,该至少一个cell包括至少一个乘法累加(“mac”)运算器;以及通过所述mac运算器,执行与数据阵列中的至少一个元素相关联的一个或者多个计算,其中,所述一个或者多个计算部分地包括从所述数据总线访问的至少所述第一输入激活和从所述第二存储器群接收到的至少一个参数的乘法运算。

示例17:根据示例16的非暂时性计算机可读介质,其中,所述一个或者多个计算部分地基于所述计算单元执行包括多个循环的循环嵌套来执行,其中,该循环嵌套的结构指示所述第一遍历单元遍历所述数据阵列中的一个或者多个维度的方式。

示例18:根据示例17的非暂时性计算机可读介质,进一步包括:通过所述第一遍历单元,提供包括用于访问所述数据阵列的一个或者多个元素的循环嵌套结构的张量运算。

示例19:根据示例16至18中的一个示例的非暂时性计算机可读介质,进一步包括:通过基于所述乘法计算产生至少一个输出激活来执行所述一个或多个计算的第一部分。

示例20:根据示例19的非暂时性计算机可读介质,进一步包括:通过将非线性函数应用到所述一个或者多个输出激活来执行所述一个或者多个计算的第二部分。

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1