CN110443360B - 用于操作处理器的方法 - Google Patents

用于操作处理器的方法 Download PDF

Info

Publication number
CN110443360B
CN110443360B CN201910739737.8A CN201910739737A CN110443360B CN 110443360 B CN110443360 B CN 110443360B CN 201910739737 A CN201910739737 A CN 201910739737A CN 110443360 B CN110443360 B CN 110443360B
Authority
CN
China
Prior art keywords
data
npu
value
data store
instruction
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
CN201910739737.8A
Other languages
English (en)
Other versions
CN110443360A (zh
Inventor
道格拉斯·R·瑞德
G·葛兰·亨利
泰瑞·派克斯
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.)
Shanghai Zhaoxin Semiconductor Co Ltd
Original Assignee
Shanghai Zhaoxin Integrated Circuit Co Ltd
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 Shanghai Zhaoxin Integrated Circuit Co Ltd filed Critical Shanghai Zhaoxin Integrated Circuit Co Ltd
Publication of CN110443360A publication Critical patent/CN110443360A/zh
Application granted granted Critical
Publication of CN110443360B publication Critical patent/CN110443360B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Theoretical Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Neurology (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明涉及一种用于操作处理器的方法。第一数据存储保持高速缓存器行;神经处理单元加速器具有保持神经网络权重和从第一数据存储驱逐的高速缓存器行的第二数据存储;标记目录保持针对第一和第二数据存储两者中所储存的高速缓存器行的标记;响应于从第一数据存储驱逐高速缓存器行的请求,在第一模式下将高速缓存器行写入第二数据存储并且更新标记目录中的标记以指示高速缓存器行存在于第二数据存储中;以及在第二模式下将高速缓存器行写入系统存储器而非写入第二数据存储。

Description

用于操作处理器的方法
本申请是申请日为2018年06月15日,申请号为201810618974.4、发 明名称为“处理器、用于操作处理器的方法和计算机可用介质”的发明专利 申请的分案申请。
技术领域
本发明涉及一种处理器、用于操作处理器的方法和计算机可用介质,尤 其涉及具有可操作为牺牲高速缓存器(victim cache)数据存储或加速存储器并 且在低级高速缓存器中具有牺牲高速缓存器标记的选择性数据存储的处理 器。
背景技术
最近,人工神经网络(artificial neural network,ANN)重新吸引了人们的兴趣,并且这种研究通常被称为深度学习、计算机学习和类似的术语。通用处 理器计算能力的提高使得重新提起数十年前所消退的兴趣。ANN的最新应用 包括语音识别和图像识别等。对于改进与ANN相关联的计算的性能和效率的 需求正在增大。
发明内容
一种处理器,包括:处理核心;第一数据存储,其耦接至所述处理核心, 加速器,包括:第二数据存储,其用于选择性地保持:从所述第一数据存储 驱逐的高速缓存器行,以及所述加速器所处理的加速器数据;标记目录,其 耦接至所述处理核心,所述标记目录用于保持针对所述第一数据存储和所述 第二数据存储这两者中所储存的高速缓存器行的标记;模式指示符,其用于 指示所述第二数据存储是正在第一模式下操作还是正在第二模式下操作,其 中在所述第一模式中所述第二数据存储保持从所述第一数据存储驱逐的高 速缓存器行,在所述第二模式中所述第二数据存储保持所述加速器所处理的 加速器数据;以及控制逻辑,其被配置为响应于从所述第一数据存储驱逐高 速缓存器行的请求而进行以下操作:在所述模式指示符指示所述第二数据存 储正在所述第一模式下操作的情况下,将高速缓存器行写入所述第二数据存 储并且更新所述标记目录中的标记以指示高速缓存器行存在于所述第二数 据存储中;以及在所述模式指示符指示所述第二数据存储正在所述第二模式 下操作的情况下,将高速缓存器行写入系统存储器而非写入所述第二数据存储。
一种用于操作处理器的方法,所述处理器具有:处理核心;第一数据存 储,其用于保持所述处理核心所处理的高速缓存器行;加速器,其具有用于 选择性地保持从所述第一数据存储驱逐的高速缓存器行和所述加速器所处 理的加速器数据的第二数据存储;以及标记目录,其用于保持针对所述第一 数据存储和所述第二数据存储这两者中所储存的高速缓存器行的标记,所述 方法包括以下步骤:响应于从所述第一数据存储驱逐高速缓存器行的请求而 进行以下操作:在所述第二数据存储正在第一模式下操作的情况下,将高速缓存器行写入所述第二数据存储并且更新所述标记目录中的标记以指示高 速缓存器行存在于所述第二数据存储中,其中在所述第一模式中所述第二数 据存储保持从所述第一数据存储驱逐的高速缓存器行;以及在所述第二数据 存储正在第二模式下操作的情况下,将高速缓存器行写入系统存储器而非写 入所述第二数据存储,其中在所述第二模式中所述第二数据存储保持所述加 速器所处理的加速器数据。
一种非暂时性计算机可用介质,其包括计算机可用程序,所述计算机可 用程序使得计算机用作根据本申请所述的处理器中的各部件。
附图说明
图1是示出包括神经网络单元(neural network unit,NNU)的处理器的框 图。
图2是示出图1的NPU的框图。
图3是示出图1的NNU的N个NPU的N个复用寄存器(mux-reg)的布置的实 施例的框图,以说明N个复用寄存器作为针对从图1的数据RAM接收到的一 行数据字的N字轮转器(N-word rotater)或循环移位器的操作。
图4是示出用于储存在图1的NNU的程序存储器中并由该NNU执行的程 序的表格。
图5是示出NNU执行图4的程序的时序图。
图6A是示出图1的NNU执行图4的程序的框图。
图6B是示出图1的处理器进行架构程序的操作的流程图,所述架构程序 使用NNU来执行典型地与人工神经网络的隐藏层的神经元相关联的(诸如图 4的程序所执行的)乘法累加激活函数计算。
图7是示出根据备选实施例的图1的NPU的框图。
图8是示出根据备选实施例的图1的NPU的框图。
图9是示出用于储存在图1的NNU的程序存储器中并由该NNU执行的程 序的表格。
图10是示出NNU执行图9的程序的时序图。
图11是示出图1的NNU的实施例的框图。在图11的实施例中,神经元分 成两部分即激活函数单元部分和ALU部分(此部分还包括移位寄存器部分), 并且各激活函数单元部分由多个ALU部分共享。
图12是示出图11的NNU执行图4的程序的时序图。
图13是示出图11的NNU执行图4的程序的时序图。
图14是示出向神经网络移动(MTNN)架构指令以及该架构指令相对于图 1的NNU的部分的操作的框图。
图15是示出从神经网络移动(MFNN)架构指令以及该架构指令相对于图 1的NNU的部分的操作的框图。
图16是示出图1的数据RAM的实施例的框图。
图17是示出图1的权重RAM和缓存器的实施例的框图。
图18是示出图1的可动态配置的NPU的框图。
图19是示出根据图18的实施例的图1的NNU的N个NPU的2N个复用寄存 器的布置的实施例的框图,以说明2N个复用寄存器作为针对从图1的数据 RAM接收到的一行数据字的轮转器的操作。
图20是示出用于储存在图1的NNU的程序存储器中并由该NNU执行的 程序的表格,其中所述NNU具有根据图18的实施例的NPU。
图21是示出NNU执行图20的程序的时序图,其中该NNU包括图18的在 窄配置中操作的NPU。
图22是示出图1的NNU的框图,其中该NNU包括图18的NPU以执行图20 的程序。
图23是示出根据备选实施例的图1的可动态配置的NPU的框图。
图24是示出图1的NNU执行卷积运算所使用的数据结构的示例的框图。
图25是示出图1的处理器执行架构程序的操作的流程图,所述架构程序 将对卷积核执行卷积的NNU用于图24的数据阵列。
图26A是NNU程序的程序列表,其中该NNU程序利用图24的卷积核对数 据矩阵执行卷积并将其写回权重RAM。
图26B是示出根据一个实施例的图1的NNU的控制寄存器的特定字段的 框图。
图27是示出填有输入数据的图1的权重RAM的示例的框图,其中图1的 NNU对所述输入数据进行池化(pooling)运算。
图28是NNU程序的程序列表,其中该NNU程序对图27的输入数据矩阵 进行池化运算并将其写回权重RAM。
图29A是示出图1的控制寄存器的实施例的框图。
图29B是示出根据备选实施例的图1的控制寄存器的实施例的框图。
图29C是示出根据一个实施例的存储为两个部分的图29A的倒数的实施 例的框图。
图30是更详细示出图2的AFU的实施例的框图。
图31是图30的AFU的操作的示例。
图32是图30的AFU的操作的第二示例。
图33是图30的AFU的操作的第三示例。
图34是示出图1的处理器以及图1的NNU的更详细的部分的框图。
图35是示出包括可变速率NNU的处理器的框图。
图36A是示出具有在一般模式中操作即以主时钟速率操作的NNU的处 理器的操作示例的时序图。
图36B是示出具有在缓和模式中操作即以比主时钟速率小的速率操作的 NNU的处理器的操作示例的时序图。
图37是示出图35的处理器的操作的流程图。
图38是更详细示出NNU的序列的框图。
图39是示出NNU的控制和状态寄存器的特定字段的框图。
图40是示出处理器的框图。
图41是更详细示出图40的NNU、以及图40的环站(ring stop)的框图。
图42是示出在图41的存储器阵列正从用作LLC片时的高速缓存存储器 模式转换为用作NNU的权重/数据RAM时的NNU模式的情况下的图40的处 理器的操作的流程图。
图43是示出在图41的存储器阵列正从用作NNU的权重/数据RAM时的 NNU模式转换为用作LLC片时的高速缓存存储器模式的情况下的图40的处 理器的操作的流程图。
图44是示出在图41的存储器阵列正从用作NNU的权重/数据RAM时的 NNU模式转换为用作牺牲高速缓存器时的高速缓存存储器模式的情况下的 图40的处理器的操作的流程图。
图45是示出在图41的存储器阵列正从用作牺牲高速缓存器时的高速缓 存存储器模式转换为用作NNU的权重/数据RAM时的NNU模式的情况下的 图40的处理器的操作的流程图。
图46是示出根据备选实施例的处理器的框图。
图47是示出图46的标记目录中的集合的框图。
图48是示出图46的处理器进行从L3高速缓存器至牺牲高速缓存器的高 速缓存器行的驱逐的操作的流程图。
图49是示出图46的处理器进行从牺牲高速缓存器至核心的高速缓存器 行的加载请求的操作的流程图。
图50是示出在图46的选择性数据存储正从用作NNU的权重/数据RAM时 的NNU模式转换为用作牺牲高速缓存器时的牺牲高速缓存器模式的情况下 的图46的处理器的操作的流程图。
图51是示出在图46的选择性数据存储正从用作牺牲高速缓存器时的牺 牲高速缓存器模式转换为用作NNU的权重/数据RAM时的NNU模式的情况 下的图46的处理器的操作的流程图。
图52是示出NNU的部分的实施例的框图。
图53是更详细示出图46的环站的框图。
图54是更详细示出图53的从接口的框图。
图55是更详细示出图53的主接口0的框图。
图56是示出图53的环站以及NNU的环形总线耦接实施例的部分的框图。
图57是示出NNU的环形总线耦接实施例的框图。
具体实施方式
具有架构神经网络单元的处理器
现参考图1,示出一框图,该框图示出包括神经网络单元(NNU)121的处 理器100。处理器100包括指令拾取单元101、指令高速缓存器102、指令转译 器104、重命名单元106、保留站108、媒体寄存器118、通用寄存器(GPR)116、 NNU 121以外的执行单元112、以及存储器子系统114。
处理器100是用作集成电路上的中央处理单元(CPU)的电子装置。处理器 100接收数字数据作为输入,根据从存储器拾取的指令处理数据,并生成指 令所规定的运算的结果作为输出。处理器100可用于台式计算机、移动计算 机或平板计算机,并用于诸如计算、字编辑、多媒体显示和互联网浏览等的 用途。处理器100还可设置于嵌入式系统内,以控制包括家用电器、移动电 话、智能电话、车辆和工业控制装置等的各种各样的装置。CPU是通过对数 据执行包括算术运算、逻辑运算和输入/输出运算的运算来执行计算机程序 (也称为“计算机应用”或“应用”)指令的电子电路(即“硬件”)。集成电 路(IC)是制作于小块半导体材料(通常为硅)上的一组电子电路。IC也称为芯 片、微芯片或晶粒(die)。
指令拾取单元101控制将架构指令103从系统存储器(未示出)拾取至指令 高速缓存器102。指令拾取单元101向指令高速缓存器102提供指定存储器地 址的拾取地址,其中处理器100在所述存储器地址处将架构指令字节的高速 缓存器行拾取至指令高速缓存器102中。拾取地址是基于处理器100的指令指 针(未示出)或程序计数器的当前值。通常,程序计数器依照指令大小循序递 增,除非在指令串流中遇到诸如分支、调用或返回指令等的控制指令或者发 生诸如中断、陷阱(trap)、例外或错误等的例外条件,在上述情况下,利用诸 如分支目标地址、返回地址或例外向量等的非循序地址来更新程序计数器。 一般来说,程序计数器响应于执行单元112/121执行指令而进行更新。程序计 数器也可响应于检测到例外条件(诸如指令转译器104遇到处理器100的指令 集架构未定义的指令103等)而进行更新。
指令高速缓存器102对从耦接至处理器100的系统存储器拾取到的架构 指令103进行高速缓存。架构指令103包括以下将更详细说明的向神经网络移 动(MTNN)指令和从神经网络移动(MFNN)指令。在一个实施例中,架构指令 103是x86指令集架构(ISA)的指令,并附加上MTNN指令与MFNN指令。在本 发明的上下文中,x86ISA处理器作为在
Figure BDA0002163527810000081
处理器执行相同的机 器语言指令时在指令集架构层生成与
Figure BDA0002163527810000082
处理器所生成的相同的 结果的处理器。然而,其它实施例设想了其它指令集架构,诸如进阶精简指 令集机器
Figure BDA0002163527810000083
SUN
Figure BDA0002163527810000084
Figure BDA0002163527810000085
指令高速缓存器102向指 令转译器104提供架构指令103,指令转译器104将架构指令103转译为微指令 105。
微指令105被提供至重命名单元106、并且最终由执行单元112/121执行。 微指令105实现架构指令。优选地,指令转译器104包括第一部分,其中该第 一部分将频繁执行的和/或相对较不复杂的架构指令103转译为微指令105。指 令转译器104还包括第二部分,其中该第二部分包括微码单元(未示出)。微码 单元包括保持微码指令的微码存储器,其中所述微码指令实现架构指令集的 复杂和/或不频繁使用的指令。微码单元还包括微定序器(microsequencer),其 中该微定序器将非架构微程序计数器(micro-PC)提供至微码存储器。优选地, 微码指令经由微转译器(未示出)而被转译为微指令105。选择器根据微码单元当前是否具有控制权来从所述第一部分或所述第二部分选择微指令105以提 供至重命名单元106。
重命名单元106将架构指令103中所指定的架构寄存器重命名为处理器 100的物理寄存器。优选地,处理器100包括重排序缓存器(未示出)。重命名 单元106针对各微指令105依照程序顺序来分配重排序缓存器中的条目。这样 使得处理器100能够依照程序顺序引退(retire)微指令105及其相应的架构指令 103。在一个实施例中,媒体寄存器118具有256位宽度,并且GPR 116具有64 位宽度。在一个实施例中,媒体寄存器118是诸如高级向量扩充(AVX)寄存器 等的x86媒体寄存器。
在一个实施例中,重排序缓存器的各条目包括用于微指令105的结果的 存储空间;此外,处理器100包括架构寄存器文件,其包括针对各架构寄存 器(例如,媒体寄存器118、GPR 116以及其它架构寄存器)的物理寄存器。(优 选地,例如,由于媒体寄存器118与GPR 116的大小不同,因此针对这两者, 存在单独的寄存器文件。)对于微指令105中指定架构寄存器的各源操作数, 重命名单元利用写入架构寄存器的旧有微指令105中的最新微指令的重排序 缓存器索引来填充微指令105的源操作数字段。当执行单元112/121完成微指令105的执行时,执行单元112/121将结果写入微指令105的重排序缓存器条 目。当微指令105引退时,引退单元(未示出)将所述结果从微指令的重排序缓 存器条目写入与引退的微指令105所指定的架构目的地寄存器相关联的物理 寄存器文件的寄存器。
在另一实施例中,处理器100包括物理寄存器文件而不包括架构寄存器 文件,其中该物理寄存器文件包括的物理寄存器的数量多于架构寄存器的数 量,而且重排序缓存器条目不包括结果存储空间。(优选地,例如,由于媒 体寄存器118与GPR 116的大小不同,因此针对这两者,存在单独的物理寄存 器文件。)处理器100还包括指针表,其具有针对各架构寄存器的关联指针。 对于微指令105中的指定架构寄存器的操作数,重命名单元利用指向物理寄 存器文件中的空闲寄存器的指针来填充微指令105的目的地操作数字段。如果物理寄存器文件内不存在空闲寄存器,则重命名单元106暂时搁置流水线 (pipeline)。对于微指令105的指定架构寄存器的各源操作数,重命名单元利 用指向物理寄存器文件中被指派给写入架构寄存器的旧有微指令105中的最 新微指令的寄存器的指针,来填充微指令105的源操作数字段。当执行单元 112/121完成微指令105的执行时,执行单元112/121将结果写入物理寄存器文 件中由微指令105的目的地操作数字段所指向的寄存器。当微指令105引退 时,引退单元将微指令105的目的地操作数字段值复制到指针表中与该引退 的微指令105所指定的架构目的地寄存器相关联的指针。
保留站108保持微指令105,直到微指令准备好被发布至执行单元112/121 以供执行为止。当微指令105的所有源操作数都可用并且执行单元112/121可 用于执行微指令105时,准备好发布微指令105。执行单元112/121从重排序缓 存器或前述第一实施例中的架构寄存器文件、或者从前述第二实施例中的物 理寄存器文件接收寄存器源操作数。此外,执行单元112/121可经由结果转发 总线(未示出)而直接从执行单元112/121接收寄存器源操作数。此外,执行单 元112/121可以从保留站108接收微指令105所指定的即时操作数。如以下更详 细所述,MTNN与MFNN架构指令103包括用于指定NNU 121所要执行的功能 的即时操作数,其中该功能设置在MTNN与MFNN架构指令103转译成的一 个或多个微指令105之一中。
执行单元112包括一个或多个加载/储存单元(未示出),其从存储器子系 统114加载数据并且将数据储存至存储器子系统114。优选地,存储器子系统 114包括存储器管理单元(未示出),其可例如包括转译查找(lookaside)缓存器 和表移动(tablewalk)单元、1级数据高速缓存器(和指令高速缓存器102)、2级 统一高速缓存器、以及用于将处理器100与系统存储器接合的总线接口单元。 在一个实施例中,图1的处理器100是作为多核处理器中的共享末级高速缓存 存储器的多个处理核心之一的处理核心的代表。执行单元112还可包括整数 单元、媒体单元、浮点单元和分支单元。
NNU 121包括权重随机存取存储器(RAM)124、数据RAM 122、N个神 经处理单元(NPU)126、程序存储器129、定序器128、以及控制和状态寄存 器(CSRS)127。NPU 126在概念上用作神经网络中的神经元。权重RAM 124、 数据RAM 122与程序存储器129均可经由MTNN与MFNN架构指令103分别 写入与读取。权重RAM 124排列为W行,每行N个权重字,并且数据RAM 122 排列为D行,每行N个数据字。各个数据字与各个权重字均具有多个位,优 选地为8位、9位、12位或16位。各个数据字用作网络中先前层的神经元的输 出值(有时也称为激活值(activation)),并且各个权重字用作与进入网络当前层 的神经元的连接相关联的权重。尽管在NNU 121的许多应用中、保持在权重 RAM 124中的字或操作数实际上是与进入神经元的连接相关联的权重,但是 应当理解,在NNU 121的其它应用中,保持在权重RAM 124中的字并非权重, 但是因为这些字储存于权重RAM 124中,因此仍被称为“权重字”。例如,在NNU 121的某些应用中,例如图24至图26A的卷积示例或图27至图28的池 化示例中,权重RAM 124可以保持非权重,诸如数据矩阵(例如图像像素数 据)的元素等。同样地,尽管在NNU 121的许多应用中,保持在数据RAM 122 中的字或操作数实际上是神经元的输出值或激活值,但是应当理解,在NNU 121的其它应用中,保持在数据RAM 122中的字并非如此,但是因为这些字 储存于数据RAM 122中,因此仍然被称为“数据字”。例如,在NNU 121的 某些应用中,例如图24至图26A的卷积示例中,数据RAM 122可以保持非神 经元输出,诸如卷积核的元素等。
在一个实施例中,NPU 126和定序器128包括组合逻辑、定序逻辑、状态 机、或其组合。架构指令(例如,MFNN指令1500)将状态寄存器127的内容加 载至GPR 116之一,以确定NNU 121的状态,例如确定为NNU 121已经完成 了命令或已经完成了NNU 121从程序存储器129运行的程序的状态,或者确 定为NNU 121自由接收新的命令或开始新的NNU程序的状态。
有利地,NPU 126的数量可根据需要增加,并且权重RAM 124和数据 RAM 122的大小可以相应地在宽度与深度上扩展。优选地,权重RAM 124 较大,这是因为在典型的神经网络层中,存在与各个神经元相关联的许多连 接因而存在许多权重。本文描述了与数据字和权重字的大小、权重RAM 124 和数据RAM 122的大小、以及NPU 126的数量有关的各个实施例。在一个实 施例中,具有64KB(8192位×64行)数据RAM 122、2MB(8192位×2048行) 权重RAM 124以及512个NPU 126的NNU 121实现于台湾半导体制造有限公 司(TSMC)的16纳米工艺中,占用面积约为3.3平方毫米。
定序器128从程序存储器129拾取指令并执行,还包括产生地址和控制信 号以提供给数据RAM 122、权重RAM 124和NPU 126。定序器128产生存储 器地址123和读取命令以提供给数据RAM 122,从而在每行具有N个数据字的 D行中选择其中之一并提供给N个NPU126。定序器128还产生存储器地址125 和读取命令以提供给权重RAM 124,从而在每行具有N个权重字的W行中选 择其中之一以提供给N个NPU 126。定序器128产生以提供给NPU 126的地址 123和125的顺序确定神经元之间的“连接”。定序器128还产生存储器地址123 和写入命令以提供给数据RAM 122,从而在每行具有N个数据字的D行中选 择其中之一以从N个NPU 126进行写入。定序器128还产生存储器地址125和 写入命令以提供给权重RAM 124,从而在每行具有N个权重字的W行中选择 其中之一以从N个NPU 126进行写入。定序器128还产生针对程序存储器129 的存储器地址131以选择提供给定序器128的如以下所述等的NNU指令。存储 器地址131与程序计数器(未示出)相对应,其中定序器128通常通过程序存储 器129的顺序位置使该程序计数器递增,除非定序器128遇到诸如循环指令 (例如见图26A)等的控制指令,在遇到控制指令的这种情况下,定序器128将 程序计数器更新为该控制指令的目标地址。定序器128还产生针对NPU 126 的控制信号,以指示NPU 126执行诸如初始化、算术/逻辑运算、转动和移位 运算、激活函数、以及写回运算等的各种运算或功能,以下更详细地说明这 样的范例(例如见图34的微操作3418)。
N个NPU 126产生N个结果字133,其中结果字133可被写回权重RAM 124 的行或写回数据RAM 122。优选地,权重RAM 124与数据RAM 122直接耦接 至N个NPU 126。更具体地,权重RAM 124与数据RAM 122专用于NPU 126, 而不由处理器100的其它执行单元112分享,并且这些NPU 126能够以持续方 式(优选地,以流水线方式)在各时钟周期消耗来自权重RAM 124和数据 RAM 122其中之一或两者的一行。在一个实施例中,数据RAM 122与权重RAM 124各自能够在各时钟周期向NPU 126提供8192位。如以下更详细所述, 这8192位可以作为512个16位字或1024个8位字来消耗。
有利地,可由NNU 121处理的数据集的大小不受限于权重RAM 124与数 据RAM 122的大小,而仅受限于系统存储器的大小,这是因为可以使用 MTNN与MFNN指令(例如,通过媒体寄存器118)将数据与权重在系统存储器 与权重RAM 124以及数据RAM 122间移动。在一个实施例中,数据RAM 122 是双端口的,使得能够在并行地从数据RAM 122读取或向数据RAM 122写入 数据字时,将数据字写入至数据RAM 122。另外,包括高速缓存存储器的存 储器子系统114的大型存储器阶层结构提供非常大的数据带宽以供系统存储 器与NNU 121之间的传递。此外,优选地,存储器子系统114包括硬件数据 预拾取器,其追踪存储器访问模式(诸如从系统存储器对神经数据和权重的 加载等),并对高速缓存器阶层结构执行数据预拾取以促进向权重RAM 124 与数据RAM 122的高带宽且低延迟的传递。
虽然说明了被提供给各NPU 126的操作数其中之一是从权重存储器提供 的并且被表示为权重(此用语常用于神经网络)的实施例,但应当理解,操作 数可以是与能够通过所述设备提高速度的计算相关联的其它类型的数据。
现参考图2,示出一框图,该框图示出图1的NPU 126。NPU 126操作以 执行许多功能或运算。尤其是,有利地,NPU 126被配置为作为神经元或节 点而在人工神经网络中操作以执行经典的乘法累加函数或运算。亦即一般而 言,NPU 126(神经元)被配置为:(1)从与该NPU 126具有连接的各神经元(通 常但没有必要一定从人工神经网络中的紧挨在前的一层)接收输入值;(2)将 各输入值乘以与该连接相关联的相应权重值以产生乘积;(3)将所有乘积相加 以产生总和;并且(4)对该总和执行激活函数以产生神经元的输出。然而,与如传统方式那样执行与所有连接输入相关联的所有乘法并接着将所有乘积 相加在一起不同,有利地,各个神经元被配置为在给定的时钟周期内执行与 连接输入其中之一相关联的权重乘法运算、然后将该乘积与同直到该点为止 的在先时钟周期内所处理的连接输入相关联的乘积的累加值相加(累加)。假 定存在至神经元的M个连接,则在对所有M个乘积进行累加后(耗费约M个时 钟周期),该神经元对累加值执行激活函数以产生输出或结果。这具有如下 的优点:与将关联于所有连接输入的所有乘积或者甚至乘积的子集相加的加 法器相比,在神经元内需要更少的乘法器并且需要更小、更简单且更为快速 的加法器电路(例如,2输入加法器)。因而这具有如下的优点:有利于在NNU 121内实现极大量(N个)的神经元(NPU 126),使得在约M个时钟周期后,NNU 121已产生所有这些大量(N个)神经元的输出。最后,由这样的神经元构成的 NNU 121具备有效地针对大量不同的连接输入作为人工神经网络层而执行 的优点。也就是说,随着M针对不同层增加或减少,产生神经元输出所需的 时钟周期数相应地增加或减少,并且资源(例如,乘法器与累加器)得到充分 利用;而在更传统的设计中,对于较小的M值,某些乘法器和部分加法器没 有被利用。因此,本文所述的实施例关于至NNU 121的神经元的连接输入数 具有灵活与高效的益处,并且提供极高的性能。
NPU 126包括寄存器205、2输入复用寄存器(mux-reg)208、算术逻辑单 元(ALU)204、累加器202、以及激活函数单元(AFU)212。寄存器205从权重 RAM 124接收权重字206并在后续时钟周期中提供其输出203。复用寄存器 208选择输入207或211其中之一,以储存在其寄存器中然后在后续时钟周期 中提供于输出209上。一个输入207接收来自数据RAM 122的数据字。另一输 入211接收相邻NPU 126的输出209。图2所示的NPU 126在图1的N个NPU126 中被标示为NPU J。也就是说,NPU J是N个NPU 126的代表性实例。优选地, NPU J的复用寄存器208的输入211接收NPU 126的实例J-1的复用寄存器208 的输出209,并且NPU J的复用寄存器208的输出209被提供给NPU 126的实例 J+1的复用寄存器208的输入211。如此,如以下针对图3更详细所述,N个NPU 126的复用寄存器208作为N字轮转器或循环移位器整体操作。控制输入213 控制这两个输入中的哪一个被复用寄存器208选择以储存于寄存器中并后续 提供于输出209上。
ALU 204具有三个输入。一个输入从寄存器205接收权重字203。另一输 入接收复用寄存器208的输出209。再一个输入接收累加器202的输出217。 ALU 204对其输入执行算术和/或逻辑运算以产生提供于其输出上的结果。优 选地,ALU 204所执行的算术和/或逻辑运算由储存于程序存储器129的指令 指定。例如,图4的乘法累加指令指定乘法累加运算,即,结果215是权重字 203以及复用寄存器208的输出209的数据字的乘积与累加器202的值217的总 和。可以指定的其它运算包括但不限于:结果215是复用寄存器输出209的通过值;结果215是权重字203的通过值;结果215是零;结果215是权重字203 的通过值;结果215是累加器202的值217与权重字203的总和;结果215是累 加器202的值217与复用寄存器的输出209的总和;结果215是累加器202的值 217与权重字203的最大值;结果215是累加器202的值217与复用寄存器的输 出209的最大值。
ALU 204将输出215提供至累加器202以储存在该累加器202中。ALU 204 包括乘法器242,其用于将权重字203与复用寄存器208的输出209的数据字相 乘以产生一乘积246。在一个实施例中,乘法器242将两个16位操作数相乘以 产生32位结果。ALU 204还包括加法器244,其用于将乘积246与累加器202 的输出217相加以产生一总和,该总和为在累加器202中累加以供储存于累加 器202中的结果215。在一个实施例中,加法器244将乘法器242的32位结果与 累加器202的41位值217相加以产生41位结果。如此,通过在多个时钟周期的过程中使用复用寄存器208的轮转器方面,NPU 126完成神经网络所需的针对 神经元的乘积的相加。ALU 204还可以包括其它电路元件来执行如前所述的 其它算术/逻辑运算。在一个实施例中,第二加法器从复用寄存器208的输出209的数据字中减去权重字203以产生一差值,然后加法器244将该差值与累 加器202的输出217相加以产生总和215,该结果即为累加器202内累加的结 果。如此,在多个时钟周期的过程中,NPU 126可以完成差值的相加。优选 地,如以下更详细所述,虽然权重字203与数据字209的大小相同(以位为单 位),但也可具有不同的二进制小数点位置。优选地,如以下更详细所述, 乘法器242与加法器244为整数乘法器与加法器,以有利地实现与浮点乘法器 和加法器相比复杂度更低、更小、更快速且耗能更低的ALU 204。然而,应 当理解,在其它实施例中,ALU 204执行浮点运算。
虽然图2仅示出ALU 204内的乘法器242和加法器244,但是优选地,该 ALU 204包括其它元件来执行上述的其它运算。例如,ALU 204优选包括用 于将累加器202与数据/权重字进行比较的比较器(未示出)以及用于选择比较 器所指示的两个值中较大者(最大值)以储存于累加器202中的复用器(未示 出)。再例如,ALU 204优选包括选择逻辑(未示出),其用于使数据/权重字跳 过乘法器242以使得加法器244能够将数据/权重字与累加器202的值217相加 以产生用于储存于累加器202中的总和。这些附加运算在以下(例如针对图18至图29A)更详细地说明,并且可以用于执行例如卷积运算和池化运算。
AFU 212接收累加器202的输出217。AFU 212对累加器202的输出217执 行激活函数以产生图1的结果133。一般而言,人工神经网络的中间层的神经 元内的激活函数可用来优选地采用非线性的方式使乘积的累加和标准化。为 了使累加和“标准化”,当前神经元的激活函数在连接至当前神经元的其它 神经元预期作为输入而接收到的值的范围内产生结果值。(标准化结果有时 称为“激活值”,如本文所述,激活值是当前节点的输出,而接收节点将该 输出乘以与输出节点和接收节点之间的连接相关联的权重以产生一乘积,而 该乘积与关联于至所述接收节点的其它输入连接的其它乘积累加。)例如, 接收/所连接神经元预期接收0与1之间的值作为输入,在这种情况下,输出神 经元可能需要将在0~1范围之外的累加和非线性地挤压和/或调整(例如向上 移位以将负值转换为正值)为预期范围内的值。因此,AFU 212对累加器202 的值217执行运算以使结果133进入已知范围内。所有N个NPU 126的结果133 可被并行地写回数据RAM 122或权重RAM 124。优选地,AFU 212被配置为 执行多个激活函数,并且例如来自控制寄存器127的输入选择这些激活函数 之一以对累加器202的输出217执行。激活函数可以包括但不限于接跃函数 (step function)、校正函数(rectify function)、S型函数(sigmoid function)、双曲 正切(tanh)函数(hyperbolic tangent function)以及软加函数(softplus function)(也称为平滑校正函数)。软加函数是解析函数f(x)=f(x)=ln(1+ex), 即1与ex的总和的自然对数,其中“e”是欧拉(Euler)数,并且x是函数的输入 217。优选地,如以下更详细所述,激活函数还可以包括通过累加器202的值 217或其一部分的通过(pass-through)函数。在一个实施例中,AFU212的电路 在单个时钟周期内执行激活函数。在一个实施例中,AFU 212包括表格,所 述表格接收累加值并针对某些激活函数(例如S型函数、双曲正切函数、软加 函数等)输出与真正的激活函数将提供的值相近似的值。
优选地,累加器202的宽度(以位为单位)大于AFU 212的输出133的宽度。 例如,在一个实施例中,累加器的宽度为41位,以避免对(如以下例如针对 图30更详细所述的)多达512个32位乘积的累加的精度损失,并且结果133的 宽度为16位。在以下针对图8更详细地描述了其示例的一个实施例中,在后 续时钟周期期间,“原始”累加器202的输出217值的不同部分通过AFU 212, 并且被写回数据RAM 122或权重RAM 124。这样使得能够经由MFNN指令将 原始累加器202的值加载回媒体寄存器118,如此处理器100的其它执行单元 112上执行的指令可以执行AFU 212无法执行的诸如众所周知的软极大(softmax)激活函数等的复杂激活函数(也称为标准化指数函数)。在一个实施 例中,处理器100的指令集架构包括执行指数函数的指令,通常称为ex或 exp(x),该指令可以用来加快处理器100的其它执行单元112对软极大激活函 数的执行。
在一个实施例中,NPU 126为流水线设计。例如,NPU 126可包括ALU 204的寄存器(诸如位于乘法器与加法器和/或ALU 204的其它电路之间的寄 存器)以及保持AFU 212的输出的寄存器等。以下描述了NPU 126的其它实施 例。
现参考图3,示出一框图,该框图示出图1的NNU 121的N个NPU 126的N 个复用寄存器208的布置的实施例,从而说明N个复用寄存器作为针对从图1 的数据RAM 122接收到的一行数据字207的N字轮转器或循环移位器的操作。 在图3的实施例中,N是512,使得NNU121具有如图所示与512个NPU 126相 对应的标示为0至511的512个复用寄存器208。每个复用寄存器208接收数据 RAM 122的D行中的一行上的相应的数据字207。也就是说,复用寄存器0接 收数据RAM 122的行中的数据字0,复用寄存器1接收数据RAM 122的行中的 数据字1,复用寄存器2接收数据RAM 122的行中的数据字2,依此类推,复 用寄存器511接收数据RAM 122的行中的数据字511。此外,复用寄存器1在 另一输入211上接收复用寄存器0的输出209,复用寄存器2在另一输入211上 接收复用寄存器1的输出209,复用寄存器3在另一输入211上接收复用寄存器 2的输出209,依此类推,复用寄存器511在另一输入211上接收复用寄存器510 的输出209,而复用寄存器0在另一输入211上接收复用寄存器511的输出209。每个复用寄存器208接收控制输入213,其用于控制是选择数据字207还是选 择轮转输入211。如以下更详细所述,在一个操作模式中,在第一时钟周期 内,控制输入213控制各复用寄存器208选择数据字207以储存在寄存器中并 后续提供给ALU 204;以及在后续的时钟周期(例如,如上所述的M-1个时钟 周期)期间,控制输入213控制各复用寄存器208选择轮转输入211以储存在寄 存器中并后续提供给ALU 204。
尽管在图3(以及以下的图7和图19)所描述的实施例中,NPU 126被配置 为将复用寄存器208/705的值向右轮转、即从NPU J到NPU J+1,但是设想了 如下的实施例(诸如针对图24至图26的实施例等),其中NPU 126被配置为将 复用寄存器208/705的值向左轮转,即从NPU J到NPU J-1。此外,设想了如 下的实施例,其中NPU 126被配置为选择性地将复用寄存器208/705的值向左 或向右轮转,例如由NNU指令指定。
现参考图4,示出一表格,该表格示出用于储存在图1的NNU 121的程序 存储器129中并由该NNU 121执行的程序。如上所述,示例性程序执行与人 工神经网络的层相关联的计算。在图4的表格中,示出五行与三列。每一行 对应于程序存储器129中的标示于第一行的地址。第二列指定指令,并且第 三列表示与该指令相关联的时钟周期数。优选地,时钟周期数表示在流水线 实施例中每指令时钟类型值中有效的时钟数,而非指令的延迟。如图所示, 因为NNU 121的流水线的本质,因此各指令均有相关联的一个时钟周期,其 中位于地址2的指令是一个例外,如以下更详细所述,由于该指令实际上自 己重复511次,因而需要511个时钟。
针对程序的各指令,所有的NPU 126并行处理该指令。也就是说,所有 的N个NPU126都在同一个(或多个)时钟周期中执行第一行中的指令,所有的 N个NPU 126都在同一个(或多个)时钟周期中执行第二行中的指令,依此类 推。然而,以下描述了其它实施例,其中有些指令是以部分并行且部分循序 的方式执行的,例如,在例如针对图11的实施例那样NPU 126共享激活函数 单元的实施例中,分别位于地址3与4的激活函数和输出指令即是以此方式执 行。图4的示例假定一层具有512个神经元(NPU 126),而每个神经元具有来 自先前层的512个神经元的512个连接输入,总共有256K个连接。每个神经元 从各连接输入接收16位数据值,并将该16位数据值乘以适当的16位权重值。
位于地址0(尽管也可指定其它地址)的第一行指定初始化NPU指令。该初 始化指令将累加器202的值清零。在一个实施例中,初始化指令也可指定向 累加器202加载数据RAM 122或权重RAM 124的一行中由该指令指定地址的 相应字。如以下针对图29A和图29B更详细所述,该初始化指令还将配置值 加载到控制寄存器127中。例如,可以加载数据字207与权重字209的宽度, 其中所述宽度可由ALU 204使用以确定电路所执行的运算的大小、并且可以 影响储存于累加器202中的结果215。在一个实施例中,NPU 126包括用于在ALU 204的输出215储存于累加器202之前使该输出215饱和的电路,并且初 始化指令将配置值加载到该电路中以影响饱和。在一个实施例中,还可以通 过在ALU函数指令(例如,地址1处的乘法累加指令)或输出指令(诸如地址4 处的写入AFU输出指令)中如此指定,来将累加器202清除为零值。
位于地址1的第二行指定乘法累加指令,其中该乘法累加指令指示512个 NPU 126从数据RAM 122的一行加载相应的数据字并从权重RAM 124的一 行加载相应的权重字,并且对数据字输入207与权重字输入206执行第一乘法 累加运算,该第一乘法累加运算是在以初始化累加器202为零值的状态下进 行累加的。更具体地,该指令指示定序器128在控制输入213上产生值以选择 数据字输入207。在图4的示例中,所指定的数据RAM 122的行是行17,并且 所指定的权重RAM 124的行是行0,从而指示定序器128输出数据RAM地址 123的值17并且输出权重RAM地址125的值0。因此,来自数据RAM 122的行 17的512个数据字被提供至512个NPU 126的相应数据输入207,并且来自权重 RAM 124的行0的512个权重字被提供至512个NPU 126的相应权重输入206。
位于地址2的第三行指定计数为511的乘法累加轮转指令,该指令指示这 512个NPU 126中的各NPU 126执行511次乘法累加运算。该指令向这512个 NPU 126指示在511次乘法累加运算的每一次运算中输入ALU 204的数据字 209是来自相邻NPU 126的轮转值211。也就是说,该指令指示定序器128在控 制输入213上产生值以选择轮转值211。此外,该指令指示这512个NPU 126 从权重RAM 124的“下一”行加载针对511次乘法累加运算的每一次运算的 相应权重值。也就是说,该指令指示定序器128使权重RAM地址125相对于其 在前一时钟周期中的值加1,在该示例中,指令的第一时钟周期是行1,下一 个时钟周期是行2,再下一个时钟周期是行3,依此类推,第511个时钟周期 是行511。针对这511个乘法累加运算中的每一个运算,将轮转输入211和权 重字输入206的乘积与累加器202的先前值累加。这512个NPU 126在511个时 钟周期内执行511次乘法累加运算,其中各NPU 126对来自数据RAM 122的行 17的不同数据字即相邻NPU 126在先前周期执行运算的数据字以及在概念上为神经元的不同连接输入的与该数据字相关联的不同权重字执行乘法累加 运算。在该示例中,假设各个NPU 126(神经元)的连接输入的数量为512,因 此涉及512个数据字与512个权重字。一旦执行了对行2的乘法累加轮转指令 的最后一次迭代,累加器202就包含全部512个连接输入的乘积的总和。在一 个实施例中,NPU 126的指令集包括用于指示ALU 204执行由初始化NPU指 令指定(诸如在图29A的ALU函数2926中指定)的ALU运算的“执行”指令, 而非对于各类型的ALU运算(例如,如上所述的乘法累加、累加器与权重字 的求最大等)具有单独的指令。
位于地址3的第四行指定激活函数指令。激活函数指令指示AFU 212对于 累加器202的值217执行指定的激活函数以产生结果133。以下更详细说明了 根据一个实施例的激活函数。
位于地址4的第五行指定写入AFU输出指令,其用于指示512个NPU 126 将AFU 212的输出作为结果133写回至数据RAM 122的一行(在该示例中为行 16)。也就是说,该指令指示定序器128输出值为16的数据RAM地址123以及 写入命令(与在地址1处的乘法累加指令的情况下的读取命令相对)。优选地, 在流水线的本质下,写入AFU输出指令的执行可与其它指令的执行重叠,使 得写入AFU输出指令实际上在单个时钟周期内执行。
优选地,每个NPU 126被配置为流水线,其中该流水线包括各种功能元 件,例如复用寄存器208(以及图7的复用寄存器705)、ALU 204、累加器202、 AFU 212、(图8的)复用器802、行缓存器1104以及(图11的)AFU 1112等,其中 这些功能元件中的一些本身即可以是流水线式的。除了数据字207与权重字 206外,流水线还从程序存储器129接收指令。这些指令沿着流水线流动并控 制各种功能单元。在备选实施例中,程序内不包含激活函数指令。相反,初 始化NPU指令指定要对累加器202的值217执行的激活函数,并且指出所指定 的激活函数的值被保存在配置寄存器中,从而稍后在已经产生最后的累加器 202值217后,也就是在地址2处的乘法累加轮转指令的最后一次迭代完成后, 由流水线的AFU 212部分使用。优选地,为了节能目的,流水线的AFU 212 部分是不活动的,直到写入AFU输出指令到达该AFU 212部分为止,此时AFU 212启动并对初始化指令所指定的累加器202的输出217执行激活函数。
现参考图5,示出一时序图,该时序图示出NNU 121对图4的程序的执行。 该时序图的每一行对应于第一行指出的连续时钟周期。其它各列对应于512 个NPU 126中的不同的一个NPU 126并指示其运算。为了使说明简单且清楚, 仅示出NPU 0、1和511的运算。
在时钟0处,512个NPU 126中的每一个NPU 126执行图4的初始化指令, 其中该初始化指令在图5中是通过将零值指派给累加器202来示出的。
在时钟1处,512个NPU 126中的每一个NPU 126执行图4中地址1处的乘 法累加指令。如图所示,NPU 0将数据RAM 122的行17的字0与权重RAM 124 的行0的字0的乘积与累加器202的值(即零)累加;NPU 1将数据RAM 122的行 17的字1与权重RAM 124的行0的字1的乘积与累加器202的值(即零)累加;依 此类推,NPU 511将数据RAM 122的行17的字511与权重RAM 124的行0的字 511的乘积与累加器202的值(即零)累加。
在时钟2处,512个NPU 126中的每一个NPU 126执行图4中地址2处的乘 法累加轮转指令的第一次迭代。如图所示,NPU 0将从NPU 511的复用寄存 器208的输出209接收到的轮转数据字211(即从数据RAM 122接收到的数据 字511)与权重RAM 124的行1的字0的乘积与累加器202的值累加;NPU 1将从 NPU 0的复用寄存器208的输出209接收到的轮转数据字211(即从数据RAM 122接收到的数据字0)与权重RAM 124的行1的字1的乘积与累加器202的值 累加;依此类推,NPU 511将从NPU 510的复用寄存器208的输出209接收到 的轮转数据字211(即从数据RAM 122接收到的数据字510)与权重RAM 124的 行1的字511的乘积与累加器202的值累加。
在时钟3处,512个NPU 126中的每一个NPU 126执行图4中地址2处的乘 法累加轮转指令的第二次迭代。如图所示,NPU 0将从NPU 511的复用寄存 器208的输出209接收到的轮转数据字211(即从数据RAM 122接收到的数据 字510)与权重RAM 124的行2的字0的乘积与累加器202的值累加;NPU 1将从 NPU 0的复用寄存器208的输出209接收到的轮转数据字211(即从数据RAM 122接收到的数据字511)与权重RAM 124的行2的字1的乘积与累加器202的 值累加;依此类推,NPU 511将从NPU 510的复用寄存器208的输出209接收 到的轮转数据字211(即从数据RAM 122接收到的数据字509)与权重RAM 124 的行2的字511的乘积与累加器202的值累加。如图5的省略号所示,接下来的509个时钟周期各自依此持续进行,直到时钟512。
在时钟512处,512个NPU 126中的每一个NPU 126执行图4中地址2处的 乘法累加轮转指令的第511次迭代。如图所示,NPU 0将从NPU 511的复用寄 存器208的输出209接收到的轮转数据字211(即从数据RAM 122接收到的数 据字1)与权重RAM 124的行511的字0的乘积与累加器202的值累加;NPU 1 将从NPU 0的复用寄存器208的输出209接收到的轮转数据字211(即从数据 RAM 122接收到的数据字2)与权重RAM 124的行511的字1的乘积与累加器 202的值累加;依此类推,NPU 511将从NPU 510的复用寄存器208的输出209 接收到的轮转数据字211(即从数据RAM 122接收到的数据字0)与权重RAM 124的行511的字511的乘积与累加器202的值累加。在一个实施例中,需要多 个时钟周期从数据RAM 122与权重RAM124读取数据字与权重字以执行图4 中地址1处的乘法累加指令;然而,数据RAM 122、权重RAM 124和NPU 126 是流水线式的,使得一旦第一乘法累加运算开始(例如,如图5的时钟1期间 所示),就在连续的的时钟周期内开始后续的乘法累加运算(例如,如时钟 2-512期间所示)。优选地,响应于利用架构指令(例如MTNN或MFNN指令, 在后续针对图14和图15进行说明)或架构指令转译成的微指令对于数据RAM 122和/或权重RAM 124的访问,NPU 126可以暂时搁置。
在时钟513处,512个NPU 126中的每一个NPU 126的AFU 212执行图4中 地址3处的激活函数指令。最后,在时钟514处,这512个NPU 126中的每一个 NPU 126通过将结果133写回数据RAM 122的行16中的相应字,即将NPU 0的 结果133写入数据RAM 122的字0,将NPU 1的结果133写入数据RAM 122的 字1,依此类推,直到将NPU 511的结果133写入数据RAM 122的字511,来执 行图4的地址4处的写入AFU输出指令。以上针对图5所述的运算也在图6A中以框图的形式示出。
现参考图6A,示出一框图,该框图示出图1的NNU 121对图4的程序的执 行。NNU121包括512个NPU 126、接收地址输入123的数据RAM 122、以及 接收地址输入125的权重RAM 124。尽管未示出,但在时钟0处,512个NPU 126 执行初始化指令。如图所示,在时钟1处,行17的512个16位数据字被从数据 RAM 122读出并提供至512个NPU 126。在时钟1至512处,行0至511的512个 16位权重字分别被从权重RAM 124读出并提供至512个NPU 126。尽管未示 出,但在时钟1处,512个NPU 126对加载的数据字和权重字执行相应的乘法 累加运算。在时钟2至512处,512个NPU 126的复用寄存器208作为512个16 位字的轮转器操作以将先前加载的数据RAM 122的行17的数据字轮转至相 邻的NPU 126,并且NPU 126对轮转后的各数据字以及从权重RAM 124加载 的各权重字执行乘法累加运算。尽管未示出,但在时钟513处,512个AFU 212 执行激活指令。在时钟514处,512个NPU 126将相应的512个16位结果133写 回数据RAM 122的行16。
可以发现,产生结果字(神经元输出)并写回数据RAM 122或权重RAM 124所需的时钟数大致为神经网络的当前层所接收到的数据输入(连接)数量 的平方根。例如,如果当前层包括各自具有来自先前层的512个连接的512个 神经元,则这些连接的总和是256K,并且产生当前层的结果所需的时钟数略 超过512。因此,NNU 121为神经网络计算提供了极高的性能。
现参考图6B,示出一流程图,该流程图示出图1的处理器100执行架构程 序的操作,所述架构程序使用NNU 121来执行典型地与人工神经网络的隐藏 层的神经元相关联的乘法累加激活函数计算(诸如图4的程序所执行的运算 等)。图6B的示例假定四个隐藏层(通过方框602的NUM_LAYERS变量的初始 化来标示)的计算,各个隐藏层具有512个神经元,各个神经元连接先前层全 部的512个神经元(通过图4的程序)。然而,应当理解,这些层和神经元的数 量是为了说明目的而选择的,并且NNU 121可用于针对不同数量的隐藏层、 每一层中不同数量的神经元以及未全部连接的神经元执行相同的计算。在一 个实施例中,对于这一层中不存在的神经元或者至神经元的不存在的连接, 权重值可被设置为零。优选地,架构程序将第一组权重写入权重RAM 124并 启动NNU 121,并且在NNU 121正执行与第一层相关联的计算时,此架构程 序将第二组权重写入权重RAM 124,使得一旦NNU 121完成第一隐藏层的计 算,NNU 121就可以开始第二层的计算。如此,架构程序往返于权重RAM124 的两个区域之间,以确保NNU 121被充分利用。流程始于方框602。
在方框602处,如针对图6A所示和所述,处理器100(即运行在处理器100 上的架构程序)将输入值写入数据RAM 122的当前神经元隐藏层,例如写入 数据RAM 122的行17。可选地,这些值也可能已经在数据RAM 122的行17 中作为NNU 121针对先前层(例如,卷积、池化或输入层)的运算结果133。此 外,架构程序将变量N初始化为值1。变量N标示隐藏层中正由NNU 121处理 的当前层。此外,架构程序将变量NUM_LAYERS初始化为值4,这是因为在 本示例中存在四个隐藏层。流程进入方框604。
在方框604处,如图6A所示,处理器100将层1的权重字写入权重RAM 124,例如写入行0至511。流程进入方框606。
在方框606处,处理器100使用指定对程序存储器129进行写入的函数 1432的MTNN指令1400,将(例如,图4的)乘法累加激活函数程序写入NNU 121的程序存储器129。处理器100随后利用指定开始执行程序的函数1432的 MTNN指令1400来启动NNU程序。流程进入决策方框608。
在决策方框608处,架构程序确定变量N的值是否小于NUM_LAYERS。 如果是,则流程进入方框612;否则进入方框614。
在方框612处,处理器100将层N+1的权重字写入权重RAM 124,例如写 入行512至1023。因此,有利地,架构程序在NNU 121正执行当前层的隐藏 层计算时将下一层的权重字写入权重RAM 124,使得一旦完成当前层的计 算,即写入数据RAM 122后,NNU 121就可以立刻开始执行下一层的隐藏层 计算。流程进入方框614。
在方框614处,处理器100确定为(在层1的情况下,在方框606处开始的, 在层2至4的情况下,则是在方框处618开始的)当前运行的NNU程序已经完 成。优选地,处理器100通过执行MFNN指令1500读取NNU 121的状态寄存 器127来对此进行确定。在备选实施例中,NNU 121产生一中断以表示其已 经完成乘法累加激活函数层程序。流程进入决策方框616。
在决策方框616处,架构程序确定变量N的值是否小于NUM_LAYERS。 如果是,流程进入方框618;否则流程进入方框622。
在方框618处,处理器100更新乘法累加激活函数程序,使得该处理器可 以执行层N+1的隐藏层计算。更具体地,处理器100将图4的地址1处的乘法累 加指令的数据RAM 122的行值更新为先前层的结果所写入的数据RAM 122 行(例如,更新为行16),并且还更新输出行(例如,更新为行15)。处理器100 随后开始更新后的NNU程序。可选地,图4的程序在地址4的输出指令中指定 与地址1处的乘法累加指令所指定的行(即,从数据RAM 122读取的行)相同的 行。在该实施例中,输入数据字的当前行被覆写(由于此行数据字已经被读 入复用寄存器208并经由N字轮转器在这些NPU 126间进行轮转,因此只要这 行数据字无需用于其它目的,这样的处理方式就是可接受的)。在这种情况 下,在方框618处,无需更新NNU程序,而只需要重新开始NNU程序。流程 进入方框622。
在方框622处,处理器100从数据RAM 122读取层N的NNU程序的结果。 然而,如果这些结果仅被用于下一层,则架构程序就无需从数据RAM 122读 取这些结果,作为代替可将其保留在数据RAM 122中以用于下一个隐藏层计 算。流程进入决策方框624。
在决策方框624处,架构程序确定变量N的值是否小于NUM_LAYERS。 如果是,则流程进入方框626;否则流程结束。
在方框626处,架构程序使N加一。流程返回决策方框608。
如可以从图6B的示例中确定,大致上每512个时钟周期,NPU 126(借助 于图4的NNU程序的操作)对数据RAM 122执行一次读取和一次写入。此外, NPU 126大致每时钟周期对权重RAM 124进行读取以读取一行权重字。因此, 权重RAM 124的全部带宽都被NNU 121执行隐藏层运算所用的混合方式消 耗。此外,假定实施例包括写入和读取缓存器(诸如图17的缓存器1704等), 与NPU 126进行读取并行地,处理器100写入权重RAM 124,使得缓存器1704 大致每16个时钟周期对权重RAM 124执行一次写入以写入权重字。因此,在 权重RAM 124的单一端口的实施例中(诸如针对图17所述的实施例等),大致 每16个时钟周期,NPU 126就必须暂时搁置对权重RAM 124的读取,从而使 得缓存器1704能够对权重RAM 124进行写入。然而,在权重RAM 124为双端 口的实施例中,NPU 126无需搁置。
现参考图7,示出一框图,该框图示出根据备选实施例的图1的NPU 126。 图7的NPU126在许多方面与图2的NPU 126类似。然而,图7的NPU 126另外 包括第二2输入复用寄存器705。该复用寄存器705选择输入206或711其中之 一,以储存在寄存器中然后在后续时钟周期提供于输出203上。输入206从权 重RAM 124接收权重字。另一输入711接收相邻NPU 126的第二复用寄存器 705的输出203。优选地,NPU J的复用寄存器705的输入711接收NPU 126实 例J-1的复用寄存器705的输出203,并且NPU J的输出被提供至NPU 126实例 J+1的复用寄存器705的输入711。如此,与以上针对图3所述的方式相同,N 个NPU 126的复用寄存器705整体操作为N字轮转器,但是针对的是权重字而 非数据字。控制输入713控制这两个输入中的哪一个被复用寄存器705选择, 以储存于寄存器中并在后续提供于输出203上。
包括复用寄存器208和/或复用寄存器705(以及诸如图18和图23所示等的 其它实施例中的复用寄存器)以实际上形成用于将从数据RAM 122和/或权重 RAM 124接收到的一行数据/权重进行轮转的大型轮转器具有如下的优点: NNU 121不需要其他方面所需的在数据RAM 122和/或权重RAM 124之间的 极大复用器来向适当的NNU 121提供必要的数据字/权重字。
除激活函数结果外还写回累加器值
在一些应用中,处理器100接收回(例如经由图15的MFNN指令接收至媒 体寄存器118)原始的累加器202的值217是有用的,其中在其它执行单元112 上执行的指令可以对这些累加器202的值217执行计算。例如,在一个实施例 中,为了降低AFU 212的复杂度,AFU212不被配置为执行软极大激活函数。 因此,NNU 121可以将原始的累加器202的值217或其子集输出至数据RAM 122或权重RAM 124,而架构程序随后从数据RAM 122或权重RAM 124读取 该原始的累加器202的值217或其子集并对原始值进行计算。然而,对原始的 累加器202的值217的应用不限于软极大运算的执行,还可以设想其它应用。
现参考图8,示出一框图,该框图示出根据备选实施例的图1的NPU 126。 图8的NPU126在许多方面与图2的NPU 126类似。然而,图8的NPU 126在AFU 212内包括复用器(mux)802,其中AFU 212具有控制输入803。累加器202的 宽度(以位为单位)大于数据字的宽度。复用器802具有用于接收累加器202的 输出217的数据字宽度部分的多个输入。在一个实施例中,累加器202的宽度 为41位,而NPU 126被配置为输出16位的结果字133;因此,例如,复用器 802(或图30的复用器3032和/或复用器3037)具有分别用于接收累加器202的 输出217的位[15:0]、位[31:16]与位[47:32]的三个输入。优选地,并非由 累加器202提供的输出位(例如位[47:41])被强制设定为零值位。
响应于写入ACC指令(例如下述的图9的地址3至5处的写入ACC指令 等),定序器128在控制输入803上产生值以控制复用器802选择累加器202的 字(例如,16位)其中之一。优选地,复用器802还具有用于接收激活函数电路 (例如,图30中的元件3022、3024、3026、3018、3014与3016)的输出的一个 或多个输入,其中这些激活函数电路产生作为数据字的宽度的输出。响应于 诸如图4的地址4处的写入AFU输出指令等的指令,定序器128在控制输入803 上产生一个值以控制复用器802选择这些激活函数电路输出其中之一,而非 累加器202的字其中之一。
现参考图9,示出一表格,该表格示出用于储存于图1的NNU 121的程序 存储器129中并由该NNU 121执行的程序。图9的示例性程序在许多方面与图 4的程序类似。具体地,地址0至2处的指令是相同的。然而,图4的地址3与4 处的指令在图9中被替换为写入ACC指令,其指示512个NPU 126将其累加器 202的输出217作为结果133写回数据RAM 122的三行(在本示例中为行16至 18)。也就是说,写入ACC指令指示定序器128在第一时钟周期内输出值为16 的数据RAM地址123以及写入命令,在第二时钟周期内输出值为17的数据 RAM地址123以及写入命令,并且在第三时钟周期内输出值为18的数据RAM 地址123以及写入命令。优选地,写入ACC指令的执行可能与其它指令的执 行重叠,使得写入ACC指令实际在三个时钟周期内执行,其中针对写入数据 RAM 122的每一行为一个时钟周期。在一个实施例中,用户指定激活函数 2934和(图29A的)控制寄存器127中的输出命令2956字段的值,以完成将累加器202的期望部分写入数据RAM 122或权重RAM 124。可选地,写入ACC指 令可以可选地将累加器202的子集写回,而非将累加器202的全部内容写回。 在一个实施例中,如以下针对图29至图31更详细所述,可以将标准型累加器 202写回。
现参考图10,示出一时序图,该时序图示出NNU 121对图9的程序的执 行。图10的时序图与图5的时序图类似,并且时钟0至512是相同的。然而, 在时钟513-515处,512个NPU126中的每个NPU 126的AFU 212执行图9的地 址3至5处的写入ACC指令其中之一。具体地,在时钟513处,512个NPU 126 中的每一个NPU 126将累加器202的输出217的位[15:0]作为结果133写回数 据RAM 122的行16中的相应字;在时钟514处,512个NPU 126中的每一个NPU126将累加器202的输出217的位[31:16]作为结果133写回数据RAM 122的行 17中的相应字;而在时钟515处,512个NPU 126中的每一个NPU 126将累加 器202的输出217的位[40:32]作为结果133写回数据RAM 122的行18中的相应 字。优选地,位[47:41]被强制设定为零值。
共享AFU
现参考图11,示出一框图,该框图示出图1的NNU 121的实施例。在图 11的实施例中,神经元分成两部分,即激活函数单元部分与ALU部分(ALU 部分还包含移位寄存器部分),并且各个激活函数单元部分由多个ALU部分 共享。在图11中,ALU部分是指NPU 126,而共享的激活函数单元部分是指 AFU 1112。这与图2的实施例形成对比,例如,在图2的实施例中,各个神经 元包含其自身的AFU 212。因此,例如,在一个实施例中,图11的实施例的NPU 126(ALU部分)包括图2的累加器202、ALU 204、复用寄存器208与寄存 器205,但不包括AFU 212。在图11的实施例中,NNU 121作为示例而包括512 个NPU 126;然而,设想了具有其它数量的NPU 126的其它实施例。在图11 的示例中,这512个NPU 126被分组成64个组(在图11中被称为组0至63),并 且每个组具有8个NPU 126。
NNU 121还包括行缓存器1104以及耦接在NPU 126和行缓存器1104之间 的多个共享AFU 1112。行缓存器1104的宽度(以位为单位)与数据RAM 122或 权重RAM 124的行相同,例如为512个字。针对每一个NPU 126组存在一个 AFU 1112,即,每个AFU 1112具有相应的NPU 126组;因此,在图11的实施 例中,存在与64个NPU 126组相对应的64个AFU 1112。组内的8个NPU 126 中的各NPU 126共享相应的AFU 1112。设想了具有不同数量的AFU 1112以及每组中具有不同数量的NPU 126的其他实施例。例如,设想了组中的两个、 四个或十六个NPU 126共享AFU 1112的其它实施例。
共享AFU 1112的动机是为了缩减NNU 121的大小。大小缩减是以性能降 低为代价而获得的。也就是说,例如,如下图12所展示那样,根据共享率可 能需要更长的若干时钟来产生整个NPU 126阵列的结果133,在这种情况下, 由于8:1的共享率,因而需要七个额外的时钟周期。然而,一般而言,与产 生累加和所需的时钟数(例如,对于每个神经元具有512个连接的层,需要512 个时钟)相比,前述额外的时钟数(例如7个)相对较少。因此,相对较小的性 能影响(例如,增加百分之一的计算时间)对于NNU 121的大小缩减而言可以 是一个合算的妥协。
在一个实施例中,每一个NPU 126包括AFU 212,其中AFU 212用于执行 相对简单的激活函数,从而使得这些简单的AFU 212能够相对较小并因此能 被包含在每个NPU 126内;而共享的或复杂的AFU 1112执行相对复杂的激活 函数,因此相对显著地大于简单的AFU 212。在这样的实施例中,只有在指 定需要共享复杂AFU 1112的复杂激活函数的情况下才需要额外的时钟周期, 而在指定由简单AFU 212配置执行的激活函数的情况下则不需要。
现参考图12与图13,示出两个时序图,这些时序图示出图11的NNU 121 对图4的程序的执行。图12的时序图与图5的时序图类似,并且时钟0至512相 同。然而,在时钟513处,运算与图5的时序图中所述的运算不同,这是因为 图11的NPU 126共享AFU 1112;即,组中的NPU 126共享与该组相关联的AFU 1112,并且图11示出共享。
图13的时序图的每一行与第一列中所指示的连续时钟周期相对应。其它 各列与64个AFU 1112中不同的AFU 1112相对应并指示其运算。为了简单清 楚地进行图示,仅示出AFU 0、1和63的运算。图13的时钟周期与图12的时钟 周期相对应,但以不同的方式示出NPU126对AFU 1112的共享。如图13所示, 在时钟0~512处,64个AFU 1112中的每一个AFU 1112都是处于不活动状态, 而NPU 126执行初始化NPU指令、乘法累加指令以及乘法累加轮转指令。
如图12和图13这两者所示,在时钟513处,AFU 0(与组0相关联的AFU 1112)开始对NPU 0(即组0中的第一个NPU 126)的累加器202的值217执行指 定的激活函数,而AFU 0的输出将被储存至行缓存器1104的字0。同样在时钟 513处,各AFU 1112都开始对相应的NPU126组中的第一个NPU 126的累加器 202执行指定的激活函数。因此,如图13所示,在时钟513处,AFU 0开始对 NPU 0的累加器202执行指定的激活函数以产生将被储存至行缓存器1104的 字0的结果;AFU 1开始对NPU 8的累加器202执行指定的激活函数以产生将 被储存至行缓存器1104的字8的结果;依此类推,AFU 63开始对NPU 504的 累加器202执行指定的激活函数以产生将被储存至行缓存器1104的字504的 结果。
如图所示,在时钟514处,AFU 0(与组0相关联的AFU 1112)开始对NPU 1(即组0中的第二个NPU 126)的累加器202的值217执行指定的激活函数,并 且AFU 0的输出将被储存至行缓存器1104的字1。同样在时钟514处,各AFU 1112都开始对相应的NPU 126组中的第二个NPU 126的累加器202执行指定 的激活函数。因此,如图13所示,在时钟514处,AFU 0开始对NPU 1的累加 器202执行指定的激活函数以产生将被储存至行缓存器1104的字1的结果;AFU 1开始对NPU 9的累加器202执行指定的激活函数以产生将被储存至行 缓存器1104的字9的结果;依此类推,AFU 63开始对NPU 505的累加器202执 行指定的激活函数以产生将被储存至行缓存器1104的字505的结果。如图所 示,这种模式持续直到时钟周期520为止,AFU 0(与组0相关联的AFU 1112) 开始对NPU 7(即组0中的第八个(最后一个)NPU 126)的累加器202的值217执 行指定的激活函数,并且AFU 0的输出将被储存至行缓存器1104的字7。同样 在时钟520处,各AFU 1112都开始对相应的NPU 126组中的第八个NPU 126 的累加器202执行所指定的激活函数。因此,如图13所示,在时钟520处,AFU 0开始对NPU 7的累加器202执行指定的激活函数以产生将被储存至行缓存器 1104的字7的结果;AFU 1开始对NPU 15的累加器202执行指定的激活函数以 产生将被储存至行缓存器1104的字15的结果;依此类推,AFU 63开始对NPU 511的累加器202执行指定的激活函数以产生将被储存至行缓存器1104的字 511的结果。
在时钟521处,一旦与512个NPU 126相关联的全部512个结果都已经产生 并写入行缓存器1104,行缓存器1104就开始将其内容写入数据RAM 122或权 重RAM 124。如此,64个NPU 126组中的每一个组内的AFU 1112都执行图4 的地址3处的激活函数指令的一部分。
如以下例如针对图29A至图33更详细所述,在ALU 204组之间共享AFU 1112的实施例(诸如图11中的实施例等)与整数ALU 204结合可以是特别有利 的。
MTNN与MFNN架构指令
现参考图14,示出一框图,该框图示出向神经网络移动(MTNN)架构指 令1400以及该架构指令相对于图1的NNU 121的部分的操作。MTNN指令 1400包括操作码(opcode)字段1402、src1字段1404、src2字段1406、gpr字段1408 以及即时字段1412。MTNN指令1400为架构指令,即,该指令包含在处理器100的指令集架构内。优选地,指令集架构将操作码字段1402的预定值与 MINN指令1400进行关联,来区分MTNN指令1400与指令集架构中的其它指令。MTNN指令1400的操作码1402可以包括或可以不包括诸如常见于x86架 构中的前置码(prefix)。
即时字段1412提供用于向NNU 121的控制逻辑1434指定函数1432的值。 优选地,函数1432被提供作为图1的微指令105的即时操作数。可以由NNU 121执行的函数1432包括但不限于写入数据RAM 122、写入权重RAM 124、 写入程序存储器129、写入控制寄存器127、开始执行程序存储器129内的程 序、暂停执行程序存储器129内的程序、完成执行程序存储器129内的程序的 请求通知(例如中断)、以及重设NNU 121。优选地,NNU指令集包括其结果表示NNU程序已完成的指令。可选地,NNU指令集包括明确的产生中断的 指令。优选地,对NNU 121进行重设包括除了数据RAM 122、权重RAM 124、 程序存储器129的内容维持完整不动外,有效地强制NNU 121回到重设状态 (例如,清空内部状态机并将其设定为空闲状态)。此外,诸如累加器202等的 内部寄存器不会受到重设函数的影响,并且必须被明确地清空,例如使用图 4的地址0处的初始化NPU指令来清空。在一个实施例中,函数1432可包括直 接执行函数,其中第一源寄存器包含微操作(例如见图34的微操作3418)。该 直接执行函数指示NNU 121直接执行指定的微操作。如此,架构程序可以直 接控制NNU 121来执行运算,而非将指令写入程序存储器129并于后续指示 NNU 121执行程序存储器129内的指令或者借助于MTNN指令1400(或图15的 MFNN指令1500)的执行。图14示出写入数据RAM 122的函数1432的示例。
gpr字段1408指定通用寄存器文件116内的一个GPR。在一个实施例中, 每个GPR均为64位。如图所示,通用寄存器文件116将来自所选定的GPR的 值提供至NNU 121,NNU 121将该值用作地址1422。地址1422选择函数1432 中指定的存储器的行。在数据RAM 122或权重RAM 124的情况下,地址1422 另外选择一数据块,该数据块的大小是选定行内的媒体寄存器(例如,512位) 的位置的大小的两倍。优选地,该位置在512位边界上。在一个实施例中, 复用器选择地址1422(或者在下述的MFNN指令1400的情况下的地址1422)或 来自定序器128的地址123/125/131以提供至数据RAM 122/权重RAM 124/程 序存储器129。在一个实施例中,如以下更详细所述,数据RAM 122为双端 口的,从而使得NPU 126能够与媒体寄存器118读取/写入数据RAM 122并行 地对数据RAM 122进行读取/写入。在一个实施例中,为了类似的目的,权 重RAM 124也是双端口的。
src1字段1404与src2字段1406各自指定媒体寄存器文件118中的媒体寄 存器。在一个实施例中,每个媒体寄存器118均为256位。如图所示,媒体寄 存器文件118将来自选定的媒体寄存器的串接数据(例如,512位)提供至数据 RAM 122(或权重RAM 124或程序存储器129),以写入地址1422所指定的选定 行1428并写入选定行1428中由地址1422指定的位置。有利地,通过执行一系 列MTNN指令1400(以及下述的MFNN指令1500),处理器100上执行的架构程 序可以填充数据RAM 122的行和权重RAM 124的行,并将诸如本文所述的 (例如,图4和图9的)程序等的程序写入程序存储器129,以使NNU 121以非常 快的速度对数据和权重执行运算,从而实现人工神经网络。在一个实施例中, 架构程序直接控制NNU 121而非将程序写入程序存储器129。
在一个实施例中,MTNN指令1400指定起始源寄存器和源寄存器的数量 即Q,而非指定两个源寄存器(例如,1404和1406)。这种形式的MTNN指令 1400指示处理器100将指定为起始源寄存器的媒体寄存器118以及接下来的 Q-1个后续媒体寄存器118写入NNU 121,即写入所指定的数据RAM 122或权 重RAM 124。优选地,指令转译器104将MTNN指令1400转译为写入所有Q 个指定媒体寄存器118所需的数量的微指令。例如,在一个实施例中,当MTNN指令1400将起始源寄存器指定为MR4并且Q为8的情况下,指令转译器 104将MTNN指令1400转译为四个微指令,其中第一微指令写入MR4与MR5, 第二微指令写入MR6与MR7,第三微指令写入MR8与MR9,而第四微指令写 入MR10与MR11。在从媒体寄存器118至NNU 121的数据路径是1024位而非 512位的备选实施例中,指令转译器104将MTNN指令1400转译为两个微指 令,其中第一微指令写入MR4至MR7,第二微指令写入MR8至MR11。设想 了如下的类似实施例,其中MFNN指令1500指定起始目的地寄存器以及目的 地寄存器的数量,以使得每一个MFNN指令1500能够读取数据RAM 122或权 重RAM 124的行中的大于单个媒体寄存器118的数据块。
现参考图15,示出一框图,该框图示出从神经网络移动(MTNN)架构指 令1500以及该架构指令相对于图1的NNU 121的部分的操作。MFNN指令 1500包括操作码字段1502、dst字段1504、gpr字段1508以及即时字段1512。 MFNN指令1500为架构指令,即该指令包含于处理器100的指令集架构内。 优选地,该指令集架构将操作码字段1502的预定值与MFNN指令1500进行关 联,以区分MFNN指令1500与指令集架构内的其它指令。MFNN指令1500的 操作码1502可以包括或可以不包括诸如常见于x86架构中的前置码。
即时字段1512提供用于向NNU 121的控制逻辑1434指定函数1532的值。 优选地,函数1532被提供作为图1的微指令105的即时操作数。可以由NNU 121执行的函数1532包括但不限于读取数据RAM 122、读取权重RAM 124、 读取程序存储器129、以及读取状态寄存器127。图15示出读取数据RAM 122 的函数1532的示例。
gpr字段1508指定通用寄存器文件116内的一个GPR。如图所示,通用寄 存器文件116将来自所选定的GPR的值提供至NNU 121,其中NNU 121将该值 用作地址1522并以类似于图14的地址1422的方式操作,以选择函数1532中指 定的存储器的行,并且在数据RAM122或权重RAM 124的情况下,地址1522 另外选择一数据块,该数据块大小是选定行内的媒体寄存器(例如,256位) 的位置的大小。优选地,该位置在256位边界上。
dst字段1504指定媒体寄存器文件118中的媒体寄存器。如图所示,媒体 寄存器文件118将数据(例如,256位)从数据RAM 122(或权重RAM 124或程序 存储器129)接收至选定的媒体寄存器,此数据读取自地址1522所指定的选定 行1528以及选定行1528中的地址1522所指定的位置。
NNU内部RAM端口配置
现参考图16,示出一框图,该框图示出图1的数据RAM 122的实施例。 数据RAM 122包括存储器阵列1606、读取端口1602以及写入端口1604。存储 器阵列1606保持数据字,并且如上所述优选地布置成D行,每行N个字。在 一个实施例中,存储器阵列1606包括64个水平布置的静态RAM单元的阵列 (其中每个单元具有128位的宽度和64位的高度)以提供宽度为8192位并且具 有64行的64KB数据RAM 122,并且数据RAM 122所占用的晶粒面积大致为0.2平方毫米。然而,设想了其它实施例。
读取端口1602优选采用复用方式耦接至NPU 126和媒体寄存器118。(更 精确地,媒体寄存器118可以经由结果总线耦接至读取端口1602,其中结果 总线也可以将数据提供至重排序缓存器和/或至其它执行单元112的结果转发 总线。)NPU 126与媒体寄存器118共享读取端口1602,以对数据RAM 122进 行读取。写入端口1604也优选采用复用方式耦接至NPU 126以及媒体寄存器 118。NPU 126与媒体寄存器118共享写入端口1604,以写入数据RAM 122。 因此,有利地,媒体寄存器118可以在NPU 126正从数据RAM 122进行读取的 同时并行地写入数据RAM 122,或者NPU 126可以在媒体寄存器118正在从数 据RAM 122进行读取的同时并行地写入数据RAM 122。这样可以有利地提供 改进的性能。例如,NPU 126可以读取数据RAM 122(例如持续执行计算), 同时媒体寄存器118可以将更多数据字写入数据RAM 122。再例如,NPU 126 可以将计算结果写入数据RAM 122,同时媒体寄存器118从数据RAM 122读 取计算结果。在一个实施例中,NPU 126可以将一行计算结果写入数据RAM 122,同时NPU 126还从数据RAM 122读取一行数据字。在一个实施例中,存 储器阵列1606被配置成存储器区块(bank)。在NPU 126访问数据RAM 122时, 所有的存储器区块都被激活以访问存储器阵列1606的整个行;而在媒体寄存 器118访问数据RAM 122时,只有所指定的存储器区块会被激活。在一个实 施例中,每个存储器区块的宽度为128位,而媒体寄存器118的宽度为256位, 因此例如,每次媒体寄存器118访问时激活两个存储器区块。在一个实施例中,端口1602/1604其中之一为读取/写入端口。在一个实施例中,端口 1602/1604两者都是读取/写入端口。
如本文所述的NPU 126的轮转器能力的优点在于:与为了确保NPU 126 被高度利用而要求在NPU 126执行计算的同时架构程序(经由媒体寄存器118) 能够持续提供数据至数据RAM 122并且从数据RAM 122检索结果所需的存 储器阵列相比,该轮转器能力有助于使数据RAM 122的存储器阵列1606的行 显著减少,因而使该阵列相对小得多。
内部RAM缓存器
现参考图17,示出一框图,该框图示出图1的权重RAM 124与缓存器1704 的实施例。权重RAM 124包括存储器阵列1706与端口1702。存储器阵列1706 保持权重字,并且如上所述优选地布置成W行,每行具有N个字。在一个实 施例中,存储器阵列1706包括128个水平布置的静态RAM单元的阵列(其中每 个单元具有64位的宽度和2048位的高度)以提供宽度为8192位并且具有2048 行的2MB权重RAM 124,并且权重RAM 124所占用的晶粒面积大致为2.4平 方毫米。然而,设想了其它实施例。
端口1702优选采用复用方式耦接至NPU 126和缓存器1704。NPU 126与 缓存器1704经由该端口1702读取并写入权重RAM 124。缓存器1704还耦接至 图1的媒体寄存器118,使得媒体寄存器118通过缓存器1704读取并写入权重 RAM 124。因此,有利地,在NPU126正在读取或写入权重RAM 124的同时, 媒体寄存器118也可以并行地写入或读取缓存器1704(但是如果NPU 126当前 正执行,优选地搁置NPU 126,以避免在缓存器1704访问权重RAM 124的同 时访问该权重RAM 124)。这样可以有利地提升性能,特别是因为媒体寄存 器118对于权重RAM 124的读取和写入相对于NPU 126对于权重RAM 124的 读取和写入小得多。例如,在一个实施例中,NPU 126一次读取/写入8192位 (一行),而媒体寄存器118的宽度为256位并且每个MTNN指令1400写入两个 媒体寄存器118,即512位。因此,在架构程序执行十六个MTNN指令1400以 填充缓存器1704的情况下,NPU 126和架构程序针对访问权重RAM 124而发 生冲突的时间仅不到时间的约百分之六。在另一实施例中,指令转译器104将MTNN指令1400转译为两个微指令105,其中每个微指令105将单个数据寄 存器118写入缓存器1704,在这种情况下,NPU 126和架构程序针对访问权 重RAM 124而发生冲突的频率甚至更小。
在包含缓存器1704的实施例中,利用架构程序写入权重RAM 124需要多 个MTNN指令1400。一个或多个MTNN指令1400指定函数1432以写入缓存器 1704中指定的数据块,随后MTNN指令1400指定函数1432以指示NNU 121将 缓存器1704的内容写入权重RAM 124的指定行,其中数据块的大小是媒体寄 存器118的位数的两倍、并且这些数据块自然地在缓存器1704内对齐。在一 个实施例中,在用于指定函数1432以对缓存器1704的指定数据块进行写入的 各MTNN指令1400中,包含具有与缓存器1704的各数据块相对应的位的位掩 码(bitmask)。来自两个指定源寄存器118的数据被写入缓存器1704中的设置了 位掩码内的相应位的各数据块中。这对于权重RAM 124的行内的重复数据值 而言可以是有用的。例如,为了将缓存器1704(以及后续的权重RAM 124的 行)归零,程序设计者可以为源寄存器加载零值并且设置位掩码的所有位。 此外,位掩码使得程序设计者能够仅写入缓存器1704中的选定数据块,从而 保留其它数据块中的先前数据。
在包含缓存器1704的一个实施例中,利用架构程序读取权重RAM 124 需要多个MFNN指令1500。初始的MFNN指令1500指定函数1532以从权重 RAM 124的指定行加载缓存器1704,随后一个或多个MFNN指令1500指定函 数1532以将缓存器1704的指定数据块读取至目的地寄存器,其中数据块的大 小是媒体寄存器118的位数,并且这些数据块自然地在缓存器1704内对齐。 设想了如下的其它实施例,其中权重RAM 124包括多个缓存器1704,以通过 增加NPU 126执行时架构程序的可访问数量来进一步减少NPU 126和架构程 序间对访问权重RAM 124的竞争,这样可以增加在NPU 126无需访问权重 RAM 124的时钟周期期间能够执行缓存器1704的访问的可能性。
尽管图16描述了双端口数据RAM 122,但设想了权重RAM 124也是双端 口的其它实施例。此外,尽管图17描述了缓存器用于权重RAM 124,但设想 了数据RAM 122也具有与缓存器1704类似的关联缓存器的其它实施例。
可动态配置的NPU
现参考图18,示出一框图,该框图示出图1的可动态配置的NPU 126。图 18的NPU126在许多方面与图2的NPU 126类似。然而,图18的NPU 126可动 态配置以在两个不同配置其中之一中操作。在第一个配置中,图18的NPU 126 的操作类似于图2的NPU 126。也就是说,在第一个配置(在本文中称为“宽” 配置或“单个”配置)中,NPU 126的ALU 204对单个宽数据字和单个宽权重 字(例如,16位)执行运算以产生单个宽结果。相比之下,在第二个配置(在本 文中称为“窄”配置或“双”配置)中,NPU 126对两个窄数据字和两个相应 的窄权重字(例如,8位)执行运算以产生两个相应的窄结果。在一个实施例中, NPU 126的配置(宽的或窄的)由初始化NPU指令(例如,下述图20中的地址0 的指令)进行。可选地,该配置也可以由MTNN指令实现,其中该MTNN指令 的函数1432指定将NPU 126配置为所述配置(宽或窄)。优选地,由程序存储 器129指令或确定配置(宽或窄)的MTNN指令填充配置寄存器。例如,配置寄 存器的输出被提供给ALU 204、AFU 212以及产生复用寄存器控制信号213 的逻辑。一般而言,图18的NPU 126的元件与图2中相同附图标记的元件执行 类似的功能,并且为了理解图18,应当进行参照。然而,现将针对图18的实 施例(包括与图2的不同处)进行说明。
图18的NPU 126包括两个寄存器205A与205B、两个3输入复用寄存器 208A与208B、ALU 204、两个累加器202A与202B、以及两个AFU 212A与 212B。各寄存器205A/205B分别具有图2的寄存器205的宽度的一半(如8位)。 各寄存器205A/205B从权重RAM 124接收相应的窄权重字206A/B206(例如8 位)并在后续时钟周期内将其输出203A/203B提供至ALU 204的操作数选择 逻辑1898。在NPU 126为宽配置的情况下,与图2的实施例的寄存器205的方 式类似地,寄存器205A/205B实际上一起操作以接收来自权重RAM 124的宽 权重字206A/206B(例如16位);以及在NPU 126为窄配置的情况下,寄存器 205A/205B实际上独立地操作,从而各自接收来自权重RAM 124的窄权重字 206A/206B(例如8位),以使得NPU 126实际上为两个单独的窄NPU。然而, 权重RAM 124的相同输出位都耦接并提供至寄存器205A/205B,而与NPU 126的配置无关。例如,NPU 0的寄存器205A接收字节0,NPU 0的寄存器205B 接收字节1,NPU 1的寄存器205A接收字节2,NPU 1的寄存器205B接收字节 3,依此类推NPU 511的寄存器205B接收字节1023。
各复用寄存器208A/208B分别具有图2的寄存器208的宽度的一半(例如8 位)。复用寄存器208A选择其输入207A、211A与1811A其中之一以储存在其 寄存器中并在后续时钟周期内提供在输出209A上,并且复用寄存器208B选 择其输入207B、211B与1811B其中之一以储存在其寄存器中并在后续时钟周 期内在输出209B上提供至操作数选择逻辑1898。输入207A从数据RAM 122 接收窄数据字(例如8位),并且输入207B从数据RAM 122接收窄数据字。在 NPU 126为宽配置的情况下,与图2的实施例的复用寄存器208的方式类似地, 复用寄存器208A/208B实际上一起操作以接收来自数据RAM 122的宽数据字 207A/207B(例如16位);在NPU 126为窄配置的情况下,复用寄存器208A/208B 实际上独立地操作,从而各自接收来自数据RAM 122的窄数据字 207A/207B(例如8位),以使得NPU 126实际上为两个单独的窄NPU。然而, 数据RAM 122的相同输出位都耦接并提供至复用寄存器208A/208B,而与NPU 126的配置无关。例如,NPU 0的复用寄存器208A接收字节0,NPU 0的 复用寄存器208B接收字节1,NPU 1的复用寄存器208A接收字节2,NPU 1的 复用寄存器208B接收字节3,依此类推NPU 511的复用寄存器208B接收字节 1023。
输入211A接收相邻NPU 126的复用寄存器208A的输出209A,并且输入 211B接收相邻NPU 126的复用寄存器208B的输出209B。如图所示,输入 1811A接收相邻NPU 126的复用寄存器208B的输出209B,并且输入1811B接 收当前NPU 126的复用寄存器208A的输出209A。在图1所示的N个NPU 126 中,图18所示的NPU 126被标示为NPU J。也就是说,NPU J是N个NPU的代 表性实例。优选地,NPU J的复用寄存器208A的输入211A接收NPU 126实例J-1的复用寄存器208A的输出209A,并且NPU J的复用寄存器208A的输入 1811A接收NPU 126实例J-1的复用寄存器208B的输出209B,并且NPU J的复 用寄存器208A的输出209A被提供至NPU126实例J+1的复用寄存器208A的 输入211A以及NPU 126实例J的复用寄存器208B的输入211B这两者;并且 NPU J的复用寄存器208B的输入211B接收NPU 126实例J-1的复用寄存器208B的输出209B,NPU J的复用寄存器208B的输入1811B接收NPU 126实例J 的复用寄存器208A的输出209A,并且NPU J的复用寄存器208B的输出209B 被提供至NPU 126实例J+1的复用寄存器208A的输入1811A以及NPU 126实 例J+1的复用寄存器208B的输入211B这两者。
控制输入213控制这三个输入中的哪一个输入被复用寄存器208A/208B 选择以储存在各自的寄存器中并于后续提供在各自的输出209A/209B上。在 NPU 126被(例如,如以下描述通过图20的地址1处的乘法累加指令)指示要从 数据RAM 122加载一行的情况下,无论NPU 126是处于宽配置还是处于窄配 置,控制输入213都控制各复用寄存器208A/208B从数据RAM 122的选定行的 相应窄字中选择各自的窄数据字207A/207B(例如8位)。
在NPU 126被(例如,如以下描述通过图20的地址2处的乘法累加轮转指 令)指示为对先前接收的数据行的值进行轮转的情况下,如果NPU 126处于窄 配置,则控制输入213控制各复用寄存器208A/208B选择相应的输入 1811A/1811B。在这种情况下,复用寄存器208A/208B实际上独立操作,使得 NPU 126实际上是两个单独的窄NPU。如此,如以下针对图19更详细所述, N个NPU 126的复用寄存器208A和208B整体地作为2N个窄字的轮转器进行操作。
在NPU 126被指示为对先前接收的数据行的值进行轮转的情况下,如果 NPU 126处于宽配置,则控制输入213控制各复用寄存器208A/208B选择相应 的输入211A/211B。在这种情况下,复用寄存器208A/208B实际上整体地仿佛 该NPU 126是单个宽NPU 126那样进行操作。如此,与针对图3所述的方式类 似地,N个NPU 126的复用寄存器208A和208B整体地作为N宽字的轮转器进 行工作。
ALU 204包括操作数选择逻辑1898、宽乘法器242A、窄乘法器242B、宽 2输入复用器1896A,窄2输入复用器1896B,宽加法器244A以及窄加法器 244B。实际上,ALU 204包括操作数选择逻辑1898、宽ALU 204A(包括宽乘 法器242A、宽复用器1896A和宽加法器244A)以及窄ALU 204B(包括窄乘法 器242B、窄复用器1896B和窄加法器244B)。优选地,宽乘法器242A将两个 宽字相乘,并且与图2的乘法器242(例如16位×16位乘法器)类似。窄乘法器242B将两个窄字相乘(例如产生16位结果的8位×8位乘法器)。当NPU 126为 窄配置时,借助于操作数选择逻辑1898,宽乘法器242A实际上用作窄乘法器 以使两个窄字相乘,使得NPU 126实际上用作两个窄NPU。优选地,宽加法 器244A将宽复用器1896A的输出与宽累加器202A的输出217A相加以产生总 和215A从而提供给宽累加器202A,其类似于图2的加法器244。窄加法器244B 将窄复用器1896B的输出与窄累加器202B的输出217B相加以产生总和215B 从而提供给窄累加器202B。在一个实施例中,窄累加器202B具有28位的宽 度,以避免在对多达1024个16位乘积进行累加时损失精度。当NPU 126为宽 配置时,窄乘法器242B、窄复用器1896B、窄加法器244B、窄累加器202B 以及窄AFU 212B优选地不活动以降低能耗。
如以下更详细所述,操作数选择逻辑1898从209A、209B、203A与203B 中选择操作数以提供至ALU 204的其它元件。优选地,操作数选择逻辑1898 还执行其它功能,例如执行带符号值的数据字和权重字的符号扩展。例如, 如果NPU 126为窄配置,则操作数选择逻辑1898在将窄数据字和权重字提供 给宽乘法器242A之前,将该窄数据字和权重字符号扩展至宽字的宽度。类似 地,如果ALU 204被指示为使窄数据/权重字通过(经由宽复用器1896A而跳过 宽乘法器242A),则操作数选择逻辑1898在将窄数据/权重字提供给宽加法器 244A之前,将窄数据/权重字符号扩展至宽字的宽度。优选地,图2的NPU 126 的ALU 204中也存在执行符号扩展功能的逻辑。
宽复用器1896A接收宽乘法器242A的输出以及来自操作数选择逻辑 1898的操作数,并从这些输入中选择其中之一以提供给宽加法器244A,并且 窄复用器1896B接收窄乘法器242B的输出以及来自操作数选择逻辑1898的 操作数,并选择这些输入其中之一以提供给窄加法器244B。
操作数选择逻辑1898所提供的操作数取决于NPU 126的配置以及ALU 204基于NPU126正执行的指令所指定的函数而执行的算术和/或逻辑运算。 例如,如果指令指示ALU204执行乘法累加并且NPU 126为宽配置,则操作 数选择逻辑1898将作为输出209A和209B的串接的宽字提供至宽乘法器242A 的一个输入、并将作为输出203A和203B的串接的宽字提供至另一输入,而 窄乘法器242B不活动,使得NPU 126用作与图2的NPU 126类似的单个宽NPU 126。而如果指令指示ALU 204执行乘法累加并且NPU 126处于窄配置,则操 作数选择逻辑1898将窄数据字209A的扩展后或扩宽后的版本提供至宽乘法 器242A的一个输入、并将窄权重字203A的扩展后版本提供至另一输入;此 外,操作数选择逻辑1898将窄数据字209B提供至窄乘法器242B的一个输入 并将窄权重字203B提供至另一输入。为将窄字扩展或扩宽,如果窄字带符号, 则操作数选择逻辑1898对该窄字进行符号扩展;而如果窄字不带符号,则操 作数选择逻辑1898为窄字填入值为零的高位。
再例如,如果NPU 126处于宽配置并且指令指示ALU 204执行权重字的 累加,则宽乘法器242A被跳过,并且操作数选择逻辑1898将输出203A和203B 的串接提供至宽复用器1896A,以提供给宽加法器244A。而如果NPU 126为 窄配置并且指令指示ALU 204执行权重字的累加,则宽乘法器242A被跳过并 且操作数选择逻辑1898将输出203A的扩展后版本提供至宽复用器1896A,以 提供给宽加法器244A;并且窄乘法器242B被跳过并且操作数选择逻辑1898 将输出203B的扩展后版本提供至窄复用器1896B,以提供给窄加法器244B。
再例如,如果NPU 126为宽配置并且指令指示ALU 204执行数据字的累 加,则宽乘法器242A被跳过并且操作数选择逻辑1898将输出209A和209B的 串接提供至宽复用器1896A,以提供给宽加法器244A。而如果NPU 126为窄 配置并且指令指示ALU 204执行数据字的累加,则宽乘法器242A被跳过、并 且操作数选择逻辑1898将输出209A的扩展后版本提供至宽复用器1896A,以 提供给宽加法器244A;并且窄乘法器242B被跳过、并且操作数选择逻辑1898 将输出209B的扩展后版本提供至窄复用器1896B,以提供给窄加法器244B。 权重/数据字的累加可以有助于执行平均运算,其中这些平均运算用于诸如图 像处理等的某些人工神经网络应用的池化层。
优选地,NPU 126还包括:第二宽复用器(未示出),用于跳过宽加法器 244A以便于在宽配置下利用宽数据/权重字或在窄配置下利用扩展后的窄数 据/权重字来加载宽累加器202A;以及第二窄复用器(未示出),用于跳过窄加 法器244B,以便于在窄配置下利用窄数据/权重字加载窄累加器202B。优选 地,ALU 204还包括宽和窄的比较器/复用器组合(未示出),其中该比较器/ 复用器组合接收相应的累加器值217A/217B和相应的复用器1896A/1896B输 出,以在累加器值217A/217B与数据/权重字209A/B/203A/B之间选择最大值, 如以下例如针对图27和28更详细所述,这样的运算用于某些人工神经网络应 用的池化层中。此外,操作数选择逻辑1898被配置为提供值为零的操作数(用 于加零或用于清除累加器)并提供值为一的操作数(用于乘一)。
窄AFU 212B接收窄累加器202B的输出217B并对其执行激活函数以产生 窄结果133B,而宽AFU 212A接收宽累加器202A的输出217A并对其执行激活 函数以产生宽结果133A。当NPU 126为窄配置时,宽AFU 212A相应地考虑 宽累加器202A的输出217A并对其执行激活函数以产生窄结果(例如8位),这 如以下例如针对图29A至图30更详细所述。
从以上说明可以发现,有利地,单个NPU 126在为窄配置时实际上作为 两个窄NPU而操作,因此对于较小的字提供大致为宽配置时的吞吐量的多达 两倍的吞吐量。例如,假定神经网络层具有1024个神经元,而每个神经元从 先前层接收1024个窄输入(并具有窄权重字),从而产生一百万个连接。与具 有512个宽配置的NPU 126的NNU 121相比,具有512个窄配置的NPU 126的 NNU 121能够在大致一半的时间内(约1026个时钟vs514个时钟)处理四倍的 连接数(一百万个连接vs256K个连接),尽管处理的是窄字而非宽字。
在一个实施例中,图18的可动态配置NPU 126包括与复用寄存器208A和 208B类似的3输入复用寄存器以取代寄存器205A和205B,从而实现针对从权 重RAM 124接收到的一行权重字的轮转器,这与针对图7的实施例所述的方 式某种程度类似但采用针对图18所述的可动态配置方式。
现参考图19,示出一框图,该框图示出根据图18的实施例的图1的NNU 121的N个NPU 126的2N个复用寄存器208A/208B的布置的实施例、从而说明 这2N个复用寄存器208A/208B作为针对从图1的数据RAM 122接收到的一行 数据字207的轮转器的操作。在图19的实施例中,如图所示,N是512,使得 NNU 121具有被标示为0至511的1024个复用寄存器208A/208B,其对应至512 个NPU 126(实际上为1024个窄NPU)。NPU 126内的两个窄NPU标示为A和B, 并且在每个复用寄存器208中,示出相应的窄NPU的指定。更具体地,为NPU 126 0的复用寄存器208A指定0-A,为NPU 126 0的复用寄存器208B指定0-B, 为NPU 126 1的复用寄存器208A指定1-A,为NPU 126 1的复用寄存器208B指 定1-B,为NPU 126 511的复用寄存器208A指定511-A,并且为NPU 126 511 的复用寄存器208B指定511-B,这些值亦对应至以下所述的图21的窄NPU。
每个复用寄存器208A接收数据RAM 122的D行的其中一行中的相应窄 数据字207A,并且每个复用寄存器208B接收数据RAM 122的D行的其中一行 中的相应窄数据字207B。也就是说,复用寄存器0A接收数据RAM 122行的 窄数据字0,复用寄存器0B接收数据RAM 122行的窄数据字1,复用寄存器1A 接收数据RAM 122行的窄数据字2,复用寄存器1B接收数据RAM 122行的窄 数据字3,依此类推,复用寄存器511A接收数据RAM 122行的窄数据字1022, 以及复用寄存器511B接收数据RAM 122行的窄数据字1023。此外,复用寄存 器1A在其输入211A上接收复用寄存器0A的输出209A,复用寄存器1B在其输 入211B上接收复用寄存器0B的输出209B,依此类推,复用寄存器511A在其 输入211A上接收复用寄存器510A的输出209A,复用寄存器511B在其输入 211B上接收复用寄存器510B的输出209B,并且复用寄存器0A在其输入211A 上接收复用寄存器511A的输出209A,复用寄存器0B在其输入211B上接收复 用寄存器511B的输出209B。每个复用寄存器208A/208B接收控制输入213, 其中该控制输入213控制是要选择数据字207A/207B、还是选择轮转后输入 211A/211B、亦或是选择轮转后输入1811A/1811B。最后,复用寄存器1A在 其输入1811A上接收复用寄存器0B的输出209B,复用寄存器1B在其输入 1811B上接收复用寄存器1A的输出209A,依此类推,复用寄存器511A在其输 入1811A上接收复用寄存器510B的输出209B,复用寄存器511B在其输入1811B上接收复用寄存器511A的输出209A,并且复用寄存器0A在其输入 1811A上接收复用寄存器511B的输出209B,复用寄存器0B在其输入1811B上 接收复用寄存器0A的输出209A。每个复用寄存器208A/208B接收控制输入213,其中该控制输入213控制是要选择数据字207A/207B、还是选择轮转后 输入211A/211B、亦或是选择轮转后输入1811A/1811B。如以下更详细所述, 在一运算模式中,在第一时钟周期中,控制输入213控制每个复用寄存器208A/208B选择数据字207A/207B以储存至寄存器并于后续提供至ALU 204; 以及在后续时钟周期(例如上述的M-1时钟周期)中,控制输入213控制每个复 用寄存器208A/208B选择轮转后输入1811A/1811B以储存至寄存器并于后续 提供至ALU 204。
现参考图20,示出一表格,该表格示出储存于图1的NNU 121的程序存 储器129中并由该NNU 121执行的程序,其中该NNU 121具有根据图18的实 施例的NPU 126。图20的示例性程序在许多方面与图4的程序类似。然而,以 下将说明差异。位于地址0的初始化NPU指令指定NPU 126将为窄配置。此外, 如图所示,位于地址2的乘法累加轮转指令将计数指定为1023,并需要1023 个时钟周期。这是因为图20的示例假定一层实际上具有1024个窄(例如8位) 神经元(NPU),每个窄神经元具有来自先前层的1024个神经元的1024个连接 输入,因此总共有1024K个连接。每个神经元从每个连接输入接收8位数据值, 并将该8位数据值乘以适当的8位权重值。
现参考图21,示出一时序图,该时序图示出NNU 121执行图20的程序, 其中该NNU121包括图18的在窄配置中操作的NPU 126。图21的时序图在许 多方面与图5的时序图类似;然而,以下将说明差异。
在图21的时序图中,NPU 126为窄配置,这是因为位于地址0的初始化 NPU指令将这些NPU初始化为窄配置。因此,这512个NPU 126实际上作为 1024个窄NPU(或神经元)操作,其中这1024个窄NPU在列内被指定为NPU 0-A和NPU 0-B(NPU 126 0的两个窄NPU)、NPU1-A和NPU 1-B(NPU 126 1 的两个窄NPU)、…、NPU 511-A与NPU 511-B(NPU 126 511的两个窄NPU)。 为简单清楚地图示,仅示出窄NPU 0-A、0-B与511-B的操作。由于地址2处的 乘法累加轮转将计数指定为1023(这需要1023个时钟周期)这一事实,因此图 21的时序图的行包括多达1026个时钟周期。
在时钟0处,1024个NPU各自执行图4的初始化指令,即图5所示将零值 指派至累加器202的初始化指令。
在时钟1处,1024个窄NPU各自执行图20的地址1处的乘法累加指令。如 图所示,窄NPU 0-A将数据RAM 122的行17的窄字0和权重RAM 124的行0的 窄字0的乘积与累加器202A的值(即零)累加;窄NPU 0-B将数据RAM 122的行 17的窄字1和权重RAM 124的行0的窄字1的乘积与累加器202B的值(即零)累 加;依此类推,窄NPU 511-B将数据RAM 122的行17的窄字1023与权重RAM 124的行0的窄字1023的乘积与累加器202B的值(即零)累加。
在时钟2处,1024个窄NPU各自执行图20的地址2的乘法累加轮转指令的 第一次迭代。如图所示,窄NPU 0-A将从窄NPU 511-B的复用寄存器208B的 输出209B所接收到的轮转后的窄数据字1811A(即从数据RAM 122所接收到 的窄数据字1023)和权重RAM 124的行1的窄字0的乘积与累加器202A的值 217A累加;窄NPU 0-B将从窄NPU 0-A的复用寄存器208A的输出209A所接收 到的轮转后的窄数据字1811B(即从数据RAM 122所接收到的窄数据字0)和 权重RAM 124的行1的窄字1的乘积与累加器202B的值217B累加;依此类推, 窄NPU 511-B将从窄NPU 511-A的复用寄存器208A的输出209A所接收到的 轮转后的窄数据字1811B(即从数据RAM 122所接收到的窄数据字1022)和权 重RAM 124的行1的窄字1023的乘积与累加器202B的值217B累加。
在时钟3处,1024个窄NPU各自执行图20的地址2处的乘法累加轮转指令 的第二次迭代。如图所示,窄NPU 0-A将从窄NPU 511-B的复用寄存器208B 的输出209B所接收到的轮转后的窄数据字1811A(即从数据RAM 122所接收 到的窄数据字1022)和权重RAM 124的行2的窄字0的乘积与累加器202A的值 217A累加;窄NPU 0-B将从窄NPU 0-A的复用寄存器208A的输出209A所接收 到的轮转后的窄数据字1811B(即从数据RAM 122所接收到的窄数据字1023) 和权重RAM 124的行2的窄字1的乘积与累加器202B的值217B累加;依此类 推,窄NPU511-B将从窄NPU 511-A的复用寄存器208A的输出209A所接收到 的轮转后的窄数据字1811B(即从数据RAM 122所接收到的窄数据字1021)和 权重RAM 124的行2的窄字1023的乘积与累加器202B的值217B累加。如图21 的省略号所示,在接下来的1021个时钟周期的每个时钟周期内依此持续进 行,直到时钟1024。
在时钟1024处,1024个窄NPU各自执行图20的地址2处的乘法累加轮转 指令的第1023次迭代。如图所示,窄NPU 0-A将从窄NPU 511-B的复用寄存 器208B的输出209B所接收到的轮转后的窄数据字1811A(即从数据RAM 122 所接收到的窄数据字1)和权重RAM 124的行1023的窄字0的乘积与累加器 202A的值217A累加;窄NPU 0-B将从NPU 0-A的复用寄存器208A的输出 209A所接收到的轮转后的窄数据字1811B(即从数据RAM 122所接收到的窄 数据字2)和权重RAM 124的行1023的窄字1的乘积与累加器202B的值217B累 加;依此类推,窄NPU 511-B将从NPU 511-A的复用寄存器208A的输出209A 所接收到的轮转后的窄数据字1811B(即从数据RAM 122所接收到的窄数据 字0)和权重RAM 124的行1023的窄字1023的乘积与累加器202B的值217B累 加。
在时钟1025处,1024个窄NPU各自的AFU 212A/212B执行图20的地址3 处的激活函数指令。最后,在时钟1026处,这1024个窄NPU各自通过将其窄 结果133A/133B写回数据RAM122的行16的相应窄字,来执行图20的地址4 处的写入AFU输出指令,即NPU 0-A的窄结果133A被写入数据RAM 122的窄 字0,NPU 0-B的窄结果133B被写入数据RAM 122的窄字1,依此类推,NPU 511-B的窄结果133被写入数据RAM 122的窄字1023。在图22中,还以框图的 形式示出以上针对图21所述的操作。
现参考图22,示出一框图,该框图示出图1的NNU 121,其中该NNU 121 包括图18的NPU 126以执行图20的程序。NNU 121包括512个NPU 126即1024 个窄NPU、接收其地址输入123的数据RAM 122、以及接收其地址输入125的 权重RAM 124。尽管未示出,但在时钟0,这1024个窄NPU执行图20的初始 化指令。如图所示,在时钟1处,行17的1024个8位数据字被从数据RAM 122 读出并提供至1024个窄NPU。在时钟1至1024,行0至1023的1024个8位权重 字分别被从权重RAM 124读出并提供至1024个窄NPU。虽然未示出,但在时 钟1,1024个窄NPU对加载的数据字与权重字执行相应的乘法累加运算。在 时钟2至1024,1024个窄NPU的复用寄存器208A/208B作为1024个8位字轮转 器操作以将先前加载的数据RAM 122的行17的数据字轮转至相邻的窄NPU, 并且窄NPU对相应的轮转后的数据字以及从权重RAM 124加载的相应窄权 重字执行乘法累加运算。尽管未示出,但在时钟1025,1024个窄AFU 212A/212B执行激活指令。在时钟1026,1024个窄NPU将其相应的1024个8 位结果133A/133B写回数据RAM122的行16。
可以发现,例如,图18的实施例相较于图2的实施例可具有优势,这是 因为图18的实施例为程序设计者提供了灵活性,以在正被建模的特定应用需 要一定精确度的情况下使用宽数据字和权重字(例如16位)进行计算,并且在 该应用需要一定精确度的情况下使用窄数据字和权重字(例如8位)来进行计 算。从一个角度来看,对于窄数据的应用而言,图18的实施例相较于图2的 实施例,以额外的窄元件(例如复用寄存器208B、寄存器205B、窄ALU 204B、 窄累加器202B、窄AFU 212B)作为代价,可提供两倍的吞吐量,这些额外的 窄元件使NPU 126的面积增加约50%。
三模式NPU
现参考图23,示出一框图,该框图示出根据备选实施例的可动态配置的 图1的NPU126。图23的NPU 126不但可配置为宽配置与窄配置,还可配置于 第三配置(在本文中称为“漏斗(funnel)”配置)。图23的NPU 126在许多方面 与图18的NPU 126类似。然而,图18中的宽加法器244A在图23的NPU 126中 由3输入宽加法器2344A所取代,其中3输入宽加法器2344A接收作为窄复用 器1896B的输出的扩展后版本的第三加数2399。用于操作具有图23的NPU 126的NNU 121的程序在许多方面与图20的程序类似。然而,地址0处的初始 化NPU指令将这些NPU 126初始化为漏斗配置,而非窄配置。此外,地址2 的乘法累加轮转指令的计数为511而非1023。
在漏斗配置的情况下,NPU 126的操作与在以窄配置执行诸如图20的地 址1处的乘法累加指令的情况下的操作在以下方面类似:NPU 126接收两个窄 数据字207A/207B和两个窄权重字206A/206B;宽乘法器242A将数据字209A 与权重字203A相乘以产生宽复用器1896A所选择的乘积246A;以及窄乘法器 242B将数据字209B与权重字203B相乘以产生窄复用器1896B所选择的乘积 246B。然而,宽加法器2344A将(宽复用器1896A所选择的)乘积246A和(宽复 用器1896B所选择的)乘积246B/2399两者与宽累加器202A的值217A相加,而窄加法器244B与窄累加器202B不活动。此外,在以漏斗配置执行诸如图20 的地址2处的乘法累加轮转指令时,控制输入213使复用寄存器208A/208B轮 转两个窄字(例如16位),也就是说,复用寄存器208A/208B选择其相应的输 入211A/211B,就如同宽配置一样。然而,宽乘法器242A将数据字209A与权 重字203A相乘以产生宽复用器1896A所选择的乘积246A;窄乘法器242B将 数据字209B与权重字203B相乘以产生窄复用器1896B所选择的乘积246B;以及宽加法器2344A将(宽复用器1896A所选择的)乘积246A和(宽复用器1896B 所选择的)乘积246B/2399两者与宽累加器202A的值217A相加,而窄加法器 244B与窄累加器202B如上所述不活动。最后,在以漏斗配置执行诸如图20 的地址3处等的激活函数指令时,宽AFU 212A对所得到的总和215A执行激活 函数以产生窄结果133A,而窄AFU 212B不活动。如此,只有标示为A的窄 NPU产生窄结果133A,而标示为B的窄NPU所产生的窄结果133B是无效的。 因此,写回的结果行(例如图20的地址4处的指令所指示的行16)包含空洞,这 是因为只有窄结果133A是有效的,而窄结果133B是无效的。因此,与每个 神经元在每个时钟周期内处理一个连接数据输入的图2和图18的实施例相对 比,从概念上讲,每个时钟周期内,每个神经元(图23的NPU 126)处理两个 连接数据输入,即将两个窄数据字乘以相应的权重并将这两个乘积累加。
针对图23的实施例可以发现,所产生并写回数据RAM 122或权重RAM 124的结果字(神经元输出)的数量是所接收到的数据输入(连接)的数量的平 方根的一半,并且写回的结果行具有空洞,即每隔一个窄字结果是无效的, 更具体地,标示为B的窄NPU结果不具意义。因此,图23的实施例对于具有 连续两层的神经网络特别有效,例如,第一层所具有的神经元数量为第二层 的两倍(例如第一层所具有的1024个神经元完全连接至第二层的512个神经 元)。此外,其它执行单元122(例如媒体单元,诸如x86AVX单元)在必要的情 况下可对分散的(即具有空洞的)结果行执行压紧运算(pack operation)以使其 紧密(即不具有空洞),以用于当NNU 121正执行与数据RAM 122和/或权重 RAM 124的其它行相关联的其它计算时的后续计算。
混合NNU运算:卷积能力与池化能力
根据本文所述实施例的NNU 121的优点在于,该NNU 121能够并行地以 类似于协处理器执行自己内部程序的方式操作、以及以类似于处理器的执行 单元执行被发布给该执行单元的架构指令(或从架构指令转译来的微指令)的 方式操作。架构指令具有由包括NNU 121的处理器所执行的架构程序。如此, NNU 121以混合方式操作,这种操作方式是有利的,因为它提供了维持对 NNU 121的高利用率的能力。例如,图24至图26示出NNU 121执行卷积运算 的操作,在该操作中,NNU的利用率高,并且图27至图28示出NNU 121执行 池化运算的操作,其中这些卷积运算和池化运算是卷积层、池化层以及诸如 图像处理(例如边缘检测、锐化、模糊、辨识/分类)等的其它数字数据计算应 用所需的。然而,NNU 121的混合运算不限于执行卷积或池化运算,而是混 合特征也可用于执行其它运算,诸如以上针对图4至图13所述的传统神经网 络乘法累加运算和激活函数运算等。也就是说,处理器100(更具体地,保留 站108)向NNU 121发布MTNN指令1400与MFNN指令1500,其中响应于这些 指令,NNU 121将数据写入存储器122/124/129并从由NNU 121进行写入的存 储器122/124中读取结果,与此同时,响应于执行由处理器100(经由MTNN 1400指令)写入程序存储器129的程序,NNU 121对存储器122/124/129进行读 取和写入。
现参考图24,示出一框图,该框图示出图1的NNU 121使用以执行卷积 运算的数据结构的示例。该框图包括卷积核2402、数据阵列2404、以及图1 的数据RAM 122与权重RAM124。优选地,(例如,图像像素的)数据阵列2404 保持在附接至处理器100的系统存储器(未示出)中并通过处理器100执行 MTNN指令1400而被加载至NNU 121的权重RAM 124。卷积运算是将第一矩 阵与第二矩阵进行卷积的运算,其中第二矩阵在本文中被称为卷积核。如在本发明的上下文中所述,卷积核是系数的矩阵,其中这些系数也可称为权重、 参数、元素或值。优选地,卷积核2402是处理器100正执行的架构程序的静 态数据。
数据阵列2404是数据值的二维阵列,并且各数据值(例如图像像素值)是 数据RAM122或权重RAM 124的字的大小(例如16位或8位)。在该示例中,数 据值为16位字,并且NNU121被配置为512个宽配置NPU 126。此外,在实施 例中,如以下更详细所述,NPU 126包括用于从权重RAM 124接收权重字206 的复用寄存器(诸如图7的复用寄存器705等),以对从权重RAM 124接收到的 一行数据值执行整体轮转器运算。在该示例中,数据阵列2404是2560列× 1600行的像素阵列。如图所示,当架构程序将数据阵列2404与卷积核2402进 行卷积时,该架构程序将数据阵列2402分为20个数据块,其中各数据块是512 ×400的数据矩阵2406。
在示例中,卷积核2402是由系数、权重、参数、或元素构成的3×3矩阵。 第一行系数被标示为C0,0、C0,1和C0,2;第二行系数被标示为C1,0、C1,1和 C1,2;并且第三行系数被标示为C2,0、C2,1、和C2,2。例如,可用于执行边 缘检测的卷积核具有以下系数:0,1,0,1,-4,1,0,1,0。再例如,可 用于对图像进行高斯模糊的卷积核具有以下系数:1,2,1,2,4,2,1,2, 1。在这种情况下,通常对最终累加值执行除法,其中,除数为卷积核2402 的各元素的绝对值的总和(在该示例中为16)。又例如,除数是卷积核2402的 元素的数量。又例如,除数是将卷积压缩回至期望值范围内的值,并且该除 数根据卷积核2402的元素值、期望范围以及正被执行卷积运算的矩阵的输入 值的范围来确定。
如图24所示并且针对图25更详细所述,架构程序将卷积核2402的系数写 入数据RAM 122。优选地,数据RAM 122的连续九行(卷积核2402内的元素 数量)的每行的所有字以行为主要顺序被写入卷积核2402的不同元素。也就 是说,如图所示,一行的每个字被写入有第一系数C0,0;下一行被写入有第 二系数C0,1;下一行被写入有第三系数C0,2;再下一行被写入有第四系数C1,0;依此类推,第九行的每个字被写入有第九系数C2,2。为了对数据阵列 2404的数据块的数据矩阵2406进行卷积,如以下特别是针对图26更详细所 述,NPU126按顺序重复读取数据RAM 122中保持卷积核2402的系数的九行。
如图24所示并且针对图25更详细所述,架构程序将数据矩阵2406的值写 入权重RAM 124。在NNU程序执行卷积时,将结果矩阵写回权重RAM 124。 优选地,如以下针对图25更详细所述,架构程序将第一数据矩阵2406写入权 重RAM 124并启动NNU 121,并且当NNU121在对第一数据矩阵2406与卷积 核2402进行卷积时,架构程序将第二数据矩阵2406写入权重RAM 124,使得 NNU 121一旦完成对第一数据矩阵2406的卷积,其即可开始对第二数据矩阵 2406执行卷积。如此,架构程序往返于权重RAM 124的两个区域之间,以确 保NNU 121被充分使用。因此,图24的示例示出第一数据矩阵2406A和第二 数据矩阵2406B,其中第一数据矩阵2406A与占据权重RAM 124的行0至399 行的第一数据块相对应,第二数据矩阵2406B与占据权重RAM 124的行500 至899的第二数据块相对应。此外,如图所示,NNU 121将卷积的结果写回 权重RAM 124的行900~1299和1300~1699,随后架构程序从权重RAM 124读 出这些结果。保持在权重RAM 124中的数据矩阵2406的数据值标示为 “Dx,y”,其中“x”是权重RAM 124的行数,“y”是权重RAM 124的字或列 数。因此,例如,行399中的数据字511在图24中被标示为D399,511,该数据 字由NPU 511的复用寄存器705接收。
现参考图25,示出一流程图,该流程图示出图1的处理器100执行架构程 序的操作,所述架构程序将用以对卷积核2402执行卷积的NNU 121用于图24 的数据阵列2404。流程始于方框2502。
在方框2502处,处理器100(即运行在处理器100上的架构程序)将图24的 卷积核2402以针对图24所示和所述的方式写入数据RAM 122。此外,架构程 序将变量N初始化为值1。变量N表示数据阵列2404中正由NNU 121处理的当 前数据块。此外,架构程序将变量NUM_CHUNKS初始化为值20。流程进入 方框2504。
在方框2504处,如图24所示,处理器100将数据块1的数据矩阵2406写入 权重RAM124(例如数据块1的数据矩阵2406A)。流程进入方框2506。
在方框2506处,处理器100使用用于指定对程序存储器129进行写入的函 数1432的MTNN指令1400,将卷积程序写入NNU 121的程序存储器129。处 理器100随后使用用于指定启动对程序的执行的函数1432的MTNN指令 1400,来启动NNU卷积程序。以下针对图26A更详细地描述NNU卷积程序的 示例。流程进入决策方框2508。
在决策方框2508处,架构程序确定变量N的值是否小于NUM_CHUNKS。 如果是,流程进入方框2512;否则进入方框2514。
在方框2512处,如图24所示,处理器100将数据块N+1的数据矩阵2406 写入权重RAM 124(例如数据块2的数据矩阵2406B)。因此,有利地,当NNU 121正在对当前数据块执行卷积时,架构程序将下一数据块的数据矩阵2406 写入权重RAM 124,使得一旦完成当前数据块的卷积(即写入权重RAM 124), NNU 121就可以立即开始执行对下一个数据块的卷积。流程进入方框2514。
在方框2514处,处理器100确定为(在数据块1的情况下从方框2506开始 的,在数据块2~20的情况下从方框2518开始的)当前正在运行的NNU程序已 经完成。优选地,处理器100通过执行MFNN指令1500以读取NNU 121的状 态寄存器127来进行该确定。在备选实施例中,NNU 121产生中断,从而表 示其已经完成卷积程序。流程进入决策方框2516。
在决策方框2516处,架构程序确定变量N的值是否小于NUM_CHUNKS。 如果是,流程进入方框2518;否则进入方框2522。
在方框2518处,处理器100更新卷积程序使得该处理器可以对数据块 N+1进行卷积。更具体地,处理器100将权重RAM 124中在地址0处的初始化 NPU指令的行值更新为数据矩阵2406的第一行(例如,更新为数据矩阵2406A 的行0或数据矩阵2406B的行500),并且更新输出行(例如更新为行900或 1300)。然后处理器100启动更新后的NNU卷积程序。流程进入方框2522。
在方框2522处,处理器100从权重RAM 124读取数据块N的NNU卷积程 序的结果。流程进入决策方框2524。
在决策方框2524处,架构程序确定变量N的值是否小于NUM_CHUNKS。 如果是,流程进入方框2526;否则流程结束。
在方框2526处,架构程序使N的增加1。流程返回决策方框2508。
现参考图26A,示出NNU程序的程序列表,其中该NNU程序利用图24 的卷积核2402对数据矩阵2406执行卷积并将其写回权重RAM 124。该程序将 通过地址1至9处的指令循环体来循环一定次数。地址0处的初始化NPU指令 指定各NPU 126执行该循环体的次数,在图26A的示例中,与图24的数据矩 阵2406内的行数相对应地,循环计数值为400,并且循环末端(地址10)处的循 环指令使当前循环计数值递减,并且如果结果非零、则所述循环指令引起返 回循环体的顶端(即返回地址1处的指令)的控制。初始化NPU指令也将累加器 202清零。优选地,地址10处的循环指令也将累加器202清零。可选地,如上 所述,地址1处的乘法累加指令可以指定将累加器202清零。
对于程序的循环体的每一次执行,512个NPU 126并行地对3×3卷积核 2402和数据矩阵2406的512个相应3×3子矩阵执行512个卷积。卷积是卷积核 2402的元素与相应子矩阵内的对应元素的九个乘积的总和。在图26A的实施 例中,512个相应3×3子矩阵各自的原点(中央元素)是图24的数据字 Dx+1,y+1,其中y(列编号)是NPU 126的编号,而x(行编号)是当前权重RAM 124中由图26A的程序的地址1处的乘法累加指令所读取的行编号(同样,该行 编号由地址0处的初始化NPU指令进行初始化,在地址3与5的各乘法累加指 令处递增,并且由地址9处的递减指令进行更新)。因此,针对程序的每一个 循环,512个NPU 126计算512个卷积,并将512个卷积结果写回权重RAM 124 的指定行。在本说明书中,为简单起见省略边缘处理(edge handling),但是 应当注意,使用这些NPU 126的整体轮转特征将造成列中的两列从(例如,图 像处理情况下的图像的)数据矩阵2406的一个垂直边缘到另一垂直边缘(例如 从左侧边缘到右侧边缘或者反之亦然)产生环绕(wrapping)。现在针对循环体 进行说明。
地址1是用于指定数据RAM 122的行0并隐式地使用当前权重RAM 124 的行的乘法累加指令,其中当前权重RAM 124的行优选保持在定序器128内 (并由位于地址0的指令初始化为零以第一次通过循环体)。也就是说,位于地 址1的指令使每个NPU 126从数据RAM122的行0读取其相应字、从当前权重 RAM 124的行读取其相应字,并对这两个字执行乘法累加运算。因此,例如, NPU 5将C0,0与Dx,5相乘(其中“x”是当前权重RAM 124的行),将结果与累 加器202的值217相加,并将总和写回累加器202。
地址2是用于指定使数据RAM 122的行递增(即递增至行1)并且随后从数 据RAM122的递增后地址读取行的乘法累加指令。该指令还指定将每个NPU 126的复用寄存器705内的值轮转至相邻NPU 126,在这种情况下所述值是响 应于地址1的指令而刚刚从权重RAM124读取的一行数据矩阵2406值。在图 24至26的实施例中,NPU 126被配置为将复用寄存器705的值向左轮转,即从 NPU J轮转至NPU J-1,而非如以上针对图3、7和19所述从NPU J轮转至NPU J+1。应当理解,在NPU 126被配置为向右轮转的实施例中,架构程序可以将 卷积核2042的系数值按不同顺序写入数据RAM 122(例如绕着其中心列轮转) 以实现相似卷积结果。此外,在需要时,架构程序可以对卷积核2402执行额 外的预处理(例如转置(transposition))。此外,指令指定计数值2。因此,位于 地址2的指令使每个NPU 126从数据RAM 122的行1读取其相应字,将轮转后 的字接收至复用寄存器705,并对这两个字执行乘法累加运算。由于计数值 为2,因此该指令还使每个NPU 126重复前述操作。也就是说,定序器128使 数据RAM 122的行地址123增加(即增加至行2),并且每个NPU 126从数据 RAM122的行2读取其相应字,将轮转后的字接收至复用寄存器705,并且对 这两个字执行乘法累加运算。因此,例如,假定当前权重RAM 124的行为27, 在执行地址2处的指令后,NPU 5将C0,1和D27,6的乘积以及C0,2和D27,7的乘 积累加至其累加器202。因此,在完成地址1和地址2处的指令后,C0,0和D27,5 的乘积、C0,1和D27,6的乘积以及C0,2和D27,7的乘积将连同来自先前通过循 环体的所有其它累加值一起累加至累加器202。
地址3与4处的指令所执行的运算与地址1与2处的指令类似,然而借助于 权重RAM124的行递增指示符,这些指令对权重RAM 124的下一行执行运 算,并且对数据RAM 122的接下来的三行(即行3至5)执行运算。也就是说, 例如针对NPU 5,在完成地址1至4处的指令后,C0,0与D27,5的乘积、C0,1 与D27,6的乘积、C0,2与D27,7的乘积、C1,0与D28,5的乘积、C1,1与D28,6的 乘积以及C1,2与D28,7的乘积将连同来自先前通过循环体的所有其它累加值 一起累加至累加器202。
地址5和6处的指令所执行的运算与地址3与4处的指令类似,然而这些指 令对权重RAM 124的下一行以及数据RAM 122的接下来的三行(即行6至8)执 行运算。也就是说,例如针对NPU 5,在完成地址1至6的指令后,C0,0与D27,5 的乘积、C0,1与D27,6的乘积、C0,2与D27,7的乘积、C1,0与D28,5的乘积、 C1,1与D28,6的乘积、C1,2与D28,7、C2,0与D29,5的乘积、C2,1与D29,6的乘 积、以及C2,2与D29,7的乘积将连同来自先前通过循环体的所有其它累加值 一起累加至累加器202。也就是说,在完成地址1至6处的指令后、并且假定 循环体开始时的权重RAM 124的行为27,则NPU 5例如将利用卷积核2402对 以下3×3子矩阵进行卷积:
D27,5 D27,6 D27,7
D28,5 D28,6 D28,7
D29,5 D29,6 D29,7
更一般地,在完成地址1到6处的指令后,512个NPU 126中的每个NPU 126都 使用卷积核2402对下列3×3子矩阵进行了卷积:
Dr,n Dr,n+1 Dr,n+2
Dr+1,n Dr+1,n+1 Dr+1,n+2
Dr+2,n Dr+2,n+1 Dr+2,n+2
其中r是循环体开始时权重RAM 124的行地址值,并且n是NPU 126的编号。
地址7处的指令使累加器202的值217通过AFU 212。该通过函数使大小为 从数据RAM 122和权重RAM 124读取的字的大小(以位为单位,在该示例中 即16位)的字通过。优选地,如以下更详细所述,用户可指定输出格式,例 如输出位中有多少位是小数位。可选地,指定除法激活函数,而非指定通过 激活函数,其中诸如本文针对图29A和图30所述,所述除法激活函数例如使 用图30的“除法器”3014/3016其中之一将累加器202的值217除以一个除数。 例如,在具有系数(诸如上述的高斯模糊核的十六分之一系数等)的卷积核 2402的情况下,地址7处的激活函数指令可以指定除法激活函数(例如除以 16),而非指定通过函数。可选地,架构程序可以在将卷积核2402系数写入 数据RAM 122之前,对这些系数执行除以16的运算,并例如使用如下所述图 29A的数据二进制小数点2922针对卷积核2402的值相应地调整二进制小数点 的位置。
地址8处的指令将AFU 212的输出写入权重RAM 124中由输出行寄存器 的当前值所指定的行,其中该当前值被地址0处的指令初始化并且借助于指 令内的递增指示符在每次通过循环时递增。
如根据图24至图26中具有3×3卷积核2402的示例可以确定,NPU 126大 约每三个时钟周期读取权重RAM 124以读取数据矩阵2406的行,并且大约每 12个时钟周期将卷积结果矩阵写入权重RAM 124。此外,假定包括诸如图17 的缓存器1704等的写入和读取缓存器的实施例,与NPU 126进行读取与写入 并行地,处理器100对权重RAM 124进行读取与写入,使得缓存器1704大约 每16个时钟周期对权重RAM 124执行一次写入和一次读取,以分别写入数据 矩阵2406以及读取卷积结果矩阵。因此,权重RAM 124的大约一半的带宽被 NNU121执行卷积核运算所用的混合方式消耗。尽管本示例包含3×3卷积核 2402,但可以采用其它大小的卷积核,诸如2×2、4×4、5×5、6×6、7×7、 8×8等矩阵,在这种情况下,NNU程序将改变。在卷积核较大的情况下,因 为乘法累加指令的轮转版本的计数较大(例如图26A的程序的地址2、4与6处、 以及较大卷积核所需的附加指令),因而NPU 126读取权重RAM124的时间的 百分比较小,因此权重RAM 124的带宽被消耗的百分比也较小。
可选地,架构程序将NNU程序配置为在不再需要输入数据矩阵2406的行 之后对这些行进行覆写,而非将卷积结果写回权重RAM 124的不同行(例如 行900~1299与1300~1699)。例如,在3×3卷积核的情况下,架构程序将数据 矩阵2406写入权重RAM 124的行2~401,而非将数据矩阵2406写入行0~399, 并且NPU程序被配置为从权重RAM 124的行0开始并且每通过一次循环体就 递增地,将卷积结果写入权重RAM 124。如此,NNU程序只对不再需要的行 进行覆写。例如,在第一次通过循环体之后(或更具体地,在执行地址1处的 加载权重RAM 124的行0的指令之后),行0的数据可被覆写,但是行1~3的数 据需要用于第二次通过循环体因而不会因为第一次通过循环体而被覆写;同 样地,在第二次通过循环体之后,行1的数据可被覆写,但是行2~4的数据需 要用于第三次通过循环体因而不会因为第二次通过循环体而被覆写;依此类 推。在这样的实施例中,各个数据矩阵2406(数据块)的高度可以较大(例如, 800行),从而得到较少的数据块。
可选地,架构程序将NNU程序配置为将卷积结果写回数据RAM 122的卷 积核2402上方(例如,行8上方)的行,而非将卷积结果写回权重RAM 124,并 且当NNU 121(例如使用以下所述的图26B的数据RAM 122的最近写入的行 2606的地址)写入结果时,架构程序从数据RAM 122读取这些结果。这种替 代方案在权重RAM 124为单端口并且数据RAM 122为双端口的实施例中可 以是有利的。
从根据图24至图26A的实施例的NNU 121的操作可以发现,图26A的程 序的每次执行需要约5000个时钟周期,因此,图24的整个2560×1600的数据 阵列2404的卷积需要大约100000个时钟周期,明显少于以传统方式执行相同 任务所需要的时钟周期数。
现参考图26B,示出一框图,该框图示出根据一个实施例的图1的NNU 121的控制寄存器127的某些字段。状态寄存器127包括:字段2602,用于指 示权重RAM 124中最近被NPU126写入的行的地址;字段2606,用于指示数 据RAM 122中最近被NPU 126写入的行的地址;字段2604,用于指示权重 RAM 124中最近被NPU 126读取的行的地址;以及字段2608,用于指示数据 RAM 122中最近被NPU 126读取的行的地址。这样使得执行于处理器100上的 架构程序能够在其对数据RAM 122和/或权重RAM 124进行读取和/或写入时 确定NNU 121的进度。利用这种能力,连同如上所述对输入数据矩阵进行覆 写(或者如上所述将结果写入数据RAM 122)的选择,图24的数据阵列2404可 以例如如下所述被处理为5个512×1600的数据块,而非20个512×400的数据 块。处理器100从行2开始将第一512×1600数据块写入权重RAM 124,并开 启NNU程序(该程序具有1600的循环计数、以及值为0的初始化权重RAM124 输出行)。当NNU 121执行NNU程序时,处理器100监测权重RAM 124的输出 的位置/地址,从而(1)(使用MFNN指令1500)读取权重RAM 124中具有由NNU 121(从行0开始)写入的有效卷积结果的行、(2)一旦已经读取了有效卷积结果 就将第二个512×1600数据矩阵2406(从行2开始)覆写于这些有效卷积结果, 使得当NNU 121对于第一512×1600数据块完成NNU程序时,处理器100可以 根据需要立即更新NNU程序并再次开启NNU程序以处理第二个512×1600 数据块。该处理针对剩余的三个512×1600数据块再重复三次,以实现NNU 121的高利用率。
有利地,在一个实施例中,如以下针对图29A、29B与30更详细所述, AFU 212具有对累加器202的值217高效地执行有效除法的能力。例如,使累 加器202的值217除以16的激活函数NNU指令可用于上述的高斯模糊矩阵。
尽管图24的示例中所使用的卷积核2402是应用于整个数据阵列2404的 小型静态卷积核,但在其它实施例中,该卷积核可以是诸如常见于卷积神经 网络的具有与数据阵列2404的不同数据值相关联的唯一权重的大型矩阵。当 NNU 121以这种方式使用时,架构程序可以将数据矩阵与卷积核的位置互 换,即将数据矩阵放置于数据RAM 122内并且将卷积核放置于权重RAM 124 内,并且可通过对NNU程序的特定执行所处理的行数可以相对较少。
现参考图27,示出一框图,该框图示出将图1中的权重RAM 124填充输 入数据的示例,其中由图1的NNU 121对所述输入数据执行池化运算。人工 神经网络的池化层所执行的池化运算通过取得输入矩阵的子区域或子矩阵 并计算这些子矩阵的最大值或平均值来缩减输入数据矩阵(例如,图像或卷 积后图像)的维度,并且这些最大值或平均值变为结果矩阵或池化矩阵。在 图27和图28的示例中,池化运算计算各个子矩阵的最大值。池化运算对于例 如执行对象分类或检测的人工神经网络特别有用。一般而言,池化运算有效 地以所检查的子矩阵的元素数的因子来缩减输入矩阵的大小,并且特别地以 子矩阵的相应维度的元素数来使输入矩阵在各个维度方向上缩减。在图27的 示例中,输入数据是储存于权重RAM 124的行0至1599中的宽字(例如16位) 的512×1600矩阵。在图27中,字以其所在的行列位置标示,例如,位于行0 列0的字标示为D0,0;位于行0列1的字标示为D0,1;位于行0列2的字标示为 D0,2;依此类推,位于行0列511的字标示为D0,511。同样,位于行1列0的字 标示为D1,0;位于行1列1的字标示为D1,1;位于行1列2字标示为D1,2;依此 类推,位于行1列511的字标示为D1,511;依此类推,位于行1599列0的字标 示为D1599,0;位于行1599列1的字标示为D1599,1;位于行1599列2的字标示 为D1599,2;依此类推,位于行1599列511的字标示为D1599,511。
现参考图28,示出NNU程序的程序列表,其中该NNU程序执行图27的 输入数据矩阵的池化运算并将其写回权重RAM 124。在图28的示例中,池化 运算计算输入数据矩阵中各个4×4子矩阵的最大值。该程序使地址1至10处 的指令的循环体循环多次。地址0处的初始化NPU指令指定每个NPU 126执行 循环体的次数,例如在图28的示例中,循环体的循环计数值为400,并且循 环末尾(地址11)处的循环指令使当前循环计数值递减,如果递减后的结果是 非零值,则控制返回循环体的顶部(即返回地址1处的指令)。权重RAM 124 内的输入数据矩阵实际上被NNU程序视为由四个相邻行构成的400个互斥 组,即行0~3、行4~7、行8~11、依此类推,直到行1596~1599。由四个相邻 行构成的每一个组包括128个4×4子矩阵,即由组的四行与四个相邻列行(即 列0~3、列4~7、列8~11、依此类推直到列508~511)的交叉所形成的元素的4 ×4子矩阵。在512个NPU 126中,这512个NPU 126中每第四个NPU 126(即, 128个NPU 126)对相应的4×4子矩阵执行池化运算,而其它四分之三的NPU126则不使用。更具体地,NPU 0、4、8、依此类推直到NPU 508各自对其相 应的4×4子矩阵执行池化运算,其中4×4子矩阵的最左侧列编号对应于NPU 编号,而下方的行对应于当前权重RAM 124的行值,如以下更详细所述,该 值被地址0处的初始化指令初始化为零并且在每次重复循环体时增加4。循环 体的400次迭代与图27的输入数据矩阵中的4x4子矩阵组数(即输入数据矩阵 的1600行除以4)相对应。初始化NPU指令也将累加器202清零。优选地,地址11处的循环指令也将累加器202清零。可选地,地址1的maxwacc指令指定 将累加器202清零。
对于程序的循环体的每次迭代,所使用的128个NPU 126并行地对输入数 据矩阵的当前四行组中的128个相应的4×4子矩阵执行128个池化运算。更具 体地,池化运算确定4×4子矩阵的16个元素中的最大值元素。在图28的实施 例中,对于所使用的128个NPU 126中的每个NPU y,4×4子矩阵的左下侧元 素为图27的元素Dx,y,其中x是循环体开始时当前权重RAM 124的行编号, 由图28的程序的地址1处的maxwacc指令读取(此行编号也由地址0处的初始 化NPU指令初始化,并在每次执行地址3、5和7处的maxwacc指令时递增)。 因此,对于程序的每次循环,所使用的128个NPU 126将当前行组的相应128 个4×4子矩阵的相应最大值元素写回权重RAM 124的指定行。以下针对该循 环体进行说明。
地址1处是maxwacc指令,用于隐式地使用当前权重RAM 124的行,该 行优选保持在定序器128内(并由位于地址0处的指令初始化为零以用于第一 次通过循环体)。地址1处的指令使每个NPU 126从权重RAM 124的当前行读 取其相应字,将该字与累加器202的值217进行比较,并将这两个值的最大者 储存于累加器202中。因此,例如,NPU 8确定累加器202的值217和数据字 Dx,8(其中“x”是当前权重RAM 124的行)中的最大值,并将该最大值写回 累加器202。
地址2处是maxwacc指令,其用于指定将每个NPU 126的复用寄存器705 内的值轮转至相邻NPU 126,所述值在这种情况下为响应于地址1处的指令而 仅从权重RAM 124读取的一行输入数据矩阵值。在图27至图28的实施例中, 如以上针对图24至26所述,NPU 126被配置为将复用器705的值向左轮转,即 从NPU J轮转至NPU J-1。此外,指令指定计数值3。因此,地址2处的指令使 每个NPU 126将轮转后的字接收至复用寄存器705并确定轮转后的字和累加 器202的值217中的最大值,然后将该运算再重复两次。也就是说,每个NPU 126三次将轮转后的字接收至复用寄存器705中并确定轮转后的字和累加器 202的值217中的最大值。因此,例如,假定循环体开始时的当前权重RAM 124 的行为36,以NPU 8为例,在执行地址1与2处的指令后,NPU 8将在其累加 器202中储存循环体开始时的累加器202以及四个权重RAM 124字D36,8、 D36,9、D36,10和D36,11中的最大值。
地址3与4处的maxwacc指令所执行的运算与地址1和2处的指令所执行 的运算类似,然而利用权重RAM 124行递增指示符,地址3与4处的指令 maxwacc对权重RAM 124的下一行执行运算。也就是说,假定循环体开始时 的当前权重RAM 124的行是36,以NPU 8为例,在完成地址1至4处的指令之 后,NPU 8将在其累加器202中储存循环体开始时的累加器202以及八个权重 RAM 124的字D36,8、D36,9、D36,10、D36,11、D37,8、D37,9、D37,10与D37,11中的最大值。
地址5至8处的maxwacc指令所执行的运算与地址3至4处的指令所执行 的运算类似,然而地址5至8处的指令对权重RAM 124的接下来的两行执行运 算。也就是说,假定循环体开始时的当前权重RAM 124列是36,以NPU 8为 例,在完成地址1到8的指令后,NPU 8将在其累加器202中储存循环开始时的 累加器202以及十六个权重RAM 124字D36,8、D36,9、D36,10、D36,11、D37,8、 D37,9、D37,10、D37,11、D38,8、D38,9、D38,10、D38,11、D39,8、D39,9、 D39,10与D39,11中的最大值。也就是说,假定循环体开始时的当前权重RAM 124的行是36,以NPU 8为例,在完成地址1到8处的指令后,NPU 8将确定以 下4×4子矩阵的最大值:
Figure BDA0002163527810000711
更具体地,在完成地址1至8处的指令后,所用的128个NPU 126中的各NPU 126将确定以下4×4子矩阵的最大值:
Figure BDA0002163527810000712
其中r是循环体开始时的权重RAM 124的行地址值,n是NPU 126的编号。
地址9处的指令使累加器202的值217通过AFU 212。这种通过函数使得大 小为从权重RAM 124读取的字的大小(以位为单位,在该示例中即16位)的字 通过。优选地,如以下更详细所述,用户可指定输出格式,例如输出位中有 多少位是小数位。
地址10处的指令将累加器202的值217写入权重RAM 124中由输出行寄 存器的当前值所指定的行,其中该当前值被地址0处的指令初始化,并借助 于指令内的递增指示符在每次通过循环体时递增。更具体地,地址10处的指 令将累加器202的宽字(例如16位)写入权重RAM 124。优选地,如以下针对图 29A和图29B更详细所述,指令将16个位按照输出二进制小数点2916所指定 的那样进行写入。
可以发现,通过对循环体进行迭代而写入权重RAM 124的行包含具有无 效数据的空洞。也就是说,结果133的宽字1至3、5至7、9至11、依此类推, 直到宽字509至511都是无效或未使用的。在一个实施例中,AFU 212包括复 用器,其中该复用器使得能够将结果压紧至行缓存器(诸如图11的行缓存器 1104等)的相邻字中,以写回输出权重RAM 124行。优选地,激活函数指令 指定每个空洞中的字数,并且空洞内的字数用于控制复用器的压紧结果。在一个实施例中,空洞数可指定为2~6的值,以对池化的3×3、4×4、5×5、6 ×6或7×7子矩阵的输出进行压紧。可选地,执行于处理器100上的架构程序 从权重RAM 124读取所产生的稀疏(即具有空洞)的结果行,并使用其它执行 单元112(诸如使用例如x86SSE指令等的架构压紧指令的媒体单元等)执行 压紧功能。有利地,以类似于前述的并行方式并利用NNU121的混合本质, 执行于处理器100上的架构程序可以读取状态寄存器127来监测权重RAM124的最近写入行(例如图26B的字段2602)以读取所产生的稀疏行,将其压紧 并写回权重RAM 124的同一行,使得准备好用作神经网络的下一层(诸如卷 积层或传统神经网络层(即乘法累加层)等)的输入数据矩阵。此外,尽管本文 所述的实施例对4×4子矩阵执行池化运算,但可以对图28的NNU程序进行修 改,以对诸如3×3、5×5、6×6或7×7子矩阵等的其它大小的子矩阵执行池 化运算。
还可以发现,写入权重RAM 124的结果行数是输入数据矩阵的行数的四 分之一。最后,在该示例中,并未使用数据RAM 122。然而,备选地,可以 使用数据RAM 122,而不使用权重RAM 124,来执行池化运算。
在图27和图28的示例中,池化运算计算子区域的最大值。然而,图28的 程序可被修改为例如通过用sumwacc指令(将权重字与累加器202的值217相 加)取代maxwacc指令并将地址9处的激活函数指令更改为将累加结果(优选 经由如下所述的倒数相乘)除以各个子区域的元素数(在该示例中为16),来计 算子区域的平均值。
从根据图27和图28的实施例的NNU 121的运算可以发现,每一次执行图 28的程序用约6000个时钟周期来对图27的整个512×1600数据矩阵执行池化 运算,该时钟周期数可明显少于传统方式执行类似任务所需的时钟周期数。
可选地,架构程序将NNU程序配置为将池化运算的结果写回数据RAM 122的行,而非将结果写回权重RAM 124,并且当NNU 121(例如使用图26B 的数据RAM 122的最近写入的行2606的地址)将结果写入数据RAM 122时, 架构程序从该数据RAM 122读取结果。这种替代方案在权重RAM 124为单端 口并且数据RAM 122为双端口的实施例中可以是有利的。
具有用户提供的二进制小数点的定点算术,全精度定点累加,用户指定的倒数值, 累加器值的随机舍入,以及可选择激活/输出函数
一般而言,由于在数字计算装置内执行算术运算的硬件单元对整数和浮 点数分别执行算术运算、因而通常可分为“整数”单元与“浮点”单元。浮 点数具有幅值(magnitude)(或尾数)和指数,通常还有符号。指数是基数(radix) 点(通常为二进制小数点)相对于幅值的位置的指示。相较之下,整数不具有 指数,而只具有幅值,通常还有符号。浮点单元的优点在于使程序设计者能 够使用从非常大范围内的不同值中取得的数字来工作,而硬件则是在需要时 负责调整数字的指数值,而不需程序设计者来进行调整。例如,假定两个浮 点数0.111×1029与0.81×1031相乘。(虽然浮点单元通常工作于以2为基础的浮点数,但这里使用的是十进制小数或以10为基础的示例。)浮点单元自动负 责将尾数相乘,将指数相加,随后将结果标准化回到值.8911×1059。再例如, 假定同样的两个浮点数相加。浮点单元在相加前自动负责将尾数的二进制小 数点对齐以产生值为.81111×1031的总和。
然而,与浮点单元相关联的复杂性以及随之产生的大小、耗能、每指令 的时钟周期的增加和/或周期时间的延长是众所周知的。实际上,出于这个原 因,许多装置(例如,嵌入式处理器、微控制器以及相对低成本和/或低功率 的微处理器)不包括浮点单元。从上述示例可以发现,一些复杂的浮点单元 包括:用于执行与浮点加法和乘法/除法相关联的指数计算的逻辑(即用以对 操作数的指数执行加法/减法运算以产生浮点乘法/除法的结果指数值的加法 器、用于确定操作数的指数相减以确定浮点加法的二进制小数点对齐移位量 的减法器)、用于实现浮点加法中尾数的二进制小数点对齐的移位器、以及 用于对浮点结果进行标准化处理的移位器。此外,流程进入方框单元通常需 要执行浮点结果的舍入运算的逻辑、在整数格式与浮点格式间以及不同浮点 精确度格式(例如扩增精度、双精度、单精度、半精度)间转换的逻辑、前导 零与前导一的检测器、以及处理特殊浮点数(例如反常值、非数值和无穷值 等)的逻辑。
此外,存在如下的缺点:因为设计上需要被验证的数值空间的增加,浮 点单元的正确度验证显著变得极其复杂,从而可能延长产品开发周期与上市 时间。此外,如上所述,浮点算术意味着对计算所涉及的各浮点数的单独尾 数字段和指数字段的储存和使用,这可能增加所需的存储空间的量和/或在给 定等量的存储空间来储存整数的情况下降低精确度。这些缺点中的许多都可 以通过使用对整数执行算术运算的整数单元来避免。
程序设计者经常编写处理小数即非整数的程序。这种程序可以在如下的 处理器上执行,其中这些处理器不具有浮点单元,或者虽然具有浮点单元, 但处理器的整数单元所执行的整数指令可以更快。为了利用与整数单元相关 联的潜在性能优势,程序设计者对定点(fixed-point)数采用周知的定点算术。 这样的程序包括执行于整数单元以处理整数或整数数据的指令。软件知道数 据是小数,并且包含用于对整数数据执行运算以应对该数据实际上是小数这 一事实的指令(例如,对齐移位)。基本上,定点软件手动执行浮点单元所执 行的一些或全部功能。
如本文中所使用的,“定点”数(或值或操作数或输入或输出)是一个数字, 该数字的储存位被理解为包含表示该定点数的小数部分的位(这里被称为 “小数位”)。定点数的储存位包含于存储器或寄存器内,例如存储器或寄 存器内的8位或16位字。此外,定点数的储存位全部用来表示一个幅值,并 且在某些情况下,其中一个位用来表示符号,但是定点数没有用来表示该数 的指数的储存位。此外,在存储时指定该定点数的小数位的数量或二进制小 数点位置,这与定点数的储存位不同,并且针对定点数所属的定点数集合(例 如输入操作数的集合、累加值的集合或处理单元的阵列的输出结果的集合等) 以共享或全局的方式指示小数位的数量或二进制小数点位置。
有利地,在本文描述的实施例中,ALU是整数单元,但是激活函数单元 包含浮点算术硬件辅助或加速。这样使得ALU部分变得更小且更快,从而利 于在给定的晶粒空间内使用更多的ALU。这意味着每单位晶粒空间有更多的 神经元,从而在神经网络单元中特别有利。
此外,有利地,与每个浮点数都需要指数储存位的浮点数相反,描述了 如下的实施例,其中以针对全部数字集合的作为小数位的储存位的数量的指 示来表示定点数,然而,该指示位于单个共享存储空间中,其全局地指示针 对整个集合(例如一系列运算的输入的集合、一系列运算的累加值的集合、 输出的集合)的所有数字中的小数位的数量。优选地,NNU的用户能够为数 字集合指定小数储存位的数量。因此,应当理解,虽然在许多上下文中(例 如一般数学中),术语“整数”是指带符号整数,即不具有小数部分的数字, 但是在本上下文中,术语“整数”可以指具有小数部分的数字。此外,在本 文的上下文中,术语“整数”旨在与浮点数进行区分,对于浮点数而言,其 各自存储空间的位数的一部分用来表示浮点数的指数。类似地,整数算术运 算(诸如整数单元执行的整数乘法或加法或比较等)假设操作数不具有指数, 因此,整数单元的整数元件(诸如整数乘法器、整数加法器、整数比较器等) 不包含用来处理指数的逻辑,例如不需要为了加法或比较运算而移位尾数来 使二进制小数点对齐,不需要为了乘法运算而将指数相加。
此外,本文所述的实施例包括大型硬件整数累加器以在不损失精确度的 情况下对一系列的大整数运算进行累加(例如,1000量级的乘法累加)。这样 使得NNU能够避免处理浮点数,同时又能使累加值维持全精度,而不使其饱 和或因为溢位而产生不准确的结果。如以下更详细所述,一旦这系列整数运 算将结果累加至全精度累加器,定点硬件辅助就执行必要的缩放和饱和运 算,以利用用户指定的累加值小数位的数量和输出值的小数位的期望数量的 指示来将全精度累加值转换为输出值。
如以下更详细所述,在将累加器值从全精度形式进行压缩以便用作激活 函数的输入或者用于通过时,优选地,激活函数单元可以选择性地对该累加 器值执行随机舍入。最后,按照神经网络的给定层的不同需求,NPU可以选 择性地接受指示以应用不同的激活函数以及/或者输出许多不同形式的累加 器值。
现参考图29A,示出一框图,该框图示出图1的控制寄存器127的实施例。 控制寄存器127可包括多个控制寄存器127。如图所示,控制寄存器127包括 以下字段:配置2902、带符号数据2912、带符号权重2914、数据二进制小数 点2922、权重二进制小数点2924、ALU函数2926、舍入控制2932、激活函数 2934、倒数2942、移位量2944、输出RAM 2952、输出二进制小数点2954、 以及输出命令2956。控制寄存器127值可以利用MTNN指令1400和NNU程序 的指令(诸如初始化指令等)两者来写入。
配置2902的值指定NNU 121是窄配置、宽配置还是漏斗配置,如上所述。 配置2902意味着从数据RAM 122和权重RAM 124接收到的输入字的大小。在 窄配置与漏斗配置中,输入字的大小是窄的(例如8位或9位),而在宽配置中, 输入字的大小是宽的(例如12位或16位)。此外,配置2902意味着与输入字大 小相同的输出结果133的大小。
带符号数据值2912如果为真则表示从数据RAM 122接收到的数据字是 带符号值,如果为假则表示这些数据字是不带符号值。带符号权重值2914如 果为真则表从权重RAM124接收到的权重字是带符号值,如果为假则表示这 些权重字是不带符号值。
数据二进制小数点2922的值指示从数据RAM 122接收到的数据字的二 进制小数点的位置。优选地,数据二进制小数点2922的值指示从二进制小数 点位置的右侧起的位位置的数量。换言之,数据二进制小数点2922指示数据 字的最低有效位中的多少位是小数位,即位于二进制小数点右侧。类似地, 权重二进制小数点2924的值指示从权重RAM 124接收到的权重字的二进制 小数点的位置。优选地,在ALU函数2926是乘法累加或输出累加器的情况下, NPU 126将保持在累加器202中的值的二进制小数点右侧的位数确定为数据 二进制小数点2922和权重二进制小数点2924的总和。因此,例如,如果数据 二进制小数点2922的值为5而权重二进制小数点2924的值为3,则累加器202 内的值在二进制小数点右侧具有8个位。在ALU函数2926是和/最大累加器与 数据/权重字、或者通过数据/权重字的情况下,NPU 126将保持在累加器202 的值的二进制小数点右侧的位数分别确定为数据二进制小数点2922/权重二 进制小数点2924。在备选实施例中,如以下针对图29B所述,指定单个累加 器二进制小数点2923,而非指定各自的数据二进制小数点2922和权重二进制 小数点2924。
ALU函数2926指定由NPU 126的ALU 204执行的函数。如上所述,ALU 函数2926可以包括但不限于:将数据字209与权重字203相乘并将乘积与累加 器202累加;将累加器202与权重字203相加;将累加器202与数据字209相加; 累加器202与数据字209中的最大值;累加器202与权重字203中的最大值;输 出累加器202;通过数据字209;通过权重字203;输出零值。在一个实施例 中,ALU函数2926由NNU初始化指令指定,并且由ALU 204响应于执行指令(未示出)而使用。在一个实施例中,ALU函数2926由个别的NNU指令(诸如上 述的乘法累加和maxwacc指令等)指定。
舍入控制2932指定(图30中)舍入器3004所使用的舍入的形式。在一个实 施例中,可指定的舍入模式包括但不限于:不舍入、舍入至最近值、以及随 机舍入。优选地,处理器100包括用于生成随机位3005的(图30的)随机位源 3003,其中这些随机位3005被取样并且用来执行随机舍入以降低产生舍入偏 置的可能性。在一个实施例中,在舍入位3005为1并且粘滞(sticky)位为零的 情况下,如果取样的随机位3005为真,则NPU 126向上舍入,如果随机位3005 为假,则NPU 126不向上舍入。在一个实施例中,随机位源3003基于对处理 器100的随机电子特性(诸如半导体二极管或电阻的热噪声等)的取样来产生 随机位3005,但是还设想了其它实施例。
激活函数2934指定适用于累加器202的值217的函数以产生NPU 126的输 出133。如上所述并且以下更详细所述,激活函数2934包括但不限于:S型函 数;双曲正切函数;软加函数;校正函数;除以二的指定幂次方;乘以用户 指定的倒数值以实现等效除法;通过整个累加器;以及如以下更详细所述的 作为标准大小通过累加器。在一个实施例中,激活函数由NNU激活函数指令 指定。可选地,激活函数由初始化指令指定,并响应于输出指令(例如图4中 地址4处的写入AFU输出指令)而应用,在该实施例中,位于图4的地址3的激 活函数指令归入输出指令。
倒数2942值指定与累加器202的值217相乘以实现累加器202的值217的 除法的值。也就是说,用户将倒数2942值指定为实际上期望的除数的倒数。 这例如与如本文所述的卷积或池化运算相结合是有用的。优选地,如以下针 对图29C更详细所述,用户将倒数2942值指定为两个部分。在一个实施例中, 控制寄存器127包括一字段(未示出),其中该字段使得用户能够在多个内建除 数值中指定一个进行除法,这些内建除数值的大小相当于常用的卷积核的大 小,例如9、25、36或49。在这样的实施例中,AFU 212可以储存这些内建除 数的倒数,以供与累加器202值217相乘。
移位量2944指定AFU 212的移位器将累加器202的值217右移以实现除以 二的幂次方的位数。这与大小为二的幂次方的卷积核的结合也可以是有用 的。
输出RAM 2952的值指定数据RAM 122和权重RAM 124中的哪一个要接 收输出结果133。
输出二进制小数点2954的值指示输出结果133的二进制小数点的位置。 优选地,输出二进制小数点2954的值指示从输出结果133的二进制小数点位 置的右侧起的位位置数量。换言之,输出二进制小数点2954指示输出结果133 的最低有效位中的多少位是小数位,即位于二进制小数点右侧。AFU 212基 于输出二进制小数点2954的值(在大部分的情况下,还基于数据二进制小数 点2922的值、权重二进制小数点2924的值、激活函数2934的值和/或配置2902 的值)来执行舍入、压缩、饱和与大小转换。
输出命令2956控制输出结果133的各个方面。在一个实施例中,AFU 212 利用标准大小的概念,其中标准大小是配置2902所指定的宽度大小(以位为 单位)的两倍。因此,例如,如果配置2902意指从数据RAM 122和权重RAM 124接收到的输入字的大小是8位,则标准大小是16位;在另一个示例中,如 果配置2902意指从数据RAM 122与权重RAM 124接收到的输入字的大小是 16位,则标准大小是32位。如本文所述,累加器202的大小较大(例如,窄累加器202B是28位,而宽累加器202A是41位)以维持中间计算(例如分别为1024 个和512个NNU乘法累加指令)的全精度。如此,累加器202的值217大于(以 位为单位)标准大小,并且AFU 212(例如以下针对图30所述的CCS 3008)针对 激活函数2934(除了通过全累加器)的大部分值将累加器202的值217向下压缩 至具有标准大小的值。输出命令2956的第一预定值指示AFU 212执行指定的 激活函数2934以产生大小与原始输入字相同(即,标准大小的一半)的内部结 果并将该内部结果作为输出结果133输出。输出命令2956的第二预定值指示 AFU 212执行指定的激活函数2934以产生大小为原始输入字的两倍(即,标准 大小)的内部结果并将该内部结果的下半部作为输出结果133输出;而输出命 令2956的第三预定值指示AFU 212将标准大小的内部结果的上半部作为输出 结果133输出。如以上针对图8至图10所述,输出命令2956的第四预定值指示 AFU 212将累加器202的原始最低有效字(其宽度由配置2902指定)作为输出 结果133输出;第五预定值指示AFU 212将累加器202的原始中间有效字作为 输出结果133输出;以及第六预定值指示AFU 212将累加器202的原始最高有效字作为输出结果133输出。如上所述,输出全累加器202大小或标准大小的 内部结果例如对于使处理器100的其它执行单元112能够执行诸如软极大激 活函数等的激活函数而言可以是有利的。
尽管图29A(以及图29B和图29C)的字段被描述为位于控制寄存器127中, 但是在其它实施例中,一个或多个字段可以位于NNU 121的其它部分。优选 地,许多字段可以包含在NNU指令本身中,并由定序器128进行解码以产生 (图34的)用于控制ALU 204和/或AFU212的微操作3416。此外,这些字段可 以包含在储存于媒体寄存器118中的(图34的)微操作3414内,微操作3414控制 ALU 204和/或AFU 212。在这样的实施例中,可以使初始化NNU指令的使用 减至最少,并且在其它实施例中,去除初始化NNU指令。
如上所述,NNU指令能够指定对存储器操作数(例如来自数据RAM 122 和/或权重RAM 124的字)或轮转后的操作数(例如来自复用寄存器208/705)执 行ALU运算。在一个实施例中,NNU指令还可以将操作数指定为激活函数的 寄存器输出(例如图30的寄存器输出3038)。此外,如上所述,NNU指令能够 指定使数据RAM 122或权重RAM 124的当前行地址递增。在一个实施例中, NNU指令可以指定被加入当前行的即时的带符号整数差值(deltavalue)以实 现以除了一以外的值递增或递减。
现参考图29B,示出一框图,该框图示出根据备选实施例的图1的控制寄 存器127的实施例。图29B的控制寄存器127与图29A的控制寄存器127类似; 然而,图29B的控制寄存器127包括累加器二进制小数点2923。累加器二进制 小数点2923表示累加器202的二进制小数点位置。优选地,累加器二进制小 数点2923的值表示从二进制小数点位置的右侧起的位位置数量。换言之,累 加器二进制小数点2923表示累加器202的最低有效位中有多少位是小数位, 即位于二进制小数点右侧。在该实施例中,累加器二进制小数点2923被明确 指定,而非如以上针对图29A的实施例所述隐式地确定。
现参考图29C,示出一框图,该框图示出根据一个实施例的以两个部分 储存的图29A的倒数2942的实施例。第一部分2962是移位值,其表示用户想 要与累加器202的值217相乘的真实倒数值中被抑制的前导零的数量2962。前 导零的数量是紧接在二进制小数点右侧的连续零的数量。第二部分2694是前 导零被抑制的倒数2964的值,即将所有前导零移除后的真实倒数值。在一个 实施例中,被抑制前导零的数量2962被存储为4位,而前导零被抑制的倒数 2964的值则被存储为8位不带符号值。
为了通过示例进行说明,假设用户期望将累加器202的值217乘以为49的 倒数。以13个小数位表示的49的倒数的二进制表示是0.0000010100111(具有 五个前导零)。在这种情况下,用户将被抑制前导零的数量2962填入值5,将 前导零被抑制的倒数2964填入值10100111。在(图30的)倒数乘法器“除法器 A”3014将累加器202的值217与前导零被抑制的倒数2964的值相乘之后,将 所产生的乘积按照被抑制前导零的数量2962进行右移。这样的实施例可以有 利地通过利用相对较少的位来表示倒数2942的值来实现高精确度。
现参考图30,示出一框图,该框图更详细地示出图2的AFU 212的实施例。 AFU 212包含:图1的控制寄存器127;正型转换器(positive form converter,PFC) 和输出二进制小数点对齐器(output binary point aligner,OBPA)3002,其用于 接收累加器202的值217;舍入器3004,其用于接收累加器202的值217以及 OBPA 3002所移出的位数的指示;随机位源3003,如上所述,其用于产生随 机位3005;第一复用器3006,其用于接收PFC与OBPA3002的输出以及舍入 器3004的输出;标准大小压缩器(compressor to canonical size,CCS)和饱和器 3008,其用于接收第一复用器3006的输出;位选择器和饱和器3012,其用于接收CCS和饱和器3008的输出;校正器3018,其用于接收CCS和饱和器3008 的输出;倒数乘法器3014,其用于接收CCS和饱和器3008的输出;向右移位 器3016,其用于接收CCS和饱和器3008的输出;双曲正切(tanh)模块3022,其 用于接收位选择器和饱和器3012的输出;S型模块3024,其用于接收位选择 器和饱和器3012的输出;软加模块3026,其用于接收位选择器和饱和器3012 的输出;第二复用器3032,其用于接收双曲正切模块3022、S型模块3024、软加模块3026、校正器3018、倒数乘法器3014、向右移位器3016的输出以及 CCS和饱和器3008的通过标准大小的输出3028;符号恢复器3034,其用于接 收第二复用器3032的输出;大小转换器和饱和器3036,其用于接收符号恢复 器3034的输出;第三复用器3037,其用于接收大小转换器和饱和器3036的输 出以及累加器的输出217;以及输出寄存器3038,其用于接收复用器3037的 输出并且其输出是图1的结果133。
PFC和OBPA 3002接收累加器202的值217。优选地,如上所述,累加器 202的值217是全精度值。也就是说,累加器202具有足够的储存位数来保持 累加值,其中该累加值是由整数加法器244所生成的一系列由整数乘法器242 产生的乘积的总和,而不舍弃乘法器242的各乘积或加法器的总和中的任何 位,使得不会损失精度。优选地,累加器202至少具有足够的位数来保持NNU 121可被编程执行的乘积累加的最大数量。例如,参考图4的程序来进行说明, 在宽配置下NNU 121可被编程执行的乘积累加的最大数量为512,而累加器 202的位宽度为41。再例如,参考图20的程序来进行说明,在窄配置下NNU 121可被编程执行的乘积累加的最大数量为1024,而累加器202的位宽度为 28。一般地,全精度累加器202具有至少Q个位,其中Q是M与log2P的总和, 其中M是乘法器242的整数乘积的位宽度(例如,对于窄乘法器242而言为16 位,或者对于宽乘法器242而言为32位),而P是可以累加到累加器202的整数 乘积的最大容许数量。优选地,乘积累加的最大数量是经由NNU 121的程序 设计者的编程规格所指定的。在一个实施例中,在假定从数据/权重RAM 122/124加载数据/权重字206/207的行的一个先前的乘法累加指令(例如图4的 地址1处的指令)的情况下,定序器128将乘法累加NNU指令(例如图4的地址2 处的指令)的计数的最大值例如强制设置为511。
有利地,通过包括具有足够大的位宽度以对所容许累加的最大数量的全 精度值执行累加的累加器202,可简化NPU 126的ALU 204部分的设计。特别 是,这样可以缓解对使用逻辑来使整数加法器244产生的总和饱和的需求, 其中该逻辑将使小型累加器产生溢位,并且将需要持续追踪累加器的二进制 小数点位置以确定是否发生了溢位从而知晓是否需要饱和。为了通过示例对 具有非全精度累加器但具有饱和逻辑以处理非全精度累加器的溢位的设计 的问题进行说明,假定存在以下情况。
(1)数据字的值的范围介于0与1之间,并且所有储存位都用来储存小数 位。权重字值的范围介于-8与+8之间,并且除了三个位以外的所有储存位都 用来储存小数位。用于双曲正切激活函数的输入的累加值的范围介于-8与8 之间,并且除了三个位以外的所有储存位都用来储存小数位。
(2)累加器的位宽度为非全精度(例如,只有乘积的位宽度)。
(3)假定累加器为全精度,则最终累加值将介于-8与8之间(例如,+4.2); 然而,在序列中“点A”前的乘积更常见地倾向为正,而在点A后的乘积更 常更常见地倾向为负。
在这种情况下,可能获得不准确的结果(即,+4.2以外的结果)。这是因 为在点A前的某些点处,当累加器值本应当是更大的值(例如,+8.2)时,累加 器可能饱和到最大值+8,导致损失剩余的+0.2。累加器甚至可以使更多的乘 积累加维持在饱和值,从而导致损失更多正值。因此,累加器的最终值可能 为比累加器具有全精度位宽度的情况下的最终值(即小于+4.2)更小的值。
PFC 3002在累加器202的值217为负的情况下将其转换为正型,并产生附 加位以指示原始值是正还是负,该附加位与所述值一起向下通过AFU 212的 流水线。转换为正型简化了AFU 212的后续运算。例如,该操作使得只有正 值才能被输入至双曲正切模块3022和S型模块3024,因而可以简化这些模块。 此外,简化了舍入器3004和饱和器3008。
OBPA 3002向右移位或缩放正型值,以使其与控制寄存器127内指定的输 出二进制小数点2954对齐。优选地,OBPA 3002将移位量计算为一差值,所 述差值是从累加器202的值217的小数位数(例如,由累加器二进制小数点 2923所指定、或是数据二进制小数点2922和权重二进制小数点2924的总和) 减去的输出的小数位数(例如,由输出二进制小数点2954所指定)。因此,例 如,如果累加器202的二进制小数点2923为8(如上述实施例一样)并且输出二 进制小数点2954为3,则OBPA 3002将该正型值右移5位以产生被提供至复用器3006和舍入器3004的结果。
舍入器3004对累加器202的值217执行舍入。优选地,舍入器3004产生 PFC和OBPA3002所产生的正型值的舍入后版本,并将该舍入后版本提供至 复用器3006。舍入器3004根据上述的舍入控制2932执行舍入,如本文上下文 所述,该舍入控制2932可以包括使用随机位3005的随机舍入。复用器3006基 于舍入控制2932(如本文所述可包含随机舍入)在其多个输入中选择其一(即 来自PFC和OBPA 3002的正型值或来自舍入器3004的舍入后版本),并且将选 择的值提供给CCS和饱和器3008。优选地,如果舍入控制2932指定不进行舍 入,则复用器3006选择PFC和OBPA 3002的输出,否则选择舍入器3004的输 出。在所设想的其它实施例中,AFU 212执行额外的舍入。例如,在一个实 施例中,当位选择器3012对CCS和饱和器3008的输出位进行压缩(如后述)时, 位选择器3012基于丢失的低阶位进行舍入。又例如,在一个实施例中,对倒 数乘法器3014的乘积(如后述)进行舍入。又例如,在一个实施例中,大小转 换器3036在转换为适当的输出大小(如后述)时进行舍入,这可能涉及丢失舍入确定时的低阶位。
CCS 3008将复用器3006的输出值压缩至标准大小。因此,例如,如果 NPU 126为窄配置或漏斗配置2902,则CCS 3008将28位的复用器3006的输出 值压缩至16位;而如果NPU126为宽配置2902,则CCS 3008将41位的复用器 3006的输出值压缩至32位。然而,在压缩至标准大小前,如果压缩前值大于 标准形式所能表达的最大值,则饱和器3008就会使压缩前值饱和至标准形式 所能表达的最大值。例如,如果压缩前值中位于最高有效标准形式位左侧的 任意位具有值1,则饱和器3008饱和至最大值(例如,饱和至全部为1)。
优选地,双曲正切模块3022、S型模块3024和软加模块3026都包含查找 表,例如可编程逻辑阵列(PLA)、只读存储器(ROM)、组合逻辑门等。在一 个实施例中,为了简化并缩小这些模块3022/3024/3026的大小,向这些模块 提供具有3.4形式的输入值,即三个整数位和四个小数位,也即输入值在二进 制小数点右侧具有四个位并且在二进制小数点左侧具有三个位。选择这些值 是因为在3.4形式的输入值范围(-8,+8)的极端处、输出值渐近地靠近其最小 /最大值。然而,设想了例如采用4.3形式或2.5形式将二进制小数点放置在不 同位置的其它实施例。位选择器3012在CCS和饱和器3008的输出中选择满足 3.4形式标准的位,这涉及压缩处理,也就是会丢失某些位,这是因为标准形 式具有较多的位数。然而,在选择/压缩CCS和饱和器3008的输出值之前,如 果压缩前值大于3.4形式所能表达的最大值,则饱和器3012使压缩前值饱和至 3.4形式所能表达的最大值。例如,如果压缩前值中位于3.4形式的最高有效 位左侧的任意位具有值1,则饱和器3012饱和至最大值(例如,饱和至全部为 1)。
双曲正切模块3022、S型模块3024和软加模块3026对CCS和饱和器3008 所输出的3.4形式值执行相应的激活函数(如上所述)以产生结果。优选地,双 曲正切模块3022和S型模块3024的结果是0.7形式的7位结果,即零个整数位 和七个小数位,也即输入值在二进制小数点右侧具有七个位。优选地,软加 模块3026的结果是3.4形式的7位结果,即其形式与该模块3026的输入形式相 同。优选地,双曲正切模块3022、S型模块3024和软加模块3026的输出被扩 展至标准形式(例如在必要时加上前导零)并对齐以具有输出二进制小数点2954值所指定的二进制小数点。
校正器3018产生CCS和饱和器3008的输出值的校正后版本。也就是说, 如果CCS和饱和器3008的输出值(如前述其符号以流水线下移)为负,则校正 器3018输出零值;否则,校正器3018将其输入值输出。优选地,校正器3018 的输出为标准形式并具有输出二进制小数点2954值所指定的二进制小数点。
倒数乘法器3014将CCS和饱和器3008的输出与倒数值2942中所指定的 用户指定倒数值相乘,以产生其标准大小的乘积,其中该乘积实际上为CCS 和饱和器3008的输出与作为倒数2942值的倒数的除数的商。优选地,倒数乘 法器3014的输出为标准形式并具有由输出二进制小数点2954的值所指定的 二进制小数点。
向右移位器3016将CCS与饱和器3008的输出按移位量值2944中所指定 的用户指定位数进行移位,以产生其标准大小的商。优选地,向右移位器3016 的输出为标准形式并具有由输出二进制小数点2954的值所指定的二进制小 数点。
复用器3032选择激活函数2934的值所指定的适当输入,并将选择提供至 符号恢复器3034,其中该符号恢复器3034在原始累加器202的值217为负值的 情况下将复用器3032的正型输出转换为负型,例如转换为二补码形式。
大小转换器3036基于以上针对图29A所述的输出命令2956的值,将符号 恢复器3034的输出转换至适当的大小。优选地,符号恢复器3034的输出具有 由输出二进制小数点2954的值指定的二进制小数点。优选地,对于输出命令 2956的第一预定值而言,大小转换器3036舍弃符号恢复器3034输出的上半部 分的位。此外,如果符号恢复器3034的输出为正并且超过配置2902指定的字 大小所能表达的最大值、或者输出为负并且小于字大小所能表达的最小值, 则饱和器3036将其输出分别饱和至该字大小所能表达的最大值/最小值。对于 第二预定值和第三预定值,大小转换器3036使符号恢复器3034的输出通过。
复用器3037基于输出命令2956选择大小转换器和饱和器3036的输出或 累加器202的输出217以提供给输出寄存器3038。更具体地,对于输出命令 2956的第一预定值和第二预定值,复用器3037选择大小转换器和饱和器3036 的输出的低位字(其大小由配置2902指定)。对于第三预定值,复用器3037选 择大小转换器与饱和器3036的输出的高位字。对于第四预定值,复用器3037 选择原始的累加器202的值217的低位字;对于第五预定值,复用器3037选择 原始的累加器202的值217的中间字;并且对于第六预定值,复用器3037选择原始的累加器202值217的高位字。如上所述,优选地,AFU 212在原始的累 加器202的值217的高位字的高位填入零。
现参考图31,示出图30的AFU 212的操作的示例。如图所示,配置2902 被设置为NPU 126的窄配置。此外,带符号数据2912与带符号权重2914的值 为真。此外,数据二进制小数点2922的值表示针对数据RAM 122的字的二进 制小数点被定位为二进制小数点右侧有7位,并且NPU 126其中之一所接收的 第一数据字的示例值被示为0.1001110。此外,权重二进制小数点2924的值表 示针对权重RAM 124的字的二进制小数点被定位为二进制小数点右侧有3 位,并且NPU 126其中之一所接收的第一权重字的示例值被示为00001.010。
第一数据字和第一权重字的16位乘积(此乘积与累加器202的初始零值 累加)被示为000000.1100001100。由于数据二进制小数点2912是7且权重二进 制小数点2914是3,因此隐含的累加器202的二进制小数点被定为为二进制小 数点右侧有10个位。在窄配置的情况下,在示例性实施例中,累加器202的 宽度为28位。在示例中,示出在执行了所有ALU运算(例如图20中的全部1024 个乘法累加)之后累加器202的值217为000000000000000001.1101010100。
输出二进制小数点2954的值表示输出的二进制小数点被定位为在二进 制小数点的右侧有7个位。因此,在通过OBPA 3002和CCS 3008之后,对累 加器202的值217进行缩放、舍入并压缩至标准形式的值,即 000000001.1101011。在该示例中,输出二进制小数点位置表示7个小数位, 并且累加器202的二进制小数点位置表示10个小数位。因此,OBPA 3002计算 出差值3,并通过将累加器202的值217右移3位来对其进行缩放。这在图31中 表示为累加器202的值217丧失3个最低有效位(二进制数100)。此外,在该示 例中,舍入控制2932的值表示使用随机舍入,并且在该示例中假定取样随机 位3005为真。因此,根据以上说明,最低有效位被向上舍入,这是因为累加 器202的值217的舍入位(通过累加器202的值217的缩放而被移出的3个位中 的最高有效位)为1,而粘滞位(通过累加器202的值217的缩放而被移出的3个 位中的2个最低有效位的布尔或运算结果)为0。
在本示例中,激活函数2934表示要使用S型函数。因此,位选择器3012 选择标准形式值的位以使得S型模块3024的输入具有三个整数位和四个小数 位,如上所述,即如图所示的值001.1101。S型模块3024输出以标准形式设置 的值,即所示的值000000000.1101110。
该示例的输出命令2956指定第一预定值,即输出由配置2902所表示的字 大小,在这种情况下为窄字(8位)。因此,大小转换器3036将标准S型输出值 转换为具有隐含二进制小数点的8位量,所述二进制小数点被定位为在该二 进制小数点右侧有7个位,从而如图所示产生输出值01101110。
现参考图32,示出图30的AFU 212的操作的第二示例。图32的示例示出 在激活函数2934表示使累加器202的值217以标准大小通过的情况下的AFU 212的操作。如图所示,配置2902被设置为NPU 126的窄配置。
在该示例中,累加器202的宽度为28个位,并且累加器202的二进制小数 点被定位为二进制小数点右侧有10个位(如上所述,这是因为根据一个实施 例数据,二进制小数点2912和权重二进制小数点2914的总和为10,或者因为 根据另一实施例,累加器二进制小数点2923明确被指定为具有值10)。在该 示例中,图32示出在执行所有的ALU运算之后累加器202的值217,即 000001100000011011.1101111010。
在该示例中,输出二进制小数点2954的值表示输出的二进制小数点被定 位为二进制小数点的右侧有4个位。因此,在通过OBPA 3002和CCS 3008之 后,如图所示,累加器202的值217被饱和并压缩至标准形式值 111111111111.1111,该值由复用器3032接收作为标准大小的通过值3028。
在该示例中,示出两个输出命令2956。第一输出命令2956指定第二预定 值,即输出标准形式大小的低位字。由于配置2902所指示的大小为窄字(8位) (意味着标准大小是16位),因此大小转换器3036选择标准大小通过值3028的 低8位以产生如图所示的8位值11111111。第二输出命令2956指定第三预定值, 即输出标准形式大小的高位字。因此,大小转换器3036选择标准大小通过值 3028的高8位以产生如图所示的8位值11111111。
现参考图33,示出图30的AFU 212的操作的第三示例。图33的示例示出 在激活函数2934表示要使整个原始的累加器202的值217通过的情况下的 AFU 212的操作。如图所示,配置2902被设置为NPU 126的宽配置(例如,16 位输入字)。
在该示例中,累加器202为41位宽,并且累加器202的二进制小数点被定 位为在二进制小数点的右侧有8个位(如上所述,这是因为根据一个实施例, 数据二进制小数点2912和权重二进制小数点2914的总和为8,或者因为根据 另一实施例,累加器二进制小数点2923明确被指定为具有值8)。在该示例中, 图33示出在执行了所有ALU运算之后累加器202的值217即001000000000000000001100000011011.11011110。
在该示例中,示出三个输出命令2956。第一输出命令2956指定第四预定 值,即输出原始累加器202值的低位字;第二个输出命令2956指定第五预定 值,即输出原始累加器202值的中间字;以及第三个输出命令2956指定第六 预定值,即输出原始累加器202值的高位字。由于配置2902所指示的大小为 宽字(16位),因此图33示出,响应于第一输出命令2956,复用器3037选择16 位值0001101111011110;响应于第二输出命令2956,复用器3037选择16位值 0000000000011000;而响应于第三输出命令2956,复用器3037选择16位值0000000001000000。
如上所述,有利地,NNU 121对整数数据而非浮点数据执行运算。这有 利于简化各NPU 126或至少ALU 204部分。例如,ALU 204无需包括浮点实 现中为了将乘法器242的乘数的指数相加所需的加法器。类似地,ALU 204 无需包括浮点实现中为了将加法器234的加数的二进制小数点对齐所需的移 位器。本领域技术人员应当理解,浮点单元一般非常复杂;因此,这些仅仅 是针对ALU 204的简化的范例,并且利用使得用户能够指定相关二进制小数 点的硬件定点辅助可以通过即时整数实施例来实现其它简化。相较于浮点的 实施例,ALU 204是整数单元这一事实可以有利地产生更小(且更快)的NPU 126,这进一步有利于将大型的NPU 126阵列整合到NNU 121内。AFU 212的 部分可以基于(优选为用户指定的)累加值所需的小数位数量以及输出值所需 的小数位数量,来处理累加器202的值217的缩放和饱和。有利地,如针对图 11的实施例所述,任何额外复杂度以及伴随而来的大小的增加、AFU 212的 定点硬件辅助内的功率和/或时间损耗,都可以通过在ALU 204部分间共享 AFU212的方式来进行分摊,例如这是因为采用共享的实施例可以减少AFU 1112的数量。
有利地,本文所述的实施例享有许多与硬件整数算术单元的降低的复杂 度相关联的益处(相较于使用浮点算术单元),同时仍提供针对小数(即具有二 进制小数点的数)的算术运算。浮点算术的优点在于:针对单个值可能落在 一个非常宽的值范围(该值范围实际上只受限于指数范围的大小,而该大小 可能非常大)内的任意位置的数据,提供算术运算。也就是说,每个浮点数 具有其潜在唯一的指数值。然而,本文所述的实施例认识到并利用如下的事 实,即:存在某些应用,其中在这些应用中,输入数据高度平行,并且其值 处于相对较窄的范围内,使得所有平行值的“指数”可以相同。因此,这些 实施例使得用户能够一次针对所有的输入值和/或累加值指定二进制小数点 位置。类似地,通过认识到并利用平行输出的类似范围特性,这些实施例使 得用户能够一次针对所有的输出值指定二进制小数点位置。人工神经网络是 这种应用的一个示例,但是本发明的实施例也可用于执行其它应用的计算。 通过针对输入一次指定二进制小数点位置而非针对各单独的输入数进行该 指定,相较于浮点实现,实施例可以更有效率地使用存储空间(例如,需要 较少的存储器),以及/或者在使用类似数量的存储器的情况下提升精度,这 是因为在浮点实现中用于指数的位可用来指定幅值的更大精度。
此外有利地,这些实施例认识到在对大的一系列整数运算执行累加期间 可能经历的潜在的精度丧失(例如,溢位或丧失较不重要的小数位),并且提 供一个解决方法,主要是采用一个足够大的累加器来避免精度丧失的形式。
NNU微操作的直接执行
现参考图34,示出一框图,该框图示出图1的处理器100以及NNU 121的 部分细节。NNU 121包括NPU 126的流水线阶段3401。以阶段寄存器分隔开 的流水线阶段3401包括实现如本文所述的NPU 126的运算的组合逻辑,诸如 布尔逻辑门、复用器、加法器、乘法器、比较器等。流水线阶段3401从复用 器3402接收微操作3418。微操作3418向下流动至流水线阶段3401并控制其组 合逻辑。微操作3418是位的集合。优选地,微操作3418包括数据RAM 122的 存储器地址123的位、权重RAM 124的存储器地址125的位、程序存储器129 的存储器地址131的位、复用寄存器208/705的控制信号213/713的位、复用器 802的控制信号803的位、以及(例如图29A至图29C的)控制寄存器217的许多 字段等。在一个实施例中,微操作3418包括约120个位。复用器3402从三个 不同的源接收微操作,并选择其中一个作为提供给流水线阶段3401的微操作 3418。
复用器3402的一个微操作源是图1的定序器128。定序器128将从程序存 储器129接收到的NNU指令解码,并且作为响应而产生提供至复用器3402的 第一输入的微操作3416。
复用器3402的第二个微操作源是从图1的保留站108接收微指令105以及 从GPR116和媒体寄存器118接收操作数的解码器3404。优选地,如上所述, 微指令105是指令转译器104响应于对MTNN指令1400和MFNN指令1500的 转译而产生的。微指令105可包括立即字段,该立即字段指定特定函数(由 MTNN指令1400或MFNN指令1500所指定),诸如开始和停止执行程序存储器 129内的程序、直接从媒体寄存器118执行微操作、或者如上所述读取/写入 NNU的存储器等。解码器3404对微指令105进行解码并作为响应而产生提供 至复用器3402的第二输入的微操作3412。优选地,响应于MTNN指令 1400/MFNN指令1500的某些函数1432/1532,解码器3404无需产生沿流水线 3401向下发送的例如写入控制寄存器127、开始执行程序存储器129内的程 序、暂停执行程序存储器129内的程序、等待程序存储器129内的程序完成执 行、从状态寄存器127读取以及重设NNU 121等的微操作3412。
复用器3402的第三个微操作源是媒体寄存器118本身。优选地,如以上 针对图14所述,MTNN指令1400可指定一函数以指示NNU 121直接执行从媒 体寄存器118提供至复用器3402的第三输入的微操作3414。直接执行由架构 媒体寄存器118提供的微操作3414可以特别有助于对NNU 121进行测试(例如 内在自测试(BIST))和调试。
优选地,解码器3404产生用于控制复用器3402选择的模式指示符3422。 当MTNN指令1400指定一函数开始运行来自程序存储器129的程序时,解码 器3404产生使复用器3402从定序器128选择微操作3416的模式指示符3422 值,直到发生错误为止或直到解码器3404遇到指定函数停止运行来自程序存 储器129的程序的MTNN指令1400为止。当MTNN指令1400指定用于指示 NNU 121直接执行从媒体寄存器118提供的微操作3414的函数时,解码器3404产生使复用器3402从指定媒体寄存器118选择微操作3414的模式指示符 3422值。否则,解码器3404产生使复用器3402选择从解码器3404选择微操作 3412的模式指示符3422值。
可变速率神经网络单元
可能存在如下情形:NNU 121运行程序,然后进入空闲状态等待处理器 100处理一些在其可以执行下一个程序前需要处理的事情。例如,假设在与 针对图3至图6A所述的类似的情形,NNU 121对乘法累加激活函数程序(也可 称为前馈神经网络层程序)连续运行两次或更多次。相较于NNU 121运行程序 所花费的时间,处理器100明显花费更长的时间来将NNU程序下一次运行所 用的512KB大小的权重值写入权重RAM 124。换言之,NNU 121可以在相对 短的时间内运行程序,然后进入空闲状态,同时处理器100完成将接下来的 权重值写入权重RAM 124以供下一次程序运行用。这种情形在以下更详细所 述的图36A中可视地示出。在这种情形下,可以有利地使NNU 121以较慢速 率运行并且花更长的时间来执行程序,以使NNU 121运行程序所需的能量消 耗分散至较长的时间内,这可以倾向于使NNU 121乃至于处理器100维持在 较低温度。这种情形被称为缓和模式并且在以下更详细所述的图36B中可视 地示出。
现参考图35,示出一框图,该框图示出具有可变速率NNU 121的处理器 100。该处理器100在许多方面与图1的处理器100类似,并且具有相同附图标 记的元件是相同的。图35的处理器100还包括耦接至处理器100的功能单元的 时钟产生逻辑3502,这些功能单元即指令拾取单元101、指令高速缓存器102、 指令转译器104、重命名单元106、保留站108、NNU 121、其它执行单元112、 存储器子系统114、通用寄存器116以及媒体寄存器118。时钟产生逻辑3502 包括诸如锁相环(PLL)等的时钟产生器,其产生具有主时钟速率或主时钟频率的时钟信号。例如,主时钟速率可以是1GHz、1.5GHz、2GHz等。时钟速 率表示每秒的时钟信号的周期数,例如在高低状态之间的震荡数。优选地, 时钟信号具有平衡的占空比,即周期的一半为高而另一半为低;可选地,时 钟信号具有不平衡的占空比,其中时钟信号处在高状态的时间长于其处在低 状态的时间,或者反之亦然。优选地,PLL能够被配置为产生具有多个时钟 速率的主时钟信号。优选地,处理器100包括电源管理模块,其基于多种因 素自动调整主时钟速率,这些因素包括动态检测到的处理器100的操作温度、 利用率、以及来自系统软件(例如操作系统、BIOS)的指示期望性能和/或节能 指标的命令。在一个实施例中,电源管理模块包括处理器100的微码。
时钟产生逻辑3502还包括时钟分配网络或时钟树。时钟树将主时钟信号 分配至处理器100的功能单元,即如图35所示将时钟信号3506-1分配至指令 拾取单元101,将时钟信号3506-2分配至指令高速缓存器102,将时钟信号 3506-10分配至指令转译器104,将时钟信号3506-9分配至重命名单元106,将 时钟信号3506-8分配至保留站108,将时钟信号3506-7分配至NNU 121,将时 钟信号3506-4分配至其它执行单元112,将时钟信号3506-3分配至存储器子系 统114,将时钟信号3506-5分配至通用寄存器116,以及将时钟信号3506-6分 配至媒体寄存器118,这些信号共同地称为时钟信号3506。时钟树包括节点 或线,用于将主时钟信号3506传输至其相应的功能单元。此外,优选地,时 钟产生逻辑3502包括时钟缓存器,时钟缓存器(特别是对于较远的节点)在需 要提供较干净的时钟信号时重新产生主时钟信号、和/或提升主时钟信号的电 压水平。此外,各个功能单元在需要时还可以包括其自身的子时钟树,子时 钟树重新产生和/或提升其所接收到的相应主时钟信号3506。
NNU 121包括时钟降低逻辑3504,其接收缓和指示符3512、接收主时钟 信号3506-7、并且作为响应而产生辅时钟信号。辅时钟信号具有如下的时钟 速率,该时钟速率与主时钟速率相同,或者在缓和模式的情况下该时钟速率 相对于主时钟速率降低了被编程到缓和指示符3512中的量,从而潜在地提供 热量方面的益处。时钟降低逻辑3504在许多方面与时钟产生逻辑3502类似, 时钟降低逻辑3504具有时钟分配网络或时钟树,所述时钟分配网络或时钟树 将辅时钟信号分配至NNU 121的各个方框,如表示为将时钟信号3508-1分配至NPU 126的阵列,将时钟信号3508-2分配至定序器128、以及将时钟信号 3508-3分配至接口逻辑3514,这些信号共同地或单独地称为辅时钟信号 3508。优选地,如针对图34所示,NPU 126包括多个流水线阶段3401,流水 线阶段包括用于从时钟降低逻辑3504接收辅时钟信号3508-1的流水线阶段 寄存器。
NNU 121还包括用于接收主时钟信号3506-7和辅时钟信号3508-3的接口 逻辑3514。接口逻辑3514耦接于处理器100前端的下部分(例如,保留站108、 媒体寄存器118和通用寄存器116)和NNU 121的各个方框之间,这些方框为时 钟降低逻辑3504、数据RAM122、权重RAM 124、程序存储器129和定序器128。接口逻辑3514包括数据RAM缓存器3522、权重RAM缓存器3524、图34 的解码器3404、以及缓和指示符3512。缓和指示符3512保持指定NPU 126的 阵列将以多慢的速度执行NNU程序指令的值。优选地,缓和指示符3512指定 除数值N,时钟降低逻辑3504将主时钟信号3506-7除以该除数值以产生辅时 钟信号3508,使得辅时钟信号的速率为1/N。优选地,N的值可被编程为多个 不同预定值中的任一个,以使时钟降低逻辑3504产生具有多个不同速率的辅 时钟信号3508,其中所述多个不同速率都小于主时钟速率。
在一个实施例中,时钟降低逻辑3504包括时钟除法器电路,用以将主时 钟信号3506-7除以缓和指示符3512的值。在一个实施例中,时钟降低逻辑 3504包括时钟门(例如,与门),该时钟门利用使能信号来对主时钟信号3506-7 进行门控,其中主时钟信号3506-7的每N个周期仅使能信号一次为真。例如, 可以使用包含用于计数多达N的计数器的电路来产生使能信号。当伴随的逻 辑检测到计数器的输出与N匹配时,逻辑在辅时钟信号3508上产生真值脉冲 并重设计数器。优选地,缓和指示符3512的值可通过架构指令(诸如图14的MTNN指令1400等)进行编程。优选地,如针对图37更详细所述,仅在指示 NNU 121开始运行NNU程序之前,运行于处理器100上的架构程序将缓和值 编程到缓和指示符3512中。
权重RAM缓存器3524耦接于权重RAM 124和媒体寄存器118之间,用于 缓存它们之间的数据传输。优选地,权重RAM缓存器3524与图17的缓存器 1704的一个或多个实施例类似。优选地,权重RAM缓存器3524中的从媒体寄 存器118接收数据的部分以具有主时钟速率的主时钟信号3506-7作为时钟,而 权重RAM缓存器3524中的从权重RAM 124接收数据的部分以具有辅时钟速 率的辅时钟信号3508-3作为时钟,其中该辅时钟速率可以根据编程到缓和指 示符3512中的值(即根据NNU 121是在缓和模式还是一般模式下操作)而相对 于主时钟速率降低或不降低。在一个实施例中,如以上针对图17所述,权重 RAM 124为单端口,并且可由媒体寄存器118经由权重RAM缓存器3524以及 由图11的NPU 126或行缓存器1104两者以仲裁方式(arbitrated fashion)访问。 在备选实施例中,如以上针对图16所述,权重RAM 124为双端口,并且各端 口可由媒体寄存器118经由权重RAM缓存器3524以及NPU126或行缓存器 1104两者以并行方式访问。
同样,数据RAM缓存器3522耦接于数据RAM 122和媒体寄存器118之间, 用于缓存它们之间的数据传输。优选地,数据RAM缓存器3522与图17的缓存 器1704的一个或多个实施例类似。优选地,数据RAM缓存器3522中的从媒体 寄存器118接收数据的部分以具有主时钟速率的主时钟信号3506-7作为时钟, 而数据RAM缓存器3522中的从数据RAM 122接收数据的部分以具有辅时钟 速率的辅时钟信号3508-3作为时钟,其中该辅时钟速率可以根据编程到缓和 指示符3512中的值(即根据NNU 121是在缓和模式还是一般模式下操作)而相对于主时钟速率降低或不降低。在一个实施例中,如以上针对图17所述,数 据RAM 122为单端口,并且可由媒体寄存器118经由数据RAM缓存器3522以 及由图11的NPU 126或行缓存器1104两者以仲裁方式访问。在备选实施例中, 如以上针对图16所述,数据RAM 122为双端口,并且各端口可由经由数据 RAM缓存器3522的媒体寄存器118以及NPU 126或行缓存器1104两者以并行 方式访问。
优选地,无论数据RAM 122和/或权重RAM 124是单端口还是双端口, 接口逻辑3514都包括数据RAM缓存器3522和权重RAM缓存器3524以提供主 时钟域和辅时钟域之间的同步。优选地,数据RAM 122、权重RAM 124和程 序存储器129各自包括静态RAM(SRAM),其中该静态RAM包括相应的读取 使能信号、写入使能信号和存储器选择信号。
如上所述,NNU 121是处理器100的执行单元。执行单元是处理器的执 行架构指令被转译成的微指令(诸如图1中的架构指令103转移成的微指令 105等)或执行架构指令103本身的功能单元。执行单元从处理器的通用寄存 器(诸如GPR 116和媒体寄存器118等)接收操作数。执行单元响应于执行微指 令或架构指令而产生可被写入通用寄存器的结果。架构指令103的示例分别 为针对图14和图15所述的MTNN指令1400和MFNN指令1500。微指令实现架 构指令。更具体地,执行单元对于架构指令被转译成的一个或多个微指令的 整体执行对架构指令所指定的输入执行架构指令所指定的运算,以产生架构 指令所定义的结果。
现参考图36A,示出一时序图,该时序图示出具有在一般模式中即以主 时钟速率操作的NNU 121的处理器100的操作示例。在时序图中,时间的进 程是从左至右。处理器100正以主时钟速率运行架构程序。更具体地,处理 器100的前端(例如,指令拾取单元101、指令高速缓存器102、指令转译器104、 重命名单元106和保留站108)以主时钟速率拾取、解码且发布架构指令至 NNU 121和其它执行单元112。
最初,架构程序执行架构指令(例如,MTNN指令1400),处理器前端100 将该架构指令发布至NNU 121以指示NNU 121开始运行其程序存储器129内 的NNU程序。此前,架构程序执行架构指令以将用于指定主时钟速率的值写 入缓和指示符3512,即使NNU处于一般模式。更具体地,被编程到缓和指示 符3512中的值使时钟降低逻辑3504产生具有主时钟信号3506的主时钟速率 的辅时钟信号3508。优选地,在这种情况下,时钟降低逻辑3504的时钟缓存 器单纯提升主时钟信号3506。另外在此之前,架构程序执行架构指令以写入 数据RAM122和权重RAM 124并将NNU程序写入程序存储器129中。响应于 开始NNU程序的MTNN指令1400,NNU 121开始以主时钟速率执行NNU程 序,这是因为缓和指示符3512被编程为具有主速率值。在开始NNU 121运行 后,架构程序继续以主时钟速率执行架构指令,包括并且主要以MTNN指令 1400写入和/或读取数据RAM 122和权重RAM 124,以为NNU程序的下一次 实例或调用或运行做准备。
如图36A中的示例所示,相较于架构程序完成对数据RAM 122和权重 RAM 124的写入/读取所花费的时间,NNU 121在明显更少的时间(例如四分 之一的时间)内完成NNU程序的运行。例如,都以主时钟速率,NNU 121可 能花费大约1000个时钟周期来运行NNU程序,而架构程序花费大约4000个时 钟周期来运行。因此,NNU 121在剩下的时间(在本示例中为相当长的时间, 例如,大约3000个主时钟速率周期)内处于空闲。如图36A中的示例所示,根据神经网络的大小和配置,该模式继续执行另一次,并可能继续多次。因为 NNU 121可以是处理器100中相对大且晶体管密集的功能单元,因此NNU 121可能产生大量热,尤其是在以主时钟速率操作时。
现参考图36B,示出一时序图,该时序图示出具有在缓和模式中即以比 主时钟速率小的速率操作的NNU 121的处理器100的操作示例。图36B的时序 图在许多方面与图36A的时序图相同,即处理器100以主时钟速率运行架构程 序。并且在该示例中,假定图36B的架构程序和NNU程序与图36A的架构程 序和NNU程序相同。然而,在开始NNU程序之前,架构程序执行MTNN指令 1400,其中该MTNN指令1400将缓和指示符3512编程有令时钟降低逻辑3504 产生具有小于主时钟速率的辅时钟速率的辅时钟信号3508的值。也就是说, 架构程序使NNU 121处于图36B的缓和模式,而非图36A的一般模式。因此, NPU 126以辅时钟速率执行NNU程序,其中在缓和模式下,该辅时钟速率小 于主时钟速率。在该示例中,假定缓和指示符3512被编程有用于将辅时钟速 率指定为四分之一主时钟速率的值。作为结果,如比较图36A和图36B可以 看出,NNU 121在缓和模式下运行NNU程序所花费的时间是在一般模式下运 行NNU程序所花费的时间的四倍长,使得NNU 121处于空闲状态的时间量相 对较短。因此,图36B中NNU 121在大约是图36A中NNU 121在一般模式下运 行程序所需的时间的四倍的时间段内消耗用于运行NNU程序的能量。因此, 图36B中NNU 121运行NNU程序所产生的热量的速率大约是图36A中的四分 之一,因而可具有本文所述的热量方面的益处。
现参考图37,示出一流程图,该流程图示出图35的处理器100的操作。 该流程图所示的操作在许多方面与以上针对图35、图36A和图36B所述的操 作相同。流程始于方框3702。
在方框3702处,处理器100执行MTNN指令1400以将权重写入权重RAM 124并且将数据写入数据RAM 122。流程进入方框3704。
在方框3704处,处理器100执行MTNN指令1400以将指示符3512编程有 指定低于主时钟速率的速率的值,即使NNU 121处于缓和模式。流程进入方 框3706。
在方框3706处,与图36B所呈现的方式相同,处理器100执行MTNN指令 1400以指示NNU 121开始运行NNU程序。流程进入方框3708。
在方框3708处,NNU 121开始运行NNU程序。并行地,处理器100执行 MTNN指令1400以将新的权重写入权重RAM 124(并且可能将新的数据写入 数据RAM 122),以及/或者执行MFNN指令1500以从数据RAM 122读取结果 (并且可能从权重RAM 124读取结果)。流程进入方框3712。
在方框3712处,处理器100执行MFNN指令1500(例如读取状态寄存器 127),以检测NNU 121已结束运行其程序。假设架构程序选择良好的缓和指 示符3512的值,则如图36B所示,NNU 121运行NNU程序所花费的时间量与 处理器100执行架构程序的访问权重RAM 124和/或数据RAM 122的部分所 花费的时间大致相同。流程进入方框3714。
在方框3714处,处理器100执行MTNN指令1400以将缓和指示符3512编 程有指定主时钟速率的值,即使NNU 121处于一般模式。流程进入方框3716。
在方框3716处,与类似图36A所呈现的方式相同,处理器100执行MTNN 指令1400以指示NNU 121开始运行NNU程序。流程进入方框3718。
在方框3718处,NNU 121开始以一般模式运行NNU程序。流程结束于方 框3718。
如上所述,相对于NNU在一般模式下(即以处理器的主时钟速率)运行程 序的时间,在缓和模式下运行NNU程序可以使NNU运行程序的时间分散, 从而能够提供热量方面的益处。更具体地,当NNU在缓和模式下运行程序时, 由于NNU以较慢的速率产生热量,而这些热量被NNU(例如半导体装置、金 属层和底层基材)以及周围的封装体和冷却方案(例如,散热片、风扇)耗散, 因此装置(例如晶体管、电容、导线)将有可能在较低的温度下工作。一般来 说,这还降低了处理器晶粒的其它部分内的装置温度。装置的较低工作温度 (特别是它们的接面温度)可以具有减少漏电流的益处。此外,由于单位时间 内流过的电流量较少,因此电感噪声和IR压降噪声也可以降低。另外,较低 温度对于处理器的MOSFET的负偏压温度不稳定性(NBTI)和正偏压温度不 稳定性(PBSI)也有正面影响,从而提升装置以及处理器部分的可靠度和/或寿 命。较低温度还可以减轻处理器的金属层内的焦耳热和电迁移。
关于NNU共享资源的架构程序与非架构程序之间的通信机制
如上所述,以图24至图28以及图35至图37为例,数据RAM 122和权重 RAM 124是共享资源。NPU 126和处理器100的前端这两者共享数据RAM 122和权重RAM 124。更具体地,NPU 126与处理器100的前端(例如媒体寄存 器118)对数据RAM 122和权重RAM 124进行读取与写入。换言之,运行于处 理器100上的架构程序与运行于NNU 121上的NNU程序共享数据RAM 122和 权重RAM 124,并且如上所述,在某些情形下,这需要对架构程序和NNU 程序间的流程进行控制。该资源共享在某种程度上也适用于程序存储器129, 这是因为架构程序对程序存储器129进行写入,而定序器128对程序存储器 129进行读取。本文上下文所述的实施例提供用以控制架构程序和NNU程序 之间对共享资源的访问流程的高性能解决方案。
在本文所述的实施例中,NNU程序也称为非架构程序,NNU指令也称 为非架构指令,而NNU指令集(在上文中也称为NPU指令集)也称为非架构指 令集。非架构指令集不同于架构指令集。在处理器100包含用于将架构指令 转译成微指令的指令转译器104的实施例中,非架构指令集也不同于微指令 集。
现参考图38,示出一框图,该框图更详细地示出NNU 121的定序器128。 如上所述,定序器128将存储器地址131提供至程序存储器129,以选择被提 供给定序器128的非架构指令。如图38所示,存储器地址131保持在定序器128 的程序计数器3802内。定序器128通常以程序存储器129的顺序地址递增,除 非定序器128遇到诸如循环或分支指令等的非架构指令,在这种情况下,定 序器128将程序计数器3802更新为控制指令的目标地址,即更新为位于控制 指令的目标处的非架构指令的地址。因此,保持在程序计数器3802的地址131 指定当前被拾取以供NPU 126执行的非架构程序的非架构指令的程序存储器 129中的地址。有利地,如以下针对图39所述,程序计数器3802的值可以由 架构程序经由状态寄存器127的NNU程序计数器字段3912而获得。这使得架 构程序能够基于非架构程序的进度来决定相对于数据RAM 122和/或权重 RAM 124在哪里进行数据读取/写入。
定序器128还包括循环计数器3804,该循环计数器3804与非架构循环指 令相结合地使用,其中非架构循环指令诸如为图26A的地址10处的循环至1 的指令以及图28的地址11处的循环至1的指令等。在图26A和图28的示例中, 循环计数器3804加载地址0处的非架构初始化指令中所指定的值,例如值 400。每一次定序器128遇到循环指令并跳跃至目标指令(例如,图26A的地址 1处的乘法累加指令或图28的地址1处的maxwacc指令),定序器128就会使循 环计数器3804递减。一旦循环计数器3804到达零,则定序器128进入下一顺 序非架构指令。在备选实施例中,首次遭遇到循环指令时,循环计数器3804 加载循环指令中所指定的循环计数值,以省去经由非架构初始化指令对循环 计数器3804进行初始化的需求。因此,循环计数器3804的值指示出还要执行 非架构程序的循环体的次数。有利地,如以下针对图39所述,可由架构程序 经由状态寄存器127的循环计数3914字段来获得循环计数器3804的值。这使 得架构程序能够基于非架构程序的进度来决定相对于数据RAM 122和/或权 重RAM 124在哪里进行数据读取/写入。在一个实施例中,定序器128包括三 个额外的循环计数器以适应非架构程序内的嵌套循环,并且另外三个循环计 数器的值也可经由状态寄存器127读取。循环指令中具有一位表示这四个循 环计数器中哪一个用于即时的循环指令。
定序器128还包括迭代计数器3806。迭代计数器3806与非架构指令相结 合地使用,其中这些非架构指令诸如为图4、图9、图20和图26A的地址2处的 乘法累加指令以及图28中地址2处的maxwacc指令等,这些指令在下文中被称 为“执行”指令。在以上示例中,各执行指令分别指定迭代计数511、511、 1023、2以及3。当定序器128遇到指定非零迭代计数的执行指令时,定序器 128将迭代计数器3806加载该指定值。此外,定序器128产生适当的微操作 3418以控制图34的NPU 126的流水线阶段3401内的逻辑以用于执行,并且使 迭代计数器3806递减。如果迭代计数器3806大于零,则定序器128再次产生 适当的微操作3418以控制NPU 126内的逻辑并使迭代计数器3806递减。定序 器128持续以这种方式操作,直到迭代计数器3806达到零为止。因此,迭代 计数器3806的值表示还要执行非架构执行指令内所指定的运算(例如,累加 器和数据/权重字的乘法累加、取最大值、求和)的次数。有利地,如以下针 对图39所述,迭代计数器3806的值可以由架构程序经由状态寄存器127的迭 代计数3916字段获得。这样使得架构程序能够基于非架构程序的进度来决定 相对于数据RAM122和/或权重RAM 124在哪里进行数据读取/写入。
现参考图39,示出一框图,该框图示出NNU 121的控制和状态寄存器127 的某些字段。如以上针对图26B所示,这些字段包括NPU 126执行非架构程 序而最近写入的权重RAM行的地址2602、NPU 126执行非架构程序而最近读 取的权重RAM行的地址2604、NPU 126执行非架构程序而最近写入的数据 RAM行的地址2606、以及NPU 126执行非架构程序而最近读取的数据RAM 行的地址2608。此外,这些字段包括NNU程序计数器3912、循环计数3914、以及迭代计数3916。如上所述,架构程序可(例如通过MFNN指令1500)将状 态寄存器127读取至媒体寄存器118和/或通用寄存器116,状态寄存器127包括 NNU程序计数器3912字段值、循环计数3914字段值和迭代计数3916字段值。 程序计数器3912的值反映图38的程序计数器3802的值。循环计数3914的值反 映循环计数器3804的值。迭代计数3916的值反映迭代计数器3806的值。在一 个实施例中,定序器128在每次修改程序计数器3802、循环计数器3804或迭 代计数器3806时,都更新程序计数器3912字段值、循环计数3914字段值与迭 代计数3916字段值,使得当架构程序读取这些字段值时,这些字段值是当前 值。在另一实施例中,当NNU 121执行用于读取状态寄存器127的架构指令 时,NNU 121单纯获得程序计数器3802的值、循环计数器3804的值以及迭代 计数器3806的值并将这些值提供回架构指令(例如提供至媒体寄存器118或通 用寄存器116)。
从以上可以发现,图39的状态寄存器127的字段值可被表征为非架构程 序在由NNU执行期间的进度的信息。以上已经描述了非架构程序进度的某些 方面,诸如程序计数器3802的值、循环计数器3804的值、迭代计数器3806的 值、最近写入/读取2602/2604的权重RAM 124地址125,以及最近写入/读取 2606/2608的数据RAM 122地址123。执行于处理器100上的架构程序可以从 状态寄存器127读取图39的非架构程序进度值,并例如通过诸如比较指令和 分支指令等的架构指令使用这些信息来作出决策。例如,尤其是针对大型数据集和/或不同非架构指令的重叠执行实例,架构程序决定相对于数据RAM 122和/或权重RAM 124在哪些行进行数据/权重的写入/读取,以控制相对于 数据RAM 122或权重RAM 124的数据流入和流出。本文上下文中描述了利用 架构程序进行决策的示例。
例如,如以上针对图26A所述,架构程序将非架构程序配置为将卷积的 结果写回数据RAM 122中位于卷积核2402上方(例如行8上方)的行,而当 NNU 121通过使用最近写入的数据RAM 122行的地址2606来写入结果时,架 构程序从数据RAM 122读取这些结果。
再例如,如以上针对图26B所述,架构程序利用来自图38的状态寄存器 127的字段的信息来确定非架构程序对图24的数据阵列2404以5个512×1600 的数据块执行卷积的进度。架构程序将2560×1600数据阵列2404的第一个 512×1600数据块写入权重RAM 124并开始非架构程序,其中该非架构程序 的循环计数为1600且初始化的权重RAM 124的输出行为0。当NNU 121执行 非架构程序时,架构程序读取状态寄存器127以确定最近写入的权重RAM 124的行2602,使得该架构程序可以读取由非架构程序写入的有效卷积结果, 并且在架构程序已经读取所述有效卷积结果后利用下一个512×1600数据块 覆写上述有效卷积结果,使得在NNU 121完成对第一个512×1600数据块的 非架构程序时,处理器100可以按需要立即更新非架构程序并再次开始非架 构程序以处理下一个512×1600数据块。
又例如,假定架构程序使NNU 121执行一系列传统神经网络乘法累加激 活函数运算,其中,权重储存于权重RAM 124中并且结果被写回数据RAM 122。在这种情况下,非架构程序一旦读取了权重RAM 124的行,就不会再 读取。因此,架构程序可被配置为一旦当前权重已被非架构程序读取/使用, 就开始用针对非架构程序的下一次执行实例(例如下一个神经网络层)的新权 重来覆写权重RAM 124中的权重。在这种情况下,架构程序读取状态寄存器 127以获得最近读取的权重RAM 2604行的地址2604,从而决定新的权重集可 以写入权重RAM 124中的位置。
又例如,假定架构程序知道非架构程序包括具有大迭代计数的执行指 令,诸如图20的地址2处的非架构乘法累加指令等。在这种情况下,架构程 序可能需要知道迭代计数3916,以知道大致上还需要多少个时钟周期才能完 成非架构指令,使得该架构程序可以决定接下来要采取两个或多个动作中的 哪个。例如,如果时间很长,则架构程序可以将控制权让与另一个架构程序, 诸如操作系统等。同样,假定架构程序知道非架构程序包括具有相当大循环 计数的循环体,诸如图28的非架构程序等。在这种情况下,架构程序可能需 要知道循环计数3914,以知道大致上还需要多少个时钟周期才能完成非架构 程序,使得该架构程序可以决定接下来要采取两个或多个动作中的哪个。
又例如,假定架构程序使NNU 121执行与针对图27和图28所述的将要池 化的数据储存在权重RAM 124中并且将结果写回权重RAM 124的池化运算 类似的池化运算。然而,与图27和图28的示例不同,假设结果被写回权重RAM 124的顶部的400行,例如行1600~1999。在这种情况下,一旦非架构程序读 取了权重RAM 124中进行池化的四行,其就不会再次读取。因此,架构程序 可被配置为一旦当前四行数据都已被非架构程序读取/使用,就开始用新的数 据覆写权重RAM 124中的数据(例如,利用针对非架构程序的下一次执行实 例的权重进行覆写,以例如对池化后数据执行传统乘法累加激活函数运算)。 在这种情况下,架构程序读取状态寄存器127以获得最近读取的权重RAM行 的地址2604,从而决定新的权重集可以写入权重RAM 124中的位置。
存储器阵列作为NNU存储器和高速缓存存储器的双重使用
现参考图40,示出一框图,该框图示出处理器4000。处理器4000包括多 个环站4004,其中多个环站4004以双向方式彼此连接以形成环形总线4024。 图40的实施例包括表示为4004-0、4004-1、4004-2、4004-3、4004-M和4004-U 的六个环站。处理器4000包括分别被称为核心复合体0 4012-0、核心复合体1 4012-1、核心复合体2 4012-2和核心复合体34012-3的四个核心复合体4012, 其中这四个核心复合体4012各自包括用于将核心复合体4012耦接至环形总 线4024的四个环站4004-0、4004-1、4004-2和4004-3。处理器4000还包括非 核心部分4016,非核心部分4016包括用于将非核心4016耦接至环形总线4024 的环站4004-U。最后,处理器4000包括通过环站4004-M而耦接至环形总线 4024的动态随机存取存储器(DRAM)控制器4018和NNU 121。如以下更详细 所述,NNU 121包括存储器阵列4152(见图41),该存储器阵列4152可被用作 NNU 121的NPU 126的阵列所使用的存储器(例如,图1的权重RAM 124),或 者用作核心复合体4012所共享的高速缓存存储器,例如用作牺牲高速缓存器 或用作末级高速缓存器(LLC)片。尽管图40的示例包括四个核心复合体4012, 但还设想了具有不同数量的核心复合体4012的其它实施例。
非核心4016包括用于控制处理器4000对外围装置可以耦接的系统总线 4022的访问的总线控制器4014,诸如视频控制器、盘控制器、外围总线控制 器(例如,PCI-E)等。在一个实施例中,系统总线4022是众所周知的V4总线。 非核心4016还可以包括其它功能单元,诸如电源管理单元和私有RAM等(例 如,核心4002的微码所使用的非架构存储器)。
DRAM控制器4018控制作为系统存储器的DRAM(例如,异步DRAM或 同步DRAM(SDRAM),诸如双倍数据速率同步DRAM、直接Rambus DRAM 或降低延迟的DRAM等)。核心复合体4012、非核心4016和NNU 121经由环形 总线4024来访问系统存储器。更具体地,NNU 121从系统存储器将神经网络 的权重和数据读取至存储器阵列4152中,并经由环形总线4024将来自存储器 阵列4152的神经网络结果写入系统存储器。此外,在作为牺牲高速缓存器(见 图41的4006-4)进行操作时,存储器阵列4152在高速缓存器控制逻辑4108(见 图41)的控制下将高速缓存器行驱逐至系统存储器。此外,在作为LLC片(见 图41的4006-4)进行操作时,存储器阵列4152和高速缓存器控制逻辑4108从系 统存储器填充高速缓存器行,并将高速缓存器行写回并驱逐至系统存储器。
四个核心复合体4012包括各自的LLC片4012-0、4012-1、4012-2和4012-3, 其中各LLC片耦接至环站4004并且一般地个别地称为LLC片4006或者共同称 为(多个)LLC片4006。各核心4002包括高速缓存器存储器,诸如耦接至环站 4004的2级(L2)高速缓存器4008等。各核心4002还可以包括1级高速缓存器(未 示出)。在一个实施例中,核心4002是x86指令集架构(ISA)核心,但是设想了 核心4002是另一ISA(例如,ARM、SPARC、MIPS等)核心的其它实施例。
如图40所示,LLC片4006-0、4006-1、4006-2和4006-3整体形成核心复合 体4012所共享的处理器4000的LLC 4005。各LLC片4006包括存储器阵列、与 存储器阵列4152类似的高速缓存器控制逻辑、以及图41的高速缓存器控制逻 辑4108。如以下更详细所述,模式指示符(例如,图41的模式输入4199)可以 被设置为使得NNU 121的存储器阵列4152作为LLC4005的附加(例如,第五 或第九)片4006-4进行操作。选择性地组成附加LLC片4006-4的存储器阵列 4152(和图41的高速缓存器控制逻辑4108)也被称为NNU LLC片4006-4。在一 个实施例中,存储器阵列4152和各LLC片4006包括2MB的存储器阵列,但是 设想了具有不同大小的其它实施例。此外,设想了存储器阵列4152的大小和 LLC片4006的大小不同的实施例。优选地,LLC 4005包含L2高速缓存器4008 以及高速缓存器阶层结构中的任何其它高速缓存器(例如,L1高速缓存器)。
环形总线4024或环4024是促进包括DRAM控制器4018、非核心4016以及 LLC片4006在内的相干组件之间的通信的可扩展双向互连。环4024包括两个 单向环,这两个单向环各自还包括五个子环:请求(Request),用于传输包括 加载的大多数类型的请求包;监听(Snoop),用于传输监听请求包;确认 (Acknowledge),用于传输响应包;数据(Data),用于传输数据包以及包括写 入的特定请求项;以及信用(Credit),用于在远程队列中发射并获得信用。附 接至环4024的各节点经由环站4004而连接,其中该环站4004包含用于在环4024上发送和接收包的队列。队列是代表远程队列中所要接收的附接组件在 环4024上发起请求的出口队列、或从环4024接收要转发至附接组件的请求的 入口队列。在出口队列在环上发起请求之前,其首先从远程目的地入口队列 获得信用环上的信用。这确保了远程入口队列具有可用于在请求到达时处理 该请求的资源。在出口队列希望在环4024上发送事务包时,该出口队列仅可 以在没有预先占有最终以远程节点为目的地的传入包的情况下发送事务包。 在传入包从任意方向到达环站4004时,询问包的目的地ID以确定该环站4004是否是所述包的最终目的地。如果该目的地ID不等于环站4004的节点ID,则 包在后续时钟内继续前进至下一环站4004。否则,包在同一时钟内离开环 4024,以供包的事务类型所涉及的任一入口队列所消耗。
一般而言,LLC 4005包括N个LLC片4006,其中N个片4006中的各片4006 负责对通过散列(hash)算法或简称为散列所确定的处理器100的物理地址空 间的不同的约1/N进行高速缓存。散列是将物理地址作为输入、并选择负责 对该物理地址进行高速缓存的适当LLC片的函数。在必须从核心4002或监听 代理向LLC 4005进行请求的情况下,该请求必须被发送至负责对该请求的物 理地址进行高速缓存的适当LLC片4006。适当LLC片4006是通过对请求的物 理地址应用散列而确定的。
散列算法是满射函数(surjective function),其中该满射函数的域是物理地 址的集合或其子集,并且该满射函数的范围是当前包括的LLC片4006的数 量。更具体地,该范围是LLC片4006的索引(例如,在八个LLC片4006的情况 下为0至7)的集合。该函数可以通过检查物理地址位的适当子集来进行计算。 例如,在具有八个LLC片4006的系统中,散列算法的输出可以简单地是 PA[10:8],即物理地址位中的三个位,也即位8至位10。在LLC片4006的数量 为8的另一实施例中,散列的输出是其它地址位(例如,作为{PA[17]、PA[14]、 PA[12]^PA[10]^PA[9]}所产生的三位)的逻辑函数。
在任何LLC 4005高速缓存完成之前,该LLC 4005的所有请求器都必须 具有相同的散列算法。由于散列规定了操作期间对地址进行高速缓存的位置 以及将要发送监听的位置,因此散列仅通过所有核心4002、LLC片4006和监 听代理之间的协调来改变。如以下针对图42和图43更详细所述,更新散列算 法基本上包括:(1)使所有核心4002同步以防止新的可高速缓存访问;(2)执 行LLC 4005中当前所包括的所有LLC片4006的回写无效,这导致修改后的高 速缓存器行被写回到系统存储器并且所有的高速缓存器行都无效(如下所述,回写无效可以是选择性回写无效,其中只有地址被新散列算法散列至与 旧散列算法不同的片的那些高速缓存器行被驱逐,即无效,并且如果被修改, 则在无效之前被写回);(3)将散列更新消息广播给各个核心4002和监听源, 这命令各个核心4002和监听源改变为新的散列(如下所述,从包含性(inclusive) 散列变为独占散列,或者反之亦然);(4)对用于控制对存储器阵列4152的访 问的选择逻辑4158(见图41)的模式输入4199进行更新;以及(5)用新的散列算 法恢复执行。
当LLC片4006的数量N为8即2的幂次方时,上述的散列算法是有用的, 并且这些算法可被修改为容易地适应2的其它幂次方,例如,针对4个片修改 为PA[9:8]或者针对16个片修改为PA[11:8]。然而,根据LLC 4005中是否包含 NNU LLC片4006-4(以及根据核心复合体4012的数量),N可以是或者可以不 是2的幂次方。因此,如以下针对图42和图43所述,取决于LLC片4006的数 量使用至少两个不同的散列。即,在LLC 4005中包括NNU LLC片4006-4的情 况下使用被称为包含性散列的第一散列,并且在LLC 4005中不包括NNU LLC片4006-4的情况下使用被称为独占散列的第二散列。
一个散列算法输出PA[45:6]除以N的余数。该散列具有如下的优点:即 使在N的值不是2的幂次方的情况下也以基本上平衡的方式在N个LLC片 4006之间分配物理地址(假定物理地址的相对均匀分配)。当N是2的幂次方 时,可以通过简单地输出PA[45:6]的低N-1位来进行取余运算。然而,当N不 是2的幂次方时,取余运算可能不利地需要整除。
与PA除以N的余数的散列相近似但是用于物理地址的较小子集的另一 散列被定义如下(其中当N不是2的幂次方时(在该情况下为当N=9时)该散列 可以更高效地在硬件中实现):
Figure BDA0002163527810001131
在calc_hash()的情况下,针对散列使用PA[11:8],但是如果PA[11:8]>8, 则使用PA[10:8],其中PA[10:8]确保在范围[0,7]内。可以发现,calc_hash()能 够以与PA[45:6]除以N的余数相比相对较不平衡的方式在LLC片4006之间分 配物理地址(再次假定物理地址的相对均匀分配),即片0~6具有约1/8的可能 性,而片7和8具有约1/16的可能性。然而,应当注意,即使是PA[45:6]除以N 的余数的散列算法也不产生完美均匀平衡的分配,这是因为PA[45:6]表示具 有作为2的幂次方的多个元素的域、而N不是2的幂次方。
一般来说,当N不是2的幂次方时,散列算法首先将物理地址散列至2^P 个可能的结果的范围,其中P=ceiling(log2(N)),即log2(N)的取顶函数,然后 将第一散列的大于或等于N的结果(即,不与现有片4006相对应的结果)映射 至小于N的输出(即,映射至现有片4006)。
硬件中相对高效地实现的另一散列算法被定义如下:
Figure BDA0002163527810001132
Calc_hash_2()能够以与calc_hash()相比相对更平衡的方式在LLC片4006 之间分配物理地址(再次假定物理地址的相对均匀分配),即片0~7具有约7/64 的可能性,而片8具有约8/64或1/8的可能性。在其它实施例中,calc_hash() 和calc_hash_2()算法可被修改为通过使用甚至更大数量的物理地址位来以甚 至相对更平衡的方式分配物理地址。
如这里所述,有利地,实施例采用两种不同的散列算法:一种不包括存 储器阵列4152作为LLC片4006,一种包括存储器阵列4152作为LLC片4006。 例如,在核心复合体4012及其相应LLC片4006的数量为8的处理器4000中, 不包括存储器阵列4152的散列可以是PA[10:8];以及包括存储器阵列4152的 散列可以是上述的calc_hash_2(PA),其映射至9个不同的片。在一个实施例中, 两个散列算法可被有利地设计为支持选择性的回写无效作为最优化方案,即 仅对将被包含性散列算法和独占散列算法散列至不同片的高速缓存器行进行驱逐(即,回写无效)。在一些实施例中,如以下针对图42和图43的方框更 详细所述,关于从包含性散列至独占散列的转换,这要求仅使NNU LLC片 4006-4是回写无效的(即,非NNULLC片4006无需是回写无效的);以及关于 从独占散列至包含性散列的转换,仅需对非NNULLC片4006中的其地址将 被包含性散列算法和独占散列算法散列至不同片的高速缓存器行进行驱逐。 独占散列是PA[10:8]或类似物、并且包含性散列是calc_hash_2或类似物的实 施例就是这样的实施例。
现参考图41,示出一框图,该框图更详细示出图40的NNU 121、以及图 40的环站4004-M。图41的NNU 121在许多方面与上述的NNU 121的实施例类 似,但是还包括高速缓存器控制逻辑4108、选择逻辑4158和可以由NNU 121 的权重RAM 124或数据RAM 122构成的存储器阵列4152。尽管在图41中未示 出,但是NNU 121还包括图1中的程序存储器129、定序器128、数据RAM 122 和权重RAM 124。NNU 121还包括如图41所示的图1中的NPU 126的阵列和控 制/状态寄存器127。如上所述,例如,如以上详细描述地,针对图34,阵列 中的NPU 126各自包括用于处理指令和数据的多阶段的流水线。NPU流水线126的第一阶段向选择逻辑4158提供数据以写入存储器阵列4152,并且第二 阶段从存储器阵列4152接收数据。在一些实施例中,流水线126包括十个阶 段,并且第六阶段从存储器阵列4152接收数据,并且第九阶段向选择逻辑 4158提供数据以供写入存储器阵列4152。
存储器阵列4152耦接至NPU阵列流水线126。选择逻辑4158向存储器阵 列4152提供输入。选择逻辑4158由用于指定模式的模式输入4199控制。优选 地,模式4199输入是控制/状态寄存器127中的、被写入以将模式4199从高速 缓存存储器模式改变为NNU模式的一个位的输出。模式指示存储器阵列4152 正在NNU模式下或者在高速缓存存储器模式下工作。当在NNU模式下工作 时,存储器阵列4152用作NNU 121的权重RAM 124。(尽管在全文中是指存储 器阵列4152用作权重RAM 124,但是可选地,存储器阵列4152可以用作数据 RAM122。)然而,当在高速缓存存储器模式下工作时,存储器阵列4152用 作高速缓存存储器。描述了高速缓存存储器模式的两个实施例:在第一实施 例中,存储器阵列4152用作核心复合体4012所共享的LLC 4005的片4006,以 及在第二实施例中,存储器阵列4152用作核心复合体4012所共享的牺牲高速 缓存器。在模式控制4199指示NNU模式的情况下,选择逻辑4158选择NPU 阵列流水线126所提供的数据,并且存储器阵列4152将数据写入NPU阵列流 水线126,使得存储器阵列4152用作NNU 121的权重RAM 124。与此相对, 在模式控制4199指示高速缓存存储器模式的情况下,选择逻辑4158选择高速 缓存器控制逻辑4108的数据流水线4146所提供的数据,并且存储器阵列4152 将数据写入高速缓存器控制逻辑4108的数据流水线4146。以这种方式,存储 器阵列4152用作核心4002所共享的高速缓存存储器,例如,用作牺牲高速缓 存器或LLC片4006-4。优选地,在高速缓存存储器模式下使用两个RAM 122/124中较大者的存储器阵列。此外,设想了如下的实施例,其中权重RAM 124和数据RAM 122这两者的存储器阵列被用作核心4002所共享的高速缓存 存储器。
优选地,从数据流水线4146向存储器阵列4152提供数据的数据总线是64 个字节宽(例如,高速缓存器行的大小),并且从存储器阵列4152向NPU阵列 流水线126提供数据的数据总线是等于阵列的NPU 126的数量的字数,例如 1024个字。相反,从NPU阵列流水线126向存储器阵列4152提供数据的数据 总线是等于阵列的NPU 126的数量的字数。优选地,选择逻辑4158和存储器 阵列4152之间的总线包括地址总线、写入数据总线、RD/WR控制以及用于指 示16个高速缓存器行中的哪个高速缓存器行(假定例如1024个字节宽的存储 器阵列和64个字节的高速缓存器行)正被访问的高速缓存器行启动(CLE)。在 从NPU阵列流水线126向存储器阵列4152进行写入的情况下,通常所有的 CLE将为真,这是因为通常所有的NPU 126都对权重RAM 124的一行进行写 入。选择逻辑(未示出)在数据正被写入存储器阵列4152时使用CLE来选择存 储器阵列4152的适当存储器区块以使得能够进行读取或写入。
在图41的实施例中,当在NNU模式下操作时,优选地,在核心4002上执 行的架构程序经由环形总线4024来访问作为外围装置的NNU 121而非作为 核心的执行单元的NNU 121(例如以上针对图1~图35所述的实施例等)。优选 地,图35的接口逻辑3514(图41中未示出)和控制/状态寄存器127耦接至环站 4004-M,其中该环站4004-M使得核心4002能够读取和写入控制/状态寄存器 127、并且能够使用架构加载/存储指令(而非图14和图15的MTNN1400和 MFNN 1500指令)经由接口逻辑3514来读取和写入数据RAM 122、权重RAM 124和程序存储器129。另外,可以经由直接存储器访问(DMA)传递来在系统 存储器和数据RAM 122/权重RAM 124之间传递数据/权重字。最后,设想了 如下的实施例,其中NNU 121本身执行加载/存储指令以在系统存储器和数据RAM 122/权重RAM 124之间传送数据/权重。优选地,操作系统将NNU 121 管理为由在不同核心4002上运行的系统的各种处理共享的全局资源,并且操 作系统需要用以在使用NNU 121之前获得该NNU 121的所有权的处理。优选 地,如以下针对图42~图45更详细所述,操作系统控制NNU 121操作的模式 4199,并且更具体地控制存储器阵列4152的运作方式。在一个实施例中,存 储器阵列4152是2MB的静态RAM阵列,但也可以设想具有更大或更小的大 小的其它实施例。
高速缓存器控制逻辑4108耦接至环站4004-M并且耦接至选择逻辑4158 和存储器阵列4152。高速缓存器控制逻辑4108包括耦接至环站4004-M的标记 流水线4144、耦接至环站4004-M的数据流水线4146以及耦接至标记流水线 4144的标记/MESI/LRU阵列4142。高速缓存器控制逻辑4108还包括外部接口 4147,该外部接口4147包括填充队列4122、监听队列4124和仲裁器4136,其 中仲裁器4136为了对标记流水线4144和数据流水线4146的访问而在填充队 列4122和监听队列4124之间进行仲裁。高速缓存器控制逻辑4108还包括核心 接口4148,该核心接口4148包括加载队列4112、驱逐队列4114、查询队列4116 和仲裁器4138,其中仲裁器4138为了对标记流水线4144和数据流水线4146的 访问而在加载队列4112、驱逐队列4114和查询队列4116之间进行仲裁。仲裁 器4132为了对标记流水线4144的访问而在外部接口4147和核心接口4148之 间进行仲裁,并且仲裁器4134为了对数据流水线4146的访问而在外部接口 4147和核心接口4148之间进行仲裁。在一个实施例中,高速缓存器控制逻辑 4108还包括状态机,其中该状态机响应于进行存储器阵列4152的回写无效操 作的请求(例如,响应于来自核心4002的回写无效请求)而这样做。此外,状 态机响应于进行存储器阵列4152的无效操作的请求(例如,响应于来自核心 4002的无效请求)而这样做。为了进行无效操作,状态机将存储器阵列4152 中的各高速缓存器行的标记/MESI阵列4142内的状态更新为无效状态,并针 对存储器阵列4152的各集合而重设LRU阵列4142内的替换信息。
标记流水线4144从仲裁器4132接收请求和标记更新,并向环站4004-M 以及外部接口4147和核心接口4148提供高速缓存器行状态和响应。数据流水 线4146从仲裁器4134接收请求和数据并将数据提供给选择逻辑4158和环站 4004-M。当处于高速缓存存储器模式下时,标记/MESI阵列4142对存储器阵 列4152中所储存的高速缓存器行的标记和状态进行储存。优选地,当处于高 速缓存存储器模式下时,存储器阵列4152用作集合关联存储器,并且LRU阵 列4142储存用于确定要替换所选集合中的哪路的高速缓存器行替换信息。
填充队列4122处理向存储器阵列4152的新分配(再加载请求)以及从存储 器阵列4152的驱逐(牺牲请求)。在牺牲请求的情况下,填充队列4122请求对 标记流水线4144的访问以确定哪个高速缓存器行(如果有的话)需要被驱逐, 并且请求对数据流水线4146的访问以从存储器阵列4152读出修改后的数据 从而写出至系统存储器。在再加载请求的情况下,填充队列4122请求对标记 流水线4144的访问以将新分配的高速缓存器行的地址写入标记阵列4142并 设置MESI阵列4142中的初始MESI状态,并且请求对数据流水线4146的访问 以将新数据写入存储器阵列4152。监听队列4124处理源自系统总线4022的监 听。监听队列4124请求对标记流水线4144的访问以确定在监听请求中指定的 高速缓存器行的状态,并且请求对数据流水线4146的访问以从存储器阵列 4152读出修改后的数据(如果存在的话)以响应监听请求。在加载在所有的低 级高速缓存器(如以下更详细所述,当存储器阵列4152和高速缓存器控制逻 辑4108正用作牺牲高速缓存器4006-4的情况下包括L3高速缓存器4005)中都 未命中的情况下,加载队列4112处理来自核心4002的L2高速缓存器4008的加 载(以及在L2高速缓存器4008不包括其它高速缓存器的实施例中,处理来自 其它高速缓存器的加载,例如L1数据和L1指令)。加载队列4112请求对标记 流水线4144的访问以确定所指定的高速缓存器行是否存在于存储器阵列4152中,并且请求对数据流水线4146的访问以从存储器阵列4152读出指定数 据以经由环形总线4024写入请求方核心4002。驱逐队列4114处理来自核心的 L2高速缓存器4008的驱逐。当用作牺牲高速缓存器4006-4时,驱逐队列4114 请求对标记流水线4144的访问,以将从低级高速缓存存储器驱逐的高速缓存 器行的地址写入标记阵列4142,并设置MESI阵列4142中的初始MESI状态。 当用作LLC片4006时,如果被驱逐的高速缓存器行被修改,则驱逐队列4114 请求对标记流水线4144的访问以更新MESI阵列4142中的MESI状态。驱逐队 列4114还请求对数据流水线4146的访问以将被驱逐的高速缓存器行写入存 储器阵列4152。查询队列4116处理对核心的L2高速缓存器4008的监听。查询 队列4116请求对标记流水线4144的访问以在核心4002对监听响应为“已修 改”之后将MESI状态更新为“已修改”,并且请求对数据流水线4146的访问 以将来自监听响应的修改后的高速缓存器行写入存储器阵列4152。在一个实 施例中,高速缓存器控制逻辑4108包括各核心4002所用的核心接口4148。在 一个实施例中,各核心接口4148包括单独的数据/指令加载队列4112、驱逐队 列4114和查询队列4116,以分别用于对核心4002的单独的数据/指令高速缓存 器进行加载、驱逐和监听。
现参考图42,示出一流程图,该流程图示出在图41的存储器阵列4152正 从用作LLC片4006时的高速缓存存储器模式转换为用作NNU 121的权重 RAM 124/数据RAM 122时的NNU模式的情况下的图40的处理器4000的操 作。如上所述,NNU 121具有大量的存储器,例如在一个实施例中,权重RAM 124是2MB。图42和图43描述了如下的实施例,其中该实施例使得存储器阵 列4152能够用作附加的LLC片4006,从而有利地使得在NNU 121未被系统上运行的任何处理用作神经网络单元的情况下LLC 4005的大小能够显著地增 加(例如,增加25%)。更具体地,图42描述了用于将存储器阵列4152从作为 LLC片4006操作转换为作为NNU 121的权重RAM 124操作的方法。有利地, 在模式4199被设置为高速缓存存储器模式的情况下,图41的高速缓存器控制 逻辑4108和存储器阵列4152以及选择逻辑4158在图42和图43的实施例中共 同地用作LLC片4006。流程始于方框4202。
在方框4202处,请求从使用存储器阵列4152作为LLC 4005的片4006转换 为使用存储器阵列4152作为NNU 121的权重RAM 124。优选地,该转换由处 理器4000上运行的操作系统来控制。例如,处理器4000上运行的应用程序请 求操作系统使用NNU121,并且操作系统检测为存储器阵列4152当前正用作 LLC片4006,因此需要从高速缓存存储器模式转换为NNU模式。流程进入方 框4204。
在方框4204处,响应于方框4202处的转换请求,操作系统使所有核心 4002本身同步。也就是说,操作系统使核心4002停止拾取架构指令并停止访 问存储器。更具体地,这使对当前包括存储器阵列4152的LLC 4005的访问暂 停。在一个实施例中,操作系统在各核心4002上执行用于指示核心4002同步 的架构指令(例如,x86WRMSR)。在备选实施例中,操作系统在核心4002 其中之一上执行指令,并且作为响应,一个核心4002例如经由微码来以信号 形式通知其它核心4002中的各核心进行同步。流程进入方框4206。
在方框4206处,在LLC 4005上进行回写无效。在一个实施例中,核心4002 微码优选地响应于操作系统的架构指令的执行而请求回写无效。回写无效写 回修改后的高速缓存器行(如果有的话),并使所有LLC片4006(包括NNU LLC片4006-4)的所有高速缓存器行无效。在备选实施例中,回写无效是选择 性的。一般来说,选择性回写无效意味着根据以下伪码进行操作:
Figure BDA0002163527810001201
当然,当片是NNU片时(例如,在8个非NNU片4006加上一个NNU LLC片 4006-4的情况下,片=8),exclusive_hash(cacheline address)(即“独占散列(高 速缓存器行地址)”)将不等于片,这是因为独占散列从不返回NNU LLC片 4006-4的索引,因此NNU LLC片4006-4中的所有高速缓存器行将被驱逐,即 如果被修改则写回,否则无效。根据所采用的包含性散列和独占散列,需要 从非NNU LLC片4006驱逐的高速缓存器行的数量发生变化。例如,假定独 占散列和包含性散列都是PA[45:6]%N,但是其中N针对各散列不同,即与 针对包含性散列的N相比,针对独占散列的N较小,并且假定针对包含性散 列,N为9,以及针对独占散列,N为8。在这种情况下,非NNU LLC片4006 中的高速缓存器行的相当大一部分(例如,约88%)需要被驱逐。在这种情况 下,简单地使所有LLC片4006的所有高速缓存器行回写无效可能一样或者更 高效。相反,再例如,假定独占散列是PA[10:8],并且包含性散列是上述 的calc_hash_2。在这种情况下,非NNU LLC片4006中的高速缓存器行都不需 要在从包含性散列向独占散列的转换(即图42中进行的转换)时被驱逐。流程 进入方框4208。
在方框4208处,如上所述,用于将高速缓存器行的物理地址散列至LLC 片4006的散列算法被更新为不包括作为LLC 4005的片4006的存储器阵列 4152。优选地,散列更新消息被广播给各核心4002和监听源,以将其散列算 法改变为独占散列,即不包括NNU LLC片4006-4的散列。流程进入方框4212。
在方框4212处,模式4199被更新为指示NNU模式,以使得选择逻辑4158 使存储器阵列4152可用作NPU流水线126以及核心4002上执行的架构程序所 要访问的权重RAM 124。在一个实施例中,操作系统(例如,装置驱动程序) 在核心4002其中之一上执行架构指令,其中该架构指令写入NNU 121控制/ 状态寄存器127以更新用于控制模式4199的位,从而将模式4199从高速缓存 器模式改变为NNU模式。架构指令可以是对I/O空间的写入或用于进行对控 制/状态寄存器127的存储器映射I/O写入的存储器存储指令。流程进入方框 4214。
在方框4214处,核心4002恢复操作,即它们不再同步,而是开始拾取并 执行可以包括访问存储器的架构指令。在一个实施例中,操作系统在各核心 4002上执行用于指示核心4002恢复操作的架构指令。在备选实施例中,操作 系统在核心4002其中之一上执行指令,并且作为响应,该一个核心4002例如 经由微码来以信号形式通知其它核心4002中的各核心恢复操作。流程结束于 方框4214。
现参考图43,示出一流程图,该流程图示出在图41的存储器阵列4152正 从用作NNU 121的权重RAM 124/数据RAM 122时的NNU模式转换为用作 LLC片4006时的高速缓存存储器模式的情况下的图40的处理器4000的操作。 流程始于方框4302。
在方框4302处,请求从使用存储器阵列4152作为NNU 121的权重RAM 124转换为使用存储器阵列4152作为LLC 4005的片4006。优选地,该转换由 处理器4000上运行的操作系统来控制。例如,处理器4000上运行的应用程序 向操作系统通知该应用程序不再使用NNU121、并且没有其它应用程序正在 请求使用NNU 121,并且操作系统检测为存储器阵列4152当前正用作权重 RAM 124,因此需要从NNU模式转换为高速缓存存储器模式。流程进入方框4304。
在方框4304处,响应于方框4302处的转换请求,如同针对方框4204所述 的方式,操作系统使所有核心4002本身同步。更具体地,这使对当前不包括 存储器阵列4152的LLC4005的访问暂停。流程进入方框4306。
在方框4306处,在LLC 4005上进行回写无效。回写无效写回修改后的高 速缓存器行(如果有的话),并使所有LLC片4006(不包括NNU LLC片4006-4, 这是因为其当前不包括在LLC 4005中)的所有高速缓存器行无效。在备选实 施例中,回写无效是选择性的。一般来说,选择性回写无效意味着根据以下 伪码进行操作:
Figure BDA0002163527810001221
Figure BDA0002163527810001231
在图43中的从独占散列向包含性散列的转换中,片决不会是NNU片,因 此NNU LLC片4006-4中的高速缓存器行将不被驱逐。根据所采用的包含性散 列和独占散列,需要从非NNU LLC片4006驱逐的高速缓存器行的数量发生 变化。例如,假定独占散列和包含性散列都是PA[45:6]%N,但是其中N针 对各散列不同,即与针对包含性散列的N相比,针对独占散列的N较小,并 且假定针对包含性散列,N为9,以及针对独占散列,N为8。在这种情况下, 非NNU LLC片4006中的高速缓存器行的相当大一部分(例如,约88%)需要被 驱逐。在这种情况下,简单地使所有LLC片4006的所有高速缓存器行回写无 效可能一样或者更高效。相反,假定独占散列是PA[10:8],并且包含性散 列是上述的calc_hash_2。在这种情况下,非NNULLC片4006中的高速缓存器 行的相对小的一部分(例如,约12%)需要被驱逐。流程进入方框4308。
在方框4308处,如上所述,用于将高速缓存器行的物理地址散列至LLC 片4006的散列算法被更新为包括作为LLC 4005的片4006的存储器阵列4152。 即,散列更新消息被广播给各核心4002和监听源,以将其散列算法改变为包 含性散列,即包括NNU LLC片4006-4的散列。流程进入方框4311。
在方框4311处,高速缓存器控制逻辑4108通过如上所述地针对所有高速 缓存器行将MESI阵列4142中的状态更新为无效,来对存储器阵列4152进行 无效操作。优选地,高速缓存器控制逻辑4108还对LRU阵列4142中的替换信 息进行重设。在一个实施例中,核心4002的微码请求NNU LLC片4006-4进行 无效请求,其中高速缓存器控制逻辑4108作为响应而进行无效。流程进入方 框4312。
在方框4312处,模式4199被更新为指示高速缓存存储器模式以使得选择 逻辑4158使存储器阵列4152可用作LLC片4006。流程进入方框4314。
在方框4314处,核心4002恢复操作,即如同针对方框4214所述的方式, 它们不再同步,而是开始拾取并执行可以包括访问存储器的架构指令。流程 结束于方框4314。
现参考图44,示出一流程图,该流程图示出在图41的存储器阵列4152正 从用作NNU 121的权重RAM 124/数据RAM 122时的NNU模式转换为用作牺 牲高速缓存器4006-4时的高速缓存存储器模式的情况下的图40的处理器 4000的操作。牺牲高速缓存器是用于仅保持由处理器4000的高速缓存器阶层 结构中较低的高速缓存存储器驱逐的高速缓存器行的高速缓存存储器。例 如,L2高速缓存器4008和/或L1数据/指令高速缓存器是低级高速缓存器。另 外,在存储器阵列4152可用作牺牲高速缓存器4006-4的实施例中,LLC 4005 被认为是3级(L3)高速缓存器并且相对于牺牲高速缓存器4006-4而言被认为 是低级高速缓存器,并且L3高速缓存器4005将高速缓存器行驱逐至牺牲高速 缓存器4006-4。牺牲高速缓存器在地址命中牺牲高速缓存器时(例如,响应于 加载请求或监听请求)提供数据。在一个实施例中,L3高速缓存器4005包括 核心复合体4012的L2高速缓存器4008以及低级高速缓存器,并且牺牲高速缓 存器提供命中数据以分配至L3高速缓存器4005中,该L3高速缓存器4005进而 将数据提供给L2高速缓存器4008,该L2高速缓存器4008进而将数据提供给更 低级的高速缓存器。在另一实施例中,核心复合体4012的L3高速缓存器4005、 L2高速缓存器4008和更低级的高速缓存器不是包含性的,并且牺牲高速缓存 器提供命中数据以直接分配各级的高速缓存器。有利地,当模式4199被设置 为高速缓存存储器模式时,图41的高速缓存器控制逻辑4108和存储器阵列 4152以及选择逻辑4158在图44和图45的实施例中共同用作牺牲高速缓存器 4006-4。在一个实施例中,牺牲高速缓存器4006-4可以用作将被驱逐至该牺 牲高速缓存器4006-4的修改后的高速缓存器行进行高速缓存的回写高速缓 存器,并且还可以用作不对被驱逐至该牺牲高速缓存器4006-4的修改后的高 速缓存器行进行高速缓存、而是将修改后的高速缓存器行转发至系统存储器 的直写(write-through)高速缓存器。如根据图45(更具体地,方框4506、4508 和4512)的说明可以发现,直写牺牲高速缓存器4006-4具有快速转换为在 NNU模式下使用存储器阵列4152作为权重RAM 124的优点,而回写牺牲高速 缓存器4006-4可以具有针对处理器4000的总体高速缓存效率较高的优点。优 选地,牺牲高速缓存器4006-4可配置为回写模式或直写模式。流程始于方框 4402。
在方框4402处,请求从使用存储器阵列4152作为NNU 121的权重RAM 124转换为使用存储器阵列4152作为核心复合体4012所共享的牺牲高速缓存 器4006-4。优选地,与以上针对方框4302所述的方式类似,通过处理器4000 上运行的操作系统来控制转换。流程进入方框4404。
在方框4404处,模式4199被更新为指示高速缓存存储器模式以使得选择 逻辑4158令存储器阵列4152可用作牺牲高速缓存器4006-4。流程进入方框 4406。
在方框4406处,总线控制器4014被告知开始将监听引导至牺牲高速缓存 器4006-4,并且低级高速缓存器被告知开始将加载请求和逐出请求引导至牺 牲高速缓存器4006-4。流程进入方框4408。
在方框4408处,牺牲高速缓存器4006-4开始对牺牲数据进行高速缓存。 在图41的实施例中,驱逐队列4114接收从低级高速缓存器(例如,L3高速缓 存器4005、L2高速缓存器4008和/或L1D/L1I高速缓存器)驱逐高速缓存器行的 请求(例如,逐出)。作为响应,牺牲高速缓存器4006-4将被驱逐的高速缓存 器行分配至存储器阵列4152中。流程进入方框4412。
在方框4412处,牺牲高速缓存器4006-4接收访问数据的请求,并且在请 求的地址命中牺牲高速缓存器4006-4的情况下利用数据进行响应。在图41的 实施例中,监听队列4214和加载队列4112接收请求。更具体地,监听牺牲高 速缓存器4006-4以使另一高速缓存代理正读取的高速缓存器行回写无效。另 外,牺牲高速缓存器4006-4从低级高速缓存器接收针对这些低级高速缓存器 中未命中的加载的加载请求。如果请求命中牺牲高速缓存器4006-4,则该牺 牲高速缓存器4006-4向请求器提供命中数据。流程结束于方框4412。
现参考图45,示出一流程图,该流程图示出在图41的存储器阵列4152正 从用作牺牲高速缓存器4006-4时的高速缓存存储器模式转换为用作NNU 121 的权重RAM 124/数据RAM 122时的NNU模式的情况下的图40的处理器4000 的操作。如上所述,牺牲高速缓存器4006-4可以正用作直写型高速缓存器或 者用作回写型高速缓存器。流程始于方框4502。
在方框4502处,请求从使用存储器阵列4152作为牺牲高速缓存器4006-4 转换为使用存储器阵列4152作为NNU 121的权重RAM 124。优选地,该转换 由处理器4000上运行的操作系统来控制。例如,处理器4000上运行的应用程 序请求操作系统使用NNU 121,并且操作系统检测为存储器阵列4152当前正 用作牺牲高速缓存器4006-4,因此需要从高速缓存存储器模式转换为NNU模 式。流程进入方框4504。
在方框4504处,高速缓存器被告知停止将驱逐引导至牺牲高速缓存器 4006-4。流程进入决策方框4506。
在决策方框4506处,如果牺牲高速缓存器4006-4正用作直写型高速缓存 器,则流程进入方框4512;否则,流程进入方框4508。
在方框4508处,高速缓存器控制逻辑4108对牺牲高速缓存器4006-4进行 回写无效。也就是说,牺牲高速缓存器4006-4将其所有修改后的高速缓存器 行写回至系统存储器,然后(通过针对所有高速缓存器行将MESI阵列4142中 的状态更新为无效;优选地,高速缓存器控制逻辑4108还对LRU阵列4142中 的替换信息进行重设)使其所有高速缓存器行无效。优选地,高速缓存器控 制逻辑4108在进行回写无效的同时继续对加载请求和监听请求进行响应。流 程进入方框4514。
在方框4512处,高速缓存器控制逻辑4108对存储器阵列4152进行无效操 作。也就是说,高速缓存器控制逻辑4108使存储器阵列4152的所有高速缓存 器行无效。可以发现,如果牺牲高速缓存器4006-4正用作直写型高速缓存器, 则由于无需进行方框4508处的对修改后的高速缓存器行的回写(即,仅需要 进行方框4512这里的无效),因此转换为使用存储器阵列4152作为权重RAM 124可以有利地比牺牲高速缓存器4006-4正用作回写型高速缓存器的情况更 快,这在牺牲高速缓存器4006-4相对大的情况下可以是一种相当大的节省。流程进入方框4514。
在方框4514处,低级高速缓存器被告知停止将加载请求引导至牺牲高速 缓存器4006-4,并且总线控制器4014被告知停止将监听引导至牺牲高速缓存 器4006-4。流程进入方框4516。
在方框4516处,如同针对方框4212所述的方式,模式4199被更新为指示 NNU模式,以使得选择逻辑4158使存储器阵列4152可用作NPU流水线126以 及核心4002上执行的架构程序所要访问的权重RAM 124。流程进入方框 4518。
在方框4518处,高速缓存器控制逻辑4108停止(高速缓存器控制逻辑 4108在方框4408处开始做的)对牺牲数据进行高速缓存。此外,高速缓存器 控制逻辑4108向总线控制器4014转发该高速缓存器控制逻辑4108所接收的 任何后续加载、驱逐或监听请求。最后,在核心4002上执行的架构程序可以 用作NPU流水线126所要访问的权重RAM 124。流程结束于方框4518。
现将描述如下的实施例,其中NNU 121的存储器阵列(例如,权重RAM 124或数据RAM 122)被用作存储器以保持由核心复合体4012处理的数据所 用的牺牲高速缓存器的高速缓存器行(例如,为从L3高速缓存器4005的高速 缓存器行驱逐提供服务),该实施例与以上针对图40~图41和图44~图45所述 的实施例类似,除了在下述的实施例中,标记(以及高速缓存器行状态和替 换信息)有利地储存在L3高速缓存器4005的标记目录中(而非储存在NNU 121 中的单独结构中,例如在图41的标记/MESI/LRU阵列4142中),并且L3高速 缓存器4005的控制逻辑增强以处理针对牺牲高速缓存器的请求(例如,加载、 驱逐和监听)、并在NNU 121存储器阵列(以下称为选择性数据存储4652)与L3 高速缓存器4005和/或系统存储器之间进行必要的高速缓存器行传递。
现参考图46,示出一框图,该框图示出根据备选实施例的处理器4000。 处理器4000包括环形总线4024,其中核心4002和L3高速缓存器4005、NNU 121以及DRAM控制器4018分别通过环站4004-0、4004-N和4004-M而耦接至 该环形总线4024。系统存储器4618耦接至DRAM控制器4018。NNU 121包括 选择性数据存储4652。L3高速缓存器4005包括L3数据存储4606、标记目录 4642、以及包括模式指示符4699的控制逻辑4644。逻辑上,当在牺牲高速缓存器模式下操作时,处理器4000包括牺牲高速缓存器4602,如下所述,牺牲 高速缓存器4602包括选择性数据存储4652、以及L3高速缓存器4005的控制逻 辑4644和标记目录4642的相关部分。优选地,选择性数据存储4652是NNU 121的权重RAM 124和/或数据RAM 122。优选地,如在以下更详细所述,模 式4699被操作系统(例如,装置驱动程序)更新为指示牺牲高速缓存器模式或 NNU模式,这取决于核心4002是否已经请求使用NNU 121作为神经网络单 元。
图46的处理器4000在许多方面与图40的处理器4000类似,并且附图标记 相同的元件是类似的,其差异如下所述。更具体地,处理器4000可以被置于 第一模式,在所述第一模式中NNU 121的选择性数据存储4652被用于保持核 心4002所处理的高速缓存器行以用作牺牲高速缓存器4602,或者处理器4000 可以被置于第二模式以使用选择性数据存储4652来保持NNU 121所处理的 数据(例如,神经网络权重或数据)。如以下更详细所述,模式由模式指示符 4699指示,其中控制逻辑4644检查该模式指示符4699以确定其应该采取哪些 动作。牺牲高速缓存器4602以与图41、图44和图45的牺牲高速缓存器4006-4 类似的许多方式来为核心4002提供服务,而差异如下所述。然而,有利地, 牺牲高速缓存器4602的标记被保持在L3高速缓存器4005的标记目录4642中。 这例如与图41的实施例形成对比,其中在图41的实施例中标记目录是NNU 121的一部分,例如标记阵列4142。另外,L3高速缓存器4005的控制逻辑4644 控制图46的牺牲高速缓存器4602的大部分操作。这例如与图41的实施例形成 对比,在图41的实施例中NNU 121的高速缓存器控制逻辑4108控制牺牲高速 缓存器4006-4。优选地,如以下针对图47更详细所述,标记目录4642还保持 牺牲高速缓存器4602的状态(例如,MESI状态)和替换信息(例如,LRU信息)。
尽管图46示出具有单个L3数据存储4606和单个标记目录4642的L3高速 缓存器4005,但是L3数据存储4606可以包括多个L3数据存储4606(例如针对 各L3片4006包括一个L3数据存储4606)、以及多个标记目录4642(例如,针对 各L3片4006包括一个标记目录4642);此外,各L3片4006可以包括其自己的 控制逻辑4644实例。如上所述,这样的实施例可以采用散列算法,该散列算 法对高速缓存器行的地址进行散列以确定多个片4006中的哪个片4006将保 持高速缓存器行。然而,设想了如下的实施例,其中处理器4000是单核处理 器并且L3高速缓存器4005未被切片,使得L3数据存储4606、标记目录4642 和控制逻辑4644也不被切片。如以下更详细所述,在切片实施例中,选择性 数据存储4652逻辑上被切片成P个部分(其中P是L3高速缓存器4005的片4006 的数量),使得选择性数据存储4652的各部分与L3高速缓存器4005的相应片 4006相关联。
L3高速缓存器4005是集合关联高速缓存存储器,其中L3数据存储4606 具有被布置为S个集合和Y个路的L个字节的数据存储。例如,假定各高速缓 存器行是64字节,则L3高速缓存器4005可以具有L=8MB的数据存储并且具 有S=8192个集合和Y=16个路。选择性数据存储4652是具有M个字节的数据存 储的存储器。控制逻辑4644在逻辑上访问作为被布置成S个集合和X个路的集 合关联高速缓存存储器的选择性数据存储4652,其中X是M除以L的商与Y的 乘积。例如,假定L3高速缓存器4005具有以上的示例性值,则选择性数据存 储4652可以具有M=4MB的数据存储并且具有X=16*(4MB/8MB)=8个路。因 此,标记目录4642被布置为具有S个集合和Z个路,其中Z是X和Y的总和。如 以下针对图47的实施例所述,采用以上的示例性值,标记目录4642可以具有Z=16+8=24个路。在具有P个L3数据存储片4606的切片实施例中,各L3数据 存储片4606具有J个集合和Y个路,其中J是S除以P的商。采用以上的示例性 值(其中P=4),各L3数据存储片4606具有J=8192/4=2048个集合和Y=16个路。
在图46的实施例中,DRAM控制器4018以及由此的系统存储器通过与 NNU 121耦接至环形总线4024所经由的环站4004-N分开的环站4004-M而耦 接至环形总线4024。然而,设想了其它实施例(诸如图41的实施例等),其中 DRAM控制器4018和NNU 121通过相同的环站4004而耦接至环形总线4024。
虽然这里描述了NNU 121包括可用作牺牲高速缓存器4602的选择性数 据存储4652的实施例,但是选择性数据存储4652可以是附接至L3高速缓存器 4005并且可由该L3高速缓存器4005访问的另一种加速器的一部分。例如,设 想了如下的实施例,其中加速器是加密/解密单元、压缩/解压缩单元、多媒 体编码器/解码器单元、或者数据库索引单元。
优选地,控制逻辑4644包括标记流水线、数据流水线和队列(例如,填 充队列、监听队列、加载队列、驱逐队列和查询队列等)。控制逻辑4644执 行与L3高速缓存器4005相关联的常规功能,诸如从系统存储器将高速缓存器 行填充到L3数据存储4606中、处理针对L3数据存储4606的监听请求、将数据 从L3数据存储4606加载到核心复合体4012、从L3数据存储4606驱逐高速缓存 器行、以及生成针对低级高速缓存器的查询请求等。另外,如以下更详细所 述,增强控制逻辑4644以执行针对牺牲高速缓存器4602的类似的功能。许多 增强功能与针对图41的高速缓存器控制逻辑4108所述的功能类似。例如,控 制逻辑4644(例如,响应于加载请求而)使高速缓存器行从选择性数据存储 4652提供至核心4002;另外,控制逻辑4644将高速缓存器行从L3数据存储 4606驱逐至选择性数据存储4652、并相应地更新标记目录4642;此外,控制 逻辑4644使高速缓存器行从选择性数据存储4652写入系统存储器4618、并相 应地更新标记目录4642,以例如写回修改后的高速缓存器行;而且,控制逻辑4644处理涉及选择性数据存储4652中所保持的有效高速缓存器行的监听。
现参考图47,示出一框图,该框图示出图46的标记目录4642中的集合 4700。标记目录集合4700包括L3标记4702、牺牲高速缓存器标记4704和替换 信息4706。标记目录4642中的集合的数量与L3数据存储4606中的集合的数量 相对应,并且也与选择性数据存储4652中的逻辑集合的数量相对应。也就是 说,标记目录4642包括与L3高速缓存器4005中的各集合相对应的各个标记目 录集合4700,并且也与牺牲高速缓存器4602中的相应集合相对应。例如,在 L3高速缓存器4005被布置为2048个集合且牺牲高速缓存器4602在逻辑上也被布置为2048个集合的实施例中,标记目录4642也具有2048个集合。L3标记 4702的数量与L3高速缓存器4005中的路的数量相对应,例如,在L3高速缓存 器4005具有16个路的实施例中为16个标记。牺牲高速缓存器标记4704的数量 与牺牲高速缓存器4602中的路的数量相对应,例如,在牺牲高速缓存器4602 逻辑上具有8个路的实施例中为8个标记。优选地,各L3标记4702所用的条目 或存储不仅储存标记(即,相关地址位),而且还储存L3数据存储4606中的相 应高速缓存器行的状态(例如,MESI状态);同样地,各牺牲高速缓存器标记 4704所用的存储条目不仅储存标记,而且还储存选择性数据存储4652中的相 应高速缓存器行的状态。
控制逻辑4644读取替换信息4706以决定在需要替换L3高速缓存器4005 或牺牲高速缓存器4602的高速缓存器行的情况下要替换哪个路。例如,替换 信息4706可以是最近最少使用(LRU)的信息,该信息使得控制逻辑4644能够 跟踪集合内的LRU路。当L3数据存储4606和选择性数据存储4652的高速缓存 器行被访问时,控制逻辑4644更新替换信息4706。优选地,替换信息4706包 括用于L3数据存储4606和选择性数据存储4652的分开的替换信息。在一个实 施例中,替换信息4706被保持在与用于保持标记4702/4704的存储阵列分开的 存储阵列中。
可以发现,添加牺牲高速缓存器标记4704和附加替换信息4706以及控制 逻辑4644增强以支持牺牲高速缓存器4602,这可以有利地表示L3高速缓存器4005的大小的相对适中的增加以换取NNU 121中的相应硬件(例如,图41的高 速缓存器控制逻辑4108)的移除,并且可以降低复杂度。
现参考图48,示出一流程图,该流程图示出图46的处理器4000进行将高 速缓存器行从L3高速缓存器4005驱逐至牺牲高速缓存器4602的操作。流程始 于方框4802。
在方框4802处,L3高速缓存器4005接收用以驱逐L3数据存储4606中所保 持的高速缓存器行的请求。流程进入决策方框4804。
在决策方框4804处,控制逻辑4644检查模式4699。如果模式4699指示牺 牲高速缓存器模式,则流程进入方框4806;否则(即,模式4699指示NNU模 式),流程进入方框4808。
在方框4806处,控制逻辑4644从L3数据存储4606读取指定高速缓存器行 并将其写入选择性数据存储4652。另外,控制逻辑4644将标记目录4642更新 为指示高速缓存器行存在于选择性数据存储4652中(即存在于牺牲高速缓存 器4602中),例如更新为共享的或修改后的MESI状态。优选地,为了将高速 缓存器行写入选择性数据存储4652,控制逻辑4644产生针对其环站4004-0中 的队列(例如,填充队列)的请求,该请求转而在环形总线4024上产生针对 NNU 121的环站4004-N中的从属存储队列的从属存储事务。事务包括用于使 得NNU 121能够确定其要将高速缓存器行写入的选择性数据存储4652内的 位置的地址。在一个实施例中,从属存储事务中发送的地址是选择性数据存 储4652映射至的系统地址空间的一部分内的存储器地址,例如PCI地址空间。 在另一实施例中,事务中发送的存储器地址可以是专用地址空间,即不是系 统地址空间。例如,地址可以是选择性数据存储4652的本地地址,例如,0~ 选择性数据存储4652中所保持的高速缓存器行大小的块的数量-1。再例如, 地址可以指定选择性数据存储4652的行、以及该行内的块索引。在任一实施例中,控制逻辑4644基于L3数据存储4606中的正从中驱逐高速缓存器行的集 合以及标记目录4642中的正被更新为指示高速缓存器行存在于选择性数据 存储4652的路的索引、并且在切片实施例的情况下基于正从中驱逐高速缓存 器行的片4606的索引,来计算地址。在又一实施例中,地址是用于指定路索 引和集合索引以及在切片实施例的情况下指定片索引的元组,并且NNU 121 基于地址元组来计算选择性数据存储4652的行以及该行内的块索引。在这样 的实施例中,由于L3高速缓存器4005正利用选择性数据存储4652作为牺牲高速缓存器4602(即,处于牺牲高速缓存器模式),因此NNU 121知道L3高速缓 存器4005发送了包括地址元组的事务,并且NNU 121知道NNU 121需要基于 地址元组来计算行和块索引。在一个实施例中,事务包括指示模式的标志; 在另一实施例中,NNU 121还包括L3高速缓存器4005模式指示符4699得到更 新时被更新的模式指示符(例如,与图41的模式指示符4199类似)。在一个实 施例中,NNU 121使用(以上针对图41所述的)高速缓存器行启动来选择选择 性数据存储4652的高速缓存器行或块,以使得能够进行对选择性数据存储 4652的写入。在另一实施例中,NNU 121执行读取-修改-写入操作以将被驱 逐的高速缓存器行写入选择性数据存储4652中。流程结束于方框4806。
在方框4808处,控制逻辑4644从L3数据存储4606读取指定的高速缓存器 行并将其写入系统存储器4618。另外,控制逻辑4644将标记目录4642更新为 指示高速缓存器行不再存在于L3高速缓存器4005中,例如,更新为无效的 MESI状态。优选地,为了将高速缓存器行写入系统存储器4618,控制逻辑 4644产生针对其环站4004-0中的队列(例如,填充队列)的请求,该请求转而 在环形总线4024上产生针对DRAM控制器4018的环站4004-M中的从属存储 队列的从属存储事务。流程结束于方框4808。
现参考图49,示出一流程图,该流程图示出图46的处理器4000进行高速 缓存器行从牺牲高速缓存器4602至核心4002的加载请求的操作。流程始于方 框4902。
在方框4902处,L3高速缓存器4005接收来自核心4002的用以从指定存储 器地址加载数据的请求。流程进入方框4904。
在方框4904处,控制逻辑4644从标记目录4642读取存储器地址所涉及的 标记目录集合4700,并检查其L3标记4702和牺牲高速缓存器标记4704。流程 进入决策方框4906。
在决策方框4906处,如果控制逻辑4644根据L3标记4702确定为存储器地 址命中L3高速缓存器4005,则流程进入方框4908,;否则,流程进入决策方 框4912。
在方框4908处,控制逻辑4644从L3数据存储4606读取指定的高速缓存器 行并将其提供至核心4002。流程结束于方框4908。
在决策方框4912处,如果控制逻辑4644根据牺牲高速缓存器标记4704确 定为存储器地址命中牺牲高速缓存器4602,则流程进入方框4914,;否则,流 程进入决策方框4916。
在方框4914处,控制逻辑4644从选择性数据存储4652读取指定的高速缓 存器行并将其提供至核心4002。优选地,为了从选择性数据存储4652读取高 速缓存器行,控制逻辑4644产生针对其环站4004-0中的队列(例如,填充队列) 的请求,该请求转而在环形总线4024上产生针对NNU 121的环站4004-N中的 从属加载队列的从属加载事务。事务包括用于使得NNU121能够确定其要从 中读取高速缓存器行的选择性数据存储4652内的位置的地址。优选地,控制 逻辑4644采用与以上针对方框4806所述的实施例其中之一类似的方式生成 地址。另外,在一个实施例中,控制逻辑4644将从选择性数据存储4652读取 的高速缓存器行(高速缓存器行A)与L3数据存储4606(即L3高速缓存器4005) 中的另一高速缓存器行(高速缓存器行B)互换。互换可以是有利的,这是因 为牺牲高速缓存器4602中的高速缓存器行的命中可以是如下的指示:高速缓 存器行A可以比高速缓存器行B更早和/或更频繁地被访问、并且将高速缓存 器行A移动至L3高速缓存器4005可以减少后续访问的延迟。将从选择性数据 存储4652读取的高速缓存器行A与L3数据存储4606中所保持的高速缓存器 行B进行互换意味着:(1)将行B的标记和状态(例如,MESI状态)写入标记目 录4642中的、与行A占用的位置相对应的标记中;(2)将行A的标记和状态(例 如,MESI状态)写入标记目录4642中的、与行B先前占用的位置相对应的标 记中;(3)从L3数据存储4606读取行B;(4)从选择性数据存储4652读取行A并 将其写入L3数据存储4606;以及(5)将行B写入选择性数据存储4652。互换高 速缓存器行可以另外涉及更新标记目录集合4700中所保持的、与所涉及集合 相对应的替换信息4706(例如,LRU信息)。在备选实施例中,控制逻辑4644 不互换高速缓存器行,而是仅将从选择性数据存储4652读取的高速缓存器行 提供给核心4002。流程结束于方框4914。
在方框4916处,控制逻辑4644从系统存储器4618读取指定的高速缓存器 行并将其提供至核心4002。流程结束于方框4916。
现参考图50,示出一流程图,该流程图示出在图46的选择性数据存储 4652正从用作NNU 121的权重RAM 124/数据RAM 122时的NNU模式转换为 用作牺牲高速缓存器4602时的牺牲高速缓存器模式的情况下的图46的处理 器4000的操作。牺牲高速缓存器是用于仅保持由处理器4000的高速缓存器阶 层结构中较低的高速缓存存储器所驱逐的高速缓存器行的高速缓存存储器。 例如,L2高速缓存器4008和/或L1数据/指令高速缓存器是低级高速缓存器。 另外,在选择性数据存储4652可用作牺牲高速缓存器4602的实施例中,LLC 4005被认为是3级(L3)高速缓存器并且相对于牺牲高速缓存器4602而言被认 为是低级高速缓存器,并且L3高速缓存器4005将高速缓存器行驱逐至牺牲高 速缓存器4602。牺牲高速缓存器在地址命中牺牲高速缓存器时(例如,响应 于加载请求或监听请求)提供数据。在一个实施例中,L3高速缓存器4005包 括L2高速缓存器4008以及核心复合体4012的低级高速缓存器,并且牺牲高速 缓存器4602提供命中数据以分配至L3高速缓存器4005中,该L3高速缓存器 4005转而将数据提供给L2高速缓存器4008,该L2高速缓存器4008转而将数据 提供给更低级的高速缓存器。在另一实施例中,核心复合体4012的L3高速缓 存器4005、L2高速缓存器4008和更低级的高速缓存器不是包含性的,并且牺 牲高速缓存器提供命中数据以直接分配各级高速缓存器。有利地,当模式 4699被设置为牺牲高速缓存器模式时,图46的控制逻辑4644和选择性数据存 储4652以及标记目录4642在图50和图51的实施例中共同用作牺牲高速缓存 器4602。在一个实施例中,牺牲高速缓存器4602可以用作对被驱逐至该牺牲高速缓存器4602的修改后的高速缓存器行进行高速缓存的回写高速缓存器, 并且还可以用作不对被驱逐至该牺牲高速缓存器4602的修改后的高速缓存 器行进行高速缓存、而是将修改后的高速缓存器行转发至系统存储器4618的 直写高速缓存器。如根据图51的说明(更具体地,方框5106、5108和5112)可 以发现,直写牺牲高速缓存器4602具有快速转换为在NNU模式下使用选择性 数据存储4652作为权重RAM 124的优点,而回写牺牲高速缓存器4602可以具 有针对处理器4000的总体高速缓存效率更高的优点。优选地,牺牲高速缓存器4602可配置为回写模式或直写模式。流程始于方框5002。
在方框5002处,请求从使用选择性数据存储4652作为NNU 121的权重 RAM 124转换为使用选择性数据存储4652作为核心复合体4012所共享的牺 牲高速缓存器4602。优选地,与以上针对方框4302所述的方式类似,通过处 理器4000上运行的操作系统来控制转换。流程进入方框5004。
在方框5004处,模式4699被更新为指示牺牲高速缓存器模式以使得控制 逻辑4644使用选择性数据存储4652作为牺牲高速缓存器4602。流程进入方框 5006。
在方框5006处,L3高速缓存器4005被告知开始将驱逐请求引导至牺牲高 速缓存器4602。流程进入方框5008。
在方框5008处,牺牲高速缓存器4602开始(例如采用以上针对图48所述 的方式)对牺牲数据进行高速缓存。流程进入方框5012。
在方框5012处,L3高速缓存器4005检测标记目录4642中的命中图47的牺 牲高速缓存器标记4704的地址,并(例如,采用以上针对图49所述的方式)向 NNU 121发送针对来自选择性数据存储4652的所涉及的高速缓存器行的请 求。流程结束于方框5012。
现参考图51,示出一流程图,该流程图示出在图46的选择性数据存储 4652正从用作牺牲高速缓存器4602时的牺牲高速缓存器模式转换为用作 NNU 121的权重RAM 124/数据RAM 122时的NNU模式的情况下的图46的处 理器4000的操作。如上所述,牺牲高速缓存器4602可以正用作直写型高速缓 存器或者作为回写型高速缓存器。流程始于方框5102。
在方框5102处,请求从使用选择性数据存储4652作为牺牲高速缓存器 4602转换为使用选择性数据存储4652作为NNU 121的权重RAM 124。优选 地,该转换由处理器4000上运行的操作系统来控制。例如,处理器4000上运 行的应用程序请求操作系统使用NNU121,并且操作系统检测为选择性数据 存储4652当前正用作牺牲高速缓存器4602,因此需要从牺牲高速缓存器模式 转换为NNU模式。流程进入方框5104。
在方框5104处,L3高速缓存器4005被告知停止将驱逐引导至牺牲高速缓 存器4602。流程进入决策方框5106。
在决策方框5106处,如果牺牲高速缓存器4602正用作直写型高速缓存 器,则流程进入方框5112;否则,流程进入方框5108。
在方框5108处,控制逻辑4644对牺牲高速缓存器4602进行回写无效。也 就是说,牺牲高速缓存器4602将其所有修改后的高速缓存器行写回至系统存 储器4618,然后(通过针对所有高速缓存器行将标记目录4642中的状态更新 为无效;优选地,控制逻辑4644还对标记目录4642中的替换信息进行重设) 使其所有高速缓存器行无效。在一个实施例中,控制逻辑4644从选择性数据 存储4652读取修改后的高速缓存器行,然后将其写入系统存储器4618。可选 地,控制逻辑4644向NNU 121(例如,向CSR 127)发送命令,其中该命令指 定选择性数据存储4652内的修改后的高速缓存器行的地址、指定系统存储器 地址、并且指示NNU 121将修改后的高速缓存器行直接写入系统存储器 4618。优选地,控制逻辑4644在进行回写无效的同时继续对加载请求和监听 请求进行响应。流程进入方框5116。
在方框5112处,控制逻辑4644对选择性数据存储4652进行无效操作。也 就是说,控制逻辑4644更新标记目录4642以使选择性数据存储4652的所有高 速缓存器行无效。可以发现,如果牺牲高速缓存器4602正用作直写型高速缓 存器,则由于无需进行方框5108处的对修改后的高速缓存器行的回写(即, 仅需要进行方框5112这里的无效),因此转换为使用选择性数据存储4652作为 权重RAM 124可以有利地比牺牲高速缓存器4602正用作回写型高速缓存器 的情况更快,这在牺牲高速缓存器4602相对大的情况下可以是一种相当大的 节省。流程进入方框5116。
在方框5116处,如同针对方框4212所述的方式,模式4699被更新为指示 NNU模式,以使得控制逻辑4644不将选择性数据存储4652用作牺牲高速缓存 器,从而使得该选择性数据存储4652可以用作NPU流水线126以及核心4002 上执行的架构程序所要访问的权重RAM 124。流程进入方框5118。
在方框5118处,核心4002上执行的架构程序可以用作NPU流水线126所 要访问的权重RAM 124。流程结束于方框5118。
现参考图52,示出一框图,该框图示出NNU 121的一部分的实施例。NNU 121包括移动单元5802、移动寄存器5804、数据复用寄存器208、权重复用寄 存器705、NPU 126、复用器5806、输出单元5808、以及输出寄存器1104。数 据复用寄存器208和权重复用寄存器705与上述的相同,但是被修改为额外地 接收来自移动寄存器5804以及来自额外的相邻NPU 126的输入。在一个实施 例中,除如上所述来自J+1的输出209以外,数据复用寄存器208还在输入211 上接收来自NPU J-1和J-4的输出209;同样,除如上所述来自J+1的输出203 以外,权重复用寄存器705还在输入711上接收来自NPU J-1和J-4的输出203。 输出寄存器1104与上述被称为行缓存器1104和输出缓存器1104的缓存器相 同。输出单元5808在许多方面与上述的激活函数单元212/1112相同,相同之 处在于其可以包括激活函数(例如,S型函数、双曲正切函数、校正函数、软 加函数);然而,这些输出单元5808优选还包括用于对累加器202的值进行再 量化的再量化单元。NPU 126在许多方面与上述相同。如上所述,设想了不 同实施例,其中数据字宽度和权重字宽度可以具有各种大小(例如,8位、9 位、12位或16位),并且多个字大小可以被给定实施例支持(例如,8位和16 位)。然而,针对下图示出代表性实施例,其中保持在存储器122/124、移动 寄存器5804、复用寄存器208/705以及输出寄存器1104中的数据字宽度和权重 字宽度是8位字,即字节。
图52示出NNU 121的截面。例如,所示的NPU 126是(诸如上述等的)NPU 126的阵列的代表。代表性NPU 126指的是N个NPU 126中的NPU[J]126,其 中J在0和N-1之间。如上所述,N是较大的数,并且优选为2的幂次方。如上 所述,N可以是512、1024或2048。在一个实施例中,N是4096。由于阵列中 的大量NPU 126,因此有利的是,各NPU 126尽可能小,以将NNU121的大 小保持在期望限度内和/或容纳更多NPU 126以增加NNU 121所进行的神经 网络相关计算的加速性。
此外,尽管移动单元5802和移动寄存器5804各自的宽度为N个字节,但 是仅示出移动寄存器5804的一部分。具体地,示出移动寄存器5804中的输出 5824向NPU[J]126的复用寄存器208/705提供字节的部分,该部分表示为移动 寄存器[J]5804。此外,尽管移动单元5802的输出5822(向存储器122/124和移 动寄存器5804)提供N个字节,但是仅字节J被提供用于加载到移动寄存器[J] 5804中,该移动寄存器[J]5804随后在输出5824上将字节J提供至数据复用寄 存器208和权重复用寄存器705。
此外,尽管NNU 121包括多个输出单元5808,但图52中仅示出单个输出 单元5808,即对NPU组内的NPU[J]126以及多个NPU 126(诸如以上针对图11 所述的NPU 126等)的累加器输出217执行运算的输出单元5808。输出单元 5808被称为输出单元[J/4],这是因为,在图52的实施例中,各输出单元5808 由四个一组的NPU 126所共享。同样,尽管NNU 121包括多个复用器5806, 但图52中仅示出单个复用器5806,即接收其NPU组内的NPU[J]126以及多个 NPU 126的累加器输出217的复用器5806。同样,复用器5806指的是复用器 [J/4],这是因为该复用器5806在四个累加器202输出217中选择其一以提供至 输出单元[J/4]5808。
最后,尽管输出寄存器1104的宽度为N个字节,但在图52中仅示出单个4 字节段(表示为输出寄存器[J/4]1104),其中该4字节段从包括NPU[J]126的 NPU组的四个NPU 126接收由输出单元[J/4]5808所产生的四个量化字节。输 出寄存器1104的输出133中的所有N个字节被提供至移动单元5802,但是在图 52中仅示出输出寄存器[J/4]1104的四字节段中的四个字节。此外,输出寄存 器[J/4]1104的四字节段中的四个字节被作为输入提供至复用寄存器 208/705。
尽管在图52中复用寄存器208/705被示出为与NPU 126不同,但存在与各 NPU 126相关联的一对相应的复用寄存器208/705,并且如以上针对图2和图7 所述,这些复用寄存器208/705可被认为是NPU 126的一部分。
移动单元5802的输出5822被耦接至移动寄存器5804、数据RAM 122和权 重RAM124,其各自可以被输出5822写入。移动单元5802的输出5822、移动 寄存器5804、数据RAM122和权重RAM 124的宽度都是N个字节(例如,N是 4906)。移动单元5802从如下的五个不同源接收N个量化字节并且选择其中之 一作为其输入:数据RAM 122、权重RAM 124、移动寄存器5804、输出寄存 器1104以及即时值。优选地,移动单元5802包括互连以能够对其输入执行运 算从而产生其输出5822的多个复用器,现将对这些运算进行说明。
移动单元5802对其输入执行的运算包括:使输入通过至输出;使输入轮 转指定量;以及提取并且压紧输入的指定字节。在从程序存储器129拾取的 MOVE指令中指定运算。在一个实施例中,可指定的轮转量为8、16、32和 64字节。在一个实施例中,轮转方向向左,但是也设想了轮转方向向右或任 意方向的其它实施例。在一个实施例中,提取和压紧运算是在预定大小的输 入块内执行的。块大小由MOVE指令所指定。在一个实施例中,预定块大小 为16、32和64字节,并且这些块位于指定块大小的对齐边界上。因此,例如, 当MOVE指令指定块大小为32时,移动单元5802提取输入的N个字节的各32 字节块(例如,如果N为4096,则存在128个块)内的指定字节,并且将其压紧 在相应的32字节块内(优选在块的一端)。在一个实施例中,NNU 121还包括 与移动寄存器5804相关联的N位掩码寄存器(未示出)。指定加载掩码寄存器 操作的MOVE指令可以指定数据RAM 122或权重RAM 124的行作为其源。响应于MOVE指令指定加载掩码寄存器的操作,移动单元5802从RAM的行的N 个字中的各字中提取位0,并将N个位储存到N位掩码寄存器的相应位中。在 执行用于写入移动寄存器5804的后续MOVE指令期间,位掩码中的位用作移 动寄存器5804的相应字节的写入启用/禁用。在备选实施例中,64位掩码由 INITIALIZE指令指定,该指令用于在执行用以指定提取和压紧功能的MOVE 指令之前加载到掩码寄存器中;响应于MOVE指令,移动单元5802提取由储存在掩码寄存器中的64位掩码所指定的(例如,128个块中的)每个块内的字 节。在备选实施例中,用于指定提取和压紧运算的MOVE指令还指定步幅和 偏移;响应于MOVE指令,移动单元5802从由偏移指定的字节开始在各块内 每N个字节进行一次提取,其中N是步幅,并且将所提取的字节压缩在一起。 例如,如果MOVE指令指定步幅为3且偏移为2,则移动单元5802在每个块内 从字节2开始每三个字节进行一次提取。
现参考图53,示出一框图,该框图更详细地示出图46的环站4004-N。环 站4004-N包括从属接口6301、被称为主接口0的第一主接口6302-0、以及被 称为主接口1的第二主接口6302-1。主接口0 6302-0和主接口1 6302-1一般地 被个别地称为主接口6302或者共同称为(多个)主接口6302。环站4004-N还包 括耦接至在环形总线4024的第一单向环4024-0上分别提供传出请求(REQ)、 数据(DATA)和确认(ACK)的各缓存器6352、6354和6356的三个仲裁器6362、 6364和6366;这三个仲裁器6362、6364和6366在第一单向环4024-0上分别接收传入请求(REQ)、数据(DATA)和确认(ACK)。环站4004-N包括耦接至在环 形总线4024的第二单向环4024-1上分别提供传出请求(REQ)、数据(DATA)和 确认(ACK)的各附加缓存器6332、6334和6336的三个附加仲裁器6342、6344 和6346;这三个仲裁器6342、6344和6346在第二单向环4024-1上分别接收传 入请求(REQ)、数据(DATA)和确认(ACK)。以上描述了环形总线4024的各单 向环的请求子环、数据子环和确认子环。监听子环和信用子环未示出,但是 从属接口6301和主接口6302也耦接至监听子环和信用子环。
从属接口6301包括加载队列6312和储存队列6314;主接口0 6302-0包括 加载队列6322和储存队列6324;以及主接口1 6302-1包括加载队列6332和储 存队列6334。从属接口6301的加载队列6312接收来自环形总线4024的单向环 4024-0和4024-1两者的请求并对这些请求进行排队,并且向环形总线4024的 相应仲裁器6364和6344中的各仲裁器提供队列化的数据。从属接口6301的储 存队列6314接收来自环形总线4024的两个方向的数据并对这些数据进行排 队,并且向环形总线4024的相应仲裁器6366和6346中的各仲裁器提供确认。 主接口0 6302-0的加载队列6322接收来自第二单向环4024-1的数据,并向第 一单向环4024-0的仲裁器6362提供队列化的请求。主接口0 6302-0的储存队 列6324接收来自第二单向环4024-1的确认,并向第一单向环4024-0的仲裁器 6364提供队列化的数据。主接口1 6302-1加载队列6332接收来自第一单向环 4024-0的数据,并向第二单向环4024-1的仲裁器6342提供队列化的请求。主 接口1 6302-1的储存队列6334接收来自第一单向环4024-0的确认,并向第二 单向环4024-1的仲裁器6344提供队列化的数据。从属接口6301的加载队列 6312将队列化的请求提供至NNU 121,并接收来自NNU 121的数据。从属接 口6301的储存队列6314将队列化的请求和数据提供至NNU 121,并接收来自 NNU 121的确认。第一主接口0 6302-0的加载队列6322接收来自NNU 121的 请求并对这些请求进行排队,并且向NNU 121提供数据。第一主接口0 6302-0 的储存队列6324接收来自NNU 121的请求和数据并对这些请求和数据进行 排队,并且向NNU 121提供确认。第二主接口1 6302-1的加载队列6332接收 来自NNU 121的请求并对这些请求进行排队,并且向NNU 121提供数据。第二主接口1 6302-2的储存队列6334接收来自NNU 121的请求和数据并对这些 请求和数据进行排队,并且向NNU 121提供确认。
通常,从属接口6301接收核心4002所作出的从NNU 121加载数据的请求 (由加载队列6312接收)并且接收核心4002所作出的将数据储存至NNU 121的 请求(由储存队列6314接收),但是从属接口6301还可以从诸如L3高速缓存器 4005等的其它环形总线4024代理接收这样的请求,其中该L3高速缓存器4005 在如上所述在用作牺牲高速缓存器4602时相对于选择性数据存储4652(例 如,权重RAM 124或数据RAM 122)读取/写入高速缓存器行。例如,经由从 属接口6301,核心4002可以:相对于控制/状态寄存器127写入控制数据并且 读取状态数据;将指令写入程序存储器129;相对于数据RAM 122和权重 RAM 124写入/读取数据/权重;以及将控制字写入总线控制器存储器6636以 对NNU 121的DMA控制器6602(见图56)进行编程。更具体地,在NNU 121位 于环形总线4024上而非作为核心4002的执行单元的实施例中,核心4002可以 对控制/状态寄存器127进行写入以指示NNU 121执行与针对图14的MTNN指 令1400所述的类似的操作,并且可以从控制/状态寄存器127进行读取以指示 NNU 121执行与针对图15的MFNN指令1500所述的类似的操作。操作的列表 包括但不限于:开始程序存储器129中的程序的执行、暂停程序存储器129中 的程序的执行、对程序存储器129中的程序的执行完成的请求通知(例如,中 断)、对NNU 121进行重设、写入DMA基址寄存器、以及写入选通(strobe)地 址以使得相对于数据/权重RAM 122/124写入或读取行缓存器。此外,从属接 口6301可以在NNU 121的请求下向每个核心4002产生中断(例如,PCI中断)。 优选地,定序器128指示从属接口6301例如响应于对从程序存储器129拾取的指令进行解码而产生中断。可选地,DMAC 6602可指示从属接口6301例如响 应于完成DMA操作(例如,在将作为神经网络层计算结果的数据字从数据RAM 122写入系统存储器之后)而产生中断。在一个实施例中,中断包括向 量,诸如8位x86中断向量等。优选地,由DMAC 6602从总线控制存储器6636 读取的控制字中的标志指定DMAC 6602是否指示从属接口6301在DMA操作 完成时产生中断。
通常,NNU 121经由主接口6302产生将数据写入系统存储器的请求(由储 存队列6324/6334接收),并且经由主接口6302产生(例如,经由DRAM控制器 4018)从系统存储器读取数据的请求(由加载队列6322/6332接收),但主接口 6302还可以接收来自NNU 121的相对于其它环形总线4024代理读取/写入数 据的请求。例如,经由主接口6302,NNU 121可以将数据/权重从系统存储器 传输到数据RAM 122和权重RAM 124,并且可以将数据从数据RAM 122和权 重RAM 124传输到系统存储器。NNU 121还可以经由主存储队列6324/6334 而生成将高速缓存器行写入系统存储器4618(例如,针对图51中的各块5108 写回修改后的高速存储器行)的请求。
优选地,经由环形总线4024可访问的NNU 121的各种实体(诸如数据 RAM 122、权重RAM 124、程序存储器129、总线控制存储器6636和控制/状 态寄存器127等)被存储器映射到系统存储器空间内。在一个实施例中,可访 问的NNU 121实体经由周知的外围组件互连(PCI)配置协议的PCI配置寄存器 来进行存储器映射。
具有针对环站4004-N的两个主接口6302的优点在于,其使得NNU 121能 够相对于系统存储器(经由DRAM控制器4018)和各种L3片4006两者同时进行 发送和/或接收,或者备选地能够以具有单个主接口的实施例的两倍带宽相对 于系统存储器并行地进行发送和/或接收。
在一个实施例中,数据RAM 122是64KB,其被布置为每行4KB的16行, 因此需要4个位来指定其行地址;权重RAM 124为8MB,其被布置为每行4KB 的2K行,因此需要11个位来指定其行地址;程序存储器129为8KB,其被布 置为每行64位的1K行,因此需要10个位来指定其行地址;总线控制存储器6636是1KB,其被布置为每行64位的128行,因此需要7个位来指定其行地址; 队列6312/6314/6322/6324/6332/6334中的各队列包括16个条目,因此需要4个 位来指定条目的索引。另外,环形总线4024的单向环4024的数据子环的宽度 为64字节。因此,64字节的部分在本文中被称为块、数据块、数据的块等(“数 据”一般可用于指代数据和权重这两者)。因此,数据RAM 122或权重RAM 124的行尽管根据一个实施例在块水平上不可寻址,但各自被细分为64个块; 此外,(图56的)数据/权重写入缓存器6612/6622和(图56的)数据/权重读取缓存 器6614/6624各自也被细分为各自具有64字节的64个块,并且在块水平上可寻 址;因此,需要6个位来指定行/缓存器内的块的地址。以下描述为了便于说 明而假定这些大小;然而,设想了各种大小不同的其它实施例。
现参考图54,示出一框图,该框图更详细地示出图53的从属接口6301。 从属接口6301包括耦接至图53的环形总线4024的加载队列6312、储存队列 6314、仲裁器6342、6344、6346、6362、6364和6366、以及缓存器6332、6334、 6336、6352、6354和6356。图54还包括产生对仲裁器6362的请求的其它请求 器6472(例如,主接口0 6302-0)以及产生对仲裁器6342的请求的其它请求器 6474(例如,主接口1 6302-1)。
从属加载队列6312包括耦接至请求仲裁器6416和数据仲裁器6414的条 目6412的队列。在所示的实施例中,队列包括16个条目6412。每个条目6412 包括用于地址、源标识符、方向、事务标识符以及与请求相关联的数据块的 存储。地址指定NNU 121内的加载所请求的数据以返回到请求方环形总线 4024代理(例如,核心4002)的位置。地址可以指定控制/状态寄存器127、或 数据RAM 122或权重RAM 124内的块位置。在地址指定数据RAM 122/权重 RAM 124内的块位置的情况下,在一个实施例中,高位指定数据RAM 122/ 权重RAM124的行,而低位(例如,6个位)指定所指定的行内的块。优选地, 低位用于控制数据/权重读取缓存复用器6615/6625(见图56)以选择数据/权重 读取缓存器6614/6624内的适当块(见图56)。源标识符指定请求方环形总线4024代理。方向指定要在两个单向环4024-0或4024-1中的哪一个单向环上将 数据发送回至请求方代理。事务标识符由请求方代理指定,并由环站4004-N 连同所请求的数据一起返回给请求方代理。
每个条目6412也具有相关联的状态。有限状态机(FSM)更新状态。在一 个实施例中,FSM按照如下进行操作。当加载队列6312检测到环形总线4024 上以其为目的地的加载请求时,该加载队列6312分配可用条目6412并填充所 分配的条目6412,并且FSM将所分配的条目6412的状态更新为请求方NNU。 请求仲裁器6416在请求方NUU条目6412之间进行仲裁。当所分配的条目6412 赢得仲裁并作为请求发送至NNU 121时,FSM将条目6412标记为待处理NNU 数据。当NNU 121利用该请求的数据进行响应时,加载队列6312将数据加载 到条目6412中并将条目6412标记为请求方数据环。数据仲裁器6414在请求方 数据环条目6412之间进行仲裁。当条目6412赢得仲裁并且数据在环形总线 4024上被发送至请求数据的环形总线4024代理时,FSM将条目6412标记为可 用并且在其信用环上发出信用。
从属储存队列6314包括耦接至请求仲裁器6426和确认仲裁器6424的条 目6422的队列。在所示的实施例中,队列包括16个条目6422。每个条目6422 包括用于地址、源标识符、以及与请求相关联的数据的存储。地址指定NNU 121内的由请求方环形总线4024代理(例如,核心4002)提供的数据要储存至的 位置。地址可以指定控制/状态寄存器127、数据RAM 122或权重RAM 124内 的块位置、程序存储器129内的位置、或者总线控制存储器6636内的位置。 在地址指定数据RAM 122/权重RAM 124内的块位置的情况下,在一个实施 例中,高位指定数据RAM 122/权重RAM 124的行,而低位(例如,6个位)指 定所指定的行内的块。优选地,低位用于控制数据/权重解复用器6611/6621 以选择数据/权重写入缓存器6612/6622内的适当块进行写入(见图56)。源标识 符指定请求方环形总线4024代理。
每个条目6422也具有相关联的状态。有限状态机(FSM)更新状态。在一 个实施例中,FSM按照如下进行操作。当储存队列6314检测到环形总线4024 上以其为目的地的储存请求时,该储存队列6314分配可用条目6422并填充所 分配的条目6422,并且FSM将所分配的条目6422的状态更新为请求方NNU。 请求仲裁器6426在请求方NUU条目6422之间进行仲裁。当条目6422赢得仲裁 并与条目6422的数据一起被发送至NNU 121时,FSM将条目6422标记为待处 理NNU确认。当NNU 121利用确认进行响应时,储存FSM将条目6422标记为 请求方确认环。确认仲裁器6424在请求方确认环条目6422之间进行仲裁。当 条目6422赢得仲裁并且在确认环上将确认被发送至请求储存数据的环形总 线4024代理时,FSM将条目6422标记为可用并且在其信用环上发出信用。储 存队列6314还从NNU 121接收wr_busy信号,其中该wr_busy信号指示储存队 列6314不从NNU 121进行请求,直到wr_busy信号不再有效为止。
现参考图55,示出一框图,该框图更详细地示出图53的主接口0 6302-0。 尽管图55示出主接口0 6302-0,但该主接口0 6302-0还代表了图53的主接口1 6302-1的细节,因此将被一般地称为主接口6302。主接口6302包括耦接至图 53的环形总线4024的加载队列6322、储存队列6324、仲裁器6362、6364和 6366、以及缓存器6352、6354和6356。图55还示出产生针对仲裁器6366的确 认请求的其它确认请求器6576(例如,从属接口6301)。
主接口6302还包括仲裁器6534(图53中未示出),其中该仲裁器6534从加 载队列6322以及从其它请求器6572(例如,NNU 121和DRAM控制器4018共 享环站4004-N的实施例中的DRAM控制器4018)接收请求,并将赢得仲裁请 求呈现给图53的仲裁器6362。主接口6302还包括缓存器6544,其中该缓存器 6544从环形总线4024接收与加载队列6312的条目6512相关联的数据,并将其 提供给NNU 121。主接口6302还包括仲裁器6554(图53中未示出),其中该仲 裁器6554从储存队列6324以及从其它请求器6574(例如,NNU 121和DRAM 控制器4018共享环站4004-N的实施例中的DRAM控制器4018)接收数据,并 将赢得仲裁数据呈现给图53的仲裁器6364。主接口6302还包括缓存器6564, 其中该缓存器6564从环形总线4024接收与储存队列6314的条目6522相关联 的确认,并将其提供给NNU 121。
加载队列6322包括耦接至仲裁器6514的条目6512的队列。在所示的实施 例中,队列包括16个条目6512。每个条目6512包括用于地址和目的地标识符 的存储。地址指定环形总线4024地址空间中(例如,系统存储器位置)的地址 (在一个实施例中为46位)。目的地标识符指定将从中加载数据的环形总线 4024代理(例如,系统存储器)。
加载队列6322从NNU 121(例如,从DMAC 6602)接收主加载请求,以将 来自环形总线4024代理(例如,系统存储器)的数据加载到数据RAM 122或权 重RAM 124中。主加载请求指定目的地标识符、环形总线地址以及要使用的 加载队列6322条目6512的索引。当加载队列6322从NNU 121接收到主加载请 求时,加载队列6322填充索引后的条目6512,并且FSM将条目6512状态更新 为请求方信用。当加载队列6322从信用环获得信用以向目的地环形总线4024 代理(例如,系统存储器)发送对数据的请求时,FSM将状态更新为请求方请 求环。仲裁器6514在请求方请求环条目6512之间进行仲裁(并且仲裁器6534 在加载队列6322和其它请求器6572之间进行仲裁)。当条目6512被授予请求 环时,在请求环上向目的地环形总线4024代理(例如,系统存储器)发送请求, 并且FSM将状态更新为待处理数据环。当环形总线4024利用(例如来自系统 存储器的)数据进行响应时,该数据被接收在缓存器6544中。并被提供给NNU 121(例如,提供给数据RAM 122、权重RAM 124、程序存储器129或总线控 制存储器6636),并且FSM将条目6512状态更新为可用。优选地,条目6512 的索引被包括在数据包内,以使得加载队列6322能够确定与数据包相关联的 条目6512。优选地,加载队列6322将条目6512索引连同数据一起提供给NNU 121,以使得NNU 121能够确定数据与哪个条目6512相关联并且使得NNU 121能够重新使用条目6512。
主储存队列6324包括耦接至仲裁器6524的条目6522的队列。在所示的实 施例中,队列包括16个条目6522。每个条目6522包括用于地址、目的地标识 符、用于保持要储存的数据所用的数据字段以及相干标志的存储。地址指定 环形总线4024地址空间(例如,系统存储器位置)中的地址。目的地标识符指 定数据将被储存至其中的环形总线4024代理(例如,系统存储器)。相干标志 与数据一起被发送至目的地代理。如果设置了相干标志,则该相干标志指示 DRAM控制器4018监听L3高速缓存器4005和牺牲高速缓存器4602并且使副本(如果其存在的话)无效。否则,DRAM控制器4018在不监听L3高速缓存器 4005和牺牲高速缓存器4602的情况下将数据写入系统存储器。
储存队列6324从NNU 121(例如,从DMAC 6602)接收主储存请求,以将 数据从数据RAM 122或权重RAM 124储存至环形总线4024代理(例如,系统 存储器)。主储存请求指定目的地标识符、环形总线地址、要使用的储存队 列6324条目6522的索引、以及要储存的数据。当储存队列6324从NNU 121接 收到主储存请求时,该储存队列6324填充所分配的条目6522,并且FSM将条 目6522状态更新为请求方信用。当储存队列6324从信用环获得信用以向目的 地环形总线4024代理(例如,系统存储器)发送数据时,FSM将状态更新为请 求方数据环。仲裁器6524在请求方数据环条目6522之间进行仲裁(并且仲裁 器6554在储存队列6324和其它请求器6574之间进行仲裁)。当条目6522被授 予数据环时,在数据环上向目的地环形总线4024代理(例如,系统存储器)发 送数据,并且FSM将状态更新为待处理确认环。当环形总线4024利用对数据 的(例如,来自系统存储器的)确认进行响应时,在缓存器6564中接收到该确 认。然后,储存队列6324向NNU 121提供确认,以向该NNU 121通知已经执 行了储存,并且FSM将条目6522状态更新为可用。优选地,储存队列6324不 必仲裁以向NNU121提供确认(例如,如图56的实施例中那样,对于每个储存 队列6324存在DMAC 6602)。然而,在储存队列6324必须仲裁以提供确认的 实施例中,当环形总线4024利用确认进行响应时,FSM将条目6522状态更新 为请求方NNU完成,并且一旦条目6522赢得仲裁并且提供对NNU 121的确 认,FSM就将条目6522状态更新为可用。优选地,条目6522的索引被包括在 从环形总线4024接收到的确认包内,这使得储存队列6324能够确定与确认包 相关联的条目6522。储存队列6324将条目6522索引连同确认一起提供给NNU 121,以使得NNU 121能够确定数据与哪个条目6512相关联并且使得NNU 121能够重新使用条目6522。
现参考图56,示出一框图,该框图示出图53的环站4004-N以及NNU 121 的环形总线耦接实施例的一部分。示出环站4004-N的从属接口6301、主接口 0 6302-0和主接口16302-1。图56的NNU 121的环形总线耦接实施例包括上文 中详细描述的数据RAM 122、权重RAM 124、程序存储器129、定序器128、 控制/状态寄存器127的实施例。NNU 121的环形总线耦接实施例在许多方面 与上述的执行单元实施例类似,并且为了简洁起见,这些方面将不被重新描 述。NNU 121的环形总线耦接实施例还包括图52中所述的元件,例如,移动 单元5802、移动寄存器5804、复用寄存器208/705、NPU 126、复用器5806, 输出单元5808、以及输出寄存器1104。NNU 121还包括第一直接存储器访问 控制器(DMAC0)6602-0、第二直接存储器访问控制器(DMAC1)6602-1、总 线控制存储器6636、数据解复用器6611、数据写入缓存器6612、数据RAM复 用器6613、数据读取缓存器6614、数据读取缓存复用器6615、权重解复用器 6621、权重写入缓存器6622、权重RAM复用器6623、权重读取缓存器6624、 权重读取缓存复用器6625、从属复用器6691、主0复用器6693、以及主1复用 器6692。在一个实施例中,数据解复用器6611、数据写入缓存器6612、数据 读取缓存器6614、数据读取缓存复用器6615、权重解复用器6621、权重写入 缓存器6622、权重读取缓存器6624和权重读取缓存复用器6625中的三个各自 分别与环形总线4024的从属接口6301、主接口0 6302-0和主接口16302-1相关 联。在一个实施例中,以数据解复用器6611、数据写入缓存器6612、数据读 取缓存器6614、数据读取缓存复用器6615、权重解复用器6621、权重写入缓 存器6622、权重读取缓存器6624和权重读取缓存复用器6625中的三个为一 对,这三个各自分别与环形总线4024的从属接口6301、主接口0 6302-0和主 接口1 6302-1相关联,从而支持双重缓存方式的数据传输。
数据解复用器6611分别被耦接以接收来自从属接口6301、主接口0 6302-0和主接口1 6302-1的数据块。数据解复用器6611还分别耦接至数据写 入缓存器6612,数据写入缓存器6612耦接至数据RAM复用器6613,数据RAM 复用器6613耦接至数据RAM 122,数据RAM122耦接至数据读取缓存器 6614,数据读取缓存器6614分别耦接至数据读取缓存复用器6615,数据读取 缓存复用器6615耦接至从属复用器6691、主0复用器6693和主1复用器6692。 从属复用器6691耦接至从属接口6301,主0复用器6693耦接至主接口0 6302-0,并且主1复用器6692耦接至主接口1 6302-1。权重解复用器6621分别 被耦接以接收来自从属接口6301、主接口0 6302-0和主接口1 6302-1的数据 块。权重解复用器6621还分别耦接至权重写入缓存器6622,权重写入缓存器 6622耦接至权重RAM复用器6623,权重RAM复用器6623耦接至权重RAM 124,权重RAM 124耦接至权重读取缓存器6624,权重读取缓存器6624分别耦接至权重读取缓存复用器6625,权重读取缓存复用器6625耦接至从属复用 器6691、主0复用器6693和主1复用器6692。数据RAM复用器6613和权重RAM 复用器6623还耦接至输出寄存器1104和移动寄存器5804。数据RAM 122和权 重RAM 124还分别耦接至NPU 126的移动单元5802和数据复用寄存器208以 及权重复用器寄存器705。控制/状态寄存器127耦接至从属接口6301。总线控 制存储器6636耦接至从属接口6301、定序器128、DMAC0 6602-0和DMAC1 6602-1。程序存储器129耦接至从属接口6301和定序器128。定序器128耦接 至程序存储器129、总线控制存储器6636、NPU 126、移动单元5802和输出单 元5808。DMAC0 6602-0还耦接至主接口0 6302-0,并且DMAC1 6602-1还耦 接至主接口1 6302-1。
数据写入缓存器6612、数据读取缓存器6614、权重写入缓存器6622和权 重读取缓存器6624是数据RAM 122和权重RAM 124的宽度,即NPU 126阵列 的宽度,这里通常被称为N。因此,例如,在一个实施例中,存在4096个NPU 126,并且数据写入缓存器6612、数据读取缓存器6614、权重写入缓存器6622 和权重读取缓存器6624的宽度为4096字节,但是设想了N是除4096以外的值 的其它实施例。数据RAM 122和权重RAM 124一次被写入整个N字行。输出 寄存器1104、移动寄存器5804和数据写入缓存器6612经由数据RAM复用器 6613写入数据RAM 122,其中该数据RAM复用器6613选择其中之一以将一 行字写入数据RAM 122。输出寄存器1104、移动寄存器5804和权重写入缓存 器6622经由权重RAM复用器6623写入权重RAM 124,其中该权重RAM复用 器6623选择其中之一以向权重RAM 124写入一行字。控制逻辑(未示出)控制 数据RAM复用器6613在数据写入缓存器6612、移动寄存器5804和输出寄存器 1104之间进行仲裁以访问数据RAM 122,并且控制权重RAM复用器6623在权 重写入缓存器6622、移动寄存器5804和输出寄存器1104之间进行仲裁以访问 权重RAM 124。数据RAM122和权重RAM 124还一次读取整个N字行。NPU 126、移动单元5802和数据读取缓存器6614从数据RAM 122读取一行字。NPU 126、移动单元5802和权重读取缓存器6624从权重RAM 124读取一行字。控 制逻辑还控制NPU126(数据复用器寄存器208和权重复用器寄存器705)、移动单元5802和数据读取缓存器6614以确定它们中的哪一个(如果有的话)读取 由数据RAM122输出的一行字。在一个实施例中,针对图34或图57所述的微 操作3418可以包括控制数据RAM复用器6613、权重RAM复用器662、NPU 126、移动单元5802、移动寄存器5804、输出寄存器1104、数据读取缓存器 6614和权重读取缓存器6624的控制逻辑信号中的至少一些。
数据写入缓存器6612、数据读取缓存器6614、权重写入缓存器6622和权 重读取缓存器6624可在块大小对齐的块中寻址。优选地,数据写入缓存器 6612、数据读取缓存器6614、权重写入缓存器6622和权重读取缓存器6624的 块大小与环形总线4024数据子环的宽度相匹配。这使得环形总线4024适于对 数据/权重RAM 122/124进行如下的读取/写入。通常,环形总线4024对数据 写入缓存器6612的每个块执行块大小的写入,并且一旦数据写入缓存器6612 的所有块都被填充,数据写入缓存器6612就将其N字内容写入数据RAM 122的整行。同样,环形总线4024对权重写入缓存器6622的每个块执行块大小的 写入,并且一旦权重写入缓存器6622的所有块都被填充,权重写入缓存器 6622就将其N字内容写入权重RAM 124的整行。相反,从数据RAM 122将N 字行读取至数据读取缓存器6614中;然后环形总线4024从数据读取缓存器 6614的每个块执行块大小的读取。同样,从权重RAM 124将N字行读取至权 重读取缓存器6624中;然后环形总线4024从权重读取缓存器6624的每个块执 行块大小的读取。尽管数据RAM 122和权重RAM 124在图56中表现为双端口 存储器,但它们优选为单端口存储器,使得单个数据RAM 122端口被数据 RAM复用器6613和数据读取缓存器6614所共享,并且单个权重RAM 124端 口被权重RAM复用器6623和权重读取缓存器6624所共享。因此,整行读取/ 写入布置的优点在于,其通过具有单个端口使得数据RAM 122和权重RAM 124更小(在一个实施例中,权重RAM 124为8MB并且数据RAM 122为64KB), 而环形总线4024相对于数据RAM 122和权重RAM 124的写入和读取消耗的 带宽比写入单独块时消耗的带宽更少,因此为NPU 126、输出寄存器1104、 移动寄存器5804和移动单元5802解放出更多的带宽,以进行N个字宽的行的 访问。然而,设想了其它实施例,其中权重RAM 124和数据RAM 122的各个 块可被写入/读取,以例如有助于它们用作牺牲高速缓存器4602的选择性数据 存储4652,在该时间内,NPU 126、输出寄存器1104、移动寄存器5804和移 动单元5802没有正在访问选择性数据存储4652。
控制/状态寄存器127被提供至从属接口6301。从属复用器6691接收与从 属接口6301相关联的数据读取缓存复用器6615的输出、以及与从属接口6301 相关联的权重读取缓存复用器6625的输出,并选择其中之一以提供给从属接 口6301。以这种方式,从属加载队列6312接收用于对由从属接口6301对控制 /状态寄存器127、数据RAM 122或权重RAM124作出的加载请求进行响应的 数据。主0复用器6693接收与主接口0 6302-0相关联的数据读取缓存复用器 6615的输出、以及与主接口0 6302-0相关联的权重读取缓存复用器6625的输 出,并选择其中之一以提供给主接口0 6302-0。以这种方式,主接口0 6302-0 接收用于对由主接口0 6302-0储存队列6324作出的储存请求进行响应的数 据。主1复用器6692接收与主接口1 6302-1相关联的数据读取缓存复用器6615 的输出、以及与主接口16302-1相关联的权重读取缓存复用器6625的输出, 并选择其中之一以提供给主接口16302-1。以这种方式,主接口1 6302-1接收 用于对由主接口1 6302-1储存队列6324作出的储存请求进行响应的数据。如 果从属接口6301加载队列6312请求从数据RAM122进行读取,则从属复用器 6691选择与从属接口6301相关联的数据读取缓存复用器6615的输出;而如果 从属接口6301加载队列6312请求从权重RAM 124进行读取,则从属复用器 6691选择与从属接口6301相关联的权重读取缓存复用器6625的输出。同样, 如果主接口0 6302-0储存队列请求从数据RAM 122读取数据,则主0复用器 6693选择与主接口0 6302-0相关联的数据读取缓存复用器6615的输出;而如 果主接口0 6302-0储存队列请求从权重RAM 124读取数据,则主0复用器6693 选择与主接口0 6302-0相关联的权重读取缓存复用器6625的输出。最后,如 果主接口1 6302-1储存队列请求从数据RAM 122读取数据,则主1复用器6692选择与主接口1 6302-1相关联的数据读取缓存复用器6615的输出;而如果主 接口1 6302-1储存队列请求从权重RAM 124读取数据,则主1复用器6692选择 与主接口1 6302-1相关联的权重读取缓存复用器6625的输出。因此,环形总 线4024代理(例如,核心4002)可以经由从属接口6301加载队列6312从控制/ 状态寄存器127、数据RAM 122或权重RAM 124进行读取。此外,环形总线 4024代理(例如,核心4002)可以经由从属接口6301储存队列6314向控制/状态 寄存器127、数据RAM 122、权重RAM 124、程序存储器129或总线控制存储 器6636进行写入。更具体地,核心4002可以将程序(例如,执行完全连接、 卷积、池化、LSTM或其它循环神经网络层计算的程序)写入程序存储器129, 然后写入控制/状态寄存器127以开始程序。此外,核心4002可以将控制字写 入总线控制存储器6636,以使DMAC 6602在数据RAM122或权重RAM 124 与环形总线4024代理(例如,系统存储器或L3高速缓存器4005)之间执行DMA 操作。定序器128还可以将控制字写入总线控制存储器6636,以使DMAC 6602 在数据RAM 122或权重RAM 124与环形总线4024代理之间执行DMA操作。 最后,如以下更详细所述,DMAC 6602可以执行DMA操作以执行环形总线 4024代理(例如,系统存储器或L3高速缓存器4005)与数据/权重RAM 122/124 之间的传输。
从属接口6301、主接口0 6302-0和主接口1 6302-1彼此耦接以向其各自的 数据解复用器6611和权重解复用器6621提供数据块。仲裁逻辑(未示出)在输 出寄存器1104、移动寄存器5804和从属接口6301、主接口0 6302-0和主接口1 6302-1、数据写入缓存器6612之间为了对数据RAM 122的访问而进行仲裁, 并且在输出寄存器1104、移动寄存器5804和从属接口6301、主接口0 6302-0 和主接口1 6302-1、权重写入缓存器6622之间为了对权重RAM 124的访问而 进行仲裁。在一个实施例中,写入缓存器6612/6622优先于输出寄存器1104 和移动寄存器5804,并且从属接口6301优先于主接口6302。在一个实施例中, 每个数据解复用器6611具有耦接至各自的数据写入缓存器6612的64个块的 64个输出(每个输出优选为64字节)。数据解复用器6611在耦接至数据写入缓 存器6612的适当块的输出上提供所接收到的块。同样,每个权重解复用器 6611具有耦接至各自的权重写入缓存器6622的64个块的64个输出(每个输出 优选为64字节)。权重解复用器6621在耦接至权重写入缓存器6622的适当块 的输出上提供所接收到的块。
当从属储存队列6314向其数据/权重解复用器6611/6621提供数据块时, 该从属储存队列6314还向数据/权重解复用器6611/6621提供要进行写入的数 据/权重写入缓存器6612/6622的适当块的地址作为控制输入。块地址是保持 在条目6422中的地址的低六位,其由生成从属存储事务的环形总线4024代理(例如核心4002或控制逻辑4644)指定。相反,当加载储存队列6312从其数据/ 权重读取缓存复用器6615/6625请求数据块时,该加载储存队列6312还向数据 /权重读取缓存复用器6615/6625提供要读取的数据/权重读取缓存器 6614/6624的适当块的地址作为控制输入。块地址是保持于条目6412中的地址 的低六位,其中该条目6412由产生从属加载事务的环形总线4024代理(例如, 核心4002或控制逻辑4644)指定。优选地,核心4002可以经由(例如,到预定 环形总线4024地址的)从属接口6301来执行从属储存事务,以使NNU 121将数 据/权重写入缓存器6612/6622的内容写入数据/重量RAM 122/124;相反,核 心4002可以经由(例如,到预定环形总线4024地址的)从属接口6301来执行从 属储存事务,以使NNU 121将数据/权重RAM 122/124的行读取到数据/权重读 取缓存器6614/6624中。
当主接口6302加载队列6322/6332向其数据/权重解复用器6611/6621提 供数据块时,该主接口6302加载队列6322/6332还将条目6512的索引提供至向 加载队列6322/6332发出加载请求的相应DMAC 6602。为了将整个4KB的数 据从系统存储器传输至数据/权重RAM122/124的列,DMAC 6602必须产生64 个主加载请求至加载队列6322/6332。DMAC6602逻辑上将64个主加载请求 分成四组,每组包含十六个请求。DMAC 6602将组内的16个请求传输至加载 队列6322/6322的相应16个条目6512。DMAC 6602维持与每个条目6512索引 相关联的状态。该状态指示四个组中的当前正使用条目来加载数据块的那一 组。因此,当DMAC 6602从加载队列6322/6322接收条目6512索引时,DMAC 6602的逻辑通过将组号与索引串联来构造块地址,并将构造的块地址作为控 制输入提供给数据/权重解复用器6611/6621。
相反,当主接口6302储存队列6324/6334从其数据/权重缓存复用器 6615/6625请求数据块时,该主接口6302加载队列6324/6334还将条目6522的 索引提供至向储存队列6322/6332发出储存请求的相应DMAC 6602。为了将 整个4KB的数据从数据/权重RAM122/124的行传输至系统存储器,DMAC 6602必须产生64个主储存请求至储存队列6324/6334。DMAC 6602逻辑上将 64个储存请求分成四组,每组包含十六个请求。DMAC 6602向储存队列6324/6334的相应16个条目6522进行组内的十六个请求。DMAC 6602维持与 每个条目6522索引相关联的状态。该状态指示四个组中当前正使用条目来储 存数据块的那一组。因此,当DMAC 6602从储存队列6324/6334接收条目6522 索引时,DMAC 6602的逻辑通过将组号与索引串联来构造块地址,并将构造 的块地址作为控制输入提供给数据/权重读取缓存复用器6615/6625。
现参考图57,示出一框图,该框图示出NNU 121的环形总线耦接实施例。 图57在一些方面与图34相同,并且附图标记相同的元件是相同的。如同图34, 图57示出NNU 121从多个源接收微操作以提供给其流水线的能力。然而,在 图57的实施例中,NNU 121如图46中那样经由环形总线4024耦接至核心 4002,现将描述差异。
在图57的实施例中,复用器3402从五个不同的源接收微操作。复用器 3402将选择的微操作3418提供给NPU 126流水线级3401、数据RAM 122和权 重RAM 124、移动单元5802和输出单元5808,以对其进行控制,如上所述。 如针对图34所述,第一个源是产生微操作3416的定序器128。第二个源是图 34的解码器3404的修改后版本,用于从核心4002所储存的从属接口6301储存 队列6314接收储存请求的数据块。如以上针对图34所述,数据块可以包括与 从MTNN指令1400或MFNN指令1500转译来的微指令类似的信息。解码器 3404对数据块进行解码并作为响应而产生微操作3412。一个示例是响应于从 从属接口6301储存队列6314接收到的将数据写入数据/权重RAM 122/124的 请求、或者响应于从从属接口6301加载队列6312接收到的从数据/权重RAM 122/124读取数据的请求而产生的微操作3412。第三个源是来自核心4002所储 存的从属接口6301储存队列6314的储存请求的直接数据块,其中核心4002包 括NNU 121直接执行的微操作3414,如以上针对图34所述。优选地,核心4002储存至环形总线4024地址空间中的不同存储器映射地址,以使得解码器3404 能够区分第二微操作源和第三微操作源。第四个源是由DMAC 6602产生的微 操作7217。第五个源是空运算微操作7219,其中响应于该空运算微操作7219, NNU 121保持其状态。
在一个实施例中,五个源具有解码器3404所执行的优先方案,其中直接 微操作3414具有最高优先级;由解码器3404响应于从属接口6301的从属储存 操作而产生的微操作3412具有第二高优先级;由DMAC 6602产生的微操作 7217具有次高优先级;由定序器128产生的微操作3416具有次高的优先级; 并且空运算微操作是默认的(即最低优先级),复用器3402在没有其它源请求 时所选择的源。根据一个实施例,当DMAC 6602或从属接口6301需要访问数 据RAM 122或权重RAM 124时,其优先于运行在定序器128上的程序,并且 解码器3404使定序器128暂停直到DMAC 6602和从属接口6301已完成其访问 为止。
尽管如上所述已经描述了在权重RAM 124和数据RAM 122中储存字节 的实施例,但是设想了字大小可以是不同大小(例如,9位、12位或16位)的其 它实施例。
虽然这里描述了本发明的各种实施例,但这些实施例是通过示例而非限 制的方式呈现。对于相关计算机领域的技术人员将是明显的,可以在不偏离 本发明的范围的情况下进行形式和细节方面的各种改变。例如,软件可以例 如支持本发明所述的设备和方法的功能、制造、建模、仿真、描述以及/或者 测试等。这可以使用一般编程语言(例如,C、C++)、包含Verilog HDL、VHDL 等的硬件描述语言(HDL),或其它可用程序来实现。这样的软件可以设置于 任何已知的计算机可用介质,诸如磁带、半导体、磁盘、光盘(例如,CD-ROM、 DVD-ROM等)、网络、有线或其它通信介质等。这里描述的设备和方法的实 施例可被包含于诸如处理器核心(例如,采用HDL体现或指定)等的半导体知 识产权核心中,并且通过集成电路的制作而被转换为硬件。此外,这里描述 的设备和方法还可体现为硬件和软件的组合。因此,本发明不应以这里描述 的任何典型实施例来进行限制,而应仅根据以下权利要求和其等同项来进行 限定。具体地,本发明可以实现在可用于通用计算机的处理器装置内。最后,本领域技术人员应当理解,他们可以容易地使用所公开的概念和具体实施例 作为基础,来设计并修改其它结构以在不偏离所附权利要求所限定的本发明 的范围的情况下实现本发明的相同目的。
相关申请的交叉引用
本申请涉及以下美国非临时申请,其各自通过引用而全文并入于此。
Figure BDA0002163527810001591
Figure BDA0002163527810001601
Figure BDA0002163527810001611
以上非临时申请各自要求基于以下美国临时申请的优先权,所述美国临 时申请各自通过引用而全文并入于此。
Figure BDA0002163527810001612
本申请还涉及以下美国非临时申请,其各自通过引用而全文并入于此。
Figure BDA0002163527810001613
Figure BDA0002163527810001621
本申请还涉及以下美国非临时申请,其各自通过引用而全文并入于此。
Figure BDA0002163527810001622
Figure BDA0002163527810001631

Claims (5)

1.一种用于操作处理器的方法,所述处理器具有:处理核心;第一数据存储,其用于保持所述处理核心所处理的高速缓存器行;神经处理单元加速器,其具有用于选择性地保持从所述第一数据存储驱逐的高速缓存器行和所述神经处理单元加速器所处理的神经网络权重的第二数据存储;以及标记目录,其用于保持针对所述第一数据存储和所述第二数据存储这两者中所储存的高速缓存器行的标记,所述方法包括以下步骤:
响应于从所述第一数据存储驱逐高速缓存器行的请求而进行以下操作:
在所述第二数据存储正在第一模式下操作的情况下,将高速缓存器行写入所述第二数据存储并且更新所述标记目录中的标记以指示高速缓存器行存在于所述第二数据存储中,其中在所述第一模式中所述第二数据存储保持从所述第一数据存储驱逐的高速缓存器行;以及
在所述第二数据存储正在第二模式下操作的情况下,将高速缓存器行写入系统存储器而非写入所述第二数据存储,其中在所述第二模式中所述第二数据存储保持所述神经处理单元加速器所处理的神经网络权重。
2.根据权利要求1所述的方法,其中,还包括:
进一步响应于来自所述处理核心的指定存储器地址的加载请求而进行以下操作:
从所述标记目录确定所述存储器地址所涉及的第二高速缓存器行是存在于所述第一数据存储中还是存在于所述第二数据存储中;
在所述第二高速缓存器行存在于所述第一数据存储中的情况下,从所述第一数据存储读取所述第二高速缓存器行并将所述第二高速缓存器行提供给所述处理核心;
在所述第二高速缓存器行存在于所述第二数据存储中而不存在于所述第一数据存储中的情况下,从所述第二数据存储读取所述第二高速缓存器行并将所述第二高速缓存器行提供给所述处理核心;以及
在所述第二高速缓存器行既不存在于所述第一数据存储中又不存在于所述第二数据存储中的情况下,从所述系统存储器读取所述第二高速缓存器行并将所述第二高速缓存器行提供给所述处理核心。
3.根据权利要求2所述的方法,其中,还包括:
进一步响应于来自所述处理核心的指定所述存储器地址的加载请求并且在所述第二高速缓存器行存在于所述第二数据存储中而不存在于所述第一数据存储中的情况下进行以下操作:
将从所述第二数据存储读取的所述第二高速缓存器行与所述第一数据存储中所保持的第三高速缓存器行进行互换。
4.根据权利要求1所述的方法,其中,还包括:
通过以下操作从所述第一模式转换为所述第二模式:
使所述第二数据存储的全部高速缓存器行无效;以及
停止响应于从所述第一数据存储驱逐高速缓存器行的请求而将高速缓存器行写入所述第二数据存储并且更新所述标记目录中的标记以指示高速缓存器行存在于所述第二数据存储中。
5.根据权利要求1所述的方法,其中,还包括:
在逻辑上访问作为S个集合×X个路的关联存储器的所述第二数据存储,
其中,所述第一数据存储是L个字节的存储器,
所述第二数据存储是M个字节的存储器,
所述第一数据存储被布置为Y个路的关联存储器,
X是M除以L的商与Y的乘积,以及
所述第一数据存储被布置为S个集合的关联存储器。
CN201910739737.8A 2017-06-16 2018-06-15 用于操作处理器的方法 Active CN110443360B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201762521244P 2017-06-16 2017-06-16
US62/521,244 2017-06-16
CN201810618974.4A CN108805276B (zh) 2017-06-16 2018-06-15 处理器、用于操作处理器的方法和计算机可用介质

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201810618974.4A Division CN108805276B (zh) 2017-06-16 2018-06-15 处理器、用于操作处理器的方法和计算机可用介质

Publications (2)

Publication Number Publication Date
CN110443360A CN110443360A (zh) 2019-11-12
CN110443360B true CN110443360B (zh) 2021-08-06

Family

ID=64086305

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201810618974.4A Active CN108805276B (zh) 2017-06-16 2018-06-15 处理器、用于操作处理器的方法和计算机可用介质
CN201910739737.8A Active CN110443360B (zh) 2017-06-16 2018-06-15 用于操作处理器的方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201810618974.4A Active CN108805276B (zh) 2017-06-16 2018-06-15 处理器、用于操作处理器的方法和计算机可用介质

Country Status (1)

Country Link
CN (2) CN108805276B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109550249B (zh) * 2018-11-28 2022-04-29 腾讯科技(深圳)有限公司 一种目标对象的控制方法、装置及设备
CN111314270B (zh) * 2018-12-12 2022-09-30 上海领甲数据科技有限公司 一种基于有效期均匀分布对称算法的数据加密和解密方法
CN109976707B (zh) * 2019-03-21 2023-05-05 西南交通大学 一种可变位宽乘法器自动化生成方法
KR102351087B1 (ko) * 2019-06-04 2022-01-14 주식회사 딥엑스 인공신경망의 데이터 로컬리티 기반의 데이터 캐슁을 이용하여 고속의 인공신경망 오퍼레이션을 지원하는 데이터 관리 장치
CN110717588B (zh) * 2019-10-15 2022-05-03 阿波罗智能技术(北京)有限公司 用于卷积运算的装置和方法
US11436144B2 (en) * 2020-04-10 2022-09-06 Micron Technology, Inc. Cache memory addressing
WO2021246816A1 (en) 2020-06-04 2021-12-09 Samsung Electronics Co., Ltd. Method for enhancing performance of electronic device
CN113435570B (zh) * 2021-05-07 2024-05-31 西安电子科技大学 可编程卷积神经网络处理器、方法、设备、介质、终端
CN114116547B (zh) * 2021-11-12 2024-03-26 成都立思方信息技术有限公司 一种可重构的电子对抗设备模拟器架构

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5956703A (en) * 1995-07-28 1999-09-21 Delco Electronics Corporation Configurable neural network integrated circuit
US6263407B1 (en) * 1998-02-17 2001-07-17 International Business Machines Corporation Cache coherency protocol including a hovering (H) state having a precise mode and an imprecise mode
WO2002071211A2 (en) * 2000-11-20 2002-09-12 Zucotto Wireless, Inc. Data processor having multiple operating modes
US6782463B2 (en) * 2001-09-14 2004-08-24 Intel Corporation Shared memory array
US7737994B1 (en) * 2003-09-26 2010-06-15 Oracle America, Inc. Large-kernel convolution using multiple industry-standard graphics accelerators
US8719807B2 (en) * 2006-12-28 2014-05-06 Intel Corporation Handling precompiled binaries in a hardware accelerated software transactional memory system
AU2008225151B2 (en) * 2007-03-12 2012-06-28 Citrix Systems, Inc. Systems and methods for cache operations
JP5184824B2 (ja) * 2007-06-15 2013-04-17 キヤノン株式会社 演算処理装置及び方法
US8527709B2 (en) * 2007-07-20 2013-09-03 Intel Corporation Technique for preserving cached information during a low power mode
US8412971B2 (en) * 2010-05-11 2013-04-02 Advanced Micro Devices, Inc. Method and apparatus for cache control
EP2508982B1 (en) * 2011-04-07 2016-03-30 VIA Technologies, Inc. Control register mapping in heterogenous instruction set architecture processor
US8788891B2 (en) * 2012-06-14 2014-07-22 International Business Machines Corporation Bitline deletion
CN104714898B (zh) * 2013-12-16 2018-08-21 深圳市国微电子有限公司 一种Cache的分配方法和装置
CN106326148B (zh) * 2015-07-01 2020-06-23 三星电子株式会社 数据处理系统及其操作方法
CN106484362B (zh) * 2015-10-08 2020-06-12 上海兆芯集成电路有限公司 利用使用者指定二维定点算术运算的装置

Also Published As

Publication number Publication date
CN108805276A (zh) 2018-11-13
CN110443360A (zh) 2019-11-12
CN108805276B (zh) 2020-09-22

Similar Documents

Publication Publication Date Title
CN108133269B (zh) 具有可作为高速缓存存储器或神经网络单元存储器操作的存储器阵列的处理器
CN108133267B (zh) 具有可作为最后级高速缓存片或神经网络单元存储器操作的存储器阵列的处理器
CN108133268B (zh) 具有存储器阵列的处理器
CN110443360B (zh) 用于操作处理器的方法
CN111680790B (zh) 神经网络单元
US10725934B2 (en) Processor with selective data storage (of accelerator) operable as either victim cache data storage or accelerator memory and having victim cache tags in lower level cache wherein evicted cache line is stored in said data storage when said data storage is in a first mode and said cache line is stored in system memory rather then said data store when said data storage is in a second mode
US11029949B2 (en) Neural network unit
US11216720B2 (en) Neural network unit that manages power consumption based on memory accesses per period
CN108804139B (zh) 可编程设备及其操作方法和计算机可用介质
CN106598545B (zh) 沟通共享资源的处理器与方法及非瞬时计算机可使用媒体
US11226840B2 (en) Neural network unit that interrupts processing core upon condition
CN108805275B (zh) 可编程设备及其操作方法和计算机可用介质
US11221872B2 (en) Neural network unit that interrupts processing core upon condition

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
CP03 Change of name, title or address

Address after: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203

Patentee after: Shanghai Zhaoxin Semiconductor Co.,Ltd.

Address before: Room 301, 2537 Jinke Road, Zhangjiang hi tech park, Pudong New Area, Shanghai 201203

Patentee before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd.

CP03 Change of name, title or address