CN114207579A - 包括标量处理单元的基于张量的硬件加速器 - Google Patents
包括标量处理单元的基于张量的硬件加速器 Download PDFInfo
- Publication number
- CN114207579A CN114207579A CN202080055428.XA CN202080055428A CN114207579A CN 114207579 A CN114207579 A CN 114207579A CN 202080055428 A CN202080055428 A CN 202080055428A CN 114207579 A CN114207579 A CN 114207579A
- Authority
- CN
- China
- Prior art keywords
- scalar
- vector
- tensor
- input
- 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.)
- Pending
Links
- 238000012545 processing Methods 0.000 title claims abstract description 242
- 239000013598 vector Substances 0.000 claims abstract description 298
- 238000013528 artificial neural network Methods 0.000 claims abstract description 16
- 238000000034 method Methods 0.000 claims description 33
- 230000015654 memory Effects 0.000 claims description 31
- 230000006870 function Effects 0.000 claims description 30
- 238000004458 analytical method Methods 0.000 claims description 10
- 230000001131 transforming effect Effects 0.000 abstract 1
- 230000009467 reduction Effects 0.000 description 34
- 238000004590 computer program Methods 0.000 description 21
- 230000008569 process Effects 0.000 description 20
- 239000011159 matrix material Substances 0.000 description 17
- 238000004364 calculation method Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000013527 convolutional neural network Methods 0.000 description 3
- 238000010606 normalization Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000004913 activation Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 239000000872 buffer Substances 0.000 description 2
- 239000002131 composite material Substances 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000002452 interceptive effect Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000000873 masking effect Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 241000288105 Grus Species 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000003362 replicative effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
- G06F15/8061—Details on data memory access
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
- G06F9/3879—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
- G06F9/3881—Arrangements for communication of instructions and data
-
- 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/04—Architecture, e.g. interconnection topology
- G06N3/047—Probabilistic or stochastic networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Computer Hardware Design (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Probability & Statistics with Applications (AREA)
- Advance Control (AREA)
- Auxiliary Drives, Propulsion Controls, And Safety Devices (AREA)
Abstract
本文描述了一种使用硬件加速器加快深度神经网络(DNN)操作或其他处理操作的计算系统。硬件加速器进而包括结合标量处理单元(SPU)工作的张量处理引擎。张量处理引擎处置DNN所需的各种基于张量的操作,诸如将向量乘以矩阵、将向量与其他向量组合、变换个体向量等。SPU执行基于标量的操作,诸如形成标量的倒数、生成标量的平方根等。根据一个说明性实现,计算系统使用相同的基于向量的编程接口来与张量处理引擎和SPU二者交互。
Description
背景技术
许多深度神经网络(DNN)在需要低时延响应的环境中操作。这些类型的环境包括搜索引擎、实时视频分析引擎、交互式语音识别引擎、传感器分析引擎等。例如,与搜索引擎交互的用户将期望对他或她的搜索请求的近实时响应。
发明内容
本文描述了一种使用硬件加速器加快深度神经网络(DNN)操作或其他处理操作的计算系统。硬件加速器进而包括结合标量处理单元(SPU)工作的张量处理引擎。张量处理引擎处置DNN(或其他分析任务)所需的各种基于张量的操作。这些基于张量的操作构成了硬件加速器执行的大部分工作,并且涵盖将向量乘以矩阵、将向量与其他向量组合、变换个体向量等。SPU执行基于标量的操作,诸如形成标量的倒数、生成标量的平方根等。
根据一个说明性实现,计算系统使用相同的基于向量的编程接口来与张量处理引擎和SPU二者交互。为了以这种方式操作,SPU包括向量到标量接口,该向量到标量接口将从张量处理引擎所接收的输入向量转换成一个或多个标量。SPU将(多个)输入标量存储在全局标量寄存器文件中。SPU还包括一个或多个标量操作硬件组件(HC)。每个标量操作HC从标量寄存器文件读取至少一个输入标量,对(多个)输入标量执行一些标量操作以生成至少一个输出标量,并且然后将(多个)输出标量写回到标量寄存器文件中。SPU还包括标量到向量接口,该标量到向量接口将被存储在标量寄存器文件中的一个或多个标量转换成输出向量。
根据一种实现,向量到标量接口可以通过生成输入向量中的元素值的总和、最大值或最小值来产生标量。标量到向量接口可以复制(replicate)从标量寄存器文件取回的标量以生成输出向量。备选地或附加地,标量寄存器文件包括用于接收向量形式的输入向量的写入端口以及用于提供向量形式的输出向量的读取端口。
根据一个技术优势,计算系统将标量操作无缝集成到处理流水线中,该处理流水线否则被专用于基于张量的操作。该特性提高了计算系统的效率。它还促进了编写包括基于张量的操作和标量操作二者的计算机程序的任务。
本发明内容被提供来以简化的形式介绍一系列概念;这些概念在下面的详细描述中进一步描述。本发明内容并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在被用来限制所要求保护的主题的范围。
附图说明
图1示出了包括硬件加速器的说明性计算系统的概览。硬件加速器进而包括张量处理引擎和标量处理单元。
图2示出了图1的计算系统的更详细视图。
图3示出了由图1和图2的计算系统提供的张量处理引擎的一种实现。
图4示出了由图1和图2的计算系统提供的标量处理单元的一种实现。
图5示出了图4中所示的标量处理单元的各部分的备选实现。
图6示出了图1和图2的计算系统可以如何被用来执行softmax(归一化指数函数)操作的示例。
图7是示出了图1和图2的计算系统的一种说明性操作方式的流程图。
图8示出了可以被用来实现前述附图中所示特征的任何方面的说明性计算硬件。
在整个公开内容和附图中使用相同的附图标记来引用相同的组件和特征。100系列附图标记指的是最初在图1中找到的特征,200系列附图标记是指最初在图2中找到的特征,300系列附图标记指的是最初在图3中找到的特征,依此类推。
具体实施方式
本公开内容被组织如下。A部分描述了一种计算系统,该计算系统具有加快与深度神经网络(DNN)或其他类型分析逻辑相关联的操作的硬件加速器。B部分阐述了解释A部分的计算系统的操作的说明性方法。以及,C部分描述了可以被用来实现A部分和B部分中描述的特征的任何方面的说明性计算硬件。
作为初步事项,附图中的一些附图示出了计算系统的结构特征。将这些图中的各个部分图示分离成不同单元可以反映在实际实现中对应的不同物理和有形部分的使用。备选地或附加地,图中所图示的任何单个部分可以由多个实际物理部分来实现。备选地或附加地,附图中任何两个或更多个分离部件的描绘可以反映由单个实际物理部分所执行的不同功能。
其他附图以流程图的形式描述了这些概念。以这种形式,某些操作被描述为构成以特定顺序执行的不同块。这样的实现是说明性的而非限制性的。本文描述的某些块可以归组在一起并且在单个操作中被执行,某些块可以被分解为多个组件块,并且某些块可以以与本文所图示的顺序不同的顺序来执行(包括并行执行块的方式)。
本文描述的任何存储资源或存储资源的任何组合都可以被视为计算机可读介质。在许多情况下,计算机可读介质表示某种形式的物理和有形实体。术语计算机可读介质还涵盖例如经由物理管道和/或空气或其他无线介质等发射或接收的传播信号。然而,特定术语“计算机可读存储介质”明确排除传播信号本身,同时包括所有其他形式的计算机可读介质。
以下解释可以将一个或多个特征标识为“可选的”。此类声明不应被解释为对可能被视为可选的特征的详尽说明;也就是说,其他特征可以被认为是可选的,尽管在文本中没有显式地指出。此外,对单个实体的任何描述并不旨在排除对多个此类实体的使用;同样,对多个实体的描述并不旨在排除对单个实体的使用。此外,虽然描述可以将某些特征解释为执行所标识的功能或实现所标识的机制的替代方式,但是这些特征也可以以任何组合方式组合在一起。最后,术语“示例性”或“说明性”指的是潜在的许多实现之中的一种实现。
A.说明性计算系统
图1示出了包括硬件加速器104的说明性计算系统102。硬件加速器104进而包括两种类型的处理引擎106:张量处理引擎108和标量处理单元(SPU)110。张量处理引擎108以张量的形式执行操作。SPU 110以标量的形式执行操作。通常,由处理引擎执行的大部分工作都被分配给张量处理引擎108。在这些上下文中,SPU 110可以被视为处置基于张量的数据流内的残余的非张量相关工作的附加处理器。
如本文中所使用的术语,张量包括两个或更多元素的阵列。张量至少包括(至少具有两个维度)矩阵和向量。标量是指具有值的单个元素。如本文中所使用的,术语“标量”和“标量值”被认为是同义词。
在一种实现中,硬件加速器104被实现为专用硬件组件。例如,硬件加速器104可以包括现场可编程门阵列(FPGA)单元的结构。备选地或附加地,硬件加速器104可以使用一个或多个专用集成电路(ASIC)来实现。备选地或附加地,硬件加速器104可以使用通用图形处理单元(GPGPU)等来实现。上述示例是在说明的精神而非限制的精神下阐述的;硬件加速器104可以由其他类型的专用硬件单元来实现。
在一些实现中,硬件加速器104表示“软”处理器,其可以在其制造之后被重新编程以执行不同的相应操作。硬件加速器104可以使用诸如FPGA的可编程门阵列设备来达成该结果。在其他一些实现中,硬件加速器104被硬连线以执行一组固定的操作。硬件加速器104可以使用例如硬连线门阵列、ASIC等来达成该结果。
在一些实现中,硬件加速器104表示执行与(多个)任何类型的深度神经网络(DNN)或(多个)其他类型的神经网络(即,除了DNN)相关联的操作的神经处理单元(NPU)。DNN的示例性类型包括卷积神经网络(CNN)、循环神经网络(RNN)等。RNN可以包括长短期记忆(LSTM)单元、门控循环单元(GRU)等。更具体地说,计算系统102使用硬件加速器104来加快已经训练的DNN的应用阶段操作(其中术语“应用阶段”意在区别于DNN的离线训练)。在其他一些实现中,硬件加速器104实现一些其他计算密集型分析任务,不一定是与DNN相关联的。计算系统102还可以使用硬件加速器104来训练DNN或其他类型的神经网络。
硬件加速器104还包括可选的向量存储器管理器(VMM)112。在其他任务之中,VMM112管理处理引擎106与各种其他组件之间的数据的交换。例如,VMM 112充当处理引擎106与存储器(例如,DRAM)114之间的向量接口。VMM 112还充当处理引擎106与一个或多个网络接口116之间的接口。
(多个)网络接口116经由一个或多个通道120来与一个或多个消耗系统118交互。为此,(多个)网络接口116维护用于从消耗系统118接收输入数据和命令的输入队列。(多个)网络接口116将输入数据转发给处理引擎106以供处理。(多个)网络接口116还维护用于接收由处理引擎106生成的输出数据的输出队列。(多个)网络接口经由(多个)通道120将输出数据转发给消耗系统118。(多个)通道120可以包括以下任何项:局域网(诸如由数据中心提供的局域网)、广域网(诸如互联网)、任何类型的总线(诸如PCIe总线)等。
消耗系统118可以为(多个)任何目的而提供与处理引擎106交互的任何服务组合。一种消耗系统与的搜索引擎对应,该搜素引擎使用处理引擎106对输入查询执行使用CNN的语义分析。另一类型的消耗系统与交互式语音识别引擎对应,交互式语音识别引擎使用处理引擎106实时分析用户的输入语音,等等。任何消耗系统还可以转发管控(govern)处理引擎106所执行的处理操作的类型的变元或其他命令。
控制逻辑122供应管控硬件加速器104的操作的指令。它基于由人类程序员编写的计算机程序124来这样做。在一种情况下,指令描述了与神经网络的每个层或循环单元或者其他类型的分析引擎相关联的操作。在一种实现中,控制逻辑122表示包括中央处理单元(CPU)的计算设备。备选地或附加地,控制逻辑122表示计算系统102的一个或多个其他组件的一部分。例如,控制逻辑122可以表示处理引擎106和/或VMM 112等内的组件。
指令解码器126将计算机程序124的指令映射到更原始的控制命令,这些控制命令控制硬件加速器的不同的相应部分的操作。例如,假设张量处理引擎108包括多个并行工作以计算向量与矩阵的乘积的瓦片引擎(未示出)。进一步假设计算机程序包括从高级角度描述该计算的指令。在这里,指令解码器126将高级指令映射成多个原语控制命令,其中每个原语控制命令控制不同的瓦片引擎。指令解码器126基于规定的规则并且基于一个或多个设置参数来执行高级指令和低级命令之间的映射。例如,一个或多个设置参数可以指令张量处理引擎108在处理输入请求时使用指定的并行度。
如图1中的高级形式所示,张量处理引擎108包括用于存储张量信息(例如,向量、矩阵等)的一个或多个张量寄存器文件128。张量处理引擎108还包括一个或多个张量操作硬件组件(HC)130,用于以基于张量的形式来执行操作。SPU 110包括用于存储标量信息的一个或多个标量寄存器文件132。SPU 110还包括用于以基于标量的形式执行操作的一个或多个标量操作硬件组件(HC)134。
如以下将更详细阐述的,张量处理引擎108和SPU 110使用相同类型的基于向量的编程接口。这意味着张量处理引擎108和SPU 110两者都接受向量形式的输入数据,并且供应向量形式的输出数据。但是在内部,张量处理引擎108对以向量形式馈送给它的输入数据执行操作,而SPU 110对以标量形式馈送给它的输入数据执行操作。为了以这种方式运作,SPU 110包括将输入数据从向量形式转换成标量形式的向量到标量接口。SPU 110然后对标量形式的输入数据执行一个或多个基于标量的操作。SPU 110然后使用将输出数据从标量形式转换成向量形式的标量到向量接口。
借助于上述设计,可以以与张量处理引擎108相同的方式可编程地处理SPU 110。例如,在一种实现中,开发者可以使用相同种类的写入指令来向张量处理引擎108或SPU110写入输入向量。类似地,开发者可以使用相同类型的读取指令从张量处理引擎108或SPU110读取向量。后面的附图和随附的解释将阐明硬件加速器104达成上述结果的方式。
图2和图3示出了图1的计算系统102的张量处理引擎108的更详细的描述。这些细节是在说明而不是限制的精神下呈现的。与下文所阐述的相比,其他实现可以使用具有任何其他架构的张量处理引擎。此外,与下文所阐述的相比,其他实现可以使用提供任何其他种类的张量处理流的张量处理引擎。
图2中所示的张量处理引擎108包括多个通道(通道1、通道2、...、通道C)。图1示出了第一通道(通道1)的说明性细节。其他通道包括相同的组件。张量处理引擎108的不同实现可以基于不同的特定于环境的考虑而将工作分配给不同的通道。例如,假设计算机程序124包括至少一个循环,该循环涉及重复相同的操作系列。指令解码器126可以将与循环的不同迭代相关联的工作分配给不同的相应通道。这允许张量处理引擎108并行执行与不同迭代相关联的工作。
进一步注意,张量处理引擎108可以在执行其任务时利用其他维度的并行性。例如,考虑计算机程序124指定输入向量要乘以矩阵的情况。张量处理引擎108可以将该任务分解为将输入向量乘以矩阵的每个行的子任务,并且然后并行执行这些子任务。
如图所示,在该非限制性实现中,第一(代表性)通道提供由两个或更多个张量处理单元(例如,张量处理单元202、张量处理单元204和张量处理单元206)组成的处理流水线。在其他一些实现中,每个通道可以包括更少或附加的张量处理的处理单元。每个张量处理单元包括一个或多个张量寄存器文件(RF)和一个或多个张量操作硬件组件(HC)。更具体地,第一张量处理单元202包括一个或多个张量RF 208和一个或多个张量操作HC 210,第二张量处理单元204包括一个或多个张量RF 212和一个或多个张量操作HC 214,以及第三张量处理单元206包括一个或多个张量RF 216和一个或多个张量操作HC 218。如上面所阐述,张量RF以的张量形式存储数据,例如作为矩阵或向量。张量操作HC以张量形式执行功能。例如,一种张量操作HC可以将向量乘以矩阵。另一张量操作HC可以将第一向量加到第二向量,依此类推。图3(如下所述)提供了关于张量处理单元(202、204、206)之中的一种可能的操作分配的附加信息。
从第一张量处理单元202的输出数据充当馈送给第二张量处理单元204中的输入数据的意义上,第一通道形成流水线。来自第二张量处理单元204的输出数据充当馈送给第三张量处理组件206中的输入数据。每个个体张量处理单元还在流水线中组织其张量操作HC。例如,考虑第二张量处理单元204包括三个张量操作HC的情况。第一张量操作HC提供输出数据,该输出数据充当馈送给第二张量操作HC中的输入数据,并且第二张量操作HC提供输出数据,该输出数据充当馈送给第三张量操作HC中的输入数据。然而,计算机程序124可以仅调取任何给定张量处理单元中的张量操作HC的子集。
在一种实现中,开发者以利用在上述流水线中执行功能的顺序的方式来编写计算机程序124(图1中所示)。例如,假设张量处理引擎108包括执行向量乘法的张量操作HC,随后是执行向量加法或减法的张量操作HC。鉴于此顺序,开发者可以编写程序,其中标识乘法操作的指令在标识加法或减法操作的指令之前。更一般地说,开发者编写程序来指定要由处理引擎106执行的操作链。开发者基于考虑张量操作HC在张量处理引擎108中布置的顺序来创建这些链。进一步注意,在许多情况下,计算机程序124指令张量处理引擎108在指定的迭代数目上重复一个或多个操作链。张量处理引擎108可以通过对每个通道执行通过图2中所示的流水线的多个遍次(pass)来实现这种操作方式。
在一些情况下,张量处理引擎108可以包括至少一个张量操作HC,作为默认规则,该张量操作HC接收来自先前(“上游”)张量操作HC的输入数据。这种行为消除或减少了计算机程序124显式地标识该输入数据的源的需要。它还消除了分配专用寄存器来存储输入数据的需要。在上面的示例中,执行加法或减法操作的张量操作HC从执行乘法操作的先前张量操作HC接收第一操作数,而无需开发者在计算机程序124中显式地标识该输入数据的来源;它可以从与执行加法或减法的张量操作HC特定地相关联的基于向量的RF接收第二操作数。
图2示出了张量处理引擎108经由向量存储器管理器(VMM)112来与SPU 110交互。更具体地,在该配置中,VMM 112以与任何存储器(诸如存储器114)的方式相同的方式处理SPU 110。也就是说,VMM 112可以向SPU 110发送写入请求,SPU 110操作以向SPU 110发送输入向量以进行处理。VMM 112还可以向SPU 110发送读取请求,其用于从SPU 110拉取输出向量。但是其他实现可以使用其他相应的连接策略将SPU 110集成到计算系统102中。例如,在另一实现中,任何张量处理单元可以包括SPU 110的实例化,可选地连同一个或多个张量操作HC一起实例化。在另一情况下,VMM 112自身并入了SPU 110。
在一种实现中,图2的张量处理引擎108处理具有本机(native)矩阵大小的矩阵,诸如N行和N列。同样,张量处理引擎108处理具有规定的本机向量大小的向量,诸如1×N个元素。张量处理引擎108可以通过将两个或更多个N度向量视为单个单元来处置具有大于N的维度的向量,以在两个或更多个连续指令周期上进行处理。张量处理引擎108可以通过用伪值填充向量来处置维度小于N的向量,直到它包括N个维度。同样,张量处理引擎108可以使用上述策略处理具有大于或小于N×N的维度的矩阵。SPU 110以下面将解释的方式来处理非本机大小的向量。
图3示出了与第一通道相关联的处理流水线的更具体(但仍是说明性和非限制性的)示例。同样,其他通道可以包括相同系列的张量处理单元,尽管图3中没有具体显示。
在该示例中,第一张量处理单元与矩阵向量乘法器(MVM)处理单元302对应。MVM处理单元302执行将向量乘以矩阵的主要任务。第二张量处理单元与执行两个或更多不同种类的基于向量的操作的多功能处理单元304对应。第三张量处理单元与执行两个或更多不同种类的基于向量的操作的另一多功能处理单元306对应。图3中所示的流水线可以包括附加的MVM处理单元和/或多功能处理单元。如图所示,MVM处理单元302将其计算结果作为输入数据转发给第一多功能处理单元304,并且第一多功能处理单元304将其计算结果作为输入数据转发给第二多功能处理单元306。
更具体地,MVM处理单元302包括第一张量寄存器文件(Mvm_Inital_Vrf 308),其存储馈送到一个或多个瓦片引擎310中的输入向量。第二张量寄存器文件(Mvm_Matrix_Rf312)包括馈送到(多个)瓦片引擎310中的输入矩阵。(多个)瓦片引擎310将从Mvm_Initial_Vrf 308取回的向量乘以从Mvm_Matrix_Rf 312取回的矩阵。每个瓦片引擎可以包括架构(未示出),该架构包括在多个道中操作的多个点积引擎。在一种配置中,每个点积引擎将输入向量乘以输入矩阵的一行。它在逐个元素的基础上并行执行该操作,并且然后跨输入向量的各维度对结果求和。此外,MVM处理单元302可以包括一个或多个累加器(未示出),其将多个点积引擎的输出结果求和。
第一多功能处理单元304从初始寄存器文件(MFU_Intial_Vrf314)接收初始向量。它还接收由MVM处理单元302提供的张量输出数据。张量仲裁器316控制将什么输入数据馈送给第一多功能处理单元304。在图3的仅说明性的情况下,第一多功能处理单元304包括三个张量操作HC:将两个向量相加在一起或从第二向量中减去第一向量的加减(Add-Sub)HC318;将两个向量相乘在一起的乘法器HC 320;以及在输入向量上执行神经网络激活函数(诸如双曲正切函数、sigmoid函数、ReLU函数等)的激活HC322。第一寄存器文件(Add_Sub_Vrf 324)将向量操作数供应给加减HC 318。加减HC 318的另一个向量操作数源自某个先前的源,诸如MVM处理单元302、MFU_Initial_Vrf 314等。第二寄存器文件(Multiply_Vrf326)将向量操作数供应给乘法器HC 320。乘法器HC 318的另一个向量操作数源自某个先前的源,诸如加减HC 318(如果被使用)、MFU_Initial_Vrf314等。对激活HC 322的输入源自某个先前的源,诸如乘法器HC 320、加减HC 318、MFU_Initial_Vrf 314等。交叉开关(xBar)328作为以自上而下的方式传递信息的管道来操作,例如通过将数据从MVM处理单元302或MFU_Initial_Vrf 314传递到加减HC 318,通过将数据从加减HC 318传递到乘法器HC 320,等等。
第二多功能处理单元306从第一多功能处理单元304接收输入数据。它包括与第一多功能处理单元304相同的组件,包括:加减HC330、乘法器HC 332、激活HC 334、Add_Sub_Vrf 336、Multiply_Vrf 338和xBar 340。注意,计算机程序124不需要利用每个多功能单元中的张量HC中的所有张量HC。例如,计算机程序124可以不使用第一多功能处理单元304中的加减HC 318;因此可以认为该硬件组件被解激活。另一方面,计算机程序124可以不使用第二多功能处理单元306中的乘法器HC 332;因此可以认为该硬件组件被解激活。进一步注意,图3中所示的基于张量的操作的种类是出于说明而非限制的精神而呈现的;其他实现可以使用其他种类的基于张量的函数,和/或可以省略图3中所示的基于张量的函数中的一个或多个基于张量的函数。
更一般地,如上面所指出,与图1和图2中所示的那些相比,SPU 110可以与其他类型的张量处理引擎架构和张量处理流相关联地工作。在上述架构的一种变体中,张量处理引擎108包括具有一个或多个张量寄存器文件和张量操作HC的任何组合的单个张量处理单元。在另一个变体中,张量处理引擎108不一定将其张量操作HC布置成系列(即,在流水线中)。例如,张量处理引擎108可以提供将一个或多个张量RF直接连接到每个张量操作HC的总线或其他种类的路由逻辑。
图4示出了上面介绍的标量处理单元(SPE)110的一种实现。SPE 110的主要组件包括向量到标量接口402、标量寄存器文件(SRF)404、标量到向量接口406和一组标量操作硬件组件(HC)408。向量到标量接口402将输入向量转换成标量形式。SRF 404将由向量到标量接口402提供的(多个)标量存储在相应的写入地址处。标量到向量接口406将从SRF 404读取的一个或多个标量转换成向量形式。并且标量操作HC 408对从SRF 404读取的标量执行相应的标量操作;在每个这样的标量操作之后,标量操作HC将标量结果值写入到SRF 404。以下解释依次描述了这些组件中的每个组件的操作。
一般来说,图4指示SPU 110的不同组件基于由指令解码器126提供的命令来执行它们的操作。此外,SPU 110将数据和输入命令缓冲在各种先进先出(FIFO)缓冲区中。进一步注意,SPU 110的每个组件可以被可视化为包括控制器,该控制器与执行来自控制器的指令的逻辑组合。例如,标量操作HC 408可以被概念化为标量控制器,其与执行来自标量控制器的指令的逻辑组件交互。
标量到向量接口
从向量到标量接口402开始,该组件使用不同的可选择种类的硬件组件(HC)将输入向量转换成至少一个标量。例如,求和归约HC410使用树归约来对与输入向量中的元素相关联的值求和。最大归约HC 412使用树归约来确定输入向量中所包括的元素值之中的最大值。最小HC(未示出)使用树归约来确定输入向量中所包括的元素值之中的最小值。ArgmaxHC(未示出)确定与输入向量中具有最大值的元素相关联的索引,例如通过使用树归约来标识最大值、并且然后记录与该最大值相关联的索引。Argmin HC(未示出)确定与输入向量中具有最小值的元素相关联的索引,依此类推。这些类型的向量到标量HC在本文中是出于说明而非限制的精神而阐述的;其他实现可以使用将向量转换成至少一个标量的其他HC。进一步注意,在大多数场景中,向量到标量接口402使用单个硬件组件来处理输入向量。但是它也可以应用两个或更多个硬件组件来产生两个或更多个标量,例如通过使用求和归约HC410来确定输入向量中的元素值的总和并且使用最大归约HC 412来确定输入向量中的最大值元素值。
在一些输入场景中,向量到标量接口402可以在多个指令周期中执行其工作。在一个这样的场景中,向量到标量接口402处理具有宽度w的输入向量,该宽度w小于由张量处理引擎108处理的向量的本机向量大小N。在另一情况下,向量到标量接口402接收一组输入向量,每个输入向量的大小为N,以及指示该组本机向量将被视为单个单元的控制信息。在这些情况下,向量到标量接口402在两个或更多个阶段中执行其标量提取操作。
为了解决首先提到的输入场景,向量到标量接口402可以包括可选的输入选择器组件414,其运行来选择输入向量的一部分。例如,假设输入向量包括N个维度,但SRF 404被设计为接受一组w个向量元素,其中w<N。在这种情况下,输入选择器组件508可以在第一遍次中选择输入向量的前w个元素,并且在一个或多个后续遍次中选择输入向量的其余元素。
向量到标量接口402的每个硬件组件也可以适配其行为以处理零散(piecemeal)形式的输入向量数据。更具体地说,考虑如下示例:输入向量具有大小为N(例如,300个元素),而求和归约HC 410的宽度w是100个元素——也就是说,N的三分之一。求和归约HC 410通过连续处理三个分量输入向量来处置这种场景,每个分量输入向量具有为N的三分之一(即100个元素)的大小。也就是说,求和归约HC 410可以处理第一分量输入向量以产生第一总和。然后,它可以在内部将第一总和存储在求和归约HC 410中。例如通过将第二分量输入向量中的元素值的总和与第一总和相加,求和归约HC 410可以将第二分量输入向量与第一总和一起处理以产生第二总和。然后求和归约HC在内部存储第二总和。类似地,例如通过将第三分量输入向量中的元素值的总和与第二总和相加,求和归约HC 410可以将第三分量输入向量与第二总和一起处理以产生第三也就是最终总和。求和归约HC 410然后输出第三也就是最终总和。
在备选实现中,求和归约HC 410可以将它产生的每个中间总和存储在标量寄存器文件(SRF)404中,也就是说,而不是在内部将中间总和存储在求和归约HC 410自身中。在处理每个新的分量输入向量后,求和归约HC 410可以通过以下方式执行读取-写入-修改操作:(1)从SRF 404拉取最近的中间总和;(2)将与当前分量输入向量相关联的值与中间总和相加;(3)将已更新的总和写回到SRF404的相同地址位置处。
在一些实现中,计算系统102可以在多遍次归约操作之前初始化SRF 404中的存储位置。例如,在多遍次求和归约操作开始时,控制逻辑122可以将值0存储在求和归约HC 410将存储其总和的位置中。备选地,求和归约HC 410可以被配置为抑制初始读取-修改-写入操作的读取操作。这两个示例都将防止在求和归约操作(如果存在的话)开始时最初被存储在SRF 404中的值破坏总和。
不同的输入场景可以使上述操作方式进一步复杂化。例如,在一些情况下,向量到标量接口402可以接收用伪值填充的输入向量。这些伪值可能会破坏由向量到标量接口402做出的确定。破坏的可能性取决于向量到标量接口402使用哪种硬件组件来产生标量、以及添加到输入向量的伪值的类型。例如,考虑向量到标量接口402使用最大归约HC 412来确定输入向量内的最大值的情况。假设输入向量的有效元素中的所有有效元素都具有负值,并且每个伪值具有值0。最大归约HC 412将错误地确定输入向量中的最大值为零。
为了解决这个问题,最大归约HC 412可以接收输入向量以及指定输入向量的逻辑长度的输入参数(“逻辑长度”)。例如,假设本机向量长度为300,但是只有输入向量的前200个元素对应于有效值。其余100个元素对应于伪值。除了接收输入向量之外,最大归约HC412还接收标识输入向量的逻辑长度(在这里对应于200个元素)的逻辑长度值。最大归约HC412利用逻辑长度值来确定输入向量的前200个元素中的最大值,忽略填充输入向量的后100个元素的伪值。
argmax HC(未示出)与求和归约HC 410和最大归约HC 412不同,因为它必须在多个相应的指令周期上传播多个值(其中argmax HC处理多个分量输入向量)。这些值包括迄今为止遇到的最大值,以及与最大值相关联的元素的索引值。argmax HC在内部存储这两条信息,或者将这两条信息存储在SRF 404的不同的相应存储位置处。
不同的实现可以以不同的相应方式在多次迭代中更新索引值。考虑输入向量具有大小为300且argmax HC的宽度w为100个元素的具体情况。在一个仅说明性的示例中,argmax HC存储基本索引值,该基本索引值标识当前正在被处理的输入向量的分段。也就是说,当argmax HC处理输入向量的前一百个元素(元素1到100)时,基本索引值为0;当argmaxHC处理输入向量的下一百个元素(元素101到200)时,基本索引值为100;并且当argmax HC处理输入向量的最后一百个元素(元素201到300)时,基本索引值为200。argmax HC可以通过以下方式更新索引:(1)确定所考虑的输入向量的分段是否具有大于任何先前遇到的300元素输入向量的值;(2)如果是,则存储已更新的最大值;(3)确定偏移索引值,该偏移索引值指示最大值出现在当前所考虑的向量分段中的位置;(4)将该偏移索引值添加到当前基本索引值(其中基本索引值标识当前所考虑的向量分段),以提供已更新的索引值;并且(5)存储已更新的索引值。
注意,向量到标量接口402的操作已经在特定种类的硬件组件(例如求和归约HC410、最大归约HC 412和argmax HC(未示出))的上下文中进行了描述。但是相同的原理适用于由向量到标量接口402所使用的任何其他硬件组件。
标量寄存器文件
标量寄存器文件(SRF)404包括具有相应写入地址的写入端口416的集合,以及具有相应读取地址的读取端口418的集合。向量到标量接口402将标量写入到写入端口416。标量到向量接口406从读取端口418从SRF 404取回一个或多个被存储的标量。
在一种实现中,SRF 404表示跨计算系统102的通道中的处理流水线共享的全局资源。也就是说,每个张量处理单元与相同的SRF 404交互。但是SPU 102可以包括向量到标量接口402的多个实例化和标量到向量接口406的多个实例化。例如,SPU 110可以向每个通道分配向量到标量接口402的单独实例以及标量到向量接口406的单独实例、和/或到每个通道内的每个张量处理单元等等。这意味着与张量处理引擎108的不同组件相关联的向量到标量接口并行操作。向量到标量接口402的每个实例将其结果存储在全局SRF 404中的指定位置中。同样,与张量处理引擎108的不同组件相关联的标量到向量接口并行操作。标量到向量接口406的每个实例都从全局SRF 404的规定位置拉取标量值。
标量操作硬件组件
标量操作硬件组件(HC)408的集合执行相应的基于标量的操作。更具体地说,每个标量操作HC经由读取端口418从SRF 404取回一个或多个标量,对所取回的(多个)标量执行某个基于标量的功能以生成一个或多个输出标量,并且然后经由写入端口416将(多个)输出标量写回到SRF 404中。这构成读取-修改-写入操作。例如,标量倒数HC 420读取在SRF404中的指定存储器位置处的标量x,生成标量的倒数(1/x),并且然后将输出结果标量写入到SRF 404中的指定存储器位置处。标量平方根HC 422将标量x读取到SRF 404中的指定存储器位置,生成标量的平方根并且然后将输出结果标量写入到指定存储器地址。
上述标量操作是出于说明而非限制的精神而呈现的;其他实现可以包括标量HC的任何子集。例如,另一种实现可以提供执行乘法操作的标量操作HC、执行加法操作的标量操作HC等。注意,这些种类的标量操作HC接收两个输入操作数,而标量倒数操作HC 420和标量平方根HC 422各自接收一个输入操作数。通常,标量操作HC可以接收任何数目的输入操作数并提供任何数目的输出结果。
又一种类的标量操作HC通过从SRF 404中的第一相应位置读取一组标量值并且将它们存储在SRF 404中的第二相应存储位置中来执行移位操作。另一种类的标量操作HC以条件方式执行操作,例如基于供应给SPU 110的一个或多个输入参数值来执行操作。另一种类的标量操作HC通过选择性地读取更大的一组值内的值来执行掩膜操作,等等。
注意,特定计算机程序124可以调取标量操作HC中的任何标量操作HC或不调取标量操作HC。在后一种情况下,计算系统102使用向量到标量接口402的硬件组件对输入向量执行某个归约操作,以产生至少一个标量;然后,计算系统102使用标量到向量接口406的某个硬件组件来基于向量到标量接口402所提供的(多个)标量产生输出向量,而无需由标量操作HC提供的任何进一步变换。
标量到向量接口
标量到向量接口406包括一个或多个硬件组件(HC),该一个或多个硬件组件将从SRF 404读取的一个或多个标量转换成输出向量(或多个分量输出向量)。例如,广播HC 424从SRF 404读取单个标量,并且然后跨N维度的输出向量的所有元素来复制该标量。
向量组装HC 426从SRF 404读取被存储在不同的相应存储器位置处的多个标量。然后它将这些标量组装成一个或多个输出向量。在一种实现中,SPU 110在多个相应的标量操作中生成这多个标量值,在多个指令周期上执行。例如,SPU 110可以在多个连续操作中确定矩阵的每个列的最大值,并且将每个最大值存储在SRF 404中的规定位置处。向量组装HC 426可以从SRF 404读取这些最大值,并且将它们组装成一个输出向量;该输出向量表达跨矩阵的不同列的最大值。
向量组装HC 426还可以基于被存储在SRF 404中的索引信息在复合输出向量中的适当位置处插入标量。换句话说,标量到向量接口406包括对向量到标量接口402使用来处理多个分量输入向量的逻辑进行补充的逻辑。例如,标量到向量接口406可以基于基本索引值(其标识所考虑的分段)和偏移索引值(其标识元素在所考虑的分段中的位置)来确定元素值在从多个分段组装的输出向量中的放置。
假设标量到向量接口406具有小于本机向量长度N的宽度w。在这种情况下,输出选择器组件428可以级联大小为w的多个分量输出向量以生成大小为N的复合输出向量。
SPU的编程接口
如上面所解释的,在一个非限制性实现中,计算系统102可以通过执行被包括在计算机程序124中的写入指令而向SPU 110提供输入向量。写入指令的第一操作数标识在向量到标量接口402中的特定种类的硬件组件,该特定种类的硬件组件将被用来将输入向量转换成标量。例如,标识符“Spu_Max_Reduce”指令向量到标量接口402使用最大归约HC 412来处理输入向量—例如通过确定输入向量中的最大元素值。写入指令中的第二操作数标识最大值将在SRF 404中被存储的存储器位置,例如“spu_accum”。
计算系统102可以通过执行被包括在计算机程序124中的读取指令来从SPU 110取回输出向量。读取指令的第一操作数标识标量到向量接口406中的特定种类的硬件组件,该特定种类的硬件组件将被用来将一个或多个标量转换成输出向量。例如,标识符“Spu_Broadcast”指令标量到向量接口406使用广播HC 424从SRF 404取回标量并且跨输出向量的各维度来复制它。读取指令的第二操作数指定标量在SRF 404中被存储的位置。
SPU的可选的基于向量的接口
与图4的示例相比,图5示出了SPU 110的各部分的备选实现。在这种情况下,向量到标量接口402包括用于同时将整个输入向量读取到SRF 404的相应的写入地址502中的机制。每个个体写入地址可以说是存储一个标量,对应于输入向量的元素值中的一个元素值。SPU 110然后可以对与个体写入地址相关联的任何标量执行标量操作。标量到向量接口406还包括用于从SRF 404的相应读取地址504读取整个输入向量的机制。
更具体地,向量到标量接口402可以包括管控SRF 404是接收一组标量还是接收个体标量的多路复用器506的集合。例如,当计算系统102指令SRF 404同时接收和存储整个输入向量时,SRF 404可以接收一组标量。标量对应于输入向量的元素值。(例如)当个体标量操作HC指令SRF 404存储计算出的新标量时,例如通过存储输入值x的平方根,则SRF 404可以接收单个标量。
标量到向量接口402可以包括管控SRF 404是供应单个输出标量还是同时一组输出标量的多路复用器508。在前一种情况下,SRF 404可以将单个标量读出到广播HC 424(图4),或者作为对标量操作HC的输入。然后广播HC 424可以复制单个标量以形成输出向量。在后一种情况下,SRF 404同时读出一组标量。
图5的备选实现适用于特定种类的标量操作。例如,计算系统102可以使用图5的功能性来接收完整的输入向量,计算系统102将该输入向量存储在SRF 404中的相应写入位置。然后,例如通过指定输入向量的期望元素的索引值,标量操作HC可以作为读取输入向量内的特定标量的选择器来操作。在一种情况下,SPU 110可以在先前的argmax归约操作中确定索引值。
上述计算系统102具有各种技术优势。例如,计算系统102可以将标量操作无缝地集成到处理数据流中,该处理数据流否则针对基于张量的操作。计算系统102通过使用相同的基于向量的接口来写入数据从而达成该结果,而不管该数据的目的地是张量处理单元还是SPU 110。它还使用相同的基于向量的接口来读取数据,而不管数据源自张量处理单元还是SPU 110。这些特性也促进编写计算机程序的任务。开发者可以使用相同种类的编程指令来控制张量处理引擎108和SPU 110。
计算系统102的效率可以通过将其与两个替代方案进行比较来衡量。在第一替代方案中,计算系统可以以向量的形式来表达标量,例如,通过将伪值添加到标量以产生向量。然后计算系统以基于向量的形式执行操作。然而,这种替代解决方案效率不高,因为它涉及向标量添加浪费的填充量以产生向量。该替代解决方案还可能依赖从向量提取标量的缓慢而繁琐的技术,例如涉及迭代地移位和/或对向量进行掩膜。图1和图2中所示的本计算系统102通过提供一种用于在否则针对基于张量的计算的数据流内直接以标量形式对标量进行操作的技术而消除了这些缺点。
在第二替代方案中,计算系统可以使用通用CPU来处置标量操作。这种替代解决方案需要张量处理引擎将数据传送给共享存储器。CPU从共享存储器取回数据并对其进行操作。这种替代解决方案效率不高,因为它需要包含CPU来执行通常(与张量空间中发生的大量处理操作成比例)只是少量的标量操作。换句话说,这种替代方案浪费了通用CPU的大部分资源。这种替代解决方案还使用缓慢而繁琐的技术来在张量处理引擎与通用CPU之间传送信息。相比之下,图1和图2中所示的本计算系统102依赖具有标量操作HC的专用SPU 110。SPU 110包括专门被配置为与张量处理引擎108一起操作的逻辑,并且因此不包括与通用CPU相同程度的资源浪费。张量处理引擎108还可以以相对低的时延来与SPU 110交互,因为SPU 110作为基于向量的数据流的本机元件来运行。
示例1:Softmax
图6示出了图1和图2的计算系统102可以如何被用来执行softmax(归一化指数函数)操作的示例。在数学上,softmax操作对输入向量x进行如下操作:
换句话说,softmax操作确定向量x的元素之中的最大值(即max(x)),并且然后从输入向量x的每个元素值中减去该最大值,以产生一组每元素的差值(xi-max(x))。然后它计算e的每个差值次幂,以产生一组指数差值。然后,它通过指数差值的总和(对应于上述等式的分母)来对每个指数差值进行归一化。
假设计算机程序124使用以下代码来表达软件操作:
1.v_wr(Initial_Vrf,tmp)
4.v_wr(Add_Sub_Vrf,vec_max)
5.v_rd(Initial_Vrf,tmp)
6.vv_sub(Add_Sub_Vrf,vec_max)
7.vv_exp()
8.v_wr(Initial_Vrf,tmp2)
12.v_wr(Multiply_Vrf,denom)
13.v_rd(Initial_Vrf,tmp2)
14.vv_mul(denom)
15.v_wr(<dest mem id>,result)
假设图6的顶部部分与由张量处理引擎108的一个或多个张量处理单元提供的组件(诸如一个或多个多功能单元)对应。假设图6的底部部分与由SPU 110提供的组件对应。由SPU 110执行的指令在上述计算机程序中以粗体字呈现;其余操作由张量处理引擎108执行
在操作(1)中,计算系统102执行写入命令,其使张量处理引擎108将表达输入向量x的初始向量,在写入到名为Initial_Vrf 602的向量寄存器文件与“tmp”相关联的存储器地址处。在操作(2)中,计算系统102执行对最大归约HC 604(与存储器ID“Spu_Max_Reduce”相关联)的写入。这使最大归约HC 604计算x的最大值并且将该标量存储在标量寄存器文件(SRF)606中与存储器索引“spu_accum”相关联的位置处。在操作(3)中,计算系统102执行对广播HC 608的读取操作,这使广播HC 608取回被存储在“spu_accum”处的标量并且跨输出向量的各维度来复制该标量。在操作(4)中,计算系统102执行写入命令,其将复制的最大值存储在被称为“Add-Sub_Vrf”的向量寄存器文件610中与“vec_max”相关联的存储器位置处。
在操作(5)中,计算系统102执行从输入寄存器文件Initial_Vrf602读取值x的读取命令。在操作(6)中,计算系统102使用减法HC 612来从向量寄存器文件Initial_Vrf 602中的向量x减去Add_Sub_Vrf 610中的向量vec_max。在这种情况下,减法命令隐式地将向量寄存器文件Initial_Vrf 602中的向量x标识为其第一操作数。在操作(7)中,计算系统102使用指数HC 614来计算e的(xi-max(x))次幂。在操作(8)中,计算系统102将操作(7)的结果存储在向量寄存器文件602中由“tmp2”标识的位置处。
在操作(9)中,计算系统102使用求和归约HC 616通过对在x的各元素值的的值求和来计算上述等式的分母。计算系统102指令SPU 110将该标量总和存储在SRF 606中由“spu_accum2”标识的存储器索引处。在操作(10)中,计算系统102指令标量倒数HC 618生成在操作(9)中所生成的总和的倒数。它通过从SRF 606由“spu_accum2”标识的位置处拉取总和、计算倒数、并且将倒数存储在SRF 606中由“spu_recip”标识的存储器位置处来执行此任务。在操作(11)中,计算系统102指令广播HC 608通过复制被存储在“spu_recip”处的倒数值来生成输出向量。
在操作(12)中,计算系统102指令向量寄存器文件“Multiply_Vrf”620将倒数值存储在由“denom”标识的位置处。更具体地说,计算系统102通过进行至少两遍次通过与至少一个多功能单元相关联的操作流水线来执行其操作。假设计算系统102在第二遍次通过流水线中访问Multiply_Vrf向量寄存器文件620。在操作(13)中,计算系统102读取先前被存储在Initial_Vrf向量寄存器文件602中的“tmp2”处的向量。在操作(14)中,计算系统102指令乘法HC 622将被存储在“tmp2”处的向量乘以Multiply_Vrf向量寄存器文件620中的向量(由“denom”标识)。在操作(15)中,计算系统102将在操作(14)中所生成的输出结果写入到指定的目的地位置。
示例2:层归一化
在第二示例中,计算系统102执行操作以对神经网络的层中的值执行归一化。它通过首先根据以下等式计算向量x中的值的均值(μ)和偏差(σ)来执行这些操作:
以下解释将阐述图4的SPU 110结合图2的张量处理引擎108可以执行层归一化操作的一种非限制性方式。计算系统102首先使用求和归约HC 410来生成总和然后,它使用广播HC 424来生成表达跨其各元素被复制的总和的输出向量。计算系统102然后使用由张量处理单元提供的乘法器HC来将H的倒数乘以x中的元素值的总和,以产生跨向量被复制的均值μ。(假设H的倒数被预先计算并被存储为已知参数值,而不是实时计算的。)
然后计算系统102可以使用张量处理单元的减法HC从x的每个值中减去均值μ(以向量形式来表达),以产生多个差值(xi-μ)。计算系统102然后使用张量处理单元的乘法器HC来计算(xi-μ)的平方,例如通过将表达(xi-μ)的两个向量相乘在一起。计算系统102然后调用求和归约HC 410来对(xi-μ)2的各个值求和,以及调用广播HC 424来跨输出向量的各维度复制这个总和。计算系统102接下来使用由张量处理单元提供的乘法器HC来将H的倒数(其是预先计算的值)乘以表达的向量。计算系统102接下来调用张量处理单元中的加法HC以将ε的值加到它再次以向量的形式来表达。
计算系统102然后经由最大归约HC 412将上述计算的结果写入到SPU 110。这有效地将上述计算的结果从向量形式转换为标量形式,并将其存储在SRF 404中。系统102然后调用标量平方根HC 422来计算由此生成的标量的平方根。这产生了偏差值σ。计算系统102然后使用标量倒数HC 420来计算σ的倒数。然后它使用广播HC 424来提供具有1/σ的被复制值的输出向量。
最后,计算系统102使用张量处理单元的乘法器HC将1/σ乘以(xi-μ),以产生向量积,并且使用张量处理单元的加法器HC来将偏置因子b添加到向量积。
上述对张量处理引擎108和SPU 110的操作的分配是出于说明性而非限制性的精神而阐述的。如将了解的,在一些情况下,开发者在决定由张量处理单元以基于张量的形式执行操作还是由SPU 110以标量的形式执行操作更高效时具有一定的自由裁量权。例如,张量处理引擎108和SPU 110都可以包括乘法器HC。开发者可以决定以张量的形式还是以标量的形式执行乘法操作更高效。开发者可以基于与正被实现的特定DNN相关联的流程和/或其他考虑因素来做出该确定。
B.说明性过程
图7示出了以流程图形式解释A部分的计算系统102的操作的过程702。由于计算系统102的操作的基本原理已经在A部分中描述,所以某些操作将在本部分中以概括的方式进行阐述。如具体实施方式的前言部分所指出,流程图被表达为以特定顺序执行的一系列操作。但是这些操作的顺序只是代表性的,并且可以以任何方式被改变。
在块704中,在执行一组指令的过程中,计算系统102使用张量处理引擎108将输入张量信息的至少一个实例转换为输出张量信息的至少一个实例,该一组指令执行与神经网络或其他分析任务相关联的操作。在块706中,在执行该一组指令的过程中,计算系统102使用标量处理单元110以:(706.1)基于从张量处理引擎108接收的输入向量来提供一个或多个标量;(706.2)将一个或多个标量存储在标量寄存器文件404中;(706.3)从标量寄存器文件404取回至少一个输入标量;(706.4)执行标量处理功能以基于至少一个输入标量来生成至少一个输出标量;(706.5)将至少一个输出标量存储在标量寄存器文件404中;以及(706.6)基于被存储在标量寄存器文件404中的一个或多个标量来提供输出向量。该方法使用相同的基于向量的编程接口来与张量处理引擎108和标量处理单元110交互。
C.代表性计算硬件
图8示出了计算硬件802,该计算硬件802可以被用来实现上述附图中阐述的机制的任何方面。计算硬件802可以包括一个或多个硬件处理器804,其执行被存储在存储器中的指令。例如,(多个)硬件处理器804可以包括一个或多个中央处理单元(CPU)。根据一种实现,计算系统102可以使用(多个)硬件处理器804来实现至少控制逻辑122和指令解码器126。
更一般地,(多个)硬件处理器804与被存储在计算机可读存储介质808中的任何信息806交互。信息806可以包括指令(例如,计算机程序124)、数据、设置等。计算机可读存储介质808的任何实例可以使用任何技术来存储和取回信息。在一种情况下,计算机可读存储介质808表示用于在计算硬件802执行程序期间存储瞬态信息的硬件存储器单元(诸如随机存取存储器(RAM))。备选地或附加地,计算机可读存储介质808表示用于在更永久的基础上对信息进行保留/归档的硬件存储单元(诸如硬盘)。此外,计算机可读存储介质808的任何实例可以表示计算硬件802的固定或可移除单元。
计算硬件802可以依赖一个其他硬件逻辑单元810来实现硬件加速器104的至少一些方面。在一种情况下,(多个)硬件逻辑单元810可以包括硬件逻辑门的固定配置,例如,它们是在制造时被创建和设置,此后不可更改。备选地或附加地,(多个)其他硬件逻辑单元810可以包括可编程硬件逻辑门的集合,其可以被设置为执行不同的特定于应用的任务。后一类器件包括但不限于可编程阵列逻辑器件(PAL)、复杂可编程逻辑器件(CPLD)、现场可编程门阵列(FPGA)等。
图8通常指示硬件逻辑电路装置812包括(多个)硬件处理器804、计算机可读存储介质808和/或(多个)其他硬件逻辑单元810的任何组合。也就是说,计算硬件802可以采用执行计算机可读存储介质808中所提供的机器可读指令的(多个)硬件处理器804和/或使用硬件逻辑门的固定和/或可编程集合来执行操作的一个或多个其他硬件逻辑单元810的任何组合。更一般地说,硬件逻辑电路装置812与(多个)任何类型的一个或多个硬件逻辑单元对应,其基于存储在(多个)硬件逻辑单元中和/或以其他方式体现在(多个)硬件逻辑单元中的逻辑来执行操作。
计算硬件802还可以包括一个或多个网络接口814,用于经由一个或多个通信管道816来与其他设备交换数据。(多个)通信管道816可以以任何方式来实现,例如通过由数据中心提供的局域计算机网络、广域计算机网络(例如,互联网)、点对点连接等或它们的任何组合来实现。(多个)通信管道816可以包括由任何协议或协议组合所管控的硬连线链路、无线链路、路由器、网关功能性、名称服务器等的任何组合。最后,一个或多个通信总线818将上述单元可通信地耦合在一起。
图8将计算硬件802示为由分离单元的分立集合组成。在一些情况下,单元的集合可以与在具有任何形状因数的计算设备机箱中所提供的分立硬件单元对应。在其他情况下,计算硬件802可以包括硬件逻辑单元,其集成了图1中所示单元中的两个或更多个单元的功能。例如,计算硬件802可以包括片上系统(SoC或SOC),与组合图8中所示的两个或更多个单元的功能的集成电路对应。
在一种环境中,数据中心提供了例如以分层方式布置的图8中所示的计算硬件802的一个或多个实例。(多个)网络接口816接收来自外部实体的请求,并且将对这些请求的响应转发给外部实体。
以下概述提供了本文阐述的技术的一组非详尽说明性方面。
根据第一方面,描述了一种用于使用硬件加速器来执行操作的计算系统。硬件加速器包括张量处理引擎和标量处理单元。张量处理引擎包括:用于存储张量的至少一个张量寄存器文件;以及两个或更多个张量操作硬件组件,用于基于被存储在至少一个张量寄存器文件中的张量来执行相应的张量处理功能。标量处理单元包括:向量到标量接口,用于基于从张量处理引擎所接收的输入向量来提供一个或多个标量;标量寄存器文件,用于存储由向量到标量接口提供的每个标量;用于执行相应的标量处理功能的一个或多个标量操作硬件组件,每个标量操作硬件组件从标量寄存器文件取回至少一个输入标量,执行标量处理功能以基于一个输入标量来生成至少一个输出标量,并且将至少一个输出标量存储在标量寄存器堆中;以及标量到向量接口,用于基于被存储在标量寄存器文件中的一个或多个标量来提供输出向量。硬件加速器还包括控制逻辑,用于提供管控张量处理引擎和标量处理单元的操作的指令。硬件加速器使用相同的基于向量的编程接口来与张量处理引擎和标量处理单元交互。
根据第二方面,指令表达与深度神经网络相关联的操作。
根据第三方面,张量处理引擎包括并行执行基于张量的操作的多个通道。
根据第四方面,张量处理引擎包括由串联(in series)操作的两个或更多个张量操作硬件组件组成的处理流水线。
根据第五方面,向量到标量接口包括至少一个硬件组件,该至少一个硬件组件生成在输入向量中存在的元素值的总和。
根据第六方面,向量到标量接口包括至少一个硬件组件,该至少一个硬件组件通过从输入向量中的元素值之中进行选择来标识最大或最小标量。
根据第七方面,向量到标量接口包括用于同时接收输入向量并且用于存储与输入向量中的元素值相关联的标量的功能性。
根据第八方面,标量到向量接口包括广播硬件组件,用于在输出跨向量的各元素来复制被存储在标量寄存器文件中的标量。
根据第九方面,标量到向量接口包括向量组装组件,用于基于被存储在标量寄存器文件中的多个标量来组装输出向量。
根据第十方面,硬件加速器包括用于并行执行操作的多个通道。标量寄存器文件与供通道中的所有通道使用的全局资源对应,而向量到标量接口针对硬件加速器的每个通道而被重制(duplicate),并且标量到向量接口针对硬件加速器的每个通道而被重制。
根据第十一方面,硬件加速器还包括向量存储器管理器,该向量存储器管理器提供硬件加速器与存储器之间的接口,其中标量处理单元经由向量存储器管理器来与张量处理引擎交互。
根据第十二方面,指令使用写入命令来将输入向量提供给标量处理单元。
根据第十三方面,指令使用读取命令从标量处理单元取回输出向量。
根据第十四方面,描述了一种用于使用硬件加速器来执行操作的方法。该方法包括:在执行一组指令的过程中,使用张量处理引擎将输入张量信息的至少一个实例转换为输出张量信息的至少一个实例,该一组指令执行与神经网络或其他分析任务相关联的操作。该方法还包括:在执行该一组指令的过程中,使用标量处理单元以:基于从张量处理引擎所接收的输入向量来提供一个或多个标量;将一个或多个标量存储在标量寄存器文件中;从标量寄存器文件取回至少一个输入标量;执行标量处理功能以基于至少一个输入标量来生成至少一个输出标量;将至少一个输出标量存储在标量寄存器文件中;以及基于被存储在标量寄存器文件中的一个或多个标量来提供输出向量。该方法使用相同的基于向量的编程接口来与张量处理引擎和标量处理单元交互。
根据与第十四方面相关的第十五方面,标量处理单元通过将输入向量归约为单个标量,基于接收到的输入向量来提供一个或多个标量。
根据与第十四方面相关的第十六方面,标量处理单元通过跨输出向量的各元素来复制被存储在标量寄存器文件中的标量来提供输出向量。
根据与第十四方面相关的第十七方面,指令使用写入命令将输入向量提供给标量处理单元,并且指令使用读取命令从标量处理单元取回输出向量。
根据第十八方面,描述了一种硬件加速器,其包括张量处理引擎和标量处理单元。张量处理引擎包括:用于存储张量的至少一个张量寄存器文件;以及两个或更多个张量操作硬件组件,用于基于被存储在至少一个张量寄存器文件中的张量来执行相应的张量处理功能。标量处理单元包括:向量到标量接口,用于基于从张量处理引擎所接收的输入向量来提供一个或多个标量;标量寄存器文件,用于存储由向量到标量接口提供的每个标量;用于执行相应的标量处理功能的一个或多个标量操作硬件组件,每个标量操作硬件组件被配置为从标量寄存器文件取回至少一个输入标量,执行标量处理功能以基于至少一个输入标量来生成至少一个输出标量,并且将至少一个输出标量存储在标量寄存器堆中;以及标量到向量接口,用于基于被存储在标量寄存器文件中的一个或多个标量来提供输出向量。硬件加速器使用相同的基于向量的编程接口来与张量处理引擎和标量处理单元交互。
根据与第十八方面相关的第十九方面,硬件加速器还包括向量存储器管理器,该向量存储器管理器提供硬件加速器与存储器之间的接口,其中标量处理单元经由向量存储器管理器来与张量处理引擎交互。
根据与第十八方面相关的第二十方面,硬件加速器包括用于并行执行操作的多个通道。标量寄存器文件与供通道中的所有通道使用的全局资源,而向量到标量接口针对硬件加速器的每个通道而被重制,并且标量到向量接口针对硬件加速器的每个通道而被重制。
第二十一方面与上述第一至第二十方面的任何组合(例如,任何逻辑一致的枚举或子集)对应。
第二十二方面对应于与第一到二十一方面相关联的任何方法对应物、设备对应物、系统对应物、装置加功能对应物、计算机可读存储介质对应物、数据结构对应物、制品对应物、图形用户界面呈现对应物等。
最后,说明书可能已经在说明性挑战或问题的上下文中阐述了各种概念。这种解释方式并不旨在暗示其他人已经以本文指定的方式了解和/或阐明了挑战或问题。此外,这种解释方式并不旨在暗示权利要求中记载的主题仅限于解决所标识的挑战或问题;也就是说,权利要求中的主题可以被应用于本文所述的那些问题之外的挑战或问题的上下文中。
尽管已经以特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,在所附权利要求中限定的主题不一定局限于上述特定特征或动作。相反,上述具体特征和动作作为实现权利要求的示例形式而被公开。
Claims (15)
1.一种用于执行操作的计算系统,包括:
硬件加速器,包括张量处理引擎和标量处理单元,
所述张量处理引擎包括:
至少一个张量寄存器文件,用于存储张量;以及
两个或更多个张量操作硬件组件,用于基于被存储在所述至少一个张量寄存器文件中的张量来执行相应的张量处理功能;
所述标量处理单元包括:
向量到标量接口,用于基于从所述张量处理引擎所接收的输入向量来提供一个或多个标量;
标量寄存器文件,用于存储由所述向量到标量接口提供的每个标量;
一个或多个标量操作硬件组件,用于执行相应的标量处理功能,
每个标量操作硬件组件从所述标量寄存器文件取回至少一个输入标量,执行标量处理功能以基于所述至少一个输入标量来生成至少一个输出标量,以及将所述至少一个输出标量存储在所述标量寄存器文件中;以及
标量到向量接口,用于基于被存储在所述标量寄存器文件中的一个或多个标量来提供输出向量;以及
控制逻辑,用于提供管控所述张量处理引擎和所述标量处理单元的操作的指令,
所述硬件加速器使用相同的基于向量的编程接口来与所述张量处理引擎和所述标量处理单元交互。
2.根据权利要求1所述的计算系统,其中所述指令表达与深度神经网络相关联的操作。
3.根据权利要求1所述的计算系统,其中所述向量到标量接口包括至少一个硬件组件,所述至少一个硬件组件生成在所述输入向量中存在的元素值的总和。
4.根据权利要求1所述的计算系统,其中所述向量到标量接口包括至少一个硬件组件,所述至少一个硬件组件通过从所述输入向量中的元素值之中进行选择来标识最大或最小标量。
5.根据权利要求1所述的计算系统,其中所述标量到向量接口包括广播硬件组件,所述广播硬件组件用于跨所述输出向量的各元素来复制被存储在所述标量寄存器文件中的标量。
6.根据权利要求1所述的计算系统,其中所述标量到向量接口包括向量组装组件,所述向量组装组件用于基于被存储在所述标量寄存器文件中的多个标量来组装所述输出向量。
7.根据权利要求1所述的计算系统,
其中所述硬件加速器包括用于并行执行操作的多个通道,并且
其中所述标量寄存器文件与供所述通道中的所有通道使用的全局资源对应,而所述向量到标量接口针对所述硬件加速器的每个通道而被重制,并且所述标量到向量接口针对所述硬件加速器的每个通道而被重制。
8.一种用于使用硬件加速器来执行操作的方法,包括:
在执行一组指令的过程中,使用张量处理引擎来将输入张量信息的至少一个实例转换为输出张量信息的至少一个实例,所述一组指令执行与神经网络或其他分析任务相关联的操作;以及
在执行所述一组指令的过程中,使用标量处理单元以:
基于从所述张量处理引擎所接收的输入向量来提供一个或多个标量;
将所述一个或多个标量存储在标量寄存器文件中;
从所述标量寄存器文件取回至少一个输入标量;
执行标量处理功能以基于所述至少一个输入标量来生成至少一个输出标量;
将所述至少一个输出标量存储在所述标量寄存器文件中;以及
基于被存储在所述标量寄存器文件中的一个或多个标量来提供输出向量,
所述方法使用相同的基于向量的编程接口来与所述张量处理引擎和所述标量处理单元交互。
9.根据权利要求8所述的方法,
其中所述指令使用写入命令来向所述标量处理单元提供所述输入向量,并且
其中所述指令使用读取命令来从所述标量处理单元取回所述输出向量。
10.一种硬件加速器,包括:
张量处理引擎,包括:
至少一个张量寄存器文件,用于存储张量;以及
两个或更多张量操作硬件组件,用于基于被存储在所述至少一个张量寄存器文件中的张量来执行相应的张量处理功能;
标量处理单元,包括:
向量到标量接口,用于基于从所述张量处理引擎所接收的输入向量来提供一个或多个标量;
标量寄存器文件,用于存储由所述向量到标量接口提供的每个标量;
一个或多个标量操作硬件组件,用于执行相应的标量处理功能,
每个标量操作硬件组件被配置为从所述标量寄存器文件取回至少一个输入标量,执行标量处理功能以基于所述至少一个输入标量来生成至少一个输出标量,以及将所述至少一个输出标量存储在所述标量寄存器文件中;以及
标量到向量接口,用于基于被存储在所述标量寄存器文件中的一个或多个标量来提供输出向量;并且
所述硬件加速器使用相同的基于向量的编程接口来与所述张量处理引擎和所述标量处理单元交互。
11.根据权利要求1所述的计算系统,其中所述张量处理引擎包括由串联操作的两个或更多个张量操作硬件组件组成的处理流水线。
12.根据权利要求1所述的计算系统,其中所述向量到标量接口包括用于同时接收所述输入向量以及用于存储与所述输入向量中的元素值相关联的标量的功能性。
13.根据权利要求1所述的计算系统,其中所述硬件加速器还包括向量存储器管理器,所述向量存储器管理器提供所述硬件加速器与存储器之间的接口,其中所述标量处理单元经由所述向量存储器管理器来与所述张量处理引擎交互。
14.根据权利要求1所述的计算系统,其中所述指令使用写入命令来向所述标量处理单元提供所述输入向量。
15.根据权利要求1所述的计算系统,其中所述指令使用读取命令来从所述标量处理单元取回所述输出向量。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/533,237 | 2019-08-06 | ||
US16/533,237 US10997116B2 (en) | 2019-08-06 | 2019-08-06 | Tensor-based hardware accelerator including a scalar-processing unit |
PCT/US2020/036873 WO2021025767A1 (en) | 2019-08-06 | 2020-06-10 | Tensor-based hardware accelerator including a scalar-processing unit |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114207579A true CN114207579A (zh) | 2022-03-18 |
Family
ID=71899961
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080055428.XA Pending CN114207579A (zh) | 2019-08-06 | 2020-06-10 | 包括标量处理单元的基于张量的硬件加速器 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10997116B2 (zh) |
EP (1) | EP4010794A1 (zh) |
CN (1) | CN114207579A (zh) |
CA (1) | CA3146416A1 (zh) |
MX (1) | MX2022001501A (zh) |
WO (1) | WO2021025767A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116029332A (zh) * | 2023-02-22 | 2023-04-28 | 南京大学 | 一种基于lstm网络的片上微调方法及装置 |
TWI807927B (zh) * | 2022-07-01 | 2023-07-01 | 晶心科技股份有限公司 | 具有向量歸約方法與元素歸約方法的向量處理器 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11481604B2 (en) * | 2019-10-24 | 2022-10-25 | Alibaba Group Holding Limited | Apparatus and method for neural network processing |
US11455144B1 (en) * | 2019-11-21 | 2022-09-27 | Xilinx, Inc. | Softmax calculation and architecture using a modified coordinate rotation digital computer (CORDIC) approach |
WO2022164652A1 (en) * | 2021-02-01 | 2022-08-04 | Microsoft Technology Licensing, Llc | Semi-programmable and reconfigurable co-accelerator for a deep neural network with normalization or non-linearity |
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 |
GB2608986B (en) * | 2021-06-28 | 2024-01-24 | Imagination Tech Ltd | Implementation of Argmax or Argmin in hardware |
GB2608591B (en) * | 2021-06-28 | 2024-01-24 | Imagination Tech Ltd | Implementation of pooling and unpooling or reverse pooling in hardware |
EP4120143A1 (en) * | 2021-06-28 | 2023-01-18 | Imagination Technologies Limited | Implementation of pooling and unpooling or reverse pooling in hardware |
KR20240007495A (ko) * | 2022-07-08 | 2024-01-16 | 리벨리온 주식회사 | 뉴럴 코어, 이를 포함하는 뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치의 데이터 로드 방법 |
US20240211532A1 (en) * | 2022-12-16 | 2024-06-27 | International Business Machines Corporation | Hardware for parallel layer-norm compute |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04336378A (ja) * | 1991-05-14 | 1992-11-24 | Nec Corp | 情報処理装置 |
GB2382887B (en) * | 2001-10-31 | 2005-09-28 | Alphamosaic Ltd | Instruction execution in a processor |
GB2390700B (en) | 2002-04-15 | 2006-03-15 | Alphamosaic Ltd | Narrow/wide cache |
US7146486B1 (en) * | 2003-01-29 | 2006-12-05 | S3 Graphics Co., Ltd. | SIMD processor with scalar arithmetic logic units |
US9367462B2 (en) * | 2009-12-29 | 2016-06-14 | Empire Technology Development Llc | Shared memories for energy efficient multi-core processors |
US20150067273A1 (en) | 2013-08-30 | 2015-03-05 | Microsoft Corporation | Computation hardware with high-bandwidth memory interface |
US9367519B2 (en) | 2013-08-30 | 2016-06-14 | Microsoft Technology Licensing, Llc | Sparse matrix data structure |
US20160125263A1 (en) | 2014-11-03 | 2016-05-05 | Texas Instruments Incorporated | Method to compute sliding window block sum using instruction based selective horizontal addition in vector processor |
CN111651203B (zh) * | 2016-04-26 | 2024-05-07 | 中科寒武纪科技股份有限公司 | 一种用于执行向量四则运算的装置和方法 |
CN107315715B (zh) * | 2016-04-26 | 2020-11-03 | 中科寒武纪科技股份有限公司 | 一种用于执行矩阵加/减运算的装置和方法 |
US11055063B2 (en) * | 2016-05-02 | 2021-07-06 | Marvell Asia Pte, Ltd. | Systems and methods for deep learning processor |
EP3563307B1 (en) * | 2017-02-23 | 2023-04-12 | Cerebras Systems Inc. | Accelerated deep learning |
US10108581B1 (en) * | 2017-04-03 | 2018-10-23 | Google Llc | Vector reduction processor |
CN110622134B (zh) * | 2017-05-17 | 2023-06-27 | 谷歌有限责任公司 | 专用神经网络训练芯片 |
US10372456B2 (en) | 2017-05-24 | 2019-08-06 | Microsoft Technology Licensing, Llc | Tensor processor instruction set architecture |
US10331445B2 (en) | 2017-05-24 | 2019-06-25 | Microsoft Technology Licensing, Llc | Multifunction vector processor circuits |
US10467324B2 (en) | 2017-05-24 | 2019-11-05 | Microsoft Technology Licensing, Llc | Data packing techniques for hard-wired multiplier circuits |
US10338925B2 (en) | 2017-05-24 | 2019-07-02 | Microsoft Technology Licensing, Llc | Tensor register files |
JP2019057249A (ja) | 2017-09-22 | 2019-04-11 | 富士通株式会社 | 演算処理装置および演算処理方法 |
US11372804B2 (en) * | 2018-05-16 | 2022-06-28 | Qualcomm Incorporated | System and method of loading and replication of sub-vector values |
-
2019
- 2019-08-06 US US16/533,237 patent/US10997116B2/en active Active
-
2020
- 2020-06-10 MX MX2022001501A patent/MX2022001501A/es unknown
- 2020-06-10 EP EP20750542.1A patent/EP4010794A1/en active Pending
- 2020-06-10 CA CA3146416A patent/CA3146416A1/en active Pending
- 2020-06-10 CN CN202080055428.XA patent/CN114207579A/zh active Pending
- 2020-06-10 WO PCT/US2020/036873 patent/WO2021025767A1/en unknown
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI807927B (zh) * | 2022-07-01 | 2023-07-01 | 晶心科技股份有限公司 | 具有向量歸約方法與元素歸約方法的向量處理器 |
CN116029332A (zh) * | 2023-02-22 | 2023-04-28 | 南京大学 | 一种基于lstm网络的片上微调方法及装置 |
CN116029332B (zh) * | 2023-02-22 | 2023-08-22 | 南京大学 | 一种基于lstm网络的片上微调方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
MX2022001501A (es) | 2022-03-11 |
US20210042260A1 (en) | 2021-02-11 |
WO2021025767A1 (en) | 2021-02-11 |
CA3146416A1 (en) | 2021-02-11 |
US10997116B2 (en) | 2021-05-04 |
EP4010794A1 (en) | 2022-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114207579A (zh) | 包括标量处理单元的基于张量的硬件加速器 | |
US20220391209A1 (en) | Neural network processing with chained instructions | |
JP2020528621A (ja) | 加速数学エンジン | |
US11151445B2 (en) | Neural network processor with a window expander circuit | |
EP3785112B1 (en) | Matrix vector multiplier with a vector register file comprising a multi-port memory | |
US20190130270A1 (en) | Tensor manipulation within a reconfigurable fabric using pointers | |
US11227030B2 (en) | Matrix multiplication engine using pipelining | |
US20190130268A1 (en) | Tensor radix point calculation in a neural network | |
GB2474901A (en) | Multiply-accumulate instruction which adds or subtracts based on a predicate value | |
US11880426B2 (en) | Integer matrix multiplication engine using pipelining | |
US20190130269A1 (en) | Pipelined tensor manipulation within a reconfigurable fabric | |
WO2019089553A1 (en) | Tensor radix point calculation in a neural network | |
Gonçalves et al. | Exploring data size to run convolutional neural networks in low density fpgas | |
US11842169B1 (en) | Systolic multiply delayed accumulate processor architecture | |
CN115398395A (zh) | 具有用于同时处理不同类运算的独立数据路径的深度神经网络加速器 | |
WO2019113021A1 (en) | Tensor manipulation within a reconfigurable fabric using pointers | |
WO2019084254A1 (en) | TENSEUR HANDLING IN A NEURONAL NETWORK | |
US11836518B2 (en) | Processor graph execution using interrupt conservation | |
US20230221931A1 (en) | Autonomous compute element operation using buffers | |
US20230273818A1 (en) | Highly parallel processing architecture with out-of-order resolution | |
WO2023172660A1 (en) | Highly parallel processing architecture with out-of-order resolution | |
KR20230092635A (ko) | 양방향 인터페이스 조합기를 지원하는 하드웨어 기술 언어 | |
WO2023183279A1 (en) | Autonomous compute element operation using buffers | |
JP2003330711A (ja) | コントローラおよびプログラム設定方法 |
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 |