CN112005214B - 具有包括多端口存储器的向量寄存器文件的矩阵向量乘法器 - Google Patents

具有包括多端口存储器的向量寄存器文件的矩阵向量乘法器 Download PDF

Info

Publication number
CN112005214B
CN112005214B CN201980026843.XA CN201980026843A CN112005214B CN 112005214 B CN112005214 B CN 112005214B CN 201980026843 A CN201980026843 A CN 201980026843A CN 112005214 B CN112005214 B CN 112005214B
Authority
CN
China
Prior art keywords
data elements
vector
interface circuits
port memory
processor
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
CN201980026843.XA
Other languages
English (en)
Other versions
CN112005214A (zh
Inventor
J·弗沃斯
K·奥恰洛夫
E·S·钟
T·M·马森吉尔
刘明罡
G·L·韦兹
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 CN112005214A publication Critical patent/CN112005214A/zh
Application granted granted Critical
Publication of CN112005214B publication Critical patent/CN112005214B/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/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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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/3001Arithmetic instructions
    • 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
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1078Data input circuits, e.g. write amplifiers, data input buffers, data input registers, data input level conversion circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/04Arrangements for selecting an address in a digital store using a sequential addressing device, e.g. shift register, counter
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/12Group selection circuits, e.g. for memory block selection, chip selection, array selection
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/16Multiple access memory array, e.g. addressing one storage element via at least two independent addressing line groups
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/18Address timing or clocking circuits; Address control signal generation or management, e.g. for row address strobe [RAS] or column address strobe [CAS] signals

Abstract

提供了神经网络处理器和相关方法,神经网络处理器包括向量寄存器文件(VRF),向量寄存器文件(VRF)具有多端口存储器。处理器可以包括瓦片,以对数据元素的N乘N矩阵和数据元素的N乘1向量进行处理。VRF可以响应于写入指令,将N个数据元素存储在多端口存储器中,并且在P个时钟周期中的每个时钟周期期间,向多端口存储器的P个输入接口电路中的每个输入接口电路提供N个数据元素,输入接口电路包括输入通道,输入通道被配置为并行承载L个数据元素。在P个时钟周期中的每个时钟周期期间,多端口存储器可以被配置为经由P个输入接口电路中所选择的至少一个输入接口电路来接收N个数据元素。VRF可以包括输出接口电路,输出接口电路用于响应于读取指令而提供N个数据元素。

Description

具有包括多端口存储器的向量寄存器文件的矩阵向量乘法器
背景技术
神经网络技术被用于执行复杂的任务,诸如,阅读理解、语言翻译、图像识别或语音识别。机器学习服务(诸如,基于递归神经网络(RNN)、卷积神经网络(CNN)、长短期记忆(LSTM)神经网络或门控递归单元(GRU)的那些机器学习服务)已被部署来执行这样的复杂任务。虽然这些类型的神经网络已被部署,但是仍需要不断改进用于执行这些复杂任务的基础设施和对应指令。
发明内容
在一个示例中,本公开涉及处理器,处理器包括向量寄存器文件,向量寄存器文件包括多端口存储器(例如,双端口存储器)。处理器还可以包括多个瓦片,多个瓦片被配置为对数据元素的N乘N矩阵和数据元素的N乘1向量进行处理,其中N是等于或大于8的整数,并且其中多个瓦片中的每个瓦片被配置为对N个数据元素进行处理。向量寄存器文件可以被配置为响应于写入指令,在单个时钟周期期间,将N个数据元素存储在多端口存储器中,并且在P个时钟周期中的每个时钟周期期间,向多端口存储器的P个输入接口电路中的每个输入接口电路提供N个数据元素,其中P是等于N除以L的整数,其中L是等于或大于2的整数,并且其中P个输入接口电路中的每个输入接口电路包括输入通道,输入通道被配置为并行承载L个数据元素,并且其中在P个时钟周期中的每个时钟周期期间,多端口存储器被配置为经由P个输入接口电路中所选择的至少一个输入接口电路来接收N个数据元素。
向量寄存器文件还可以被配置为响应于读取指令,在单个时钟周期期间,从多端口存储器取回N个数据元素,并且在Q个时钟周期中的每个时钟周期期间,从多端口存储器的Q个输出接口电路中的每个输出接口电路提供L个数据元素,其中Q是等于N除以L的整数,并且其中Q个输出接口电路中的每个输出接口电路包括输出通道,输出通道被配置为并行承载L个数据元素,并且其中在Q个时钟周期中的每个时钟周期期间,多端口存储器被配置为向Q个输出接口电路中所选择的至少一个输出接口电路提供N个数据元素。
在另一示例中,本公开涉及系统中的方法,系统包括多个瓦片和向量寄存器文件,向量寄存器文件包括双端口存储器,其中多个瓦片中的每个瓦片被配置为对数据元素的N乘N矩阵和数据元素的N乘1向量进行处理,其中N是等于或大于8的整数,并且其中多个瓦片中的每个瓦片被配置为对N个数据元素进行处理。
方法可以包括:响应于写入指令,在单个时钟周期期间,将N个数据元素存储在双端口存储器中,并且在P个时钟周期中的每个时钟周期期间,向双端口存储器的P个输入接口电路中的每个输入接口电路提供N个数据元素,其中P是等于N除以L的整数,其中L是等于或大于2的整数,并且其中P个输入接口电路中的每个输入接口电路包括输入通道,输入通道被配置为并行承载L个数据元素,并且其中在P个时钟周期中的每个时钟周期期间,双端口存储器被配置为经由P个输入接口电路中所选择的一个输入接口电路来接收N个数据元素。
方法还可以包括:响应于读取指令,在单个时钟周期期间,从双端口存储器取回N个数据元素;以及在Q个时钟周期中的每个时钟周期期间,从双端口存储器的Q个输出接口电路中的每个输出接口电路提供L个数据元素,其中Q是等于N除以L的整数,并且其中Q个输出接口电路中的每个输出接口电路包括输出通道,输出通道被配置为并行承载L个数据元素,并且其中在Q个时钟周期中的每个时钟周期期间,双端口存储器被配置为向Q个输出接口电路中所选择的一个输出接口电路提供N个数据元素。
在又一示例中,本公开涉及处理器,处理器包括向量寄存器文件,向量寄存器文件包括双端口存储器,双端口存储器包括单个读取端口和单个写入端口。处理器还可以包括多个瓦片,多个瓦片被配置为对N乘N矩阵和N乘1向量进行处理,其中N是等于或大于8的整数,并且其中多个瓦片中的每个瓦片被配置为对N个数据元素进行处理。
向量寄存器文件可以被配置为响应于写入指令,在单个时钟周期期间,经由单个写入端口,将N个数据元素存储在双端口存储器中,并且在P个时钟周期中的每个时钟周期期间,从双端口存储器的P个输入接口电路中的每个输入接口电路提供N个数据元素,其中P是等于N除以L的整数,其中L是等于或大于2的整数,并且其中P个输入接口电路中的每个输入接口电路包括输入通道,输入通道被配置为并行地承载L个数据元素,并且其中在P个时钟周期中的每个时钟周期期间,双端口存储器被配置为经由P个输入接口电路中所选择的一个输入接口电路来接收N个数据元素。
向量寄存器文件还可以被配置为响应于读取指令,在单个时钟周期期间,经由单个读取端口而从双端口存储器取回N个数据元素,并且在Q个时钟周期中的每个时钟周期期间,从双端口存储器的Q个输出接口电路中的每个输出接口电路提供L个数据元素,其中Q是等于N除以L的整数,并且其中Q个输出接口电路中的每个输出接口电路包括输出通道,输出通道被配置为并行承载L个数据元素,并且其中在Q个时钟周期中的每个时钟周期期间,双端口存储器被配置为向Q个输出接口电路中所选择的一个输出接口电路提供N个数据元素。
本发明内容被提供来以简化形式介绍一些概念,这些概念将在下面的具体实施方式中进一步描述。本发明内容既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
附图说明
本公开通过示例的方式被图示并且不受附图的限制,在附图中,相同的附图标记指示相同的元素。图中的元素为了简单和清楚起见而被图示并且不一定按比例绘制。
图1是根据一个示例的处理器的框图;
图2是根据一个示例的矩阵-向量乘法器单元的框图;
图3是根据一个示例的向量寄存器文件的框图;
图4是根据另一示例的向量寄存器文件的框图;以及
图5示出了根据一个示例的用于使用图1的处理器和向量寄存器文件来处理向量数据元素的方法的流程图。
具体实施方式
本示例中公开的示例涉及处理器,处理器包括矩阵向量乘法器,矩阵向量乘法器具有向量寄存器文件。向量寄存器文件可以被用于从/向矩阵向量乘法器读取/写入向量数据。某些示例涉及使用多端口存储器(例如,双端口存储器),多端口存储器具有输入接口电路和输出接口电路,输入接口电路和输出接口电路允许可能具有单个写入端口和单个读取端口的双端口存储器被用于以快速有效方式来执行神经网络计算。
卷积神经网络(CNN)和递归神经网络(RNN)均是主流机器学习中广泛使用的计算内核。CNN和RNN可以通过矩阵-向量乘法被有效地表示,但是CNN和RNN中的每一种固有的并行性和数据结构差异显著。因此,要产生有效地计算CNN和RNN两者的单个万亿级规模计算机架构具有挑战。当在设计中提出实时时延要求时,该问题变得更加复杂。结果,先前的解决方案专门针对CNN或RNN,而没有优先考虑两者较强的性能。本公开中所公开的某些示例涉及使用为CNN和RNN两者提供有效计算的系统、方法和组件。
作为一个示例,本公开描述了处理器,处理器利用CNN中单独输出激活之间的并行性,以在单独CNN评估内执行有限形式的矩阵-矩阵乘法。该并行性以准独立矩阵-向量乘法瓦片(tile)引擎阵列的形式被映射到电路上,准独立矩阵-向量乘法瓦片引擎接收相同的矩阵数据但不同的向量数据。该方法允许针对CNN输入以批次=1的高利用率,这进而以低时延来提供高吞吐量。启用该方法的方式之一是使用多端口向量寄存器文件(VRF),多端口向量寄存器文件允许对共享存储器空间进行许多同时的向量化读取和写入。该方法也由CNN感知指令集架构(ISA)来启用,CNN感知指令集架构(ISA)以可以用于表示RNN的同一汇编级代码来提供CNN的信息密集表达。
本公开中描述的处理器可以使用现场可编程门阵列(FPGA)、专用集成电路(ASIC)、可擦除和/或复杂可编程逻辑器件(PLD)、可编程阵列逻辑(PAL)器件和通用阵列逻辑(GAL)器件中的部分或组合来实现。图像文件可以被用于对处理器(诸如,FPGA)进行配置或重新配置。图像文件或类似的文件或程序可以经由网络链路或本地链路(例如,PCIe)从主机CPU被传递。图像文件中包括的信息可以被用于对处理器的硬件块(例如,逻辑块和FPGA的可重配置互连)进行编程来实现期望的功能性。期望的功能性可以被实现来支持可以经由计算、联网和存储资源的组合(例如,经由数据中心或用于传递服务的其他基础设施)提供的任何服务。
在一个示例中,处理器(例如,FPGA)或此类处理器的组可以经由低时延网络彼此耦合。利用数百至数千个这样的处理器(例如,FPGA)的融合平台可以有利地提供:(1)通过利用数十万个节点之间的并行性,显著减少训练时间;(2)启用新的训练场景(例如,现场数据的在线学习);以及(3)前所未有规模的训练模型,同时在跨越数十万台服务器的超大规模数据中心中利用灵活且可替代的同类FPGA资源。在一个示例中,这样的优点可以通过利用非常规数据表示来获得,非常规数据表示可以利用处理器(例如,FPGA)的架构。
所描述的各方面也可以在云计算环境中实现。云计算可以指代用于启用对可配置计算资源的共享池的按需网络访问的模型。例如,云计算可以在市场中采用,以提供对可配置计算资源的共享池的无处不在且方便的按需访问。可配置计算资源的共享池可以经由虚拟化来快速供应,并以较少的管理工作量或服务提供方交互而被释放,然后进行相应的扩展。云计算模型可以由各种特性组成,诸如例如,按需自助服务、广泛的网络访问、资源池化、快速弹性、测量的服务等。云计算模型可以被用于公开各种服务模型,诸如例如,硬件即服务(“HaaS”)、软件即服务(“SaaS”)、平台即服务(“PaaS”)和基础设施即服务(“IaaS”)。云计算模型还可以使用诸如,私有云、社区云、公共云、混合云等不同的部署模型来部署。
机器学习服务(诸如,基于递归神经网络(RNN)、卷积神经网络(CNN)、长短期记忆(LSTM)神经网络或门控递归单元(GRU)的机器学习服务)可以使用本公开中描述的处理器来实现。在一个示例中,与服务相关的内容或其他信息(诸如,词语、语句、图像、视频或其他此类内容/信息)可以被转化为向量表示。向量表示可以对应于诸如RNN、CNN、LSTM或GRU的技术。深度学习模型可以在服务初始化之前进行离线训练,然后可以使用本公开中描述的系统和处理器来进行部署。
在一个示例中,神经网络模型可以包括多个层,并且每个层可以被编码为权重的矩阵或向量,权重以已经由神经网络的离线训练获得的系数或常数的形式表示。节点中的可编程硬件逻辑块可以对矩阵或向量进行处理,来执行各种操作,包括针对输入向量的相乘、相加和其他运算,输入向量表示与服务相关的编码信息。在一个示例中,权重的矩阵或向量可以通过使用诸如图分割的技术而被分割并跨多个节点固定(pinned)。作为该过程的一部分,大型神经网络可以被转化为中间表示(例如,图),然后该中间表示可以被中分(carved)为较小的表示(例如,子图),并且权重矩阵中与每个子图相对应的每个权重矩阵可以被固定到节点的片上存储器。在一个示例中,模型可以被转化为固定大小的矩阵和向量。这样,节点的资源可以对固定大小的矩阵和向量并行操作。
以LSTM为例,LSTM网络可以包括重复的RNN层或其他类型的层的序列。LSTM网络的每一层均可以在给定的时间步下消耗输入(例如,来自先前时间步的层状态),并且可以产生新的输出或状态的集合。在使用LSTM的情况下,单个内容语块(chunk)可以被编码为单个向量或多个向量。作为一个示例,词语或词语组合(例如,短语、语句或段落)可以被编码为单个向量。每个语块可以被编码为LSTM网络的单独层(例如,特定时间步)。LSTM层可以使用等式集合来描述,诸如以下等式:
it=σ(Wxixt+Whiht-1+Wcict-1+bi
ft=σ(Wxfxt+Whfht-1+Wcfct-1+bf)
ct=ftct-1ittanh(Wxcxt+Whcht-1+bc)
ot=σ(Wxoxt+Whoht-1+Wcoct+bo)
ht=ottanh(ct)
在该示例中,在每个LSTM层内部,输入和隐藏状态可以使用向量运算(例如,点积、内积或向量加法)和非线性函数(例如,sigmoids、双曲线和切线)的组合来进行处理。在某些情况下,计算量最大的运算可能来自点积,点积可以使用密集矩阵-向量和矩阵-矩阵乘法例程来实现。在一个示例中,向量运算和非线性函数的处理可以并行执行。
在一个示例中,单独处理器可以彼此直接发送包括分组的消息,因此,这可以甚至允许在不引起不可接受的时延的情况下,跨多个处理器来对单个神经网络进行分割。为了进行通信,处理器可以使用轻量级协议,包括例如RDMA。并行化也可以通过跨多个处理器划分神经权重,而在神经网络层内被执行。作为一个示例,单个CNN或RNN模型(例如,包括LSTM权重矩阵)可以使用处理器来进行分割和处理。
图1是根据一个示例的处理器100的框图。每个处理器100可以包括:输入消息处理器(IMP)104,其用于从其他处理器接收消息;以及输出消息处理器(OMP)106,其用于对到其他处理器或组件的传出消息进行处理。这样的消息可以经由网络102被接收和传输。每个处理器100还可以包括矩阵向量乘法器(MVM)110、两个或更多个多功能单元(MFU)(例如,MFU[0]140和MFU[1]160)。每个处理器100还可以包括矩阵存储器管理器170、向量存储器管理器180、向量DRAM 182和矩阵DRAM 184。在该示例中,处理器可以接受片外消息,片外消息包含诸如控制和标量数据以及有效负载数据(例如,向量、矩阵或其他张量数据结构)的辅助信息。在该示例中,传入消息可以由轻量级输入消息处理器(IMP)104处理,轻量级输入消息处理器将向量发送到向量存储器管理器180。IMP104可以将矩阵发送到矩阵存储器管理器170。
继续参考图1,每个矩阵可以具有N乘N的大小,并且每个向量可以具有N乘1的大小。在该示例中,与处理器100相对应的所有指令可以对本机大小的数据进行操作。与处理器100所处理的应用相对应的逻辑向量和矩阵通常可以大于本机大小;在这些情况下,向量和矩阵被分解为本机大小的瓦片。在一个示例中,对于矩阵向量乘法,矩阵数据和向量数据可以以块浮点(BFP)格式表示。在该示例中,BFP格式数据的块大小可以等于本机维度。因此,每个本机N乘1向量可以具有共享指数,并且N乘N矩阵的每一行可以具有共享指数。共享指数可以是5位。向量数据和矩阵数据中的每一个可以具有二进制补码尾数部分,并且向量数据和矩阵数据的尾数大小可以不同。
MVM 110可以包括向量寄存器文件(VRF)112、矩阵寄存器文件(MRF)120和瓦片引擎(例如,瓦片引擎114、116和118)。瓦片引擎可以从VRF 112接收输入矩阵和输入向量数据。根据需要,MVM 110还可以包括格式转换器,包括块浮点(BFP)到浮点(FP)转换器。在一个示例中,两种内部BFP格式可以由MVM 110使用来表示其输入和输出:BFP short(用于向量和矩阵存储)和BFP long(用于累加)。在MVM 110的一个示例中,BFP short可以使用具有共享的5位指数的q1.15个定点值,而BFP long可以使用具有共享的5位指数的q34.40个定点值。在该示例中,矩阵-向量乘法可能产生BFP long,BFP long可以被转换回浮点格式作为最终输出级。因此,图1中所示的示例MVM 110可以在输出级处包括BFP至FP16转换器122、124和126。瓦片引擎114、116和118可以并行地向如图1的示例中所示的相应转换器提供输出。在图2中提供了关于MVM 110的附加细节,并且在图3和图4中提供了VRF 112的附加细节。
矩阵数据可以使用数量为M个信道而在矩阵DRAM 184和矩阵存储器管理器170之间进行通信。向量存储器管理器可以通过数量为C个信道来移动向量数据。
继续参考图1,每个MFU(例如,MFU[0]140和MFU[1]160)可以包括交叉开关(例如,被标记为xbar的交叉开关)。MFU[0]140可以支持向量运算,诸如,向量-向量相乘和加法、Sigmoid函数、TanH函数、softmax运算、整流线性单元(ReLU)运算和/或激活块运算。因此,如图1所示,MFU[0]140可以包括交叉开关(例如,xbar 146、148和150),交叉开关可以借助管线运算序列而从其输入总线流式传送向量。因此,向量可以经由被标记为MulVrf 142的寄存器文件或被标记为AsVrf[0]144的另一寄存器文件而被接收,并且这些向量可以进行相乘运算、加法运算或某种其他运算中的任一个。MFU[0]140可以包括用于执行加法的若干硬件块(例如,153、157和161)。MFU[0]140还可以包括用于执行乘法的若干硬件块(例如,152、156和159)。MFU[0]140还可以包括用于执行激活的若干硬件块(例如,151、154和158)。
仍参考图1,MFU[1]160可以包括交叉开关(例如,xbar 162、163和164),交叉开关可以允许MFU[1]160从MFU[0]140接收输出,并且对这些输出和经由ADD/SUB VRF 168接收的任何附加输入执行附加操作。MFU[1]160可以包括用于执行加法的若干硬件块(例如,169、171和172)。MFU[1]160还可以包括用于执行激活的若干硬件块。经由C个信道接收的、来自MFU[1]160的输出可以经由多路复用电路174被耦合到向量存储器管理器180。尽管图1示出了处理器100的某个数量的组件以某种方式布置,但是可以存在被不同地布置的、更多或更少数量的组件。
处理器100可以被用于启用指令的发布,指令的发布可以使用少量指令来触发数百万个操作。作为一个示例,下面的表1示出了与完全参数化的LSTM相对应的指令:
表1
尽管表1示出了具有某种格式的某个数量的指令,但是处理器100可以执行具有不同格式的、更多或更少的指令来实现相同目标。
以下表2示出了如何计算1X 1卷积作为CNN评估的一部分。
表2
如上表所示,用于计算的指令链上的迭代次数可以被指定。接下来,根据需要,每个指令链的本机维度可以通过列(column)缩放因子来进行缩放。并且在从向量寄存器文件中读取向量数据之后,向量数据可以与从矩阵寄存器文件取回的权重相乘。在执行CNN评估所需的附加操作之后,可以提供输出。作为示例,逐点整流线性单元(ReLU)操作可以针对向量数据的每个元素被执行。
以下表3示出了如何计算N X N卷积作为CNN评估的一部分。以下与1X 1卷积相似的指令不再赘述。Set2dWindows指令可以用于设置总窗口大小,然后SetIterations指令可以用于跨输入体积来滑动该窗口。*_inc指令(例如,v_rd_inc和v_add_inc)可以被用于基于步幅(stride)来递增指令的地址。作为示例,步幅为2可以导致跳过向量寄存器文件中的所有其他向量,向量寄存器文件被用于存储用于进行运算(诸如,加法)的向量数据。
表3
图2是根据一个示例的矩阵-向量乘法器(MVM)200的框图。在该示例中,MVM 200可以被用于实现图1的MVM 110。MVM 200可以包括向量寄存器文件(VRF)210、矩阵寄存器文件(MRF)220和MVM处理器230。VRF 210还可以包括地址译码器212和危害(hazard)检测器214。VRF210可以接收命令和向量数据(诸如,张量)两者。MRF 220可以包括地址译码器222和危害检测器224。MRF 220可以接收命令和矩阵数据两者。MVM处理器230可以包括瓦片引擎232、234和236。MVM处理器230还可以包括缓冲器(例如,张量缓冲器242、244和246),缓冲器用于接收和提供张量。MVM处理器230还可以包括MVM控制器250。在该示例中,MVM 200可以将一系列瓦片引擎实例化,每个瓦片引擎可以被设计为加速本机大小的MVM。在该示例中,每个瓦片引擎由一系列的点积单元(DPU)组成,使得每个点积单元可以负责与矩阵瓦片中的一个本机行相对应的点积计算。在一个示例中,当处理器100使用FPGA来实现时,一组较小的BRAM和DSP可以被配置为创建瓦片引擎。作为示例,每个瓦片引擎可以包括块随机存取存储器(BRAM)和处理逻辑块(例如,数字信号处理器(DSP))。处理逻辑块可以被用于将输入向量与权重行相乘。处理逻辑块的输出可以使用加法器来添加。因此,在该示例中,每个瓦片可以执行逐点的点积运算。点积单元可以由并行乘法器的通道组成,并行乘法器的通道可以馈入累加树。这些通道可以在矩阵瓦片行的列内提供并行性。以这种方式,MVM 200可以利用至少四个维度的并行性:MVM间、MVM平铺(tiling)、跨瓦片的行以及在行的列内。在该示例中,MVM的总吞吐量可以表示为:每个周期的FLOP=2*瓦片单元数量*DPU数量*通道数量(FLOPs per cycle=2*#tile units*#DPUs*#lanes)。
MRF 220可以包括若干矩阵寄存器文件,矩阵寄存器文件可以被配置为向每个瓦片内的点积单元提供矩阵数据或元素。每个乘法器可以每个周期从VRF 210接收一个向量元素,并且每个周期从矩阵寄存器文件之一接收一个矩阵元素。矩阵元素可以通过与该乘法器相邻放置的矩阵寄存器文件的专用端口来传递。MRF 220可以被组织如下:所存储的矩阵可以被划分为本机大小的瓦片,并且每个瓦片可以仅被存储在单个瓦片引擎中。在给定瓦片引擎中所存储的矩阵可以被视为MRF库(bank)。每个点积单元可以与MRF的子库相关联,子库在该MRF库中保持每个矩阵瓦片的一行。行可以被静态指派给点积单元,使得第一点积单元包含MRF库中每个矩阵瓦片的第一行。最后,该行的元素可以在SRAM中交错,使得SRAM读取端口可以仅通过导线被直接连接到乘法器通道。由于用于写入MRF 220的矩阵数据可能来自片外存储器(诸如,DRAM),因此对矩阵寄存器文件的写入可以用不同方式来处理。尽管图2示出了MVM 200的某个数量的组件以某种方式布置,但是可以存在不同地布置的、更多或更少数量的组件。
图3是根据一个示例的向量寄存器文件(VRF)300的框图。VRF 300可以被用于实现图1的VRF 112的至少一部分。VRF 300也可以被用于实现图2的VRF 210的至少一部分。在该示例中,到VRF 300的读取/写入数据接口可以由ITensorRead和ITensorWrite接口集合组成,每个接口可以在每个周期读取/写入数据元素的LANES。每个接口可以遵循张量协议,并且可以独立地被背压。VRF 300读取/写入接口可以包括输入缓冲器302、304和306以及输出缓冲器352、354和356。响应于写入操作,输入缓冲器可以被用于接收张量(例如,与神经网络的层相对应的输入向量数据)。在该示例中,VRF 300可以以块浮点(BFP)格式来处理向量数据。指数(例如,共享指数)可以被存储在指数寄存器(例如,EXP REG 314、316和318)中,并且尾数可以被存储在移位寄存器(例如,SHIFT REG 308、310和312)中。指数寄存器的输出可以被耦合到复用器322,并且移位寄存器的输出可以被耦合到复用器320,这些输出可以被写入存储器(例如,块RAM(BRAM))。因此,指数可以被写入EXP BRAM 352,并且尾数可以被写入MANTISAA BRAM 330。响应于读取,来自存储器的数据可以被输出到输出接口。因此,指数可以被输出到指数寄存器(例如,EXP REG 344、346和348),并且尾数可以被输出到移位寄存器(例如,SHIFT REG 338、340和342)。从这些寄存器,BFP向量数据可以被提供给输出缓冲器(例如,缓冲器352、354和356)。控制逻辑370可以控制向量数据通过VRF 300的各个组件(包括例如复用器320和322)的移动。控制逻辑370可以包括地址译码(例如,ADDRESSDECODE 372)、命令译码(例如,经由COMMAND DECODE 374)和读取/写入控制(例如,经由READ FSM 378和WRITE FSM 376)。因此,在经由INfuCmd总线接收到命令和地址之后,命令和地址可以被译码,以确定地址访问模式和端口选择。以下表4示出了可以由控制逻辑370进行译码的命令字段或参数。
表4
在一个示例中,与处理器100相关联的控制逻辑可以对表2中指定的参数进行译码,以确定本机向量地址和要从中读取或写入的接口。连接到VRF 300的模块可以被要求以相同的方式对命令和这些参数进行译码,使得这些模块可以在适当的接口处以适当的顺序将正确的数据写入VRF 300或从VRF 300读取正确的数据。
在一个示例中,这可以使用分层译码和分派(dispatch)架构来实现。因此,在处理器100基于FPGA来实现的情况下,控制处理器可以使用与自定义代码配对的现成Nios II/f处理器来实现。与控制处理器相关联的顶级调度器可以接收可以按链进行分组的指令流。在对指令进行译码之后,顶级调度器可以将分布式控制信号分派到第二级调度器集合和另一第二级译码器集合。这些第二级调度器和译码器可以将附加的分布式控制信号分派到最低级译码器。在使用Nios处理器的示例实现中,Nios处理器可以将N个指令的T次迭代流式传送到顶级调度器中。接下来,顶级调度器可以将指令的MVM特定部分分派给第二级调度器,第二级调度器可以沿目标矩阵的N行和N列扩展运算。这些MVM调度可以被映射到E个矩阵-向量瓦片引擎,并且操作可以被分派到E个译码器的集合,每个译码器针对瓦片引擎及其相关联的向量寄存器文件和累加单元。E个译码器的集合可以生成扇出到数据平面中的控制信号,其中每个瓦片引擎分派器扇出到数百个点积单元,点积单元可以从向量寄存器文件中读取向量数据并将向量数据写回到向量寄存器文件。
就读取/写入操作而言,在该示例中,VRF 300可以在内部使用数据宽度为NATIVE_DIM*BFP_WIDTH+EXP_WIDTH的多端口存储器(例如,双端口BRAM)。在一个示例中,双端口存储器(例如,BRAM)可以旋转,以在每个周期在不同的接口电路处提供数据。因此,在该示例中,在稳定状态下,VRF 300可以在没有端口冲突的情况下,实现完整的读取/写入带宽。尽管图3示出了以某种方式布置的VRF 300的某个数量的组件,但是可以存在不同地布置的、更多或更少数量的组件。作为示例,尽管双端口存储器被描述为BRAM,但是也可以在其他类型的处理器中使用其他类型的存储器。作为示例,也可以在GPU、CPU或其他类型的处理器中使用SRAM或其他类型的双端口存储器。另外,尽管图3描述了双端口存储器(一个端口用于读取而一个端口用于写入),但是也可以使用具有附加端口的存储器;例如,可以使用具有两个读取端口和两个写入端口的存储器。
图4是根据另一示例的向量寄存器文件400的框图。该示例已被简化来解释包括双端口存储器430的向量寄存器文件(例如,图3的VRF 300)的操作。该示例假定向量或矩阵的本机维度N为128个字。因此,作为神经网络处理的一部分,矩阵向量乘法器可以将N X N矩阵与N X 1向量相乘。该示例还假定每个元素是字,其宽度为W位。该示例进一步假定每个点积单元均可以处理向量和矩阵数据的L个字(或L个元素),这将产生部分点积。MVM可以包括加减树来将部分点积累加。加减输出然后可以被提供给累加器,累加器将所有部分和(partial sum)求和来提供矩阵的整个行的最终点积。VRF 400可以经由八个接口来接收向量数据,其中每个接口具有L个通道。VRF 400写入接口可以具有输入接口电路,输入接口电路包括例如输入接口电路401、输入接口电路403和输入接口电路405。VRF 400读取接口可以具有输出接口电路,输出接口电路包括例如输出接口电路451、输出接口电路453和输出接口电路455。每个输入接口电路可以包括输入缓冲器(例如,输入缓冲器402、404和406),并且每个输出接口电路可以包括输出缓冲器(例如,输出缓冲器462、464和466)。输入缓冲器还可以被耦合到附加接口元件(例如,接口元件412、414和416)。输出缓冲器还可以被耦合到附加输出接口元件(例如,输出接口元件452、454和456)。写入接口还可以包括复用器420,复用器420可以被耦合以从每个输入接口电路接收输出。复用器420的输出可以被耦合到双端口存储器430的读取端口。读取接口还可以包括解复用器440,解复用器440可以被耦合,以从双端口存储器430接收输出。来自解复用器的输出可以被耦合到输出接口电路。
响应于写入操作,输入接口电路可以被用于接收张量,并且响应于读取操作,输出接口电路可以提供向量数据。在该示例中,响应于写入指令,在单个时钟周期期间,N个数据元素可以经由宽接口(在图4中标记为V)被存储在双端口存储器中。在P(N/L)个时钟周期中的每个时钟周期期间,VRF 400可以经由每个输入接口来接收张量中的一个张量(例如,一个N乘1向量)。在图4所示的示例中,P=8,N=128,且L=16。假定每个数据元素是具有W位的字,则每个输入接口电路在每八个时钟周期可以接收N乘以W位(V位)。在该示例中,N为128且假定字大小为4位,VRF 400在每个时钟周期可以存储512位。在每个时钟周期期间,作为输入接口电路的一部分的L个(例如,在这种情况下为16个)输入通道可以并行承载L个数据元素(例如,L个字)。作为输入接口电路的一部分的移位寄存器(例如,移位寄存器412、414和416)可以在每个时钟周期向复用器420提供512位。
类似地,响应于读取指令,VRF 400在每八个时钟周期可以经由V位宽的读取端口将V位(512位)提供给经由复用器440的输出接口电路中的至少一个输出接口电路。移位寄存器(例如,移位寄存器452、454和456)可以在每个时钟周期向相应输出缓冲器提供L个数据元素。读取和写入指令可以被调度为同时执行。因此,通过从接口到接口“旋转”双端口存储器430,在每个时钟周期,具有N的本机维度的整个向量可以从VRF 400读取和写入。这可以有利地允许处理器100基于FPGA或具有数量有限的SRAM的另一类型的硬件节点,诸如,FPGA中数量有限的BRAM。这可能是有利的,因为矩阵向量乘法可以被设计为按比例扩展至FPGA的大部分资源,而不会浪费FPGA的资源来提供专用多端口BRAM。控制逻辑425可以提供控制信号,诸如,输入控制(INPUT CONTROL)和输出(OUTPUT)控制。关于图3和其他描述来提供关于VRF 400的控制方面的更多细节。尽管图4描述了VRF 400使用N×N大小的2D矩阵和N长度的1D向量的操作,但是VRF 400也可以使用其他大小来操作。向量大小的选择可以取决于目标模型集——选择太大的向量可能会导致填充效果欠佳,而选择太小的向量可能会增加处理器的控制开销。另外,尽管图4描述了VRF 400使用双端口存储器的操作,但是存储器可以具有附加的读取/写入端口。
图5示出了根据一个示例的用于使用处理器和向量寄存器文件来处理向量数据元素的方法的流程图。在该示例中,步骤510可以包括对向量寄存器文件(VRF)命令进行译码,以确定地址访问模式和端口选择。命令译码374可以执行该步骤。如前所述,在一个示例中,这可以使用分层译码和分派架构来实现。因此,在处理器100基于FPGA被实现的情况下,控制处理器可以使用与自定义代码配对的现成的Nios II/f处理器来实现。与控制处理器相关联的顶级调度器可以接收可以按链进行分组的指令流。在将指令译码之后,顶级调度器可以将分布式控制信号分派到第二级调度器的集合和另一第二级译码器的集合。这些第二级调度器和译码器可以将附加的分布式控制信号分派到最低级译码器。在使用Nios处理器的示例实现中,Nios处理器可以将N个指令的T次迭代流式传送到顶级调度器中。接下来,顶级调度器可以将指令的MVM特定部分分派到第二级调度器,第二级调度器可以沿目标矩阵的N行和N列来扩展运算。这些MVM调度可以被映射到E个矩阵-向量瓦片引擎,并且运算可以被分派到E个译码器的集合,每个译码器针对瓦片引擎及其相关联的向量寄存器文件和累加单元。E个译码器的集合可以生成扇出到数据平面中的控制信号,其中每个瓦片引擎分派器扇出到数百个点积单元,点积单元可以从向量寄存器文件中读取向量数据并将向量数据写回到向量寄存器文件。
另外,因为可能具有写入后读取(RAW)或读取后写入(WAR)危害,所以可以使用向量寄存器文件危害检测。因此,在一个示例中,危害检测器(例如,图2的214)可以跟踪由读取或写入指令访问的地址,并且当读取指令到达并且正在进行写入时,危害检测器可以检查由传入的读取指令访问的地址是否与当前写入指令访问的地址重叠。在一个示例中,危害检测器可以通过维持寄存器对来完成,以跟踪由这些指令访问的某个数量的地址。
步骤520可以包括将至少一个经译码的VRF地址放置在队列中。在该示例中,地址译码372可以执行该步骤。
步骤530可以包括在本机维度为N的向量数据到达之后,使队列出队。与VRF 370相关联的控制逻辑370可以执行该步骤。
步骤540可以包括:响应于写入指令,在单个时钟周期期间,将N个数据元素存储在双端口存储器中,并且在P个时钟周期中的每个时钟周期期间,向双端口存储器的P个输入接口电路中的每个输入接口电路提供N个数据元素,其中P是等于N除以L的整数,并且其中P个输入接口电路中的每个输入接口电路包括输入通道,输入通道被配置为并行承载L个数据元素,并且其中在P个时钟周期中的每个时钟周期期间,双端口存储器被配置为经由P个输入接口电路中所选择的一个输入接口电路来接收N个数据元素。在该示例中,有限状态机(例如,WRITE FSM 376)可以执行该步骤。关于图4提供了关于该步骤的附加细节。
步骤550可以包括:响应于读取指令,在单个时钟周期期间,从双端口存储器取回N个数据元素,并且在P个时钟周期中的每个时钟周期期间,从双端口存储器的P个输出接口电路中的每个输出接口电路提供L个数据元素,其中P个输出接口电路中的每个输出接口电路包括输出通道,输出通道被配置为并行承载L个数据元素,并且其中在P个时钟周期中的每个时钟周期期间,双端口存储器被配置为向P个输出接口电路中所选择的一个输入接口电路提供N个数据元素。在该示例中,有限状态机(例如,READ FSM 378)可以执行该步骤。关于图4提供了关于该步骤的附加细节。尽管图5描述了以某个顺序执行的某个数量的步骤,但是可以以不同顺序来执行附加的或更少的步骤。另外,尽管图5描述了关于双端口存储器的方法,但是可以使用具有附加端口的存储器。作为示例,可以使用具有两个读取端口和两个写入端口的存储器。
总之,本公开涉及包括向量寄存器文件的处理器,向量寄存器文件包括多端口存储器(例如,双端口存储器)。处理器还可以包括多个瓦片,多个瓦片被配置为对数据元素的N乘N矩阵和数据元素的N乘1向量进行处理,其中N是等于或大于8的整数,并且其中多个瓦片中的每个瓦片被配置为对N个数据元素进行处理。向量寄存器文件可以被配置为响应于写入指令,在单个时钟周期期间,将N个数据元素存储在多端口存储器中,并且在P个时钟周期中的每个时钟周期期间,向多端口存储器的P个输入接口电路中的每个输入接口电路提供N个数据元素,其中P是等于N除以L的整数,其中L是等于或大于2的整数,并且其中P个输入接口电路中的每个输入接口电路包括输入通道,输入通道被配置为并行承载L个数据元素,并且其中在P个时钟周期中的每个时钟周期期间,多端口存储器被配置为经由P个输入接口电路中所选择的至少一个输入接口电路来接收N个数据元素。
向量寄存器文件还可以被配置为响应于读取指令,在单个时钟周期期间,从多端口存储器取回N个数据元素,并且在Q个时钟周期中的每个时钟周期期间,从多端口存储器的Q个输出接口电路中的每个输出接口电路提供L个数据元素,其中Q是等于N除以L的整数,并且其中Q个输出接口电路中的每个输出接口电路包括输出通道,输出通道被配置为并行承载L个数据元素,并且其中在Q个时钟周期中的每个时钟周期期间,多端口存储器被配置为向Q个输出接口电路中所选择的至少一个输出接口电路提供N个数据元素。
在一个示例中,多端口存储器可以被配置为双端口存储器,并且双端口存储器可以包括单个读取端口和单个写入端口。在该示例中,读取指令可以与写入指令基本同时地被处理。
在一个示例中,P个输入接口电路中的每个输入接口电路包括输入缓冲器,输入缓冲器被配置为存储N乘1向量,并且Q个输出接口电路中的每个输出接口电路包括输出缓冲器,输出缓冲器被配置为存储N乘1向量。在该示例中,P个输入接口电路中的每个输入接口电路包括至少一个移位寄存器,至少一个移位寄存器被耦合以从输入缓冲器接收N乘1向量,并且Q个输出接口电路中的每个输出接口电路包括至少一个移位寄存器,至少一个移位寄存器被耦合以向输出缓冲器提供N乘1向量。
在另一示例中,本公开涉及系统中的方法,系统包括多个瓦片和向量寄存器文件,向量寄存器文件包括双端口存储器,其中多个瓦片中的每个瓦片被配置为对数据元素的N乘N矩阵和数据元素的N乘1向量进行处理,其中N是等于或大于8的整数,并且其中多个瓦片中的每个瓦片被配置为对N个数据元素进行处理。
方法可以包括:响应于写入指令,在单个时钟周期期间,将N个数据元素存储在双端口存储器中,并且在P个时钟周期中的每个时钟周期期间,向双端口存储器的P个输入接口电路中的每个输入接口电路提供N个数据元素,其中P是等于N除以L的整数,其中L是等于或大于2的整数,并且其中P个输入接口电路中的每个输入接口电路包括输入通道,输入通道被配置为并行承载L个数据元素,并且其中在P个时钟周期中的每个时钟周期期间,双端口存储器被配置为经由P个输入接口电路中所选择的一个输入接口电路来接收N个数据元素。
方法还可以包括:响应于读取指令,在单个时钟周期期间,从双端口存储器取回N个数据元素;以及在Q个时钟周期中的每个时钟周期期间,从双端口存储器的Q个输出接口电路中的每个输出接口电路提供L个数据元素,其中Q是等于N除以L的整数,并且其中Q个输出接口电路中的每个输出接口电路包括输出通道,输出通道被配置为并行承载L个数据元素,并且其中在Q个时钟周期中的每个时钟周期期间,双端口存储器被配置为向Q个输出接口电路中所选择的一个输出接口电路提供N个数据元素。
在一个示例中,双端口存储器可以包括单个读取端口和单个写入端口。在该示例中,读取指令可以与写入指令基本同时地被处理。
在一个示例中,P个输入接口电路中的每个输入接口电路包括输入缓冲器,输入缓冲器被配置为存储N乘1向量,并且Q个输出接口电路中的每个输出接口电路包括输出缓冲器,输出缓冲器被配置为存储N乘1向量。在该示例中,P个输入接口电路中的每个输入接口电路包括至少一个移位寄存器,至少一个移位寄存器被耦合以从输入缓冲器接收N乘1向量,并且Q个输出接口电路中的每个输出接口电路包括至少一个移位寄存器,至少一个移位寄存器被耦合以向输出缓冲器提供N乘1向量。
在又一示例中,本公开涉及处理器,处理器包括向量寄存器文件,向量寄存器文件包括双端口存储器,双端口存储器包括单个读取端口和单个写入端口。处理器还可以包括多个瓦片,多个瓦片被配置为对N乘N矩阵和N乘1向量进行处理,其中N是等于或大于8的整数,并且其中多个瓦片中的每个瓦片被配置为对N个数据元素进行处理。
向量寄存器文件可以被配置为响应于写入指令,在单个时钟周期期间,经由单个写入端口,将N个数据元素存储在双端口存储器中,并且在P个时钟周期中的每个时钟周期期间,向双端口存储器的P个输入接口电路中的每个输入接口电路提供N个数据元素,其中P是等于N除以L的整数,其中L是等于或大于2的整数,并且其中P个输入接口电路中的每个输入接口电路均包括输入通道,输入通道被配置为并行地承载L个数据元素,并且其中在P个时钟周期中的每个时钟周期期间,双端口存储器被配置为经由P个输入接口电路中所选择的一个输入接口电路来接收N个数据元素。
向量寄存器文件还可以被配置为响应于读取指令,在单个时钟周期期间,经由单个读取端口而从双端口存储器取回N个数据元素,并且在Q个时钟周期中的每个时钟周期期间,从双端口存储器的Q个输出接口电路中的每个输出接口电路提供L个数据元素,其中Q是等于N除以L的整数,并且其中Q个输出接口电路中的每个输出接口电路包括输出通道,输出通道被配置为并行承载L个数据元素,并且其中在Q个时钟周期中的每个时钟周期期间,双端口存储器被配置为向Q个输出接口电路中所选择的一个输出接口电路提供N个数据元素。
在一个示例中,P个输入接口电路中的每个输入接口电路包括输入缓冲器,输入缓冲器被配置为存储N乘1向量,并且Q个输出接口电路中的每个输出接口电路包括输出缓冲器,输出缓冲器被配置为存储N乘1向量。在该示例中,P个输入接口电路中的每个输入接口电路包括至少一个移位寄存器,至少一个移位寄存器被耦合以从输入缓冲器接收N乘1向量,并且Q个输出接口电路中的每个输出接口电路包括至少一个移位寄存器,至少一个移位寄存器被耦合以向输出缓冲器提供N乘1向量。在该示例中,读取指令可以与写入指令基本同时地被处理。
应理解,本文描述的方法、模块和组件仅是示例性的。备选地或附加地,本文中所描述的功能可以至少部分地由一个或多个硬件逻辑组件来执行。例如但不限于,可以使用的例示类型的硬件逻辑组件包括现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑器件(CPLD)等。在抽象但仍然明确的意义上,实现相同功能性的组件的任何布置被有效地“相关联”,使得实现期望的功能性。因此,不论架构或中间组件如何,本文中被组合来实现特定功能性的任何两个组件可以被视为彼此“相关联”,使得实现期望的功能性。同样,如此相关联的任何两个组件也可以被视为彼此“可操作地连接”或“耦合”来实现期望的功能性。
与本公开中描述的一些示例相关联的功能性还可以包括非瞬态介质中存储的指令。如本文所使用的,术语“非瞬态介质”指代存储使得机器以特定方式操作的数据和/或指令的任何介质。示例性非瞬态介质包括非易失性介质和/或易失性介质。非易失性介质包括例如硬盘、固态驱动器、磁盘或磁带、光盘或磁带、闪存、EPROM、NVRAM、PRAM或其他此类介质或这样的介质的联网版本。易失性介质包括例如动态存储器,诸如,DRAM、SRAM、缓存或其他此类介质。非瞬态介质与传输介质不同,但可以与传输介质结合使用。传输介质用于向机器或从机器传递数据和/或指令。示例性传输介质包括同轴电缆、光纤电缆、铜线和无线介质(诸如,无线电波)。
此外,本领域技术人员将认识到,上述操作的功能性之间的边界仅是说明性的。多个操作的功能性可以被组合为单个操作,和/或单个操作的功能性可以分布在附加操作中。此外,备选实施例可以包括特定操作的多个实例,并且操作的顺序在各种其他实施例中可以被更改。
尽管本公开提供了特定示例,但是在不脱离如所附权利要求所阐述的本公开的范围的情况下,可以进行各种修改和改变。因此,说明书和附图应被认为是说明性的而不是限制性的意义,并且所有这样的修改旨在被包括在本公开的范围内。本文中针对特定示例描述的任何益处、优点或问题的解决方案均不应被解释为任何或所有权利要求的关键、必需或必要特征或元素。
此外,如本文中所使用的,术语“一(a)”或“一个(an)”被限定为一个或多个。同样,即使同一权利要求包括介绍性短语“一个或多个”或“至少一个”以及不定冠词(诸如,“一(a)”或“一个(an)”),在权利要求中使用诸如“至少一个”和“一个或多个”之类的介绍性短语不应被解释为暗示由不定冠词“一(a)”或“一个(an)”引入另一权利要求元素将包含所引入的权利要求元素的任何权利要求限制为本发明仅包含一个这样的元素。使用定冠词也是如此。
除非另有说明,否则诸如“第一”和“第二”之类的术语被用于任意地区分此类术语所描述的元素。因此,这些术语不一定旨在指示这样的元素的时间顺序或其他优先顺序。

Claims (20)

1.一种处理器,包括:
向量寄存器文件,其包括多端口存储器;以及
多个瓦片,其被配置为对数据元素的N乘N矩阵和数据元素的N乘1向量进行处理,其中N是等于或大于8的整数,并且其中所述多个瓦片中的每个瓦片被配置为对N个数据元素进行处理,并且其中所述向量寄存器文件被配置为:
响应于写入指令,在单个时钟周期期间,将N个数据元素存储在所述多端口存储器中,并且在P个时钟周期中的每个时钟周期期间,向所述多端口存储器的P个输入接口电路中的每个输入接口电路提供N个数据元素,其中P是等于N除以L的整数,其中L是等于或大于2的整数,并且其中所述P个输入接口电路中的每个输入接口电路包括输入通道,所述输入通道被配置为并行承载L个数据元素,并且其中在所述P个时钟周期中的每个时钟周期期间,所述多端口存储器被配置为经由所述P个输入接口电路中所选择的至少一个输入接口电路来接收N个数据元素;以及
响应于读取指令,在单个时钟周期期间,从所述多端口存储器取回N个数据元素,并且在Q个时钟周期中的每个时钟周期期间,从所述多端口存储器的Q个输出接口电路中的每个输出接口电路提供L个数据元素,其中Q是等于N除以L的整数,并且其中所述Q个输出接口电路中的每个输出接口电路包括输出通道,所述输出通道被配置为并行承载L个数据元素,并且其中在所述Q个时钟周期中的每个时钟周期期间,所述多端口存储器被配置为向所述Q个输出接口电路中所选择的至少一个输出接口电路提供N个数据元素。
2.根据权利要求1所述的处理器,其中所述多端口存储器是双端口存储器,并且其中所述双端口存储器包括单个读取端口和单个写入端口。
3.根据权利要求1所述的处理器,其中所述读取指令被调度为与所述写入指令同时执行。
4.根据权利要求1所述的处理器,其中所述P个输入接口电路中的每个输入接口电路包括输入缓冲器,所述输入缓冲器被配置为存储N乘1向量。
5.根据权利要求1所述的处理器,其中所述Q个输出接口电路中的每个输出接口电路包括输出缓冲器,所述输出缓冲器被配置为存储N乘1向量。
6.根据权利要求4所述的处理器,其中所述P个输入接口电路中的每个输入接口电路包括至少一个移位寄存器,所述至少一个移位寄存器被耦合以从所述输入缓冲器接收所述N乘1向量。
7.根据权利要求5所述的处理器,其中所述Q个输出接口电路中的每个输出接口电路包括至少一个移位寄存器,所述至少一个移位寄存器被耦合以向所述输出缓冲器提供所述N乘1向量。
8.一种系统中的方法,所述系统包括多个瓦片和向量寄存器文件,所述向量寄存器文件包括双端口存储器,其中所述多个瓦片中的每个瓦片被配置为对数据元素的N乘N矩阵和数据元素的N乘1向量进行处理,其中N是等于或大于8的整数,并且其中所述多个瓦片中的每个瓦片均被配置为对N个数据元素进行处理,所述方法包括:
响应于写入指令,在单个时钟周期期间,将N个数据元素存储在所述双端口存储器中,并且在P个时钟周期中的每个时钟周期期间,向所述双端口存储器的P个输入接口电路中的每个输入接口电路提供N个数据元素,其中P是等于N除以L的整数,其中L是等于或大于2的整数,并且其中所述P个输入接口电路中的每个输入接口电路包括输入通道,所述输入通道被配置为并行承载L个数据元素,并且其中在所述P个时钟周期中的每个时钟周期期间,所述双端口存储器被配置为经由所述P个输入接口电路中所选择的一个输入接口电路来接收N个数据元素;以及
响应于读取指令,在单个时钟周期期间,从所述双端口存储器取回N个数据元素,并且在Q个时钟周期中的每个时钟周期期间,从所述双端口存储器的Q个输出接口电路中的每个输出接口电路提供L个数据元素,其中Q是等于N除以L的整数,并且其中所述Q个输出接口电路中的每个输出接口电路包括输出通道,所述输出通道被配置为并行承载L个数据元素,并且其中在所述Q个时钟周期中的每个时钟周期期间,所述双端口存储器被配置为向所述Q个输出接口电路中所选择的一个输出接口电路提供N个数据元素。
9.根据权利要求8所述的方法,其中所述双端口存储器包括单个读取端口和单个写入端口。
10.根据权利要求8所述的方法,其中所述读取指令被调度为与所述写入指令同时执行。
11.根据权利要求8所述的方法,其中所述P个输入接口电路中的每个输入接口电路包括输入缓冲器,所述输入缓冲器被配置为存储N乘1向量。
12.根据权利要求8所述的方法,其中所述Q个输出接口电路中的每个输出接口电路包括输出缓冲器,所述输出缓冲器被配置为存储N乘1向量。
13.根据权利要求11所述的方法,其中所述P个输入接口电路中的每个输入接口电路包括至少一个移位寄存器,所述至少一个移位寄存器被耦合以从所述输入缓冲器接收所述N乘1向量。
14.根据权利要求12所述的方法,其中所述Q个输出接口电路中的每个输出接口电路包括至少一个移位寄存器,所述至少一个移位寄存器被耦合以向所述输出缓冲器提供所述N乘1向量。
15.一种处理器,包括:
向量寄存器文件,其包括双端口存储器,所述双端口存储器包括单个读取端口和单个写入端口;以及
多个瓦片,其被配置为对N乘N矩阵和N乘1向量进行处理,其中N是等于或大于8的整数,并且其中所述多个瓦片中的每个瓦片被配置为对N个数据元素进行处理;并且其中所述向量寄存器文件被配置为:
响应于写入指令,在单个时钟周期期间,经由所述单个写入端口将N个数据元素存储在所述双端口存储器中,并且在P个时钟周期中的每个时钟周期期间,向所述双端口存储器的P个输入接口电路中的每个输入接口电路提供N个数据元素,其中P是等于N除以L的整数,其中L是等于或大于2的整数,并且其中所述P个输入接口电路中的每个输入接口电路包括输入通道,所述输入通道被配置为并行地承载L个数据元素,并且其中在所述P个时钟周期中的每个时钟周期期间,所述双端口存储器被配置为经由所述P个输入接口电路中所选择的一个输入接口电路来接收N个数据元素;以及
响应于读取指令,在单个时钟周期期间,经由所述单个读取端口从所述双端口存储器取回N个数据元素,并且在Q个时钟周期中的每个时钟周期期间,从所述双端口存储器的Q个输出接口电路中的每个输出接口电路提供L个数据元素,其中Q是等于N除以L的整数,并且其中所述Q个输出接口电路中的每个输出接口电路包括输出通道,所述输出通道被配置为并行承载L个数据元素,并且其中在所述Q个时钟周期中的每个时钟周期期间,所述双端口存储器被配置为向所述Q个输出接口电路中所选择的一个输出接口电路提供N个数据元素。
16.根据权利要求15所述的处理器,其中所述P个输入接口电路中的每个输入接口电路包括输入缓冲器,所述输入缓冲器被配置为存储N乘1向量。
17.根据权利要求15所述的处理器,其中所述Q个输出接口电路中的每个输出接口电路包括输出缓冲器,所述输出缓冲器被配置为存储N乘1向量。
18.根据权利要求16所述的处理器,其中所述P个输入接口电路中的每个输入接口电路包括移位寄存器,所述移位寄存器被耦合以从所述输入缓冲器接收所述N乘1向量。
19.根据权利要求17所述的处理器,其中所述Q个输出接口电路中的每个输出接口电路包括移位寄存器,所述移位寄存器被耦合以向所述输出缓冲器提供所述N乘1向量。
20.根据权利要求15所述的处理器,其中所述读取指令被调度为与所述写入指令同时执行。
CN201980026843.XA 2018-04-21 2019-04-06 具有包括多端口存储器的向量寄存器文件的矩阵向量乘法器 Active CN112005214B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/959,209 US10795678B2 (en) 2018-04-21 2018-04-21 Matrix vector multiplier with a vector register file comprising a multi-port memory
US15/959,209 2018-04-21
PCT/US2019/026205 WO2019204068A1 (en) 2018-04-21 2019-04-06 Matrix vector multiplier with a vector register file comprising a multi-port memory

Publications (2)

Publication Number Publication Date
CN112005214A CN112005214A (zh) 2020-11-27
CN112005214B true CN112005214B (zh) 2024-02-20

Family

ID=66248741

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980026843.XA Active CN112005214B (zh) 2018-04-21 2019-04-06 具有包括多端口存储器的向量寄存器文件的矩阵向量乘法器

Country Status (13)

Country Link
US (1) US10795678B2 (zh)
EP (1) EP3785112B1 (zh)
JP (1) JP7262569B2 (zh)
KR (1) KR20210002495A (zh)
CN (1) CN112005214B (zh)
AU (1) AU2019257260B2 (zh)
BR (1) BR112020019457A2 (zh)
CA (1) CA3096443A1 (zh)
IL (1) IL278050B2 (zh)
MX (1) MX2020010916A (zh)
PH (1) PH12020551746A1 (zh)
SG (1) SG11202009936XA (zh)
WO (1) WO2019204068A1 (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11574659B2 (en) * 2018-09-11 2023-02-07 Micron Technology, Inc. Parallel access to volatile memory by a processing device for machine learning
US11579883B2 (en) * 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
EP3623984A1 (en) * 2018-09-17 2020-03-18 Secure-IC SAS Circuit configured to monitor a sensitive payload
US11586883B2 (en) * 2018-12-14 2023-02-21 Microsoft Technology Licensing, Llc Residual quantization for neural networks
US11748599B2 (en) * 2019-02-21 2023-09-05 Texas Instruments Incorporated Super-tiling in neural network processing to enable analytics at lower memory speed
US11907827B2 (en) * 2019-06-28 2024-02-20 Intel Corporation Schedule-aware tensor distribution module
KR102371451B1 (ko) 2021-05-27 2022-03-07 충남대학교 산학협력단 멀티포트 메모리를 이용한 병렬 곱셈장치
US20220413852A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Processor embedded streaming buffer

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104238993A (zh) * 2013-06-11 2014-12-24 亚德诺半导体技术公司 微处理器集成电路的向量矩阵乘积加速器
CN107851017A (zh) * 2015-07-31 2018-03-27 Arm 有限公司 用于在存储器与存储在寄存器组中的一个或多个数据元素向量之间传输多个数据结构的设备和方法

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4036455C1 (zh) * 1990-11-15 1992-04-02 Siemens Ag, 8000 Muenchen, De
JP3297925B2 (ja) * 1991-09-12 2002-07-02 ソニー株式会社 信号処理用プロセッサ
EP1311945A1 (en) 2000-08-22 2003-05-21 Jean-Paul Theis A configurable register file with multi-range shift register support
IL145245A0 (en) * 2001-09-03 2002-06-30 Jtc 2000 Dev Delaware Inc System and method including vector-matrix multiplication
US7284113B2 (en) * 2003-01-29 2007-10-16 Via Technologies, Inc. Synchronous periodical orthogonal data converter
GB2399900B (en) * 2003-03-27 2005-10-05 Micron Technology Inc Data reording processor and method for use in an active memory device
US7673164B1 (en) 2004-12-13 2010-03-02 Massachusetts Institute Of Technology Managing power in a parallel processing environment
JP2007280297A (ja) * 2006-04-11 2007-10-25 Seiko Epson Corp プロセッサ、レジスタファイル回路、集積回路装置、マイクロコンピュータ及び電子機器
US8984043B2 (en) * 2009-12-23 2015-03-17 Intel Corporation Multiplying and adding matrices
JP6502265B2 (ja) 2013-02-05 2019-04-17 スリーエム イノベイティブ プロパティズ カンパニー グラフィック物品
JP6253514B2 (ja) * 2014-05-27 2017-12-27 ルネサスエレクトロニクス株式会社 プロセッサ
US20170371657A1 (en) * 2016-06-24 2017-12-28 Qualcomm Incorporated Scatter to gather operation
US11157801B2 (en) * 2017-02-28 2021-10-26 Microsoft Technology Licensing, Llc Neural network processing with the neural network model pinned to on-chip memories of hardware nodes

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104238993A (zh) * 2013-06-11 2014-12-24 亚德诺半导体技术公司 微处理器集成电路的向量矩阵乘积加速器
CN107851017A (zh) * 2015-07-31 2018-03-27 Arm 有限公司 用于在存储器与存储在寄存器组中的一个或多个数据元素向量之间传输多个数据结构的设备和方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于无冲突地址生成的高性能FFT处理器设计;王江;黑勇;郑晓燕;仇玉林;;微电子学与计算机(第03期);全文 *

Also Published As

Publication number Publication date
AU2019257260A1 (en) 2020-10-01
JP7262569B2 (ja) 2023-04-21
BR112020019457A2 (pt) 2021-01-05
US20190324748A1 (en) 2019-10-24
CA3096443A1 (en) 2019-10-24
SG11202009936XA (en) 2020-11-27
WO2019204068A1 (en) 2019-10-24
PH12020551746A1 (en) 2021-07-26
IL278050B1 (en) 2023-07-01
JP2021522630A (ja) 2021-08-30
EP3785112A1 (en) 2021-03-03
CN112005214A (zh) 2020-11-27
US10795678B2 (en) 2020-10-06
IL278050B2 (en) 2023-11-01
KR20210002495A (ko) 2021-01-08
MX2020010916A (es) 2020-11-09
IL278050A (en) 2020-11-30
EP3785112B1 (en) 2022-03-16
AU2019257260B2 (en) 2023-09-28

Similar Documents

Publication Publication Date Title
CN112005214B (zh) 具有包括多端口存储器的向量寄存器文件的矩阵向量乘法器
US11151445B2 (en) Neural network processor with a window expander circuit
CN110998570B (zh) 具有带有块浮点处理的矩阵矢量单元的硬件节点
US11556762B2 (en) Neural network processor based on application specific synthesis specialization parameters
US20220012577A1 (en) Neural network processing with model pinning
CN114402293A (zh) 具有持续且异步更新的流水线式神经网络处理
CN115398395A (zh) 具有用于同时处理不同类运算的独立数据路径的深度神经网络加速器
RU2795887C2 (ru) Матрично-векторный умножитель с набором регистров для хранения векторов, содержащим многопортовую память
US11983616B2 (en) Methods and apparatus for constructing digital circuits for performing matrix operations

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40034320

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant