CN110678840B - 张量寄存器文件 - Google Patents

张量寄存器文件 Download PDF

Info

Publication number
CN110678840B
CN110678840B CN201880034185.4A CN201880034185A CN110678840B CN 110678840 B CN110678840 B CN 110678840B CN 201880034185 A CN201880034185 A CN 201880034185A CN 110678840 B CN110678840 B CN 110678840B
Authority
CN
China
Prior art keywords
tensor
type
calculator
vector
register file
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.)
Active
Application number
CN201880034185.4A
Other languages
English (en)
Other versions
CN110678840A (zh
Inventor
J·H·福沃斯
S·K·莱因哈特
K·奥恰洛夫
E·S·钟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN110678840A publication Critical patent/CN110678840A/zh
Application granted granted Critical
Publication of CN110678840B publication Critical patent/CN110678840B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30163Decoding the operand specifier, e.g. specifier format with implied specifier, e.g. top of stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • G06F9/3897Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros with adaptable data path

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)

Abstract

公开了硬件加速器中的张量寄存器文件。一种装置可以包括各自被配置为执行一种类型的张量运算的张量运算计算器。该装置还可以包括张量寄存器文件,张量寄存器文件中的每个张量寄存器文件与张量运算计算器之一相关联。该装置还可以包括逻辑,该逻辑被配置为根据要对张量中的相应张量执行的张量运算的类型,来将该相应张量存储在多个张量寄存器文件中。该装置还可以基于机器指令要执行的张量运算的类型,来控制对张量寄存器文件的读取访问。

Description

张量寄存器文件
背景技术
计算越来越需要极其强大的处理器。例如,机器学习(诸如但不限于深度神经网络)要求处理器能够每秒执行极高数目的操作。在通用中央处理单元(CPU)上执行机器学习(诸如但不限于深度神经网络)可能极其昂贵。
硬件加速器已经被用来补充在通用CPU上执行的处理。
发明内容
本文中描述的某些实施例涉及具有张量寄存器文件的硬件加速器。在一个实施例中,一种装置包括各自被配置为执行一种类型的张量运算的张量运算计算器。该装置还包括张量寄存器文件,张量寄存器文件中的每个张量寄存器文件与张量运算计算器之一相关联。该装置还包括被配置为根据要对张量中的相应张量执行的张量运算的类型来将该相应张量存储在多个张量寄存器文件中的逻辑。
提供本“发明内容”以便以简化的形式介绍一些概念,这些概念要在下面的“具体实施方式”中进一步描述。本“发明内容”既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
附图说明
图1描绘了硬件加速器的一个实施例。
图2描绘了硬件加速器的一个实施例的更多细节。
图3A示出了机器指令链的一个示例。
图3B是在张量处理器中执行机器指令链的过程的一个实施例的流程图。
图3C是指令解码器的一个实施例的更多细节的图。
图4是在硬件加速器中执行机器指令的过程的一个实施例的流程图。
图5是执行机器指令的过程的一个实施例的流程图。
图6A-图6D是可以用于将来自一个机器指令的结果张量用作另一机器指令中的缺失张量操作数的不同技术的过程的实施例的流程图。
图7是从张量寄存器文件访问张量的过程的一个实施例的流程图。
图8是将张量存储在张量寄存器文件中的过程的一个实施例的流程图。
图9是响应于将张量存储在张量处理器中的机器指令而将张量存储在张量处理器中的过程的一个实施例的流程图。
图10是从张量处理器中的张量寄存器文件访问张量的过程的一个实施例的流程图,其中基于机器指令的张量运算的类型,来控制对张量寄存器文件的访问。
图11是示出在硬件加速器的一个实施例中可以通过执行表II中的代码来实现的功能的图。
图12是基于拼接因子在张量处理器中执行机器指令链的过程的一个实施例的流程图。
图13示出了如本文所述的硬件加速器的实施例可以在其中操作的示例环境。
具体实施方式
本技术的某些实施例涉及硬件加速器。一些实施例涉及硬件加速器中的张量寄存器文件。本技术的一些实施例涉及硬件加速器中的指令集合架构。
硬件加速器可以具有各种张量运算计算器,以执行各种类型的张量运算。张量运算计算器可能需要张量以对其进行运算。如果张量运算计算器必须等待所需要的张量被提供,则高效计算可能会大大减慢。
在一些实施例中,硬件加速器不是具有存储用于所有类型的张量运算的张量的大的张量寄存器文件,而是具有多个较小的张量寄存器文件。这些较小的张量寄存器文件可以专用于张量运算计算器的一个实例。这样的配置可以通过在高百分比的时间使各种张量运算计算器保持繁忙来提高带宽。例如,具有专用张量寄存器文件可以避免或至少减少在张量运算计算器等待从存储装置提供张量时原本可能发生的停顿。而且,与具有被多端口处理以允许同时访问不同的张量运算计算器的较大的集中式张量寄存器文件相比,具有多个较小的张量寄存器文件可以降低成本。
硬件加速器可以接收机器指令,以实现例如机器学习算法。例如,硬件加速器可以接收机器指令,以使硬件加速器实现深度神经网络。表示机器学习算法(诸如深度神经网络)可能需要极大量的存储器。对机器指令进行解码可能潜在地成为瓶颈,从而降低效率。
在一些实施例中,减少了在硬件加速器中使用的机器指令中的比特数目,以提供高效计算。这可以节省大量存储器。这还可以节省解码机器指令的时间。在一些实施例中,利用以下观察:执行一个机器指令产生的张量频繁地用作下一机器指令的输入张量。
硬件加速器的一个实施例具有指令集合,该指令集合中的一些机器指令缺失执行该机器指令所需要的张量操作数。因此,机器指令需要较少的比特以进行编码。硬件加速器可以执行第一机器指令,从而产生张量。硬件加速器可以使用结果张量作为第二机器指令中的缺失张量操作数,来执行第二机器指令。因此,硬件加速器可以利用以下观察:执行一个机器指令产生的张量可以频繁地用作另一机器指令的输入张量。而且,将第一机器指令的结果用于第二机器指令中的张量操作数无需将第一机器指令的结果存储在硬件加速器中的寄存器文件(或其他存储装置,诸如硬件加速器外部的存储器)中、以及在单独的机器指令中从存储装置中读回结果。因此,可以节省硬件资源,并且可以减少机器指令之间的延迟。
图1描绘了硬件加速器100的一个实施例。硬件加速器100在本文中还可以被称为张量处理器。硬件加速器100可以在现场可编程门阵列(FPGA)、专用电路(ASIC)、专用标准产品(ASSP)、片上系统(SoC)、复杂可编程逻辑器件(CPLD)中实现,但不限于此。术语“硬件”加速器广泛地涵盖利用硬件设备执行功能的不同方式,例如至少包括:a)至少一些任务在硬ASIC逻辑等中实现的情况;b)至少一些任务在软(可配置)FPGA逻辑等中实现的情况;c)至少一些任务作为软件在FPGA软件处理器覆盖层等上运行的情况;d)至少一些任务作为软件在硬ASIC处理器等上运行的情况等;或其任何组合。
硬件加速器100包括几个张量运算组件102(1)-102(3)、张量存储器管理器104、指令队列120和指令解码器106。指令队列120可以从硬件加速器100外部接收要由硬件加速器100执行的机器指令。在一个实施例中,硬件加速器100驻存在诸如图13中的环境1300的环境中。在那种环境中,硬件加速器100可以通过总线1314接收机器指令。例如,(多个)处理器1306可以向硬件加速器100发送机器指令。
指令解码器106可以被配置为解码机器指令,并且向硬件加速器100中的其他元件发送控制信号,以便执行机器指令。在一些实施例中,控制信号被称为子组件命令。
张量存储器管理器104可以接收要由硬件加速器100在执行机器指令时使用的张量。张量可以源自硬件加速器100外部的存储器。例如,参考图13,张量可以源自存储器1312。张量存储器管理器104还可以将张量存储到硬件加速器100外部的存储器,诸如存储器1312。
在本文中,张量包括但不限于矢量和矩阵。如本文中限定的,矢量由“v”个元素的有序集组成,其中“v”是大于1的整数。如本文中限定的,矩阵由“n×m”个元素的阵列组成,其中“n”和“m”各自是大于1的整数。矩阵可以是方矩阵(在这种情况下,n=m),但是不要求是方矩阵。在某些情况下,矢量可以对应于矩阵的行或列。例如,给定矢量的“v”值可以等于“n”和/或“m”。然而,不要求“v”的值等于“n”或“m”(在这种情况下,矢量可以用于除了矩阵-矢量运算以外的其他运算)。注意,对于由硬件加速器100存储和操作的所有矢量,不要求“v”的值相同。同样,对于由硬件加速器100存储和操作的所有矩阵,不要求“n”和“m”的值相同。在一些实施例中,张量元素是标量值。将理解,本文中使用的术语“张量”不要求张量服从任何变换规则。
张量运算组件102(1)-102(3)各自可以被配置为执行一种或多种类型的张量运算。因此,每个张量运算组件102可以被配置为执行一种或多种类型的张量运算的集合。张量运算可以涉及一个或多个张量。例如,某些张量运算涉及单个张量,某些涉及两个张量。在一些实施例中,张量运算涉及三个或更多张量。涉及两个张量的张量运算的类型的示例包括但不限于矩阵-矩阵乘法、矩阵-矢量乘法、矩阵求逆、矢量-矢量乘法、矢量-矢量加法和矢量-矢量减法。注意,对于这些张量运算中的某些张量运算,可以有不止一种技术。例如,矢量-矢量乘法可以是点积或叉积。
为了执行各种类型的张量运算,张量运算组件102具有各种张量运算计算器112。张量运算组件102(1)具有张量运算计算器112(1)。张量运算组件102(2)和102(3)各自具有张量运算计算器112(2)的实例以及张量运算计算器112(3)的实例。张量运算计算器112(1)执行某种类型的张量运算,诸如矩阵-矢量乘法。张量运算计算器112(2)执行另一种类型的张量运算,诸如矢量-矢量乘法。张量运算计算器112(3)执行又一种类型的张量运算,诸如矢量-矢量加法。注意,一些张量运算计算器112可以执行不止一种类型的张量运算。例如,张量运算计算器112(3)还可以执行为矢量-矢量减法。可以存在执行其他类型的张量运算的其他张量运算计算器112。
描绘了三个张量运算组件102,但是可以存在多于或少于三个的张量运算组件102。在某些情况下,张量运算组件102中的两个或更多个可以被配置为执行组张量运算的相同集合。在图1的示例中,张量运算组件102(2)和102(3)各自能够执行张量运算的相同集合。然而,不要求具有能够执行张量运算的相同集合的不止一个张量运算组件102。
在一些实施例中,硬件加速器100不是具有存储用于所有类型的张量运算的张量的大的张量寄存器文件,而是具有多个较小的张量寄存器文件110,其中至少一些较小的张量寄存器文件110用于存储用于具体类型的张量运算的张量。这些较小的张量寄存器文件110可以专用于张量运算计算器112的一个实例。与具有被多端口处理以允许同时访问不同的张量运算计算器112的较大的集中式张量寄存器文件相比,这种配置可以降低成本。而且,该配置可以通过在较高百分比的时间使各种张量运算计算器112保持繁忙来提高带宽。例如,具有专用张量寄存器文件110可以避免或至少减少在张量运算计算器112等待从存储装置提供张量时原本可能发生的停顿。
硬件加速器100包括多个张量寄存器文件110(1)-110(5)。张量寄存器文件110用于存储张量,该张量用于张量运算计算器112的输入。在一个实施例中,张量寄存器文件中的至少一些张量寄存器文件(例如,110(1)-110(4))专用于特定类型的张量运算计算器112。注意,一个或多个张量寄存器文件(例如,110(5))可能不专用于特定类型的张量运算计算器112。因此,张量寄存器文件110中的至少一些张量寄存器文件110可以专用于一个或多个张量运算的某个集合。例如,张量寄存器文件110(1)可以用于存储要输入到张量运算计算器112(1)的张量。同样,张量寄存器文件110(4)可以用于存储要输入到张量运算计算器112(1)的张量。在一个实施例中,每当张量存储器管理器104接收到要在由张量运算计算器112(1)执行的类型的张量运算中使用的张量时,该张量可以被存储在张量寄存器文件110(1)或110(4)中。
在图1的示例中,张量寄存器文件110(2)可以用于存储要输入到张量运算计算器112(2)的张量。注意,存在张量寄存器文件110(2)的两个实例和张量运算计算器112(2)的两个实例。在一个实施例中,张量运算计算器112(2)的每个实例具有其自己的专用张量寄存器文件110(2)。在一个实施例中,每当张量存储器管理器104接收到要在由张量运算计算器112(2)执行的类型的张量运算中使用的张量时,该张量被存储在张量寄存器文件110(2)的所有实例中。注意,张量运算计算器112可以具有零个、一个、两个或更多专用张量寄存器文件110。
在图1的示例中,张量寄存器文件110(3)可以用于存储要输入到张量运算计算器112(3)的张量。注意,存在张量寄存器文件110(3)的两个实例和张量运算计算器112(3)的两个实例。在一个实施例中,张量运算计算器112(3)的每个实例具有其自己的专用张量寄存器文件110(3)。在一个实施例中,每当张量存储器管理器104接收到要在由张量运算计算器112(3)执行的类型的张量运算中使用的张量时,该张量被存储在张量寄存器文件110(3)的所有实例中。
张量寄存器文件110(5)不必专用于张量运算计算器112之一。张量寄存器文件110(5)被配置为向张量运算组件102(2)提供张量。因此,张量寄存器文件110(5)中的张量可以由张量运算计算器112(1)-112(3)中的任何张量运算计算器使用。
在一个实施例中,张量寄存器文件110(1)-110(4)表示四种不同类型的张量寄存器文件,其中每种与一种或多种类型的张量运算的不同集合相关联。例如,张量寄存器文件110(1)可以与一种或多种类型的张量运算的第一集合相关联,张量寄存器文件110(2)的每个实例可以与一种或多种类型的张量运算的第二集合相关联,张量寄存器文件110(3)的每个实例可以与一种或多种类型的张量运算的第三集合相关联,并且张量寄存器文件110(4)的每个实例可以与一种或多种类型的张量运算的第四集合相关联。张量运算的第一至第四集合可以各自包括一种或多种类型的张量运算,其中每个集合与其他集合不同。
注意,可以同时访问张量寄存器文件110中的不止一个张量寄存器文件110(用于读取访问和写入访问两者)。这可以帮助允许各种张量运算计算器112保持繁忙,这高效地利用了硬件加速器100中的资源。例如,张量运算计算器112(1)可以执行对张量寄存器文件110(4)的读取访问,与此同时,张量运算组件102(2)中的实例张量运算计算器112(2)执行对张量寄存器文件110(2)的读取访问,并且与此同时,张量运算组件102(2)中的实例张量运算计算器112(3)执行对张量寄存器文件110(3)的读取访问。
在一个实施例中,硬件加速器100被配置为处理机器指令链。在一个实施例中,链是计算的基元单元。例如,链可以开始于从硬件加速器100外部的存储器中加载张量的机器指令,并且可以结束于将张量存储到硬件加速器100外部的存储器的机器指令。然而,在一个实施例中,链中没有其他机器指令将张量存储到存储器或从存储器加载张量。参考图3A,示出并且讨论了机器指令链的一个示例的更多细节。
图2描绘了硬件加速器100的一个实施例的更多细节。硬件加速器100还可以被称为张量处理器。图2示出了一种可能的配置;然而,注意,硬件加速器100可以具有很多不同的配置。配置可以针对硬件加速器100期望执行的操作类型而被裁剪。这允许硬件加速器100极其高效。图2的配置可以用于执行深度神经网络中的操作(或计算),但不限于深度神经网络。
在图2的实施例中,张量运算组件102(1)可以执行矩阵-矢量乘法。因此,张量寄存器文件110(1)可以用于存储要在矩阵-矢量乘法中使用的矩阵。张量寄存器文件110(4)可以用于存储要在矩阵-矢量乘法中使用的矢量。
在图2的实施例中,张量运算组件102(1)包括格式转换器214和格式解转换器212。格式转换器214可以用于将输入张量的格式转换为更适合于矩阵-矢量乘法的格式。在一个实施例中,格式转换器214执行从浮点到块浮点的转换。在一个实施例中,格式解转换器212执行从块浮点回到浮点的转换。注意,整个硬件加速器100中的张量不限于特定格式。例如,张量的元素中的标量值可以用固定点、浮点、块浮点等表示。
在图2的实施例中,张量运算组件102(2)具有交叉开关组件236。交叉开关组件236被配置为将输入到张量运算组件102(2)的张量路由到合适的张量运算计算器112(2)、112(3)、112(4)。交叉开关组件236还可以被配置为将张量从张量运算组件102(2)中的张量运算计算器112路由到另一张量运算组件102(2)。交叉开关组件236可以包括响应于来自指令解码器106的控制信号以路由张量的多路复用器和解多路复用器。
注意,张量运算计算器112可以具有专用张量寄存器文件110。例如,张量寄存器文件110(2)可以专用于张量运算计算器112(2),并且张量寄存器文件110(3)可以专用于张量运算计算器112(3)。
张量运算计算器112(4)被配置为对单个张量执行运算。一个示例是取张量中的每个元素的S形(sigmoid)。另一示例是取张量中的每个元素的双曲正切。另一示例是对张量中的每个元素执行“ReLU”。ReLU是指线性整流单元。另一示例是将张量中的每个元素提高到eX的幂。注意,张量运算计算器112(4)可以分解成不同的计算组件,或者单个计算组件可以能够执行多种类型的计算。
还注意,一些张量计算组件112输入两个张量操作数,而其他张量计算组件输入单个张量操作数。例如,张量运算计算器112(2)具有用于张量操作数的两个输入(如由两个输入箭头所指示的)。同样地,张量运算计算器112(3)具有用于张量操作数的两个输入(如由两个输入箭头所指示的)。然而,张量运算计算器112(4)具有用于张量操作数的唯一输入(如由单个输入箭头所指示的)。张量运算组件102(2)中的每个张量计算组件向交叉开关组件236输出张量。张量运算组件102(2)中的交叉开关组件236向张量运算组件102(3)输出张量。
张量运算组件102(3)具有与刚刚关于张量运算组件102(2)所讨论的组件和操作类似的组件和操作。不同之处在于,张量运算组件102(3)在张量运算组件102(2)的“下游”。
指令解码器106从指令队列120接收机器指令,解码机器指令,并且向硬件加速器200中的其他组件发出控制信号。控制信号还可以称为子组件命令。控制信号在图2中由发源于指令解码器106的虚线箭头表示。
指令解码器106向张量运算组件102(1)-102(3)中的每个张量运算组件发送控制信号(或子组件命令)。控制信号包括子组件命令,该子组件命令指令张量运算组件102如何对张量寄存器文件110中的张量进行操作。张量运算组件可以一起作为流水线进行操作,以实现指令链。
硬件加速器100包括用于控制张量流的几个多路复用器226、228、230和两个解多路复用器224和232。指令解码器106向多路复用器226、228、230以及解多路复用器224和232发送控制信号,以路由张量。指令解码器106还向多功能初始张量组件234发送控制信号,多功能初始张量组件234向多路复用器230提供张量。
多路复用器230接收从张量运算组件102(1)输出的张量、以及来自多功能初始张量组件234中的张量寄存器文件110(5)的张量。例如,多路复用器230具有从张量运算组件102(1)接收第一张量的第一输入、和从多功能初始张量组件234中的张量寄存器文件110(5)接收第二张量的第二输入。多路复用器230响应于来自指令解码器106的控制信号,而将张量之一输出到张量运算组件102(2)。在该示例中,张量被提供给张量运算组件102(2)中的交叉开关236。
解多路复用器232接收从张量运算组件102(3)输出的张量。响应于来自指令解码器106的控制信号,该张量被路由到输出队列222、多路复用器226和/或多路复用器228中的一个或多个。
张量存储器管理器104包括输入队列202、矩阵路由器204和矢量路由器206。输入队列门控到硬件加速器200中的张量流。在张量首次从硬件加速器200外部的存储器(诸如存储器1312(参见图13))被提供给硬件加速器200时,输入队列202可以用于存储张量。这些张量可以包括矩阵和/或矢量。
张量存储器管理器104管理从输入队列202到硬件加速器200中的各种元件的张量流。张量存储器管理器104可以从指令解码器106接收控制信号,以关于张量的路由而指令张量存储器管理器104。矩阵路由器204被配置为将矩阵从输入队列202路由到张量寄存器文件110(1)。因此,在该实施例中,张量寄存器文件110(1)中的每个条目可以存储矩阵。矢量路由器206被配置为将矢量从输入队列202路由到解多路复用器224。响应于来自指令解码器106的控制信号,解多路复用器224将矢量提供给多路复用器226和多路复用器228。
因此,多路复用器226具有从解多路复用器224接收第一矢量的第一输入、和从解多路复用器232接收第二矢量的第二输入。多路复用器226具有输出,响应于来自指令解码器106的控制信号,该输出用于向张量寄存器文件110(4)和/或110(5)提供矢量。张量寄存器文件110(4)在张量运算组件102(1)中。张量寄存器文件110(5)在多功能初始张量组件234中。在一个实施例中,张量寄存器文件110(4)和110(5)两者都用于在指令链的开始处/附近存储“初始”张量。
多路复用器228具有从解多路复用器224接收第一矢量的第一输入、和从解多路复用器232接收第二矢量的第二输入。多路复用器228具有输出,响应于来自指令解码器106的控制信号,该输出用于向张量寄存器文件110(2)和110(3)提供矢量。在一个实施例中,响应于来自指令解码器106的控制信号,多路复用器228将其输入矢量之一提供给张量寄存器文件110(2)的所有实例。在一个实施例中,响应于来自指令解码器106的控制信号,多路复用器228将其输入矢量之一提供给张量寄存器文件110(3)的所有实例。
因此,多路复用器228可以用于将矢量路由到与特定类型的张量运算相关联的张量寄存器文件的所有实例。例如,如果矢量要被用于矢量-矢量乘法,则指令解码器106可以发送适当的控制信号,以将该矢量路由到专用于矢量-矢量乘法器的张量寄存器文件的所有实例。作为另一示例,如果矢量要被用于矢量-矢量加法/减法,则指令解码器106可以发送适当的控制信号,以将该矢量路由到专用于矢量-矢量加法器/减法器的张量寄存器文件的所有实例。
在一个实施例中,张量运算组件102(2)和102(3)被配置为对矢量进行操作,而不对矩阵进行操作。注意,张量运算组件102(2)和102(3)还可以被配置为对矩阵执行操作。在这种情况下,多路复用器226和228可以向张量运算组件102(2)和102(3)中的张量寄存器文件110提供矩阵。因此,代替或除了将矢量路由到解多路复用器224,张量存储器管理器104还可以将矩阵路由到解多路复用器224。
输出队列门控从硬件加速器200出去的张量流。例如,张量可以被存储到硬件加速器200外部的存储器(诸如存储器1312(参见图13))。
在一个实施例中,由在硬件加速器100(包括但不限于图1和/或2中的硬件加速器100的实施例)中执行的一个机器指令产生的张量被用作链中的下一机器指令的输入张量。为了说明,图3A示出了机器指令302(1)-302(5)的链300的示例。示例链300开始于从存储器中的位置“x”读取矢量的“vector_read”机器指令302(1)。在该示例中,在vector_read机器指令302(1)中未明确指定加载矢量的目的地。在一个实施例中,由vector_read机器指令加载的矢量被用作链中的下一机器指令的输入。执行“vector_read”机器指令的结果产生了本文中称为“结果张量”的东西。
第二机器指令302(2)是用于执行矩阵-矢量乘法的“matrix_vector multiply”指令。这是双张量运算的一个示例。因此,该机器指令需要两个张量操作数。注意,仅指定了一个张量操作数(“Wx”)。“XXX”指示在机器指令302(2)中没有指定张量操作数之一。在本文中,这被称为“缺失张量操作数”。在该示例中,来自“vector_read”机器指令302(1)的结果张量可以用于缺失张量操作数。
第三机器指令302(3)是用于将两个矢量相加的“vector_vector add”指令。这是双张量运算的另一示例。因此,该机器指令302(3)需要两个张量操作数。再次注意,仅指定了一个张量操作数(“b”)。再次,“XXX”指示在机器指令302(3)中没有指定张量操作数之一。在该示例中,来自“matrix_vector multiply”机器指令302(2)的结果张量可以用于缺失张量操作数。
第四机器指令302(4)是用于对矢量执行ReLU运算的“vector_ReLU”指令。这是单张量运算的示例。因此,该机器指令302(4)需要一个张量操作数。注意,没有张量操作数被指定。再次,“XXX”指示缺失张量操作数。在该示例中,来自“vector_vector add”机器指令302(3)的结果张量可以用于缺失张量操作数。
第五机器指令302(5)是用于将矢量写入到存储器中的位置“h”的“vector_write”指令。然而,未指定要写入到存储器的矢量。“XXX”指示缺失张量操作数。在该示例中,来自“vector_ReLU”机器指令302(4)的结果张量可以用于缺失张量操作数。
在一个实施例中,链300用于在深度神经网络中对神经元建模。在一个实施例中,链300包含用作激活函数的机器指令。深度神经网络领域的人们会很好地理解术语“激活函数”。在图3A中,机器指令302(4)用作激活函数。其他可能的激活函数包括但不限于S形和双曲正切。
对指令链要进行的一种观察是:可以通过vector_read命令从存储器中读入要使用的初始张量。作为另一示例,“matrix_read”指令可以用于将初始矩阵读入张量寄存器文件。要进行的另一观察是:链结束于将矢量存储到存储器的指令。然而,在初始矢量读取与矢量写入之间没有存储器访问。因此,链可以被认为是计算的基元单元。
在一个实施例中,链的开始通过从存储器的读取(诸如机器指令302(1))来限定,并且链的结束通过对存储器的写入(诸如机器指令302(5))来限定。然而,在从存储器读取之前,可以存在另一指令,诸如下面将要讨论的拼接因子(例如,参见图12)。而且,一个选项是机器指令明确限定链的开始或结束,诸如“chain_begin”指令或“chain_end”指令。例如,如果链在结束时没有将张量存储到存储器,则可以使用“chain_end”指令来指示链的结束。
对指令链要进行的另一观察是:对于第一机器指令,由执行机器指令而产生的张量被用作在后的机器指令的张量输入。中间机器指令各自从紧接在前的机器指令接收张量输入,并且向紧接在后的机器指令提供张量。最后的机器指令从紧接在前的机器指令接收张量。该模式是一个示例,并且在其他链中可以与该模式有些偏差。
对指令链要进行的另一观察是:与明确指定张量操作数的情况相比,可以使用更少的比特来对从另一机器指令接收张量操作数的那些机器指令进行编码。例如,可以使用一个字节的操作码(“matrix_vector multiply”)和一个字节的操作数(“Wx”)对matrix_vector multiply机器指令进行编码。不指定缺失操作数可以节省一个字节。类似的推理适用于具有缺失张量操作数的其他机器指令。这样节省大量存储器。注意,将诸如深度神经网络的程序表达为机器代码可能需要极大量的存储器。因此,减少机器指令中的比特数目可以节省大量的存储器。还可以节省指令解码器106对机器指令进行解码的时间。
在一个实施例中,指令解码器106被配置为发送控制信号以使机器指令链执行。例如,指令解码器106可以使初始张量被加载到张量寄存器文件110(4)中(“vector_read”)。指令解码器106可以使张量运算计算器112(1)使用矩阵和张量来执行矩阵-矢量乘法(“matrix_vector multiply”),该矩阵来自张量运算组件102(1)中的张量寄存器文件110(1),该张量来自张量运算组件102(1)中的张量寄存器文件110(4)。指令解码器106可以使张量运算组件102(2)中的张量运算计算器112(2)使用由张量运算计算器112(1)中的矩阵-矢量乘法得到的张量和张量运算组件102(2)中的张量寄存器文件110(2)中的张量,来执行矢量-矢量乘法(“vector_vector add”)。指令解码器106可以使张量运算组件102(2)中的张量运算计算器112(4)使用由矢量-矢量乘法产生的张量来执行矢量ReLU(“vector_ReLU”)。指令解码器106可以使由矢量ReLU产生的张量被存储到硬件加速器100外部的存储器(“vector_write”)。该机器指令链仅是众多可能序列的一个示例。
在一个实施例中,硬件加速具有针对通常将机器指令链接在一起的方式而被裁剪的配置。例如,参考示例链300,可以在张量运算计算器112(1)中执行matrix_vectormultiply指令302(2),其中结果张量向下游传递给张量运算组件102(2)。张量运算组件102(2)可以执行机器指令302(3)和302(4)。一些链可以具有附加机器指令,该附加机器指令可以在更下游、在张量运算组件102(3)中被执行。该配置可以在非常高百分比的时间使各种张量运算计算器112保持繁忙。特别地,张量运算计算器112(1)可以在高百分比的时间保持被占用进行matrix_vector multiply,这使得非常高效地利用硬件资源。
图3B是在张量处理器100中执行机器指令链的过程350的一个实施例的流程图。过程350可以在图1或图2的张量处理器100中实现,但不限于此。将参考图3A的示例链,但这仅出于讨论目的。在一个实施例中,链实现深度神经网络中的神经元。
步骤352包括确定新链是否已经开始。在一个实施例中,用于将张量读入张量处理器100中的机器指令指示新的链已经开始。在一个实施例中,用于改变张量的本地大小的机器指令指示新的链已经开始。下面的图12提供了可以用于缩放张量的本地大小的拼接因子的一个实施例的更多细节。参考图3A,作为一个示例,在该示例中,“vector_read”机器指令302(1)指示新的链已经开始。另一选项是存在“begin_chain”机器指令。另一选项是存在“matrix_read”机器指令。
步骤354包括执行链中的第一机器指令以产生结果张量。参考图3A,作为一个示例,执行“vector_read”机器指令302(1)通过将张量存储到张量寄存器文件110中的动作来产生结果张量。
步骤356包括使用来自紧接在前的机器指令的结果张量来执行链300中的下一机器指令302。在一个实施例中,结果张量用于缺失张量操作数。上面已经结合图3A讨论了步骤356的示例。
步骤358是确定链是否已经结束。关于图3A的示例链,该链在执行机器指令302(5)之后结束。另一可能性是:存在“chain_end”机器指令等。
在链尚未结束的情况下,过程350返回步骤356以执行链300中的下一机器指令302。如所指出的,下一机器指令可以使用来自紧接在前的机器指令的结果张量。因此,各种机器指令302可以被认为是“链”,其中通过使用来自一个机器指令的结果张量来执行下一机器指令,形成联接。
图3C是指令解码器106的一个实施例的更多细节的图。指令解码器106可以在图1或图2的硬件加速器100中使用,但不限于此。指令解码器106包括运算子解码器312、操作数解码器304、缺失张量操作数确定逻辑306、张量寄存器文件确定逻辑308和子组件命令提供器310。
运算子解码器312被配置为对机器指令302的操作码部分进行解码。例如,关于图3A的示例机器指令302(1),“vector_read”部分可以由一个字节的操作码的唯一值来指定。每个机器指令302可以具有针对一个字节的操作码的唯一值。操作码可以小于或大于一个字节。
操作数解码器304被配置为对机器指令的操作数部分进行解码(假定存在操作数)。例如,关于图3A的示例机器指令302(1),“x”部分可以由一个字节的操作数字段的唯一值来指定。一些机器指令没有操作数字段。例如,图3A中的vector_ReLU指令302(4)的实施例不需要用于操作数的字段。
需要两个张量操作数来执行的一些机器指令仅具有单个操作数字段。例如,图3A中的matrix_vector multiple指令302(2)的实施例需要两个张量操作数,但只有单个张量操作数字段(例如,“Wx”)。注意,“XXX”用于表示机器指令302(2)中没有任何比特指定执行指令302(2)所需要的张量操作数之一。
缺失张量操作数确定逻辑306被配置为确定机器指令302的缺失张量操作数。如所指出的,一些机器指令可以缺失执行机器指令所需要的张量操作数。一些机器指令需要一个张量操作数,但没有指定任何张量操作数。一些机器指令需要两个张量操作数,但是仅指定单个张量操作数。在每种情况下,缺失张量操作数确定逻辑306确定缺失张量操作数。在一个实施例中,缺失张量操作数确定逻辑306假定缺失张量操作数是由链中的先前机器指令产生的张量。
张量寄存器文件确定逻辑308可以确定应当访问哪个张量寄存器文件110以存储张量。张量寄存器文件确定逻辑308还可以确定在执行特定类型的机器指令时应当访问哪个张量寄存器文件110。在一个实施例中,张量寄存器文件110由机器指令的类型暗示。在一个实施例中,用于读取访问的张量寄存器文件110由机器指令要执行的张量运算的类型来暗示。下面讨论更多细节。
子组件命令提供器310被配置为向硬件加速器100中的各种子组件提供命令(或控制信号)。例如,子组件命令提供器310将命令提供给张量存储器管理器104、张量运算组件102、各种多路复用器226、230、230、各种解多路复用器224、232和多功能初始张量组件234。
图4是在硬件加速器100中执行机器指令的过程400的一个实施例的流程图。过程400可以在图1或图2的硬件加速器100内被执行,但不限于此。过程400涉及使用由机器指令集合中的一个机器指令产生的张量,作为该集合中的另一机器指令的输入。在一个实施例中,机器指令集合是机器指令链,通过使用由执行一个机器指令产生的结果张量来执行链中的需要张量的下一指令,将机器指令联接。在一个实施例中,该链实现深度神经网络中的神经元。
在步骤402中,访问来自机器指令集合的第一机器指令。在步骤404,访问来自机器指令集合的第二机器指令。在一个实施例中,第二机器指令涉及第二机器指令未指定的张量。在一个实施例中,第二机器指令缺失张量操作数。
在步骤406中,在硬件加速器100中执行第一机器指令,从而产生张量。在一个实施例中,步骤406包括将张量加载到张量寄存器文件中。例如,关于图1或图2,张量可以加载到张量寄存器文件110(1)-110(5)中的任何张量寄存器文件中。这些加载中的每个加载产生被添加到张量寄存器文件的张量,在本文中将其称为“结果张量”。
在一个实施例中,步骤406包括在张量运算计算器112中执行张量运算。这可以是单张量运算或双张量运算。作为单张量运算的一个示例,将张量输入到张量运算组件102(2)中的张量运算计算器112(4),张量运算计算器112(4)取张量中的每个元素的S形。作为单张量运算的另一示例,将张量输入到张量运算组件102(2)中的张量运算计算器112(4),张量运算计算器112(4)取张量中的每个元素的双曲正切。作为单张量运算的另一示例,将张量输入到张量运算组件102(2)中的张量运算计算器112(4),张量运算计算器112(4)取张量中的每个元素的ReLU。在所有情况下,单张量运算的结果是在本文中称为“结果张量”的东西。在一个实施例中,结果张量是矢量。在一个实施例中,结果张量是矩阵。
作为双张量运算的示例,将两个张量输入到张量运算组件102(1)中的张量运算计算器112(1),其执行矩阵-矢量乘法。作为双张量运算的另一示例,将两个张量输入到张量运算组件102(2)中的张量运算计算器112(2),其执行矢量-矢量乘法。作为双张量运算的另一示例,将两个张量输入到张量运算组件102(2)中的张量运算计算器112(3),其执行矢量-矢量加法。作为双张量运算的另一示例,两个张量被输入到张量运算组件102(2)中的张量运算计算器112(3),其执行矢量-矢量减法。在所有这些双张量情况下,双张量运算的结果是在本文中称为“结果张量”的东西。在一个实施例中,结果张量是矢量。在一个实施例中,结果张量是矩阵。
在步骤408中,使用来自第一机器指令的结果张量作为缺失张量操作数,来执行第二机器指令。
注意,第二机器指令的结果张量可以用作集合中的另一机器指令的输入。例如,集合中可以存在第三机器指令,该第三机器指令具有缺失张量操作数。因此,在一个实施例中,响应于第三机器指令缺失执行第三机器指令所需要的张量操作数,使用执行第二机器指令的结果张量来执行紧接在第二机器指令之后的第三机器指令。对于集合中的缺失张量操作数的附加机器指令,这可以继续进行。在一个实施例中,硬件加速器100假定每当机器指令中存在缺失张量操作数时,就将集合中的紧接在前的机器指令的结果张量用于缺失张量操作数。
图5是执行机器指令链中的机器指令302的过程500的一个实施例的流程图。在一个实施例中,该链实现深度神经网络中的神经元。步骤502包括从机器指令链访问机器指令。例如,指令解码器106从指令队列120访问指令。出于讨论的目的,这将被称为“主题机器指令”。
步骤504是确定主题机器指令是否未能指定执行主题机器指令的张量运算所必需的张量操作数。在一个实施例中,指令解码器106进行这一确定。在没有缺失张量操作数的情况下,则在步骤506中,硬件加速器100中的电路使用在机器指令中指定的张量来执行主题机器指令。
如果主题机器指令是缺失张量操作数,则过程500在步骤508处继续。步骤508包括确定是否需要一个或两个张量操作数以执行主题机器指令。在一个实施例中,指令解码器106进行这一确定。在过程500中,假定最多缺失一个张量操作数。在主题机器指令需要一个张量操作数的情况下,则执行步骤510-512。
在步骤510中,硬件加速器100中的电路标识要提供缺失张量操作数的另一机器指令。在一个实施例中,指令解码器106进行这一确定。在一个实施例中,硬件加速器中的电路假定缺失张量操作数将来自紧接在主题机器指令之前的机器指令。如果紧接在前的指令没有产生张量,则可能会发生异常,在这种情况下,硬件加速器可以在链中向后退以寻找能够提供缺失张量操作数的机器指令。
在步骤512中,使用来自所标识的机器指令的结果张量作为主题机器指令的缺失张量操作数。在一个实施例中,交叉开关组件236将缺失张量提供给张量运算计算器112(4)。注意,缺失张量操作数可能来自另一张量运算计算器112,诸如张量运算计算器112(2)或张量运算计算器112(3)。交叉开关组件236可以响应于来自指令解码器106的控制信号而进行动作。指令解码器106也可以控制其他元件以提供缺失张量。例如,指令解码器106可以向多路复用器230发送控制信号以从张量运算组件102(1)或张量寄存器文件110(5)中选择张量。存在提供缺失张量的其他可能性。
在主题机器指令需要两个张量操作数的情况下,则执行步骤514-518。步骤514可以包括:硬件加速器中的电路以与步骤510类似的方式标识要提供缺失张量操作数的机器指令。步骤514中的另一机器指令的标识可以类似于步骤510。
步骤516包括使用来自在步骤514中标识出的机器指令的结果张量作为主题机器指令的第一张量操作数。在一个实施例中,张量运算组件102(2)中的交叉开关组件236将第一(缺失)张量提供给张量运算计算器112(2)或张量运算计算器112(3)。注意,缺失张量操作数可能来自张量运算组件102(2)中的另一张量运算计算器112。交叉开关组件236可以响应于来自指令解码器106的控制信号而进行动作。指令解码器106也可以控制其他元件以提供第一(缺失)张量。例如,指令解码器106可以向多路复用器230发送控制信号以从张量运算组件102(1)或张量寄存器文件110(5)中选择张量。存在提供缺失张量的其他可能性。
步骤518包括使用至少部分在主题机器指令中指定的张量作为主题机器指令的第二张量操作数。例如,来自张量寄存器文件110(2)的张量可以被提供给张量运算计算器112(2)。作为另一示例,来自张量寄存器文件110(3)的张量可以被提供给张量运算计算器112(3)。
注意,在一些实施例中,第二张量仅部分在主题机器指令中指定。在一个实施例中,主题机器指令没有明确指定哪个张量寄存器文件110包含第二张量。因此,在一个实施例中,主题机器指令“仅部分地指定”第二张量操作数。在一个实施例中,硬件加速器基于要执行的张量运算的类型来推断哪个张量寄存器文件110包含第二张量。例如,如果主题机器指令是矢量-矢量乘法,则硬件加速器100可以推断第二张量位于专用于被配置为执行矢量-矢量乘法的张量运算计算器112的张量寄存器文件110中。但是,主题机器指令可以明确地指定张量寄存器文件内的位置。例如,主题机器指令可以明确地包含索引值。注意,主题机器指令可以完全指定第二张量操作数。例如,主题机器指令还可以指定包含第二张量操作数的张量寄存器文件。
图6A-图6D是可以用于使用由一个机器指令产生的张量作为另一机器指令中的缺失张量操作数的不同技术的过程的实施例的流程图。
图6A是在硬件加速器100中执行机器指令的过程600的一个实施例的流程图。过程600是其中具有缺失操作数的机器指令用于单张量运算的示例。“单张量运算”是指该运算仅涉及一个张量。
在步骤602中,在第一张量运算计算器112中执行第一机器指令以生成张量。这里,这被称为“结果张量”。这可以是图1或图2中的任何张量运算计算器112,但不限于这些示例。第一张量运算计算器112可以被配置为执行单张量运算或双张量运算。步骤602是过程400中的步骤406的一个实施例。
为了说明,在步骤602中,可以在张量运算计算器112(1)中执行矩阵-矢量乘法,可以在张量运算计算器112(2)的实例之一中执行矢量-矢量乘法,可以在张量运算计算器112(3)的实例之一中执行矢量-矢量加法(或减法),或者可以在张量运算计算器112(4)的实例之一中执行单张量运算。在一个实施例中,这些张量运算中的每个产生矢量。
在步骤604中,将结果张量从第一张量运算计算器112路由到第二张量运算计算器112的输入。在一个实施例中,路由该结果张量,而没有结果张量在寄存器或其他存储装置中的中间存储。在一个实施例中,指令解码器106发出控制信号以路由结果张量。
在步骤606中,基于结果张量在第二张量运算计算器112中执行第二机器指令。如上所述,第二张量运算计算器112被配置为执行单张量运算。关于图2的示例,结果张量可以被路由到张量运算组件102(2)的张量运算计算器112(4)或张量运算组件102(3)的张量运算计算器112(4)。步骤606是过程400中的步骤408的一个实施例。
使用接收结果张量的张量运算组件102(2)的张量运算计算器112(4)的示例,可以直接从张量运算组件102(2)的张量运算计算器112(2)、张量运算组件102(2)的张量运算计算器112(3)或张量运算组件102(1)的张量运算计算器112(1)中的任何一个(但不限于此)提供结果张量。在一个实施例中,指令解码器106向张量运算组件102(1)、多路复用器230和/或张量运算组件102(2)中的一个或多个提供控制信号以路由结果张量。指令解码器106也可以向硬件加速器100中的其他元件发出控制信号以路由结果张量。
图6B是在硬件加速器100中执行机器指令的过程620的一个实施例的流程图。过程620用于其中具有缺失操作数的机器指令用于双张量运算的示例。
在步骤622中,在第一张量运算计算器112中执行第一机器指令以生成张量。这可以是图1或图2中的任何张量运算计算器112,但不限于这些示例。第一张量运算计算器112可以被配置为执行单张量运算或双张量运算。步骤622是过程400中的步骤406的一个实施例。
为了说明,在步骤622中,可以在张量运算计算器112(1)中执行矩阵-矢量乘法以生成矢量,可以在张量运算计算器112(2)的实例之一中执行矢量-矢量乘法,可以在张量运算计算器112(3)的实例之一中执行矢量-矢量加法(或减法),或者可以在张量运算计算器112(4)的实例之一中执行单张量运算。
在步骤624中,将结果张量从第一张量运算计算器112路由到第二张量运算计算器112的第一张量输入。在一个实施例中,路由该结果张量,而没有结果张量在寄存器或其他存储装置中的中间存储。在一个实施例中,指令解码器106发出控制信号以路由结果张量。关于图2的示例,结果张量可以被路由到张量运算组件102(2)或102(3)中的张量运算计算器112(2)或张量运算计算器112(3)。在一个实施例中,结果张量被路由通过交叉开关236。
在步骤626中,基于路由的张量和来自张量寄存器文件的第二张量,在第二张量运算计算器112中执行第二机器指令。关于图2的示例,当张量运算计算器112(2)是第二张量运算计算器时,第二张量可以来自张量寄存器文件110(2)。当张量运算计算器112(3)是第二张量运算计算器时,第二张量可以来自张量寄存器文件110(3)。步骤626是过程400的步骤408的一个实施例。在一个实施例中,第二张量仅由第二机器指令部分地指定,如关于过程500中的步骤518所讨论的。
不需要在张量运算计算器112中执行第一机器指令(其提供缺失张量操作数)。图6C是过程640的一个实施例的流程图,其中第一机器指令是张量加载指令。在步骤642中,执行第一机器指令以将张量加载到张量寄存器文件110中。在一个实施例中,第一机器指令指示在硬件加速器100外部的要从其访问张量的存储位置。步骤642是过程400的步骤406的一个实施例。在一个实施例中,该张量加载机器指令在指令链的开始处或至少附近。在一个实施例中,该张量加载机器指令位于用于例如在张量运算计算器112之一中执行张量计算的任何机器指令之前。因此,第一机器指令可以加载机器指令链的“初始张量”。
在一个实施例中,在步骤642中,将张量加载到图2的张量寄存器文件110(1)-110(5)中的一个或多个中。在一个实施例中,第一机器指令没有明确指定哪个张量寄存器文件用于加载张量。在一个实施例中,硬件加速器100基于可能使用张量的张量运算计算器112的类型来确定哪个张量寄存器文件应当接收张量。下面讨论更多细节。
步骤644包括使用加载到张量寄存器文件110中的初始张量在张量运算计算器112中执行第二机器指令。步骤664是过程400的步骤408的一个实施例。在一个实施例中,张量运算计算器112还使用第二张量。作为一个示例,步骤644可以包括张量运算计算器112(1)使用通过第一机器指令加载到张量运算组件102(1)中的张量寄存器文件110(4)中的初始张量、以及来自张量寄存器文件110(1)的矩阵。作为另一示例,步骤644可以包括张量运算计算器112(2)使用通过第一机器指令加载到多功能初始张量组件234中的张量寄存器文件110(5)中的初始张量、以及来自张量寄存器文件110(2)的张量。作为另一示例,步骤644可以包括张量运算计算器112(4)在单张量运算中使用通过第一机器指令加载到多功能初始张量组件234中的张量寄存器文件110(5)中的初始张量。对于步骤644,存在很多其他可能性。
注意,第二机器指令未必涉及在张量运算计算器112中执行张量计算。例如,第二机器指令可以是用于将张量存储到硬件加速器100外部的存储器的指令。在这种情况下,第二机器指令可以位于指令链的结束。
图6D是过程660的一个实施例的流程图,其中第二机器指令是张量存储指令。在步骤662中,在张量运算计算器112中执行第一机器指令以生成张量。这可以是单张量运算或双张量运算。因此,例如,这可以涉及图2中的任何张量运算计算器112(1)-112(4)。步骤662是过程400的步骤406的一个实施例。
步骤664包括执行第二机器指令以存储来自第一机器指令的结果张量。作为一个示例,指令解码器106可以向张量运算组件102(3)和解多路复用器232发出控制信号以将张量从张量运算组件102(3)中的张量运算计算器112之一路由到输出队列222。然后,可以将张量从输出队列222转移到硬件加速器100外部的存储器。步骤664是过程400的步骤408的一个实施例。
图7是从张量寄存器文件110访问张量的过程700的一个实施例的流程图。过程700包括执行需要来自张量寄存器文件110的张量的机器指令302。在过程700中,不需要用于指定什么张量寄存器文件110包含张量的机器指令。在一个实施例中,硬件加速器100基于要执行的张量运算的类型来推断要访问什么张量寄存器文件110。
步骤702包括对机器指令的操作码进行解码以确定要执行哪种类型的张量运算以执行机器指令的指令解码器106。在步骤702中,指令解码器106还可以确定到张量寄存器文件110中的索引。在一个实施例中,机器指令具有指定到张量寄存器文件110中的索引的操作数字段。但是,在一个实施例中,实际张量寄存器文件不是在机器指令中指定的。
参考图3A,机器指令302(2)和302(3)是机器指令的两个示例,其具有指定到张量寄存器文件110中的索引而不指定实际张量寄存器文件的操作数字段。在图3A中,括号之间的内容是操作数字段。回想一下,“XXX”仅用于表示张量操作数缺失。即,XXX表示机器指令302不具有用于指定执行机器指令所需要的张量操作数的任何比特。作为一个示例,机器指令302(2)中的“Wx”可以是一个字节值,该值是到张量寄存器文件110中的索引。作为一个示例,机器指令302(3)中的“b”可以是一个字节值,该值是到张量寄存器文件110中的索引。
步骤704包括选择用于执行张量运算的张量运算计算器112。在一个实施例中,张量运算计算器112具有专用于张量运算计算器112的张量寄存器文件110。也就是说,在一个实施例中,张量运算计算器112是访问张量寄存器文件110的该实例的唯一组件。步骤704可以由指令解码器106和/或交叉开关236执行,但不限于这些元件。
参考用于matrix_vector multiply的示例机器指令302(2),可以选择张量运算计算器112(1)。在该示例中,张量运算计算器112(1)被配置为执行矩阵-矢量乘法。参考用于vector_vector add的示例机器指令302(3),可以选择张量运算计算器112(3)。在该示例中,张量运算计算器112(3)被配置为执行矢量-矢量加法。
步骤706包括从专用于所选择的张量运算计算器112的张量寄存器文件访问张量。来自机器指令302的索引可以用于确定张量在张量寄存器文件内的位置。
参考其中选择张量运算计算器112(1)的示例,可以访问张量寄存器文件110(1)。在该示例中,索引“Wx”可以用于选择张量寄存器文件110(1)中的条目以向张量运算计算器112(1)提供矩阵。
参考其中选择张量运算计算器112(3)的示例,可以访问张量寄存器文件110(3)。在该示例中,索引“b”可以用于选择张量寄存器文件110(3)中的条目以向张量运算计算器112(3)提供张量。
注意,步骤706的结果是,访问正确的张量寄存器文件110,而没有机器指令指定访问哪个张量寄存器文件110。这在本文中可以称为隐含张量寄存器文件读取访问。
步骤708包括所选择的张量运算计算器112使用从张量寄存器文件110访问的张量执行张量运算。张量运算计算器112还可以输入另一张量以便执行张量运算,诸如但不限于矩阵-矩阵乘法、矩阵-矢量乘法、矢量-矢量乘法、矢量-矢量加法或矢量-矢量减法。
如上所述,硬件加速器100的一些实施例并非具有存储用于所有类型的张量运算的张量的大型张量寄存器文件,而是具有多个较小的张量寄存器文件110,其中至少一些较小的张量寄存器文件110用于存储用于一种或多种类型的张量运算的特定集合的张量。每个较小的张量寄存器文件110可以专用于张量运算计算器112的一个实例。这种配置可以通过使各种张量运算计算器112在高百分比的时间保持繁忙来提高带宽。例如,具有专用张量寄存器文件110可以避免或至少减少在张量运算计算器112等待从存储装置提供张量时原本可能发生的停顿。
图8是将张量存储在张量寄存器文件110中的过程800的一个实施例的流程图。过程800可以在诸如图1和图2中描绘的实施例等硬件加速器100中实现,但不限于这些实施例。硬件加速器100也可以被称为张量处理器。在一个实施例中,张量处理器具有多个张量运算计算器112和多个张量寄存器文件110。每个张量运算计算器112可以被配置为执行一种类型的张量运算。每个张量寄存器文件110可以与张量运算计算器112之一相关联。在一个实施例中,每个张量寄存器文件110专用于张量运算计算器112之一。张量运算计算器的每个实例可以被配置为执行一种或多种类型的矢量操作的集合。此外,在张量运算计算器之间在功能上可以存在差异,使得不同的张量运算计算器执行多种类型的矢量运算的不同集合。实际上,这种配置可以导致与一种或多种类型的张量运算的不同集合相关联的不同的张量寄存器文件110。
步骤802包括确定张量处理器要对张量执行的张量运算的类型。例如,张量处理器中的电路可以确定该张量是否要用于矢量-矢量乘法、矢量-矢量加法、矩阵-矢量乘法、矢量-矢量除法等。在一个实施例中,指令解码器106基于用于将张量存储在张量处理器中的机器指令中的字段的值来做出该确定。
步骤804包括将张量存储在张量寄存器文件110的一个或多个实例中。在一个实施例中,张量存储在与被配置为执行该类型的张量运算的张量运算计算器相关联的张量寄存器文件中。例如,如果张量要用于矩阵-矢量乘法,则张量可以存储在与被配置为执行矩阵-矢量乘法的张量运算计算器112相关联的张量寄存器文件110中。在一个实施例中,张量存储在与被配置为执行矩阵-矢量乘法的张量运算计算器112相关联的张量寄存器文件110的所有实例中。
在一个实施例中,基于机器指令来控制向张量寄存器文件110的写入。在一个实施例中,用于存储张量的机器指令中的字段中的值指示应当将张量存储在其中的张量寄存器文件110的类型。图9是响应于用于将张量存储在张量处理器100中的机器指令302而将张量存储在张量处理器中的过程900的一个实施例的流程图。
步骤902包括解码机器指令以将张量存储在张量处理器中。在一个实施例中,步骤902包括访问机器指令的操作数字段中的值。
步骤904包括基于解码后的机器指令来确定用于存储张量的张量寄存器文件110的类型。在一个实施例中,操作数字段中的值指示张量应当被加载到其中的张量寄存器文件110的类型。如上所述,在一些实施例中,每个张量寄存器文件110与一种或多种类型的张量运算的集合相关联。这可以基于张量寄存器文件110专用于什么张量运算计算器112。此外,基于与张量寄存器文件110相关联的张量运算的类型,张量寄存器文件110可以被分类为不同的类型。在一个实施例中,操作数字段中的值用于选择张量寄存器文件110的类型之一。
例如,该值可以指示是否将张量存储在用于存储用于矩阵-矢量乘法的矩阵的张量寄存器文件110、用于存储用于矩阵-矢量乘法的张量的张量寄存器文件110、用于存储用于矢量-矢量乘法的张量的张量寄存器文件110、用于存储用于矢量-矢量加法/减法的矢量的张量寄存器文件110等中。注意,如果张量寄存器文件110专用于被配置为执行矩阵-矢量乘法等的张量运算计算器112,则可以使用张量寄存器文件110来存储用于矩阵-矢量乘法的矩阵。
步骤906包括将张量写入该类型的张量寄存器文件的所有实例。对于某些类型的张量寄存器文件110,可以仅存在张量寄存器文件110的一个实例。
在一个实施例中,基于要被执行以执行机器指令的张量运算的类型来控制从张量寄存器文件110的读取。例如,仅响应于执行用于执行矩阵-矢量乘法的机器指令,才可以访问存储用于矩阵-矢量乘法的矩阵的张量寄存器文件110。作为另一示例,仅响应于执行用于执行矩阵-矢量乘法的机器指令,才可以访问存储用于矩阵-矢量乘法的张量的张量寄存器文件110。作为又一示例,仅响应于执行用于执行矢量-矢量乘法的机器指令,才可以访问存储用于矢量-矢量乘法的张量的张量寄存器文件110。作为另一示例,仅响应于执行用于执行矢量-矢量加法/减法的机器指令,才可以访问存储用于矢量-矢量加法/减法的张量的张量寄存器文件110。
在一个实施例中,硬件加速器100基于当在张量运算计算器112之一中执行时机器指令要执行的张量运算的类型来控制对张量寄存器文件110的访问。图10是从张量处理器中的张量寄存器文件110访问张量的过程1000的一个实施例的流程图,其中基于机器指令的张量运算的类型来控制对张量寄存器文件110的访问。在过程1000的示例中,考虑了三种不同的张量运算(矢量-矢量乘法、矢量-矢量加法/减法、矩阵-矢量乘法)。过程1000中的各种类型的张量运算是出于说明的目的。可以将过程1000修改为包括很多其他类型的张量运算,或者删除图10中描绘的类型的张量运算中的一些。
在步骤1002中,对机器指令进行解码。在一个实施例中,指令解码器106执行步骤1002。指令解码器106可以基于机器指令的操作码来确定要执行哪种类型的张量指令。
如果机器指令用于矢量-矢量乘法,则可以执行步骤1006-1008。在步骤1006中,张量处理器中的电路确定要执行张量运算的矢量乘法计算器的实例。为了便于讨论,选择张量运算组件102(2)中的张量运算计算器112(2)。在步骤1008中,从与所选择的张量运算计算器112(2)相邻的张量寄存器文件的实例访问张量。例如,参考图2,从张量运算组件102(2)中的张量寄存器文件110(2)访问张量。注意,张量运算计算器112(2)可以从除了用于矢量-矢量乘法的另一张量的张量寄存器文件110(2)之外的其他地方被提供另一张量。
如果机器指令用于矢量-矢量加法/减法,则可以执行步骤1010-1012。注意,在这种情况下,无论张量运算是加法还是减法,都可以执行步骤1010-1012。在步骤1010中,张量处理器中的电路确定要执行张量运算的矢量加法/减法计算器的实例。为了便于讨论,选择张量运算组件102(2)中的张量运算计算器112(3)。在步骤1012中,从与所选择的张量运算计算器112(3)相邻的张量寄存器文件的实例访问张量。例如,参考图2,从张量运算组件102(2)中的张量寄存器文件110(3)访问张量。注意,张量运算计算器112(2)可以从除了用于矢量-矢量加法/减法的另一张量的张量寄存器文件110(2)之外的其他地方被提供另一张量。
注意,可以使用几种不同类型的操作码之一来指定矢量-矢量加法/减法。例如,一个操作码可以用于指定矢量-矢量加法,另一操作码可以用于指定矢量-矢量减法,其中张量寄存器文件110(3)中的张量是被减数,另一操作码可以用于指定矢量-矢量减法,其中张量寄存器文件110(3)中的张量是减数。
如果机器指令用于矩阵-矢量乘法,则可以执行步骤1014-1016。在步骤1014中,张量处理器中的电路确定要执行张量运算的矩阵-矢量乘法计算器的实例。为了便于讨论,选择张量运算组件102(1)中的张量运算计算器112(1)。在步骤1016中,从与所选择的张量运算计算器112(2)相邻的张量寄存器文件的实例访问张量。例如,参考图2,从张量运算组件102(1)中的张量寄存器文件110(4)访问张量。作为另一示例,从张量运算组件102(1)中的张量寄存器文件110(1)访问矩阵。
硬件加速器的一些实施例在机器指令中具有张量的本地大小。例如,矩阵-矢量乘法可以假定100×100矩阵和100个元素的矢量。在一个实施例中,可以在机器指令之一中指定拼接因子以允许处理具有非本地大小的张量。拼接因子可以用于调节矩阵的行和/或列的数目。例如,行为2并且对于列为3的拼接因子指示矩阵-矢量乘法指令要对200×300矩阵进行操作。矢量还可以具有可以通过拼接因子进行缩放的本地大小。例如,矢量的本地大小可以为100个元素。
拼接因子允许张量处理器更高效地操作。例如,可以提高指令吞吐量。注意,张量处理器中的指令执行速度可能非常快。因此,向张量运算组件102的指令解码和发出需要快速以防止瓶颈。拼接因子有助于防止指令解码/发出落后于指令执行。另外,拼接因子可以简化代码(例如,机器指令链)。
以下两个代码片段示出了拼接因子的一个实施例可以如何用于使用明显更少的机器指令。
表I
表II
每个表中的代码片段可以执行相同的功能,但是表II中的代码具有较少的指令。拼接因子可以通过“setLogicalRowsCols”来设置。图11是示出可以通过在硬件加速器100的一个实施例中执行表II中的代码来实现的功能的图。在图11的示例中,拼接因子已经被设置为两行三列。在讨论图11时,为了便于说明,将参考图2中的各种元件。
参考图11,机器指令“v_rd(lnitiaIVRF,v1)”可以在三个不同的地址(v1+0,v1+1,v1+2)上执行多次(1102(0)-1102(5))。每个地址包括基地址(例如,“v1”)和偏移量。偏移量可以基于本地张量大小。该指令将张量读入张量寄存器文件110,诸如张量运算组件102(1)中的张量寄存器文件110(4)。注意,作为一个示例,其中所有元素都是标量元素的张量的本地大小可以是100个标量元素。因此,作为一个实例,最终结果是要加载的张量具有300个标量元素。
机器指令“mv_mul(m1)”可以在六个不同的地址(m1+0,m1+1,m1+2,m1+3,m1+4,m1+5)上执行六次(1104(0)-1104(5))。该指令在例如张量运算计算器112(1)中执行矩阵-矢量乘法。在该指令中,矩阵基于与地址“m1”的偏移量来标识。矩阵-矢量乘法的张量是由前一v_rd(lnitiaIVRF,v1)指令加载的张量。
机器指令“w_add(v3)”在两个地址(v3+0,v3+1)上执行。这些地址基于该指令中与“v3”的偏移量。因此,实际上,指定了“本地大小”的两个唯一矢量。该指令在例如张量运算组件102(2)中的张量运算计算器112(3)中执行矢量加法。例如,由v3+0、v3+1指定的矢量可以来自张量寄存器文件110(3)。用于加法的其他矢量可以是来自矩阵-矢量乘法的结果张量。
机器指令“v_sigm()”可以执行两次(1108(0),1108(1))。这可以获取矢量-矢量加法的结果张量中的每个元素的S形。该指令的结果可以存储在张量寄存器文件110中的两个“本地大小”矢量中。
机器指令“v_wr(NetOutputQ,v4)”可以在两个地址(v4+0,v4+1)上执行两次(1110(0),1110(1))。该指令可以将两个“本地大小”矢量从保存了S形的结果的张量寄存器文件110传输到输出队列222中。
在一个实施例中,在逐链的基础上使用拼接因子。图12是基于拼接因子在张量处理器中执行机器指令链的过程1200的一个实施例的流程图。步骤1202包括确定新链是否已经开始。步骤1202可以类似于图3B中的步骤352。
步骤1204是确定是否已经为该链指定了拼接因子。在一个实施例中,拼接因子由链中的指令指定。
如果没有拼接因子,则在步骤1206中,使用张量处理器100中的张量的本地大小来执行链中的下一指令。在步骤1208中,张量处理器继续执行附加指令,直到检测到链的结束。可以如在图3B的步骤358中来检测链的结束。
如果存在拼接因子,则在步骤1210中,执行链中的下一指令,同时在张量处理器中缩放张量的本地大小。在步骤1212中,张量处理器继续执行附加指令,直到检测到链的结束。
图13示出了如本文所述的硬件加速器100的实施例可以在其中操作的示例环境1300。在一些实施例中,示例环境1300可以用于执行机器学习算法,诸如深度神经网络。在一些示例中,环境1300的各种设备和/或组件包括各种计算设备1302。作为示例而非限制,计算设备1302可以包括设备1302a-1302e。尽管示出为多种设备类型,但是计算设备1302可以是其他设备类型,并且不限于所示出的设备类型。在一些实现中,多个计算设备1302中的任何一个可以经由网络1304互连。
网络1304可以包括但不限于蜂窝网络(例如,无线电话)、点对点拨号连接、卫星网络、因特网、局域网、广域网、WiFi网络、自组织网络、内部网、外部网或其组合。网络1304可以包括一个或多个连接的网络(例如,多网络环境)。网络1304可以包括存储和/或处理从计算设备1302接收和/或向计算设备1302传输的信息(例如,数据)的一个或多个数据中心。
在一种实现中,计算设备1302可以包括具有例如经由总线1314可操作地连接到输入/输出接口1308、硬件加速器100和存储器1312的一个或多个处理器1306的任何类型的设备。计算设备1302可以包括个人计算机,例如台式计算机1302a、膝上型计算机1302b、平板计算机1302c、数据中心服务器1302d(或服务器是任何其他环境)、智能电话1302e、电子书阅读器、可穿戴计算机、汽车计算机、游戏设备等。在一种实现中,计算设备1302不需要包括处理器1306,并且可以是硬件设备。
计算设备1302还可以包括其他计算设备,例如服务器计算机、瘦客户端、终端和/或工作站。在一些示例中,计算设备1302可以包括例如用于集成在计算设备、电器或其他种类的设备中的组件。
在一些示例中,被描述为由计算设备1302执行的某些或全部功能可以由一个或多个远程对等计算设备、一个或多个远程服务器、或云计算资源来实现。在一些示例中,计算设备1302可以包括用于接收输入数据序列的输入端口。例如,计算设备1302还可以包括用于执行机器学习处理的一个或多个处理器1306。
在一些示例中,如关于设备1302d所示,存储器1312可以存储由包括操作系统1316的(多个)处理器1306可执行的指令、以及由(多个)处理器1306可加载和可执行的程序或应用1320。应用1320可以包括可以被执行以例如操作硬件加速器100的机器学习处理应用1320。一个或多个处理器1306可以包括一个或多个中央处理单元(CPU)、图形处理单元(GPU)、视频缓冲处理器等。
在一些实现中,机器学习处理应用1320包括存储在存储器1312中并且由(多个)处理器1306可执行以通过计算设备1302经由输入/输出1308本地或远程地接收和实现包括数据序列(例如,流数据或数据文件)的机器学习算法的可执行代码。在一些示例中,数据序列可以与一个或多个应用1320相关联。机器学习处理应用1320可以与硬件加速器100结合操作以应用用于处理存储在存储器1312中或经由输入/输出1308接收的数据的很多过程中的任何过程。
尽管已经将某些框描述为执行各种操作,但是这些模块仅是示例,并且相同或相似的功能可以由更多或更少数目的模块来执行。此外,由所描绘的模块执行的功能不一定由单个设备本地执行。而是,某些操作可以由远程设备(例如,对等方、服务器、云等)执行。
替代地或另外地,本文中描述的某些或全部功能可以至少部分由一个或多个硬件逻辑电路执行。例如而非限制,可以使用的说明性类型的硬件逻辑电路包括FPGA设备、专用集成电路(ASIC)设备、GPU、大规模并行处理器阵列(MPPA)设备、程序特定的标准产品(ASSP)设备、片上系统设备(SOC)设备、复杂可编程逻辑设备(CPLD)、定制集成电路等。
计算机可读介质可以包括计算机存储介质和/或通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于相变存储器(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、闪存或其他存储器技术、光盘只读存储器(CD-ROM)、数字多功能盘(DVD)或其他光学存储装置、磁带盒、磁带、磁盘存储装置或其他磁性存储设备、或者可以用于存储信息以供计算设备访问的任何其他非传输介质。
相反,通信介质在诸如载波等调制数据信号或其他传输机制中实现计算机可读指令、数据结构、程序模块或其他数据。如本文中限定的,计算机存储介质不包括通信介质。在各种示例中,存储器1312是存储计算机可执行指令的计算机存储介质的示例。
在各种示例中,输入/输出接口1308的输入设备可以是直接触摸输入设备(例如,触摸屏)、间接触摸设备(例如,触摸板)、间接输入设备(例如,鼠标、键盘、相机或相机阵列等)或其他类型的非触觉设备(诸如音频输入设备)。
(多个)计算设备1302还可以包括一个或多个输入/输出接口1308以允许计算设备1302与其他设备通信。输入/输出接口1308可以包括一个或多个网络接口以实现计算设备1302和诸如(多个)其他设备1302等其他联网设备之间的通信。输入/输出接口1308可以允许计算设备1302与其他设备通信,诸如用户输入外围设备(例如,键盘、鼠标、笔、游戏控制器、语音输入设备、触摸输入设备、手势输入设备等)和/或输出外围设备(例如,显示器、打印机、音频扬声器、触觉输出等)。
一个实施例包括一种操作具有多个张量运算计算器和多个张量寄存器文件的张量处理器的方法,每个张量运算计算器被配置为执行一种类型的张量运算。每个张量寄存器文件专用于多个张量运算计算器之一。该方法包括:确定张量处理器要对多个张量中的相应张量执行的张量运算的类型;以及将多个张量中的每个相应张量存储在专用于张量运算计算器的张量寄存器文件中,该张量运算计算器被配置为执行张量处理器要对相应张量执行的类型的张量运算。
一个实施例包括一种张量处理器,其包括多个张量运算计算器和多个张量寄存器文件,每个张量运算计算器被配置为执行来自多种类型的张量运算中的一种类型的张量运算。每个张量寄存器文件专用于多个张量运算计算器之一。张量处理器还包括被配置为确定张量处理器要对多个张量中的相应张量执行的张量运算的类型的电路。张量处理器还包括被配置为将每个相应张量存储在专用于张量运算计算器的张量寄存器文件中,该张量运算计算器被配置为执行张量处理器要对相应张量执行的类型的张量运算。
一个实施例包括一种在张量处理器中执行机器指令的方法。该方法包括访问机器指令链中的第一机器指令,以及访问机器指令链中的第二机器指令。第二机器指令缺失执行第二机器指令所需要的张量操作数。该方法还包括在张量处理器中执行第一机器指令以产生结果张量。该方法还包括使用结果张量作为缺失张量操作数来在张量处理器中执行第二机器指令。
一个实施例包括一种张量处理器,其包括:被配置为对机器指令链中的主题机器指令进行解码的电路;被配置为确定主题机器指令缺失执行主题机器指令所需要的张量操作数的电路;被配置为标识用于提供缺失张量操作数的链中的另一机器指令的电路;被配置为执行另一机器指令以产生结果张量的电路;以及被配置为使用结果张量作为缺失张量操作数来执行主题机器指令的电路。
尽管已经用特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,所附权利要求书中限定的主题不必限于上述特定特征或动作。相反,上述特定特征和动作被公开作为实现权利要求的示例形式。

Claims (20)

1.一种用于执行张量运算的装置,包括:
多个张量运算计算器,各自被配置为执行多种类型的张量运算中的一种类型的张量运算,所述多个张量运算计算器包括被配置为执行第一类型的所述张量运算的张量运算计算器的多个实例;
多个张量寄存器文件,所述张量寄存器文件中的每个张量寄存器文件与所述多个张量运算计算器之一相关联;以及
逻辑,被配置为根据要对张量执行的张量运算的类型将相应的所述张量存储在所述多个张量寄存器文件中;
其中所述逻辑还被配置为将所述装置要对其执行所述第一类型的张量运算的张量的多个单独副本存储在所述多个张量寄存器文件中与被配置为执行所述第一类型的张量运算的所述张量运算计算器的所述多个实例相关联的专用张量寄存器文件中的每个专用张量寄存器文件中,而排除所述多个张量寄存器文件中的其他张量寄存器文件。
2.根据权利要求1所述的装置,其中为了根据张量运算的所述类型将所述张量中的相应张量存储在所述张量寄存器文件中,所述逻辑进一步被配置为:
确定所述装置要对所述张量中的相应张量执行的张量运算的所述类型;以及
将所述相应张量存储到专用于被配置为执行所述类型的张量运算的张量运算计算器的张量寄存器文件中。
3.根据权利要求2所述的装置,其中为了确定张量运算的所述类型,所述逻辑进一步被配置为:
访问机器指令中的标识符以加载张量,其中所述标识符与所述张量运算的类型相关联。
4.根据权利要求1所述的装置,其中所述逻辑进一步被配置为:
基于当在所述张量运算计算器之一中执行时机器指令要执行的张量运算的类型,来控制对所述多个张量寄存器文件的读取访问。
5.根据权利要求1所述的装置,其中所述张量运算计算器中的第一张量运算计算器被配置为执行张量-张量运算,其中所述逻辑进一步被配置为:
将来自与所述第一张量运算计算器相关联的所述张量寄存器文件的张量作为操作数提供给所述第一张量运算计算器。
6.根据权利要求1所述的装置,其中所述张量运算计算器中的第一张量运算计算器被配置为执行矩阵-矢量运算,其中所述逻辑进一步被配置为:
将来自与所述第一张量运算计算器相关联的所述张量寄存器文件的矩阵作为操作数提供给所述第一张量运算计算器。
7.根据权利要求1所述的装置,其中所述张量运算计算器中的第一张量运算计算器被配置为执行矢量-矢量运算,其中所述逻辑进一步被配置为:
将来自与所述第一张量运算计算器相关联的所述张量寄存器文件的矢量作为操作数提供给所述第一张量运算计算器。
8.根据权利要求1所述的装置,其中所述逻辑进一步被配置为:
将矩阵存储在专用于矩阵-矢量运算计算器的张量寄存器文件中;以及
将矢量存储在专用于矢量-矢量运算计算器的张量寄存器文件中。
9.一种操作张量处理器的方法,所述张量处理器具有:各自被配置为执行一种类型的张量运算的多个张量运算计算器,所述多个张量运算计算器包括被配置为执行第一类型的张量运算的张量运算计算器的多个实例;以及多个张量寄存器文件,所述张量寄存器文件中的每个张量寄存器文件专用于所述多个张量运算计算器之一,所述方法包括:
确定所述张量处理器要对多个张量中的相应张量执行的张量运算的类型;以及
将所述多个张量中的每个相应张量存储在专用于被配置为执行所述类型的张量运算的张量运算计算器的张量寄存器文件中,所述张量处理器要对所述相应张量执行所述类型的张量运算;
其中所述存储包括将所述张量处理器要对其执行所述第一类型的张量运算的张量的多个单独副本存储在所述多个张量寄存器文件中与被配置为执行所述第一类型的张量运算的所述张量运算计算器的所述多个实例相关联的专用张量寄存器文件中的每个专用张量寄存器文件中,而排除所述多个张量寄存器文件中的其他张量寄存器文件。
10.根据权利要求9所述的方法,进一步包括:
解码机器指令以执行所述类型中的相应类型的张量运算;以及
基于当在所述张量运算计算器之一中执行时机器指令要执行的张量运算的所述类型,来控制对所述多个张量寄存器文件的读取访问。
11.根据权利要求10所述的方法,其中基于当在所述张量运算计算器之一中执行时机器指令要执行的张量运算的所述类型来控制对所述多个张量寄存器文件的读取访问包括:
响应于在所述张量运算计算器中的第一张量运算计算器中执行第一类型的张量运算,仅允许对专用于所述第一张量运算计算器的所述张量寄存器文件中的第一张量寄存器文件的读取访问;以及
响应于在所述张量运算计算器中的第二张量运算计算器中执行第二类型的张量运算,仅允许对专用于所述第二张量运算计算器的所述张量寄存器文件中的第二张量寄存器文件的读取访问。
12.根据权利要求9所述的方法,其中确定所述张量处理器要对所述多个张量中的所述相应张量执行的张量运算的所述类型包括:
从机器指令访问张量寄存器文件的类型的标识符以加载张量,其中所述标识符与张量运算的类型相关联。
13.根据权利要求9所述的方法,其中所述存储进一步包括:
将矩阵存储在专用于矩阵-矢量运算计算器的张量寄存器文件中;以及
将矢量存储在专用于矢量-矢量运算计算器的张量寄存器文件中。
14.根据权利要求9所述的方法,进一步包括:
解码机器指令以确定要在所述张量处理器中执行的张量运算的类型;
确定所述张量处理器中用于执行所述机器指令的张量运算计算器的实例;
从专用于所述张量运算计算器的所述实例的张量寄存器文件访问张量;以及
使用访问的所述张量在所述张量运算计算器中执行所述类型的张量运算。
15.一种张量处理器,包括:
多个张量运算计算器,各自被配置为执行来自多种类型的张量运算中的一种类型的张量运算,所述多个张量运算计算器包括被配置为执行来自所述多种类型的张量运算中的第一类型的张量运算的张量运算计算器的多个实例;
多个张量寄存器文件,所述张量寄存器文件中的每个张量寄存器文件专用于所述多个张量运算计算器之一;
第一电路,被配置为确定所述张量处理器要对多个张量中的相应张量执行的张量运算的类型;以及
第二电路,被配置为将每个相应张量存储在专用于被配置为执行所述类型的张量运算的张量运算计算器的张量寄存器文件中,所述张量处理器要对所述相应张量执行的所述类型的张量运算;
其中所述第二电路还被配置为将所述张量处理器要对其执行所述第一类型的张量运算的张量的多个单独的副本存储在所述多个张量寄存器文件中与被配置为执行所述第一类型的张量运算的所述张量运算计算器的所述多个实例相关联的专用张量寄存器文件中的每个专用张量寄存器文件中,而排除所述多个张量寄存器文件中的其他张量寄存器文件。
16.根据权利要求15所述的张量处理器,进一步包括电路,所述电路被配置为:
解码机器指令以执行所述类型中的相应类型的张量运算;以及
基于当在所述张量运算计算器之一中执行时机器指令要执行的所述类型的张量运算,来控制对所述多个张量寄存器文件的读取访问。
17.根据权利要求15所述的张量处理器,进一步包括电路,所述电路被配置为:
响应于在所述张量运算计算器中的第一张量运算计算器中执行第一类型的张量运算,仅允许对所述张量寄存器文件中的专用于所述第一张量运算计算器的第一张量寄存器文件的读取访问;以及
响应于在所述张量运算计算器中的第二张量运算计算器中执行第二类型的张量运算,仅允许对所述张量寄存器文件中的专用于所述第二张量运算计算器的第二张量寄存器文件的读取访问。
18.根据权利要求15所述的张量处理器,其中为了确定所述张量处理器要对多个张量中的相应张量执行的张量操作的类型,所述电路被配置为:
从机器指令访问张量寄存器文件的类型的标识符以加载张量,其中所述标识符与张量运算的类型相关联。
19.根据权利要求15所述的张量处理器,进一步包括电路,所述电路被配置为:
解码机器指令以确定要在所述张量处理器中执行的张量运算的类型;
确定张量运算计算器的实例以执行所述机器指令;
从专用于所述张量运算计算器的所述实例的张量寄存器文件中访问张量;以及
使用访问的所述张量执行所述类型的张量运算。
20.根据权利要求15所述的张量处理器,其中所述第二电路进一步被配置为:
将矩阵存储在专用于矩阵-矢量运算计算器的张量寄存器文件中;以及
将矢量存储在专用于矢量-矢量运算计算器的张量寄存器文件中。
CN201880034185.4A 2017-05-24 2018-04-24 张量寄存器文件 Active CN110678840B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/604,270 US10338925B2 (en) 2017-05-24 2017-05-24 Tensor register files
US15/604,270 2017-05-24
PCT/US2018/028971 WO2018217360A1 (en) 2017-05-24 2018-04-24 Tensor register files

Publications (2)

Publication Number Publication Date
CN110678840A CN110678840A (zh) 2020-01-10
CN110678840B true CN110678840B (zh) 2023-08-15

Family

ID=62117138

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880034185.4A Active CN110678840B (zh) 2017-05-24 2018-04-24 张量寄存器文件

Country Status (4)

Country Link
US (1) US10338925B2 (zh)
EP (1) EP3631622B1 (zh)
CN (1) CN110678840B (zh)
WO (1) WO2018217360A1 (zh)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020190796A1 (en) * 2019-03-15 2020-09-24 Intel Corporation Systems and methods for cache optimization
CN111782267B (zh) * 2019-04-04 2022-12-09 安徽寒武纪信息科技有限公司 数据处理方法及装置以及相关产品
CN111857828B (zh) * 2019-04-25 2023-03-14 安徽寒武纪信息科技有限公司 处理器操作方法及装置以及相关产品
CN111782577B (zh) 2019-04-04 2023-03-24 安徽寒武纪信息科技有限公司 数据处理装置及方法以及相关产品
EP3825843B1 (en) * 2019-04-04 2022-11-30 Cambricon (Xi'an) Semiconductor Co., Ltd. Data processing method and apparatus, and related product
CN111831337B (zh) * 2019-04-19 2022-11-29 安徽寒武纪信息科技有限公司 数据同步方法及装置以及相关产品
CN111831722A (zh) * 2019-04-19 2020-10-27 安徽寒武纪信息科技有限公司 数据同步方法及装置以及相关产品
US10997116B2 (en) 2019-08-06 2021-05-04 Microsoft Technology Licensing, Llc Tensor-based hardware accelerator including a scalar-processing unit
US11687336B2 (en) * 2020-05-08 2023-06-27 Black Sesame Technologies Inc. Extensible multi-precision data pipeline for computing non-linear and arithmetic functions in artificial neural networks
US20210216318A1 (en) * 2020-08-28 2021-07-15 Martin Langhammer Vector Processor Architectures
US11347652B2 (en) 2020-08-31 2022-05-31 Microsoft Technology Licensing, Llc Banked memory architecture for multiple parallel datapath channels in an accelerator
US11449254B1 (en) * 2020-09-17 2022-09-20 Graphcore Limited Managed bulk memory
US11734214B2 (en) 2021-02-01 2023-08-22 Microsoft Technology Licensing, Llc Semi-programmable and reconfigurable co-accelerator for a deep neural network with normalization or non-linearity
US11734013B2 (en) 2021-06-17 2023-08-22 International Business Machines Corporation Exception summary for invalid values detected during instruction execution
US11693692B2 (en) 2021-06-17 2023-07-04 International Business Machines Corporation Program event recording storage alteration processing for a neural network accelerator instruction
US11797270B2 (en) 2021-06-17 2023-10-24 International Business Machines Corporation Single function to perform multiple operations with distinct operation parameter validation
US11675592B2 (en) 2021-06-17 2023-06-13 International Business Machines Corporation Instruction to query for model-dependent information
US11269632B1 (en) 2021-06-17 2022-03-08 International Business Machines Corporation Data conversion to/from selected data type with implied rounding mode
US11669331B2 (en) 2021-06-17 2023-06-06 International Business Machines Corporation Neural network processing assist instruction
CN113485836B (zh) * 2021-07-21 2024-03-19 瀚博半导体(上海)有限公司 一种基于张量切分的张量处理方法和张量处理系统
CN115599442B (zh) * 2022-12-14 2023-03-10 成都登临科技有限公司 一种ai芯片、电子设备及张量处理方法

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5517596A (en) 1991-05-17 1996-05-14 International Business Machines Corporation Learning machine synapse processor system apparatus
EP0594240B1 (en) 1992-10-19 2000-01-05 Koninklijke Philips Electronics N.V. Data processor with operation units sharing groups of register files
US6633971B2 (en) 1999-10-01 2003-10-14 Hitachi, Ltd. Mechanism for forward data in a processor pipeline using a single pipefile connected to the pipeline
US7890566B1 (en) * 2000-02-18 2011-02-15 Texas Instruments Incorporated Microprocessor with rounding dot product instruction
US6898691B2 (en) * 2001-06-06 2005-05-24 Intrinsity, Inc. Rearranging data between vector and matrix forms in a SIMD matrix processor
US20040139300A1 (en) 2003-01-14 2004-07-15 International Business Machines Corporation Result forwarding in a superscalar processor
US20040139299A1 (en) 2003-01-14 2004-07-15 International Business Machines Corporation Operand forwarding in a superscalar processor
US8443169B2 (en) 2005-03-28 2013-05-14 Gerald George Pechanek Interconnection network connecting operation-configurable nodes according to one or more levels of adjacency in multiple dimensions of communication in a multi-processor and a neural processor
US7877582B2 (en) 2008-01-31 2011-01-25 International Business Machines Corporation Multi-addressable register file
CN101527010B (zh) 2008-03-06 2011-12-07 上海理工大学 人工神经网络算法的硬件实现方法及其系统
US7814300B2 (en) 2008-04-30 2010-10-12 Freescale Semiconductor, Inc. Configurable pipeline to process an operation at alternate pipeline stages depending on ECC/parity protection mode of memory access
US8131659B2 (en) 2008-09-25 2012-03-06 Microsoft Corporation Field-programmable gate array based accelerator system
US20100115233A1 (en) 2008-10-31 2010-05-06 Convey Computer Dynamically-selectable vector register partitioning
US8904115B2 (en) * 2010-09-28 2014-12-02 Texas Instruments Incorporated Cache with multiple access pipelines
US9411585B2 (en) 2011-09-16 2016-08-09 International Business Machines Corporation Multi-addressable register files and format conversions associated therewith
JP5889747B2 (ja) * 2012-08-07 2016-03-22 ルネサスエレクトロニクス株式会社 半導体装置
US9519144B2 (en) * 2013-05-17 2016-12-13 Nvidia Corporation System, method, and computer program product to produce images for a near-eye light field display having a defect
US10007518B2 (en) 2013-07-09 2018-06-26 Texas Instruments Incorporated Register file structures combining vector and scalar data with global and local accesses
US9627532B2 (en) 2014-06-18 2017-04-18 Nuance Communications, Inc. Methods and apparatus for training an artificial neural network for use in speech recognition
US20170061279A1 (en) * 2015-01-14 2017-03-02 Intel Corporation Updating an artificial neural network using flexible fixed point representation
US10055672B2 (en) * 2015-03-11 2018-08-21 Microsoft Technology Licensing, Llc Methods and systems for low-energy image classification
US20160379109A1 (en) 2015-06-29 2016-12-29 Microsoft Technology Licensing, Llc Convolutional neural networks on hardware accelerators
US10540588B2 (en) 2015-06-29 2020-01-21 Microsoft Technology Licensing, Llc Deep neural network processing on hardware accelerators with stacked memory
US11244225B2 (en) 2015-07-10 2022-02-08 Samsung Electronics Co., Ltd. Neural network processor configurable using macro instructions
CN105488565A (zh) 2015-11-17 2016-04-13 中国科学院计算技术研究所 加速深度神经网络算法的加速芯片的运算装置及方法
US11055063B2 (en) * 2016-05-02 2021-07-06 Marvell Asia Pte, Ltd. Systems and methods for deep learning processor
US10169298B1 (en) * 2017-05-11 2019-01-01 NovuMind Limited Native tensor processor, using outer product unit

Also Published As

Publication number Publication date
US20180341483A1 (en) 2018-11-29
EP3631622A1 (en) 2020-04-08
US10338925B2 (en) 2019-07-02
EP3631622B1 (en) 2022-08-03
WO2018217360A1 (en) 2018-11-29
CN110678840A (zh) 2020-01-10

Similar Documents

Publication Publication Date Title
CN110678840B (zh) 张量寄存器文件
CN110678841B (zh) 张量处理器指令集架构
US10896369B2 (en) Power conversion in neural networks
CN107807819B (zh) 一种支持离散数据表示的用于执行人工神经网络正向运算的装置及方法
CN108427990B (zh) 神经网络计算系统和方法
US11775313B2 (en) Hardware accelerator for convolutional neural networks and method of operation thereof
CN107704922B (zh) 人工神经网络处理装置
CN107679621B (zh) 人工神经网络处理装置
CN107679620B (zh) 人工神经网络处理装置
US20180107630A1 (en) Processor and method for executing matrix multiplication operation on processor
CN112840356B (zh) 运算加速器、处理方法及相关设备
US20210096823A1 (en) Transpose operations using processing element array
CN111090467A (zh) 一种用于执行矩阵乘运算的装置和方法
KR20060056855A (ko) 프로세서
KR20220149729A (ko) 프로세싱 인 메모리를 사용하는 카운터 기반 곱셈
US20210319822A1 (en) Deep Learning Accelerator and Random Access Memory with Separate Memory Access Connections
CN110059797B (zh) 一种计算装置及相关产品
US11500962B1 (en) Emulating fine-grained sparsity in a systolic array
JP2018525730A (ja) スライディングウィンドウ演算
US11803736B1 (en) Fine-grained sparsity computations in systolic array
US11409840B2 (en) Dynamically adaptable arrays for vector and matrix operations
US11625453B1 (en) Using shared data bus to support systolic array tiling
KR102435447B1 (ko) 뉴럴 네트워크 시스템 및 이의 동작 방법
KR20230126114A (ko) 메모리 장치 및 메모리 장치에 의해 수행되는 연산 방법
US20240070223A1 (en) Increased computation efficiency with multi-stage 8-bit floating point matrix multiplication with format conversion

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
GR01 Patent grant
GR01 Patent grant