神经网络单元

阅读:387发布:2023-01-13

专利汇可以提供神经网络单元专利检索,专利查询,专利分析的服务。并且本 发明 涉及神经网络单元,其中第一/第二 存储器 系装载由N个权重/数据字构成之列。N个处理单元中之处理单元J包含第一/第二寄存器,算术单元与第一/第二多路复用逻辑 电路 。算术单元执行运算以产生结果。第一多路复用 逻辑电路 对于处理单元0至(N/2)-1而言系接收第一存储器之权重字J与J+(N/2),对于处理单元N/2至N-1而言系接收第一存储器之权重字J与J-(N/2), 选定 输出至第一寄存器。第二多路复用逻辑电路系接收第二存储器之数据字J,接收处理单元J-1之第二寄存器之数据字,选定输出至第二寄存器。处理单元0与N/2之第二多路复用逻辑电路并分别接收处理单元(N/2)-1与N-1之第二寄存器之数据字。,下面是神经网络单元专利的具体信息内容。

1.一种装置,包含:
一第一存储器,装载多个由N个权重字构成之列,该N个权重字系赋予0至N-1之索引,并接收一地址,该地址具有log2W个位与一额外位;
一第二存储器,装载多个由N个数据字构成之列,该N个数据字系赋予0至N-1之索引,其中N至少是512;
一个由N个处理单元构成之阵列,该N个处理单元系赋予0至N-1之索引,索引J之处理单元包含:
第一与第二寄存器;
一累加器,具有一输出;
一算术单元,具有第一,第二与第三输入,并执行一运算以产生一结果储存于该累加器,该第一输入接收该累加器之该输出,该第二输入接收该第一寄存器输出之一权重字,该第三输入接收该第二寄存器输出之一数据字;
第一多路复用逻辑电路,对于处理单元0至(N/2)-1而言,接收该第一存储器输出之权重字J与J+(N/2),对于处理单元N/2至N-1而言,接收该第一存储器输出之权重字J与J-(N/
2),并输出一选定权重字至该第一寄存器;以及
第二多路复用逻辑电路,接收该第二存储器输出之一数据字J,接收处理单元J-1之该第二寄存器输出之一数据字,并输出一选定数据字至该第二寄存器,其中,对于处理单元0而言,处理单元J-1是处理单元N-1;
其中,处理单元0之该第二多路复用逻辑电路并接收处理单元(N/2)-1之该第二寄存器输出之该数据字,并且,
处理单元N/2之该第二多路复用逻辑电路并接收处理单元N-1之该第二寄存器输出之该数据字。
2.如权利要求1所述的装置,其中,在一第一模式,当该地址额外位为一第一数值,处理单元0至(N/2)-1之该第一多路复用逻辑电路选择权重字J输出至该第一寄存器,且处理单元N/2至N-1之该第一多路复用逻辑电路选择权重字J-(N/2)输出至该第一寄存器,并且,当该地址额外位为一第二数值,处理单元0至(N/2)-1之该第一多路复用逻辑电路选择权重字J-(N/2)输出至该第一寄存器,且处理单元N/2至N-1之该第一多路复用逻辑电路选择权重字J输出至该第一寄存器。
3.如权利要求2所述的装置,其中,在该第一模式:
当该地址额外位为该第一数值,该第一存储器输出该地址log2W位选定之一列之字0至(N/2)-1,但不输出字N/2至N-1;以及
当该地址额外位为该第二数值,该第一存储器输出该地址log2W位选定之一列之字N/2至N-1,但不输出字0至(N/2)-1。
4.如权利要求2所述的装置,其中,在该第一模式,处理单元0之该第二多路复用逻辑电路选择处理单元(N/2)-1之该第二寄存器输出之该数据字输出至处理单元之该第二寄存器,处理单元N/2之该第二多路复用逻辑电路选择处理单元N-1之该第二寄存器输出之该数据字输出至该第二寄存器,并且,剩下的处理单元之该第二多路复用逻辑电路选择处理单元J-1之该第二寄存器输出之该数据字输出至该第二寄存器。
5.如权利要求4所述的装置,其中,在该第一模式,该第二多路复用逻辑电路择一地选择该第二存储器输出之数据字J输出至该第二寄存器。
6.如权利要求1所述的装置,其中,在该第一模式,该第一存储器系经设置以装载2*W个列,每列N/2个字,提供给处理单元0至N-1。
7.如权利要求2所述的装置,其中,在一第二模式,该第一多路复用逻辑电路选择该第一存储器输出之权重字J输出至该第一寄存器,并且,该第二多路复用逻辑电路选择处理单元J-1之该第二寄存器输出之该数据字输出至该第二寄存器。
8.如权利要求7所述的装置,其中,在该第二模式,该第二多路复用逻辑电路择一地选择该第二存储器输出之数据字J输出至该第二寄存器。
9.如权利要求7所述的装置,其中,在该第二模式,处理单元0至N-1之该第二多路复用逻辑电路与该第二寄存器集体作为一N个字之旋转器进行运作;其中,在该第一模式,处理单元0至(N/2)-1之该第二多路复用逻辑电路与该第二寄存器集体作为一N/2个字之第一旋转器进行运作,并且,处理单元N/2至N-1之该第二多路复用逻辑电路与该第二寄存器集体作为一N/2个字之第二旋转器进行运作。
10.一种运作一装置之方法,该装置具有一第一存储器,一第二存储器与一个由N个处理单元构成之阵列,该第一存储器系装载多个由N个权重字构成之列,该N个权重字系赋予0至N-1之索引,并接收一地址,该地址具有log2W个位与一额外位,该第二存储器系装载多个由N个数据字构成之列,该N个数据字系赋予0至N-1之索引,其中N至少是512,该N个处理单元系赋予0至N-1之索引,其中,索引J之处理单元具有第一与第二寄存器,一累加器,一算术单元,第一多路复用逻辑电路与第二多路复用逻辑电路,该累加器具有一输出,该算术单元具有第一,第二与第三输入,并执行一运算以产生一结果储存于该累加器,该第一输入接收该累加器之该输出,该第二输入接收该第一寄存器输出之一权重字,该第三输入接收该第二寄存器输出之一数据字,对于处理单元0至(N/2)-1而言,该第一多路复用逻辑电路接收该第一存储器输出之权重字J与J+(N/2),对于处理单元N/2至N-1而言,该第一多路复用逻辑电路接收该第一存储器输出之权重字J与J-(N/2),并输出一选定权重字至该第一寄存器,该第二多路复用逻辑电路接收该第二存储器输出之一数据字J,接收处理单元J-1之该第二寄存器输出之一数据字,并输出一选定数据字至该第二寄存器,其中,对于处理单元0而言,处理单元J-1是处理单元N-1,其中,处理单元0之该第二多路复用逻辑电路并接收处理单元(N/2)-1之该第二寄存器输出之该数据字,并且,处理单元N/2之该第二多路复用逻辑电路并接收处理单元N-1之该第二寄存器输出之该数据字,该方法包含:
在一第一模式:
当该地址额外位为一第一数值:
利用处理单元0至(N/2)-1之该第一多路复用逻辑电路,选择权重字J输出至该第一寄存器;以及
利用处理单元N/2至N-1之该第一多路复用逻辑电路,选择权重字J-(N/2)输出至该第一寄存器;以及
当该地址额外位为一第二数值:
利用处理单元0至(N/2)-1之该第一多路复用逻辑电路,选择权重字J-(N/2)输出至该第一寄存器;以及
利用处理单元N/2至N-1之该第一多路复用逻辑电路选择权重字J输出至该第一寄存器。
11.如权利要求10所述的方法,更包括:
在该第一模式:
当该地址额外位为该第一数值:
利用该第一存储器,输出该地址log2W位选定之一列之字0至(N/2)-1,但不输出字N/2至N-1;以及
当该地址额外位为该第二数值:
利用该第一存储器输出该地址log2W位选定之一列之字N/2至N-1,但不输出字0至(N/
2)-1。
12.如权利要求10所述的方法,更包括:
在该第一模式:
利用处理单元0之该第二多路复用逻辑电路,选择处理单元(N/2)-1之该第二寄存器输出之该数据字输出至该第二寄存器;
利用处理单元N/2之该第二多路复用逻辑电路,选择处理单元N-1之该第二寄存器输出之该数据字输出至该第二寄存器;以及
利用剩下的处理单元之该第二多路复用逻辑电路选择处理单元J-1之该第二寄存器输出之该数据字输出至该第二寄存器。
13.如权利要求12所述的方法,更包括:
在该第一模式:
利用该第二多路复用逻辑电路,择一地选择该第二存储器输出之数据字J输出至该第二寄存器。
14.如权利要求10所述的方法,更包括:
在该第一模式:
设置该第一存储器,以装载2*W个列,每列N/2个字,提供给处理单元0至N-1。
15.如权利要求10所述的方法,更包括:
在一第二模式:
利用该第一多路复用逻辑电路,选择该第一存储器输出之权重字J输出至该第一寄存器;以及
利用该第二多路复用逻辑电路,选择处理单元J-1之该第二寄存器输出之该数据字输出至该第二寄存器。
16.如权利要求15所述的方法,更包括:
在该第二模式:
利用该第二多路复用逻辑电路,择一地选择该第二存储器输出之数据字J输出至该第二寄存器。
17.如权利要求15所述的方法,更包括:
在该第二模式:
利用处理单元0至N-1之该第二多路复用逻辑电路与该第二寄存器,集体作为一N个字之旋转器进行运作;以及
在该第一模式:
利用处理单元0至(N/2)-1之该第二多路复用逻辑电路与该第二寄存器,集体作为一N/
2个字之第一旋转器进行运作;以及
利用处理单元N/2至N-1之该第二多路复用逻辑电路与该第二寄存器,集体作为一N/2个字之第二旋转器进行运作。
18.一种装置,包含:
一第一存储器,装载多个由N个权重字构成之列,该N个权重字系赋予0至N-1之索引,并接收一地址,该地址具有log2W个位与一额外位;
一第二存储器,装载多个由N个数据字构成之列,该N个数据字系赋予0至N-1之索引,其中N至少是512;
一个由N个处理单元构成之阵列,该N个处理单元系赋予0至N-1之索引,索引J之处理单元包含:
第一与第二寄存器;
一累加器,具有一输出;
一算术单元,具有第一,第二与第三输入,并执行一运算以产生一结果储存于该累加器,该第一输入接收该累加器之该输出,该第二输入接收该第一寄存器输出之一权重字,该第三输入接收该第二寄存器输出之一数据字;
第一多路复用逻辑电路,对于处理单元0至(N/2)-1而言,接收该第一存储器输出之权重字J与J+(N/2),对于处理单元N/2至N-1而言,接收该第一存储器输出之权重字J与J-(N/
2),并输出一选定权重字至该第一寄存器;
第二多路复用逻辑电路,接收该第二存储器输出之一数据字J,接收处理单元J-1之该第二寄存器输出之一数据字,并输出一选定数据字至该第二寄存器,其中,对于处理单元0而言,处理单元J-1是处理单元N-1;
其中,处理单元N/4之该第二多路复用逻辑电路并接收处理单元(3N/4)-1之该第二寄存器输出之该数据字,并且,处理单元3N/4之该第二多路复用逻辑电路并接收处理单元(N/
4)-1之该第二寄存器输出之该数据字。
19.如权利要求18所述的装置,其中,在一第一模式,当该地址额外位为一第一数值,处理单元0至(N/2)-1之该第一多路复用逻辑电路选择权重字J输出至该第一寄存器,且处理单元N/2至N-1之该第一多路复用逻辑电路选择权重字J-(N/2)输出至该第一寄存器,并且,当该地址额外位为一第二数值,处理单元0至(N/2)-1之该第一多路复用逻辑电路选择权重字J-(N/2)输出至该第一寄存器,且处理单元N/2至N-1之该第一多路复用逻辑电路选择权重字J输出至该第一寄存器。
20.如权利要求18所述的装置,其中,在该第一模式:
当该地址额外位为该第一数值,该第一存储器输出该地址log2W位选定之一列之字0至(N/2)-1,但不输出字N/2至N-1;
当该地址额外位为该第二数值,该第一存储器输出该地址log2W位选定之一列之字N/2至N-1,但不输出字0至(N/2)-1。
21.如权利要求19所述的装置,其中,在该第一模式,处理单元N/4之该第二多路复用逻辑电路选择处理单元(3N/4)-1之该第二寄存器输出之该数据字输出至该第二寄存器,处理单元3N/4之该第二多路复用逻辑电路选择处理单元(N/4)-1之该第二寄存器输出之该数据字输出至该第二寄存器,并且,剩下的处理单元之该第二多路复用逻辑电路选择处理单元J-1之该第二寄存器输出之该数据字输出至该第二寄存器。
22.如权利要求19所述的装置,其中,在该第一模式,该第二多路复用逻辑电路择一地选择该第二存储器输出之数据字J输出至该第二寄存器。
23.如权利要求19所述的装置,其中,在一第二模式,该第一多路复用逻辑电路选择该第一存储器输出之权重字J输出至该第一寄存器,并且该第二多路复用逻辑电路选择处理单元J-1之该第二寄存器输出之该数据字输出至该第二寄存器。

说明书全文

神经网络单元

技术领域

[0001] 本发明涉及神经网络单元,特别是具有阵列宽度可分段之旋转器以及可配合分段宽度进行重塑以提供共同权重至多个旋转器片段之权重存储器之神经网络单元。

背景技术

[0002] 本申请案系关联于下列美国非临时申请案。这些关联申请案之全文并入本案以供参考。
[0003]
[0004]
[0005] 前述各个美国非临时申请案系主张下列美国临时申请案之优先权。这些临时申请案之全文系并入本案以供参考。
[0006]
[0007] 本申请案亦关联于下列美国非临时申请案。这些关联申请案之全文并入本案以供参考。
[0008]
[0009] 本申请案亦关联于下列同时提交的美国非临时申请案。这些关联申请案之全文并入本案以供参考。
[0010]
[0011] 近年来,人工神经网络(artificial neural networks,ANN)重新吸引了人们的注意。这些研究通常被称为深度学习(deep learning)、计算机学习(computer learning) 等类似术语。通用处理器运算能的提升也推升了人们在数十年后的现在对于人工神经网络的兴趣。人工神经网络近期的应用包括语言与影像辨识等。对于提升人工神经网络之运算效能与效率的需求似乎正在增加。

发明内容

[0012] 有鉴于此,本发明提供一种装置。此装置包含一第一存储器,一第二存储器与一个由N个处理单元构成之阵列。第一存储器系装载多个由N个权重字构成之列,该N个权重字系赋予0至N-1之索引,并接收一地址,该地址具有log2W 个位与一额外位。第二存储器系装载多个由N个数据字构成之列,该N个数据字系赋予0至N-1之索引,其中N至少是512。N个处理单元系赋予0至N-1 之索引,其中,索引J之处理单元包含第一与第二寄存器,一累加器,一算术单元,一第一多路复用逻辑电路与一第二多路复用逻辑电路。累加器具有一输出。算术单元具有第一,第二与第三输入,并执行一运算以产生一结果储存于该累加器,该第一输入接收该累加器之该输出,该第二输入接收该第一寄存器输出之一权重字,该第三输入接收该第二寄存器输出之一数据字。第一多路复用逻辑电路,对于处理单元0至(N/2)-1而言,系接收该第一存储器输出之权重字J 与J+(N/2),对于处理单元N/2至N-1而言,系接收该第一存储器输出之权重字 J与J-(N/2),并输出一选定权重字至该第一寄存器。第二多路复用逻辑电路系接收该第二存储器输出之一数据字J,接收处理单元J-1之该第二寄存器输出之一数据字,并输出一选定数据字至该第二寄存器。其中,对于处理单元0而言,处理单元J-1是处理单元N-1。其中,处理单元0之该第二多路复用逻辑电路并接收处理单元(N/2)-1之该第二寄存器输出之该数据字,并且,处理单元N/2之该第二多路复用逻辑电路并接收处理单元N-1之该第二寄存器输出之该数据字。
[0013] 本发明并提供一种运作一装置之方法。此装置具有一第一存储器,一第二存储器与一个由N个处理单元构成之阵列,该第一存储器系装载多个由N个权重字构成之列,该N个权重字系赋予0至N-1之索引,并接收一地址,该地址具有log2W个位与一额外位,该第二存储器系装载多个由N个数据字构成之列,该N个数据字系赋予0至N-1之索引,其中N至少是512,该N个处理单元系赋予0至N-1之索引,其中,索引J之处理单元具有第一与第二寄存器,一累加器,一算术单元,第一多路复用逻辑电路与第二多路复用逻辑电路,该累加器具有一输出,该算术单元具有第一,第二与第三输入,并执行一运算以产生一结果储存于该累加器,该第一输入接收该累加器之该输出,该第二输入接收该第一寄存器输出之一权重字,该第三输入接收该第二寄存器输出之一数据字,对于处理单元0至(N/2)-1而言,该第一多路复用逻辑电路接收该第一存储器输出之权重字J与J+(N/2),对于处理单元N/2至N-1而言,该第一多路复用逻辑电路接收该第一存储器输出之权重字J与J-(N/2),并输出一选定权重字至该第一寄存器,该第二多路复用逻辑电路接收该第二存储器输出之一数据字J,接收处理单元J-1之该第二寄存器输出之一数据字,并输出一选定数据字至该第二寄存器,其中,对于处理单元0而言,处理单元J-1是处理单元N-1,其中,处理单元0之该第二多路复用逻辑电路并接收处理单元(N/2)-1之该第二寄存器输出之该数据字,并且,处理单元N/2之该第二多路复用逻辑电路并接收处理单元 N-1之该第二寄存器输出之该数据字。此方法包含在一第一模式下,当该地址额外位为一第一数值,利用处理单元0至(N/2)-1之该第一多路复用逻辑电路,选择权重字J输出至该第一寄存器,并且利用处理单元N/2至N-1之该第一多路复用逻辑电路,选择权重字J-(N/2)输出至该第一寄存器;而当该地址额外位为一第二数值,利用处理单元0至(N/2)-1之该第一多路复用逻辑电路,选择权重字J-(N/2)输出至该第一寄存器,并且利用处理单元N/2至N-1之该第一多路复用逻辑电路选择权重字J输出至该第一寄存器。
[0014] 本发明并提供另一种装置。此装置包含一第一存储器,一第二存储器与一个由N个处理单元构成之阵列。第一存储器系装载多个由N个权重字构成之列,该N个权重字系赋予0至N-1之索引,并接收一地址,该地址具有log2W个位与一额外位。第二存储器系装载多个由N个数据字构成之列,该N个数据字系赋予0至N-1之索引,其中N至少是512。N个处理单元系赋予0至N-1之索引,其中,索引J之处理单元包含第一与第二寄存器,一累加器,一算术单元,一第一多路复用逻辑电路与一第二多路复用逻辑电路。累加器具有一输出。算术单元具有第一,第二与第三输入,并执行一运算以产生一结果储存于该累加器,该第一输入接收该累加器之该输出,该第二输入接收该第一寄存器输出之一权重字,该第三输入接收该第二寄存器输出之一数据字。第一多路复用逻辑电路,对于处理单元0至(N/2)-1而言,系接收该第一存储器输出之权重字J与 J+(N/2),对于处理单元N/2至N-1而言,系接收该第一存储器输出之权重字J 与J-(N/2),并输出一选定权重字至该第一寄存器。第二多路复用逻辑电路系接收该第二存储器输出之一数据字J,接收处理单元J-1之该第二寄存器输出之一数据字,并输出一选定数据字至该第二寄存器。其中,对于处理单元0而言,处理单元J-1是处理单元N-1。其中,处理单元N/4之该第二多路复用逻辑电路并接收处理单元(3N/4)-1之该第二寄存器输出之该数据字,并且,处理单元3N/4 之该第二多路复用逻辑电路并接收处理单元(N/4)-1之该第二寄存器输出之该数据字。
[0015] 本发明所采用的具体实施例,将藉由以下之实施例及图式作进一步之说明。附图说明
[0016] 图1系显示一包含一神经网络单元(neural network unit,NNU)之处理器之方示意图。
[0017] 图2系显示图1之一神经处理单元(neural processing unit,NPU)之方块示意图。
[0018] 图3系一方块图,显示利用图1之神经网络单元之N个神经处理单元之N个多路复用寄存器,对于由图1之数据随机存取存储器取得之一列数据字执行如同一N个字之旋转器(rotator)或循环移位器(circular shifter)之运作。
[0019] 图4系一表格,显示一个储存于图1之神经网络单元之程序存储器并由该神经网络单元执行之程序。
[0020] 图5系显示神经网络单元执行图4之程序之时序图。
[0021] 图6A系显示图1之神经网络单元执行图4之程序之方块示意图。
[0022] 图6B系一流程图,显示图1之处理器执行一架构程序,以利用神经网络单元执行关联于一人工神经网络之隐藏层之神经元之典型乘法累加启动函数运算之运作,如同由图4之程序执行之运作。
[0023] 图7系显示图1之神经处理单元之另一实施例之方块示意图。
[0024] 图8系显示图1之神经处理单元之又一实施例之方块示意图。
[0025] 图9系一表格,显示一个储存于图1之神经网络单元之程序存储器并由该神经网络单元执行之程序。
[0026] 图10系显示神经网络单元执行图9之程序之时序图。
[0027] 图11系显示图1之神经网络单元之一实施例之方块示意图。在图11之实施例中,一个神经元系分成两部分,即启动函数单元部分与算术逻辑单元部分(此部分并包含移位寄存器部分),而各个启动函数单元部分系由多个算术逻辑单元部分共享。
[0028] 图12系显示图11之神经网络单元执行图4之程序之时序图。
[0029] 图13系显示图11之神经网络单元执行图4之程序之时序图。
[0030] 图14系一方块示意图,显示一移动至神经网络(MTNN)架构指令以及其对应于图1之神经网络单元之部分之运作。
[0031] 图15系一方块示意图,显示一移动至神经网络(MTNN)架构指令以及其对应于图1之神经网络单元之部分之运作。
[0032] 图16系显示图1之数据随机存取存储器之一实施例之方块示意图。
[0033] 图17系显示图1之权重随机存取存储器与一缓冲器之一实施例之方块示意图。
[0034] 图18系显示图1之一可动态配置之神经处理单元之方块示意图。
[0035] 图19系一方块示意图,显示依据图18之实施例,利用图1之神经网络单元之N个神经处理单元之2N个多路复用寄存器,对于由图1之数据随机存取存储器取得之一列数据字执行如同一旋转器(rotator)之运作。
[0036] 图20系一表格,显示一个储存于图1之神经网络单元之程序存储器并由该神经网络单元执行之程序,而此神经网络单元具有如图18之实施例所示之神经处理单元。
[0037] 图21系显示一神经网络单元执行图20之程序之时序图,此神经网络单元具有如图18所示之神经处理单元执行于窄配置。
[0038] 图22系显示图1之神经网络单元之方块示意图,此神经网络单元具有如图18所示之神经处理单元以执行图20之程序。
[0039] 图23系显示图1之一可动态配置之神经处理单元之另一实施例之方块示意图。
[0040] 图24系一方块示意图,显示由图1之神经网络单元使用以执行一卷积(convolution)运作之数据结构之一范例。
[0041] 图25系一流程图,显示图1之处理器执行一架构程序以利用神经网络单元依据图24之数据阵列执行卷积核之卷积运算。
[0042] 图26A系一神经网络单元程序之一程序行表,此神经网络单元程序系利用图24之卷积核心执行一数据矩阵之卷积运算并将其写回权重随机存取存储器。
[0043] 图26B系显示图1之神经网络单元之控制寄存器之某些字段之一实施例之方块示意图。
[0044] 图27系一方块示意图,显示图1中填入输入资料之权重随机存取存储器之一范例,此输入数据系由图1之神经网络单元执行共源运作(pooling operation)。
[0045] 图28系一神经网络单元程序之一程序行表,此神经网络单元程序系执行图27之输入数据矩阵之共源运作并将其写回权重随机存取存储器。
[0046] 图29A系显示图1之控制寄存器之一实施例之方块示意图。
[0047] 图29B系显示图1之控制寄存器之另一实施例之方块示意图。
[0048] 图29C系显示以两个部分储存图29A之倒数(reciprocal)之一实施例之方块示意图。
[0049] 图30系显示图2之启动函数单元(AFU)之一实施例之方块示意图。
[0050] 图31系显示图30之启动函数单元之运作之一范例。
[0051] 图32系显示图30之启动函数单元之运作之第二个范例。
[0052] 图33系显示图30之启动函数单元之运作之第三个范例。
[0053] 图34系显示图1之处理器以及神经网络单元之部分细节之方块示意图。
[0054] 图35系一方块图,显示具有一可变率神经网络单元之处理器。
[0055] 图36A系一时序图,显示一具有神经网络单元之处理器运作于一般模式之一运作范例,此一般模式即以主要时频率运作。
[0056] 图36B系一时序图,显示一具有神经网络单元之处理器运作于缓和模式之一运作范例,缓和模式之运作时频率低于主要时频率。
[0057] 图37系一流程图,显示图35之处理器之运作。
[0058] 图38系一方块图,详细显示神经网络单元之序列。
[0059] 图39系一方块图,显示神经网络单元之控制与状态寄存器之某些字段。
[0060] 图40系一方块图,显示Elman时间递归神经网络(recurrent neural network,RNN)之一范例。
[0061] 图41系一方块图,显示当神经网络单元执行关联于图40之Elman 时间递归神经网络之计算时,神经网络单元之数据随机存取存储器与权重随机存取存储器内之数据配置之一范例。
[0062] 图42系一表格,显示储存于神经网络单元之程序存储器之一程序,此程序系由神经网络单元执行,并依据图41之配置使用数据与权重,以达成Elman时间递归神经网络[0063] 图43系一方块图显示Jordan时间递归神经网络之一范例。
[0064] 图44系一方块图,显示当神经网络单元执行关联于图43之 Jordan时间递归神经网络之计算时,神经网络单元之数据随机存取存储器与权重随机存取存储器内之数据配置之一范例。
[0065] 图45系一表格,显示储存于神经网络单元之程序存储器之一程序,此程序系由神经网络单元执行,并依据图44之配置使用数据与权重,以达成Jordan时间递归神经网络。
[0066] 图46系一方块图,显示长短期记忆(long short term memory,LSTM)胞之一实施例。
[0067] 图47系一方块图,显示当神经网络单元执行关联于图46之长短期记忆胞层之计算时,神经网络单元之数据随机存取存储器与权重随机存取存储器内之数据配置之一范例。
[0068] 图48系一表格,显示储存于神经网络单元之程序存储器之一程序,此程序系由神经网络单元执行并依据图47之配置使用数据与权重,以达成关联于长短期记忆胞层之计算。
[0069] 图49系一方块图,显示一神经网络单元之实施例,此实施例之神经处理单元群组内具有输出缓冲遮蔽与反馈能力。
[0070] 图50系一方块图,显示当神经网络单元执行关联于图46之长短期记忆胞层之计算时,图49之神经网络单元之数据随机存取存储器,权重随机存取存储器与输出缓冲器内之数据配置之一范例。
[0071] 图51系一表格,显示储存于神经网络单元之程序存储器之一程序,此程序系由图49之神经网络单元执行并依据图50之配置使用数据与权重,以达成关联于长短期记忆胞层之计算。
[0072] 图52系一方块图,显示一神经网络单元之实施例,此实施例之神经处理单元群组内具有输出缓冲遮蔽与反馈能力,并且共享启动函数单元。
[0073] 图53系一方块图,显示当神经网络单元执行关联于图46之长短期记忆胞层之计算时,图49之神经网络单元之数据随机存取存储器,权重随机存取存储器与输出缓冲器内之数据配置之另一实施例。
[0074] 图54系一表格,显示储存于神经网络单元之程序存储器之一程序,此程序系由图49之神经网络单元执行并依据图53之配置使用数据与权重,以达成关联于长短期记忆胞层之计算。
[0075] 图55系一方块图,显示本发明另一实施例之部分神经处理单元。
[0076] 图56系一方块图,显示当神经网络单元执行关联于图43之 Jordan时间递归神经网络之计算并利用图55之实施例时,神经网络单元之数据随机存取存储器与权重随机存取存储器内之数据配置之一范例。
[0077] 图57系一表格,显示储存于神经网络单元之程序存储器之一程序,此程序系由神经网络单元执行并依据图56之配置使用数据与权重,以达成Jordan时间递归神经网络。
[0078] 图58系一方块图,显示一三维卷积运算任务,例如一卷积神经网络经常执行之三维卷积运算任务。
[0079] 图59系一方块图,显示将一数据随机存取存储器列分割为多个输入方块,将一权重随机存取存储器列分割为多个滤波器方块,将神经处理单元阵列分割为多个神经处理单元方块,以及将一数据随机存取存储器列分割为多个输出方块。
[0080] 图60系一虚拟程序代码(pseudocode),描述一非架构程序在神经网络单元上执行如图58所示之三维卷积任务时,所执行之运算。
[0081] 图61A与图61B,整体称为图61,系一方块图,显示本发明对一12x12x20之输入,利用50个5x5之滤波器执行卷积运算,以产生50个8x8之输出之一实施例中,数据随机存取存储器内之输入方块群组(group)之配置以及权重随机存取存储器内之滤波器方块群组之配置。
[0082] 图62系一方块图,显示图61之一输入方块群组I[c];一个5x5 之滤波器f的纵向部分以及一个通道c;图61之一滤波器方块群组F[f,c];以及图59之一输出方块。
[0083] 图63系一虚拟程序代码(pseudocode),描述一非架构程序,在一具有 N=1024个神经处理单元之神经网络单元上,搭配图61之数据随机存取存储器与权重随机存取存储器之配置,对一12x12x20之输入,利用50个5x5之滤波器执行卷积运算以产生50个8x8之输出,所执行之运算。
[0084] 图64A与图64B,整体称为图64,系一方块图,显示本发明对一12x12x20之输入,利用50个5x5之滤波器执行卷积运算以产生50个8x8 之输出,而不包含间隙输入/滤波器方块群组之另一实施例中,数据随机存取存储器内之输入方块群组之配置以及权重随机存取存储器内之滤波器方块群组之配置。
[0085] 图65系一虚拟程序代码,描述一非架构程序,在一具有N=2048个神经处理单元之神经网络单元上,搭配图64之数据随机存取存储器与权重随机存取存储器之配置,对一12x12x20之输入方块,利用50个5x5之滤波器执行卷积运算以产生50个8x8之输出方块,所执行之运算。
[0086] 图66A与图66B,整体称为图66,系一方块图,显示本发明对一12x12x20之输入,利用50个5x5之滤波器执行卷积运算以产生50个8x8 之输出之另一实施例中,权重随机存取存储器内之滤波器方块群组之配置。
[0087] 图67系一虚拟程序代码,描述一非架构程序,在一具有N=1024个神经处理单元之神经网络单元上,搭配图61之数据随机存取存储器与图66之权重随机存取存储器之配置,对一12x12x20之输入方块,利用50个5x5之滤波器执行卷积运算以产生50个8x8之输出方块,所执行之运算。
[0088] 图68A与图68B,整体称为图68,系一方块图,显示本发明对一12x12x20之输入,利用50个5x5之滤波器执行卷积运算以产生50个8x8 之输出,而不包含间隙输入/滤波器方块群组之另一实施例中,权重随机存取存储器内之滤波器方块群组之配置。
[0089] 图69系一虚拟程序代码,描述一非架构程序,在一具有N=2048个神经处理单元之神经网络单元上,搭配图64之数据随机存取存储器与图68之权重随机存取存储器之配置,对一12x12x20之输入方块,利用50个 5x5之滤波器执行卷积运算以产生50个8x8之输出方块,所执行之运算。
[0090] 图70系一方块图,显示本发明另一个支持多字距离转动运算之实施例之神经处理单元之一部分。
[0091] 图71系显示四个指令,描述神经网络单元之多字距离转动特性,此神经网络单元包含多个具有如图70所示之多路复用寄存器之神经处理单元。
[0092] 图72系一方块图,显示图1之一神经处理单元。
[0093] 图73系一方块图,显示神经网络单元执行运算所处于之一普通模式。
[0094] 图74系一方块图,显示神经网络单元执行运算可处于之一窄高 (narrow-tall)模式。
[0095] 图75系一方块图,详述图72之数据多路复用寄存器与权重多路复用寄存器,藉以在普通模式之外,还能支持图74之窄高模式。
[0096] 图76系一方块图,显示一写入多路复用器,藉以在普通模式之外,还能支持图74之窄高模式。
[0097] 图77系一方块图,显示神经网络单元执行运算可处于之一分割旋转器(split-rotator)模式。
[0098] 图78系一方块图,详述神经处理单元0与神经处理单元N/2内之图72之数据多路复用寄存器,以及神经处理单元J之一普通(generic)数据多路复用寄存器,藉以在普通模式外,还能支持图77之分割旋转器模式。
[0099] 图79系一方块图,显示N=4096个神经处理单元之多路复用寄存器,耦接作为单一个4096字之旋转器以选择性执行于普通模式,或做为两个2048 字之旋转器选择性执行于分割旋转器模式。
[0100] 图80系一方块图,显示神经网络单元执行运算可处于之一第二分割旋转器模式。
[0101] 图81系一方块图,详述神经处理单元0,神经处理单元N/4,神经处理单元N/2与神经处理单元3N/4内之图72之数据多路复用寄存器,藉以在普通模式外,还能支持图77与图80所示之第一与第二分割旋转器模式。
[0102] 图82系一方块图,显示N=4096个神经处理单元之多路复用寄存器,耦接作为单一个4096字之旋转器以选择性执行于普通模式,或做为两个2048 字之旋转器选择性执行于第一分割旋转器模式,或做为四个1024字之旋转器选择性执行于第二分割旋转器模式。
[0103] 图83系一方块图,显示神经网络单元执行运算可处于之一混合模式。
[0104] 图84系一方块图,详述图72之数据多路复用寄存器与权重多路复用寄存器,藉以在普通模式外,还能支持图83所示之混合模式。
[0105] 图85系一方块图,显示神经网络单元执行运算可处于之一窄高半转动(narrow-tall-half-rotate)模式。
[0106] 图86系一方块图,详述图72之数据多路复用寄存器与权重多路复用寄存器,藉以在普通模式外,还能支持图85所示之窄高半转动模式。
[0107] 图87系一方块图,显示神经网络单元执行运算可处于之一分割旋转器模式之另一实施例。
[0108] 图88系一方块图,详述神经处理单元N/4与神经处理单元3N/4(即神经处理单元1024与神经处理单元3072)内之图72之数据多路复用寄存器,以及神经处理单元J之一普通数据多路复用寄存器,藉以在普通模式外,还能支持图87之交替分割旋转器模式。
[0109] 图89系一方块图,显示N=4096个神经处理单元之多路复用寄存器,耦接作为单一个4096字之旋转器以选择性执行于普通模式,或做为两个2048 字之旋转器选择性执行于此交替分割旋转器模式。
[0110] 图90系一方块图,显示本发明一实施例之部分神经网络单元之实体配置。
[0111] 图91系一方块图,显示本发明另一实施例之部分神经网络单元之实体配置,此实施例系将神经处理单元阵列分裂为四个旋转器。

具体实施方式

[0112] 具有架构神经网络单元之处理器
[0113] 图1系显示一包含一神经网络单元(neural network unit,NNU)121之处理器100之方块示意图。如图中所示,此处理器100包含一指令攫取单元101,一指令快取102,一指令转译器104,一重命名单元106,多个保留站108,多个媒体寄存器118,多个通用寄存器116,前述神经网络单元121外之多个执行单元112与一存储器子系统114。
[0114] 处理器100系一电子装置,作为集成电路之中央处理单元。处理器100接收输入的数字数据,依据由存储器攫取之指令处理这些数据,并产生由指令指示之运算的处理结果作为其输出。此处理器100可用于一桌面计算机、行动装置、或平板计算机,并用于计算、字处理、多媒体显示与网络浏览等应用。此处理器100并可设置于一嵌入系统内,以控制各种包括设备、移动电话、智能电话、车辆、与工业用控制器之装置。中央处理器系透过对数据执行包括算术、逻辑与输入/输出等运算,以执行计算机程序(或称为计算机应用程序或应用程序)指令之电子电路(即硬件)。集成电路系一组制作于一小型半导体材料,通常是,之电子电路。集成电路也通常被用于表示芯片、微芯片或晶粒。
[0115] 指令攫取单元101控制由系统存储器(未图标)攫取架构指令103至指令快取102之运作。指令攫取单元101提供一攫取地址至指令快取102,以指定处理器100攫取至高速缓存102之架构指令字节之快取列的存储器地址。攫取地址之选定系基于处理器100之指令指针(未图标)的当前值或程序计数器。一般而言,程序计数器会依照指令大小循序递增,直到指令串流中出现例如分支、呼叫或返回之控制指令,或是发生例如中断、岔断(trap)、例外或错误等例外条件,而需要以如分支目标地址、返回地址或例外向量等非循序地址更新程序计数器。总而言之,程序计数器会因应执行单元112/121执行指令而进行更新。程序计数器亦可在侦测到例外条件时进行更新,例如指令转译器104遭遇到未被定义于处理器100之指令集架构之指令103。
[0116] 指令快取102系储存攫取自一个耦接至处理器100之系统存储器之架构指令103。这些架构指令103包括一移动至神经网络(MTNN)指令与一由神经网络移出(MFNN)指令,详如后述。在一实施例中,架构指令103是x86指令集架构之指令,并附加上MTNN指令与MFNN指令。在本揭露内容中,x86指令集架构处理器系理解为在执行相同机械语言指令之情况下,与 处理器在指令集架构层产生相同结果之处理器。不过,其他指令集架
构,例如,进阶精简指令集机器架构(ARM)、升阳(SUN)之可扩充处理器架构(SPARC)、或是增强精简指令集性能运算性能优化架构(PowerPC),亦可用于本发明之其他实施例。指令快取
102提供架构指令103至指令转译器104,以将架构指令103转译为微指令105。
[0117] 微指令105系提供至重命名单元106而最终由执行单元112/121执行。这些微指令105会实现架构指令。就一较佳实施例而言,指令转译器104包括一第一部分,用以将频繁执行以及/或是相对较不复杂之架构指令103转译为微指令 105。此指令转译器104并包括一第二部分,其具有一微码单元(未图标)。微码单元具有一微码存储器装载微码指令,以执行架构指令集中复杂与/或少用的指令。微码单元并包括一微序列发生器(microsequencer)提供一非架构微程序计数器(micro-PC)至微码存储器。就一较佳实施例而言,这些微指令系经由微转译器(未图示)转译为微指令105。选择器依据微码单元当前是否具有控制权,选择来自第一部分或第二部分之微指令105提供至重命名单元106。
[0118] 重命名单元106会将架构指令103指定之架构寄存器重命名为处理器100 之实体寄存器。就一较佳实施例而言,此处理器100包括一重排缓冲器(未图示)。重命名单元106会依照程序顺序将重排缓冲器之项目分配给各个微指令 105。如此即可使处理器100依据程序顺序撤除微指令105以及其相对应之架构指令103。在一实施例中,媒体寄存器118具有256位宽度,而通用寄存器116 具有64位宽度。在一实施例中,媒体寄存器118为x86媒体寄存器,例如先进向量扩充(AVX)寄存器。
[0119] 在一实施例中,重排缓冲器之各个项目具有储存空间以储存微指令105之结果。此外,处理器100包括一架构寄存器档案,此架构寄存器档案具有一实体寄存器对应于各个架构寄存器,如媒体寄存器118、通用寄存器116以及其他架构寄存器。(就一较佳实施例而言,举例来说,媒体寄存器118与通用寄存器116之大小不同,即可使用分开的寄存器档案对应至这两种寄存器。)对于微指令105中指定有一个架构寄存器之各个源操作数,重命名单元会利用写入架构寄存器之旧有微指令105中最新一个微指令之重排缓冲器目录,填入微指令105之源操作数字段。当执行单元112/121完成微指令105之执行,执行单元112/121会将其结果写入此微指令105之重排缓冲器项目。当微指令105撤除时,撤除单元(未图标)会将来自此微指令之重排缓冲器字段之结果写入实体寄存器档案之寄存器,此实体寄存器档案系关联于由此撤除微指令105所指定之架构目的寄存器。
[0120] 在另一实施例中,处理器100包括一实体寄存器档案,其具有之实体寄存器的数量多于架构寄存器的数量,不过,此处理器100不包括一架构寄存器档案,而且重排缓冲器项目内不包括结果储存空间。(就一较佳实施例而言,因为媒体寄存器118与通用寄存器116之大小不同,即可使用分开的寄存器档案对应至这两种寄存器。)此处理器100并包括一指标表,其具有各个架构寄存器之相对应指针。对于微指令105内指定有架构寄存器之各个操作数,重命名单元会利用一个指向实体寄存器档案内一自由寄存器之指针,填入微指令105 内之目的操作数字段。若是实体寄存器档案内不存在自由寄存器,重命名单元 106会暂时搁置管线。对于微指令105内指定有架构寄存器之各个源操作数,重命名单元会利用一个指向实体寄存器档案中,指派给写入架构寄存器之旧有微指令105中最新微指令之寄存器的指针,填入微指令105内之源操作数字段。当执行单元112/121完成执行微指令105,执行单元112/121会将结果写入实体寄存器档案中微指令105之目的操作数字段指向之一寄存器。当微指令105撤除时,撤除单元会将微指令105之目的操作数域值复制至关联于此撤除微指令 105指定之架构目的寄存器之指针表的指针。
[0121] 保留站108会装载微指令105,直到这些微指令完成发布至执行单元112/121 以供执行之准备。当一个微指令105之所有源操作数都可取用并且执行单元 112/121也可用于执行时,即为此微指令105完成发布之准备。执行单元112/121 系由重排缓冲器或前述第一实施例所述之架构寄存器档案,或是由前述第二实施例所述之实体寄存器档案接收寄存器源操作数。此外,执行单元112/121可直接透过结果传送总线(未图标)接收寄存器源操作数。此外,执行单元112/121 可以从保留站108接收微指令105所指定之立即操作数。MTNN与MFNN架构指令103包括一立即操作数以指定神经网络单元121所要执行之功能,而此功能系由MTNN与MFNN架构指令103转译产生之一个或多个微指令105所提供,详如后述。
[0122] 执行单元112包括一个或多个加载/储存单元(未图标),由存储器子系统114加载数据并且储存数据至存储器子系统114。就一较佳实施例而言,此存储器子系统114包括一存储器管理单元(未图标),此存储器管理单元可包括,例如多个转译查找(lookaside)缓冲器、一个表移动(tablewalk)单元、一个阶层一数据快取(与指令快取102)、一个阶层二统一快取与一个作为处理器100与系统存储器间之接口的总线接口单元。在一实施例中,图1之处理器100系以一多核处理器之多个处理核心之其中之一来表示,而此多核处理器系共享一个最后阶层高速缓存。执行单元112并可包括多个常值单元、多个媒体单元、多个浮点单元与一个分支单元。
[0123] 神经网络单元121包括一权重随机存取存储器(RAM)124、一数据随机存取存储器122、N个神经处理单元(NPU)126、一个程序存储器129、一个序列发生器128与多个控制与状态寄存器127。这些神经处理单元126在概念上系如同神经网络中之神经元之功能。权重随机存取存储器124、数据随机存取存储器122 与程序存储器129均可透过MTNN与MFNN架构指令103分别写入与读取。权重随机存取存储器124系排列为W列,每列N个权重字,数据随机存取存储器 122系排列为D列,每列N个数据字。各个数据字与各个权重字均为复数个位,就一较佳实施例而言,可以是8个位、9个位、12个位或16个位。各个数据字系作为网络中前一层之一神经元的输出值(有时以启动值表示),各个权重字系作为网络中关联于进入网络当前层之一神经元之一连结的权重。虽然在神经网络单元121之许多应用中,装载于权重随机存取存储器124之字或操作数实际上就是关联于进入一神经元之连结的权重,不过需要注意的是,在神经网络单元121之某些应用中,装载于权重随机存取存储器124之字并非权重,不过因为这些字是储存于权重随机存取存储器124中,所以仍然以“权重字”之用语表示。举例来说,在神经网络单元121之某些应用中,例如图24图26A 之卷积运算之范例或是图27至图
28之共源运作之范例,权重随机存取存储器124会装载权重以外之对象,例如数据矩阵(如影像画素数据)之元素。同样地,虽然在神经网络单元121之许多应用中,装载于数据随机存取存储器122之字或操作数实质上就是神经元之输出值或启动值,不过需要注意的是,在神经网络单元121之某些应用中,装载于数据随机存取存储器122之字并非如此,不过因为这些字是储存于数据随机存取存储器122中,所以仍然以“数据字”之用语表示。举例来说,在神经网络单元121之某些应用中,例如图24至图26A之卷积运算之范例,数据随机存取存储器122会装载非神经元之输出,例如卷积核之元素。
[0124] 在一实施例中,神经处理单元126与序列发生器128包括组合逻辑、定序逻辑、状态机器、或是其组合。架构指令(例如MFNN指令1500)会将状态寄存器127之内容加载其中一个通用寄存器116,以确认神经网络单元121之状态,如神经网络单元121已经从程序存储器129完成一个命令或是一个程序之运作,或是神经网络单元121可自由接收一个新的命令或开始一个新的神经网络单元程序。
[0125] 神经处理单元126之数量可依据需求增加,权重随机存起存储器124与数据随机存取存储器122之宽度与深度亦可随之调整进行扩张。就一较佳实施例而言,权重随机存取存储器124会大于数据随机存取存储器122,这是因为典型的神经网络层中存在许多链接,因而需要较大之储存空间储存关联于各个神经元的权重。本文揭露许多关于数据与权重字之大小、权重随机存取存储器124 与数据随机存取存储器122之大小、以及不同神经处理单元126数量之实施例。在一实施例中,神经网络单元121具有一个大小为64KB(8192位x64列)之数据随机存取存储器122,一个大小为2MB(8192位x2048列)之权重随机存取存储器124,以及512个神经处理单元126。此神经网络单元121是以台湾集成电路(TSMC)之16奈米制程制造,其所占面积大约是3.3毫米平方。
[0126] 序列发生器128系由程序存储器129攫取指令并执行,其执行之运作还包括产生地址与控制信号提供给数据随机存取存储器122、权重随机存取存储器 124与神经处理单元126。序列发生器128产生一存储器地址123与一读取命令提供给数据随机存取存储器122,藉以在D个列之N个数据字中选择其一提供给N个神经处理单元126。序列发生器128并会产生一存储器地址125与一读取命令提供给权重随机存取存储器124,藉以在W个列之N个权重字中选择其一提供给N个神经处理单元126。序列发生器128产生并提供给神经处理单元 
126之地址123,125的顺序即确定神经元间之“连结”。序列发生器128还会产生一存储器地址123与一写入命令提供给数据随机存取存储器122,藉以在D个列之N个数据字中选择其一由N个神经处理单元126进行写入。序列发生器128 还会产生一存储器地址125与一写入命令提供给权重随机存取存储器124,藉以在W个列之N个权重字中选择其一由N个神经处理单元126进行写入。序列发生器128还会产生一存储器地址131至程序存储器129以选择提供给序列发生器128之一神经网络单元指令,这部分在后续章节会进行说明。存储器地址131 系对应至程序计数器(未图示),序列发生器128通常是依据程序存储器129 之位置顺序使程序计数器递增,除非序列发生器128遭遇到一控制指令,例如一循环指令(请参照如图26A所示),在此情况下,序列发生器128会将程序计数器更新为此控制指令之目标地址。序列发生器128还会产生控制信号至神经处理单元126,指示神经处理单元126执行各种不同之运算或功能,例如起始化、算术/逻辑运算、转动/移位运算、启动函数、以及写回运算,相关之范例在后续章节(请参照如图34之微运算3418所示)会有更详细的说明。
[0127] N个神经处理单元126会产生N个结果字133,这些结果字133可被写回权重随机存取存储器124或数据随机存取存储器122之一个列。就一较佳实施例而言,权重随机存取存储器124与数据随机存取存储器122系直接耦接至N 个神经处理单元126。进一步来说,权重随机存取存储器124与数据随机存取存储器122系转属于这些神经处理单元126,而不分享给处理器100中其他的执行单元112,这些神经处理单元126能够持续地在每一个时频周期内从权重随机存取存储器124与数据随机存取存储器122之一或二者取得并完成一个列,就一较佳实施例而言,可采管线方式处理。在一实施例中,数据随机存取存储器122 与权重随机存取存储器124中的每一个都可以在每一个时频周期内提供8192个位至神经处理单元126。这8192个位可以视为512个16字节或是1024个8字节来进行处理,详如后述。
[0128] 由神经网络单元121处理之数据组大小并不受限于权重随机存取存储器124 与数据随机存取存储器122的大小,而只会受限于系统存储器的大小,这是因为数据与权重可在系统存储器与权重随机存取存储器124以及数据随机存取存储器122间透过MTNN与MFNN指令之使用(例如,透过媒体寄存器118)而移动。在一实施例中,数据随机存取存储器122系被赋予双埠,使能在由数据随机存取存储器122读取数据字或写入数据字至数据随机存取存储器122之同时,写入数据字至数据随机存取存储器122。另外,包括高速缓存在内之存储器子系统114之大型存储器阶层结构可提供非常大的数据带宽供系统存储器与神经网络单元121间进行数据传输。此外,就一较佳实施例而言,此存储器子系统114包括硬件数据预攫取器,追踪存储器之存取模式,例如由系统存储器加载之神经数据与权重,并对快取阶层结构执行数据预攫取以利于在传输至权重随机存取存储器124与数据随机存取存储器122之过程中达成高带宽与低延迟之传输。
[0129] 虽然本文之实施例中,由权重存储器提供至各个神经处理单元126之其中一个操作数系标示为权重,此用语常见于神经网络,不过需要理解的是,这些操作数也可以是其他与计算有关联之类型的数据,而其计算速度可透过这些装置加以提升。
[0130] 图2系显示图1之一神经处理单元126之方块示意图。如图中所示,此神经处理单元126之运作可执行许多功能或运算。尤其是,此神经处理单元 126可作为人工神经网络内之一神经元或节点进行运作,以执行典型之乘积累加功能或运算。也就是说,一般而言,神经网络单元126(神经元)系用以:(1) 从各个与其具有连结之神经元接收一输入值,此连结通常会但不必然是来自人工神经网络中之前一层;(2)将各个输出值乘上关联于其连结之一相对应权重值以产生一乘积;(3)将所有乘积加总以产生一总数;(4)对此总数执行一启动函数以产生神经元之输出。不过,不同于传统方式需要执行关联于所有连结输入之所有乘法运算并将其乘积加总,本发明之各个神经元在一给定之时频周期内可执行关联于其中一个连结输入之权重乘法运算并将其乘积与关联于该时点前之时频周期内所执行之链接输入之乘积的累加值相加(累加)。假定一共有M个连结连接至此神经元,在M个乘积加总后(大概需要M个时频周期的时间),此神经元会对此累加数执行启动函数以产生输出或结果。此方式之优点在于可减少所需之乘法器的数量,并且在神经元内只需要一个较小、较简单且更为快速之加法器电路(例如使用两个输入之加法器),而不需使用能够将所有连结输入之乘积加总或甚至对其中一子集合加总所需之加法器。此方式亦有利于在神经网络单元121内使用极大数量(N)之神经元(神经处理单元126),如此,在大约M个时频周期后,神经网络单元121就可产生此大数量(N)神经元之输出。最后,对于大量之不同连结输入,由这些神经元构成之神经网络单元121就能有效地作为一人工神经网络层执行。也就是说,若是不同层中M的数量有所增减,产生记忆胞输出所需之时频周期数也会相对应地增减,而资源(例如乘法器与累加器)会被充分利用。相较之下,传统设计对于较小之M值而言,会有某些乘法器与加法器之部分未能被利用。因此,因应神经网络单元之链接输出数,本文所述之实施例兼具弹性与效率之优点,而能提供极高的效能。
[0131] 神经处理单元126包括一寄存器205、一个双输入多路复用寄存器208、一算术逻辑单元(ALU)204、一累加器202、与一启动函数单元(AFU)212。寄存器 205由权重随机存取存储器124接收一权重字206并在一后续时频周期提供其输出203。多路复用寄存器208在两个输入207,211中选择其一储存于其寄存器并在一后续时频周期提供于其输出209。输入207接收来自数据随机存取存储器 122之数据字。另一个输入211则接收相邻神经处理单元126之输出209。图2所示之神经处理单元126系于图1所示之N个神经处理单元中标示为神经处理单元J。也就是说,神经处理单元J是这N个神经处理单元126之一代表例。就一较佳实施例而言,神经处理单元J之多路复用寄存器208的输入211系接收神经处理单元J-1之多路复用寄存器208之输出209,而神经处理单元J之多路复用寄存器208的输出209系提供给神经处理单元J+1之多路复用寄存器208 之输入211。如此,N个神经处理单元126之多路复用寄存器208即可共同运作,如同一N个字之旋转器或循环移位器,这部分在后续图3会有更详细的说明。多路复用寄存器208系利用一控制输入213控制这两个输入中哪一个会被多路复用寄存器208选择储存于其寄存器并于后续提供于输出209。
[0132] 算术逻辑单元204具有三个输入。其中一个输入由寄存器205接收权重字 203。另一个输入接收多路复用寄存器208之输出209。再另一个输入接收累加器202之输出217。此算术逻辑单元204会对其输入执行算术与/或逻辑运算以产生一结果提供于其输出。就一较佳实施例而言,算术逻辑单元204执行之算术与/或逻辑运算系由储存于程序存储器129之指令所指定。举例来说,图4 中的乘法累加指令指定一乘法累加运算,亦即,结果215会是累加器202数值 217与权重字203以及多路复用寄存器208输出209之数据字之乘积的加总。不过也可以指定其他运算,这些运算包括但不限于:结果215是多路复用寄存器输出209传递之数值;结果215是权重字203传递之数值;结果215是零值;结果215是累加器202数值217与权重203之加总;结果215是累加器202数值217与多路复用寄存器输出209之加总;结果215是累加器202数值217与权重203中的最大值;结果215是累加器202数值217与多路复用寄存器输出 209中的最大值。
[0133] 算术逻辑单元204提供其输出215至累加器202储存。算术逻辑单元204 包括一乘法器242对权重字203与多路复用寄存器208输出209之数据字进行乘法运算以产生一乘积246。在一实施例中,乘法器242系将两个16位操作数相乘以产生一个32位之结果。此算术逻辑单元204并包括一加法器244在累加器202之输出217加上乘积246以产生一总数,此总数即为储存于累加器202 之累加运算的结果215。在一实施例中,加法器244系在累加器202之一个41 位值217加上乘法器242之一个32位结果以产生一个41位结果。如此,在多个时频周期之期间内利用多路复用寄存器208所具有之旋转器特性,神经处理单元126即可达成神经网络所需之神经元之乘积加总运算。此算术逻辑单元204 亦可包括其他电路组件以执行其他如前所述之算术/逻辑运算。在一实施例中,第二加法器系在多路复用寄存器208输出209之数据字减去权重字203以产生一差值,随后加法器244会在累加器202之输出217加上此差值以产生一结果 215,此结果即为累加器202内之累加结果。如此,在多个时频周期之期间内,神经处理单元126就能达成差值加总之运算。就一较佳实施例而言,虽然权重字203与数据字209之大小相同(以位计),他们也可具有不同之二维点位置,详如后述。就一较佳实施例而言,乘法器242与加法器244系为整数乘法器与加法器,相较于使用浮点运算之算术逻辑单元,此算术逻辑单元204具有低复杂度、小型、快速与低耗能之优点。不过,在本发明之其他实施例中,算术逻辑单元204亦可执行浮点运算。
[0134] 虽然图2之算术逻辑单元204内只显示一个乘法器242与加法器244,不过,就一较佳实施例而言,此算术逻辑单元204还包括有其他组件以执行前述其他不同的运算。举例来说,此算术逻辑单元204可包括一比较器(未图示) 比较累加器202与一数据/权重字,以及一多路复用器(未图示)在比较器指定之两个数值中选择较大者(最大值)储存至累加器202。在另一个范例中,算术逻辑单元204包括选择逻辑(未图标),利用一数据/权重字来省略乘法器242,使加法器224在累加器202之数值217加上此数据/权重字以产生一总数储存至累加器202。这些额外的运算会在后续章节如图18至图29A有更详细的说明,而这些运算也有助于如卷积运算与共源运作之执行。
[0135] 启动函数单元212接收累加器202之输出217。启动函数单元212会对累加器202之输出执行一启动函数以产生图1之结果133。一般而言,人工神经网络之中介层之神经元内的启动函数可用来标准化乘积累加后之总数,尤其可以采用非线性之方式进行。为了“标准化”累加总数,当前神经元之启动函数会在连接当前神经元之其他神经元预期接收作为输入之数值范围内产生一结果值。(标准化后的结果有时会“启动”表示,在本文中,启动是当前节点之输出,而接收节点会将此输出乘上一关联于输出节点与接收节点间连结之权重以产生一乘积,而此乘积会与关联于此接收节点之其他输入连结的乘积累加。)举例来说,在接收/被连结神经元预期接收作为输入之数值介于0与1间之情况下,输出神经元会需要非线性地挤压与/或调整(例如向上移位以将负值转换为正值)超出0 与1之范围外的累加总数,使其落于此预期范围内。因此,启动函数单元212 对累加器202数值217执行之运算会将结果133带到一已知范围内。N个神经执行单元126之结果133都可被同时写回数据随机存取存储器122或权重随机存取存储器124。就一较佳实施例而言,启动函数单元212系用以执行多个启动函数,而例如来自控制寄存器127之一输入会在这些启动函数中选择其一执行于累加器202之输出217。这些启动函数可包括但不限于阶梯函数、校正函数、 S型函数、双曲正切函数与软加函数(也称为平滑校正函数)。软加函数之分析公式为f(x)=ln(1+ex),也就是1与ex之加总的自然对数,其中,“e”是欧拉数 (Euler’s number),x是此函数之输入217。就一较佳实施例而言,启动函数亦可包括一传递(pass-through)函数,直接传递累加器202数值217或其中一部分,详如后述。在一实施例中,启动函数单元212之电路会在单一个时频周期内执行启动函数。在一实施例中,启动函数单元212包括多个窗体,其接收接收累加值并输出一数值,对某些启动函数,如S型函数、双取正切函数、软加函数等,此数值会近似于真正的启动函数所提供之数值。
[0136] 就一较佳实施例而言,累加器202之宽度(以位计)系大于启动函数功能 212之输出133之宽度。举例来说,在一实施例中,此累加器之宽度为41位,以避免在累加至最多512个32位之乘积的情况下(这部分在后续章节如对应于图30处会有更详细的说明)损失精确度,而结果133之宽度为16位。在一实施例中,在后续时频周期中,启动函数单元212会传递累加器202输出217 之其他未经处理之部分,并且会将这些部分写回数据随机存取存储器122或权重随机存取存储器124,这部分在后续章节对应于图8处会有更详细的说明。如此即可将未经处理之累加器202数值透过MFNN指令载回媒体寄存器118,藉此,在处理器100之其他执行单元112执行之指令就可以执行启动函数单元 112无法执行之复杂启动函数,例如有名的软极大(softmax)函数,此函数也被称为标准化指数函数。在一实施例中,处理器100之指令集架构包括执行此指数函数之一指令,通常表示为ex或exp(x),此指令可由处理器
100之其他执行单元112使用以提升软极大启动函数之执行速度。
[0137] 在一实施例中,神经处理单元126系采管线设计。举例来说,神经处理单元126可包括算术逻辑单元204之寄存器,例如位于乘法器与加法器以及/或是算术逻辑单元204之其他电路间之寄存器,神经处理单元126还可包括一个装载启动函数功能212输出之寄存器。此神经处理单元126之其他实施例会在后续章节进行说明。
[0138] 图3系一方块图,显示利用图1之神经网络单元121之N个神经处理单元126之N个多路复用寄存器208,对于由图1之数据随机存取存储器122 取得之一列数据字207执行如同一N个字之旋转器(rotator)或循环移位器 (circular shifter)之运作。在图3之实施例中,N是512,因此,神经网络单元 121具有512个多路复用寄存器208,标示为0至511,分别对应至512个神经处理单元126。每个多路复用寄存器208会接收数据随机存取存储器122之D 个列之其中一个列上的相对应数据字207。也就是说,多路复用寄存器0会从数据随机存取存储器122列接收数据字0,多路复用寄存器1会从数据随机存取存储器122列接收数据字1,多路复用寄存器2会从数据随机存取存储器122列接收数据字2,依此类推,多路复用寄存器511会从数据随机存取存储器122列接收数据字511。此外,多路复用寄存器1会接收多路复用寄存器0之输出209作为其他输入211,多路复用寄存器2会接收多路复用寄存器1之输出
209作为其他输入211,多路复用寄存器3会接收多路复用寄存器2之输出209作为其他输入
211,依此类推,多路复用寄存器511会接收多路复用寄存器510之输出209 作为其他输入
211,而多路复用寄存器0会接收多路复用寄存器511之输出209 作为其他输入211。每个多路复用寄存器208都会接收一控制输入213以控制其选择数据字207或是循环输入211。在此运作之一模式中,控制输入213会在一第一时频周期内,控制每个多路复用寄存器208选择数据字207以储存至寄存器并于后续步骤提供给算术逻辑单元204,而在后续之时频周期内(如前述M-1 个时频周期),控制输入213会控制每个多路复用寄存器208选择循环输入211 以储存至寄存器并于后续步骤提供给算术逻辑单元204。
[0139] 虽然图3(以及后续之图7与图19)所描述之实施例中,多个神经处理单元126可用以将这些多路复用寄存器208/705之数值向右旋转,亦即由神经处理单元J朝向神经处理单元J+1移动,不过本发明并不限于此,在其他的实施例中(例如对应于图24至图26之实施例),多个神经处理单元126可用以将多路复用寄存器208/705之数值向左旋转,亦即由神经处理单元J朝向神经处理单元J-1移动。此外,在本发明之其他实施例中,这些神经处理单元126 可选择性地将多路复用寄存器208/705之数值向左或向右旋转,举例来说,此选择可由神经网络单元指令所指定。
[0140] 图4系一表格,显示一个储存于图1之神经网络单元121之程序存储器129并由该神经网络单元121执行之程序。如前所述,此范例程序系执行与人工神经网络之一层有关的计算。图4之表格显示有四个列与三个行。每一个列系对应于程序存储器129中标示于第一行之一地址。第二行指定相对应的指令,而第三行系指出关联于此指令之时频周期数。就一较佳实施例而言,在管线执行之实施例中,前述时频周期数系表示每指令时频周期值之有效的时频周期数,而非指令延迟。如图中所示,因为神经网络单元121具有管线执行的本质,每个指令均有一相关联之时频周期,位于地址2之指令是一个例外,此指令实际上自己会重复执行511次,因而需要511个时频周期,详如后述。
[0141] 所有的神经处理单元126会平行处理程序中的每个指令。也就是说,所有的N个神经处理单元126都会在同一个时频周期执行第一列之指令,所有的N 个神经处理单元126都会在同一个时频周期执行第二列之指令,依此类推。不过本发明并不限于此,在后续章节之其他实施例中,有些指令则是以部分平行部分序列之方式执行,举例来说,如图11之实施例所述,在多个神经处理单元126共享一个启动函数单元之实施例中,启动函数与位于地址3与4之输出指令即是以此方式执行。图4之范例中假定一个层具有512个神经元(神经处理单元126),而每个神经元具有512个来自前一层之512个神经元之连结输入,总共有256K个连结。每个神经元会从每个连结输入接收一个16位数据值,并将此16位数据值乘上一个适当的16位权重值。
[0142] 位于地址0之第一列(亦可指定至其他地址)会指定一初始化神经处理单元指令。此初始化指令会清除累加器202数值使之为零。在一实施例中,初始化指令亦可在累加器
202内加载数据随机存取存储器122或权重随机存取存储器124之一个列中,由此指令所指定之相对应之字。此初始化指令也会将配置值加载控制寄存器127,这部分在后续图29A与图29B会有更详细的说明。举例来说,可将数据字207与权重字209之宽度加载,供算术逻辑单元 204利用以确认电路执行之运算大小,此宽度也会影响储存于累加器202之结果 215。
在一实施例中,神经处理单元126包括一电路在算术逻辑单元204之输出 215储存于累加器
202前填满此输出215,而初始化指令会将一配置值加载此电路,此配置值会影响前述之填满运算。在一实施例中,也可在算术逻辑单元函数指令(如地址1之乘法累加指令)或输出指令(如地址4之写入起始函数单元输出指令)中如此指定,以将累加器202清除至零值。
[0143] 位于地址1之第二列系指定一乘法累加指令指示这512个神经处理单元126 从数据随机存取存储器122之一列加载一相对应之数据字以及从权重随机存取存储器124之一列加载一相对应之权重字,并且对此数据字输入207与权重字输入206执行一第一乘法累加运算,即加上初始化累加器202零值。进一步来说,此指令会指示序列发生器128在控制输入213产生一数值以选择数据字输入207。在图4之范例中,数据随机存取存储器122之指定列为列17,权重随机存取存储器124之指定列为列0,因此序列发生器会被指示输出数值17作为一数据随机存取存储器地址123,输出数值0作为一权重随机存取存储器地址 125。因此,来自数据随机存取存储器122之列17之512个数据字系提供作为 512个神经处理单元216之相对应数据输入207,而来自权重随机存取存储器124 之列0之512个权重字系提供作为512个神经处理单元216之相对应权重输入 206。
[0144] 位于地址2之第三列系指定一乘法累加旋转指令,此指令具有一计数其数值为511,以指示这512个神经处理单元126执行511次乘法累加运算。此指令指示这512个神经处理单元126将511次乘法累加运算之每一次运算中输入算术逻辑单元204之数据字209,作为从邻近神经处理单元126算起旋转值211。也就是说,此指令会指示序列发生器128在控制输入213产生一数值以选择旋转值211。此外,此指令会指示这512个神经处理单元126将511次乘法累加运算之每一次运算中之一相对应权重值加载权重随机存取存储器124之“下一”列。也就是说,此指令会指示序列发生器128将权重随机存取存储器地址125从前一个时频周期的数值增加一,在此范例中,指令之第一时频周期是列1,下一个时频周期就是列2,在下一个时频周期就是列3,依此类推,第511个时频周期就是列511。在这511个乘法累加运算中之每一个运算中,旋转输入211与权重字输入206之乘积会被加入累加器202之前一个数值。这512个神经处理单元 126会在511个时频周期内执行这511个乘法累加运算,每个神经处理单元126 会对于来自数据随机存取存储器122之列17之不同数据字以及关联于数据字之不同权重字执行一个乘法累加运算-也就是,相邻之神经处理单元126会在前一个时频周期对数据字执行运算,前述运算在概念上即为神经元之不同连结输入。此范例假设各个神经处理单元126(神经元)具有512个连结输入,因此牵涉到512个数据字与512个权重字之处理。在列2之乘法累加旋转指令重复最后一次执行后,累加器202内就会存放有这512个连结输入之乘积的加总。在一实施例中,神经处理单元126之指令集系包括一“执行”指令以指示算术逻辑单元204执行由初始化神经处理单元指令指定之一算术逻辑单元运算,例如图
29A之算术逻辑单元函数2926所指定者,而非对于各个不同类型之算术逻辑运算(例如前述之乘法累加、累加器与权重之最大值等)具有一独立的指令。
[0145] 位于地址3之第四列系指定一启动函数指令。此启动函数指令指示启动函数单元212对于累加器202数值执行所指定之启动函数以产生结果133。启动函数之实施例在后续章节会有更详细的说明。
[0146] 位于地址4之第五列系指定一写入启动函数单元输出指令,以指示这512 个神经处理单元216将其启动函数单元212输出作为结果133写回至数据随机存取存储器122之一列,在此范例中即列16。也就是说,此指令会指示序列发生器128输出数值16作为数据随机存取存储器地址123以及一写入命令(相对应于由地址1之乘法累加指令所指定之读取命令)。就一较佳实施例而言,因为管线执行之特性,写入启动函数单元输出指令可与其他指令同时执行,因此写入启动函数单元输出指令实际上可以在单一个时频周期内执行。
[0147] 就一较佳实施例而言,每个神经处理单元126系作为一管线,此管线具有各种不同功能组件,例如多路复用寄存器208(以及图7之多路复用寄存器 705)、算术逻辑单元204、累加器202、启动函数单元212、多路复用器802(请参照图8)、列缓冲器1104与启动函数单元1112(请参照图11)等,其中某些组件本身即可管线执行。除了数据字207与权重字206外,此管线还会从程序存储器129接收指令。这些指令会沿着管线流动并控制多种功能单元。在另一实施例中,此程序内不包含启动函数指令,而是由初始化神经处理单元指令指定执行于累加器202数值217之启动函数,指出被指定之启动函数之一数值系储存于一配置寄存器,供管线之启动函数单元212部分在产生最后的累加器202数值217后,也就是在地址2之乘法累加旋转指令重复最后一次执行后,加以利用。就一较佳实施例而言,为了节省耗能,管线之启动函数单元212 部分在写入启动函数单元输出指令到达前会处于不启动状态,在指令到达时,启动函数单元212会启动并对初始化指令指定之累加器202输出217执行启动函数。
[0148] 图5系显示神经网络单元121执行图4之程序之时序图。此时序图之每一列系对应至第一行指出之连续时频周期。其他行则是分别对应至这512个神经处理单元126中不同的神经处理单元126并指出其运算。图中仅显示神经处理单元0,1,511之运算以简化说明。
[0149] 在时频周期0,这512个神经处理单元126中的每一个神经处理单元126都会执行图4之初始化指令,在图5中即是将一零值指派给累加器202。
[0150] 在时频周期1,这512个神经处理单元126中的每一个神经处理单元126都会执行图4中地址1之乘法累加指令。如图中所示,神经处理单元0会将累加器202数值(即零)加上数据随机存取存储器122之列17之字0与权重随机存取存储器124之列0之字0之乘积;神经处理单元1会将累加器202数值(即零)加上数据随机存取存储器122之列17之字1与权重随机存取存储器124之列0之字1之乘积;依此类推,神经处理单元511会将累加器202数值(即零) 加上数据随机存取存储器122之列17之字511与权重随机存取存储器124之列 0之字511之乘积。
[0151] 在时频周期2,这512个神经处理单元126中的每一个神经处理单元126都会进行图4中地址2之乘法累加旋转指令之第一次执行。如图中所示,神经处理单元0会将累加器202数值加上由神经处理单元511之多路复用寄存器208 输出209接收之旋转数据字211(即由数据随机存取存储器122接收之数据字511)与权重随机存取存储器124之列1之字0之乘积;
神经处理单元1会将累加器202数值加上由神经处理单元0之多路复用寄存器208输出209接收之旋转数据字211(即由数据随机存取存储器122接收之数据字0)与权重随机存取存储器
124之列1之字1之乘积;依此类推,神经处理单元511会将累加器202 数值加上由神经处理单元510之多路复用寄存器208输出209接收之旋转数据字211(即由数据随机存取存储器
122接收之数据字510)与权重随机存取存储器124之列1之字511之乘积。
[0152] 在时频周期3,这512个神经处理单元126中的每一个神经处理单元126都会进行图4中地址2之乘法累加旋转指令之第二次执行。如图中所示,神经处理单元0会将累加器202数值加上由神经处理单元511之多路复用寄存器208 输出209接收之旋转数据字211(即由数据随机存取存储器122接收之数据字 510)与权重随机存取存储器124之列2之字0之乘积;神经处理单元1会将累加器202数值加上由神经处理单元0之多路复用寄存器208输出
209接收之旋转数据字211(即由数据随机存取存储器122接收之数据字511)与权重随机存取存储器124之列2之字1之乘积;依此类推,神经处理单元511会将累加器 202数值加上由神经处理单元510之多路复用寄存器208输出209接收之旋转数据字211(即由数据随机存取存储器122接收之数据字509)与权重随机存取存储器124之列2之字511之乘积。如同图5之省略标号显示,接下来509个时频周期会依此持续进行,直到时频周期512。
[0153] 在时频周期512,这512个神经处理单元126中的每一个神经处理单元126 都会进行图4中地址2之乘法累加旋转指令之第511次执行。如图中所示,神经处理单元0会将累加器202数值加上由神经处理单元511之多路复用寄存器208输出209接收之旋转数据字211(即由数据随机存取存储器122接收之数据字1)与权重随机存取存储器124之列511之字0之乘积;神经处理单元1会将累加器202数值加上由神经处理单元0之多路复用寄存器208输出209接收之旋转数据字211(即由数据随机存取存储器122接收之数据字2)与权重随机存取存储器124之列511之字1之乘积;依此类推,神经处理单元511会将累加器202数值加上由神经处理单元510之多路复用寄存器208输出209接收之旋转数据字211(即由数据随机存取存储器122接收之数据字0)与权重随机存取存储器124之列511之字511之乘积。在一实施例中需要多个时频周期从数据随机存取存储器122与权重随机存取存储器124读取数据字与权重字以执行图4中地址1之乘法累加指令;不过,数据随机存取存储器122、权重随机存取存储器124与神经处理单元126系采管线配置,如此在第一个乘法累加运算开始后(如图5之时频周期1所示),后续的乘法累加运算(如图5之时频周期2-512所示)就会开始在接续的时频周期内执行。就一较佳实施例而言,因应利用架构指令,如MTNN或MFNN指令(在后续图14与图15会进行说明),对于数据随机存取存储器122与/或权重随机存取存储器124之存取动作,或是架构指令转译出之微指令,这些神经处理单元126会短暂地搁置。
[0154] 在时频周期513,这512个神经处理单元126中的每一个神经处理单元126 之启动函数单元212都会执行图4中地址3之启动函数。最后,在时频周期 514,这512个神经处理单元126中的每一个神经处理单元126会透过将其结果 133写回数据随机存取存储器122之列16中之相对应字以执行图4中地址4 之写入启动函数单元输出指令,也就是说,神经处理单元0之结果133会被写入数据随机存取存储器122之字0,神经处理单元1之结果133会被写入数据随机存取存储器122之字1,依此类推,神经处理单元511之结果133会被写入数据随机存取存储器122之字511。对应于前述图5之运算之相对应方块图系显示于图6A。
[0155] 图6A系显示图1之神经网络单元121执行图4之程序之方块示意图。此神经网络单元121包括512个神经处理单元126、接收地址输入123之数据随机存取存储器122,与接收地址输入125之权重随机存取存储器124。在时频周期0的时候,这512个神经处理单元126会执行初始化指令。此运作在图中并未显示。如图中所示,在时频周期1的时候,列17之512个16位之数据字会从数据随机存取存储器122读出并提供至这512个神经处理单元126。在时频周期1至512之过程中,列0至列511之512个16位之权重字会分别从权重随机存取存储器122读出并提供至这512个神经处理单元126。在时频周期1的时候,这512个神经处理单元126会对加载之数据字与权重字执行其相对应之乘法累加运算。此运作在图中并未显示。在时频周期2至512之过程中,512个神经处理单元126之多路复用寄存器208会如同一个具有512个16位字之旋转器进行运作,而将先前由数据随机存取存储器122之列17加载之数据字转动至邻近之神经处理单元126,而这些神经处理单元126会对转动后之相对应数据字以及由权重随机存取存储器124加载之相对应权重字执行乘法累加运算。在时频周期513的时候,这
512个启动函数单元212会执行启动指令。此运作在图中并未显示。在时频周期514的时候,这512个神经处理单元126会将其相对应之512个16位结果133写回数据随机存取存储器122之列16。
[0156] 如图中所示,产生结果字(记忆胞输出)并写回数据随机存取存储器122 或权重随机存取存储器124需要之时频周期数大致为神经网络之当前层接收到的数据输入(链接)数量的平方根。举例来说,若是当前层具有512个神经元,而各个神经元具有512个来自前一层的连结,这些连结的总数就是256K,而产生当前层结果需要的时频周期数就会略大于512。因此,神经网络单元121在神经网络计算方面可提供极高的效能。
[0157] 图6B系一流程图,显示图1之处理器100执行一架构程序,以利用神经网络单元121执行关联于一人工神经网络之隐藏层之神经元之典型乘法累加启动函数运算之运作,如同由图4之程序执行之运作。图6B之范例系假定有四个隐藏层(标示于初始化步骤602之变量NUM_LAYERS),各个隐藏层具有512个神经元,各个神经元系连结前一层全部之512个神经元(透过图4之程序)。不过,需要理解的是,这些层与神经元之数量的选择系为说明本案发明,神经网络单元121当可将类似的计算应用于不同数量隐藏层之实施例,每一层中具有不同数量神经元之实施例,或是神经元未被全部连结之实施例。在一实施例中,对于这一层中不存在之神经元或是不存在之神经元连结的权重值会被设定为零。就一较佳实施例而言,架构程序会将第一组权重写入权重随机存取存储器124并启动神经网络单元121,当神经网络单元121正在执行关联于第一层之计算时,此架构程序会将第二组权重写入权重随机存取存储器124,如此,一旦神经网络单元121完成第一隐藏层之计算,神经网络单元 121就可以开始第二层之计算。如此,架构程序会往返于权重随机存取存储器 124之两个区域,以确保神经网络单元121可以被充分利用。此流程始于步骤 602。
[0158] 在步骤602,如图6A之相关章节所述,执行架构程序之处理器100系将输入值写入数据随机存取存储器122之当前神经元隐藏层,也就是写入数据随机存取存储器122之列17。这些值也可能已经位于数据随机存取存储器122 之列17作为神经网络单元121针对前一层之运算结果133(例如卷积、共源或输入层)。其次,架构程序会将变量N初始化为数值1。
变量N代表隐藏层中即将由神经网络单元121处理之当前层。此外,架构程序会将变量 NUM_LAYERS初始化为数值4,因为在本范例中有四个隐藏层。接下来流程前进至步骤604。
[0159] 在步骤604,处理器100将层1之权重字写入权重随机存取存储器124,例如图6A所示之列0至511。接下来流程前进至步骤606。
[0160] 在步骤606中,处理器100利用指定一函数1432以写入程序存储器129之 MTNN指令1400,将一乘法累加启动函数程序(如图4所示)写入神经网络单元121程序存储器129。处理器100随后利用一MTNN指令1400以启动神经网络单元程序,此指令系指定一函数1432开始执行此程序。接下来流程前进至步骤608。
[0161] 在决策步骤608中,架构程序确认变量N之数值是否小于NUM_LAYERS。若是,流程就会前进至步骤612;否则就前进至步骤614。
[0162] 在步骤612中,处理器100将层N+1之权重字写入权重随机存取存储器124,例如列512至1023。因此,架构程序就可以在神经网络单元121执行当前层之隐藏层计算时将下一层的权重字写入权重随机存取存储器124,藉此,在完成当前层之计算,也就是写入数据随机存取存储器122后,神经网络单元121就可以立刻开始执行下一层之隐藏层计算。接下来前进至步骤614。
[0163] 在步骤614中,处理器100确认正在执行之神经网络单元程序(就层1而言,在步骤606开始执行,就层2至4而言,则是在步骤618开始执行)是否已经完成执行。就一较佳实施例而言,处理器100会透过执行一MFNN指令1500 读取神经网络单元121状态寄存器127以确认是否已经完成执行。在另一实施例中,神经网络单元121会产生一中断,表示已经完成乘法累加启动函数层程序。接下来流程前进至决策步骤616。
[0164] 在决策步骤616中,架构程序确认变量N之数值是否小于NUM_LAYERS。若是,流程会前进至步骤618;否则就前进至步骤622。
[0165] 在步骤618中,处理器100会更新乘法累加启动函数程序,使能执行层N+1 之隐藏层计算。进一步来说,处理器100会将图4中地址1之乘法累加指令之数据随机存取存储器122列值,更新为数据随机存取存储器122中前一层计算结果写入之列(例如更新为列16)并更新输出列(例如更新为列15)。处理器100随后开始更新神经网络单元程序。在另一实施例中,图4之程序系指定地址4之输出指令之同一列作为地址1之乘法累加指令所指定之列(也就是由数据随机存取存储器122读取之列)。在此实施例中,输入数据字之当前列会被覆写(因为此列数据字已经被读入多路复用寄存器208并透过N字旋转器在这些神经处理单元
126间进行旋转,只要这列数据字不需被用于其他目的,这样的处理方式就是可以被允许的)。在此情况下,在步骤618中就不需要更新神经网络单元程序,而只需要将其重新启动。
接下来流程前进至步骤622。
[0166] 在步骤622中,处理器100从数据随机存取存储器122读取层N之神经网络单元程序之结果。不过,若是这些结果只会被用于下一层,架构程序就不须从数据随机存取存储器122读取这些结果,而可将其保留在数据随机存取存储器122供下一个隐藏层计算之用。接下来流程前进至步骤624。
[0167] 在决策步骤624中,架构程序确认变量N之数值是否小于NUM_LAYERS。若是,流程前进至步骤626;否则就终止此流程。
[0168] 在步骤626中,架构程序会将N的数值增加一。接下来流程会回到决策步骤608。
[0169] 如同图6B之范例所示,大致上每512个时频周期,这些神经处理单元 126就会对数据随机存取存储器122执行一次读取与一次写入(透过图4之神经网络单元程序之运算的效果)。此外,这些神经处理单元126大致上每个时频周期都会对权重随机存取存储器124进行读取以读取一列权重字。因此,权重随机存取存储器124全部的带宽都会因为神经网络单元121以混合方式执行隐藏层运算而被消耗。此外,假定在一实施例中具有一个写入与读取缓冲器,例如图17之缓冲器1704,神经处理单元126进行读取之同时,处理器100 对权重随机存取存储器124进行写入,如此缓冲器1704大致上每16个时频周期会对权重随机存取存储器124执行一次写入以写入权重字。因此,在权重随机存取存储器124为单一端口之实施例中(如同图17之相对应章节所述),大致上每16个时频周期这些神经处理单元126就会暂时搁置对权重随机存取存储器124进行之读取,而使缓冲器1704能够对权重随机存取存储器
124进行写入。不过,在双埠权重随机存取存储器124之实施例中,这些神经处理单元126 就不需被搁置。
[0170] 图7系显示图1之神经处理单元126之另一实施例之方块示意图。图7之神经处理单元126系类似于图2之神经处理单元126。不过,图7之神经处理单元126另外具有一个双输入多路复用寄存器705。此多路复用寄存器 705选择其中一个输入206或711储存于其寄存器,并于后续时频周期提供于其输出203。输入206从权重随机存取存储器124接收权重字。另一个输入711则是接收相邻神经处理单元126之第二多路复用寄存器705之输出203。就一较佳实施例而言,神经处理单元J之输入711会接收之排列在J-1之神经处理单元126 之多路复用寄存器705输出203,而神经处理单元J之输出203则是提供至排列在J+1之神经处理单元126之多路复用寄存器705之输入711。如此,N个神经处理单元126之多路复用寄存器705就可共同运作,如同一N个字之旋转器,其运作系类似于前述图3所示之方式,不过是用于权重字而非数据字。多路复用寄存器705系利用一控制输入213控制这两个输入中哪一个会被多路复用寄存器705选择储存于其寄存器并于后续提供于输出203。
[0171] 利用多路复用寄存器208与/或多路复用寄存器705(以及如图18与图23所示之其他实施例中之多路复用寄存器),实际上构成一个大型的旋转器将来自数据随机存取存储器122与/或权重随机存取存储器124之一列之数据/权重进行旋转,神经网络单元121就不需要在数据随机存取存储器122与/或权重随机存取存储器124间使用一个非常大的多路复用器以提供需要的数据/权重字至适当的神经网络单元。
[0172] 除启动函数结果外再写回累加器数值
[0173] 对于某些应用而言,让处理器100接收回(例如透过图15之MFNN指令接收至媒体寄存器118)未经处理之累加器202数值217,以提供给执行于其他执行单元112之指令执行计算,确实有其用处。举例来说,在一实施例中,启动函数单元212不针对软极大启动函数之执行进行配置以降低启动函数单元212之复杂度。所以,神经网络单元121会输出未经处理之累加器202数值217 或其中一个子集合至数据随机存取存储器122或权重随机存取存储器124,而架构程序在后续步骤可以由数据随机存取存储器122或权重随机存取存储器124 读取并对此未经处理之数值进行计算。不过,对于未经处理之累加器202数值 217之应用并不限于执行软极大运算,其他应用亦为本发明所涵盖。
[0174] 图8系显示图1之神经处理单元126之又一实施例之方块示意图。图8之神经处理单元126系类似于图2之神经处理单元126。不过,图8之神经处理单元126在启动函数单元212内包括一多路复用器802,而此启动函数单元212具有一控制输入803。累加器202之宽度(以位计)系大于数据字之宽度。多路复用器802具有多个输入以接收累加器202输出217之数据字宽度部分。在一实施例中,累加器202之宽度为41个位,而神经处理单元216可用以输出一个16位之结果字133;如此,举例来说,多路复用器802(或图30 之多路复用器3032与/或多路复用器3037)具有三个输入分别接收累加器202 输出217之位[15:0]、位[31:16]与位[47:32]。就一较佳实施例而言,非由累加器 202提供之输出位(例如位[47:41])会被强制设定为零值位。
[0175] 序列发生器128会在控制输入803产生一数值,控制多路复用器803在累加器202之字(如16位)中选择其一,以因应一写入累加器指令,例如后续图9中位于地址3至5之写入累加器指令。就一较佳实施例而言,多路复用器 802并具有一个或多个输入以接收启动函数电路(如图30中之组件3022, 3024,3026,3018,3014与3016)之输出,而这些启动函数电路产生之输出的宽度等于一个数据字。序列发生器128会在控制输入803产生一数值以控制多路复用器802在这些启动函数电路输出中选择其一,而非在累加器202之字中选择其一,以因应如图4中地址4之启动函数单元输出指令。
[0176] 图9系一表格,显示一个储存于图1之神经网络单元121之程序存储器129并由该神经网络单元121执行之程序。图9之范例程序系类似于图4之程序。尤其是,二者在地址0至2之指令完全相同。不过,图4中地址3 与4之指令在图9中则是由写入累加器指令取代,此指令会指示512个神经处理单元126将其累加器202输出217作为结果133写回数据随机存取存储器 122之三个列,在此范例中即列16至18。也就是说,此写入累加器指令会指示序列发生器128在第一时频周期输出一数值为16之数据随机存取存储器地址 123以及一写入命令,在第二时频周期输出一数值为17之数据随机存取存储器地址123以及一写入命令,在第三时频周期则是输出一数值为18之数据随机存取存储器地址123与一写入命令。就一较佳实施例而言,写入累加器指令之运行时间可以与其他指令重迭,如此,写入累加器指令就实际上就可以在这三个时频周期内执行,其中每一个时频周期会写入数据随机存取存储器122之一列。在一实施例中,用户指定启动函数2934之数值并输出(图29A)控制寄存器127之命令2956栏,以将累加器202之所需部份写入数据随机存取存储器 122或权重随机存取存储器124。另外,写入累加器指令可以选择性地写回累加器202之一子集,而非写回累加器202之全部内容。在一实施例中,可写回标准型之累加器202。这部分在后续对应于图29至图31之章节会有更详细的说明。
[0177] 图10系显示神经网络单元121执行图9之程序之时序图。图10之时序图类似于图5之时序图,其中时频周期0至512均为相同。不过,在时频周期513-515,这512个神经处理单元126中每一个神经处理单元126之启动函数单元212会执行图9中地址3至5之写入累加器指令之其中之一。尤其是,在时频周期513,512个神经处理单元126中每一个神经处理单元126会将累加器202输出217之位[15:0]作为其结果133写回数据随机存取存储器122之列16 中之相对应字;在时频周期514,512个神经处理单元126中每一个神经处理单元126会将累加器202输出217之位[31:16]作为其结果133写回数据随机存取存储器122之列17中之相对应字;而在时频周期515,512个神经处理单元126 中每一个神经处理单元126会将累加器
202输出217之位[40:32]作为其结果133 写回数据随机存取存储器122之列18中之相对应字。就一较佳实施例而言,位 [47:41]会被强制设定为零值。
[0178] 共享启动函数单元
[0179] 图11系显示图1之神经网络单元121之一实施例之方块示意图。在图11之实施例中,一个神经元系分成两部分,即启动函数单元部分与算术逻辑单元部分(此部分并包含移位寄存器部分),而各个启动函数单元部分系由多个算术逻辑单元部分共享。在图11中,算术逻辑单元部分系指神经处理单元126,而共享之启动函数单元部分则是指启动函数单元1112。相对于如图2之实施例,各个神经元则是包含自己的启动函数单元212。依此,在图11实施例之一范例中,神经处理单元126(算术逻辑单元部分)可包括图2 之累加器202、算术逻辑单元204、多路复用寄存器208与寄存器205,但不包括启动函数单元212。在图11之实施例中,神经网络单元121包括512个神经处理单元126,不过,本发明并不限于此。在图11之范例中,这512个神经处理单元126被分成64个群组,在图11中标示为群组0至63,而每个群组具有八个神经处理单元126。
[0180] 神经网络单元121并包括一列缓冲器1104与复数个共享之启动函数单元 1112,这些启动函数单元1112系耦接于神经处理单元126与列缓冲器1104间。列缓冲器1104之宽度(以位计)与数据随机存取存储器122或权重随机存取存储器124之一列相同,例如512个字。每一个神经处理单元126群组具有一个启动函数单元1112,亦即,每个启动函数单元1112系对应于一神经处理单元 126群组;如此,在图11之实施例中就存在64个启动函数单元1112对应至 64个神经处理单元126群组。同一个群组之八个神经处理单元126系共享对应于此群组之启动函数单元1112。本发明亦可应用于具有不同数量之启动函数单元以及每一个群组中具有不同数量之神经处理单元之实施例。举例来说,本发明亦可应用于每个群组中具有两个、四个或十六个神经处理单元126共享同一个启动函数单元1112之实施例。
[0181] 共享启动函数单元1112有助于缩减神经网络单元121之尺寸。尺寸缩减会牺牲效能。也就是说,依据共享率之不同,会需要使用额外的时频周期才能产生整个神经处理单元126阵列之结果133,举例来说,如以下图12所示,在 8:1之共享率的情况下就需要七个额外的时频周期。不过,一般而言,相较于产生累加总数所需之时频周期数(举例来说,对于每个神经元具有512个连结之一层,就需要512个时频周期),前述额外增加的时频周期数(例如
7)相当少。因此,共享启动函数单元对效能的影响非常小(例如,增加大约百分之一之计算时间),对于所能缩减神经网络单元121之尺寸而言会是一个合算的成本。
[0182] 在一实施例中,每一个神经处理单元126包括一启动函数单元212用以执行相对简单的启动函数,这些简单的启动函数单元212具有较小的尺寸而能被包含在每个神经处理单元126内;反之,共享的复杂启动函数单元1112则是执行相对复杂的启动函数,其尺寸会明显大于简单的启动函数单元212。在此实施例中,只有在指定复杂启动函数而需要由共享复杂启动函数单元1112执行之情况下,需要额外的时频周期,在指定的启动函数可以由简单启动函数单元212 执行之情况下,就不需要此额外的时频周期。
[0183] 图12与图13系显示图11之神经网络单元121执行图4之程序之时序图。图12之时序图系类似于图5之时序图,二者之时频周期0至 512均相同。不过,在时频周期513之运算并不相同,因为图11之神经处理单元126会共享启动函数单元1112;亦即,同一个群组之神经处理单元126会共享关联于此群组之启动函数单元1112,而图11即显示此共享架构。
[0184] 图13之时序图之每一列系对应至标示于第一行之连续时频周期。其他行则是分别对应至这64个启动函数单元1112中不同的启动函数单元1112并指出其运算。图中仅显示神经处理单元0,1,63之运算以简化说明。图13之时频周期系对应至图12之时频周期,但以不同方式显示神经处理单元126共享启动函数单元1112之运算。如图13所示,在时频周期0至512,这64个启动函数单元1112都是处于不启动状态,直到神经处理单元126执行初始化随机处理单元指令、乘法累加指令与乘法累加旋转指令。
[0185] 如图12与图13所示,在时频周期513,启动函数单元0(关联于群组0 之启动函数单元1112)开始对神经处理单元0之累加器202数值217执行所指定之启动函数,神经处理单元0即群组0中第一个神经处理单元216,而启动函数单元1112之输出将会被储存于列寄存器
1104之字0。同样在时频周期513,每个启动函数单元1112都会开始对相对应神经处理单元
216群组中第一个神经处理单元126之累加器202数值217执行所指定之启动函数。因此,如图13所示,在时频周期513,启动函数单元0开始对神经处理单元0之累加器202 执行所指定之启动函数以产生将会储存于列寄存器1104之字0之结果;启动函数单元1开始对神经处理单元8之累加器202执行所指定之启动函数以产生将会储存于列寄存器1104之字8之结果;
依此类推,启动函数单元63开始对神经处理单元504之累加器202执行所指定之启动函数以产生将会储存于列寄存器1104之字504之结果。
[0186] 在时频周期514,启动函数单元0(关联于群组0之启动函数单元1112)开始对神经处理单元1之累加器202数值217执行所指定之启动函数,神经处理单元1即群组0中第二个神经处理单元216,而启动函数单元1112之输出将会被储存于列寄存器1104之字1。同样在时频周期514,每个启动函数单元1112 都会开始对相对应神经处理单元216群组中第二个神经处理单元126之累加器 202数值217执行所指定之启动函数。因此,如图13所示,在时频周期514,启动函数单元0开始对神经处理单元1之累加器202执行所指定之启动函数以产生将会储存于列寄存器1104之字1之结果;启动函数单元1开始对神经处理单元9之累加器202执行所指定之启动函数以产生将会储存于列寄存器1104之字9之结果;依此类推,启动函数单元63开始对神经处理单元505之累加器202 执行所指定之启动函数以产生将会储存于列寄存器1104之字505之结果。这样的处理会持续到时频周期520,启动函数单元0(关联于群组0之启动函数单元 1112)开始对神经处理单元7之累加器202数值217执行所指定之启动函数,神经处理单元7即群组0中第八个(最后一个)神经处理单元216,而启动函数单元1112之输出将会被储存于列寄存器1104之字7。同样在时频周期520,每个启动函数单元1112都会开始对相对应神经处理单元216群组中第八个神经处理单元126之累加器202数值217执行所指定之启动函数。因此,如图13 所示,在时频周期520,启动函数单元0开始对神经处理单元7之累加器202执行所指定之启动函数以产生将会储存于列寄存器1104之字7之结果;启动函数单元1开始对神经处理单元15之累加器202执行所指定之启动函数以产生将会储存于列寄存器1104之字15之结果;依此类推,启动函数单元63开始对神经处理单元511之累加器202执行所指定之启动函数以产生将会储存于列寄存器 1104之字511之结果。
[0187] 在时频周期521,一旦这512个神经处理单元126之全部512个结果都已经产生并写入列寄存器1104,列寄存器1104就会开始将其内容写入数据随机存取存储器122或是权重随机存取存储器124。如此,每一个神经处理单元126群组之启动函数单元1112都执行图4中地址3之启动函数指令之一部分。
[0188] 如图11所示在算术逻辑单元204群组中共享启动函数单元1112之实施例,特别有助于搭配整数算术逻辑单元204之使用。这部分在后续章节如对应于图29A至图33处会有相关说明。
[0189] MTNN与MFNN架构指令
[0190] 图14系一方块示意图,显示一移动至神经网络(MTNN)架构指令1400 以及其对应于图1之神经网络单元121之部分之运作。此MTNN指令1400 包括一执行码字段1402、一src1字段1404、一src2字段、一gpr字段1408与一立即字段1412。此MTNN指令系一架构指令,亦即此指令系包含在处理器 100之指令集架构内。就一较佳实施例而言,此指令集架构会利用执行码字段 1402之一默认值,来区分MTNN指令1400与指令集架构内之其他指令。此 MTNN指令1400之执行码1402可包括常见于x86架构等之前置码(prefix),也可以不包括。
[0191] 立即字段1412提供一数值以指定一函数1432至神经网络单元121之控制逻辑1434。就一较佳实施例而言,此函数1432系作为图1之微指令105之一立即操作数。这些可以由神经网络单元121执行之函数1432包括写入数据随机存取存储器122、写入权重随机存取存储器124、写入程序存储器129、写入控制寄存器127、开始执行程序存储器129内之程序、暂停执行程序存储器129内之程序、完成执行程序存储器129内之程序后之注意请求(例如中断)、以及重设神经网络单元121,但不限于此。就一较佳实施例而言,此神经网络单元指令组会包括一个指令,此指令之结果指出神经网络单元程序已完成。另外,此神经网络单元指令集包括一个明确产生中断指令。就一较佳实施例而言,对神经网络单元121进行重设之运作包括将神经网络单元121中,除了数据随机存取存储器122、权重随机存取存储器124、程序存储器129之数据会维持完整不动外之其他部分,有效地强制回复至一重设状态(例如,清空内部状态机器并将其设定为闲置状态)。此外,内部寄存器,如累加器202,并不会受到重设函数之影响,而必须被明确地清空,例如使用图4中地址0之初始化神经处理单元指令。在一实施例中,函数1432可包括一直接执行函数,其第一来源寄存器包含一微运算(举例来说,可参照图34之微运算3418)。此直接执行函数指示神经网络单元121直接执行所指定之微运算。如此,架构程序就可以直接控制神经网络单元121执行运算,而非将指令写入程序存储器129并于后续指示神经网络单元121执行此位于程序存储器129内之指令或是透过MTNN 指令1400(或图15之MFNN指令1500)之执行。图14显示此写入数据随机存取存储器
122之函数之一范例。
[0192] 此gpr字段指定通用寄存器档案116内之一通用寄存器。在一实施例中,每个通用寄存器均为64位。此通用寄存器档案116提供所选定之通用寄存器之数值至神经网络单元121,如图中所示,而神经网络单元121系将此数值作为地址 1422使用。此地址1422会选择函数1432中指定之存储器之一列。就数据随机存取存储器122或权重随机存取存储器124而言,此地址1422会额外选择一数据块,其大小是此选定列中媒体寄存器之位置的两倍(如
512个位)。就一较佳实施例而言,此位置系位于一个512位边界。在一实施例中,多路复用器会选择地址1422(或是在以下描述之MFNN指令1400之情况下的地址1422)或是来自序列发生器128之地址123/125/131提供至数据随机存取存储器124/权重随机存取存储器124/程序存储器129。在一实施例中,数据随机存取存储器122 具有双端口,使神经处理单元126能够利用媒体寄存器118对此数据随机存取存储器122之读取/写入,同时读取/写入此数据随机存取存储器122。在一实施例中,为了类似的目的,权重随机存取存储器124亦具有双端口。
[0193] 图中之src1字段1404与src2字段1406均指定媒体寄存器档案之一媒体寄存器。在一实施例中,每个媒体寄存器118均为256位。媒体寄存器档案118 会将来自所选定之媒体寄存器之相连数据(例如512个位)提供至数据随机存取存储器122(或是权重随机存取存储器124或是程序存储器129)以写入地址 1422指定之选定列1428以及在选定列1428中由地址1422指定之位置,如图中所示。透过一系列MTNN指令1400(以及以下所述之MFNN指令1500)之执行,执行于处理器100之架构程序即可填满数据随机存取存储器122列与权重随机存取存储器124列并将一程序写入程序存储器129,例如本文所述之程序(如图4与图9所示之程序)可使神经网络单元121对数据与权重以非常快的速度进行运算,以完成此人工神经网络。在一实施例中,此架构程序系直接控制神经网络单元121而非将程序写入程序存储器129。
[0194] 在一实施例中,MTNN指令1400系指定一起始来源寄存器以及来源寄存器之数量,即Q,而非指定两个来源寄存器(如字段1404与1406所指定者)。这种形式之MTNN指令1400会指示处理器100将指定为起始来源寄存器之媒体寄存器118以及接下来Q-1个接续的媒体寄存器118写入神经网络单元121,也就是写入所指定之数据随机存取存储器122或权重随机存取存储器124。就一较佳实施例而言,指令转译器104会将MTNN指令1400转译为写入所有Q个所指定之媒体寄存器118所需数量之微指令。举例来说,在一实施例中,当MTNN 指令1400将寄存器MR4指定为起始来源寄存器并且Q为8,指令转译器104 就会将MTNN指令1400转译为四个微指令,其中第一个微指令系写入寄存器 MR4与MR5,第二个微指令系写入寄存器MR6与MR7,第三个微指令系写入寄存器MR8与MR9,而第四个微指令系写入寄存器MR10与MR11。在另一个实施例中,由媒体寄存器118至神经网络单元121之数据路径是1024位而非512 位,在此情况下,指令转译器104会将MTNN指令1400转译为两个微指令,其中第一个微指令系写入寄存器MR4至MR7,第二个微指令则是写入寄存器 MR8至MR11。本发明亦可应用于MFNN指令1500指定一起始目的寄存器以及目的寄存器之数量之实施例,而使每一个MFNN指令1500可以从数据随机存取存储器122或权重随机存取存储器124之一列读取大于单一媒体寄存器118 之数据块。
[0195] 图15系一方块示意图,显示一移动至神经网络(MTNN)架构指令1500 以及其对应于图1之神经网络单元121之部分之运作。此MFNN指令1500 包括一执行码字段1502、一dst字段1504、一gpr字段1508以及一立即字段1512。 MFNN指令系一架构指令,亦即此指令系包含于处理器100之指令集架构内。就一较佳实施例而言,此指令集架构会利用执行码字段1502之一默认值,来区分MFNN指令1500与指令集架构内之其他指令。此MFNN指令1500之执行码 1502可包括常见于x86架构等之前置码(prefix),也可以不包括。
[0196] 立即字段1512提供一数值以指定一函数1532至神经网络单元121之控制逻辑1434。就一较佳实施例而言,此函数1532系作为图1之微指令105之一立即操作数。这些神经网络单元121可以执行之函数1532包括读取数据随机存取存储器122、读取权重随机存取存储器124、读取程序存储器129、以及读取状态寄存器127,但不限于此。图15之范例系显示读取数据随机存取存储器 122之函数1532。
[0197] 此gpr字段1508指定通用寄存器档案116内之一通用寄存器。此通用寄存器档案116提供所选定之通用寄存器之数值至神经网络单元121,如图中所示,而神经网络单元121系将此数值作为地址1522并以类似于图14之地址1422 之方式进行运算,藉以选择函数
1532中指定之存储器之一列。就数据随机存取存储器122或权重随机存取存储器124而言,此地址1522会额外选择一数据块,其大小即为此选定列中媒体寄存器(如256个位)之位置。
就一较佳实施例而言,此位置系位于一个256位边界。
[0198] 此dst字段1504系于一媒体寄存器档案118内指定一媒体寄存器。如图中所示,媒体寄存器档案118系将来自数据随机存取存储器122(或权重随机存取存储器124或程序存储器129)之数据(如256位)接收至选定的媒体寄存器,此数据系读取自数据接收中地址1522指定之选定列1528以及选定列1528中地址1522指定之位置。
[0199] 神经网络单元内部随机存取存储器之端口配置
[0200] 图16系显示图1之数据随机存取存储器122之一实施例之方块示意图。此数据随机存取存储器122包括一存储器阵列1606、一读取端口1602与一写入埠1604。存储器阵列1606系装载数据字,就一较佳实施例而言,这些资料系排列成如前所述D个列之N个字之阵列。在一实施例中,此存储器阵列1606 包括一个由64个平排列之静态随机存取记忆胞构成之阵列,其中每个记忆胞具有128位之宽度以及64位之高度,如此即可提供一个64KB之数据随机存取存储器122,其宽度为8192位并且具有64列,而此数据随机存取存储器122所使用之晶粒面积大致为0.2平方毫米。不过,本发明并不限于此。
[0201] 就一较佳实施例而言,写入埠1602系以多路复用方式耦接至神经处理单元 126以及媒体寄存器118。进一步来说,这些媒体寄存器118可以透过结果总线耦接至读取端口,而结果总线也用于提供数据至重排缓冲器与/或结果传送总线以提供志其他执行单元112。这些神经处理单元126与媒体寄存器118系共享此读取端口1602,以对数据随机存取存储器122进行读取。又,就一较佳实施例而言,写入埠1604亦是以多路复用方式耦接至神经处理单元126以及媒体寄存器118。这些神经处理单元126与媒体寄存器118系共享此写入埠
1604,以写入此数据随机存取存储器122。如此,媒体寄存器118就可以在神经处理单元 126对数据随机存取存储器122进行读取之同时,写入数据随机存取存储器122,而神经处理单元126也就可以在媒体寄存器118正在对数据随机存取存储器122 进行读取之同时,写入数据随机存取存储器122。这样的进行方式可以提升效能。举例来说,这些神经处理单元126可以读取数据随机存取存储器122(例如持续执行计算),而此同时,媒体寄存器118可以将更多数据字写入数据随机存取存储器122。在另一范例中,这些神经处理单元126可以将计算结果写入数据随机存取存储器122,而此同时,媒体寄存器118则可以从数据随机存取存储器 122读取计算结果。在一实施例中,神经处理单元126可以将一列计算结果写入数据随机存取存储器122,同时还从数据随机存取存储器122读取一列数据字。在一实施例中,存储器阵列1606系配置于存储器区块(bank)内。在神经处理单元126存取数据随机存取存储器122的时候,所有的存储器区块都会被启动来存取存储器阵列1606之一完整列;不过,在媒体寄存器118存取数据随机存取存储器122的时候,只有所指定的存储器区块会被启动。在一实施例中,每个存储器区块之宽度均为128位,而媒体寄存器118之宽度则是256位,如此,举例来说,每次存取媒体寄存器118就需要启动两个存储器区块。在一实施例中,这些埠1602/
1604之其中之一为读取/写入埠。在一实施例中,这些埠 1602/1604都是读取/写入埠。
[0202] 让这些神经处理单元126具备如本文所述之旋转器之能力的优点在于,相较于为了确保神经处理单元126可被充分利用而使架构程序得以持续提供数据至数据随机存取存储器122并且在神经处理单元126执行计算之同时,从数据随机存取存储器122取回结果所需要之存储器阵列,此能力有助于减少数据随机存取存储器122之存储器阵列1606的列数,因而可以缩小尺寸。
[0203] 内部随机存取存储器缓冲器
[0204] 图17系显示图1之权重随机存取存储器124与一缓冲器1704之一实施例之方块示意图。此权重随机存取存储器124包括一存储器阵列1706与一端口1702。此存储器阵列1706系装载权重字,就一较佳实施例而言,这些权重字系排列成如前所述W个列之N个字之阵列。在一实施例中,此存储器阵列1706 包括一个由128个水平排列之静态随机存取记忆胞构成之阵列,其中每个记忆胞具有64位之宽度以及2048位之高度,如此即可提供一个2MB之权重随机存取存储器124,其宽度为8192位并且具有2048列,而此权重随机存取存储器 124所使用之晶粒面积大致为2.4平方毫米。不过,本发明并不限于此。
[0205] 就一较佳实施例而言,此埠1702系以多路复用方式耦接至神经处理单元126 与缓冲器1704。这些神经处理单元126与缓冲器1704系透过此埠1702读取并写入权重随机存取存储器124。缓冲器1704并耦接至图1之媒体寄存器118,如此,媒体寄存器118即可透过缓冲器1704读取并写入权重随机存取存储器124。此方式之优点在于,当神经处理单元126正在读取或写入权重随机存取存储器 124的时候,媒体寄存器118还可以写入缓冲器118或是从缓冲器118读取(在较佳之情况下系搁置这些神经处理单元126,不过若是神经处理单元126正在执行,就必须避免存取权重随机存取存储器124)。此方式可以提升效能,特别是因为媒体寄存器118对于权重随机存取存储器124之读取与写入相对上明显小于神经处理单元126对于权重随机存取存储器124之读取与写入。举例来说,在一实施例中,神经处理单元126一次读取/写入8192个位(一列),不过,媒体寄存器118之宽度仅为256位,而每个MTNN指令1400仅写入两个媒体寄存器118,即512位。因此,在架构程序执行十六个MTNN指令1400以填满缓冲器1704之情况下,神经处理单元126与存取权重随机存取存储器124之架构程序间发生冲突的时间会少于大致全部时间之百分之六。在另一实施例中,指令转译器104将一个MTNN指令1400转译为两个微指令105,而每个微指令会将单一个数据寄存器118写入缓冲器
1704,如此,神经处理单元126与架构程序在存取权重随机存取存储器124时产生冲突之频率还会进一步减少。
[0206] 在包含缓冲器17034之实施例中,利用架构程序写入权重随机存取存储器 124需要多个MTNN指令1400。一个或多个MTNN指令1400指定一函数1432 以写入缓冲器1704中指定之数据块,随后一MTNN指令1400指定一函数1432 指示神经网络单元121将缓冲器1704之内容写入权重随机存取存储器124之一选定列。单一个数据块之大小为媒体寄存器118之位数的两倍,而这些数据块会自然地排列于缓冲器1704中。在一实施例中,每个指定函数1432以写入缓冲器1704指定数据块之MTNN指令1400系包含一位掩码(bitmask),其具有位对应至缓冲器1704之各个数据块。来自两个指定之来源寄存器118之数据系被写入缓冲器1704之数据块中,在位掩码内之对应位为被设定位之各个数据块。此实施例有助于权重随机存取存储器124之一列存储器在重复数据值之情形。举例来说,为了将缓冲器1704(以及接下去之权重随机存取存储器之一列)归零,程序设计者可以将零值加载来源寄存器并且设定位掩码之所有位。此外,位掩码也可以让程序设计者仅写入缓冲器1704中之选定数据块,而使其他数据块维持其先前之数据状态。
[0207] 在包含缓冲器1704之实施例中,利用架构程序读取权重随机存取存储器124 需要多个MFNN指令1500。初始的MFNN指令1500指定一函数1532将权重随机存取单元124之一指定列加载缓冲器1704,随后一个或多个MFNN指令 1500指定一函数1532将缓冲器1704之一指定数据块读取至目的寄存器。单一个数据块之大小即为媒体寄存器118之位数,而这些数据块会自然地排列于缓冲器1704中。本发明之技术特征亦可适用于其他实施例,如权重随机存取存储器124具有多个缓冲器1704,透过增加神经处理单元126执行时架构程序之可存取数量,以进一步减少神经处理单元126与架构程序间因存取权重随机存取存储器124所产生之冲突,而增加在神经处理单元126不须存取权重随机存取存储器124之时频周期内,改由缓冲器1704进行存取之可能性。
[0208] 图16系描述一双端口数据随机存取存储器122,不过,本发明并不限于此。本发明之技术特征亦可适用于权重随机存取存储器124亦为双端口设计之其他实施例。此外,图17中描述一缓冲器搭配权重随机存取存储器124使用,不过,本发明并不限于此。本发明之技术特征亦可适用于数据随机存取存储器122具有一个类似于缓冲器1704之相对应缓冲器之实施例。
[0209] 可动态配置之神经处理单元
[0210] 图18系显示图1之一可动态配置之神经处理单元126之方块示意图。图18之神经处理单元126系类似于图2之神经处理单元126。不过,第十八图之神经处理单元126系可动态配置以运作于两个不同配置之其中之一。在第一个配置中,图18之神经处理单元126之运作系类似于图2之神经处理单元126。也就是说,在第一个配置中,在此标示为“宽的”配置或“单一个”配置,神经处理单元126之算术逻辑单元204对单一个宽的数据字以及单一个宽的权重字(例如16个位)执行运算以产生单一个宽的结果。相较之下,在第二个配置中,即本文标示为“窄的”配置或“双数”配置,神经处理单元126会对两个窄的数据字以及两个窄的权重字(例如8个位)执行运算分别产生两个窄的结果。在一实施例中,神经处理单元126之配置(宽或窄)系由初始化神经处理单元指令(例如位于前述图20中地址0之指令)达成。另外,此配置也可以由一个具有函数1432指定来设定神经处理单元设定之配置(宽或窄)之MTNN 指令来达成。就一较佳实施例而言,程序存储器129指令或确定配置(宽或窄) 之MTNN指令会填满配置寄存器。举例来说,配置寄存器之输出系提供给算术逻辑单元204、启动函数单元212以及产生多路复用寄存器控制信号213之逻辑。基本上,图18之神经处理单元126之组件与图2中相同编号之组件会执行类似的功能,可从中取得参照以了解图18之实施例。以下系针对图18之实施例包含其与图2之不同处进行说明。
[0211] 图18之神经处理单元126包括两个寄存器205A与205B、两个三输入多路复用寄存器208A与208B、一个算术逻辑单元204、两个累加器202A与202B、以及两个启动函数单元212A与212B。寄存器205A/205B分别具有图2之寄存器205之宽度之一半(如8个位)。寄存器
205A/205B分别从权重随机存取存储器124接收一相对应之窄权重字206A/B206(例如8个位)并将其输出 203A/203B在一后续时频周期提供至算术逻辑单元204之操作数选择逻辑
1898。神经处理单元126处于宽配置的时候,寄存器205A/205B就会一起运作以接收来自权重随机存取存储器124之一宽权重字206A/206B(例如16个位),类似于图2之实施例中的寄存器205;神经处理单元126处于窄配置的时候,寄存器205A/205B实际上就会是独立运作,各自接收来自权重随机存取存储器124 之一窄权重字206A/206B(例如8个位),如此,神经处理单元126实际上就相当于两个窄的神经处理单元各自独立运作。不过,不论神经处理单元126之配置态样为何,权重随机存取存储器124之相同输出位都会耦接并提供至寄存器 
205A/205B。举例来说,神经处理单元0之寄存器205A接收到字节0、神经处理单元0之寄存器
205B接收到字节1、神经处理单元1之寄存器205A接收到字节2、神经处理单元1之寄存器
205B接收到字节3、依此类推,神经处理单元511之寄存器205B就会接收到字节1023。
[0212] 多路复用寄存器208A/208B分别具有图2之寄存器208之宽度之一半(如 8个位)。多路复用寄存器208A会在输入207A、211A与1811A中选择一个储存至其寄存器并在后续时频周期由输出209A提供,多路复用寄存器208B会在输入207B、211B与1811B中选择一个储存至其寄存器并在后续时频周期由输出209B提供至操作数选择逻辑1898。输入207A从数据随机存取存储器122接收一窄数据字(例如8个位),输入207B从数据随机存取存储器122接收一窄数据字。当神经处理单元126处于宽配置的时候,多路复用寄存器208A/208B 实际上就会是一起运作以接收来自数据随机存取存储器122之一宽数据字 207A/207B(例如16个位),类似于图2之实施例中的多路复用寄存器208;神经处理单元126处于窄配置的时候,多路复用寄存器208A/208B实际上就会是独立运作,各自接收来自数据随机存取存储器122之一窄数据字207A/207B (例如8个位),如此,神经处理单元126实际上就相当于两个窄的神经处理单元各自独立运作。不过,不论神经处理单元126之配置态样为何,数据随机存取存储器122之相同输出位都会耦接并提供至多路复用寄存器208A/208B。举例来说,神经处理单元0之多路复用寄存器208A接收到字节0、神经处理单元 0之多路复用寄存器208B接收到字节1、神经处理单元1之多路复用寄存器208A 接收到字节2、神经处理单元1之多路复用寄存器208B接收到字节3、依此类推,神经处理单元511之多路复用寄存器208B就会接收到字节1023。
[0213] 输入211A接收邻近之神经处理单元126之多路复用寄存器208A之输出 209A,输入211B接收邻近之神经处理单元126之多路复用寄存器208B之输出 209B。输入1811A接收邻近神经处理单元126之多路复用寄存器208B之输出 209B,而输入1811B接收邻近神经处理单元126之多路复用寄存器208A之输出209A。图18所示之神经处理单元126系属于图1所示之N个神经处理单元126之其中之一并标示为神经处理单元J。也就是说,神经处理单元J是这 N个神经处理单元之一代表例。就一较佳实施例而言,神经处理单元J之多路复用寄存器
208A输入211A会接收范例J-1之神经处理单元126之多路复用寄存器208A输出209A,而神经处理单元J之多路复用寄存器208A输入1811A会接收范例J-1之神经处理单元126之多路复用寄存器208B输出209B,并且神经处理单元J之多路复用寄存器208A输出209A会同时提供至范例J+1之神经处理单元126之多路复用寄存器208A输入211A以及范例J之神经处理单元
126 之多路复用寄存器208B输入211B;神经处理单元J之多路复用寄存器208B之输入211B会接收范例J-1之神经处理单元126之多路复用寄存器208B输出209B,而神经处理单元J之多路复用寄存器208B之输入1811B会接收范例J之神经处理单元126之多路复用寄存器208A输出209A,并且,神经处理单元J之多路复用寄存器208B之输出209B会同时提供至范例J+1之神经处理单元126之多路复用寄存器208A输入1811A以及范例J+1之神经处理单元126之多路复用寄存器208B输入211B。
[0214] 控制输入213控制多路复用寄存器208A/208B中之每一个,从这三个输入中选择其一储存至其相对应之寄存器,并在后续步骤提供至相对应之输出209A/209B。当神经处理单元126被指示要从数据随机存取存储器122加载一列时(例如图20中地址1之乘法累加指令,详如后述),无论此神经处理单元126是处于宽配置或是窄配置,控制输入213会控制多路复用寄存器 208A/208B中之每一个多路复用寄存器,从数据随机存取存储器122之选定列之相对应窄字中选择一相对应之窄数据字207A/207B(如8位)。
[0215] 当神经处理单元126接收指示需要对先前接收之数据列数值进行旋转时(例如图20中地址2之乘法累加旋转指令,详如后述),若是神经处理单元126 是处于窄配置,控制输入213就会控制多路复用寄存器208A/208B中每一个多路复用寄存器选择相对应之输入
1811A/1811B。在此情况下,多路复用寄存器 208A/208B实际上会是独立运作而使神经处理单元126实际上就如同两个独立的窄神经处理单元。如此,N个神经处理单元126之多路复用寄存器208A与 208B共同运作就会如同一2N个窄字之旋转器,这部分在后续对应于图19 处有更详细的说明。
[0216] 当神经处理单元126接收指示需要对先前接收之资料列数值进行旋转时,若是神经处理单元126是处于宽配置,控制输入213就会控制多路复用寄存器 208A/208B中每一个多路复用寄存器选择相对应输入211A/211B。在此情况下,多路复用寄存器208A/208B会共同运作而实际上就好像这个神经处理单元126 是单一个宽神经处理单元126。如此,N个神经处理单元126之多路复用寄存器 208A与208B共同运作就会如同一N个宽字之旋转器,类似对应于图3所描述之方式。
[0217] 算术逻辑单元204包括操作数选择逻辑1898、一个宽乘法器242A、一个窄乘法器242B、一个宽双输入多路复用器1896A,一个窄双输入多路复用器1896B,一个宽加法器244A与一个窄加法器244B。实际上,此算术逻辑单元204可理解为包括操作数选择逻辑、一个宽算术逻辑单元204A(包括前述宽乘法器242A、前述宽多路复用器1896A与前述宽加法器
244A)与一个窄算术逻辑单元204B (包括前述窄乘法器242B、前述窄多路复用器1896B与前述窄加法器244B)。就一较佳实施例而言,宽乘法器242A可将两个宽字相乘,类似于图2之乘法器242,例如一个16位乘16位之乘法器。窄乘法器242B可将两个窄字相乘,例如一个8位乘
8位之乘法器以产生一个16位之结果。神经处理单元126处于窄配置时,透过操作数选择逻辑1898之协助,即可充分利用宽乘法器242A,将其作为一个窄乘法器使两个窄字相乘,如此神经处理单元126就会如同两个有效运作之窄神经处理单元。就一较佳实施例而言,宽加法器244A会将宽多路复用器1896A之输出与宽累加器202A之输出217A相加已产生一总数215A供宽累加器202A使用,其运作系类似于图2之加法器244。窄加法器244B会将窄多路复用器
1896B之输出与窄累加器202B输出217B相加以产生一总数 215B供窄累加器202B使用。在一实施例中,窄累加器202B具有28位之宽度,以避免在进行多达1024个16位乘积之累加运算时会丧失准确度。神经处理单元126处于宽配置时,窄乘法器244B、窄累加器202B与窄启动函数单元212B 最好是处于不启动状态以降低能量耗损。
[0218] 操作数选择逻辑1898会从209A、209B、203A与203B中选择操作数提供至算术逻辑单元204之其他组件,详如后述。就一较佳实施例而言,操作数选择逻辑1898也具有其他功能,例如执行带符号数值数据字与权重字之符号延展。举例来说,若是神经处理单元126是处于窄配置,操作数选择逻辑1898会将窄数据字与权重字之符号延展至宽字之宽度,然后才提供给宽乘法器242A。类似地,若是算术逻辑单元204接受指示要传递一个窄数据/权重字(利用宽多路复用器1896A跳过宽乘法器242A),操作数选择逻辑1898会将窄数据字与权重字之符号延展至宽字之宽度,然后才提供给宽加法器244A。就一较佳实施例而言,此执行符号延展功能之逻辑亦显示于图2之神经处理单元126之算术逻辑运算204之内部。
[0219] 宽多路复用器1896A接收宽乘法器242A之输出与来自操作数选择逻辑 1898之一操作数,并从这些输入中选择其一提供给宽加法器244A,窄多路复用器1896B接收窄乘法器242B之输出与来自操作数选择逻辑1898之一操作数,并从这些输入中选择其一提供给窄加法器244B。
[0220] 操作数选择逻辑1898会依据神经处理单元126之配置以及算术逻辑单元 204将要执行之算术与/或逻辑运算提供操作数,此算术/逻辑运算系依据神经处理单元126执行之指令所指定之函数来决定。举例来说,若是指令指示算术逻辑单元204执行一乘法累加运算而神经处理单元126系处于宽配置,操作数选择逻辑1898就将输出209A与209B串接构成之一宽字提供至宽乘法器242A之一输入,而将输出203A与203B串接构成之一宽字提供至另一输入,而窄乘法器242B则是不启动,如此,神经处理单元126之运作就会如同单一个类似于图2之神经处理单元126之宽神经处理单元126。不过,若是指令指示算术逻辑单元执行一乘法累加运算并且神经处理单元126是处于窄配置,操作数选择逻辑1898就将一延展后或扩张后版本之窄数据字209A提供至宽乘法器242A之一输入,而将延展后版本之窄权重字203A提供至另一输入;此外,操作数选择逻辑1898会将窄数据字209B提供至窄乘法器242B之一输入,而将窄权重字 203B提供至另一输入。若是窄字带有符号,操作数选择逻辑1898就会对窄字进行符号延展,以达成如前所述对窄字进行延展或扩张之运算,不过,若是窄字不带有符号,操作数选择逻辑1898就会在窄字加入上方零值位。
[0221] 在另一范例中,若是神经处理单元126处于宽配置并且指令指示算术逻辑单元204执行一权重字之累加运算,宽乘法器242A就会被跳过,而操作数选择逻辑1898就会将输出203A与203B串接提供至宽多路复用器1896A以提供给宽加法器244A。不过,若是神经处理单元126处于窄配置并且指令指示算术逻辑单元204执行一权重字之累加运算,宽乘法器242A就会被跳过,而操作数选择逻辑1898就会将一延展后版本之输出203A提供至宽多路复用器
1896A以提供给宽加法器244A;此外,窄乘法器242B会被跳过,操作数选择逻辑1898会将延展后版本之输出203B提供至窄多路复用器1896B以提供给窄加法器244B。
[0222] 在另一范例中,若是神经处理单元126处于宽配置并且指令指示算术逻辑单元204执行一数据字之累加运算,宽乘法器242A就会被跳过,而操作数选择逻辑1898就会将输出209A与209B串接提供至宽多路复用器1896A以提供给宽加法器244A。不过,若是神经处理单元126处于窄配置并且指令指示算术逻辑单元204执行一数据字之累加运算,宽乘法器242A就会被跳过,而操作数选择逻辑1898就会将一延展后版本之输出209A提供至宽多路复用器
1896A以提供给宽加法器244A;此外,窄乘法器242B会被跳过,操作数选择逻辑1898会将延展后版本之输出209B提供至窄多路复用器1896B以提供给窄加法器244B。权重/数据字之累加计算有助于平均运算,平均运算可用如图像处理在内之某些人工神经网络应用之共源(pooling)层。
[0223] 就一较佳实施例而言,神经处理单元126还包括一第二宽多路复用器(未图示),用以跳过宽加法器244A,以利于将宽配置下之一宽数据/权重字或是窄配置下之一延展后之窄数据/权重字加载宽累加器202A,以及一第二窄多路复用器(未图示),用以跳过窄加法器244B,以利于将窄配置下之一窄数据/权重字加载窄累加器202B。就一较佳实施例而言,此算术逻辑单元204还包括宽与窄之比较器/多路复用器组合(未图标),此比较器/多路复用器组合系接收相对应之累加器数值217A/217B与相对应之多路复用器1896A/1896B输出,藉以在累加器数值217A/217B与一数据/权重字209A/209B/203A/203B间选择最大值,某些人工神经网络应用之共源(pooling)层系使用此运算,这部分在后续章节,例如对应于图27与图28处。会有更详细的说明。此外,操作数选择逻辑1898 系用以提供数值零之操作数(作为零值之附加或是用以清除累加器),并提供数值一之操作数(用于乘一之乘法运算)。
[0224] 窄启动函数单元212B接收窄累加器202B之输出217B并对其执行一启动函数以产生一窄结果133B,宽启动函数单元212A接收宽累加器202A之输出 217A并对其执行一启动函数以产生一宽结果133B。神经处理单元126处于窄配置时,宽启动函数单元212A会依此配置理解累加器202A之输出217A并对其执行一启动函数以产生一窄结果133,如8位,这部分在后续章节如对应于图29A至图30处有更详细的说明。
[0225] 如前所述,单一个神经处理单元126在处于窄配置时实际上可以作为两个窄神经处理单元来运作,因此,对于较小的字而言,相较于宽配置时,大致上可以提供多达两倍的处理能力。举例来说,假定神经网络层具有1024个神经元,而每个神经元从前一层接收1024个窄输入(并具有窄权重字),如此就会产生一百万个连结。对于具有512个神经处理单元126之神经网络单元121而言,在窄配置下(相当于1024个窄神经处理单元),虽然处理的是窄字而非宽字,不过其所能处理之链接数可以达到宽配置之四倍(一百万个连结对上256K个连结),而所需的时间大致为一半(约1026个时频周期对上514个时频周期)。
[0226] 在一实施例中,图18之动态配置神经处理单元126包括类似于多路复用寄存器208A与208B之三输入多路复用寄存器以取代寄存器205A与205B,以构成一旋转器,处理由权重随机存取存储器124接收之权重字列,此运作部分类似于图7之实施例所描述之方式但应用于图18所述之动态配置中。
[0227] 图19系一方块示意图,显示依据图18之实施例,利用图1之神经网络单元之N个神经处理单元126之2N个多路复用寄存器208A/208B,对于由图1之数据随机存取存储器取得之一列数据字207执行如同一旋转器之运作。在图19之实施例中,N是512,神经处理单元121具有1024个多路复用寄存器208A/208B,标示为0至511,分别对应至512个神经处理单元126以及实际上1024个窄神经处理单元。神经处理单元126内之两个窄神经处理单元分别标示为A与B,在每个多路复用寄存器208中,其相对应之窄神经处理单元亦加以标示。进一步来说,标示为0之神经处理单元126之多路复用寄存器 208A系标示为0-A,标示为0之神经处理单元126之多路复用寄存器208B系标示为0-B,标示为1之神经处理单元126之多路复用寄存器208A系标示为1-A,标示为1之神经处理单元126之多路复用寄存器208B系标示为1-B,标示为511 之神经处理单元126之多路复用寄存器208A系标示为511-A,而标示为511之神经处理单元126之多路复用寄存器208B系标示为511-B,其数值亦对应至后续图21所述之窄神经处理单元。
[0228] 每个多路复用寄存器208A在数据随机存取存储器122之D个列之其中一列中接收其相对应的窄数据字207A,而每个多路复用寄存器208B在数据随机存取存储器122之D个列之其中一列中接收其相对应的窄数据字207B。也就是说,多路复用寄存器0-A接收数据随机存取存储器122列之窄数据字0,多路复用寄存器0-B接收数据随机存取存储器122列之窄数据字1,多路复用寄存器1-A接收数据随机存取存储器122列之窄数据字2,多路复用寄存器1-B接收数据随机存取存储器122列之窄数据字3,依此类推,多路复用寄存器511-A接收数据随机存取存储器122列之窄数据字1022,而多路复用寄存器511-B则是接收数据随机存取存储器122列之窄数据字1023。此外,多路复用寄存器1-A接收多路复用寄存器0-A之输出
209A作为其输入211A,多路复用寄存器1-B接收多路复用寄存器0-B之输出209B作为其输入
211B,依此类推,多路复用寄存器511-A 接收多路复用寄存器510-A之输出209A作为其输入
211A,多路复用寄存器 511-B接收多路复用寄存器510-B之输出209B作为其输入211B,并且多路复用寄存器0-A接收多路复用寄存器511-A之输出209A作为其输入211A,多路复用寄存器0-B接收多路复用寄存器511-B之输出209B作为其输入211B。每个多路复用寄存器208A/
208B都会接收控制输入213以控制其选择数据字 207A/207B或是旋转后输入211A/211B或是旋转后输入1811A/1811B。最后,多路复用寄存器1-A接收多路复用寄存器0-B之输出209B作为其输入1811A,多路复用寄存器1-B接收多路复用寄存器1-A之输出209A作为其输入
1811B,依此类推,多路复用寄存器511-A接收多路复用寄存器510-B之输出209B作为其输入
1811A,多路复用寄存器511-B接收多路复用寄存器511-A之输出209A 作为其输入1811B,并且多路复用寄存器0-A接收多路复用寄存器511-B之输出209B作为其输入1811A,多路复用寄存器0-B接收多路复用寄存器0-A之输出209A作为其输入1811B。每个多路复用寄存器
208A/208B都会接收控制输入 213以控制其选择数据字207A/207B或是旋转后输入211A/
211B或是旋转后输入1811A/1811B。在一运算模式中,在第一时频周期,控制输入213会控制每个多路复用寄存器208A/208B选择数据字207A/207B储存至寄存器供后续提供至算术逻辑单元204;而在后续时频周期(例如前述之M-1时频周期),控制输入213会控制每个多路复用寄存器208A/208B选择旋转后输入1811A/1811B储存至寄存器供后续提供至算术逻辑单元204,这部分在后续章节会有更详细的说明。
[0229] 图20系一表格,显示一个储存于图1之神经网络单元121之程序存储器129并由该神经网络单元121执行之程序,而此神经网络单元121具有如图18之实施例所示之神经处理单元126。图20之范例程序系类似于图4之程序。以下系针对其差异进行说明。位于地址0之初始化神经处理单元系指令指定神经处理单元126将会进入窄配置。此外,如图中所示,位于地址2 之乘法累加旋转指令系指定一数值为1023之计数值并需要1023个时频周期。这是因为图20之范例中假定在一层中实际上具有1024个窄(如8位)神经元(即神经处理单元),每个窄神经元具有1024个来自前一层之1024个神经元之连结输入,因此总共有1024K个连结。每个神经元从每个连结输入接收一个8位数据值并将此8位数据值乘上一个适当的8位权重值。
[0230] 图21系显示一神经网络单元121执行图20之程序之时序图,此神经网络单元121具有如图18所示之神经处理单元126执行于窄配置。图21之时序图系类似于图5之时序图。以下系针对其差异进行说明。
[0231] 在图21之时序图中,这些神经处理单元126会处于窄配置,这是因为位于地址0之初始化神经处理单元指令将其初始化为窄配置。所以,这512 个神经处理单元126实际上运作起来就如同1024个窄神经处理单元(或神经元),这1024个窄神经处理单元在字段内系以神经处理单元0-A与神经处理单元0-B (标示为0之神经处理单元126之两个窄神经处理单元),神经处理单元1-A 与神经处理单元1-B(标示为1之神经处理单元126之两个窄神经处理单元),依此类推直到神经处理单元511-A与神经处理单元511-B(标示为511之神经处理单元126之两个窄神经处理单元),加以指明。为简化说明,图中仅显示窄神经处理单元0-A、0-B与511-B之运算。因为位于地址2之乘法累加旋转指令所指定之计数值为1023,而需要
1023个时频周期进行运作因此,图21之时序图之列数包括多达1026个时频周期。
[0232] 在时频周期0,这1024个神经处理单元之每一个都会执行图4之初始化指令,即图5所示指派零值至累加器202之运作。
[0233] 在时频周期0,这1024个窄神经处理单元之每一个都会执行图20中位于地址1之乘法累加指令。如图中所示,窄神经处理单元0-A将累加器202A数值(即零)加上数据随机存取单元122之列17窄字0与权重随机存取单元124 之列0窄字0之乘积;窄神经处理单元0-B将累加器202B数值(即零)加上数据随机存取单元122之列17窄字1与权重随机存取单元124之列0窄字1之乘积;依此类推直到窄神经处理单元511-B将累加器202B数值(即零)加上数据随机存取单元122之列17窄字1023与权重随机存取单元124之列0窄字1023 之乘积。
[0234] 在时频周期2,这1024个窄神经处理单元之每一个都会执行图20中位于地址2之乘法累加旋转指令之第一次循环。如图中所示,窄神经处理单元0-A 将累加器202A数值217A加上由窄神经处理单元511-B之多路复用寄存器208B 输出209B所接收之旋转后窄数据字1811A(也就是由数据随机存取存储器122 所接收之窄数据字1023)与权重随机存取单元
124之列1窄字0之乘积;窄神经处理单元0-B将累加器202B数值217B加上由窄神经处理单元
0-A之多路复用寄存器208A输出209A所接收之旋转后窄数据字1811B(也就是由数据随机存取存储器122所接收之窄数据字0)与权重随机存取单元124之列1窄字1之乘积;依此类推,直到窄神经处理单元511-B将累加器202B数值217B加上由窄神经处理单元511-A之多路复用寄存器208A输出209A所接收之旋转后窄数据字1811B(也就是由数据随机存取存储器122所接收之窄数据字1022)与权重随机存取单元124之列1窄字1023之乘积。
[0235] 在时频周期3,这1024个窄神经处理单元之每一个都会执行图20中位于地址2之乘法累加旋转指令之第二次循环。如图中所示,窄神经处理单元0-A 将累加器202A数值217A加上由窄神经处理单元511-B之多路复用寄存器208B 输出209B所接收之旋转后窄数据字1811A(也就是由数据随机存取存储器122 所接收之窄数据字1022)与权重随机存取单元
124之列2窄字0之乘积;窄神经处理单元0-B将累加器202B数值217B加上由窄神经处理单元
0-A之多路复用寄存器208A输出209A所接收之旋转后窄数据字1811B(也就是由数据随机存取存储器122所接收之窄数据字1023)与权重随机存取单元124之列2窄字 1之乘积;依此类推,直到窄神经处理单元511-B将累加器202B数值217B加上由窄神经处理单元511-A之多路复用寄存器208A输出209A所接收之旋转后窄数据字1811B(也就是由数据随机存取存储器
122所接收之窄数据字1021) 与权重随机存取单元124之列2窄字1023之乘积。如图21所示,此运算会在后续1021个时频周期持续进行,直到以下所述之时频周期1024。
[0236] 在时频周期1024,这1024个窄神经处理单元之每一个都会执行图20中位于地址2之乘法累加旋转指令之第1023次循环。如图中所示,窄神经处理单元0-A将累加器202A数值217A加上由窄神经处理单元511-B之多路复用寄存器208B输出209B所接收之旋转后窄数据字1811A(也就是由数据随机存取存储器122所接收之窄数据字1)与权重随机存取单元124之列1023窄字0之乘积;窄神经处理单元0-B将累加器202B数值217B加上由窄神经处理单元
0-A 之多路复用寄存器208A输出209A所接收之旋转后窄数据字1811B(也就是由数据随机存取存储器122所接收之窄数据字2)与权重随机存取单元124之列 1023窄字1之乘积;依此类推,直到窄神经处理单元511-B将累加器202B数值 217B加上由窄神经处理单元511-A之多路复用寄存器208A输出209A所接收之旋转后窄数据字1811B(也就是由数据随机存取存储器122所接收之窄数据字0) 与权重随机存取单元124之列1023窄字1023之乘积。
[0237] 在时频周期1023,这1024个窄神经处理单元中之每一个之启动函数单元 212A/212B会执行图20中位于地址3之启动函数指令。最后,在时频周期 1026,这1024个窄神经处理单元中之每一个会将其窄结果133A/133B写回数据随机存取存储器122之列16中之相对应窄字,以执行图20中位于地址4之写入启动函数单元指令。亦即,神经处理单元0-A之窄结果133A会被写入数据随机存取存储器122之窄字0,神经处理单元0-B之窄结果133B会被写入数据随机存取存储器122之窄字1,依此类推,直到神经处理单元511-B之窄结果 133B会被写入数据随机存取存储器122之窄字1023。图22系以方块图显示前述对应于图21之运算。
[0238] 图22系显示图1之神经网络单元121之方块示意图,此神经网络单元121具有如图18所示之神经处理单元126以执行图20之程序。此神经网络单元121包括512个神经处理单元126,即1024个窄神经处理单元,数据随机存取存储器122,以及权重随机存取存储器124,数据随机存取存储器 122系接收其地址输入123,权重随机存取存储器124系接收其地址输入125。虽然图中并未显示,不过,在时频周期0,这1024个窄神经处理单元都会执行图20之初始化指令。如图中所示,在时频周期1,列17之1024个8位数据字会从数据随机存取存储器
122读出并提供至这1024个窄神经处理单元。在时频周期1至1024,列0至1023之1024个8位权重字会分别从权重随机存取存储器124读出并提供至这1024个窄神经处理单元。虽然图中并未显示,不过,在时频周期1,这1024个窄神经处理单元会对加载之数据字与权重字执行其相对应之乘法累加运算。在时频周期2至1024,这1024个窄神经处理单元之多路复用寄存器208A/208B之运作系如同一个1024个8位字之旋转器,会将先前加载数据随机存取存储器122之列17之数据字旋转至邻近之窄神经处理单元,而这些窄神经处理单元会对相对应之旋转后数据字以及由权重随机存取存储器 124加载之相对应窄权重字执行乘法累加运算。虽然图中并未显示,在时频周期 1025,这1024个窄启动函数单元212A/212B会执行启动指令。在时频周期1026,这1024个窄神经处理单元会将其相对应之1024个8位结果133A/
133B写回数据随机存取存储器122之列16。
[0239] 由此可以发现,相较于图2之实施例,图18之实施例让程序设计者具有弹性可以选择使用宽数据与权重字(如16位)以及窄数据与权重字(如8 位)执行计算,以因应特定应用下对于准确度的需求。从一个面向来看,对于窄数据之应用而言,图18之实施例相较于图2之实施例可提供两倍的效能,但必须增加额外的窄组件(例如多路复用寄存器208B、寄存器205B、窄算术逻辑单元204B、窄累加器202B、窄启动函数单元212B)作为代价,这些额外的窄组件会使神经处理单元126增加约50%之面积。
[0240] 三模神经处理单元
[0241] 图23系显示图1之一可动态配置之神经处理单元126之另一实施例之方块示意图。图23之神经处理单元126不但可用于宽配置与窄配置,还可用以一第三种配置,在此称为“漏斗(funnel)”配置。图23之神经处理单元126系类似于图18之神经处理单元126。不过,图
18中之宽加法器 244A在图23之神经处理单元126中系由一个三输入宽加法器2344A所取代,此三输入宽加法器2344A接收一第三加数2399,其为窄多路复用器1896B 之输出之一延伸版本。具有图23之神经处理单元之神经网络单元所执行之程序系类似于图20之程序。不过,其中位于地址0之初始化神经处理单元指令会将这些神经处理单元126初始化为漏斗配置,而非窄配置。此外,位于地址2之乘法累加旋转指令之计数值为511而非1023。
[0242] 处于漏斗配置时,神经处理单元126之运作系类似于处于窄配置,当执行如图20中地址1之乘法累加指令时,神经处理单元126会接收两个窄数据字207A/207B与两个窄权重字206A/206B;宽乘法器242A会将数据字209A与权重字203A相乘以产生宽多路复用器1896A选择之乘积246A;窄乘法器242B 会将数据字209B与权重字203B相乘以产生窄多路复用器1896B选择之乘积246B。不过,宽加法器2344A会将乘积246A(由宽多路复用器1896A选择) 以及乘积246B/2399(由宽多路复用器1896B选择)都与宽累加器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会将乘积246A (由宽多路复用器1896A选择)以及乘积246B/2399(由宽多路复用器1896B 选择)都与宽累加器202A输出217A相加,而窄加法器244B与窄累加器202B 如前述则是不启动。最后,处于漏斗配置而执行如图20中地址
3之启动函数指令时,宽启动函数单元212A会对结果总数215A执行启动函数以产生一窄结果133A,而窄启动函数单元212B则是不启动。如此,只有标示为A之窄神经处理单元会产生窄结果133A,标示为B之窄神经处理单元所产生之窄结果 133B则是无效。因此,写回结果之列(如图20中地址4之指令所指示之列 16)会包含空洞,这是因为只有窄结果133A有效,窄结果133B则是无效。因此,在概念上,每个时频周期内,每个神经元(图23之神经处理单元) 会执行两个链接数据输入,即将两个窄数据字乘上其相对应之权重并将这两个乘积相加,相较之下,图2与图18之实施例在每个时频周期内只执行一个链接数据输入。
[0243] 在图23之实施例中可以发现,产生并写回数据随机存取存储器122 或权重随机存取存储器124之结果字(记忆胞输出)之数量是所接收数据输入 (链接)数量之平方根的一半,而结果之写回列具有空洞,即每隔一个窄字结果就是无效,更精确来说,标示为B之窄神经处理单元结果不具意义。因此,图23之实施例对于具有连续两层之神经网络特别有效率,举例来说,第一层具有之神经元数量为第二层之两倍(例如第一层具有1024个神经元充分连接至第二层之512个神经元)。此外,其他的执行单元122(例如媒体单元,如 x86高级向量扩展单元)在必要时,可对一分散结果列(即具有空洞)执行合并运算(pack operation)以使其紧密(即不具空洞)。后续当神经处理单元121在执行其他关联于数据随机存取存储器122与/或权重随机存取存储器124之其他列之计算时,即可将此处理后之数据列用于计算。
[0244] 混合神经网络单元运算:卷积与共源运算能力
[0245] 本发明实施例所述之神经网络单元121的优点在于,此神经网络单元121 能够同时以类似于一个协处理器执行自己内部程序之方式运作以及以类似于一个处理器之处理单元执行所发布之架构指令(或是由架构指令转译出之微指令)。架构指令是包含在具有神经网络单元121之处理器所执行之架构程序内。如此,神经网络单元121即可以混合方式运作,而能维持神经处理单元121之高利用率。举例来说,图24至图26系显示神经网络单元121执行卷积运算之运作,其中,神经网络单元系被充分利用,图27至图28系显示神经网络单元121执行共源运算之运作。卷积层、共源层以及其他数字数据计算之应用,例如图像处理(如边缘侦测、锐利化、模糊化、辨识/分类)需要使用到这些运算。不过,神经处理单元121之混合运算并不限于执行卷积或共源运算,此混合特征亦可用于执行其他运算,例如图4至图13所述之传统神经网络乘法累加运算与启动函数运算。也就是说,处理器100(更精确地说,保留站108) 会发布MTNN指令1400与MFNN指令1500至神经网络单元121,因应此发布之指令,神经网络单元121会将数据写入存储器122/124/129并将结果从被神经网络单元121写入之存储器122/124中读出,在此同时,为了执行处理器100(透过MTNN1400指令)写入程序存储器129之程序,神经网络单元121会读取并写入存储器122/124/129。
[0246] 图24系一方块示意图,显示由图1之神经网络单元121使用以执行一卷积运算之数据结构之一范例。此方块图包括一卷积核2402、一数据阵列 2404、以及图1之数据随机存取存储器122与权重随机存取存储器124。就一较佳实施例而言,数据阵列2404(例如对应于影像画素)系装载于连接至处理器100之系统存储器(未图示)并由处理器100透过执行MTNN指令1400加载神经网络单元121之权重随机存取存储器124。卷积运算系将一第一阵列在一第二阵列进行加权迭加,此第二阵列即为本文所述之卷积核。如本文所述,卷积核系一系数矩阵,这些系数亦可称为权重、参数、元素或数值。就一较佳实施例而言,此卷积核2042系处理器100所执行之架构程序之静态数据。
[0247] 此数据阵列2404系一个数据值之二维阵列,而每个数据值(例如影像画素值)的大小是数据随机存取存储器122或权重随机存取存储器124之字的尺寸 (例如16位或8位)。在此范例中,数据值为16位字,神经网络单元121系配置有512个宽配置之神经处理单元126。此外,在此实施例中,神经处理单元 126包括多路复用寄存器以接收来自权重随机存取存储器124之权重字206,例如图7之多路复用寄存器705,藉以对由权重随机存取存储器124接收之一列数据值执行集体旋转器运算,这部分在后续章节会有更详细的说明。在此范例中,数据阵列2404系一个2560行X1600列之画素阵列。如图中所示,当架构程序将数据阵列2404与卷积核2402进行卷积计算时,数据阵列2402会被分为 20个数据块,而每个数据块分别是
512x400之数据阵列2406。
[0248] 在此范例中,卷积核2402系一个由系数、权重、参数、或元素,构成之3x3 阵列。这些系数的第一列标示为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。在此范例中,通常会对最终累加后之数值再执行一个除法,其中,除数系卷积核 2042之各元素之绝对值的加总,在此范例中即为16。在另一范例中,除数可以是卷积核2042之元素数量。在又一个范例中,除数可以是将卷积运算压缩至一目标数值范围所使用之数值,此除数系由卷积核2042之元素数值、目标范围以及执行卷积运算之输入值阵列的范围所决定。
[0249] 请参照图24以及详述其中细节之图25,架构程序将卷积核 2042之系数写入数据随机存取存储器122。就一较佳实施例而言,数据随机存取存储器122之连续九个列(卷积核2402内之元素数量)之每个列上的所有字,会利用卷积核2402之不同元素以列为其主要顺序加以写入。也就是说,如图中所示,在同一列之每个字系以第一系数C0,0写入;下一列则是以第二系数C0,1 写入;下一列则是以第三系数C0,2写入;再下一列则是以第四系数C1,0写入;依此类推,直到第九列之每个字都以第九系数C2,2写入。为了对数据阵列2404 分割出之数据块之数据矩阵2406进行卷积运算,神经处理单元126会依据顺序重复读取数据随机存取存储器122中装载卷积核2042系数之九个列,这部分在后续章节,特别是对应于图
26A的部分,会有更详细的说明。
[0250] 请参照图24以及详述其中细节之图25,架构程序系将数据矩阵2406之数值写入权重随机存取存储器124。神经网络单元程序执行卷积运算时,会将结果阵列写回权重随机存取存储器124。就一较佳实施例而言,架构程序会将一第一数据矩阵2406写入权重随机存取存储器124并使神经网络单元 121开始运作,当神经网络单元121在对第一数据矩阵2406与卷积核2402执行卷积运算时,架构程序会将一第二数据矩阵2406写入权重随机存取存储器124,如此,神经网络单元121完成第一数据矩阵2406之卷积运算后,即可开始执行第二数据矩阵2406之卷积运算,这部分在后续对应于图25处有更详细的说明。以此方式,架构程序会往返于权重随机存取存储器124之两个区域,以确保神经网络单元121被充分使用。因此,图
24之范例显示有一第一数据矩阵2406A与一第二资料矩阵2406B,第一资料矩阵2406A系对应于占据权重随机存取存储器124中列0至399之第一数据块,而第二资料矩阵2406B系对应于占据权重随机存取存储器124中列500至899之第二数据块。此外,如图中所示,神经网络单元121会将卷积运算之结果写回权重随机存取存储器124 之列900-1299以及列1300-
1699,随后架构程序会从权重随机存取存储器124 读取这些结果。装载于权重随机存取存储器124之数据矩阵2406之数据值系标示为“Dx,y”,其中“x”是权重随机存取存储器124列数,“y”是权重随机存取存储器之字、或行数。举例来说,位于列399之数据字511在图24中系标示为D399,511,此数据字系由神经处理单元511之多路复用寄存器705接收。
[0251] 图25系一流程图,显示图1之处理器100执行一架构程序以利用神经网络单元121对图24之数据阵列2404执行卷积核2042之卷积运算。此流程始于步骤2502。
[0252] 在步骤2502中,处理器100,即执行有架构程序之处理器100,会将图24之卷积核2402以图24所显示描述之方式写入数据随机存取存储器 122。此外,架构程序会将一变量N初始化为数值1。变量N系标示数据阵列 2404中神经网络单元121正在处理之数据块。此外,架构程序会将一变量 NUM_CHUNKS初始化为数值20。接下来流程前进至步骤2504。
[0253] 在步骤2504中,如图24所示,处理器100会将数据块1之数据矩阵 2406写入权重随机存取存储器124(如数据块1之数据矩阵2406A)。接下来流程前进至步骤2506。
[0254] 在步骤2506中,处理器100会使用一个指定一函数1432以写入程序存储器129之MTNN指令1400,将一卷积程序写入神经网络单元121程序存储器 129。处理器100随后会使用一个指定一函数1432以开始执行程序之MTNN指令1400,以启动神经网络单元卷积程序。神经网络单元卷积程序之一范例在对应于图26A处会有更详细的说明。接下来流程前进至步骤2508。
[0255] 在决策步骤2508,架构程序确认变量N之数值是否小于NUM_CHUNKS。若是,流程会前进至步骤2512;否则就前进至步骤2514。
[0256] 在步骤2512,如图24所示,处理器100将数据块N+1之数据矩阵2406 写入权重随机存取存储器124(如数据块2之数据矩阵2406B)。因此,当神经网络单元121正在对当前数据块执行卷积运算的时候,架构程序可将下一个数据块之数据矩阵2406写入权重随机存取存储器124,如此,在完成当前数据块之卷积运算后,即写入权重随机存取存储器124后,神经网络单元121可以立即开始对下一个数据块执行卷积运算。
[0257] 在步骤2514,处理器100确认正在执行之神经网络单元程序(对于数据块 1而是从步骤2506开始执行,对于数据块2-20而言则是从步骤2518开始执行) 是否已经完成执行。就一较佳实施例而言,处理器100系透过执行一MFNN指令1500读取神经网络单元121状态寄存器127以确认是否已经完成执行。在另一实施例中,神经网络单元121会产生一中断,表示已经完成卷积程序。接下来流程前进至决策步骤2516。
[0258] 在决策步骤2516中,架构程序确认变量N之数值是否小于NUM_CHUNKS。若是,流程前进至步骤2518;否则就前进至步骤2522。
[0259] 在步骤2518中,处理器100会更新卷积程序以便执行于数据块N+1。更精确地说,处理器100会将权重随机存取存储器124中对应于地址0之初始化神经处理单元指令之列值更新为数据矩阵2406之第一列(例如,更新为数据矩阵2406A之列0或是数据矩阵2406B之列500),并且会更新输出列(例如更新为列900或1300)。随后处理器100会开始执行此更新后之神经网络单元卷积程序。接下来流程前进至步骤2522。
[0260] 在步骤2522中,处理器100从权重随机存取存储器124读取数据块N之神经网络单元卷积程序之执行结果。接下来流程前进至决策步骤2524。
[0261] 在决策步骤2524中,架构程序确认变量N之数值是否小于NUM_CHUNKS。若是,流程前进至步骤2526;否则就终止。
[0262] 在步骤2526中,架构程序会将N的数值增加一。接下来流程回到决策步骤 2508。
[0263] 图26A系一神经网络单元程序之一程序行表,此神经网络单元程序系利用图24之卷积核2402执行一数据矩阵2406之卷积运算并将其写回权重随机存取存储器124。此程序系将地址1至9之指令所构成之指令循环循环一定次数。位于地址0之初始化神经处理单元指令指定每个神经处理单元126 执行此指令循环之次数,在图26A之范例所具有之循环计数值为400,对应于图24之数据矩阵2406内之列数,而位于循环终端之循环指令(位于地址10)会使当前循环计数值递减,若是结果为非零值,就使其回到指令循环之顶端(即回到地址1之指令)。初始化神经处理单元指令也会将累加器202 清除为零。就一较佳实施例而言,位于地址10之循环指令也会将累加器202清除为零。另外,如前述位于地址1之乘法累加指令也可将累加器202清除为零。
[0264] 对于程序内指令循环之每一次执行,这512个神经处理单元126会同时执行512个3x3卷积核之卷积运算以及数据矩阵2406之512个相对应之3x3子矩阵。卷积运算是由卷积核2042之元素与相对应子矩阵内之相对应元素计算出来之九个乘积的加总。在图26A之实施例中,这512个相对应3x3子矩阵之每一个的原点(中央元素)是图24中的数据字Dx+1,y+
1,其中y(行编号)是神经处理单元126编号,而x(列编号)是当前权重随机存取存储器 124中由图26A之程序中地址1之乘法累加指令所读取之列编号(此列编号也会由地址0之初始化神经处理单元指令进行初始化处理,也会在执行位于地址3与5之乘法累加指令时递增,也会被位于地址9之递减指令更新)。如此,在此程序之每一个循环中,这512个神经处理单元126会计算512个卷积运算并将这512个卷积运算之结果写回权重随机存取存储器124之指令列。在本文中系省略边缘处理(edge handling)以简化说明,不过需要注意的是,利用这些神经处理单元126之集体旋转特征会造成数据矩阵2406(对于图像处理器而言即影像之数据矩阵)从其一侧之两个垂直边缘到另一个垂直边缘间(例如从左侧边缘到右侧边缘,反之亦然)之多行数据中有两行产生扭曲(wrapping)。现在针对指令循环进行说明。
[0265] 地址1是乘法累加指令,此指令会指定数据随机存取存储器122之列0并暗中利用当前权重随机存取存储器124之列,这个列最好是装载在序列发生器 128内(并由位于地址0之指令将其初始化为零以执行第一次指令循环传递之运算)。也就是说,位于地址1的指令会使每个神经处理单元126从数据随机存取存储器122之列0读取其相对应字,从当前权重随机存取存储器124列读取其相对应字,并对此二个字执行一乘法累加运算。如此,举例来说,神经处理单元5将C0,0与Dx,5相乘(其中“x”是当前权重随机存取存储器124列),将结果加上累加器202数值217,并将总数写回累加器202。
[0266] 地址2是一个乘法累加指令,此指令会指定数据随机存取存储器122之列递增(即增加至1),随后再从数据随机存取存储器122之递增后地址读取这个列。此指令并会指定将每个神经处理单元126之多路复用寄存器705内的数值旋转至邻近的神经处理单元126,在此范例中即为因应地址1之指令而从权重随机存取存储器124读取之数据矩阵2406值之列。在图24至图26之实施例中,这些神经处理单元126系用以将多路复用寄存器705之数值向左旋转,亦即从神经处理单元J旋转至神经处理单元J-1,而非如前述图3、图7与图19从神经处理单元J旋转至神经处理单元J+1。值得注意的是,神经处理单元126 向右旋转之实施例中,架构程序会将卷积核2042系数值以不同顺序写入数据随机存取存储器122(例如绕着其中心行旋转)以达到缩小卷积结果之目的。此外,在需要时,架构程序可执行额外的卷积核预处理(例如移动(transposition))。此外,指令指定之计数值为2。因此,位于地址2之指令会使每个神经处理单元 126从数据随机存取存储器122之列1读取其相对应字,将旋转后字接收至多路复用寄存器705,并对这两个字执行一乘法累加运算。因为计数值为2,此指令也会使每个神经处理单元126重复前述运作。也就是说,序列发生器128会使数据随机存取存储器122列地址123递增(即增加至2),而每个神经处理单元 126会从数据随机存取存储器122之列2读取其相对应字以及将旋转后字接收至多路复用寄存器705,并且对这两个字执行一乘法累加运算。如此,举例来说,假定当前权重随机存取存储器124列为27,在执行地址2之指令后,神经处理单元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,加入其他所有来自先前传递之指令循环的累加值。
[0267] 地址3与4之指令所执行之运算系类似于地址1与2之指令,不过,利用权重随机存取存储器124列递增指针之功效,这些指令会对权重随机存取存储器124之下一列进行运算,并且这些指令会对数据随机存取存储器122之后续三列,即列3至5,进行运算。也就是说,以神经处理单元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,加入其他所有来自先前传递之指令循环的累加值。
[0268] 地址5与6之指令所执行之运算系类似于地址3与4之指令,不过,这些指令会对权重随机存取存储器124之下一列,以及数据随机存取存储器122之后续三列,即列6至8,进行运算。也就是说,以神经处理单元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之指令后,假定指令循环开始时,权重随机存取存储器124列为27,以神经处理单元5为例,将会利用卷积核2042对以下3x3子矩阵进行卷积运算:
[0269]
[0270] 一般而言,完成地址1到6的指令后,这512个神经处理单元126都已经使用卷积核2042对下列3x3子矩阵进行卷积运算:
[0271]
[0272] 其中r是指令循环开始时,权重随机存取存储器124之列地址值,而n是神经处理单元126之编号。
[0273] 地址7之指令会透过启动函数单元121传递累加器202数值217。此传递功能会传递一个字,其尺寸大小(以位计)系等同于由数据随机存取存储器122 与权重随机存取存储器124读取之字(在此范例中即16位)。就一较佳实施例而言,使用者可指定输出格式,例如输出位中有多少位是小数(fractional)位,这部分在后续章节会有更详细的说明。另外,此指定可指定一个除法启动函数,而非指定一个传递启动函数,此除法启动函数会将累加器202数值217除以一个除数,如本文对应于图29A图30所述,例如利用图30之除数 3014/3016之其中之一。举例来说,就一个具有系数之卷积核2042而言,如前述具有十六分之一之系数之高斯模糊核,地址7之指令会指定一除法启动函数 (例如除以16),而非指定一传递函数。另外,架构程序可以在将卷积核系数写入数据随机存取存储器122前,对卷积核2042系数执行此除以16之运算,并据以调整卷积核2042数值之二维点的位置,例如使用如下所述图29之数据二维点2922。
[0274] 地址8之指令会将启动函数单元212之输出写入权重随机存取存储器124 中由输出列寄存器之当前值所指定之列。此当前值会被地址0之指令初始化,并且由指令内之递增指针在每传递经过一次循环就递增此数值。
[0275] 如图24至图26具有一3x3卷积核2402之范例所述,神经处理单元 126大约每三个时频周期会读取权重随机存取存储器124以读取数据矩阵2406 之一个列,并且大约每十二个时频周期会将卷积核结果矩阵写入权重随机存取存储器124。此外,假定在一实施例中,具有如图17之缓冲器1704之一写入与读取缓冲器,在神经处理单元126进行读取与写入之同时,处理器100可以对权重随机存取存储器124进行读取与写入,缓冲器1704大约每十六个时频周期会对权重随机存取存储器执行一次读取与写入动作,以分别读取数据矩阵以及写入卷积核结果矩阵。因此,权重随机存取存储器124之大约一半的带宽会由神经网络单元121以混合方式执行之卷积核运算所消耗。本范例系包含一个3x3卷积核2042,不过,本发明并不限于此,其他大小的卷积核,如2x2、 4x4、5x5、6x6、7x7、8x8等,亦可适用于不同的神经网络单元程序。在使用较大卷积核之情况下,因为乘法累加指令之旋转版本(如图26A之地址2、 4与6之指令,较大之卷积核会需要使用这些指令)具有较大之计数值,神经处理单元
126读取权重随机存取存储器124之时间占比会降低,因此,权重随机存取存储器124之带宽使用比也会降低。
[0276] 另外,架构程序可使神经网络单元程序对输入数据矩阵2406中不再需要使用之列进行覆写,而非将卷积运算结果写回权重随机存取存储器124之不同列 (如列900-1299与1300-1699)。举例来说,就一个3x3之卷积核而言,架构程序可以将数据矩阵2406写入权重随机存取存储器124之列2-401,而非写入列 0-399,而神经处理单元程序则会从权重随机存取存储器124之列0开始将卷积运算结果写入,而每传递经过一次指令循环就递增列数。
如此,神经网络单元程序只会将不再需要使用之列进行覆写。举例来说,在第一次传递经过指令循环之后(或更精确地说,在执行地址1之指令以加载权重随机存取存储器124 之列1之后),列0之数据可以被覆写,不过,列1-3的数据需要留给第二次传递经过指令循环之运算而不能被覆写;同样地,在第二次传递经过指令循环之后,列1之数据可以被覆写,不过,列2-4的数据需要留给第三次传递经过指令循环之运算而不能被覆写;依此类推。在此实施例中,可以增大各个数据矩阵2406(数据块)之高度(如800列),因而可以使用较少之数据块。
[0277] 另外,架构程序可以使神经网络单元程序将卷积运算之结果写回卷积核 2402上方之数据随机存取存储器122列(例如在列8上方),而非将卷积运算结果写回权重随机存取存储器124,当神经网络单元121写入结果时,架构程序可以从数据随机存取存储器122读取结果(例如使用图26中数据随机存取存储器122之最近写入列2606地址)。此配置适用于具有单端口权重随机存取存储器124与双端口数据随机存取存储器之实施例。
[0278] 依据图24至图26A之实施例中神经网络单元之运算可以发现,图26A之程序之每次执行会需要大约5000个时频周期,如此,图24 中整个2560x1600之数据阵列2404之卷积运算需要大约100,000个时频周期,明显少于以传统方式执行相同任务所需要的时频周期数。
[0279] 图26B系显示图1之神经网络单元121之控制寄存器127之某些字段之一实施例之方块示意图。此状态寄存器127包括一个字段2602,指出权重随机存取存储器124中最近被神经处理单元126写入之列的地址;一个字段 2606,指出数据随机存取存储器122中最近被神经处理单元126写入之列的地址;一个字段2604,指出权重随机存取存储器124中最近被神经处理单元126 读取之列的地址;以及一个字段2608,指出数据随机存取存储器122中最近被神经处理单元126读取之列的地址。如此,执行于处理器100之架构程序就可以确认神经网络单元121之处理进度,是在对数据随机存取存储器122与/或权重随机存取存储器124进行数据之读取与/或写入。利用此能力,加上如前述选择对输入数据矩阵进行覆写(或是如前述将结果写入数据随机存取存储器122),如以下之范例所数,图24之数据阵列2404就可以视为5个512x1600之数据块来执行,而非20个512x400之数据块。处理器100从权重随机存取存储器124之列2开始写入第一个512x1600之数据块,并使神经网络单元程序启动 (此程序具有一数值为1600之循环计数,并且将权重随机存取存储器124输出列初始化为0)。当神经网络单元121执行神经网络单元程序时,处理器100会监测权重随机存取存储器124之输出位置/地址,藉以(1)(使用MFNN指令1500) 读取权重随机存取存储器124中具有由神经网络单元121(由列0开始)写入之有效卷积运算结果之列;以及(2)将第二个512x1600资料矩阵2406(始于列2) 覆写于已经被读取过之有效卷积运算结果,如此当神经网络单元121对于第一个512x1600数据块完成神经网络单元程序,处理器100在必要时可以立即更新神经网络单元程序并再次启动神经网络单元程序以执行于第二个512x1600数据块。此程序会再重复三次执行剩下三个512x1600数据块,以使神经网络单元121 可以被充分使用。
[0280] 在一实施例中,启动函数单元212具有能够对累加器202数值217有效执行一有效除法运算之能力,这部分在后续章节尤其是对应于图29A、图29B与图30处会有更详细的说明。举例来说,对累加器202数值进行处法运算之启动函数神经网络单元指令可用于以下所述之高斯模糊矩阵。
[0281] 图24之范例中所使用之卷积核2402为一个应用于整个数据矩阵2404 之小型静态卷积核,不过,本发明并不限于此,此卷积核亦可为一大型矩阵,具有特定之权重对应于数据阵列2404之不同数据值,例如常见于卷积神经网络之卷积核。当神经网络单元121以此方式被使用时,架构程序会将数据矩阵与卷积核之位置互换,亦即将数据矩阵放置于数据随机存取存储器122内而将卷积核放置于权重随机存取存储器124内,而执行神经网络单元程序所需处理之列数也会相对较少。
[0282] 图27系一方块示意图,显示图1中填入输入资料之权重随机存取存储器124之一范例,此输入数据系由图1之神经网络单元121执行共源运算(pooling operation)。共源运算是由人工神经网络之一共源层执行,透过取得输入矩阵之子区域或子矩阵并计算子矩阵之最大值或平均值以作为一结果矩阵或共源矩阵,以缩减输入数据矩阵(如一影像或是卷积后影像)之大小(dimension)。在图27与图28之范例中,共源运算计算各个子矩阵之最大值。共源运算对于如执行对象分类或执行之人工神经网络特别有用。一般而言,共源运算实际上可以使输入矩阵缩减之系数为所检测之子矩阵的元素数,特别是可以将输入矩阵之各个维度方向都缩减子矩阵之相对应维度方向之元素数。在图27之范例中,输入数据是一个宽字(如16位)之512x1600矩阵,储存于权重随机存取存储器124之列0至1599。在图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。
[0283] 图28系一神经网络单元程序之一程序行表,此神经网络单元程序系执行图27之输入数据矩阵之共源运作并将其写回权重随机存取存储器 124。在图28之范例中,共源运算会计算输入数据矩阵中相对应4x4子矩阵之最大值。此程序会多次执行由指令1至10构成指令循环。位于地址0之初始化神经处理单元指令会指定每个神经处理单元126执行指令循环之次数,在图28之范例中之循环计数值为400,而在循环末端(在地址11)之循环指令会使当前循环计数值递减,而若是所产生之结果是一非零值,就使其回到指令循环之顶端(即回到地址1之指令)。权重随机存取存储器124内之输入数据矩阵实质上会被神经网络单元程序视为400个由四个相邻列构成之互斥群组,即列0-3、列4-7、列8-11、依此类推,直到列1596-1599。每一个由四个相邻列构成之群组包括128个4x4子矩阵,这些子矩阵系由此群组之四个列与四个相邻行之交叉处元素所形成之4x4子矩阵,这些相邻行即行0-3、行4-7、行 8-
11、依此类推直到行508-511。这512个神经处理单元126中,每四个为一组计算之第四个神经处理单元126(一共即128个)会对一相对应4x4子矩阵执行一共源运算,而其他三个神经处理单元126则不被使用。更精确地说,神经处理单元0、4、8、依此类推直到神经处理单元
508,会对其相对应之4x4子矩阵执行一共源运算,而此4x4子矩阵之最左侧行编号系对应于神经处理单元编号,而下方列系对应于当前权重随机存取存储器124之列值,此数值会被地址0之初始化指令初始化为零并且在重复每次指令循环后会增加4,这部分在后续章节会有更详细的说明。这400次指令循环之重复动作系对应至图27之输入数据矩阵中之4x4子矩阵群组数(即输入数据矩阵具有之1600个列除以4)。初始化神经处理单元指令也会清除累加器202使其归零。就一较佳实施例而言,地址11之循环指令也会清除累加器202使其归零。另外,地址1之maxwacc 指令会指定清除累加器202使其归零。
[0284] 每次在执行程序之指令循环时,这128个被使用之神经处理单元126会对输入数据矩阵之当前四列群组中之128个相对应之4x4子矩阵,同时执行128 个共源运算。进一步来说,此共源运算会确认这4x4子矩阵之16个元素中之最大值元素。在图28之实施例中,对于这128个被使用之神经处理单元126 中之每个神经处理单元y而言,4x4子矩阵之下方左侧元素为图27内之元素Dx,y,其中x是指令循环开始时当前权重随机存取存储器124之列数,而此列数据系由图28之程序中地址1之maxwacc指令读取(此列数也会由地址0之初始化神经处理单元指令加以初始化,并在每次执行地址3、5与7之 maxwacc指令时递增)。因此,对于此程序之每一个循环而言,这128个被使用之神经处理单元126会将当前列群组之相对应128个4x4子矩阵之最大值元素,写回权重随机存取记忆124之指定列。以下系针对此指令循环进行描述。
[0285] 地址1之maxwacc指令会暗中使用当前权重随机存取存储器124列,这个列最好是装载在序列发生器128内(并由位于地址0之指令将其初始化为零以执行第一次传递经过指令循环之运算)。地址1之指令会使每个神经处理单元 126从权重随机存取存储器124之当前列读取其相对应字,将此字与累加器202 数值217相比,并将这两个数值之最大者储存于累加器202。因此,举例来说,神经处理单元8会确认累加器202数值217与数据字Dx,8(其中“x”是当前权重随机存取存储器124列)中之最大值并将其写回累加器202。
[0286] 地址2是一个maxwacc指令,此指令会指定将每个神经处理单元126之多路复用寄存器705内之数值旋转至邻近至神经处理单元126,在此即为因应地址 1之指令刚从权重随机存取存储器124读取之一列输入阵列值。在图27至图28之实施例中,神经处理单元126系用以将多路复用器705数值向左旋转,亦即从神经处理单元J旋转至神经处理单元J-1,如前文对应于图24至图26之章节所述。此外,此指令会指定一计数值为3。如此,地址2之指令会使每个神经处理单元126将旋转后字接收至多路复用寄存器705并确认此旋转后字与累加器202数值中之最大值,然后将这个运算再重复两次。也就是说,每个神经处理单元126会执行三次将旋转后字接收至多路复用寄存器705并确认旋转后字与累加器202数值中最大值之运算。如此,举例来说,假定开始此指令循环时,当前权重随机存取存储器124列为36,以神经处理单元8为例,在执行地址1与2之指令后,神经处理单元8将会在其累加器202中储存循环开始时累加器202以及四个权重随机存取存储器124字D36,8、D36,9、D36,10与 D36,11中之最大值。
[0287] 地址3与4之maxwacc指令所执行之运算类似于地址1之指令,不过,利用权重随机存取存储器124列递增指针具有之功效,地址3与4之指令会对权重随机存取存储器124之下一列执行。也就是说,假定指令循环开始时当前权重随机存取存储器124列是36,以神经处理单元8为例,在完成地址1与4之指令后,神经处理单元8将会在其累加器202中储存循环开始时累加器202以及八个权重随机存取存储器124字D36,8、D36,9、D36,10、D36,11、D37,8、D37,9、 D37,10与D37,11中之最大值。
[0288] 地址5至8之maxwacc指令所执行之运算类似于地址1至4之指令,不过,地址5至8之指令会对权重随机存取存储器124之下两列执行。也就是说,假定指令循环开始时当前权重随机存取存储器124列是36,以神经处理单元8为例,在完成地址1与8之指令后,神经处理单元8将会在其累加器202中储存循环开始时累加器202以及十六个权重随机存取存储器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中之最大值。也就是说,假定指令循环开始时当前权重随机存取存储器124列是36,以神经处理单元8为例,在完成地址1与8之指令后,神经处理单元8将会完成确认下列4x4子矩阵之最大值:
[0289]
[0290] 基本上,在完成地址1至8之指令后,这128个被使用之神经处理单元126 中的每一个神经处理单元126就会完成确认下列4x4子矩阵之最大值:
[0291]
[0292] 其中r是指令循环开始时当前权重随机存取存储器124之列地址值,n是神经处理单元126编号。
[0293] 地址9之指令会透过启动函数单元212传递累加器202数值217。此传递功能会传递一个字,其尺寸大小(以位计)系等同于由权重随机存取存储器124 读取之字(在此范例中即16位)。就一较佳实施例而言,使用者可指定输出格式,例如输出位中有多少位是小数(fractional)位,这部分在后续章节会有更详细的说明。
[0294] 地址10之指令会将累加器202数值写入权重随机存取存储器124中由输出列寄存器之当前值所指定之列,此当前值会被地址0之指令予以初始化,并利用指令内之递增指针在每次传递经过循环后将此数值递增。进一步来说,地址 10之指令会将累加器202之一宽字(如16位)写入权重随机存取存储器124。就一较佳实施例而言,此指令会将这16个位视为由输入二维点2916指定之位来进行写入,这部分在下列对应于图29A与图29B图处会有更详细的说明。
[0295] 如前述,重复一次指令循环写入权重随机存取存储器124之列会包含具有无效值之空洞。也就是说,结果133之宽字1至3、5至7、9至11、依此类推,直到宽字509至511都是无效或未使用的。在一实施例中,启动函数单元212 包括一多路复用器使能将结果合并至列缓冲器之相邻字,例如图11之列缓冲器1104,以写回输出权重随机存取存储器124列。就一较佳实施例而言,启动函数指令会指定每个空洞中的字数,以及空洞内控制多路复用器合并结果所使用之字数。在一实施例中,空洞数系指定为数值2至6,以合并共源之3x3、 4x4、5x5、6x6或7x7子矩阵之输出。另外,执行于处理器100之架构程序会从权重随机存取存储器
124读取所产生之稀疏(具有空洞)结果列,并利用其他执行单元112,例如使用架构合并指令之媒体单元,如x86单指令多数据流扩展 (SSE)指令,执行合并功能。以类似于前述同时进行之方式并利用神经网络单元之混合本质,执行于处理器100之架构程序可以读取状态寄存器127以监测权重随机存取存储器124之最近写入列(例如图26B之字段2602)以读取所产生之一稀疏结果列,将其合并并写回权重随机存取存储器124之同一列,如此就完成准备而能作为一输入数据矩阵,提供给神经网络之下一层使用,例如一卷积层或是一传统神经网络层(亦即乘法累加层)。此外,本文所述之实施例系以4x4子矩阵执行共源运算,不过本发明并不限于此,图28之神经网络单元程序可经调整,而以其他尺寸之子矩阵,如3x3、5x5、
6x6或7x7,执行共源运算。
[0296] 如前述可以发现,写入权重随机存取存储器124之结果列的数量是输入数据矩阵之列数的四分之一。最后,在此范例中并未使用数据随机存取存储器122。不过,也可利用数据随机存取存储器122,而非权重随机存取存储器124,来执行共源运算。
[0297] 在图27与图28之实施例中,共源运算会计算子区域之最大值。不过,图28之程序可经调整以计算子区域之平均值,利入透过将maxwacc 指令以sumwacc指令取代(将权重字与累加器202数值217加总)并将地址9 之启动函数指令修改为将累加结果除以各个子区域之元素数(较佳者系透过如下所述之小数乘法运算),在此范例中为十六。
[0298] 由神经网络单元121依据图27与图28之运算中可以发现,每一次执行图28之程序需要使用大约6000个时频周期来对图27所示之整个512x1600数据矩阵执行一次共源运算,此运算所使用之时频周期数明显少于传统方式执行相类似任务所需之时频周期数。
[0299] 另外,架构程序可使神经网络单元程序将共源运算之结果写回数据随机存取存储器122列,而非将结果写回权重随机存取存储器124,当神经网络单元 121将结果写入数据随机存取存储器122时(例如使用图26B之数据随机存取存储器122最近写入列2606之地址),架构程序会从数据随机存取存储器 122读取结果。此配置适用具有单端口权重随机存取存储器124与双端口数据随机存取存储器122之实施例。
[0300] 定点算术运算,具有使用者提供二维点,全精度定点累加,使用者指定小数值,累加器数值之随机舍入,以及可选择启动/输出函数
[0301] 一般而言,在数字计算装置内执行算术运算之硬件单元依据其执行算术运算之对象为整数或浮点数,通常可分为“整数”单元与“浮点”单元。浮点数具有一数值(magnitude)(或尾数)与一指数,通常还有一符号。指数是基数(radix)点(通常为二维点)之位置相对于数值之指标。相较之下,整数不具有指数,而只具有一数值,通常还有一符号。浮点单元可以让程序设计者可以从一个非常大范围之不同数值中取得其工作所要使用之数字,而硬件则是在需要时负责调整此数字之指数值,而不需程序设计者处理。举例来说,假定两个浮点数0.111x 1029 与0.81x 1031相乘。(虽然浮点单元通常工作于2为基础之浮点数,此范例中所使用的是十进制小数,或以10为基础之浮点数。)浮点单元会自动负责尾数相乘,指数相加,随后再将结果标准化至数值.8911x 1059。在另一个范例中,假定两个相同之浮点数相加。浮点单元会在相加前自动负责将尾数之二维点对齐以产生数值为.81111x 1031之总数。
[0302] 不过,众所周知,这样复杂的运算而会导致浮点单元之尺寸增加,耗能增加、每指令所需时频周期数增加、以及/或周期时间拉长。因为这个原因,许多装置(如嵌入式处理器、微控制器与相对低成本与/或低功率之微处理器)并不具有浮点单元。由前述范例可以发现,浮点单元之复杂结构包含执行关联于浮点加法与乘法/除法之指数计算之逻辑(即对操作数之指数执行加/减运算以产生浮点乘法/除法之指数数值之加法器,将操作数指数相减以确认浮点加法之二维点对准偏移量之减法器),包含为了达成浮点加法中尾数之二维点对准之偏移器,包含对浮点结果进行标准化处理之偏移器。此外,流程之进行通常还需要执行浮点结果之舍入运算之逻辑、执行整数格式与浮点格式间以及不同浮点格式(例如扩增精度、双精度、单精度、半精度)间之转换的逻辑、前导零与前导一之侦测器、以及处理特殊浮点数之逻辑,例如反常值、非数值与无穷值。
[0303] 此外,关于浮点单元之正确度验证会因为设计上需要被验证之数值空间增加而大幅增加其复杂度,而会延长产品开发周期与上市时间。此外,如前述,浮点算术运算需要对用于计算之每个浮点数的尾数字段与指数字段分别储存与使用,而会增加所需之储存空间与/或在给定储存空间以储存整数之情况下降低精确度。其中许多缺点都可以透过整数单元执行算术运算来避免。
[0304] 程序设计者通常需要撰写处理小数之程序,小数即为非完整数之数值。这种程序可能需要在不具有浮点单元之处理器上执行,或是处理器虽然具有浮点单元,不过由处理器之整数单元执行整数指令会比较快。为了利用整数处理器在效能上的优势,程序设计者会对定点数值(fixed-point numbers)使用习知之定点算术运算。这样的程序会包括执行于整数单元以处理整数或整数数据之指令。因为数据是小数,这个软件并包含指令对整数数据执行运算而处理这个数据实际上是小数的问题,例如对准偏移器。基本上,定点软件可手动执行某些或全部浮点单元所能执行之功能。
[0305] 在本文中,一个“定点”数(或值或操作数或输入或输出)是一个数字,其储存位被理解为包含位以表示此定点数之一小数部分,此位在此称为“小数字符”。定点数之储存位系包含于存储器或寄存器内,例如存储器或寄存器内之一个8 位或16位字。此外,定点数之储存位全部都用来表达一个数值,而在某些情况下,其中一个位会用来表达符号,不过,没有一个定点数的储存位会用来表达这个数的指数。此外,此定点数之小数字符数量或二维点位置系指定于一个不同于定点数储存位之储存空间内,并且是以共享或通用之方式指出小数字符的数量或二维点位置,分享给一个包含此定点数之定点数集合,例如输入操作数集合、累加数值或是处理单元阵列之输出结果。
[0306] 在此描述之实施例中,算术逻辑单元是整数单元,不过,启动函数单元则是包含浮点算术硬件辅助或加速。如此可以使算术逻辑单元部分变得更小且更为快速,以利于在给定的芯片空间上使用更多的算术逻辑单元。这也表示在单位芯片空间上可以设置更多的神经元,而特别有利于神经网络单元。
[0307] 此外,相较于每个浮点数都需要指数储存位,本文所述之实施例中的定点数系以一个指针表达全部的数字集合中属于小数字符之储存位的数量,不过,此指标系位于一个单一、共享之储存空间而广泛地指出整个集合之所有数字,例如一系列运算之输入集合、一系列运算之累加数之集合、输出之集合,其中小数字符之数量。就一较佳实施例而言,神经网络单元之用户可对此数字集合指定小数储存位之数量。因此,可以理解的是,虽然在许多情况下(如一般数学),“整数”之用语是指一个带符号完整数,也就是一个不具有小数部分之数字,不过,在本文的脉络中,“整数”之用语可表示具有小数部分之数字。此外,在本文的脉络中,“整数”之用语是为了与浮点数进行区分,对于浮点数而言,其各自储存空间内之部分位会用来表达浮点数之指数。类似地,整数算术运算,如整数单元执行之整数乘法或加法或比较运算,系假设操作数中不具有指数,因此,整数单元之整阵列件,如整数乘法器、整数加法器、整数比较器,就不需要包含逻辑来处理指数,例如不需要为了加法或比较运算而移动尾数来对准二维点,不需要为了乘法运算而将指数相加。
[0308] 此外,本文所述之实施例包括一个大型的硬件整数累加器以对一个大型系列之整数运算进行累加(如1000个乘法累加运算)而不会丧失精确度。如此可避免神经网络单元处理浮点数,同时又能使累加数维持全精度,而不会使其饱和或因为溢位而产生不准确的结果。一旦这系列整数运算加总出一结果输入此全精度累加器,此定点硬件辅助会执行必要的缩放与饱和运算,藉以利用使用者指定之累加值小数字符数量指针以及输出值所需要之小数字符数量,将此全精度累加值转换为一输出值,这部分在后续章节会有更详细的说明。
[0309] 当需要将累加值从全精度形式进行压缩以便用于启动函数之一输入或是用于传递,就一较佳实施例而言,启动函数单元可以选择性地对累加值执行随机舍入运算,这部分在后续章节会有更详细的说明。最后,依据神经网络之一给定层之不同需求,神经处理单元可以选择性地接受指示以使用不同的启动函数以及/或输出许多不同形式之累加值。
[0310] 图29A系显示图1之控制寄存器127之一实施例之方块示意图。此控制寄存器127可包括复数个控制寄存器127。如图中所示,此控制寄存器 127包括下列字段:配置2902、带符号数据2912、带符号权重2914、数据二维点2922、权重二维点2924、算术逻辑函数2926、舍入控制2932、启动函数2934、倒数2942、偏移量2944、输出随机存取存储器2952、输出二维点2954、以及输出命令2956。控制寄存器127值可以利用MTNN指令1400与NNU程序之指令,如启动指令,进行写入动作。
[0311] 配置2902值系指定神经网络单元121是属于窄配置、宽配置或是漏斗配置,如前所述。配置2902也设定了由数据随机存取存储器122与权重随机存取存储器124接收之输入字的大小。在窄配置与漏斗配置中,输入字的大小是窄的(例如8位或9位),不过,在宽配置中,输入字的大小则是宽的(例如12位或16 位)。此外,配置2902也设定了与输入字大小相同之输出结果133的大小。
[0312] 带符号数据值2912为真的时候,即表示由数据随机存取存储器122接收之数据字为带符号值,若为假,则表示这些数据字为不带符号值。带符号权重值 2914为真的时候,即表示由权重随机存取存储器122接收之权重字为带符号值,若为假,则表示这些权重字为不带符号值。
[0313] 数据二维点2922值表示由数据随机存取存储器122接收之数据字之二维点位置。就一较佳实施例而言,对于二维点之位置而言,数据二维点2922值即表示从右侧计算之位位置数量。换言之,数据二维点2922表示数据字之最低有效位中属于小数字符之数量,即位于二维点右侧之位。类似地,权重二维点2924 值表示由权重随机存取存储器124接收之权重字之二维点位置。就一较佳实施例而言,当算术逻辑单元函数2926是一个乘法与累加或输出累加,神经处理单元126将二维点右侧之位数确定为数据二维点2922与权重二维点
2924之加总,并将其作为装载于累加器202之数值。因此,举例来说,若是数据二维点2922 之值为5而权重二维点2924之值为3,累加器202内之值就会在二维点右侧有 8个位。当算术逻辑单元函数2926是一个总数/最大值累加器与数据/权重字或是传递数据/权重字,神经处理单元126会将二维点右侧之位数分别确定为数据/权重二维点2922/2924,并将其作为装载于累加器202之数值。在另一实施例中,则是指定单一个累加器二维点2923,而不去指定个别的数据二维点2922与权重二维点2924。这部分在后续对应于图29B处会有更详细的说明。
[0314] 算术逻辑单元函数2926指定由神经处理单元126之算术逻辑单元执行之函数。如前述,算术逻辑单元2926可包括以下运算但不限于:将数据字209与权重字203相乘并将此乘积与累加器202相加;将累加器202与权重字203相加;将累加器202与数据字209相加;累加器202与数据字209中之最大值;累加器202与权重字209中之最大值;输出累加器202;传递数据字209;传递权重字209;输出零值。在一实施例中,此算术逻辑单元2926系由神经网络单元初始化指令予以指定,并且由算术逻辑单元204使用以因应一执行指令(未图标)。在一实施例中,此算术逻辑单元2926系由个别的神经网络单元指令予以指定,如前述乘法累加以及maxwacc指令。
[0315] 舍入控制2932指定(图30中)舍入器所使用之舍入运算的形式。在一实施例中,可指定之舍入模式包括但不限于:不舍入、舍入至最近值、以及随机舍入。就一较佳实施例而言,处理器200包括一随机位来源3003(请参照图30)以产生随机位3005,这些随机位3005系经取样用以执行随机舍入以降低产生舍入偏差的可能性。在一实施例中,当舍入位3005为一而黏(sticky)位为零,若是取样之随机位3005为真,神经处理单元126就会向上舍入,若是取样之随机位3005为假,神经处理单元126就不会向上舍入。在一实施例中,随机位来源3003系基于处理器100具有之随机电子特性进行取样以产生随机位3005,这些随机电子特性如半导体二极管电阻之热噪声,不过本发明并不限于此。
[0316] 启动函数2934指定用于累加器202数值217之函数以产生神经处理单元126 之输出133。如本文所述,启动函数2934包括但不限于:S型函数;双曲正切函数;软加函数;校正函数;除以二的指定幂次方;乘上一个使用者指定之倒数值以达成有效除法;传递整个累加器;以及将累加器以标准尺寸传递,这部分在以下章节会有更详细的说明。在一实施例中,启动函数系由神经网络单元启动函数指令所指定。另外,启动函数也可由初始化指令所指定,并因应一输出指令而使用,例如图4中地址4之启动函数单元输出指令,在此实施例中,位于图4中地址3之启动函数指令会包含于输出指令内。
[0317] 倒数2942值指定一个与累加器202数值217以达成对累加器202数值217 进行除法运算之数值。也就是说,使用者所指定之倒数2942值会是实际上想要执行之除数的倒数。这有利于搭配如本文所述之卷积或共源运算。就一较佳实施例而言,使用者会将倒数2942值指定为两个部分,这在后续对应于图29 C处会有更详细的说明。在一实施例中,控制寄存器127包括一字段(未图示) 让用户可以在多个内建除数值中指定一个进行除法,这些内建除数值的大小相当于常用之卷积核的大小,如9、25、36或49。在此实施例中,启动函数单元 
212会储存这些内建除数的倒数,用以与累加器202数值217相乘。
[0318] 偏移量2944系指定启动函数单元212之一移位器会将累加器202数值217 右移之位数,以达成将其除以二的幂次方之运算。这有利于搭配尺寸为二的幂次方之卷积核进行运算。
[0319] 输出随机存取存储器2952值会在数据随机存取存储器122与权重随机存取存储器124中指定一个来接收输出结果133。
[0320] 输出二维点2954值表示输出结果133之二维点的位置。就一较佳实施例而言,对于输出结果133之二维点的位置而言,输出二维点2954值即表示从右侧计算之位位置数量。换言之,输出二维点2954表示输出结果133之最低有效位中属于小数字符之数量,即位于二维点右侧之位。启动函数单元212会基于输出二维点2954之数值(在大部分之情况下,也会基于数据二维点2922、权重二维点2924、启动函数2934与/或配置2902之数值)执行舍入、压缩、饱和与尺寸转换之运算。
[0321] 输出命令2956会从许多面向控制输出结果133。在一实施例中,启动函数单元121会利用标准尺寸的概念,标准尺寸为配置2902指定之宽度大小(以位计)的两倍。如此,举例来说,若是配置2902设定由数据随机存取存储器122 与权重随机存取存储器124接收之输入字的大小为8位,标准尺寸就会是16位;在另一个范例中,若是配置2902设定由数据随机存取存储器122与权重随机存取存储器124接收之输入字的大小为16位,标准尺寸就会是32位。如本文所述,累加器202之尺寸较大(举例来说,窄的累加器202B为28位,而宽的累加器202A则是41位)以维持中间计算,如1024与512个神经网络单元乘法累加指令,之全精度。如此,累加器202数值217就会大于(以位计)标准尺寸,而对于启动函数2934之大部分数值(除了传递整个累加器),启动函数单元212  (例如以下对应于图30之段落所述之标准尺寸
3008)就会将累加器202数值217压缩至标准尺寸之大小。输出命令2956之第一默认值会指示启动函数单元212执行指定的启动函数2934以产生一内部结果并将此内部结果作为输出结果133输出,此内部结果之大小等于原始输入字之大小,即标准尺寸的一半。输出命令
2956之第二默认值会指示启动函数单元212执行指定的启动函数2934 以产生一内部结果并将此内部结果之下半部作为输出结果133输出,此内部结果之大小等于原始输入字之大小的两倍,即标准尺寸;而输出命令2956之第三默认值会指示启动函数单元212将标准尺寸之内部结果的上半部作为输出结果 133输出。输出命令2956之第四默认值会指示启动函数单元212将累加器202 之未经处理的最低有效字(其宽度系由配置2902所指定)作为输出结果133输出;而输出命令2956之第五默认值会指示启动函数单元212将累加器202之未经处理的中间有效字(其宽度系由配置2902所指定)作为输出结果133输出;输出命令2956之第六默认值会指示启动函数单元212将累加器202之未经处理的最高有效字(其宽度系由配置
2902所指定)作为输出结果133输出,这在前文对应于图8至图10之章节有更详细的说明。如前述,输出整个累加器202尺寸或是标准尺寸之内部结果有助于让处理器100之其他执行单元112可以执行启动函数,如软极大启动函数。
[0322] 图29A(以及图29B与图29C)所描述之字段系位于控制寄存器127内部,不过,本发明并不限于此,其中一个或多个字段亦可位于神经网络单元121之其他部分。就一较佳实施例而言,其中许多字段可以包含在神经网络单元指令内部,并由序列发生器予以译码以产生一微指令3416(请参照图34)控制算术逻辑单元204以及/或启动函数单元212。此外,这些字段也可以包含在储存于媒体寄存器118之微运算3414内(请参照图34),以控制算术逻辑单元204以及/或启动函数单元212。此实施例可以降低初始化神经网络单元指令之使用,而在其他实施例中则可去除此初始化神经网络单元指令。
[0323] 如前述,神经网络单元指令可以指定对存储器操作数(如来自数据随机存取存储器122与/或权重随机存取存储器123之字)或一个旋转后操作数(如来自多路复用寄存器208/705)执行算术逻辑指令运算。在一实施例中,神经网络单元指令还可以将一个操作数指定为一启动函数之寄存器输出(如图30之寄存器3038之输出)。此外,如前述,神经网络单元指令可以指定来使数据随机存取存储器122或权重随机存取存储器124之一当前列地址递增。在一实施例中,神经网络单元指令可指定一立即带符号数据值加入当前列以达成递增或递减一以外数值之目的。
[0324] 图29B系显示图1之控制寄存器127之另一实施例之方块示意图。图29B之控制寄存器127类似于图29A之控制寄存器127,不过,图29B之控制寄存器127包括一个累加器二维点2923。累加器二维点2923 系表示累加器202之二维点位置。就一较佳实施例而言,累加器二维点2923值表示此二维点位置之右侧的位位置数量。换言之,累加器二维点2923表示累加器202之最低有效位中属于小数字符之数量,即位于二维点右侧之位。在此实施例中,累加器二维点2923系明确指示,而非如图29A之实施例是暗中确认。
[0325] 图29C系显示以两个部分储存图29A之倒数2942之一实施例之方块示意图。第一个部分2962是一个偏移值,表示使用者想要乘上累加器202 数值217之真实倒数值中被抑制之前导零的数量2962。前导零的数量是紧接在二维点右侧连续排列之零的数量。第二部分2694是前导零抑制倒数值,也就是将所有前导零移除后之真实倒数值。在一实施例中,被抑制前导零数量2962系以4位储存,而前导零抑制倒数值2964则是以8位不带符号值储存。
[0326] 举例来说,假设使用者想要将累加器202数值217乘上数值49的倒数值。数值49的倒数值以二维呈现并设定13个小数字符就会是0.0000010100111,其中有五个前导零。如此,使用者会将被抑制前导零数量2962填入数值5,将前导零抑制倒数值2964填入数值10100111。在倒数乘法器“除法器A”3014(请参照图30)将累加器202数值217与前导零抑制倒数值2964相乘后,所产生之乘积会依据被抑制前导零数量2962右移。这样的实施例有助于利用相对较少之位来表达倒数2942值达成高精确度的要求。
[0327] 图30系显示图2之启动函数单元212之一实施例之方块示意图。此启动函数单元212包含图1之控制逻辑127、一个正类型转换器(PFC)与输出二维点对准器(OBPA)3002以接收累加器202数值217、一个舍入器3004以接收累加器202数值217与输出二维点对准器3002移出之位数量的指针、一个如前述之随机位来源3003以产生随机位3005、一个第一多路复用器3006以接收正类型转换器与输出二维点对准器3002之输出以及舍入器3004之输出、一个标准尺寸压缩器(CCS)与饱和器3008以接收第一多路复用器3006之输出、一个位选择器与饱和器3012以接收标准尺寸压缩器与饱和器3008之输出、一个校正器3018以接收标准尺寸压缩器与饱和器3008之输出、一个倒数乘法器3014以接收标准尺寸压缩器与饱和器3008之输出、一个向右移位器3016以接收标准尺寸压缩器与饱和器3008之输出、一个双取正切(tanh)模块3022以接收位选择器与饱和器3012之输出、一个S型模块以接收位选择器与饱和器3012之输出、一个软加模块3026以接收位选择器与饱和器3012之输出、一个第二多路复用器3032以接收双取正切模块3022、S型模块、软加模块3026、校正器3018、倒数乘法器
3014与向右移位器3016之输出以及标准尺寸压缩器与饱和器3008 所传递之标准尺寸输出
3028、一个符号恢复器3034以接收第二多路复用器3032 之输出、一个尺寸转换器与饱和器
3036以接收符号恢复器3034之输出、一第三多路复用器3037以接收尺寸转换器与饱和器
3036之输出与累加器输出217、以及一个输出寄存器3038以接收多路复用器3037之输出,而其输出即为图1中的结果133。
[0328] 正类型转换器与输出二维点对准器3002接收累加器202值217。就一较佳实施例而言,如前述,累加器202值217是一个全精度值。也就是说,累加器 202具有足够的储存位数以装载一累加数,此累加数是由整数加法器244将一系列由整数乘法器242产生之乘积相加所产生之总数,而此运算不舍弃乘法器242 之个别乘积或加法器之各个总数中之任何一个位以维持精确度。就一较佳实施例而言,累加器202至少具有足够的位数来装载一神经网络单元121程序化执行产生之乘积累加的最大数量。举例来说,请参照图4之程序,在宽配置下,神经网络单元121程序化执行产生之乘积累加的最大数量为512,而累加数202 位宽度为41。在另一范例中,请参照图20之程序,在窄配置下,神经网络单元121程序化执行产生之乘积累加的最大数量为1024,而累加数202位宽度为28。基本上,全精度累加器202具有至少Q个位,其中Q是M与log2P之加总,其中M是乘法器242之整数乘积之为原宽度(举例来说,对于窄乘法器242 而言是16位,对于宽乘法器242而言是32位),而P是累加器202所能累加之乘积的最大容许数量。就一较佳实施例而言,乘积累加之最大数量是神经网络单元121之程序设计者依据程序规格所指定。在一实施例中,假定一个先前乘法累加指令用以从数据/权重随机存取存储器122/124加载数据/权重字 206/207列(如图4中地址1之指令)之基础上,序列发生器128会执行乘法累加神经网络单元指令(如图4中地址2之指令)之计数的最大值,如511。
[0329] 利用一个具有足够位宽度而能对所容许累加之最大数量之一全精度值执行累加运算之一累加器202,即可简化神经处理单元126之算术逻辑单元204之设计。特别是,这样处理可以缓和需要使用逻辑来对整数加法器244产生之总数执行饱和运算之需求,因为整数加法器244会使一个小型累加器产生溢位,而需要持续追踪累加器之二维点位置以确认是否产生溢位以确认是否需要执行饱和运算。举例来说,对于具有一非全精度累加器但具有饱和逻辑以处理非全精度累加器之溢位之设计而言,假定存在以下情况。
[0330] (1)数据字值的范围是介于0与1之间而所有储存位都用以储存小数字符。权重字值的范围是介于-8与+8之间而除了三个以外之所有储存位都用以储存小数字符。做为一个双曲正切启动函数之输入之累加值的范围是介于-8与8之间,而除了三个以外之所有储存位都用以储存小数字符。
[0331] (2)累加器之位宽度为非全精度(如只有乘积之位宽度)。
[0332] (3)假定累加器为全精度,最终累加值也大约会介于-8与8之间(如+4.2);不过,在此序列中“点A”前的乘积会较频繁地产生正值,而在点A后的乘积则会较频繁地产生负值。
[0333] 在此情况下,就可能取得不正确的结果(如+4.2以外之结果)。这是因为在点A前方之某些点,当需要使累加器达到一个超过其饱和最大值+8之数值,如+8.2,就会损失剩下的0.2。累加器甚至会使剩下的乘积累加结果维持在饱和值,而会损失更多正值。因此,累加器之最终值可能会小于使用具有全精度位宽度之累加器所计算之数值(即小于+4.2)。
[0334] 正类型转换器3004会在累加器202数值217为负时,将其转换为正类型,并产生一额外位指出原本数值之正负,这个位会随同此数值向下传递至启动函数单元212管线。将负数转换为正类型可以简化后续启动函数单元121之运算。举例来说,经此处理后,只有正值会输入双曲正切模块3022与S型模块3024,因而可以简化这些模块的设计。此外,也可以简化舍入器3004与饱和器3008。
[0335] 输出二维点对准器3002会向右移动或缩放此正类型值,使其对准于控制寄存器127内指定之输出二维点2954。就一较佳实施例而言,输出二维点对准器 3002会计算累加器202数值217之小数字符数(例如由累加器二维点2923所指定或是数据二维点2922与权重二维点2924之加总)减去输出之小数字符数(例如由输出二维点2954所指定)之差值作为偏移量。如此,举例来说,若是累加器202二维点2923为8(即上述实施例)而输出二维点2954为
3,输出二维点对准器3002就会将此正类型数值右移5个位以产生提供致多路复用器3006与舍入器3004之结果。
[0336] 舍入器3004会对累加器202数值217执行舍入运算。就一较佳实施例而言,舍入器3004会对正类型转换器与输出二维点对准器3002产生之一正类型数值产生一个舍入后版本,并将此舍入后版本提供至多路复用器3006。舍入器3004 会依据前述舍入控制2932执行舍入运算,如本文所述,前述舍入控制会包括使用随机位3005之随机舍入。多路复用器3006会依据舍入控制2932(如本文所述,可包含随机舍入),在其多个输入中选择其一,也就是来自正类型转换器与输出二维点对准器3002之正类型数值或是来自舍入器3004之舍入后版本,并且将选择后的数值提供给标准尺寸压缩器与饱和器3008。就一较佳实施例而言,若是舍入控制指定不进行舍入,多路复用器3006就会选择正类型转换器与输出二维点对准器
3002之输出,否则就会选择舍入器3004之输出。在其他实施例中,亦可由启动函数单元212执行额外的舍入运算。举例来说,在一实施例中,当位选择器3012对标准尺寸压缩器与饱和器3008之输出(如后述)位进行压缩时,位选择器3012会基于遗失的低顺位位进行舍入运算。在另一个范例中,倒数乘法器3014(如后述)之乘积会被施以舍入运算。在又一个范例中,尺寸转换器3036需要转换出适当之输出尺寸(如后述),此转换可能涉及丢去某些用于舍入确认之低顺位位,就会执行舍入运算。
[0337] 标准尺寸压缩器3008会将多路复用器3006输出值压缩至标准尺寸。因此,举例来说,若是神经处理单元126是处于窄配置或漏斗配置2902,标准尺寸压缩器3008可将28位之多路复用器3006输出值压缩至16位;而若是神经处理单元126是处于宽配置2902,标准尺寸压缩器3008可将41位之多路复用器3006 输出值压缩至32位。不过,在压缩至标准尺寸前,若是预压缩值大于标准型式所能表达之最大值,饱和器3008就会对使此预压缩值填满至标准型式所能表达之最大值。举例来说,若是预压缩值中位于最高有效预压缩值位左侧之任何位都是数值1,饱和器3008就会将预压缩值填满至最大值(如填满为全部1)。
[0338] 就一较佳实施例而言,双曲正切模块3022、S型模块3024、以及软加模块 3026都包含查找表,如可程序化逻辑阵列(PLA)、只读存储器(ROM)、可合并逻辑闸等等。在一实施例中,为了简化并缩小这些模块3022/3024/3026的尺寸,提供至这些模块之输入值系具有3.4之型式,即三个完整位与四个小数字符,亦即输入值具有四个位位于二维点右侧并且具有三个位位于二维点左侧。因为在 3.4型式之输入值范围(-8,+8)之极端处,输出值会非对称地靠近其最小/最大值,因此,这些数值必需经过选择。不过,本发明并不限于此,本发明亦可应用于其它将二维点放置在不同位置之实施例,如以4.3型式或2.5型式。位选择器3012会在标准尺寸压缩器与饱和器3008输出之位中选择选择满足3.4型式规范之位,此规范涉及压缩处理,也就是会丧失某些位,而标准型式则具有较多之为位数。不过,在选择/压缩标准尺寸压缩器与饱和器3008输出值之前,若是预压缩值大于3.4型式所能表达之最大值,饱和器3012就会使预压缩值填满至 3.4型式所能表达之最大值。举例来说,若是预压缩值中位于最高有效3.4型式位左侧之任何位都是数值1,饱和器3012就会将预压缩值填满至最大值(如填满至全部1)。
[0339] 双曲正切模块3022、S型模块3024与软加模块3026会对标准尺寸压缩器与饱和器3008输出之3.4型式数值执行相对应之启动函数(如前述)以产生一结果。就一较佳实施例而言,双曲正切模块3022与S型模块3024所产生的是一个0.7型式之7位结果,即零个完整位与七个小数字符,亦即输入值具有七个位位于二维点右侧。就一较佳实施例而言,软加模块
3026产生的是一个3.4型式之7位结果,即其型式与此模块之输入型式相同。就一较佳实施例而言,双曲正切模块3022、S型模块3024与软加模块3026之输出会被延展至标准型式 (例如在必要时加上前导零)并对准而使二维点由输出二维点2954数值所指定。
[0340] 校正器3018会产生标准尺寸压缩器与饱和器3008之输出值之一校正后版本。也就是说,若是标准尺寸压缩器与饱和器3008之输出值(如前述其符号系以管线下移)为负,校正器3018会输出零值;否则,校正器3018就会将其输入值输出。就一较佳实施例而言,校正器3018之输出为标准型式并具有由输出二维点2954数值所指定之二维点。
[0341] 倒数乘法器3014会将标准尺寸压缩器与饱和器3008之输出与指定于倒数值2942之使用者指定倒数值相乘,以产生标准尺寸之乘积,此乘积实际上即为标准尺寸压缩器与饱和器3008之输出值,以倒数值2942之倒数作为除数计算出来的商数。就一较佳实施例而言,倒数乘法器3014之输出为标准型式并具有由输出二维点2954数值指定之二维点。
[0342] 向右移位器3016会将标准尺寸压缩器与饱和器3008之输出,以指定于偏移量值2944之用户指定位数进行移动,以产生标准尺寸之商数。就一较佳实施例而言,向右移位器
3016之输出为标准型式并具有由输出二维点2954数值指定之二维点。
[0343] 多路复用器3032选择启动函数2934值所指定之适当输入,并将其选择提供至符号恢复器3034,若是原本的累加器202数值217为负值,符号恢复器3034 就会将多路复用器3032输出之正类型数值转换为负类型,例如转换为二补码类型。
[0344] 尺寸转换器3036会依据如图29A所述之输出命令2956之数值,将符号恢复器3034之输出转换至适当的尺寸。就一较佳实施例而言,符号恢复器3034之输出具有一个由输出二维点2954数值指定之二维点。就一较佳实施例而言,对于输出命令之第一默认值而言,尺寸转换器3036会舍弃符号恢复器 3034输出之上半部位。此外,若是符号恢复器3034之输出为正并且超过配置 2902指定之字尺寸所能表达之最大值,或是输出为负并且小于字尺寸所能表达之最小值,饱和器3036就会将其输出分别填满至此字尺寸之可表达最大/最小值。对于第二与第三默认值,尺寸转换器3036会传递符号恢复器3034之输出。
[0345] 多路复用器3037会依据输出命令2956,在数据转换器与饱和器3036输出与累加器202输出217中选择其一已提供给输出寄存器3038。进一步来说,对于输出命令2956之第一与第二默认值,多路复用器3037会选择尺寸转换器与饱和器3036之输出的下方字(尺寸由配置2902指定)。对于第三默认值,多路复用器3037会选择尺寸转换器与饱和器3036之输出的上方字。对于第四默认值,多路复用器3037会选择未经处理之累加器202数值217的下方字;对于第五默认值,多路复用器3037会选择未经处理之累加器202数值217的中间字;而对于第六默认值,多路复用器3037会选择未经处理之累加器202数值217的上方字。如前述,就一较佳实施例而言,启动函数单元212会在未经处理之累加器202数值217的上方字加上零值上方位。
[0346] 图31系显示图30之启动函数单元212之运作之一范例。如图中所示,神经处理单元126之配置2902系设定为窄配置。此外,带符号数据2912 与带符号权重2914值为真。此外,数据二维点2922值表示对于数据随机存取存储器122字而言,其二维点位置右侧有7个位,神经处理单元126所接收之第一数据字之一范例值系呈现为0.1001110。此外,权重二维点
2924值表示对于权重数据随机存取存储器124字而言,其二维点位置右侧有3个位,神经处理单元126所接收之第一数据字之一范例值系呈现为00001.010。
[0347] 第一数据与权重字之16位乘积(此乘积会与累加器202之初始零值相加) 系呈现为000000.1100001100。因为数据二维点2912是7而权重二维点2914是 3,对于所隐含之累加器202二维点而言,其右侧会有10个位。在窄配置的情况下,如本实施例所示,累加器202具有28个位宽。举例来说,完成所有算术逻辑运算后(例如图20全部1024个乘法累加运算),累加器202之数值217 会是000000000000000001.1101010100。
[0348] 输出二维点2954值表示输出之二维点右侧有7个位。因此,在传递输出二维点对准器3002与标准尺寸压缩器3008之后,累加器202数值217会被缩放、舍入与压缩至标准型式之数值,即000000001.1101011。在此范例中,输出二维点地址表示7个小数字符,而累加器202二维点位置表示10个小数字符。因此,输出二维点对准器3002会计算出差值3,并透过将累加器202数值217右移3 个位以对其进行缩放。在图31中即显示累加器202数值217会丧失
3个最低有效位(二维数100)。此外,在此范例中,舍入控制2932值系表示使用随机舍入,并且在此范例中系假定取样随机位3005为真。如此,如前述,最低有效位就会被向上舍入,这是因为累加器202数值217的舍入位(这3个因为累加器202数值217之缩放运算而被移出的位中之最高有效位)为一,而黏位(这3个因为累加器202数值217之缩放运算而被移出的位中,2个最低有效位之布尔或运算结果)为零。
[0349] 在本范例中,启动函数2934表示所使用的是S型函数。如此,位选择器3012 就会选择标准型式值之位而使S型模块3024之输入具有三个完整位与四个小数字符,如前述,即所示之数值001.1101。S型模块3024之输出数值会放入标准型式中,即所示之数值000000000.1101110。
[0350] 此范例之输出命令2956指定第一默认值,即输出配置2902表示之字尺寸,在此情况下即窄字(8位)。如此,尺寸转换器3036会将标准S型输出值转换为一个8位量,其具有一个隐含之二维点,并且在此二维点右侧有7个位,而产生一个输出值01101110,如图中所示。
[0351] 图32系显示图30之启动函数单元212之运作之第二个范例。第三十二图之范例系描述当启动函数2934表示以标准尺寸传递累加器202数值 217时,启动函数单元212之运算。如图中所示,此配置2902系设定为神经处理单元216之窄配置。
[0352] 在此范例中,累加器202之宽度为28个位,累加器202二维点之位置右侧有10个位(这是因为在一实施例中数据二维点2912与权重二维点2914之加总为10,或者在另一实施例中累加器二维点2923暗中被指定为具有数值10)。举例来说,在执行所有算术逻辑运算后,图32所示之累加器202数值217 为000001100000011011.1101111010。
[0353] 在此范例中,输出二维点2954值表示对于输出而言,二维点右侧有4个位。因此,在传递输出二维点对准器3002与标准尺寸压缩器3008之后,累加器202 数值217会达到饱和并压缩至所示之标准型式值111111111111.1111,此数值系由多路复用器3032所接收以作为标准尺寸传递值3028。
[0354] 在此范例中显示两个输出命令2956。第一个输出命令2956指定第二默认值,即输出标准型式尺寸之下方位。因为配置2902所指示之尺寸为窄字(8位),标准尺寸就会是16位,而尺寸转换器3036会选择标准尺寸传递值3028之下方 8个位以产生如图中所示之8位数值11111111。第二个输出命令2956指定第三默认值,即输出标准型式尺寸之上方位。如此,尺寸转换器3036会选择标准尺寸传递值3028之上方8个位以产生如图中所示之8位数值11111111。
[0355] 图33系显示图30之启动函数单元212之运作之第三个范例。第三十三图之范例系揭示当启动函数2934表示要传递整个未经处理之累加器202 数值217时启动函数单元212之运作。如图中所示,此配置2902系设定为神经处理单元126之宽配置(例如16位之输入字)。
[0356] 在此范例中,累加器202之宽度为41个位,累加器202二维点位置的右侧有8个位(这是因为在一实施例中数据二维点2912与权重二维点2914之加总为8,或者在另一实施例中累加器二维点2923暗中被指定为具有数值8)。举例来说,在执行所有算术逻辑运算后,图33所示之累加器202数值217 为001000000000000000001100000011011.11011110。
[0357] 此范例中显示三个输出命令2956。第一个输出命令指定第四默认值,即输出未经处理之累加器202数值之下方字;第二个输出命令指定第五默认值,即输出未经处理之累加器202数值之中间字;而第三个输出命令指定第六默认值,即输出未经处理之累加器202数值之上方字。因为配置2902所指示之尺寸为宽字(16位),如图33所示,因应第一输出命令2956,多路复用器3037 会选择16位值0001101111011110;因应第二输出命令2956,多路复用器3037 会选择16位值0000000000011000;而因应第三输出命令2956,多路复用器3037 会选择16位值0000000001000000。
[0358] 如前述,神经网络单元121即可执行于整数数据而非浮点数据。如此,即有助于简化个个神经处理单元126,或至少其中之算术逻辑单元204部分。举例来说,这个算术逻辑单元204就不需要为了乘法器242而纳入在浮点运算中需用来将乘数之指数相加之加法器。类似地,这个算术逻辑单元204就不需要为了加法器234而纳入在浮点运算中需用来对准加数之二维点之移位器。所属技术领域具有通常知识者当能理解,浮点单元往往非常复杂;因此,本文所述之范例仅针对算术逻辑单元204进行简化,利用所述具有硬件定点辅助而让用户可指定相关二维点之整数实施例亦可用于对其他部分进行简化。相较于浮点之实施例,使用整数单元作为算术逻辑单元204可以产生一个较小(且较快)之神经处理单元126,而有利于将一个大型的神经处理单元126阵列整合进神经网络单元121内。启动函数单元212之部分可以基于使用者指定、累加数需要之小数字符数量以及输出值需要之小数字符数量,来处理累加器202数值217之缩放与饱和运算,而较佳者系基于使用者指定。任何额外复杂度与伴随之尺寸增加,以及启动函数单元212之定点硬件辅助内之能量与/或时间耗损,都可以透过在算术逻辑单元204间共享启动函数单元212之方式来进行分摊,这是因为如图11之实施例所示,采用共享方式之实施例可以减少启动函数单元 1112之数量。
[0359] 本文所述之实施例可以享有许多利用硬件算数单元以降低复杂度之优点 (相较于使用浮点算术单元),而同时还能用于小数之算术运算,即具有二维点之数字。浮点算术之优点在于它可以提供数据算术运算给数据之个别数值落在一个非常广的数值范围内(实际上只受限于指数范围的大小,因此会是一个非常大的范围)。也就是说,每个浮点数具有其潜在独一无二的指数值。不过,本文所述之实施例理解到并利用某些应用中具有输入数据高度平行且落于一相对较窄之范围内而使所有平行数据具有相同“指数”之特性。如此,这些实施例让用户将二维点位置一次指定给所有的输入值与/或累加值。类似地,透过理解并利用平行输出具有类似范围之特性,这些实施例让用户将二维点位置一次指定给所有的输出值。人工神经网络是此种应用之一范例,不过本发明之实施例亦可应用于执行其他应用之计算。透过将二维点位置一次指定给多个输入而非给对个别的输入数,相较于使用浮点运算,本发明之实施例可以更有效率地利用记忆空间(如需要较少之存储器)以及/或在使用类似数量之存储器的情况下提升精度,这是因为用于浮点运算之指数的位可用来提升数值精度。
[0360] 此外,本发明之实施例理解到在对一个大型系列之整数运算(如溢位或丧失较不显着之小数字符)执行累加时可能丧失精度,因此提供一个解决方法,主要是利用一个足够大的累加器来避免精度丧失。
[0361] 神经网络单元微运算之直接执行
[0362] 图34系显示图1之处理器100以及神经网络单元121之部分细节之方块示意图。神经网络单元121包括神经处理单元126之管线级3401。各个管线级3401系以级寄存器区分,并包括组合逻辑以达成本文之神经处理单元126 之运算,如布尔逻辑闸、多路复用器、加法器、乘法器、比较器等等。管线级3401从多路复用器3402接收一微运算3418。微运算3418会向下流动至管线级 3401并控制其组合逻辑。微运算3418是一个位集合。就一较佳实施例而言,微运算3418包括数据随机存取存储器122存储器地址123之位、权重随机存取存储器124存储器地址125之位、程序存储器129存储器地址131之位、多路复用寄存器208/705控制信号213/713、还有许多控制寄存器217之字段(例如图29A至图29C之控制寄存器)。在一实施例中,微运算3418包括大约 120个位。多路复用器3402从三个不同的来源接收微运算,并选择其中一个作为提供给管线级3401之微运算3418。
[0363] 多路复用器3402之一个微运算来源为图1之序列发生器128。序列发生器128会将由程序存储器129接收之神经网络单元指令译码并据以产生一个微运算3416提供至多路复用器3402之第一输入。
[0364] 多路复用器3402之第二个微运算来源为从图1之保留站108接收微指令 105以及从通用寄存器116与媒体寄存器118接收操作数之译码器3404。就一较佳实施例而言,如前述,微指令105系由指令转译器104因应MTNN指令1400 与MFNN指令1500之转译所产生。微指令105可包括一个立即栏以指定一特定函数(由一个MTNN指令1400或一个MFNN指令1500所指定),例如程序存储器129内程序的开始与停止执行、直接从媒体寄存器118执行一微运算、或是如前述读取/写入神经网络单元之一存储器。译码器3404会将微指令105译码并据以产生一个微运算3412提供至多路复用器之第二输入。就一较佳实施例而言,对于MTNN指令1400/MFNN指令1500之某些函数1432/1532而言,译码器3404不需要产生一个微运算3412向下传送至管线3401,例如写入控制寄存器127、开始执行程序存储器129内之程序、暂停执行程序存储器129内之程序、等待程序存储器129内之程序完成执行、从状态寄存器127读取以及重设神经网络单元121。
[0365] 多路复用器3402之第三个微运算来源为媒体寄存器118本身。就一较佳实施例而言,如前文对应于图14所述,MTNN指令1400可指定一函数以指示神经网络单元121直接执行一个由媒体寄存器118提供至多路复用器3402之第三输入之微运算3414。直接执行由架构媒体寄存器118提供之微运算3414有利于对神经网络单元121进行测试,如内建自我测试(BIST),或除错之动作。
[0366] 就一较佳实施例而言,译码器3404会产生一个模式指针3422控制多路复用器3402之选择。当MTNN指令1400指定一个函数开始执行一个来自程序存储器129之程序,译码器3404会产生一模式指针3422值使多路复用器3402选择来自序列发生器128之微运算3416,直到发生错误或直到译码器3404碰到一个MTNN指令1400指定一个函数停止执行来自程序存储器129之程序。当 MTNN指令1400指定一个函数指示神经网络单元121直接执行由媒体寄存器 118提供之一微运算3414,译码器3404会产生一个模式指针3422值使多路复用器
3402选择来自所指定之媒体寄存器118之微运算3414。否则,译码器3404 就会产生一个模式指针3422值使多路复用器3402选择来自译码器3404之微运算3412。
[0367] 可变率神经网络单元
[0368] 在许多情况下,神经网络单元121执行程序后就会进入待机状态(idle)等待处理器100处理一些需要在执行下一个程序前处理的事情。举例来说,假设处在一个类似于图3至图6A所述之情况,神经网络单元121会对一乘法累加启动函数程序(也可称为一前授神经网络层程序(feed forward neural network layer program))连续执行两次或更多次。相较于神经网络单元121执行程序所花费的时间,处理器100明显需要花费较长的时间来将512K之权重值写入权重随机存取存储器124。换言之,神经网络单元121会在短时间内执行程序,随后就进入待机状态,直到处理器100将接下来的权重值写入权重随机存取存储器
124供下一次程序执行使用。此情况可参照图36A,详如后述。在此情况下,神经网络单元121可采用较低时频率运行以延长执行程序之时间,藉以使执行程序所需之能量消耗分散至较长的时间范围,而使神经网络单元121,乃至于整个处理器100,维持在较低温度。此情况称为缓和模式,可参照图36B,详如后述。
[0369] 图35系一方块图,显示具有一可变率神经网络单元121之处理器100。此处理器100系类似于图1之处理器100,并且图中具有相同标号之组件亦相类似。图35之处理器100并具有时频产生逻辑3502耦接至处理器100之功能单元,这些功能单元即指令攫取单元101,指令快取102,指令转译器104,重命名单元106,保留站108,神经网络单元121,其他执行单元112,存储器子系统114,通用寄存器116与媒体寄存器118。时频产生逻辑3502包括一时频产生器,例如一相回路(PLL),以产生一个具有一主要时频率或时频频率之时频信号。举例来说,此主要时频率可以是1GHz,1.5GHz,2GHz等等。时频率即表示周期数,如时频信号每秒钟在高低状态间之震荡次数。较佳地,此时频信号具有一平衡周期(duty cycle),即此周期之一半为高状态而另一半为低状态;另外,此时频信号也可具有一非平衡周期,也就是时频信号处在高状态之时间长于其处在低状态之时间,反之亦然。较佳地,锁相回路系用以产生多个时频率之主要时频信号。较佳地,处理器100包括一电源管理模块,依据多种因素自动调整主要时频率,这些因素包括处理器100之动态侦测操作温度,利用率 (utilization),以及来自系统软件(如操作系统基本输入输出系统(BIOS))指示所需效能与/或节能指标之命令。在一实施例中,电源管理模块包括处理器100 之微码。
[0370] 时频产生逻辑3502并包括一时频散布网络,或时频树(clock tree)。时频树会将主要时频信号散布至处理器100之功能单元,如图35所示,此散布动作就是将时频信号3506-1传送至指令攫取单元101,将时频信号3506-2传送至指令快取102,将时频信号3506-
10传送至指令转译器104,将时频信号3506-9 传送至重命名单元106,将时频信号3506-8传送至保留站108,将时频信号3506-7 传送至神经网络单元121,将时频信号3506-4传送至其他执行单元112,将时频信号3506-3传送至存储器子系统114,将时频信号3506-5传送至通用寄存器116,以及将时频信号3506-6传送至媒体寄存器118,这些信号集体称为时频信号
3506。此时频树具有节点或线,以传送主要时频信号3506至其相对应之功能单元。此外,较佳地,时频产生逻辑3502可包括时频缓冲器,在需要提供较干净之时频信号与/或需要提升主要时频信号之电压准位时,特别是对于较远之节点,时频缓冲器可重新产生主要时频信号。此外,各个功能单元并具有其自身之子时频树,在需要时重新产生与/或提升所接收之相对应主要时频信号3506的电压准位。
[0371] 神经网络单元121包括时频降低逻辑3504,时频降低逻辑3504接收一缓和指针3512与主要时频信号3506-7,以产生一第二时频信号。第二时频信号具有一时频率。此时频率若非相同于主要时频率,就是处于一缓和模式从主要时频率降低一数值以减少热能产生,此数值系程序化至缓和指针3512。时频降低逻辑3504类似于时频产生逻辑3502,其具有一时频散布网络,或时频树,以散布第二时频信号至神经网络单元121之多种功能方块,此散布动作就是将时频信号3508-1传送至神经处理单元阵列126,将时频信号3508-2传送至序列发生器 128以即将时频信号3508-3传送至接口逻辑3514,这些信号集体称为第二时频信号3508。较佳地,这些神经处理单元126包括复数个管线级3401,如图34所示,管线级3401包括管线分级寄存器,用以从时频降低逻辑3504接收第二时频信号3508-1。
[0372] 神经网络单元121并具有接口逻辑3514以接收主要时频信号3506-7与第二时频信号3508-3。接口逻辑3514系耦接于处理器100前端之下部分(例如保留站108,媒体寄存器118与通用寄存器116)与神经网络单元121之多种功能方块间,这些功能方块实时频降低逻辑3504,数据随机存取存储器122,权重随机存取存储器124,程序存储器129与序列发生器
128。接口逻辑3514包括一数据随机存取存储器缓冲3522,一权重随机存取存储器缓冲
3524,图34 之译码器3404,以及缓和指标3512。缓和指标3512装载一数值,此数值系指定神经处理单元阵列126会以多慢的速度执行神经网络单元程序指令。较佳地,缓和指标3512系指定一除数值N,时频降低逻辑3504将主要时频信号3506-7 除以此除数值以产生第二时频信号3508,如此,第二时频信号之比率就会是1/N。较佳地,N的数值可程序化为复数个不同默认值中之任何一个,这些默认值可使时频降低逻辑3504对应产生复数个具有不同比率之第二时频信号3508,这些比率系小于主要时频率。
[0373] 在一实施例中,时频降低逻辑3504包括一时频除法器电路,用以将主要时频信号3506-7除以缓和指标3512数值。在一实施例中,时频降低逻辑3504包括时频闸(如AND闸),时频闸可透过一启动信号来遮蔽主要时频信号3506-7,启动信号在主要时频信号之每N个周期中只会产生一次真值。以一个包含一计数器以产生启动信号之电路为例,此计数器可向上计数至N。当伴随的逻辑电路侦测到计数器之输出与N匹配,逻辑电路就会在第二时频信号3508产生一真值脉冲并重设计数器。较佳地,缓和指标3512数值可由一架构指令予以程序化,例如图14之MTNN指令1400。较佳地,在架构程序指示神经网络单元121 开始执行神经网络单元程序前,运作于处理器100之架构程序会将缓和值程序化至缓和指针3512,这部分在后续对应于图37处会有更详细的说明。
[0374] 权重随机存取存储器缓冲3524系耦接于权重随机存取存储器124与媒体寄存器118之间作为其间数据传输之缓冲。较佳地,权重随机存取存储器缓冲3524 系类似于图17之缓冲器1704之一个或多个实施例。较佳地,权重随机存取存储器缓冲3524从媒体寄存器
118接收数据之部分系以具有主要时频率之主要时频信号3506-7加入时频,而权重随机存取存储器缓冲3524从权重随机存取存储器124接收数据之部分系以具有第二时频率之第二时频信号3508-3加入时频,第二时频率可依据程序化于缓和指针3512之数值从主要时频率调降,亦即依据神经网络单元121执行于缓和或一般模式来进行调降,也可以不是。在一实施例中,权重随机存取存储器124为单端口,如前文图17所述,权重随机存取存储器124并可由媒体寄存器118透过权重随机存取存储器缓冲3524,以及由神经处理单元126或图11之列缓冲1104,以任意方式(arbitrated fashion) 存取。在另一实施例中,权重随机存取存储器124为双端口,如前文图16 所述,各个端口可由媒体寄存器118透过权重随机存取存储器缓冲3524以及由神经处理单元126或列缓冲器1104以并行方式存取。
[0375] 类似于权重随机存取存储器缓冲3524,数据随机存取存储器缓冲3522系耦接于数据随机存取存储器122与媒体寄存器118之间作为其间数据传送之缓冲。较佳地,数据随机存取存储器缓冲3522系类似于图17之缓冲器1704之一个或多个实施例。较佳地,数据随机存取存储器缓冲3522从媒体寄存器118接收数据之部分系以具有主要时频率之主要时频信号3506-7加入时频,而数据随机存取存储器缓冲3522从数据随机存取存储器122接收数据之部分系以具有第二时频率之第二时频信号3508-3加入时频,第二时频率可依据程序化于缓和指针3512之数值从主要时频率调降,亦即依据神经网络单元121执行于缓和或一般模式来进行调降,也可以不是。在一实施例中,数据随机存取存储器122为单端口,如前文图17所述,数据随机存取存储器122并可由媒体寄存器118 透过数据随机存取存储器缓冲3522,以及由神经处理单元126或图11之列缓冲1104,以任意方式存取。在另一实施例中,数据随机存取存储器122为双端口,如前文图16所述,各个端口可由媒体寄存器118透过数据随机存取存储器缓冲3522以及由神经处理单元126或列缓冲器1104以并行方式存取。
[0376] 较佳地,而不论数据随机存取存储器122与/或权重随机存取存储器124为单端口或双端口,接口逻辑3514会包括数据随机存取存储器缓冲3522与权重随机存取存储器缓冲3524以同步主要时频域与第二时频域。较佳地,数据随机存取存储器122,权重随机存取存储器124与程序存储器129都具有一静态随机存取存储器(SRAM),其中包含相对应之读取启动信号,写入启动信号与存储器选择启动信号。
[0377] 如前述,神经网络单元121是处理器100之一执行单元。执行单元是处理器中执行架构指令转译出之微指令或是执行架构指令本身之功能单元,例如执行图1中架构指令103转译出之微指令105或是架构指令103本身。执行单元从处理器之通用寄存器接收操作数,例如从通用寄存器116与媒体寄存器118。执行单元执行微指令或架构指令后会产生结果,此结果会被写入通用寄存器。图14与图15所述之MTNN指令1400与MFNN指令1500为架构指令103 之范例。微指令系用以实现架构指令。更精确来说,执行单元对于架构指令转译出之一个或多个微指令之集体执行,就会是对于架构指令所指定之输入执行架构指令所指定之运算,以产生架构指令定义之结果。
[0378] 图36A系一时序图,显示处理器100具有神经网络单元121运作于一般模式之一运作范例,此一般模式即以主要时频率运作。在时序图中,时间之进程是由左而右。处理器100系以主要时频率执行架构程序。更精确来说,处理器100之前端(例如指令攫取单元101,指令快取102,指令转译器104,重命名单元106与保留站108)系以主要时频率攫取,译码且发布架构指令至神经网络单元121与其他执行单元112。
[0379] 起初,架构程序执行一架构指令(如MTNN指令1400),处理器前端100 系将此架构指令发布至神经网络单元121以指示神经网络单元121开始执行其程序存储器129内之神经网络单元程序。在之前,架构程序会执行一架构指令将一指定主要时频率之数值写入缓和指标3512,亦即使神经网络单元处于一般模式。更精确地说,程序化至缓和指针3512之数值会使时频降低逻辑3504以主要时频信号3506之主要时频率产生第二时频信号3508。较佳地,在此范例中,时频降低逻辑3504之时频缓冲器单纯提升主要时频信号3506之电压准位。另外在之前,架构程序会执行架构指令以写入数据随机存取存储器122,权重随机存取存储器124并将神经网络单元程序写入程序存储器129。因应神经网络单元程序MTNN指令1400,神经网络单元121会开始以主要时频率执行神经网络单元程序,这是因为缓和指标3512是以主要时频率值予以程序化。神经网络单元 121开始执行后,架构程序会持续以主要时频率执行架构指令,包括主要是以MTNN指令1400写入与/或读取数据随机存取存储器122与权重随机存取存储器124,以完成对于神经网络单元程序之下一次执行,或调用(invocation)或运作之准备。
[0380] 在图36A之范例中,相较于架构程序完成对于数据随机存取存储器 122与权重随机存取存储器124写入/读取所花费的时间,神经网络单元121能够以明显较少的时间(例如四分之一的时间)完成神经网络单元程序之执行。举例来说,以主要时频率运作之情况下,神经网络单元121花费大约1000个时频周期来执行神经网络单元程序,不过,架构程序会花费大约4000个时频周期。如此,神经网络单元121在剩下的时间内就会处于待机状态,在此范例中,这是一个相当长的时间,如大约3000个主要时频率周期。如图36A之范例所示,依据神经网络之大小与配置的不同,会再次执行前述模式,并可能持续执行许多次。因为神经网络单元121是处理器100中一个相当大且晶体管密集之功能单元,神经网络单元121之运作将会产生大量的热能,尤其是以主要时频率运作的时候。
[0381] 图36B系一时序图,显示处理器100具有神经网络单元121运作于缓和模式之一运作范例,缓和模式之运作时频率低于主要时频率。第三十六B 图之时序图系类似于图36A,在图36A中,处理器100系以主要时频率执行一架构程序。此范例系假定图36B中之架构程序与神经网络单元程序相同于图36A之架构程序与神经网络单元程序。不过,在启动神经网络单元程序之前,架构程序会执行一MTNN指令1400以一数值程序化缓和指针3512,此数值会使时频降低逻辑3504以小于主要时频率之第二时频率产生第二时频信号3508。也就是说,架构程序会使神经网络单元121处于图36B之缓和模式,而非图36A之一般模式。如此,神经处理单元126 就会以第二时频率执行神经网络单元程序,在缓和模式下,第二时频率小于主要时频率。此范例中系假定缓和指针3512是以一个将第二时频率指定为四分之一主要时频率之数值予以程序化。如此,神经网络单元121在缓和模式下执行神经网络单元程序所花费之时间会是其于一般模式下花费时间的四倍,如图36A图36B所示,透过比较此二图可发现神经网络单元121处于待机状态之时间长度会明显地缩短。如此,图36B中神经网络单元121执行神经网络单元程序消耗能量之持续时间大约会是图36A中神经网络单元 121在一般模式下执行程序的四倍。因此,图36B中神经网络单元121 执行神经网络单元程序在单位时间内产生的热能大约会是图36A的四分之一,而具有本文所述之优点。
[0382] 图37系一流程图,显示图35之处理器100之运作。此流程图描述之运作系类似于前文对应于图35,36A与36B之运作。此流程始于步骤3702。
[0383] 在步骤3702中,处理器100执行MTNN指令1400而将权重写入权重随机存取存储器124并且将数据写入数据随机存取存储器122。接下来流程前进至步骤3704。
[0384] 在步骤3704中,处理器100执行MTNN指令1400而以一个数值程序化缓和指针3512,此数值系指定一个低于主要时频率之时频率,亦即使神经网络单元121处于缓和模式。接下来流程前进至步骤3706。
[0385] 在步骤3706中,处理器100执行MTNN指令1400指示神经网络单元121 开始执行神经网络单元程序,即类似图36B所呈现之方式。接下来流程前进至步骤3708。
[0386] 在步骤3708中,神经网络单元121开始执行此神经网络单元程序。同时,处理器100会执行MTNN指令1400而将新的权重写入权重随机存取存储器124 (可能也会将新的数据写入数据随机存取存储器122),以及/或执行MFNN指令1500而从数据随机存取存储器122读取结果(可能也会从权重随机存取存储器124读取结果)。接下来流程前进至步骤3712。
[0387] 在步骤3712中,处理器100执行MFNN指令1500(例如读取状态寄存器 127),以侦测神经网络单元121已结束程序执行。假设架构程序选择一个好的缓和指标3512数值,神经网络单元121执行神经网络单元程序所花费的时间就会相同于处理器100执行部分架构程序以存取权重随机存取存储器124与/或数据随机存取存储器122所花费的时间,如图36B所示。接下来流程前进至步骤3714。
[0388] 在步骤3714,处理器100执行MTNN指令1400而利用一数值程序化缓和指针3512,此数值指定主要时频率,亦即使神经网络单元121处于一般模式。接下来前进至步骤3716。
[0389] 在步骤3716中,处理器100执行MTNN指令1400指示神经网络单元121 开始执行神经网络单元程序,即类似图36A所呈现之方式。接下来流程前进至步骤3718。
[0390] 在步骤3718中,神经网络单元121开始以一般模式执行神经网络单元程序。此流程终止于步骤3718。
[0391] 如前述,相较于在一般模式下执行神经网络单元程序(即以处理器之主要时频率执行),在缓和模式下执行可以分散运行时间而能避免产生高温。进一步来说,当神经网络单元在缓和模式执行程序时,神经网络单元是以较低的时频率产生热能,这些热能可以顺利地经由神经网络单元(例如半导体装置,金属层与下方的基材)与周围的封装体以及冷却机构(如散热片,扇)排出,也因此,神经网络单元内的装置(如晶体管,电容,导线)就比较可能在较低的温度下运作。整体来看,在缓和模式下运作也有助于降低处理器晶粒之其他部分内的装置温度。较低的运作温度,特别是对于这些装置之接面温度而言,可以减轻漏电流的产生。此外,因为单位时间内流入之电流量降低,电感噪声与IR压降噪声也会降低。此外,温度降低对于处理器内之金半场效晶体管 (MOSFET)之副偏压温度不稳定性(NBTI)与正偏压不稳定性(PBSI)也有正面影响,而能提升可靠度与/或装置以及处理器部分之寿命。温度降低并可减轻处理器之金属层内之热与电迁移效应。
[0392] 关于神经网络单元共享资源之架构程序与非架构程序间之沟通机制
[0393] 如前述,在图24至28与图35至图37之范例中,数据随机存取存储器122与权重随机存取存储器124之资源是共享的。神经处理单元126 与处理器100之前端系共享数据随机存取存储器122与权重随机存取存储器124。更精确地说,神经处理单元127与处理器100之前端,如媒体寄存器118,都会对数据随机存取存储器122与权重随机存取存储器124进行读取与写入。换句话说,执行于处理器100之架构程序与执行于神经网络单元121之神经网络单元程序会共享数据随机存取存储器122与权重随机存取存储器124,而在某些情况下,如前所述,需要对于架构程序与神经网络单元程序间之流动进行控制。程序存储器129之资源在一定程度下也是共享的,这是因为架构程序会对其进行写入,而序列发生器128会对其进行读取。本文所述之实施例系提供一高效能的解决方案,以控制架构程序与神经网络单元程序间存取共享资源之流动情形。
[0394] 在本文所述之实施例中,神经网络单元程序也称为非架构程序,神经网络单元指令也称为非架构指令,而神经网络单元指令集(如前所述也称为神经处理单元指令集)也称为非架构指令集。非架构指令集不同于架构指令集。在处理器100内包含指令转译器104将架构指令转译出微指令之实施例中,非架构指令集也不同于微指令集。
[0395] 图38系一方块图,详细显示神经网络单元121之序列器128。序列器 128提供存储器地址至程序存储器129,以选择提供给序列器128之非架构指令,如前所述。如图38所示,存储器地址系装载于序列发生器128之一程序计数器3802内。序列发生器128通常会以程序存储器129之地址顺序循序递增,除非序列发生器128遭遇到一非架构指令,例如一循环或分支指令,而在此情况下,序列发生器128会将程序计数器3802更新为控制指令之目标地址,即更新为位于控制指令之目标之非架构指令之地址。因此,装载于程序计数器3802 之地址131会指定当前被攫取以供神经处理单元126执行之非架构程序之非架构指令在程序存储器129中之地址。程序计数器3802之数值可由架构程序透过状态寄存器127之神经网络单元程序计数器字段3912而取得,如后续图29所述。如此可使架构程序依据非架构程序之进度,决定对于数据随机存取存储器122与/或权重随机存取存储器124读取/写入数据之位置。
[0396] 序列发生器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之数值可由架构程序透过状态寄存器127之循环计数字段3914取得,如后续图29所示。如此可使架构程序依据非架构程序之进度,决定对于数据随机存取存储器122与/或权重随机存取存储器124读取/写入数据之位置。在一实施例中,序列发生器包括三个额外的循环计数器以搭配非架构程序内之巢状循环,这三个循环计数器的数值也可透过状态寄存器127读取。循环指令中具有一位以指示这四个循环计数器中哪一个是提供给当前之循环指令使用。
[0397] 序列发生器128并包括一执行次数计数器3806。执行次数计数器3806系搭配非架构指令,例如图4,图9,图20与图26A中地址2之乘法累加指令,以及图28中地址2之maxwacc指令,这些指令在此后将会被称为“执行”指令。在前述范例中,各个执行指令分别指定一执行计数511,511,1023,2 与3。当序列发生器128遭遇到一个指定一非零执行计数之执行指令时,序列发生器128会以此指定值加载执行次数计数器3806。此外,序列发生器128会产生一适当的微运算3418以控制图34中神经处理单元126管线级3401内之逻辑执行,并且使执行次数计数器3806递减。若是执行次数计数器3806大于零,序列发生器128会再次产生一适当的微运算3418控制神经处理单元126 内之逻辑并使执行次数计数器3806递减。序列发生器128会持续以此方式运作,直到执行次数计数器3806之数值归零。因此,执行次数计数器3806之数值即为非架构执行指令内指定尚待执行之运算次数(这些运算如对于累加值与一数据/权重字进行乘法累加,取最大值,加总运算等)。执行次数计数器3806之数值可利用架构程序透过状态寄存器127之执行次数计数字段3916取得,如后续图39所述。如此可使架构程序依据非架构程序之进度,决定对于数据随机存取存储器122与/或权重随机存取存储器
124读取/写入数据之位置。
[0398] 图39系一方块图,显示神经网络单元121之控制与状态寄存器127 之若干字段。这些字段包括包括神经处理单元126执行非架构程序最近写入之权重随机存取存储器列之地址2602,神经处理单元126执行非架构程序最近读取之权重随机存取存储器列之地址2604,神经处理单元126执行非架构程序最近写入之数据随机存取存储器列的地址2606,以及神经处理单元126执行非架构程序最近读取之数据随机存取存储器列的地址2608,如前述图26B所示。此外,这些字段还包括一神经网络单元程序计数器3912字段,一循环计数器3914字段,与一执行次数计数器3916字段。如前述,架构程序可将状态寄存器127内之数据读取至媒体寄存器118与/或通用寄存器116,例如透过MFNN 指令1500读取包括神经网络单元程序计数器3912,循环计数器3914与执行次数计数器3916字段之数值。程序计数器字段3912之数值反映图38中程序计数器3802之数值。循环计数器字段3914之数值反映循环计数器
3804之数值。执行次数计数器字段3916之数值反映执行次数计数器3806之数值。在一实施例中,序列发生器128在每次需要调整程序计数器3802,循环计数器3804,或执行次数计数器3806时,都会更新程序计数器字段3912,循环计数器字段 3914与执行次数计数器字段
3916之数值,如此,这些字段的数值就会是架构程序读取当下的数值。在另一实施例中,当神经网络单元121执行架构指令以读取状态寄存器127时,神经网络单元121仅仅取得程序计数器3802,循环计数器3804与执行次数计数器3806之数值并将其提供回架构指令(例如提供至媒体寄存器118与通用寄存器116)。
[0399] 由此可以发现,图39之状态寄存器127之字段的数值可以理解为非架构指令由神经网络单元执行之过程中,其执行进度的信息。关于非架构程序执行进度之某些特定面向,如程序计数器3802数值,循环计数器3804数值,执行次数计数器3806数值,最近读取/写入之权重随机存取存储器124地址125 之字段2602/2604,以及最近读取/写入之数据随机存取存储器122地址123之字段2606/2608,已于先前之章节进行描述。执行于处理器100之架构程序可以从状态寄存器127读取图39之非架构程序进度值并利用这些信息来做决策,例如透过如比较与分支指令等架构指令来进行。举例来说,架构程序会决定对于数据随机存取存储器122与/或权重随机存取存储器124进行数据/权重之读取 /写入之列,以控制数据随机存取存储器122或权重随机存取存储器124之数据的流入与流出,尤其是针对大型数据组与/或不同非架构指令之重迭执行。这些利用架构程序进行决策之范例可参照本文前后章节之描述。
[0400] 举例来说,如前文图26A所述,架构程序设定非架构程序将卷积运算之结果写回数据随机存取存储器122中卷积核2402上方之列(如列8上方),而当神经网络单元121利用最近写入数据随机存取存储器122列2606之地址写入结果时,架构程序会从数据随机存取存储器122读取此结果。
[0401] 在另一范例中,如前文图26B所述,架构程序利用来自图38 之状态寄存器127字段的信息确认非架构程序之进度,而将图24之数据阵列2404分成5个512x 1600之数据块以执行卷积运算。架构程序将此2560x 1600数据阵列之第一个512x 1600数据块写入权重随机存取存储器124并启动非架构程序,其循环计数为1600而权重随机存取存储器124初始化之输出列为 0。神经网络单元121执行非架构程序时,架构程序会读取状态寄存器127以确认权重随机存取存储器124之最近写入列2602,如此架构程序就可读取由非架构程序写入之有效卷积运算结果,并且在读取后利用下一个512x 1600数据块覆写此有效卷积运算结果,如此,在神经网络单元121完成非架构程序对于第一个512x 1600数据块之执行后,处理器100在必要时就可立即更新非架构程序并再次启动非架构程序以执行下一个512x 1600数据块。
[0402] 在另一范例中,假定架构程序使神经网络单元121执行一系列典型的神经网络乘法累加启动函数,其中,权重系被储存于权重随机存取存储器124而结果会被写回数据随机存取存储器122。在此情况下,架构程序读取权重随机存取存储器124之一列后就不会再对其进行读取。如此,在当前的权重已经被非架构程序读取/使用后,就可以利用架构程序开始将新的权重复写权重随机存取存储器124上之权重,以提供非架构程序之下一次执行(例如下一个神经网络层) 使用。在此情况下,架构程序会读取状态寄存器127以取得权重随机存取存储器之最近读取列2604之地址以决定其于权重随机存取存储器124中写入新权重组的位置。
[0403] 在另一个范例中,假定架构程序知道非架构程序内包括一个具有大执行次数计数之执行指令,如图20中地址2之非架构乘法累加指令。在此情况下,架构程序需要知道执行次数计数3916,方能知道大致上还需要多少个时频周期才能完成此非架构指令以决定架构程序接下来所要采取之两个或多个动作。举例来说,若是需要很长的时间才能完成执行,架构程序就会放弃对于另一个架构程序之控制,例如操作系统。类似地,假定架构程序知道非架构程序包括一个具有相当大之循环计数的循环组,例如图28之非架构程序。在此情况下,架构程序会需要知道循环计数3914,方能知道大致上还需要多少个时频周期才能完成此非架构指令以决定接下来所要采取之两个或多个动作。
[0404] 在另一范例中,假定架构程序使神经网络单元121执行类似于图27与图28所述之共源运算,其中所取得的数据是储存在权重随机存取存储器124 而结果会被写回权重随机存取存储器124。不过,不同于图27与图28之范例,假定此范例之结果会被写回权重随机存取存储器124之最上方400列,例如列1600至1999。在此情况下,非架构程序完成读取四列其所要取得之权重随机存取存储器124数据后,非架构程序就不会再次进行读取。因此,一旦当前四列数据都已被非架构程序读取/使用后,即可利用架构程序开始将新数据(如非架构程序之下一次执行之权重,举例来说,例如对取得数据执行典型乘法累加启动函数运算之非架构程序)覆写权重随机存取存储器124之数据。在此情况下,架构程序会读取状态寄存器127以取得权重随机存取存储器之最近读取列2604之地址,以决定新的权重组写入权重随机存取存储器124之位置。
[0405] 时间递归(recurrent)神经网络加速
[0406] 传统前馈神经网络不具有储存网络先前输入之存储器。前馈神经网络通常被用于执行在任务中随时间输入网络之多种输入各自独立之任务,多种输出各自独立之任务亦是如此。相较之下,时间递归神经网络通常有助于执行在任务中随时间输入至神经网络之输入序列具有有效数之任务。(此处的序列通常被称为时间步骤。)因此,时间递归神经网络包括一个概念上的存储器或内部状态,以装载网络因应序列中之先前输入所执行之计算而产生之信息,时间递归神经网络之输出系关联于此内部状态与下一个时间步骤之输入。下列任务范例,如语音识别,语言模型,字产生,语言翻译,影像描述产生以及某些形式之手写识别,系倾向于使用时间递归神经网络执行以取得良好执行结果。
[0407] 三种习知之时间递归神经网络的范例为Elman时间递归神经网络,Jordan 时间递归神经网络与长短期记忆(LSTM)神经网络。Elman时间递归神经网络包含内容节点以记忆当前时间步骤中时间递归神经网络之隐藏层状态,此状态在下一个时间步骤中会作为对于隐藏层之输入。Jordan时间递归神经网络类似于 Elman时间递归神经网络,除了其中之内容节点会记忆时间递归神经网络之输出层状态而非隐藏层状态。长短期记忆神经网络包括由长短期记忆胞构成之一长短期记忆层。每个长短期记忆胞具有当前时间步骤之一当前状态与一当前输出,以及一个新的或后续时间步骤之一新的状态与一新的输出。长短期记忆胞包括一输入闸与一输出闸,以及一遗忘闸,遗忘闸可以使神经元失去其所记忆之状态。这三种时间递归神经网络在后续章节会有更详细的描述。
[0408] 如本文所述,对于时间递归神经网络而言,如Elman或Jordan时间递归神经网络,神经网络单元每次执行都会使用一时间步骤,每次执行会取得一组输入层节点值,并执行必要计算使其透过时间递归神经网络进行传递,以产生输出层节点值以及隐藏层与内容层节点值。因此,输入层节点值会关联于计算隐藏,输出与内容层节点值之时间步骤;而隐藏,输出与内容层节点值会关联于产生这些节点值之时间步骤。输入层节点值是经时间递归神经网络调整后之系统取样值,如影像,语音取样,商业市场数据之快照。对于长短期记忆神经网络而言,神经网络单元之每次执行都会使用一时间步骤,每次执行会取得一组记忆胞输入值并执行必要计算以产生记忆胞输出值(以及记忆胞状态与输入闸,失忆闸以及输出闸数值),这也可以理解为是透过长短期记忆层神经元传递记忆胞输入值。因此,记忆胞输入值会关联于计算记忆胞状态以及输入闸,失忆闸与输出闸数值之时间步骤;而记忆胞状态以及输入闸,失忆闸与输出闸数值会关联于产生这些节点值之时间步骤。
[0409] 内容层节点值,也称为状态节点,是神经网络之状态值,此状态值系基于关联于先前时间步骤之输入层节点值,而不仅只关联于当前时间步骤之输入层节点值。神经网络单元对于时间步骤所执行之计算(例如对于Elman或Jordan 时间递归神经网络之隐藏层节点值计算)是先前时间步骤产生之内容层节点值之一函数。因此,时间步骤开始时的网络状态值(内容节点值)会影响此时间步骤之过程中产生之输出层节点值。此外,时间步骤结束时之网络状态值会受到此时间步骤之输入节点值与时间步骤开始时之网络状态值影响。类似地,对于长短期记忆胞而言,记忆胞状态值系关联于先前时间步骤之记忆胞输入值,而非仅只关联于当前时间步骤之记忆胞输入值。因为神经网络单元对于时间步骤执行之计算(例如下一个神经往状态之计算)是先前时间步骤产生之记忆胞状态值之函数,时间步骤开始时之网络状态值(记忆胞状态值)会影响此时间步骤中产生之记忆胞输出值,而此时间步骤结束时之网络状态值会受到此时间步骤之记忆胞输入值与先前网络状态值影响。
[0410] 图40系一方块图,显示Elman时间递归神经网络之一范例。图40 之Elman时间递归神经网络包括输入层节点,或神经元,标示为D0,D1至Dn,集体称为输入层节点D而个别通称为输入层节点D;隐藏层节点/神经元,标示为Z0,Z1至Zn,集体称为隐藏层节点Z而个别通称为隐藏层节点Z;输出层节点/神经元,标示为Y0,Y1至Yn,集体称为输出层节点Y而个别通称为输出层节点Y;以及内容层节点/神经元,标示为C0,C1至Cn,集体称为隐藏层节点C 而个别通称为隐藏层节点C。在图40之Elman时间递归神经网络之范例中,各个隐藏层节点Z具有一输入连结至各个输入层节点D之输出,并具有一输入连结至各个内容层节点C之输出;各个输出层节点Y具有一输入连结至各个隐藏层节点Z之输出;而各个内容层节点C具有一输入连结至一相对应隐藏层节点Z之输出。
[0411] 在许多方面,Elman时间递归神经网络之运作系类似于传统之前馈人工神经网络。也就是说,对于一给定节点而言,此节点之各个输入连结都会有一个相关联的权重;此节点会将关联于所有输入连结之乘积相加以产生一总数(此总数内可能还会包含一偏移项);一般而言,对此总数还会执行一启动函数以产生节点之输出值,此输出值有时称为此节点之启动值。对于传统之前馈网络而言,数据总是沿着输入层至输出层之方向流动。也就是说,输入层提供一数值至隐藏层(通常会有多个隐藏层),而隐藏层会产生其输出值提供至输出层,而输出层会产生可被取用之输出。
[0412] 不过,不同于传统之前馈网络,Elman时间递归神经网络还包括一些反馈连结,也就是图40中从隐藏层节点Z至内容层节点C之连结。Elman时间递归神经网络之运作如下,当输入层节点D在一个新的时间步骤提供一输入值至隐藏层节点Z,内容节点C会提供一数值至隐藏层Z,此数值为隐藏层节点Z 因应先前输入,也就是当前时间步骤,之输出值。从这个意义上来说,Elman 时间递归神经网络之内容节点C是一个基于先前时间步骤之输入值之存储器。图41与图42将会对执行关联于图40之Elman时间递归神经网络之计算之神经网络单元121的运作实施例进行说明。
[0413] 为了说明本发明,Elman时间递归神经网络是一个包含至少一个输入节点层,一个隐藏节点层,一个输出节点层与一个内容节点层之时间递归神经网络。对于一给定时间步骤,内容节点层会储存隐藏节点层于前一个时间步骤产生且反馈至内容节点层之结果。此反馈至内容层的结果可以是启动函数之执行结果或是隐藏节点层执行累加运算而未执行启动函数之结果。
[0414] 图41系一方块图,显示当神经网络单元121执行关联于图40之 Elman时间递归神经网络之计算时,神经网络单元121之数据随机存取存储器 122与权重随机存取存储器124内之数据配置之一范例。在图41之范例中假定图40之Elman时间递归神经网络具有512个输入节点D,512个隐藏节点Z,512个内容节点C,与512个输出节点Y。此外,亦假定此Elman时间递归神经网络为完全链接,即全部512个输入节点D均连结各个隐藏节点Z作为输入,全部512个内容节点C均连结各个隐藏节点Z作为输入,而全部512个隐藏节点Z均连结各个输出节点Y作为输入。此外,此神经网络单元系配置为 512个神经处理单元126或神经元,例如采宽配置。最后,此范例系假定关联于内容节点C至隐藏节点Z之连结的权重均为数值1,因而不需储存这些单一的权重值。
[0415] 如图中所示,权重随机存取存储器124之下方512个列(列0至511)系装载关联于输入节点D与隐藏节点Z间之连结之权重值。更精确地说,如图中所示,列0系装载关联于由输入节点D0至隐藏节点Z之输入连结的权重,亦即,字0会装载关联于输入节点D0与隐藏节点Z0间之链接的权重,字1会装载关联于输入节点D0与隐藏节点Z1间之链接的权重,字2会装载关联于输入节点 D0与隐藏节点Z2间之连结的权重,依此类推,字511会装载关联于输入节点 D0与隐藏节点Z511间之连结的权重;列1系装载关联于由输入节点D1至隐藏节点Z之输入连结的权重,亦即,字0会装载关联于输入节点D1与隐藏节点 Z0间之链接的权重,字1会装载关联于输入节点D1与隐藏节点Z1间之链接的权重,字2会装载关联于输入节点D1与隐藏节点Z2间之连结的权重,依此类推,字511会装载关联于输入节点D1与隐藏节点Z511间之连结的权重;直到列511,列511系装载关联于由输入节点D511至隐藏节点Z之输入连结的权重,亦即,字0会装载关联于输入节点D511与隐藏节点Z0间之链接的权重,字1 会装载关联于输入节点D511与隐藏节点Z1间之链接的权重,字2会装载关联于输入节点D511与隐藏节点Z2间之连结的权重,依此类推,字511会装载关联于输入节点D511与隐藏节点Z511间之连结的权重。此配置与用途系类似于前文对应于图4至图6A所述之实施例。
[0416] 如图中所示,权重随机存取存储器124之后续512个列(列512至1023) 是以类似的方式装载关联于隐藏节点Z与输出节点Y间之连结的权重。
[0417] 数据随机存取存储器122系装载Elman时间递归神经网络节点值供一系列时间步骤使用。进一步来说,数据随机存取存储器122系以三列为组装载提供一给定时间步骤之节点值。如图中所示,以一个具有64列之数据随机存取存储器122为例,此数据随机存取存储器122可装载供20个不同时间步骤使用之节点值。在图41之范例中,列0至2装载供时间步骤0使用之节点值,列3 至5装载供时间步骤1使用之节点值,依此类推,列57至59装载供时间步骤 19使用之节点值。各组中的第一列系装载此时间步骤之输入节点D之数值。各组中的第二列系装载此时间步骤之隐藏节点Z之数值。各组中的第三列系装载此时间步骤之输出节点D之数值。如图中所示,数据随机存取存储器122之各个行系装载其相对应之神经元或神经处理单元126之节点值。也就是说,行0 系装载关联于节点D0,Z0与Y0之节点值,其计算是由神经处理单元0所执行;行1系装载关联于节点D1,Z1与Y1之节点值,其计算是由神经处理单元1所执行;依此类推,行511系装载关联于节点D511,Z511与Y511之节点值,其计算是由神经处理单元511所执行,这部分在后续对应于图42处会有更详细的说明。
[0418] 如图41所指出,对于一给定时间步骤而言,位于各组三列存储器之第二列之隐藏节点Z的数值会是下一个时间步骤之内容节点C的数值。也就是说,神经处理单元126在一时间步骤内计算并写入之节点Z的数值,会成为此神经处理单元126在下一个时间步骤内用于计算节点Z的数值所使用之节点C 的数值(连同此下一个时间步骤之输入节点D的数值)。内容节点C之初始值 (在时间步骤0用以计算列1中之节点Z的数值所使用之节点C的数值)系假定为零。这在后续对应于图42之非架构程序之相关章节会有更详细的说明。
[0419] 较佳地,输入节点D的数值(图41之范例中之列0,3,依此类推至列57之数值)系由执行于处理器100之架构程序透过MTNN指令1400写入/ 填入数据随机存取存储器122,并且是由执行于神经网络单元121之非架构程序读取/使用,例如图42之非架构程序。相反地,隐藏/输出节点Z/Y之数值 (图41之范例中之列1与2,4与5,依此类推至列58与59之数值)则是由执行于神经网络单元121之非架构程序写入/填入数据随机存取存储器122,并且是由执行于处理器100之架构程序透过MFNN指令1500读取/使用。图41之范例系假定此架构程序会执行以下步骤:(1)对于20个不同的时间步骤,将输入节点D之数值填入数据随机存取存储器122(列0,3,依此类推至列57);(2)启动图42之非架构程序;(3)侦测非架构程序是否执行完毕; (4)从数据随机存取存储器122读出输出节点Y之数值(列2,5,依此类推至列59);以及(5)重复步骤(1)至(4)若干次直到完成任务,例如对手机用户之陈述进行辨识所需之计算。
[0420] 在另一种执行方式中,架构程序会执行以下步骤:(1)对单一个时间步骤,以输入节点D之数值填入数据随机存取存储器122(如列0);(2)启动非架构程序(图42非架构程序之一修正后版本,不需循环,并且只存取数据随机存取存储器122之单一组三个列);(3)侦测非架构程序是否执行完毕;(4)从数据随机存取存储器122读出输出节点Y之数值(如列2);以及(5)重复步骤 (1)至(4)若干次直到完成任务。此二种方式何者为优可依据时间递归神经网络之输入值的取样方式而定。举例来说,若是此任务容许在多个时间步骤对输入进行取样(例如大约20个时间步骤)并执行计算,第一种方式就较为理想,因为此方式可能带来更多计算资源效率与/或较佳的效能,不过,若是此任务只容许在单一个时间步骤执行取样,就需要使用第二种方式。
[0421] 第三实施例类似于前述第二种方式,不过,不同于第二种方式使用单一组三列数据随机存取存储器122,此方式之非架构程序使用多组三列存储器,也就是在各个时间步骤使用不同组三列存储器,此部分类似于第一种方式。在此第三实施例中,较佳地,架构程序在步骤(2)前包含一步骤,此步骤中,架构程序会在非架构程序启动前对其进行更新,例如将地址1之指令内的数据随机存取存储器122列更新为指向下一组三列存储器。
[0422] 图42系一表格,显示储存于神经网络单元121之程序存储器129之一程序,此程序系由神经网络单元121执行,并依据图41之配置使用数据与权重以达成Elman时间递归神经网络。图42(以及图45,图48,图51,图54与图57)之非架构程序中之若干指令详如前述(例如乘法累加(MULT-ACCUM),循环(LOOP),初始化(INITIALIZE)指令),以下段落系假定这些指令与前述说明内容一致,除非有不同的说明。
[0423] 图42之范例程序包含13个非架构指令,分别位于地址0至12。地址 0之指令(INITIALIZE NPU,LOOPCNT=20)清除累加器202并且将循环计数器 3804初始化至数值20,以执行20次循环组(地址4至11之指令)。较佳地,此初始化指令也会使神经网络单元121处于宽配置,如此,神经网络单元121 就会配置为512个神经处理单元126。如同后续章节所述,在地址1至3以及地址7至11之指令执行过程中,这512个神经处理单元126系作为512个相对应之隐藏层节点Z进行运作,而在地址4至6之指令执行过程中,这512个神经处理单元126系作为512个相对应之输出层节点Y进行运作。
[0424] 地址1至3之指令不属于程序之循环组而只会执行一次。这些指令计算隐藏层节点Z之初始值并将其写入数据随机存取存储器122之列1供地址4至6 之指令之第一次执行使用,以计算出第一时间步骤(时间步骤0)之输出层节点 Y。此外,这些由地址1至3之指令计算并写入数据随机存取存储器122之列1 之隐藏层节点Z之数值会变成内容层节点C之数值供地址7与8之指令之第一次执行使用,以计算出隐藏层节点Z之数值供第二时间步骤(时间步骤1)使用。
[0425] 在地址1与2之指令的执行过程中,这512个神经处理单元126中之各个神经处理单元126会执行512个乘法运算,将位于数据随机存取存储器122列0 之512个输入节点D数值乘上权重随机存取存储器124之列0至511中相对应此神经处理单元126之行之权重,以产生512个乘积累加于相对应神经处理单元126之累加器202。在地址3之指令的执行过程中,这
512个神经处理单元之 512个累加器202之数值会被传递并写入数据随机存取存储器122之列1。也就是说,地址3之输出指令会将512个神经处理单元中之各个神经处理单元512 之累加器202数值写入数据随机存取存储器122之列1,此数值即为初始之隐藏层Z数值,随后,此指令会清除累加器202。
[0426] 图42之非架构程序之地址1至2之指令所执行之运算类似于图4 之非架构指令之地址1至2之指令所执行之运算。进一步来说,地址1之指令 (MULT_ACCUM DR ROW 0)会指示这512个神经处理单元126中之各个神经处理单元126将数据随机存取存储器122之列0之相对应字读入其多路复用寄存器208,将权重随机存取存储器124之列0之相对应字读入其多路复用寄存器 205,将数据字与权重字相乘产生乘积并将此乘积加入累加器202。地址2之指令(MULT-ACCUM ROTATE,WR ROW+1,COUNT=511)指示这512个神经处理单元中之各个神经处理单元126将来自相邻神经处理单元126之字转入其多路复用寄存器208(利用由神经网络单元121之512个多路复用寄存器208集体运作构成之512个字之旋转器,这些寄存器即为地址1之指令指示将数据随机存取存储器122之列读入之寄存器),将权重随机存取存储器124之下一列之相对应字读入其多路复用寄存器705,将数据字与权重字相乘产生乘积并将此乘积加入累加器202,并且执行前述运算511次。
[0427] 此外,图42中地址3之单一非架构输出指令(OUTPUT PASSTHRU, DR OUT ROW 1,CLR ACC)会将启动函数指令之运算与图4中地址3与4之写入输出指令合并(虽然图42之程序系传递累加器202数值,而图4 之程序则是对累加器202数值执行一启动函数)。也就是说,在图42之程序中,执行于累加器202数值之启动函数,如果有的话,系输出指令中指定 (也在地址6与11之输出指令中指定),而非如图4之程序所示系于一个不同之非架构启动函数指令中指定。图4(以及图20,图26A与图28) 之非架构程序之另一实施例,亦即将启动函数指令之运算与写入输出指令(如图4之地址3与4)合并为如图42所示之单一非架构输出指令亦属于本发明之范畴。图42之范例假定隐藏层(Z)之节点不会对累加器数值执行启动函数。不过,隐藏层(Z)对累加器数值执行启动函数之实施例亦属本案发明之范畴,这些实施例可利用地址3与11之指令进行运算,如S型,双曲正切,校正函数等。
[0428] 相较于地址1至3之指令只会执行一次,地址4至11之指令则是位于程序循环内而会被执行若干次数,此次数系由循环计数所指定(例如20)。地址7 至11之指令的前十九次执行系计算隐藏层节点Z之数值并将其写入数据随机存取存储器122供地址4至6之指令之第二至二十次执行使用以计算剩余时间步骤之输出层节点Y(时间步骤1至19)。(地址7至11之指令之最后/第二十次执行系计算隐藏层节点Z之数值并将其写入数据随机存取存储器122之列61,不过,这些数值并未被使用。)
[0429] 在地址4与5之指令(MULT-ACCUM DR ROW+1,WR ROW 512 and MULT-ACCUM ROTATE,WR ROW+1,COUNT=511)之第一次执行中(对应于时间步骤0),这512个神经处理单元126中之各个神经处理单元126会执行512个乘法运算,将数据随机存取存储器122之列1之512个隐藏节点Z之数值 (这些数值系由地址1至3之指令之单一次执行而产生与写入)乘上权重随机存取存储器124之列512至1023中对应此神经处理单元126之行之权重,以产生512个乘积累加于相对应神经处理单元126之累加器202。在地址6之指令  (OUTPUT ACTIVATION FUNCTION,DR OUT ROW+1,CLR ACC)之第一次执行中,会对于这512个累加数值执行一启动函数(例如S型,双曲正切,校正函数)以计算输出层节点Y之数值,执行结果会写入数据随机存取存储器122 之列2。
[0430] 在地址4与5之指令之第二次执行中(对应于时间步骤1),这512个神经处理单元126中之各个神经处理单元126会执行512个乘法运算,将数据随机存取存储器122之列4之
512个隐藏节点Z之数值(这些数值系由地址7至11 之指令之第一次执行而产生与写入)乘上权重随机存取存储器124之列512至 1023中对应此神经处理单元126之行之权重,以产生
512个乘积累加于相对应神经处理单元126之累加器202,而在地址6之指令之第二次执行中,会对于这 512个累加数值执行一启动函数以计算输出层节点Y之数值,此结果系写入数据随机存取存储器122之列5;在地址4与5之指令之第三次执行中(对应于时间步骤2),这
512个神经处理单元126中之各个神经处理单元126会执行512 个乘法运算,将数据随机存取存储器122之列7之512个隐藏节点Z之数值(这些数值系由地址7至11之指令之第二次执行而产生与写入)乘上权重随机存取存储器124之列512至1023中对应此神经处理单元126之行之权重,以产生512 个乘积累加于相对应神经处理单元126之累加器202,而在地址6之指令之第三次执行中,会对于这512个累加数值执行一启动函数以计算输出层节点Y之数值,此结果系写入数据随机存取存储器122之列8;依此类推,在地址4与5之指令之第二十次执行中(对应于时间步骤19),这512个神经处理单元126中之各个神经处理单元126会执行
512个乘法运算,将数据随机存取存储器122 之列58之512个隐藏节点Z之数值(这些数值系由地址7至11之指令之第十九次执行而产生与写入)乘上权重随机存取存储器124之列512至1023中对应此神经处理单元126之行之权重,以产生512个乘积累加于相对应神经处理单元126之累加器202,而在地址6之指令之第二十次执行中,会对于这512个累加数值执行一启动函数以计算输出层节点Y之数值,执行结果系写入数据随机存取存储器122之列59。
[0431] 在地址7与8之指令之第一次执行中,这512个神经处理单元126中之各个神经处理单元126将数据随机取存储器122之列1之512个内容节点C的数值累加至其累加器202,这些数值系由地址1至3之指令之单一次执行所产生。进一步来说,地址7之指令(ADD_D_ACC DR ROW+0)会指示这512个神经处理单元126中之各个神经处理单元126将数据随机存取存储器122当前列(在第一次执行之过程中即为列0)之相对应字读入其多路复用寄存器208,并将此字加入累加器202。地址8之指令(ADD_D_ACC ROTATE,COUNT=511)指示这512个神经处理单元126中之各个神经处理单元126将来自相邻神经处理单元126之字转入其多路复用寄存器208(利用由神经网络单元121之512个多路复用寄存器208集体运作构成之512个字之旋转器,这些多路复用寄存器即为地址7之指令指示读入数据随机存取存储器122之列之寄存器),将此字加入累加器202,并且执行前述运算511次。
[0432] 在地址7与8之指令之第二次执行中,这512个神经处理单元126中之各个神经处理单元126会将将数据随机取存储器122之列4之512个内容节点C 之数值累加至其累加器202,这些数值系由地址9至11之指令之第一次执行所产生并写入;在地址7与8之指令之第三次执行中,这512个神经处理单元126 中之各个神经处理单元126会将将数据随机取存储器122之列7之512个内容节点C之数值累加至其累加器202,这些数值系由地址9至11之指令之第二次执行所产生并写入;依此类推,在地址7与8之指令之第二十次执行中,这512 个神经处理单元126中之各个神经处理单元126会将将数据随机取存储器122 之列58之512个内容节点C之数值累加至其累加器202,这些数值系由地址9 至11之指令之第十九次执行所产生并写入。
[0433] 如前述,图42之范例系假定关联于内容节点C至隐藏层节点Z之连结之权重具有单一值。不过,在另一实施例中,这些位于Elman时间递归神经网络内之链接则是具有非零权重值,这些权重在图42之程序执行前系放置于权重随机存取存储器124(例如列1024至1535),地址7之程序指令为 MULT-ACCUM DR ROW+0,WR ROW 1024,而地址8之程序指令为 MULT-ACCUM ROTATE,WR ROW+1,COUNT=511。较佳地,地址8之指令并不存取权重随机存取存储器124,而是旋转地址7之指令从权重随机存取存储器124读入多路复用寄存器705之数值。在511个执行地址8指令之时频周期内不对权重随机存取存储器124进行存取即可保留更多带宽供架构程序存取权重随机存取存储器124使用。
[0434] 在地址9与10之指令(MULT-ACCUM DR ROW+2,WR ROW 0 and MULT-ACCUM ROTATE,WR ROW+1,COUNT=511)之第一次执行中(对应于时间步骤1),这512个神经处理单元126中之各个神经处理单元126会执行 512个乘法运算,将数据随机存取存储器122之列3之512个输入节点D之数值乘上权重随机存取存储器124之列0至511中对应此神经处理单元126之行之权重以产生512个乘积,连同地址7与8之指令对于512个内容节点C数值所执行之累加运算,累加于相对应神经处理单元126之累加器202以计算隐藏层节点Z之数值,在地址11之指令(OUTPUT PASSTHRU,DR OUT ROW+2, CLR ACC)之第一次执行中,这512个神经处理单元126之512个累加器202数值被传递并写入数据随机存取存储器122之列4,而累加器202会被清除;在地址9与10之指令之第二次执行中(对应于时间步骤2),这512个神经处理单元126中之各个神经处理单元126会执行512个乘法运算,将数据随机存取存储器122之列6之512个输入节点D之数值乘上权重随机存取存储器124之列 0至511中对应此神经处理单元126之行之权重,以产生512个乘积,连同地址 7与8之指令对于512个内容节点C数值所执行之累加运算,累加于相对应神经处理单元126之累加器202以计算隐藏层节点Z之数值,在地址
11之指令之第二次执行中,这512个神经处理单元126之512个累加器202数值被传递并写入数据随机存取存储器122之列7,而累加器202则会被清除;依此类推,在地址9与10之指令之第十九次执行中(对应于时间步骤19),这512个神经处理单元126中之各个神经处理单元
126会执行512个乘法运算,将数据随机存取存储器122之列57之512个输入节点D之数值乘上权重随机存取存储器124之列0至511中对应此神经处理单元126之行之权重,以产生512个乘积,连同地址7与8之指令对于512个内容节点C数值所执行之累加运算,累加于相对应神经处理单元126之累加器202以计算隐藏层节点Z之数值,而在地址11之指令之第十九次执行中,这512个神经处理单元126之512个累加器202数值被传递并写入数据随机存取存储器122之列58,而累加器202则会被清除。如前所述,在地址9与10之指令之第二十次执行中所产生并写入之隐藏层节点Z 之数值并不会被使用。
[0435] 地址12之指令(LOOP 4)会使循环计数器3804递减并且在新的循环计数器 3804数值大于零之情况下回到地址4之指令。
[0436] 图43系一方块图显示Jordan时间递归神经网络之一范例。图43之Jordan时间递归神经网络类似于图40之Elman时间递归神经网络,具有输入层节点/神经元D,隐藏层节点/神经元Z,输出层节点/神经元Y,与内容层节点/神经元C。不过,在图43之Jordan时间递归神经网络中,内容层节点C系以来自其相对应输出层节点Y之输出回馈作为其输入连结,而非如图40之Elman时间递归神经网络中系来自隐藏层节点Z之输出作为其输入连结。
[0437] 为了说明本发明,Jordan时间递归神经网络是一个包含至少一个输入节点层,一个隐藏节点层,一个输出节点层与一个内容节点层之时间递归神经网络。在一给定时间步骤之开始,内容节点层会储存输出节点层于前一个时间步骤产生且回馈至内容节点层之结果。此回馈至内容层的结果可以是启动函数之结果或是输出节点层执行累加运算而未执行启动函数之结果。
[0438] 图44系一方块图,显示当神经网络单元121执行关联于图43 之Jordan时间递归神经网络之计算时,神经网络单元121之数据随机存取存储器122与权重随机存取存储器124内之数据配置之一范例。在图44之范例中系假定图43之Jordan时间递归神经网络具有512个输入节点D,512 个隐藏节点Z,512个内容节点C,与512个输出节点Y。此外,亦假定此Jordan 时间递归神经网络为完全链接,即全部512个输入节点D均连结各个隐藏节点 Z作为输入,全部512个内容节点C均连结各个隐藏节点Z作为输入,而全部 512个隐藏节点Z均连结各个输出节点Y作为输入。图44之Jordan时间递归神经网络之范例虽然会对累加器202数值施以一启动函数以产生输出层节点Y之数值,不过,此范例系假定会将施以启动函数前之累加器202数值传递至内容层节点C,而非真正的输出层节点Y数值。此外,神经网络单元121设置有512个神经处理单元126,或神经元,例如采取宽配置。最后,此范例假定关联于由内容节点C至隐藏节点Z之连结之权重均具有数值1;因而不需储存这些单一的权重值。
[0439] 如同图41之范例,如图中所示,权重随机存取存储器124之下方512 个列(列0至511)会装载关联于输入节点D与隐藏节点Z间之连结之权重值,而权重随机存取存储器124之后续512个列(列512至1023)会装载关联于隐藏节点Z与输出节点Y间之连结之权重值。
[0440] 数据随机存取存储器122系装载Jordan时间递归神经网络节点值供一系列类似于图41之范例中之时间步骤使用;不过,图44之范例中系以一组四列之存储器装载提供给定时间步骤之节点值。如图中所示,在具有64列之数据随机存取存储器122之实施例中,数据随机存取存储器122可以装载15 个不同时间步骤所需之节点值。在图44之范例中,列0至3系装载供时间步骤0使用之节点值,列4至7系装载供时间步骤1使用之节点值,依此类推,列60至63系装载供时间步骤15使用之节点值。此四列一组存储器之第一列系装载此时间步骤之输入节点D之数值。此四列一组存储器之第二列系装载此时间步骤之隐藏节点Z之数值。
此四列一组存储器之第三列系装载此时间步骤之内容节点C之数值。此四列一组存储器之第四列则是装载此时间步骤之输出节点Y之数值。如图中所示,数据随机存取存储器122之各个行系装载其相对应之神经元或神经处理单元126之节点值。也就是说,行0系装载关联于节点D0,Z0,C0与Y0之节点值,其计算是由神经处理单元0执行;行1系装载关联于节点D1,Z1,C1与Y1之节点值,其计算是由神经处理单元1执行;依此类推,行511系装载关联于节点D511,Z511,C511与Y511之节点值,其计算是由神经处理单元511执行。这部分在后续对应于图44处会有更详细的说明。
[0441] 图44中给定时间步骤之内容节点C之数值系于此时间步骤内产生并作为下一个时间步骤之输入。也就是说,神经处理单元126在此时间步骤内计算并写入之节点C的数值,会成为此神经处理单元126在下一个时间步骤内用于计算节点Z的数值所使用之节点C的数值(连同此下一个时间步骤之输入节点D的数值)。内容节点C之初始值(即时间步骤0计算列1节点Z之数值所使用之节点C之数值)系假定为零。这部分在后续对应于图45之非架构程序之章节会有更详细的说明。
[0442] 如前文图41所述,较佳地,输入节点D的数值(图44之范例中之列0,4,依此类推至列60之数值)系由执行于处理器100之架构程序透过 MTNN指令1400写入/填入数据随机存取存储器122,并且是由执行于神经网络单元121之非架构程序读取/使用,例如图45之非架构程序。相反地,隐藏节点Z/内容节点C/输出节点Y之数值(图44之范例中分别为列1/2/3, 4/5/6,依此类推至列60/61/62之数值)系由执行于神经网络单元121之非架构程序写入/填入数据随机存取存储器122,并且是由执行于处理器100之架构程序透过MFNN指令1500读取/使用。图44之范例系假定此架构程序会执行以下步骤:(1)对于15个不同的时间步骤,将输入节点D之数值填入数据随机存取存储器122(列0,4,依此类推至列60);(2)启动图45之非架构程序;(3)侦测非架构程序是否执行完毕;(4)从数据随机存取存储器122读出输出节点Y之数值(列3,7,依此类推至列63);以及(5)重复步骤(1)至(4) 若干次直到完成任务,例如对手机用户之陈述进行辨识所需之计算。
[0443] 在另一种执行方式中,架构程序会执行以下步骤:(1)对单一个时间步骤,以输入节点D之数值填入数据随机存取存储器122(如列0);(2)启动非架构程序(图45非架构程序之一修正后版本,不需循环,并且只存取数据随机存取存储器122之单一组四个列);(3)侦测非架构程序是否执行完毕;(4)从数据随机存取存储器122读出输出节点Y之数值(如列3);以及(5)重复步骤 (1)至(4)若干次直到完成任务。此二种方式何者为优可依据时间递归神经网络之输入值的取样方式而定。举例来说,若是此任务容许在多个时间步骤内对输入进行取样(例如大约15个时间步骤)并执行计算,第一种方式就较为理想,因为此方式可带来更多计算资源效率与/或较佳的效能,不过,若是此任务只容许在单一个时间步骤内执行取样,就需要使用第二种方式。
[0444] 第三实施例类似于前述第二种方式,不过,不同于第二种方式使用单一组四个数据随机存取存储器122列,此方式之非架构程序使用多组四列存储器,也就是在各个时间步骤使用不同组四列存储器,此部分类似于第一种方式。在此第三实施例中,较佳地,架构程序在步骤(2)前包含一步骤,在此步骤中,架构程序会在非架构程序启动前对其进行更新,例如将地址1之指令内的数据随机存取存储器122列更新为指向下一组四列存储器。
[0445] 图45系一表格,显示储存于神经网络单元121之程序存储器129之一程序,此程序系由神经网络单元121执行,并依据图44之配置使用数据与权重,以达成Jordan时间递归神经网络。图45之非架构程序类似于图42之非架构程序,二者之差异可参照本文相关章节之说明。
[0446] 图45之范例程序包括14个非架构指令,分别位于地址0至13。地址 0之指令是一个初始化指令,用以清除累加器202并将循环计数器3804初始化至数值15,以执行15次循环组(地址4至12之指令)。较佳地,此初始化指令并会使神经网络单元处于宽配置而配置为512个神经处理单元126。如本文所述,在地址1至3以及地址8至12之指令执行过程中,这512个神经处理单元 126系作为512个相对应之隐藏层节点Z进行运作,而在地址4,5与7之指令执行过程中,这512个神经处理单元126系作为512个相对应之输出层节点Y 进行运作。
[0447] 地址1至5与地址7之指令与图42中地址1至6之指令相同并具有相同功能。地址1至3之指令计算隐藏层节点Z之初始值并将其写入数据随机存取存储器122之列1供地址4,5与
7之指令之第一次执行使用,以计算出第一时间步骤(时间步骤0)之输出层节点Y。
[0448] 在地址6之输出指令之第一次执行之过程中,这512个由地址4与5之指令累加产生之累加器202数值(接下来这些数值会被地址7之输出指令使用以计算并写入输出层节点Y之数值)会被传递并写入数据随机存取存储器122之列2,这些数值即为第一时间步骤(时间步骤0)中产生之内容层节点C数值并于第二时间步骤(时间步骤1)中使用;在地址6之输出指令之第二次执行之过程中,这512个由地址4与5之指令累加产生之累加器202数值(接下来,这些数值会被地址7之输出指令使用以计算并写入输出层节点Y之数值)会被传递并写入数据随机存取存储器122之列6,这些数值即为第二时间步骤(时间步骤1)中产生之内容层节点C数值并于第三时间步骤(时间步骤2)中使用;依此类推,在地址6之输出指令之第十五次执行之过程中,这512个由地址4与5 之指令累加产生之累加器202数值(接下来这些数值会被地址7之输出指令使用以计算并写入输出层节点Y之数值)会被传递并写入数据随机存取存储器122 之列58,这些数值即为第十五时间步骤(时间步骤14)中产生之内容层节点C 数值(并由地址8之指令读取,但不会被使用)。
[0449] 地址8至12之指令与图42中地址7至11之指令大致相同并具有相同功能,二者仅具有一差异点。此差异点即,图45中地址8之指令 (ADD_D_ACC DR ROW+1)会使数据随机存取存储器122之列数增加一,而图42中地址7之指令(ADD_D_ACC DR ROW+0)会使数据随机存取存储器 122之列数增加零。此差异系导因于数据随机存取存储器122内之数据配置之不同,特别是,图44中四列一组之配置包括一独立列供内容层节点C数值使用(如列2,6,10等),而图41中三列一组之配置则不具有此独立列,而是让内容层节点C之数值与隐藏层节点Z之数值共享同一个列(如列1,4, 7等)。地址8至12之指令之十五次执行会计算出隐藏层节点Z之数值并将其写入数据随机存取存储器122(写入列5,9,13,依此类推直到列57)供地址 4,5与7之指令之第二至十六次执行使用以计算第二至十五时间步骤之输出层节点Y(时间步骤1至14)。(地址8至12之指令之最后/第十五次执行系计算隐藏层节点Z之数值并将其写入数据随机存取存储器122之列61,不过这些数值并未被使用。)
[0450] 地址13之循环指令会使循环计数器3804递减并且在新的循环计数器3804 数值大于零之情况下回到地址4之指令。
[0451] 在另一实施例中,Jordan时间递归神经网络之设计系利用内容节点C装载输出节点Y之启动函数值,此启动函数值即启动函数执行后之累加值。在此实施例中,因为输出节点Y之数值与内容节点C之数值相同,地址6之非架构指令并不包含于非架构程序内。因而可以减少数据随机存取存储器122内使用之列数。更精确的说,图44中之各个装载内容节点C数值之列(例如列2, 6,59)都不存在于本实施例。此外,此实施例之各个时间步骤仅需要数据随机存取存储器122之三个列,而会搭配20个时间步骤,而非15个,图45 中非架构程序之指令的地址也会进行适当的调整。
[0452] 长短期记忆胞
[0453] 长短期记忆胞用于时间递归神经网络是本技术领域所习知之概念。举例来说,Long Short-Term Memory,Sepp Hochreiter and Jürgen Schmidhuber,Neural Computation,November 15,1997,Vol.9,No.8,Pages 1735-1780;Learning to Forget:Continual Prediction with LSTM,Felix A.Gers,Jürgen Schmidhuber,and Fred Cummins,Neural Computation,October 2000,Vol.12,No.10,Pages 2451-2471;这些文献都可以从麻省理工出版社期刊(MIT Press Journals)取得。长短期记忆胞可以建构为多种不同型式。以下所述图46之长短期记忆胞 4600系以网址http://deeplearning.net/tutorial/lstm.html标题为长短期记忆网络情绪分析(LSTM Networks for Sentiment Analysis)之教程所描述之长短期记忆胞为模型,此教程之副本系于2015年10月19日下载(以下称为“长短期记忆教程”) 并提供于本案之数据揭露陈报书内。此长短期记忆胞4600之用语系普遍地用于描述本文所述之神经网络单元121实施例能够有效执行关联于长短期记忆之计算之能力。值得注意的是,这些神经网络单元121之实施例,包括图49 所述之实施例,都可以有效执行关联于图46所述之长短期记忆胞以外之其他长短期记忆胞之计算。
[0454] 较佳地,神经网络单元121可用以针对一个具有长短期记忆胞层链接其他层级之时间递归神经网络执行计算。举例来说,在此长短期记忆教程中,网络包含一均值共源层以接收长短期记忆层之长短期记忆胞之输出(H),以及一逻辑回归层以接收均值共源层之输出。
[0455] 图46系一方块图,显示长短期记忆胞4600之一实施例。
[0456] 如图中所示,此长短期记忆胞4600包括一记忆胞输入(X),一记忆胞输出(H),一输入闸(I),一输出闸(O),一遗忘闸(F),一记忆胞状态(C)与一候选记忆胞状态(C’)。输入闸(I)可遮蔽记忆胞输入(X)至记忆胞状态(C)之信号传递,而输出闸 (O)可遮蔽记忆胞状态(C)至记忆胞输出(H)之信号传递。此记忆胞状态(C)会反馈为一时间步骤之候选记忆胞状态(C’)。遗忘闸(F)可遮蔽此候选记忆胞状态(C’),此候选记忆胞状态会反馈并变成下一个时间步骤之记忆胞状态(C)。
[0457] 图46之实施例使用下列等式来计算前述各种不同数值:
[0458] (1)I=SIGMOID(Wi*X+Ui*H+Bi)
[0459] (2)F=SIGMOID(Wf*X+Uf*H+Bf)
[0460] (3)C’=TANH(Wc*X+Uc*H+Bc)
[0461] (4)C=I*C’+F*C
[0462] (5)O=SIGMOID(Wo*X+Uo*H+Bo)
[0463] (6)H=O*TANH(C)
[0464] Wi与Ui是关联于输入闸(I)之权重值,而Bi是关联于输入闸(I)之偏移值。Wf与Uf是关联于遗忘闸(F)之权重值,而Bf是关联于遗忘闸(F)之偏移值。Wo 与Uo是关联于输出闸(O)之权重值,而Bo是关联于输出闸(O)之偏移值。如前述,等式(1),(2)与(5)分别计算输入闸(I),遗忘闸(F)与输出闸(O)。等式(3)计算候选记忆胞状态(C’),而等式(4)计算以当前记忆胞状态(C)为输入之候选记忆胞状态(C’),当前记忆胞状态(C)即当前时间步骤之记忆胞状态(C)。等式(6)计算记忆胞输出(H)。不过本发明并不限于此。使用他种方式计算输入闸,遗忘闸,输出闸,候选记忆胞状态,记忆胞状态与记忆胞输出之长短期记忆胞之实施例亦为本发明所涵盖。
[0465] 为了说明本发明,长短期记忆胞包括一记忆胞输入,一记忆胞输出,一记忆胞状态,一候选记忆胞状态,一输入闸,一输出闸与一遗忘闸。对各个时间步骤而言,输入闸,输出闸,遗忘闸与候选记忆胞状态为当前时间步骤之存储器记忆胞输入与先前时间步骤之记忆胞输出与相关权重之函数。此时间步骤之记忆胞状态为先前时间步骤之记忆胞状态,候选记忆胞状态,输入闸与输出闸之函数。从这个意义上说,记忆胞状态会反馈用于计算下一个时间步骤之记忆胞状态。此时间步骤之记忆胞输出是此时间步骤计算出之记忆胞状态与输出闸之函数。长短期记忆神经网络是一个具有一个长短期记忆胞层之神经网络。
[0466] 图47系一方块图,显示当神经网络单元121执行关联于图46 之长短期记忆神经网络之长短期记忆胞4600层之计算时,神经网络单元121之数据随机存取存储器122与权重随机存取存储器124内之数据配置之一范例。在图47之范例中,神经网络单元121系配置为512个神经处理单元126 或神经元,例如采宽配置,不过,只有128个神经处理单元126(如神经处理单元0至127)所产生之数值会被使用,这是因为在此范例之长短期记忆层只有128 个长短期记忆胞4600。
[0467] 如图中所示,权重随机存取存储器124会装载神经网络单元121之相对应神经处理单元0至127之权重值,偏移值与中间值。权重随机存取存储器124 之行0至127装载神经网络单元121之相对应神经处理单元0至127之权重值,偏移值与中间值。列0至14中之各列则是装载128个下列对应于前述等式(1) 至(6)之数值以提供给神经处理单元0至127,这些数值为:Wi,Ui,Bi,Wf,Uf,Bf, Wc,Uc,Bc,C’,TANH(C),C,Wo,Uo,Bo。较佳地,权重值与偏移值–Wi,Ui,Bi, Wf,Uf,Bf,Wc,Uc,Bc,Wo,Uo,Bo(位于列0至8与列12至14)–系由执行于处理器100之架构程序透过MTNN指令1400写入/填入权重随机存取存储器124,并由执行于神经网络单元121之非架构程序读取/使用,如图48之非架构程序。较佳地,中间值–C’,TANH(C),C(位于列9至11)–系由执行于神经网络单元121之非架构程序写入/填入权重随机存取存储器124并进行读取/使用,详如后述。
[0468] 如图中所示,数据随机存取存储器122装载输入(X),输出(H),输入闸(I),遗忘闸(F)与输出闸(O)数值供一系列时间步骤使用。进一步来说,此存储器五列一组装载X,H,I,F与O之数值供一给定时间步骤使用。以一个具有64列之数据随机存取存储器为例,如图中所示,此数据随机存取存储器122可装载供 12个不同时间步骤使用之记忆胞数值。在图47之范例中,列0至4系装载供时间步骤0使用之记忆胞数值,列5至9系装载供时间步骤1使用之记忆胞数值,依此类推,列55至59系装载供时间步骤11使用之记忆胞数值。此五列一组存储器中之第一列系装载此时间步骤之X数值。此五列一组存储器中之第二列系装载此时间步骤之H数值。此五列一组存储器中之第三列系装载此时间步骤之I数值。此五列一组存储器中之第四列系装载此时间步骤之F数值。此五列一组存储器中之第五列系装载此时间步骤之O数值。如图中所示,数据随机存取存储器122内之各行系装载供相对应神经元或神经处理单元126使用之数值。也就是说,行0系装载关联于长短期记忆胞0之数值,而其计算是由神经处理单元0所执行;行1系装载关联于长短期记忆胞1之数值,而其计算是由神经处理单元1所执行;依此类推,行127系装载关联于长短期记忆胞127 之数值,而其计算是由神经处理单元127所执行,详如后续图48所述。
[0469] 较佳地,X数值(位于列0,5,9,依此类推至列55)系由执行于处理器 100之架构程序透过MTNN指令1400写入/填入数据随机存取存储器122,并由执行于神经网络单元121之非架构程序进行读取/使用,如图48所示之非架构程序。较佳地,I数值,F数值与O数值(位于列2/3/4,7/8/9,12/13/14,依此类推至列57/58/59)系由执行于神经处理单元121之非架构程序写入/填入数据随机存取存储器122,详如后述。较佳地,H数值(位于列1,6,10,依此类推至列56)系由执行于神经处理单元121之非架构程序写入/填入数据随机存取存储器122并进行读取/使用,并且由执行于处理器100之架构程序透过MFNN指令1500进行读取。
[0470] 图47之范例系假定此架构程序会执行以下步骤:(1)对于12个不同的时间步骤,将输入X之数值填入数据随机存取存储器122(列0,5,依此类推至列55);(2)启动图48之非架构程序;(3)侦测非架构程序是否执行完毕;(4)从数据随机存取存储器122读出输出H之数值(列1,6,依此类推至列59);以及(5)重复步骤(1)至(4)若干次直到完成任务,例如对手机用户之陈述进行辨识所需之计算。
[0471] 在另一种执行方式中,架构程序会执行以下步骤:(1)对单一个时间步骤,以输入X之数值填入数据随机存取存储器122(如列0);(2)启动非架构程序 (图48非架构程序之一修正后版本,不需循环,并且只存取数据随机存取存储器122之单一组五个列);(3)侦测非架构程序是否执行完毕;(4)从数据随机存取存储器122读出输出H之数值(如列1);以及(5)重复步骤(1)至(4) 若干次直到完成任务。此二种方式何者为优可依据长短期记忆层之输入X数值的取样方式而定。举例来说,若是此任务容许在多个时间步骤对输入进行取样 (例如大约12个时间步骤)并执行计算,第一种方式就较为理想,因为此方式可能带来更多计算资源效率与/或较佳的效能,不过,若是此任务只容许在单一个时间步骤执行取样,就需要使用第二种方式。
[0472] 第三实施例类似于前述第二种方式,不过,不同于第二种方式使用单一组五列数据随机存取存储器122,此方式之非架构程序使用多组五列存储器,也就是在各个时间步骤使用不同的五列一组存储器,此部分类似于第一种方式。在此第三实施例中,较佳地,架构程序在步骤(2)前包含一步骤,此步骤中,架构程序会在非架构程序启动前对其进行更新,例如将地址0之指令内的数据随机存取存储器122列更新为指向下一组五列存储器。
[0473] 图48系一表格,显示储存于神经网络单元121之程序存储器129之一程序,此程序系由神经网络单元121执行并依据图47之配置使用数据与权重,以达成关联于长短期记忆胞层之计算。图48之范例程序包括24 个非架构指令分别位于地址0至23。地址0之指令(INITIALIZE NPU,CLR ACC, LOOPCNT=12,DR IN ROW=-1,DR OUT ROW=2)会清除累加器202并将循环计数器3804初始化至数值12,以执行12次循环组(地址1至22之指令)。此初始化指令并会将数据随机存取存储器122之待读取列初始化为数值-1,而在地址1之指令之第一次执行后,此数值会增加为零。此初始化指令并会将数据随机存取存储器122之待写入列(例如图26与图39之寄存器2606)初始化为列2。较佳地,此初始化指令并会使神经网络单元
121处于宽配置,如此,神经网络单元121就会配置有512个神经处理单元126。如同后续章节所述,在地址0至23之指令执行过程中,这512个神经处理单元126其中之128个神经处理单元126系作为128个相对应之长短期记忆胞4600进行运作。
[0474] 在地址1至4之指令之第一次执行中,这128个神经处理单元126(即神经处理单元0至127)中之各个神经处理单元126会针对相对应长短期记忆胞4600 之第一时间步骤(时间步骤0)计算输入闸(I)数值并将I数值写入数据随机存取存储器122之列2之相对应字;在地址1至4之指令之第二次执行中,这128 个神经处理单元126中之各个神经处理单元126会针对相对应长短期记忆胞 4600之第二时间步骤(时间步骤1)计算I数值并将I数值写入数据随机存取存储器122之列7之相对应字;依此类推,在地址1至4之指令之第十二次执行中,这128个神经处理单元126中之各个神经处理单元126会针对相对应长短期记忆胞4600之第十二时间步骤(时间步骤11)计算I数值并将I数值写入数据随机存取存储器122之列57之相对应字,如图47所示。
[0475] 进一步来说,地址1之乘法累加指令会读取数据随机存取存储器122当前列后方之下一列(在第一执行即为列0,在第二执行即为列5,依此类推,在第十二执行即为列55),此列系包含关联于当前时间步骤之记忆胞输入(X)值,此指令并会读取权重随机存取存储器124中包含Wi数值之列0,并且将前述读取数值相乘以产生第一乘积累加至刚刚由地址0之初始化指令或地址22之指令清除之累加器202。随后,地址2之乘法累加指令会读取下一个数据随机存取存储器122列(在第一执行即为列1,在第二执行即为列6,依此类推,在第十二执行即为列56),此列系包含关联于当前时间步骤之记忆胞输出(H)值,此指令并会读取权重随机存取存储器124中包含Ui数值之列1,并且将前述数值相乘以产生第二乘积累加至累加器202。关联于当前时间步骤之H数值系由地址2之指令(以及地址6,10与18之指令)由数据随机存取存储器122读取,在先前时间步骤产生,并由地址22之输出指令写入数据随机存取存储器122;不过,在第一次执行中,地址2之指令会以一初始值写入数据随机存取存储器之列1 作为H数值。较佳地,架构程序会在启动图48之非架构程序前将初始H 数值写入数据随机存取存储器122之列1(例如使用MTNN指令1400);不过,本发明并不限于此,非架构程序内包含有初始化指令将初始H数值写入数据随机存取存储器122之列1之其他实施例亦属于本发明之范畴。在一实施例中,此初始H数值为零。接下来,地址3之将权重字加入累加器指令(ADD_W_ACC WR ROW 2)会读取权重随机存取存储器124中包含Bi数值之列2并将其加入累加器202。最后,地址4之输出指令(OUTPUT SIGMOID,DR OUT ROW+0,CLR ACC)会对累加器
202数值执行一S型启动函数并将执行结果写入数据随机存取存储器122之当前输出列(在第一执行即为列2,在第二执行即为列7,依此类推,在第十二执行即为列57)并且清除累加器202。
[0476] 在地址5至8之指令之第一次执行中,这128个神经处理单元126中之各个神经处理单元126会针对相对应长短期记忆胞4600之第一时间步骤(时间步骤0)计算其遗忘闸(F)数值并将F数值写入数据随机存取存储器122之列3之相对应字;在地址5至8之指令之第二次执行中,这128个神经处理单元126 中之各个神经处理单元126会针对相对应长短期记忆胞4600之第二时间步骤 (时间步骤1)计算其遗忘闸(F)数值并将F数值写入数据随机存取存储器122 之列8之相对应字;依此类推,在地址5至8之指令之第十二次执行中,这128 个神经处理单元126中之各个神经处理单元126会针对相对应长短期记忆胞 4600之第十二时间步骤(时间步骤11)计算其遗忘闸(F)数值并将F数值写入数据随机存取存储器122之列58之相对应字,如图47所示。地址5至8之指令计算F数值之方式类似于前述地址1至4之指令,不过,地址5至7之指令会分别从权重随机存取存储器124之列3,列4与列5读取Wf,Uf与Bf数值以执行乘法与/或加法运算。
[0477] 在地址9至12之指令之十二次执行中,这128个神经处理单元126中之各个神经处理单元126会针对相对应长短期记忆胞4600之相对应时间步骤计算其候选记忆胞状态(C’)数值并将C’数值写入权重随机存取存储器124之列9之相对应字。地址9至12之指令计算C’数值之方式类似于前述地址1至4之指令,不过,地址9至11之指令会分别从权重随机存取存储器124之列6,列7与列8 读取Wc,Uc与Bc数值以执行乘法与/或加法运算。此外,地址12之输出指令会执行双曲正切启动函数而非(如地址4之输出指令执行)S型启动函数。
[0478] 进一步来说,地址9之乘法累加指令会读取数据随机存取存储器122之当前列(在第一次执行即为列0,在第二次执行即为列5,依此类推,在第十二次执行即为列55),此当前列系包含关联于当前时间步骤之记忆胞输入(X)值,此指令并会读取权重随机存取存储器124中包含Wc数值之列6,并且将前述数值相乘以产生第一乘积累加至刚刚由地址8之指令清除之累加器202。接下来,地址10之乘法累加指令会读取数据随机存取存储器122之次一列(在第一次执行即为列1,在第二次执行即为列6,依此类推,在第十二次执行即为列56),此列系包含关联于当前时间步骤之记忆胞输出(H)值,此指令并会读取权重随机存取存储器124中包含Uc数值之列7,并且将前述数值相乘以产生第二乘积累加至累加器202。接下来,地址11之将权重字加入累加器指令会读取权重随机存取存储器124中包含Bc数值之列8并将其加入累加器202。最后,地址12之输出指令(OUTPUT TANH,WR OUT ROW 9,CLR ACC)会对累加器202数值执行一双曲正切启动函数并将执行结果写入权重随机存取存储器124之列9,并且清除累加器202。
[0479] 在地址13至16之指令之十二次执行中,这128个神经处理单元126中之各个神经处理单元126会针对相对应长短期记忆胞4600之相对应时间步骤计算新的记忆胞状态(C)数值并将此新的C数值写入权重随机存取存储器122之列11 之相对应字,各个神经处理单元126还会计算tanh(C)并将其写入权重随机存取存储器124之列10之相对应字。进一步来说,地址13之乘法累加指令会读取数据随机存取存储器122当前列后方之下一列(在第一次执行即为列2,在第二次执行即为列7,依此类推,在第十二次执行即为列57),此列包含关联于当前时间步骤之输入闸(I)数值,此指令并读取权重随机存取存储器124中包含候选记忆胞状态(C’)数值之列9,并且将前述数值相乘以产生第一乘积累加至刚刚由地址12之指令清除之累加器202。接下来,地址14之乘法累加指令会读取数据随机存取存储器122之下一列(在第一次执行即为列3,在第二次执行即为列 8,依此类推,在第十二次执行即为列58),此列包含关联于当前时间步骤之遗忘闸(F)数值,此指令并读取权重随机存取存储器124中包含于先前时间步骤中计算之当前记忆胞状态(C)数值(由地址15之指令之最近一次执行进行写入)之列11,并且将前述数值相乘以产生第二乘积加入累加器202。接下来,地址15 之输出指令(OUTPUT PASSTHRU,WR OUT ROW 11)会传递此累加器202数值并将其写入权重随机存取存储器124之列11。需要理解的是,地址14之指令由数据随机存取存储器122之列11读取之C数值即为地址13至15之指令于最近一次执行中产生并写入之C数值。地址15之输出指令并不会清除累加器202,如此,其数值即可由地址16之指令使用。最后,地址16之输出指令(OUTPUT TANH,WR OUT ROW 10,CLR ACC)会对累加器202数值执行一双曲正切启动函数并将其执行结果写入权重随机存取存储器124之列10供地址21之指令使用以计算记忆胞输出(H)值。地址16之指令会清除累加器202。
[0480] 在地址17至20之指令之第一次执行中,这128个神经处理单元126中之各个神经处理单元126会针对相对应长短期记忆胞4600之第一时间步骤(时间步骤0)计算其输出闸(O)数值并将O数值写入数据随机存取存储器122之列4 之相对应字;在地址17至20之指令之第二次执行中,这128个神经处理单元 126中之各个神经处理单元126会针对相对应长短期记忆胞4600之第二时间步骤(时间步骤1)计算其输出闸(O)数值并将O数值写入数据随机存取存储器122 之列9之相对应字;依此类推,在地址17至20之指令之第十二次执行中,这 128个神经处理单元126中之各个神经处理单元126会针对相对应长短期记忆胞 4600之第十二时间步骤(时间步骤11)计算其输出闸(O)数值并将O数值写入数据随机存取存储器122之列58之相对应字,如图47所示。地址17至 20之指令计算O数值之方式类似于前述地址1至4之指令,不过,地址17至19之指令会分别从权重随机存取存储器124之列12,列13与列14读取Wo, Uo与Bo数值以执行乘法与/或加法运算。
[0481] 在地址21至22之指令之第一次执行中,这128个神经处理单元126中之各个神经处理单元126会针对相对应长短期记忆胞4600之第一时间步骤(时间步骤0)计算其记忆胞输出(H)值并将H数值写入数据随机存取存储器122之列 6之相对应字;在地址21至22之指令之第二次执行中,这128个神经处理单元 126中之各个神经处理单元126会针对相对应长短期记忆胞4600之第二时间步骤(时间步骤1)计算其记忆胞输出(H)值并将H数值写入数据随机存取存储器 122之列11之相对应字;依此类推,在地址21至22之指令之第十二次执行中,这128个神经处理单元126中之各个神经处理单元126会针对相对应长短期记忆胞4600之第十二时间步骤(时间步骤11)计算其记忆胞输出(H)值并将H数值写入数据随机存取存储器122之列60之相对应字,如图47所示。
[0482] 进一步来说,地址21之乘法累加指令会读取数据随机存取存储器122当前列后方之第三列(在第一次执行即为列4,在第二次执行即为列9,依此类推,在第十二次执行即为列59),此列包含关联于当前时间步骤之输出闸(O)数值,此指令并读取权重随机存取存储器124中包含tanh(C)数值之列10(由地址16 之指令写入),并且将前述数值相乘以产生一乘积累加至刚刚由地址20之指令清除之累加器202。随后,地址22之输出指令会传递累加器202数值并将其写入数据随机存取存储器122之接下来第二个输出列11(在第一次执行即为列6,在第二次执行即为列11,依此类推,在第十二次执行即为列61),并且清除累加器202。
需要理解的是,由地址22之指令写入数据随机存取存储器122列之 H数值(在第一次执行即为列6,在第二次执行即为列11,依此类推,在第十二次执行即为列61)即为地址2,6,10与18之指令之后续执行中所消耗/读取之H数值。不过,第十二次执行中写入列61之H数值并不会被地址2,6,10 与18之指令之执行所消耗/读取;就一较佳实施例而言,此数值会是由架构程序所消耗/读取。
[0483] 地址23之指令(LOOP 1)会使循环计数器3804并且在新的循环计数器3804 数值大于零的情况下回到地址1之指令。
[0484] 图49系一方块图,显示一神经网络单元121之实施例,此实施例之神经处理单元群组内具有输出缓冲遮蔽与反馈能力。图49显示单一个由四个神经处理单元126构成之神经处理单元群组4901。虽然图49仅显示单一个神经处理单元群组4901,不过需要理解的是,神经网络单元121中之各个神经处理单元126都会包含于一个神经处理单元群组4901内,因此,一共会有N/J个神经处理单元群组4901,其中N是神经处理单元126的数量(举例来说,就宽配置而言为512,就窄配置而言为1024)而J是单一个群组4901内之神经处理单元126的数量(举例来说,就图49之实施例而言即为四)。图49中系将神经处理单元群组4901内之四个神经处理单元126称为神经处理单元0,神经处理单元1,神经处理单元2与神经处理单元3。
[0485] 图49之实施例中之各个神经处理单元系类似于前述图7之神经处理单元126,并且图中具有相同标号之组件亦相类似。不过,多路复用寄存器 208系经调整以包含四个额外的输入4905,多路复用寄存器205系经调整以包含四个额外的输入4907,选择输入213系经调整而能从原本之输入211与207 以及额外输入4905中进行选择提供至输出209,并且,选择输入713系经调整而能从原本之输入711与206以及额外输入4907中进行选择提供至输出203。
[0486] 如图中所示,图11之列缓冲器1104在图49中即为输出缓冲器 1104。进一步来说,途中所示之输出缓冲器1104之字0,1,2与3系接收关联于神经处理单元0,1,2与3之四个启动函数单元212之相对应输出。此部分之输出缓冲器1104包含N个字对应于一神经处理单元群组4901,这些字系称为一个输出缓冲字群组。在图49之实施例中,N为四。输出缓冲器1104 之这四个字系反馈至多路复用寄存器208与705,并作为四个额外输入4905由多路复用寄存器208所接收以及作为四个额外输入4907由多路复用寄存器705 所接收。输出缓冲字群组反馈至其相对应神经处理单元群组4901之反馈动作,使非架构程序之算术指令能后从关联于神经处理单元群组4901之输出缓冲器 1104之字(即输出缓冲字群组)中选择一个或两个字作为其输入,其范例请参照后续图51之非架构程序,如图中地址4,8,11,12与15之指令。也就是说,指定于非架构指令内之输出缓冲器1104字会确认选择输出213/713产生之数值。
这个能力实际上使输出缓冲器1104可以作为一个类别草稿存储器  (scratch pad memory),能够让非架构程序减少写入数据随机存取存储器122与/ 或权重随机存取存储器
124以及后续从中读取之次数,例如减少过程中产生与使用之数值。较佳地,输出缓冲器
1104,或列缓冲器1104,包括一个一维之寄存器阵列,用以储存1024个窄字或是512个宽字。
较佳地,对于输出缓冲器1104 之读取可以在单一个时频周期内执行,而对于输出缓冲器
1104之写入也可以在单一个时频周期内执行。不同于数据随机存取存储器122与权重随机存取存储器124,可由架构程序与非架构程序进行存取,输出缓冲器1104无法由架构程序进行存取,而只能由非架构程序进行存取。
[0487] 输出缓冲器1104系将经调整以接收一屏蔽输入(mask input)4903。较佳地,屏蔽输入4903包括四个位对应至输出缓冲器1104之四个字,此四个字系关联于神经处理单元群组4901之四个神经处理单元126。较佳地,若是此对应至输出缓冲器1104之字之屏蔽输入4903位为真,此输出缓冲器1104之字就会维持其当前值;否则,此输出缓冲器1104之字就会被启动函数单元212之输出所更新。也就是说,若是此对应至输出缓冲器1104之字之屏蔽输入4903位为假,启动函数单元212之输出就会被写入输出缓冲器1104之字。如此,非架构程序之输出指令即可选择性地将启动函数单元212之输出写入输出缓冲器1104之某些字并使输出缓冲器1104之其他字之当前数值维持不变,其范例请参照后续图51之非架构程序之指令,如图中地址6,10,13与14之指令。也就是说,指定于非架构程序内之输出缓冲器1104之字即确定产生于屏蔽输入4903之数值。
[0488] 为了简化说明,图49中并未显示多路复用寄存器208/705之输入1811 (如图18,图19与图23所示)。不过,同时支持可动态配置神经处理单元126与输出缓冲器1104之反馈/屏蔽之实施例亦属本发明值之范畴。较佳地,在此等实施例中,输出缓冲字群组为可相对应地动态配置。
[0489] 需要理解的是,虽然此实施例之神经处理单元群组4901内之神经处理单元 126的数量为四,不过,本发明并不限于此,群组内神经处理单元126数量较多或较少之实施例均属于本发明之范畴。此外,就一个具有共享启动函数单元1112 之实施例而言,如图52所示,一个神经处理单元群组4901内之神经处理单元126数量与一个启动函数单元212群组内之神经处理单元126数量会互相影响。神经处理单元群组内输出缓冲器1104之遮蔽与反馈能力特别有助于提升关联于长短期记忆胞4600之计算效率,详如后续第五十与五十一图所述。
[0490] 图50系一方块图,显示当神经网络单元121执行关联于图46中由128个长短期记忆胞4600构成之一层级之计算时,图49之神经网络单元121之数据随机存取存储器122,权重随机存取存储器124与输出缓冲器1104 内之数据配置之一范例。在图50之范例中,神经网络单元121系配置为512 个神经处理单元126或神经元,例如采取宽配置。如同图47与图48之范例,在图50与图51之范例中之长短期记忆层中只具有128个长短期记忆胞4600。不过,在图50之范例中,全部512个神经处理单元126(如神经处理单元0至127)产生之数值都会被使用。在执行图51之非架构程序的时候,各个神经处理单元群组4901会集体做为一个长短期记忆胞4600进行运作。
[0491] 如图中所示,数据随机存取存储器122装载记忆胞输入(X)与输出(H)值供一系列时间步骤使用。进一步来说,对于一给定时间步骤,会有一对两列存储器分别装载X数值与H数值。以一个具有64列之数据随机存取存储器122为例,如图中所示,此数据随机存取存储器122所装载之记忆胞数值可供31个不同时间步骤使用。在图50之范例中,列2与3装载供时间步骤0使用之数值,列4与5装载供时间步骤1使用之数值,依此类推,列62与63装载供时间步骤30使用之数值。这对两列存储器中之第一列系装载此时间步骤之X数值,而第二列则是装载此时间步骤之H数值。如图中所示,数据随机存取存储器122 中各组四行对应至神经处理单元群组4901之存储器系装载供其对应长短期记忆胞4600使用之数值。也就是说,行0至3系装载关联于长短期记忆胞0之数值,其计算是由神经处理单元0-3执行,即神经处理单元群组0执行;行4至7系装载关联于长短期记忆胞1之数值,其计算是由神经处理单元4-7执行,即神经处理单元群组1执行;依此类推,行508至511系装载关联于长短期记忆胞127 之数值,其计算是由神经处理单元508-511执行,即神经处理单元群组127执行,详如后续图51所示。如图中所示,列1并未被使用,列0装载初始之记忆胞输出(H)值,就一较佳实施例而言,可由架构程序填入零值,不过,本发明并不限于此,利用非架构程序指令填入列0之初始记忆胞输出(H)数值亦属于本发明之范畴。
[0492] 较佳地,X数值(位于列2,4,6依此类推至列62)系由执行于处理器100 之架构程序透过MTNN指令1400写入/填入数据随机存取存储器122,并由执行于神经网络单元121之非架构程序进行读取/使用,例如图50所示之非架构程序。较佳地,H数值(位于列3,5,7依此类推至列63)系由执行于神经网络单元121之非架构程序写入/填入数据随机存取存储器122并进行读取/使用,详如后述。较佳地,H数值并由执行于处理器100之架构程序透过MFNN指令 1500进行读取。需要注意的是,图51之非架构程序系假定对应至神经处理单元群组4901之各组四行存储器(如行0-3,行4-7,行5-8,依此类推至行 508-511)中,在一给定列之四个X数值系填入相同的数值(例如由架构程序填入)。类似地,图51之非架构程序会在对应至神经处理单元群组4901之各组四行存储器中,计算并对一给定列之四个H数值写入相同数值。
[0493] 如图中所示,权重随机存取存储器124系装载神经网络单元121之神经处理单元所需之权重,偏移与记忆胞状态(C)值。在对应至神经处理单元群组121 之各组四行存储器中(例如行0-3,行4-7,行5-8依此类推至行508-511):(1) 行编号除以4之余数等于3之行,会在其列0,1,2与6分别装载Wc,Uc, Bc,与C之数值;(2)行编号除以4之余数等于2之行,会在其列3,4与5分别装载Wo,Uo与Bo之数值;(3)行编号除以4之余数等于1之行,会在其列 3,4与5分别装载Wf,Uf与Bf之数值;以及(4)行编号除以4之余数等于0 之行,会在其列3,4与5分别装载Wi,Ui与Bi之数值。较佳地,这些权重与偏移值–Wi,Ui,Bi,Wf,Uf,Bf,Wc,Uc,Bc,Wo,Uo,Bo(在列0至5)–系由执行于处理器100之架构程序透过MTNN指令1400写入/填入权重随机存取存储器 124,并由执行于神经网络单元121之非架构程序进行读取/使用,如图51 之非架构程序。较佳地,中间之C值系由执行于神经网络单元121之非架构程序写入/填入权重随机存取存储器124并进行读取/使用,详如后述。
[0494] 图50之范例系假定架构程序会执行以下步骤:(1)对于31个不同的时间步骤,将输入X之数值填入数据随机存取存储器122(列2,4,依此类推至列62);(2)启动图51之非架构程序;(3)侦测非架构程序是否执行完毕; (4)从数据随机存取存储器122读出输出H之数值(列3,5,依此类推至列63);以及(5)重复步骤(1)至(4)若干次直到完成任务,例如对手机用户之陈述进行辨识所需之计算。
[0495] 在另一种执行方式中,架构程序会执行以下步骤:(1)对单一个时间步骤,以输入X之数值填入数据随机存取存储器122(如列2);(2)启动非架构程序 (图51非架构程序之一修正后版本,不需循环,并且只存取数据随机存取存储器122之单一对两个列);(3)侦测非架构程序是否执行完毕;(4)从数据随机存取存储器122读出输出H之数值(如列3);以及(5)重复步骤(1)至(4) 若干次直到完成任务。此二种方式何者为优可依据长短期记忆层之输入X数值的取样方式而定。举例来说,若是此任务容许在多个时间步骤对输入进行取样 (例如大约31个时间步骤)并执行计算,第一种方式就较为理想,因为此方式可能带来更多计算资源效率与/或较佳的效能,不过,若是此任务只容许在单一个时间步骤执行取样,就需要使用第二种方式。
[0496] 第三实施例类似于前述第二种方式,不过,不同于第二种方式使用单一对两列数据随机存取存储器122,此方式之非架构程序使用多对存储器列,也就是在各个时间步骤使用不同对存储器列,此部分类似于第一种方式。较佳地,此第三实施例之架构程序在步骤(2)前包含一步骤,在此步骤中,架构程序会在非架构程序启动前对其进行更新,例如将地址1之指令内的数据随机存取存储器 122列更新为指向下一对两列存储器。
[0497] 如图中所示,对于神经网络单元121之神经处理单元0至511,在图51之非架构程序中不同地址之指令执行后,输出缓冲器1104系装载记忆胞输出 (H),候选记忆胞状态(C’),输入闸(I),遗忘闸(F),输出闸(O),记忆胞状态(C) 与tanh(C)之中间值,每一个输出缓冲字群组中(例如输出缓冲器1104对应至神经处理单元群组4901之四个字之群组,如字0-3,4-7,5-8依此类推至508-511),字编号除以4之余数为3的字系表示为OUTBUF[3],字编号除以4之余数为2 的字系表示为OUTBUF[2],字编号除以4之余数为1的字系表示为OUTBUF[1],而字编号除以4之余数为0的字系表示为OUTBUF[0]。
[0498] 如图中所示,在图51之非架构程序中地址2之指令执行后,对于各个神经处理单元群组4901而言,输出缓冲器1104之全部四个字都会写入相对应长短期记忆胞4600之初始记忆胞输出(H)值。在地址6之指令执行后,对于各个神经处理单元群组4901而言,输出缓冲器1104之OUTBUT[3]字会写入相对应长短期记忆胞4600之候选记忆胞状态(C’)值,而输出缓冲器1104之其他三个字则会维持其先前数值。在地址10之指令执行后,对于各个神经处理单元群组 4901而言,输出缓冲器1104之OUTBUT[0]字会写入相对应长短期记忆胞4600 之输入闸(I)数值,OUTBUT[1]字会写入相对应长短期记忆胞4600之遗忘闸(F) 数值,OUTBUT[2]字会写入相对应长短期记忆胞4600之输出闸(O)数值,而 OUTBUT[3]字则是维持其先前数值。在地址13之指令执行后,对于各个神经处理单元群组4901而言,输出缓冲器1104之OUTBUT[3]字会写入相对应长短期记忆胞4600之新的记忆胞状态(C)值(对于输出缓冲器
1104而言,包含槽(slot)3 之C数值,系写入权重随机存取存储器124之列6,详如后续图51所述),而输出缓冲器1104之其他三个字则是维持其先前数值。在地址14之指令执行后,对于各个神经处理单元群组4901而言,输出缓冲器1104之OUTBUT[3]字会写入相对应长短期记忆胞4600之tanh(C)数值,而输出缓冲器1104之其他三个字则是维持其先前数值。在地址
16之指令执行后,对于各个神经处理单元群组4901而言,输出缓冲器1104之全部四个字都会写入相对应长短期记忆胞4600 之新的记忆胞输出(H)值。前述地址6至16之执行流程(也就是排除地址2之执行,这是因为地址2不属于程序循环之一部分)会再重复三十次,作为地址17 回到地址3之程序循环。
[0499] 图51系一表格,显示储存于神经网络单元121之程序存储器129之一程序,此程序系由图49之神经网络单元121执行并依据图50之配置使用数据与权重,以达成关联于长短期记忆胞层之计算。图51之范例程序包含18个非架构指令分别位于地址0至17。地址0之指令是一个初始化指令,用以清除累加器202并将循环计数器3804初始化至数值31,以执行31次循环组(地址1至17之指令)。此初始化指令并会将数据随机存取存储器122 之待写入列(例如图26/图39之寄存器2606)初始化为数值1,而在地址16之指令之第一次执行后,此数值会增加至3。较佳地,此初始化指令并会使神经网络单元121处于宽配置,如此,神经网络单元121就会配置有512个神经处理单元126。如后续章节所述,在地址0至17之指令执行过程中,这 512个神经处理单元126构成之128个神经处理单元群组4901系作为128个相对应之长短期记忆胞4600进行运作。
[0500] 地址1与2之指令不属于程序之循环组而只会执行一次。这些指令会产生初始记忆胞输出(H)值并将其解入输出缓冲器1104之所有字。地址1之指令会从数据随机存取存储器122之列0读取初始H数值并将其放置于由地址0之指令清除之累加器202。地址2之指令(OUTPUT PASSTHRU,NOP,CLR ACC)会将累加器202数值传递至输出缓冲器1104,如图50所示。地址2之输出指令 (以及图51之其他输出指令)中之“NOP”标示表示输出值只会被写入输出缓冲器1104,而不会被写入存储器,也就是不会被写入数据随机存取存储器122 或权重随机存取存储器124。地址2之指令并会清除累加器202。
[0501] 地址3至17之指令系位于循环组内,其执行次数为循环计数之数值(如31)。
[0502] 地址3至6之指令之每一次执行会计算当前时间步骤之tanh(C’)数值并将其写入字OUTBUF[3],此字将会被地址11之指令使用。更精确地说,地址3之乘法累加指令会从数据随机存取存储器122之当前读取列(如列2,4,6依此类推至列62)读取关联于此时间步骤之记忆胞输入(X)值,从权重随机存取存储器 124之列0读取Wc数值,并将前述数值相乘以产生一乘积加入由地址2之指令清除之累加器202。
[0503] 地址4之乘法累加指令(MULT-ACCUM OUTBUF[0],WR ROW 1)会从字OUTBUF[0]读取H数值(即神经处理单元群组4901之全部四个神经处理单元 126),从权重随机存取存储器124之列1读取Uc数值,并将前述数值相乘以产生一第二乘积加入累加器202。
[0504] 地址5之将权重字加入累加器指令(ADD_W_ACC WR ROW 2)会从权重随机存取存储器124之列2读取Bc数值并将其加入累加器202。
[0505] 地址6之输出指令(OUTPUT TANH,NOP,MASK[0:2],CLR ACC)会对累加器202数值执行一双曲正切启动函数,并且只将执行结果写入字OUTBUF[3](亦即,只有神经处理单元群组4901中编号除4之余数为3之神经处理单元126会写入此结果),并且,累加器202会被清除。也就是说,地址6之输出指令会遮蔽字OUTBUF[0],OUTBUF[1]与OUTBUF[2](如指令术语MASK[0:2]所表示)而维持其当前数值,如图50所示。此外,地址6之输出指令并不会写入存储器(如指令术语NOP所表示)。
[0506] 地址7至10之指令之每一次执行会计算当前时间步骤之输入闸(I)数值,遗忘闸(F)数值与输出闸(O)数值并将其分别写入字OUTBUF[0],OUTBUF[1],与 OUTBUF[2],这些数值将会被地址11,12与15之指令使用。更精确地说,地址7之乘法累加指令会从数据随机存取存储器122之当前读取列(如列2,4,6 依此类推至列62)读取关联于此时间步骤之记忆胞输入(X)值,从权重随机存取存储器124之列3读取Wi,Wf与Wo数值,并将前述数值相乘以产生一乘积加入由地址6之指令清除之累加器202。更精确地说,在神经处理单元群组4901 中,编号除4之余数为0之神经处理单元126会计算X与Wi之乘积,编号除4 之余数为1之神经处理单元126会计算X与Wf之乘积,而编号除4之余数为2 之神经处理单元126会计算X与Wo之乘积。
[0507] 地址8之乘法累加指令会从字OUTBUF[0]读取H数值(即神经处理单元群组4901之全部四个神经处理单元126),从权重随机存取存储器124之列4读取Ui,Uf与Uo数值,并将前述数值相乘以产生一第二乘积加入累加器202。更精确地说,在神经处理单元群组4901中,编号除4之余数为0之神经处理单元126会计算H与Ui之乘积,编号除4之余数为1之神经处理单元126会计算 H与Uf之乘积,而编号除4之余数为2之神经处理单元126会计算H与Uo之乘积。
[0508] 地址9之将权重字加入累加器指令(ADD_W_ACC WR ROW 2)会从权重随机存取存储器124之列5读取Bi,Bf与Bo数值并将其加入累加器202。更精确地说,,在神经处理单元群组4901中,编号除4之余数为0之神经处理单元126 会执行Bi数值之加法计算,编号除4之余数为1之神经处理单元126会执行Bf 数值之加法计算,而编号除4之余数为2之神经处理单元
126会执行Bo数值之加法计算。
[0509] 地址10之输出指令(OUTPUT SIGMOID,NOP,MASK[3],CLR ACC)会对累加器202数值执行一S型启动函数并将计算出来之I,F与O数值分别写入字 OUTBUF[0],OUTBUF[1]与OUTBUF[2],此指令并会清除累加器202,而不写入存储器。也就是说,地址10之输出指令会遮蔽字OUTBUF[3](如指令术语 MASK[3]所表示)而维持此字之当前数值(也就是C’),如图50所示。
[0510] 地址11至13之指令之每一次执行会计算当前时间步骤产生之新的记忆胞状态(C)值并将其写入权重随机存取存储器124之列6供下一个时间步骤使用(也就是供地址12之指令在下一次循环执行时使用),更精确的说,此数值系写入列6对应于神经处理单元群组4901之四行字中标号除4之余数为3之字。此外,地址14之指令之每一次执行都会将tanh(C)数值写入OUTBUF[3]供地址15之指令使用。
[0511] 更精确地说,地址11之乘法累加指令(MULT-ACCUM OUTBUF[0], OUTBUF[3])会从字OUTBUF[0]读取输入闸(I)数值,从字OUTBUF[3]读取候选记忆胞状态(C’)值,并将前述数值相乘以产生一第一乘积加入由地址10之指令清除之累加器202。更精确地说,神经处理单元群组4901之四个神经处理单元 126中之各个神经处理单元126都会计算I数值与C’数值之第一乘积。
[0512] 地址12之乘法累加指令(MULT-ACCUM OUTBUF[1],WR ROW 6)会指示神经处理单元126从字OUTBUF[1]读取遗忘闸(F)数值,从权重随机存取存储器 124之列6读取其相对应字,并将其相乘以产生一第二乘积与地址11之指令产生于累加器202内之第一乘积相加。更精确地说,从列6读取之字是先前时间步骤计算出之当前记忆胞状态(C)值,对于神经处理单元群组4901内标号除4 之余数为3之神经处理单元126而言,第一乘积与第二乘积之加总即为此新的记忆胞状态(C)。不过,对于神经处理单元群组4901之其他三个神经处理单元 
126而言,从列6读取之字是不需理会的数值,这是因为这些数值所产生之累加值将不被使用,亦即不会被地址13与14之指令放入输出缓冲器1104而会被地址14之指令所清除。也就是说,只有神经处理单元群组4901中标号除4之余数为3之神经处理单元126所产生之新的记忆胞状态(C)值将会被使用,即依据地址13与14之指令。就地址12之指令之第二至三十一次执行而言,从权重随机存取存储器124之列6读取之C数值是循环组之前次执行中由地址
13之指令写入之数值。不过,对于地址12之指令之第一次执行而言,列6之C数值则是由架构程序在启动图51之非架构程序前或是由非架构程序之一调整后版本写入之初始值。
[0513] 地址13之输出指令(OUTPUT PASSTHRU,WR ROW 6,MASK[0:2])只会传递累加器202数值,即计算出之C数值,至字OUTBUF[3](也就是说,只有神经处理单元群组4901中标号除4之余数为3之神经处理单元126会将其计算出之C数值写入输出缓冲器1104),而权重随机存取存储器124之列6则是以更新后之输出缓冲器1104写入,如图50所示。也就是说,地址13之输出指令会遮蔽字OUTBUF[0],OUTBUF[1]与OUTBUF[2]而维持其当前数值(即I, F与O数值)。如前述,只有列6对应于神经处理单元群组4901之四行字中标号除4之余数为3之字内之C数值会被使用,也就是由地址12之指令使用;因此,非架构程序不会理会权重随机存取存储器124之列6中位于行0-2,行4-6,依此类推至行508-510之数值,如图50所示(即I,F与O数值)。
[0514] 地址14之输出指令(OUTPUT TANH,NOP,MASK[0:2],CLR ACC)会对累加器202数值执行一双曲正切启动函数,并将计算出来之tanh(C)数值写入字 OUTBUF[3],此指令并会清除累加器202,而不写入存储器。地址14之输出指令,如同地址13之输出指令,会遮蔽字OUTBUF[0],OUTBUF[1]与OUTBUF[2] 而维持其原本数值,如图50所示。
[0515] 地址15至16之指令之每一次执行会计算当前时间步骤产生之记忆胞输出 (H)值并将其写入数据随机存取存储器122之当前输出列后方第二列,其数值将会由架构程序读取并用于下一次时间步骤(亦即在下一次循环执行中由地址3 至7之指令使用)。更精确地说,地址15之乘法累加指令会从字OUTBUF[2] 读取输出闸(O)数值,从字OUTBUF[3]读取tanh(C)数值,并将其相乘以产生一乘积加入由地址14之指令清除之累加器202。更精确地说,神经处理单元群组 4901之四个神经处理单元126中之各个神经处理单元126都会计算数值O与 tanh(C)之乘积。
[0516] 地址16之输出指令会传递累加器202数值并在第一次执行中将计算出之H 数值写入列3,在第二次执行中将计算出之H数值写入列5,依此类推在第三十一次执行中将计算出之H数值写入列63,如图50所示,接下来这些数值会由地址4与8之指令使用。此外,如图50所示,这些计算出来之H数值会被放入输出缓冲器1104供地址4与8之指令后续使用。地址16之输出指令并会清除累加器202。在一实施例中,长短期记忆胞4600之设计系使地址16之输出指令(以及/或图48中地址22之输出指令)具有一启动函数,如S型或双曲正切函数,而非传递累加器202数值。
[0517] 地址17之循环指令会使循环计数器3804递减并且在新的循环计数器3804 数值大于零之情况下回到地址3之指令。
[0518] 由此可发现,因为图49之神经网络单元121实施例中之输出缓冲器 1104之反馈与屏蔽能力,图51之非架构程序之循环组内的指令数相较于图48之非架构指令大致减少34%。此外,因为图49之神经网络单元121实施例中之输出缓冲器1104之反馈与屏蔽能力,图51非架构程序之数据随机存取存储器122中之存储器配置所搭配之时间步骤数大致为图
48之三倍。前述改善有助于某些利用神经网络单元121执行长短期记忆胞层计算之架构程序应用,特别是针对长短期记忆胞层中之长短期记忆胞4600数量少于或等于128之应用。
[0519] 图47至图51之实施例系假定各个时间步骤中之权重与偏移值维持不变。不过,本发明并不限于此,其他权重与偏移值随时间步骤改变之实施例亦属本发明之范畴,其中,权重随机存取存储器124并非图47至图50所示填入单一组权重与偏移值,而是在各个时间步骤填入不同组权重与偏移值而图48至图51之非架构程序之权重随机存取存储器124地址会随之调整。
[0520] 基本上,在前述图47至图51之实施例中,权重,偏移与中间值(如 C,C’数值)系储存于权重随机存取存储器124,而输入与输出值(如X,H数值)则是储存于数据随机存取存储器122。此特征有利于数据随机存取存储器 122为双端口而权重随机存取存储器124为单端口之实施例,这是因为从非架构程序与架构程序至数据随机存取存储器122会有更多的流量。不过,因为权重随机存取存储器124较大,在本发明之另一实施例中则是互换储存非架构与架构程序写入数值之存储器(即互换数据随机存取存储器122与权重随机存取存储器124)。也就是说,W,U,B,C’,tanh(C)与C数值系储存于数据随机存取存储器122而X,H,I,F与O数值则是储存于权重随机存取存储器124(图47之调整后实施例);以及W,U,B,与C数值系储存于数据随机存取存储器122而X与H数值则是储存于权重随机存取存储器124(图50之调整后实施例)。因为权重随机存取存储器124较大,这些实施例在一次执行中需要进行较多时间步骤。对于利用神经网络单元121执行计算之架构程序的应用而言,此特征有利于某些能从较多之时间步骤得利之应用并且可以为单端口设计之存储器(如权重随机存取存储器
124)提供足够带宽。
[0521] 图52系一方块图,显示一神经网络单元121之实施例,此实施例之神经处理单元群组内具有输出缓冲遮蔽与反馈能力,并且共享启动函数单元 1112。图52之神经网络单元121系类似于图47之神经网络单元121,并且图中具有相同标号之组件亦相类似。不过,图49之四个启动函数单元212在本实施例中则是由单一个共享启动函数单元1112所取代,此单一个启动函数单元会接收四个来自四个累加器202之输出217并产生四个输出至字 OUTBUF[0],OUTBUF[1],OUTBUF[2]与OUTBUF[3]。图52之神经网络单元212之运作方式类似于前文图49至图51所述之实施例,并且其运作共享启动函数单元1112之方式系类似于前文图11至图13所述之实施例。
[0522] 图53系一方块图,显示当神经网络单元121执行关联于图46 中一个具有128个长短期记忆胞4600之层级之计算时,图49之神经网络单元121之数据随机存取存储器122,权重随机存取存储器124与输出缓冲器 1104内之数据配置之另一实施例。图53之范例系类似于图50之范例。不过,在图53中,Wi,Wf与Wo值系位于列0(而非如图50系位于列3);Ui,Uf与Uo值系位于列1(而非如图50系位于列4);Bi,Bf与 Bo值系位于列2(而非如图50系位于列5);C值系位于列3(而非如图50系位于列6)。另外,图53之输出缓冲器1104之内容系类似于图50,不过,因为图54与图51之非架构程序之差异,第三列之内容(即I,F,O与C’数值)是在地址7之指令执行后才会出现在输出缓冲器1104 (而非如图50是地址10之指令);第四列之内容(即I,F,O与C数值) 是在地址10之指令执行后才会出现在输出缓冲器1104(而非如图
50是地址 13之指令);第五列之内容(即I,F,O与tanh(C)数值)是在地址11之指令执行后才会出现在输出缓冲器1104(而非如图50是地址14之指令);并且第六列之内容(即H数值)是在地址13之指令执行后才会出现在输出缓冲器 1104(而非如图50是地址16之指令),详如后述。
[0523] 图54系一表格,显示储存于神经网络单元121之程序存储器129之一程序,此程序系由图49之神经网络单元121执行并依据图53之配置使用数据与权重,以达成关联于长短期记忆胞层之计算。图54之范例程序系类似于图51之程序。更精确地说,图54与图51中,地址0至5之指令相同;图54中地址7与8之指令相同于图51中地址10与11之指令;并且图54中地址10与14之指令相同于第五十一图中地址13与17之指令。
[0524] 不过,图54中地址6之指令并不会清除累加器202(相较之下,第五十一图中地址6之指令则会清除累加器202)。此外,图51中地址7至9 之指令并不出现在图54之非架构程序内。最后,就图54中地址9 之指令与图51中地址12之指令而言,除了图54中地址9之指令系读取权重随机存取存储器124之列3而图51中地址12之指令则是读取权重随机存取存储器之列6外,其他部分均相同。
[0525] 因为图54之非架构程序与图51之非架构程序之差异,图53之配置使用之权重随机存取存储器124之列数会减少三个,而程序循环内之指令数也会减少三个。图54之非架构程序内之循环组尺寸实质上只有图48之非架构程序内之循环组尺寸的一半,并且大致只有图51之非架构程序内之循环组尺寸之80%。
[0526] 图55系一方块图,显示本发明另一实施例之神经处理单元126之部分。更精确地说,对于图49之多个神经处理单元126中之单一个神经处理单元126而言,图中显示多路复用寄存器208与其相关联输入207,211与4905,以及多路复用寄存器208与其相关联输入206,711与4907。除了图49之输入外,神经处理单元126之多路复用寄存器208与多路复用寄存器705个别接收一群组内编号(index_within_group)输入5599。群组内编号输入5599指出特定神经处理单元126在其神经处理单元群组4901内之编号。因此,举例来说,以各个神经处理单元群组4901具有四个神经处理单元126之实施例为例,在各个神经处理单元群组
4901内,其中一个神经处理单元126在其群组内编号输入 5599中接收数值零,其中一个神经处理单元126在其群组内编号输入5599中接收数值一,其中一个神经处理单元126在其群组内编号输入5599中接收数值二,而其中一个神经处理单元126在其群组内编号输入5599中接收数值三。换句话说,神经处理单元126所接收之群组内编号输入5599数值就是此神经处理单元 126在神经网络单元121内之编号除以J之余数,其中J是神经处理单元群组4901 内之神经处理单元126之数量。因此,举例来说,神经处理单元73在其群组内编号输入5599接收数值一,神经处理单元353在其群组内编号输入5599接收数值三,而神经处理单元6在其群组内编号输入5599接收数值二。
[0527] 此外,当控制输入213指定一默认值,在此表示为“SELF”,多路复用寄存器208会选择对应于群组内编号输入5599数值之输出缓冲器1104输出4905。因此,当一非架构指令以SELF之数值指定接收来自输出缓冲器之数据(在图57地址2与7之指令中系标示为OUTBUF[SELF]),各个神经处理单元126 之多路复用寄存器208会从输出缓冲器1104接收其相对应字。因此,举例来说,当神经网络单元121执行图57中地址2与7之非架构指令,神经处理单元73之多路复用寄存器208会在四个输入4905中选择第二个(编号1)输入以接收来自输出缓冲器1104之字73,神经处理单元353之多路复用寄存器208会在四个输入4905中选择第四个(编号3)输入以接收来自输出缓冲器1104之字 353,而神经处理单元6之多路复用寄存器
208会在四个输入4905中选择第三个(编号2)输入以接收来自输出缓冲器1104之字6。虽然并未使用于图57之非架构程序,不过,非架构指令亦可利用SELF数值(OUTBUF[SELF])指定接收来自输出缓冲器1104之数据而使控制输入713指定默认值使各个神经处理单元126之多路复用寄存器705从输出缓冲器1104接收其相对应字。
[0528] 图56系一方块图,显示当神经网络单元执行关联于图43之 Jordan时间递归神经网络之计算并利用图55之实施例时,神经网络单元121之数据随机存取存储器122与权重随机存取存储器124内之数据配置之一范例。图中权重随机存取存储器124内之权重配置系相同于图44之范例。图中数据随机存取存储器122内之数值的配置系相似于图44之范例,除了在本范例中,各个时间步骤具有相对应之一对两列存储器以装载输入层节点D 值与输出层节点Y值,而非如图44之范例使用一组四列之存储器。也就是说,在本范例中,隐藏层Z数值与内容层C数值并不写入数据随机存取存储器122。而是将输出缓冲器1104作为隐藏层Z数值与内容层C数值之一类别草稿存储器,详如图57之非架构程序所述。前述OUTBUF[SELF]输出缓冲器1104之反馈特征,可以使非架构程序之运作更为快速(这是将对于数据随机存取存储器122执行之两次写入与两次读取动作,以对于输出缓冲器1104执行之两次写入与两次读取动作来取代)并减少各个时间步骤使用之数据随机存取存储器122之空间,而使本实施例之数据随机存取存储器122所装载之数据可用于大约两倍于图44与图45之实施例所具有之时间步骤,如图中所示,即32个时间步骤。
[0529] 图57系一表格,显示储存于神经网络单元121之程序存储器129之一程序,此程序系由神经网络单元121执行并依据图56之配置使用数据与权重,以达成Jordan时间递归神经网络。图57之非架构程序类似于图45之非架构程序,其差异处如下所述。
[0530] 图57之范例程序具有12个非架构指令分别位于地址0至11。地址0 之初始化指令会清除累加器202并将循环计数器3804之数值初始化为32,使循环组(地址2至11之指令)执行32次。地址1之输出指令会将累加器202(由地址0之指令所清除)之零值放入输出缓冲器1104。由此可观察到,在地址2 至6之指令的执行过程中,这512个神经处理单元126系作为
512个相对应之隐藏层节点Z进行运作,而在地址7至10之指令的执行过程中,系作为512个相对应之输出层节点Y进行运作。也就是说,地址2至6之指令之32次执行会计算32个相对应时间步骤之隐藏层节点Z数值,并将其放入输出缓冲器1104 供地址7至9之指令之相对应32次执行使用,以计算这32个相对应时间步骤之输出层节点Y并将其写入数据随机存取存储器122,并提供地址10之指令之相对应32次执行使用,以将这32个相对应时间步骤之内容层节点C放入输出缓冲器1104。(放入输出缓冲器1104中这32个时间步骤之内容层节点C并不会被使用。)
[0531] 在地址2与3之指令(ADD_D_ACC OUTBUF[SELF]与ADD_D_ACC ROTATE,COUNT=511)之第一次执行中,512个神经处理单元126中之各个神经处理单元126会将输出缓冲器1104之512个内容节点C值累加至其累加器202,这些内容节点C值系由地址0至1之指令执行所产生与写入。在地址2与3之指令之第二次执行中,这512个神经处理单元126中之各个神经处理单元126 会将输出缓冲器1104之512个内容节点C值累加至其累加器202,这些内容节点C值系由地址7至8与10之指令执行所产生与写入。更精确地说,地址2之指令会指示各个神经处理单元126之多路复用寄存器208选择其相对应输出缓冲器1104字,如前所述,并将其加入累加器202;地址3之指令会指示神经处理单元126在512个字之旋转器内旋转内容节点C值,此512个字之旋转器系由这512个神经处理单元中相连接之多路复用寄存器208之集体运作所构成,而使各个神经处理单元126可以将这512个内容节点C值累加至其累加器202。地址3之指令并不会清除累加器202,如此地址4与5之指令即可将输入层节点 D值(乘上其相对应权重)加上由地址2与3之指令累加出之内容层节点C值。
[0532] 在地址4与5之指令(MULT-ACCUM DR ROW+2,WR ROW 0与 MULT-ACCUM ROTATE,WR ROW+1,COUNT=511)之各次执行中,这512 个神经处理单元126中之各个神经处理单元126会执行512次乘法运算,将数据随机存取存储器122中关联于当前时间步骤之列(例如:对于时间步骤0而言即为列0,对于时间步骤1而言即为列2,依此类推,对于对于时间步骤31 而言即为列62)之512个输入节点D值,乘上权重随机存取存储器124之列0 至511中对应于此神经处理单元126之行之权重,以产生512个乘积,而连同这地址2与3之指令对于这512个内容节点C值执行之累加结果,一并累加至相对应神经处理单元126之累加器202以计算隐藏节点Z层数值。
[0533] 在地址6之指令(OUTPUT PASSTHRU,NOP,CLR ACC)之各次执行中,这 512个神经处理单元126之512个累加器202数值系传递并写入输出缓冲器1104 之相对应字,并且累加器202会被清除。
[0534] 在地址7与8之指令(MULT-ACCUM OUTBUF[SELF],WR ROW 512与 MULT-ACCUM ROTATE,WR ROW+1,COUNT=511)之执行过程中,这512 个神经处理单元126中之各个神经处理单元126会执行512次乘法运算,将输出缓冲器1104中之512个隐藏节点Z值(由地址2至6之指令之相对应次执行所产生并写入),乘上权重随机存取存储器124之列512至1023中对应于此神经处理单元126之行之权重,以产生512个乘积累加至相对应神经处理单元126 之累加器202。
[0535] 在地址9之指令(OUTPUT ACTIVATION FUNCTION,DR OUT ROW+2)之各次执行中,会对于这512个累加值执行一启动函数(如双曲正切函数,S型函数,校正函数)以计算输出节点Y值,此输出节点Y值会被写入数据随机存取存储器122中对应于当前时间步骤之列(例如:对于时间步骤0而言即为列1,对于时间步骤1而言即为列3,依此类推,对于时间步骤31而言即为列63)。地址9之指令并不会清除累加器202。
[0536] 在地址10之指令(OUTPUT PASSTHRU,NOP,CLR ACC)之各次执行中,地址7与8之指令累加出之512个数值会被放入输出缓冲器1104供地址2与3之指令之下一次执行使用,并且累加器202会被清除。
[0537] 地址11之循环指令会使循环计数器3804之数值递减,而若是新的循环计数器3804数值仍然大于零,就指示回到地址2之指令。
[0538] 如同对应于图44之章节所述,再利用图57之非架构程序执行 Jordan时间递归神经网络之范例中,虽然会对于累加器202数值施以一启动函数以产生输出层节点Y值,不过,此范例系假定在施以启动函数前,累加器202 数值就传递至内容层节点C,而非传递真正的输出层节点Y值。不过,对于将启动函数施加于累加器202数值以产生内容层节点C之Jordan时间递归神经网络而言,地址10之指令将会从图57之非架构程序中移除。在本文所述之实施例中,Elman或Jordan时间递归神经网络具有单一个隐藏节点层(如图40与图42),不过,需要理解的是,这些处理器100与神经网络单元121 之实施例可以使用类似于本文所述之方式,有效地执行关联于具有多个隐藏层之时间递归神经网络之计算。
[0539] 如前文对应于图2之章节所述,各个神经处理单元126系作为一个人工神经网络内之神经元进行运作,而神经网络单元121内所有的神经处理单元126 会以大规模平行处理之方式有效地计算此网络之一层级之神经元输出值。此神经网络单元之平行处理方式,特别是使用神经处理单元多路复用寄存器集体构成之旋转器,并非传统上计算神经元层输出之方式所能直觉想到。进一步来说,传统方式通常涉及关联于单一个神经元或是一个非常小之神经元子集合之计算 (例如,使用平行算术单元执行乘法与加法计算),然后就继续执行关联于同一层级之下一个神经元之计算,依此类推以序列方式继续执行,直到完成对于此层级中所有之神经元之计算。相较之下,本发明在各个时频周期内,神经网络单元121之所有神经处理单元126(神经元)会平行执行关联于产生所有神经元输出所需计算中之一个小集合(例如单一个乘法与累加计算)。在大约M个时频周期结束后-M是当前层级内连结之节点数-神经网络单元121就会计算出所有神经元之输出。在许多人工神经网络配置中,因为存在大量神经处理单元126,神经网络单元121就可以在M个时频周期结束时对于整个层级之所有神经元计算其神经元输出值。如本文所述,此计算对于所有类型之人工神经网络计算而言都具效率,这些人工神经网络包含但不限于前馈与时间递归神经网络,如Elman,Jordan与长短期记忆网络。最后,虽然本文之实施例中,神经网络单元121系配置为512个神经处理单元126(例如采取宽字配置)以运行时间递归神经网络之计算,不过,本发明并不限于此,将神经网络单元121配置为 1024个神经处理单元126(例如采取窄字配置)以运行时间递归神经网络单元之计算之实施例,以及如前述具有512与1024以外其他数量之神经处理单元126 之神经网络单元121,亦属本发明之范畴。
[0540] 三维卷积神经网络
[0541] 卷积神经网络(convolutional neural network)在深度学习之技术领域中越来越流行,并且在影像识别领域已经产生了令人印象深刻的成果,而在其他领域,如自然语言(natural language)处理,推荐系统(recommender system)与游戏,卷积神经网络也取得了可喜的成果。卷积神经网络包含至少一个卷积层,对一输入利用滤波器(filter)执行卷积运算以产生一输出。一般而言,一个卷积神经网络会包含一系列前述之卷积层,前一个卷积层的输出会作为下一个卷积层的输入,其间可能还具有一共源(pooling)层。
[0542] 卷积神经网络也对动物视觉皮层(cortex)之性质的研究带来影响,在视觉皮层中,个别神经元会对动物之眼睛视野内之一子区域所接收之光线产生反应。此子区域即为此神经元之接收区。视觉皮层内各个神经元接收区之重迭结果即构成视野。进一步来说,这些神经元可以在接收区内侦测特定形状,例如一个特定走向的直边或是具有特定色彩的斑点。因为视野是由相似的神经元铺设而成,动物的脑部会侦测特定形状,而不去理会这个形状在视野内的位置。此现象称为平移不变性(translation invariance)。对于平移不变之输入数据,许多卷积神经网络显得特别有用,这是因为滤波器权重会关联于整个输入(如整个影像)。平移不变之特性使滤波器可以重复使用在整个输入,藉此可以大幅减少相对于一个完全连结层,例如前文所称之传统神经网络层或是乘法累加层,所需之权重数量。在此系描述加快前述神经网络单元121中关联于卷积神经网络之运算效能之方法之实施例,以及其他实施例。
[0543] 如前述,卷积操作是一个对于一第一矩阵利用一第二矩阵执行卷积运算之操作。此第二矩阵即为前文所述之卷积核;不过,在以下所述之图式中,第二矩阵通常代表一个权重,参数,元素或数值之滤波器。此外,虽然前文对应于图24至图26所述之第一与第二矩阵为二维矩阵,以下所述之卷积操作中之第一与第二矩阵则是三维矩阵,这是因为三维卷积运作经常会使用在卷积神经网络。这也就是说,输入会是一个三维矩阵,滤波器是三维矩阵,如图58所述。
[0544] 请参照图58,图中系显示一方块图,用以描述一三维卷积运算任务,例如一卷积神经网络经常执行之三维卷积运算任务。进一步来说,图中系对一三维输入5802利用复数个滤波器5804执行卷积运算以产生一输出5808。一般而言,此输入5802具有W个栏(column),H个列(row)与C个通道(channel);一共具有F个滤波器5804,各个滤波器5804具有S个栏,R个列与C个通道(对应至输入5802之C个通道);并且一共有F个输出5808(对应至F个滤波器 5804),且各个输出5808具有P个栏与Q个列。前述W,H,C,F,S,R,Q 与P为神经网络单元121硬件所执行之特定神经网络之超参数(hyper-parameter)。相对应于执行神经网络之超参数的硬件而言,这些超参数会呈现动态变化,即使此硬件特性呈现为静态(例如算术逻辑单元的数量,存储器宽度),神经网络单元121所执行之不同神经网络中之超参数亦可能不同。举例来说,某一个神经网络会是设计来执行影像辨识,不过,另一个神经网络则会是设计来下围棋。此外,即便同为影像辨识/下围棋的网络,各个网络亦可能具有不同之超参数,这些超参数包含层数,层维度(layer dimension)(节点与连结数)以及层类型(例如完全连结层,卷积层,共源层,长短期记忆层)。
[0545] 举例来说,输入5802可包含W=12个栏,H=12个列,以及C=20个通道;一共有50个滤波器5804,各个滤波器5804具有S=5个栏以及R=5个列;一共有50个输出5808,各个输出具有P=8个栏与Q=8个列,这些数据是一个习知神经网络之卷积层所具有之输入,滤波器与输出之超参数,此神经网络是设计来区分手写数字,例如可利用习知之MNIST数据库进行训练,也就是卷积神经网络LeNet 5(参见LeCun,Y.,Bottou,L.,Bengio,Y.,and Haffner,P.(1998), Gradient-based learning applied to document recognition,Proceedings of the IEEE, 86(11),2278–2324)之一变形。以下图59至图60系描述神经网络单元121 执行卷积运算以将一个12x12x20之输入5802利用50个5x5之滤波器执行卷积运算以产生50个8x8之输出5808之方法之多个实施例,说明一个更为普遍之方法,以将三维输入利用三维滤波器进行卷积运算以产生输出,此方法系由一神经网络单元121执行,特别是具有神经处理单元126之阵列,而这些神经处理单元126具有多路复用寄存器(例如多路复用寄存器208),用以提供将接收自数据随机存取存储器122之一输入数据列沿着神经处理单元126之阵列进行旋转之能力,如本文所述。不过,此操作仍有一普遍的问题尚待解决,如图58所述,亦即将一个WxHxC之输入5802利用F个SxRxC之滤波器5804 执行卷积运算以产生F个PxQ之输出
5808之数学问题。更具体来说,以下将会说明将一个WxHxC之输入5802利用单一个SxRxC之滤波器5804执行卷积运算以产生单一个PxQ之输出5808之计算。
[0546] 在图24至图26之描述内容中,卷积是九个3x3之卷积核元素与其相对应子矩阵元素之乘积的加总。类似地,在图58之描述内容中,卷积则是SxRxC滤波器5804元素与输入5802中其相对应SxRxC子矩阵元素之 SxRxC乘积的加总。加总之结果,或称卷积,会是输出
5808之其中一个PxQ 值。进一步说,假定滤波器5804之S个栏与R个列之索引值是从零开始,所产生的卷积结果就会是位于输出5808之位置[s,r],其中,s与r是进行卷积运算之输出
5802之SxRxC子矩阵之左上方元素的栏索引与列索引。如此,举例来说,以Y[s,r]标示为输出5808之元素,X[I,j,k]标示为输入5802之元素,F[m,n,k]标示为滤波器5804之元素,其中,i与j是输入5802之栏索引与列索引,m与n 是滤波器5804之栏索引与列索引,k则是信道索引,如此:
[0547] Y[s,r]=
[0548] X[s,r,0]*F[0,0,0]+
[0549] X[s+1,r,0]*F[1,0,0]+...
[0550] X[s+S–1,r,0]*F[S–1,0,0]+
[0551] X[s,r+1,0]*F[0,1,0]+
[0552] X[s+1r+1,0]*F[1,1,0]+...
[0553] X[s+S–1,r+1,0]*F[S–1,1,0]+...
[0554] X[s,r+R–1,0]*F[0,R–1,0]+
[0555] X[s+1,r+R–1,0]*F[1,R–1,0]+...
[0556] X[s+S–1,r+R–1,0]*F[S–1,R–1,0]+
[0557] X[s,r,1]*F[0,0,1]+
[0558] X[s+1,r,1]*F[1,0,1]+...
[0559] X[s+S–1,r,1]*F[S–1,0,1]+
[0560] X[s,r+1,1]*F[0,1,1]+
[0561] X[s+1,r+1,1]*F[1,1,1]+...
[0562] X[s+S–1,r+1,1]*F[S–1,1,1]+...
[0563] X[s,r+R–1,1]*F[0,R–1,1]+
[0564] X[s+1,r+R–1,1]*F[1,R–1,1]+...
[0565] X[s+S–1,r+R–1,1]*F[S–1,R–1,1]+
[0566] X[s,r,C–1]*F[0,0,C–1]+
[0567] X[s+1,r,C–1]*F[1,0,C–1]+...
[0568] X[s+S–1,r,C–1]*F[S–1,0,C–1]+
[0569] X[s,r+1,C–1]*F[0,1,C–1]+
[0570] X[s+1,r+1,C–1]*F[1,1,C–1]+...
[0571] X[s+S–1,r+1,C–1]*F[S–1,1,C–1]+...
[0572] X[s,r+R–1,C–1]*F[0,R–1,C–1]+
[0573] X[s+1,r+R–1,C–1]*F[1,R–1,C–1]+...
[0574] X[s+S–1,r+R–1,C–1]*F[S–1,R–1,C–1].
[0575] 等式(7)
[0576] 因此,举例来说,当S=R=5而C=20,输出5808之各个PxQ值就会是 5x5x200=500乘积之加总。
[0577] 前文假定不对输入5802边框(border)进行填补(padding around),此操作通常称为“有效(valid)”卷积(相对于“同尺寸(same size)”卷积)。如此,输出5808之尺寸就会小于输入5802之栏与列的尺寸。更具体来说,就是P=W–S+1,且 Q=H–R+1。在同尺寸卷积之情况下则会进行填补(例如补0),使输出5808的尺寸相同于输入5802之栏与列的尺寸,即P=W且Q=H。
[0578] 现在请参照图59,图中显示一方块图,描述将一数据随机存取存储器122列分割为多个输入方块5902,将一权重随机存取存储器124列分割为多个滤波器方块5904,将神经处理单元阵列126分割为多个神经处理单元方块 5906,以及将一数据随机存取存储器122列分割为多个输出方块5908。在图59之实施例中,神经网络单元121内之神经处理单元126的数量系设定为N,相对应地,从数据随机存取存储器122列所接收之字数为N,并且,从权重随机存取存储器124列所接收之字数也会是N。如图中所示,前述N个神经处理单元126以及从数据随机存取存储器122/权重随机存取存储器124接收之N个字则是设定为0至N-1。
[0579] 如图中所示,方块5902/5904/5906/5908的数量系设定为G,而G个方块则是设定为0至G-1。G是N与B计算出之商数(quotient)。B是方块尺寸。B是N 之因子中,至少与W一样大之最小者,W则是图58之输入5802之栏数。举例来说,若是N为1024且W为12,B就会是16,这是因为16是1024之因子中,大于12之最小者,而G=1024/16=64。
[0580] 如图59所示,数据随机存取存储器122列/权重随机存取存储器124 列之N个字系指定为G个方块之第一个方块中之0,1,2直到B-1;G个方块之第二个方块中之B,B+1直到2B-1;依此类推,直到方块G-1中之N-B,N-B+1 直到N-1。这些不同标号的方块系互相对应。也就是说,神经处理单元方块0 会从数据随机存取存储器122接收输入方块0与从权重随机存取存储器124接收滤波器方块0,并产生输出方块0;神经处理单元方块1会从数据随机存取存储器122接收输入方块1与从权重随机存取存储器124接收滤波器方块1,并产生输出方块1;
依此类推,神经处理单元方块N-1会从数据随机存取存储器122 接收输入方块N-1与从权重随机存取存储器124接收滤波器方块N-1,并产生输出方块N-1。神经处理单元方块5906内个别神经处理单元126之输出方块5908 所产生的结果会在后续章节说明。
[0581] 将神经处理单元126阵列,数据随机存取存储器122列,权重随机存取存储器124列,与数据随机存取存储器122列分割为相对应之G个神经处理单元方块5906,输入方块5902,滤波器方块5904,与输出方块5908,而各个方块的尺寸为B,以利于神经网络单元121有效率地对输入5802利用滤波器5804 执行卷积以产生输出5808。特别是,此分割操作,搭配数据随机存取存储器122 与权重随机存取存储器124内之内之输入数据与滤波器权重之配置,可帮助一特殊巢状循环结构(nested loop structure),利用神经网络单元121之旋转器多路复用寄存器208结构,将关联于输入5802之C个通道之所有输入方块5902进行旋转,如此,G个神经处理单元方块5906中关联于F个滤波器5804之F个神经处理单元方块5906中的每一个就可以“看见”(即接收)输入5802中用来与其相对应滤波器5804进行卷积之所有C个通道。进一步来说,神经网络单元121 会将数据随机存取存储器122列之输入方块
5902读入多路复用寄存器208,然后,利用由这些多路复用寄存器208构成之旋转器,将输入方块5902至少C个邻接神经处理单元方块5906的距离。如此,在将另一个输入5802列读入多路复用寄存器208之前,各个神经处理单元126即可执行其相对应滤波器5804列之所有通道与输入5802列之所有通道之乘法累加操作(例如,执行如以下图60所示之栏-通道-加总操作),这部分在图60之虚拟程序代码会有更详细的描述。相较于一个透过检验前述等式(7)所能使用之更为直观的卷积操作方法,神经网络单元121的使用具有其独特性与效率。
[0582] 从前文中可以观察到,虽然N是静态,B,因而还有G,则是呈现动态,这是因为他们并不仅只是N的函数,还是W的函数,而W是由神经网络单元121 执行之特定神经网络之超参数。G与B的值会并入执行于神经网络单元121之非架构程序以执行此卷积操作,详如后述。
[0583] 现在请参照图60,图中显示一虚拟程序代码(pseudocode),描述一非架构程序在神经网络单元上执行如图58所示之三维卷积任务时,所执行之运算。所列出之虚拟程序代码包含有列号以利说明。在图60中,列号始于2,并且省略列号4,16,18,21-22与25。如此可以更容易将图60之虚拟程序代码与图63,图67与图69中之程序代码相比较,因为虚拟程序代码之类似指令会具有相对应的列号。值得注意的是,图67与图69中亦省略列 18与22,不过,列1至26全部都包含在图63与图65中。
[0584] 在检验图60之虚拟程序代码时,需注意的是,相同指令或操作会由神经网络单元121之所有神经处理单元126同时执行,如前文图1至图48所述。因此,虽然图60之部分区域之描述会对应至单一个神经处理单元126,此神经处理单元系作为一卷积神经网络层之单一个神经元以产生输出5808之单一个元素或卷积结果,需要理解的是,所有的神经处理单元126系同时依据图60之虚拟程序代码运作以产生结果。不过,需要注意到在许多情况下,受到卷积神经网络层之超参数的影响,神经处理单元方块5904中之某些神经处理单元126可能会产生不被使用的结果。此外,虽然一给定输出方块5908内之一输出5808之Q个列之其中之一之P个卷积结果会打包在一起,位于输出方块 5908边框可能会有某些结果不被使用。因此,在数据随机存取存储器122(或权重随机存取存储器124)中写入N个结果之列内(如图60之列24),所有FxP个卷积结果通常都不会打包在一起。较佳地,另一个非架构程序(或是同一个架构程序之额外部分)会将未打包之卷积结果集合在一起以输入神经网络之下一层。最后,依据数据随机存取存储器122内之输出5802配置以及权重随机存取存储器
124内之滤波器5804配置的内容,可以对图60有更充分地理解,关于此配置有四个实施例描述于后续章节图61至图69。
[0585] 虚拟程序代码包含四个巢状循环,表示为循环1,循环2,循环3与循环4。循环1是外侧循环而循环4是内侧循环。循环1对于输出5808之Q个输出列中之各个输出列会重复执行。循环2对于滤波器5804之R个滤波器列中之各个滤波器列会重复执行。循环3至少对于输入
5802之C个信道中之各个信道会重复执行。以下对此有更详细的说明,除了C通道外,如果存在间隙输入方块群组 (gap input block group),循环3也会依据间隙输入方块群组(例如图64B图61B 之组件6103)之数量重复执行。循环4会对于滤波器5804之S个滤波器栏中之各个滤波器栏会重复执行。透过将一个S个栏,R个列与C个通道之滤波器在空间上具体化排列于输入5802空间内一个具有相对应尺寸之部分,可以在后续章节会对这四个循环有更一般化的理解与更详细的说明。非架构程序可透过循环(LOOP)指令之使用,搭配一个初始化(INITIALIZE)指令,例如图26A,28,42,45,48,51,54或图57之INITIALIZE 与LOOP指令,来达成前述循环操作。循环1可透过将LOOPCNT指派为Q来达成。较佳地,三个外部循环(循环1,
2与3)可透过INITIZLIZE与LOOP 指令之使用来达成;不过,内部循环(循环4)则可利用关联于乘法累加指令之计数(COUNT)值来达成,例如图4,9,20,42,45或图57之 MULT-ACCUM指令。
[0586] 依据循环4,此循环系一内侧循环,各个神经处理单元126会将其相对应滤波器5804列之S个权重与S个被覆盖之输入5802元素产生之S个乘积之加总累加至其累加器202,此加总在此系称为栏加总。依据循环3,循环4会对于C 个信道中之第一信道,将第一栏加总累加至累加器202,随后对于第二通道,将第二栏加总连同第一栏加总累加至累加器202,依此类推,直到将对应于滤波器 5804之全部C个通道之C个栏加总都累加至累加器202。在相同情况下,因为超参数之不同,循环3可能会将关联于建议输入方块群组6103与间隙滤波器方块群组6104(请参照图61)之额外零值栏加总累加至累加器202。(依据此滤波器之神经处理单元方块5906在神经处理单元方块5906中的位置,特别是此滤波器之神经处理单元方块
5906索引模除(modulo)通道数量C之计算结果,对应于各个滤波器之信道处理顺序亦会不同,详如后述。)因此,在完成一次循环3之操作时,神经网络单元121就会完成对于滤波器
5804之一个水平二维部分(slice)与输入5802中被覆盖之相对应二维水平部分产生之SxC个乘积之加总的累加运算,此加总在此称为栏通道加总。依据循环2,循环3会对于滤波器
5804之列0,将第一栏通道加总累加至累加器202,随后对于滤波器5804 之列1,将第二栏通道加总累加至累加器202,依此类推,直到将对应于滤波器 5804之全部R个列之R个栏通道加总都累加至累加器202。因此,在完成一次循环2之操作时,神经网络单元121就会完成对于滤波器5804与输入5802中被覆盖之相对应空间所产生之SxCxR个乘积之加总的累加运算,此加总在此称为栏通道列加总,而此加总即为输出5806之Q个列中单一个列之最终卷积结果。在循环2结束时,神经处理单元126会将F个栏通道列加总写入数据随机存取存储器
122之一列。如此可以发现,栏通道列加总是以栏-信道-列之顺序进行计算,而非如传统方式是以栏-列-信道之顺序计算。如此处理之优点在于可以有效利用神经网络单元121内宽度N之多路复用寄存器208旋转器。依据循环1,循环2会对于输出5806之列0,将第一栏通道列加总累加至累加器202,随后对于输入5806之列1,将第二栏通道列加总进行累加,依此类推,直到对于输出5806之全部Q个列都产生并输出栏信道列加总至数据随机存取存储器
122。
[0587] 图60之非架构程序将会由外而内进行描述以协助理解,即从外部循环朝内部循环进行,因此,循环4,即位于最内侧的循环,将会首先进行说明。
[0588] 循环4会使各个神经处理单元126之乘法器242执行S个乘法运算以产生S 个乘积。各个乘积产生后,就会累加至累加器202。因此,在完成循环4之操作后,累加器202所装载之中间加总将会比循环4开始前再增加S个乘积,亦即装载另一个栏加总。对于各个神经处理单元126而言,循环4之S个乘法运算中之每一个乘法运算都会将输入5802中位于W个栏中之相对应栏与C个信道中之一个信道与H个列中之一个列之元素作为一第一操作数。在W个栏中,] 此栏是依据所执行之循环4是第几次执行以及神经处理单元126在神经处理单元方块
5906内之位置而定。在C个通道(如果存在的话,也包含间隙输入方块群组数)中,此通道是依据所执行之循环3是第几次执行以及包含此神经处理单元126之神经处理单元方块5906之位置而定。在H个列中,此列是依据所执行之循环1是第几次执行以及所执行之循环2是第几次执行之综合判断而定。此第一操作数,即输入5802之一元素,不是从数据随机存取存储器122读入多路复用寄存器208(例如图60之列8),就是从相邻之神经处理单元126转动至多路复用寄存器208(例如图60之列15或列19)。S个乘法运算中之每一个乘法运算都会将一滤波器5804中位于S个栏中之相对应栏与C个信道中之一个信道与R个列中之一个列之权重作为一第二操作数,此滤波器5804系关联于滤波器方块5904,而此滤波器方块5904系对应于包含此神经处理单元126 之神经处理单元方块5906。在S个栏中,此栏是依据所执行之循环
4是第几次执行而定。在C个通道(如果存在的话,也包含间隙输入方块群组数)中,此通道是依据所执行之循环3是第几次执行以及包含此神经处理单元126之神经处理单元方块5906之位置而定。在R个列中,此列是依据所执行之循环2是第几次执行而定。此第二操作数,即权重,是从权重随机存取存储器124读入寄存器205(或多路复用寄存器705)(例如图60之列
13)。
[0589] 就一实施例而言,一次循环4之操作,可利用单一个MULT-ACCUM/execute 非架构指令达成,此非架构指令会指定计数值为S,指定将多路复用寄存器208 之输入211(即由相邻神经处理单元126之多路复用寄存器208旋转取得之输入 5802字元素)作为第一乘法器242输入,并且指定从权重随机存取存储器124 将一权重字读入寄存器205作为第二乘法器
242输入。另外,此非架构程序亦可包含一对MULT-ACCUM/execute非架构指令来完成循环4之一次操作。举例来说,第一个或更多指令系指定一计数值为1,指定将多路复用寄存器208之输入211-2,211-4,与/或211-8(即由相邻神经处理单元126之多路复用寄存器208 旋转二个,四个,与/或八个字距离,分别取得之输入5802字元素,以达成多字旋转,详见图70与图71之多字距离旋转操作)作为第一乘法器242输入,并且指定从权重随机存取存储器124将一权重字读入寄存器205作为第二乘法器242输入。第二指令会指定一计数值为S减一,指定多路复用寄存器208之输入211为第一乘法器242输入,并且指定将一字从权重随机存取存储器124 读入寄存器205作为第二乘法器242输入。透过指定一个大于一之旋转,第一指令可以对于循环3之第一次执行以外之所有执行,有效地达成图60之列 19所描述之方块对准(block alignment)操作。接下来会说明外侧循环。
[0590] 循环1之每一次执行都会清除N个神经处理单元126之N个累加器202。此非架构程序可利用一个INITIALIZE指令或一个“execute”指令来清除累加器,如前所述(例如图4之相关内容)。循环1之每一次执行后就会执行循环2 来将结果累加至N个累加器202。最后,循环1之每一次执行会将循环2产生之栏通道列加总从N个累加器202写入数据随机存取存储器122之列(或是选择写入权重随机存取存储器124之列)。在完成循环2操作后,累加器202内储存之栏通道列加总会包含算术上等同于前述等式(7)之卷积。储存于累加器202 内之卷积栏通道列加总会是F个输出5808之Q个列中之一列。进一步来说,G 个神经处理单元方块5906中之F个会产生F个相对应之输出方块5908;并且,对于这F个输出5808中之一相对应输出5808,这F个输出方块5908之每一个会包含此相对应输出5808之Q个列中之一列。在F小于G之情况下,G-F个神经处理单元方块5906之累加器202结果不被使用。在Q个列中,这一列之P个卷积栏通道列加总系从相关联神经处理单元方块5906之B个神经处理单元126 之累加器202之一子集合提供,而其他累加器202则不被使用。循环1之每一次执行会在输出5808之Q个列中产生不同列,而F个神经处理单元方块5906 中之每一个,会在G个输出方块5908中对应于F个神经处理单元方块5906之 F个输出方块5908中,相对应之输出方块5908之F个输出5808中产生不同输出。
[0591] 累加器202之有效/已使用之子集合,系特别依据之方块尺寸B与输入栏W 之数量之差异,如果有的话,以及所产生的是“有效”或“同尺寸”卷积输出而定。在W等于B且需要进行同尺寸卷积的情况下,此子集合会包含神经处理单元方块5906之全部B个累加器202,在此情况下,P也会等于B跟W。累加器202 之子集合在后续图62之实施例会有更详细的说明;不过,需要注意的是,输出5808之每一个个别的元素或卷积栏信道列加总,都是由单一个神经处理单元126产生于其累加器202内。
[0592] 此外,较佳地,个别的卷积栏通道列加总系完整产生于神经处理单元126 之累加器202内,而不会将任何中间过程之部分加总写入数据随机存取存储器 122(或权重随机存取存储器124)随后再将它们读回。如此处理的优点在于,可以避免减损卷积栏通道列加总之准确度。如前述,较佳地,累加器202之宽度系明显大于来自与/或写入数据随机存取存储器122与/或权重随机存取存储器 124之个别字输入之宽度。较佳地,累加器202值在被写入数据随机存取存储器 122前,会被转换,填满(saturate)与/或压缩至数据随机存取存储器122/权重随机存取存储器124之字尺寸。举例来说,如前所述,28个位之累加器202值,可以在写入数据随机存取存储器122前,被转换,填满与/或压缩至8位字,例如图30至图33所示。
[0593] 循环2之每一次执行会将来自数据随机存取存储器122之一列读入N个多路复用寄存器208内。进一步来说,G个神经处理单元方块5906会将数据随机存取存储器122列分割出之G个输入方块5902中之相对应输入方块5902读入其多路复用寄存器208。透过多路复用寄存器208旋转器之使用,循环3会使前述G个输入方块5902沿着神经网络单元121旋转至不同的神经处理单元方块 5906。非架构程序可以利用如前述之一个MULT-ACCUM指令或是一个“execute”指令,将数据随机存取存储器122列读入多路复用寄存器208。此 MULTACCUM/execute指令亦可以指定从权重随机存取存储器124读取一列,详如循环4所述。在读取数据随机存取存储器122列之后,循环2之每一次执行后就会执行循环3。
[0594] 循环3之每一次执行会执行循环4,随后旋转多路复用寄存器208而使输入方块5902对准下一个相邻的神经处理单元方块5906。此处理方式之优点在于可以使各个神经处理单元126方块对于C个信道中之不同信道再累加另一个栏加总,亦即,对于关联于现在旋转而对准于神经处理单元方块5906之输入方块5902 的通道。较佳地,在完成循环4后,多路复用寄存器208内之输入方块5902将会转动S个字,详如后述。如此,为了使输入方块5902对准于下一个相邻神经处理单元方块5906,较佳地,非架构程序将会使多路复用寄存器208旋转B减 S个字。不过,依据非架构程序之执行,特别是循环4,此旋转对准之操作可能需要将多路复用寄存器208旋转B减S加一个字。此非架构程序可以利用如前述之一个或多个MULT-ACCUM指令或“execute”指令旋转多路复用寄存器208,使输入方块5902对准于下一个相邻神经处理单元方块5906。此一个或多个非架构指令可包含一多字距离旋转操作,如后续第图70与图71所述。因而由此可以发现,每一次循环2之执行会产生F个栏通道列加总,或卷积,并将其写入数据随机存取存储器122之一列。
[0595] 虽然此处描述之实施例所执行的是“有效”卷积,不过,其他实施例如使用“同尺寸”卷积之实施例亦可用于本发明。有效卷积与同尺寸卷积之差异在于,输入 5802之边缘处理方式的不同,进而会影响输出5808尺寸。有效卷积所产生之输出5808之列与栏的数量会少于输入5802之列与栏的数量;反之,同尺寸卷积所产生之输出5808之列与栏的数量则会等同于输入5802之列与栏的数量。举例来说,对12x12之输出,利用5x5之滤波器执行一有效卷积操作会产生8x8 之输出;反之,对12x12之输出利用5x5之滤波器执行同尺寸卷积操作则会产生12x12之输出。为了完成此操作,有效卷积运算只会对输入中真正存在的数值执行乘法累加运算,也就是对“有效”数值执行运算;反之,同尺寸卷积运算必须在输入中取得4列与4栏并未真正存在的数值,也就是“不存在的(invalid)”数值。同尺寸卷积运算必须取得某些不存在的数值(例如通常为零),这是因为在5x5之滤波器扫过12x12之输入时,在输入之右侧边缘(或是左侧边缘或是二者之组合)将处会有4个列不具有相对应之输入5802元素供进行乘法运算。
[0596] 现在请参照图61A与图64B,整体称为图61,图中显示系一方块图,描述本发明对一12x12x20之输入5802,利用50个5x5之滤波器5804 执行卷积运算,以产生50个8x8之输出
5808之一实施例中,数据随机存取存储器122内之输入方块5902群组之配置6101以及权重随机存取存储器124内之滤波器方块5904群组之配置6102。图61之范例系假定神经网络单元 121具有1024个神经处理单元126;亦即,N=1024(请参照图59)。如此,因为超参数W=
12,B就会是16,也就是N之因子中,至少与W一样大之因子中之最小者;并且,因为B=16,G=
1024/16=64。因此,一共有64个神经处理单元方块5906,每个数据随机存取存储器存储器
122列会有64个输入方块 5902,并且,每个权重随机存取存储器124列会有64个滤波器方块
5904。图61所显示之输入方块索引是从零开始标示为0至63,滤波器方块索引为0 至63对应至神经处理单元索引0至63,如前文图59所述。也就是说,各个索引为0之输入方块5902与滤波器方块5904会由索引为0之神经处理单元方块5906接收;各个索引为1之输入方块5902与滤波器方块5904会由索引为 1之神经处理单元方块5906接收;依此类推,各个索引为63之输入方块5902 与滤波器方块5904则会由索引为63之神经处理单元方块5906接收;在图61之实施例中,索引为0之输入方块系包含数据随机存取存储器122之字0-15;索引为1之输入方块系包含数据随机存取存储器122之字16-31;依此类推,索引为63之输入方块则是包含数据随机存取存储器122之字1008-1023。类似地,索引为0之滤波器方块系包含权重随机存取存储器124之字0-15;索引为1之滤波器方块系包含权重随机存取存储器124之字16-31;
依此类推,索引为63 之滤波器方块则会包含权重随机存取存储器124之字1008-1023。
[0597] 在图61中显示有64个输入方块群组。其中六十个输入方块群组位于输入方块索引0至59,这些输入方块群组一般性地表示为I[c],其中c代表C=20 个信道中其中一个信道索引。这20个关联于C=20个通道之输入方块群组,即 I[0]至I[19],之三种操作,或复本,会铺排于输入方块索引0至59,详如后述。另外四个输入方块群组,称为间隙输入方块群组
6103,表示为I[G],则是位于输入方块索引60至63。较佳地,这些间隙输入方块群组6103会包含零值。一个输入方块群组I[c]会是一个H个输入方块5902之群组,这H个输入方块5902 是位于数据随机存取存储器122之不同之H个列,并且全部都位于相同输入/滤波器/神经处理单元方块索引之数据随机存取存储器122内。因此,一个输入方块群组之所有输入方块
5902都会提供至同一个神经处理单元方块5906。此外,每个输入方块群组I[c]会为输入
5802之一通道c装载HxW个纵向部分元素,或如下所述,在间隙输入方块群组6103之情况下,则是装载零。进一步来说,输入方块群组I[c]之H个输入方块5902中之各个输入方块5902会装载输入5802 之通道c之HxW个纵向部分中一相对应元素列。
[0598] 在图61之内容中,输入方块群组I[c]是一个12个输入方块5902之群组,这12个输入方块5902是位于数据随机存取存储器122之不同的12个列。 (在图61之实施例中,这12个列系于数据随机存取存储器122内彼此相邻,即位于列0-11;不过,这些列亦可彼此不相邻,而非架构程序可经调整,对于这些数据方块5902坐落之数据随机存取存储器122列,赋予其地址。)因此,各个输入方块群组具有192个数据随机存取存储器122之字,即每个输入方块16个字x12列=192个字。不过,各个输入方块5902只会装载输入5802 之相对列h与通道c之W=12个元素,输入5802之剩余字,即B-W=16-12=4 个字,则不会被使用(在一实施例中,这些字会补零),如图62所示。进一步来说,各个输入方块群组I[c]会为输入5802之通道c,装载一个12x12 之纵向部分之元素(如图62之组件6215所示),或是在输入方块群组为间隙输入方块群组6103之情况下,装载零值,图61之输入方块群组I[c] 之12个输入方块5902中之每一个输入方块5902会装载输入5802之通道c中 12x12之纵向部分6215之元素之一相对应列。输入方块群组I[c]在对应于图62处会有更详细的说明。图61与62之范例显示数据随机存取存储器122中储存于列0至11之输入方块群组,不过,这些输入方块群组亦可储存在其他列中。也就是说,虽然图61中,装载输入方块群组I[c]之数据随机存取存储器122列之列号会对应至输入5802之列号,此为偶然状态,其他数据随机存取存储器122列亦可储存输入方块群组,并且如前述,在某些实施例中,这些数据随机存取存储器122列并不需要彼此相邻。
[0599] 在图61之范例中,数据随机存取存储器122装载64个输入方块群组,各个输入方块群组具有12个输入方块5902,而总共有768个输入方块5902在图61之范例用于对12x12x20之输入5802,利用50个5x5x20之滤波器 5804进行卷积操作以产生50个8x8之输出5806。不过,因为一共有64个输入方块索引,而只有20个信道,这20个信道会重复三次铺设于在输入方块索引0 至59,而输入方块索引60至63之输入方块群组则会装载零值,而非来自输入 5802之元素。也就是说,如图中所示,输入方块群组I[0]系位于输入方块索引0,输入方块群组I[1]系位于输入方块索引1,依此类推,输入方块群组I[19]系位于输入方块索引19;随后会重复此模块,亦即,输入方块群组I[0]系位于输入方块索引20,输入方块群组I[1]系位于输入方块索引21,依此类推,输入方块群组I[19]系位于输入方块索引39;随后,此模块会再重复一次,亦即,输入方块群组I[0]系位于输入方块索引40,输入方块群组I[1]系位于输入方块索引41,依此类推,输入方块群组I[19]系位于输入方块索引59;而位于输入方块索引
60 至63之间隙输入方块群组6103则是填入零值,如此所产生之栏加总即为零,而当这些栏加总累加至累加器202时,就不会对于最终的栏通道列加总结果有任何影响。
[0600] 因为超参数的出现,会需要间隙输入方块群组6103与间隙滤波器方块群组 6104,以利于利用包含N个多路复用寄存器208之旋转器将输入方块5902沿着神经网络单元121进行旋转,详如后述。
[0601] 图61显示64x24=1536个滤波器方块群组,一般性地表示为F[f,c],其中,f代表F个滤波器5804中其中一个滤波器,c代表C=20个信道中之一信道索引,或是表示为F[G],即代表间隙滤波器方块群组6104。较佳地,间隙滤波器方块群组6104会包含零值。间隙滤波器方块群组F[G]系用以与间隙输入方块群组I[G]进行卷积运算。滤波器方块群组F[f,c]是一个RxS个滤波器方块5904 之群组,这些滤波器方块5904系位于权重随机存取存储器124之RxS个不同列,并且都位于相同输入/滤波器/神经处理单元方块索引之权重随机存取存储器124 内。因此,滤波器f之全部滤波器方块群组之全部滤波器方块5904会提供至同一个神经处理单元方块5906。此外,各个滤波器方块群组F[f,c]会为一个滤波器 5804,即滤波器f,之一通道c,装载一个RxS纵向部分之权重,(请参照图62之组件6209),或是在间隙滤波器方块群组F[G]之情况下,装载零值。进一步来说,滤波器方块群组F[f,c]之RxS个滤波器方块5904中之每一个滤波器方块5904会装载滤波器5804,即滤波器f,之通道c中,RxS纵向部分之P 个不同权重之复本,这部分在对应于图62处会有更详细的说明。
[0602] 在图61之内容中,滤波器方块群组F[f,c]是一个由25个位于权重随机存取存储器124之25个不同列之滤波器方块5904构成之群组。(在图61之实施例中,这25个列系于权重随机存取存储器内彼此相邻,即位于列0-24, 25-49等;不过,这些列亦可彼此不相邻,而非架构程序可经调整,对于这些滤波器方块5904坐落之权重随机存取存储器124列,赋予其地址。图66与图68即描述滤波器方块群组与其中之滤波器方块5904之不同配置的实施例。) 因此,图61中每个滤波器方块群组F[f,c]具有400个权重随机存取存储器 124之字,即每个滤波器方块具有16个字x25个滤波器方块=400个字。不过,每个滤波器方块只能装载滤波器5804,即滤波器f,之一相对应栏s,一相对应列r与一通道c之权重的P=8个复本,滤波器方块5904中剩余的B-P=16-8=8 个字则不被使用(在一实施例中,这些字为零值),如图62所示。进一步来说,各个滤波器方块群组F[f,c]会为滤波器5804,即滤波器f,之一通道c,装载一5x5纵向部分之权重,而在间隙滤波器方块群组6104之情况下,则装载零值。进一步来说,滤波器方块群组F[f,c]之25个滤波器方块中之各个滤波器方块5904会装载滤波器
5804,即滤波器f,之通道c中5x5纵向部分之8个不同权重之复本,这部分在图62处会有更详细的说明。
[0603] 在图61之范例中,权重随机存取存储器124装载64x24=1536个滤波器方块群组,各个滤波器方块群组具有25个滤波器方块5904,而总共有38400 个滤波器方块5904在图61之范例用于对12x12x20之输入5802,利用50 个5x5x20之滤波器5804进行卷积操作以产生50个8x8之输出5806。不过,因为只具有50个滤波器5804,64-50=14个神经处理单元方块
5906所产生之卷积不会被使用;因此,如图中所示,滤波器方块索引50至63之滤波器方块群组则是包含无所谓(don’t care)的数值。如图中所示,滤波器方块群组F[0,0]至F[0,19] 与四个间隙滤波器方块群组F[G]系位于滤波器索引0,滤波器方块群组F[1,0] 至F[1,19]与四个间隙滤波器方块群组F[G]系位于滤波器索引1,依此类推,滤波器方块群组F[49,0]至F[49,19]与四个间隙滤波器方块群组F[G]系位于滤波器索引49;而位于滤波器索引50至
63之滤波器方块群组则是无所谓的数值。
[0604] 如前述,此巢状循环结构之优点在于,可利用神经网络单元121之旋转器多路复用寄存器208,旋转对应于输入5802之所有C个通道之输入方块5902,如此可使G个神经处理单元方块5906中关联于F个滤波器5804之F个神经处理单元方块5906中之每一个神经处理单元方块5906,都能看见输入5802之所有C个通道以利用其相对应滤波器5804进行卷积运算。不过,方块数量,即G=64,并不整除于通道数量,即C=20,之实际情况,会需要产生间隙输入方块群组I[G],并且需要在20次对应于20个通道之操作外,额外重复4次非架构程序之循环3之操作(64%20=4,即间隙输入方块群组I[G]之数量)。进一步来说,假定旋转方向向右,虽然位于索引19至49之所有神经处理单元方块5906 都可以看见通道0至19之输入方块
5902,不过,位于索引0至18之神经处理单元方块5906则否。举例来说,位于索引18之神经处理单元方块1906仅能看见通道0至18,而无法看见信道19,除非信道19被包含于输入方块索引60至 63之其中之一。在另一个范例中,位于索引0之神经处理单元方块5906会看见通道0以及5至19,但无法看见通道1至4,除非通道1至4被包含于输入方块索引60至63,在此情况下,通道19就无法被包含于输入方块索引60至63 之其中之一以满足位于索引18之神经处理单元方块5906。
[0605] 为了解决此问题,此实施例导入间隙输入方块群组I[G]以确保利用其所产生之栏加总具有零值(因为间隙输入方块群组I[G]内之零值与/或位于其相对应间隙滤波器方块群组F[G]内之零值所造成),如此所产生之零值栏通道加总就不会对于最终之栏通道列加总有任何影响,而又允许足够的旋转数-这是因为循环3额外重复了间隙输入方块群组I[G]之数量之次数-如此所有的神经处理单元方块5906都可以看见全部20个通道。因此,因为在图63中,循环3 之重复次数为24而非C=20,每个神经处理单元126会在每一个栏通道列加总,即卷积结果,产生额外之5x4x5=100个栏加总,不存在间隙时并不需要这些额外的栏加总(例如图64至图65与图68至图69之实施例。不过,间隙输入方块群组I[G]与/或间隙滤波器方块群组F[G]之零值会使神经处理单元 126对每一个栏通道列加总中这100个额外的栏加总产生零值。)
[0606] 非架构程序会对权重随机存取存储器124进行寻址,如此即可在输入5802 之元素出现于神经处理单元126之多路复用寄存器208时,将相应之滤波器5804 的合适权重读入寄存器705。非架构程序对于权重随机存取存储器124进行之寻址系配合权重随机存取存储器124内滤波器5804之权重的配置。多种非架构程序搭配权重之配置对于权重随机存取存储器124进行之寻址方式之实施例均可用于本发明,图61与图66系描述两种包含间隙之不同实施例,图64与图68则是描述两种不包含间隙之不同实施例。
[0607] 如图61之范例所示,对于滤波器方块索引0,F[0,0]占据了权重随机存取存储器124之列0-24,间隙滤波器方块群组F[G]占据了列25-124,F[0,19] 占据了列125-149,F[0,
18]占据了列150-174,依此类推,F[0,1]占据了列575-599;对于滤波器方块索引1,F[1,1]占据了列0-24,F[1,0]占据了列25-49,间隙滤波器方块群组F[G]占据了列50-149,F[1,19]占据了列150-174,F[1,18]占据了列 175-199,依此类推,F[1,2]占据了列575-599;由此,依此类推,对于滤波器方块索引19,F[19,19]占据了列0-24,F[19,18]占据了列25-49,F[19,17]占据了列 50-74,依此类推,F[19,00]占据了列475-499,而间隙滤波器方块群组F[G]占据了列500-599;对于滤波器方块索引20,F[20,0]占据了列0-24,F[20,19]占据了列
24-49,F[20,18]占据了列50-74,依此类推,F[20,1]占据了列475-499,而间隙滤波器方块群组F[G]占据了列500-599;对于滤波器方块索引21,F[21,1]占据了列0-24,F[21,00]占据了列24-49,F[21,19]占据了列50-74,依此类推,F[21,2] 占据了列475-499,而间隙滤波器方块群组F[G]占据了列500-599;由此,依此类推,对于滤波器方块索引39,F[39,19]占据了列0-24,F[39,18]占据了列24-49, F[39,17]占据了列50-74,依此类推,F[39,00]占据了列
475-499,而间隙滤波器方块群组F[G]占据了列500-599;对于滤波器方块索引40,F[40,0]占据了列0-24,F[40,19]占据了列24-49,F[40,18]占据了列50-74,依此类推,F[40,1]占据了列 475-499,而间隙滤波器方块群组F[G]占据了列500-599;对于滤波器方块索引 41,F[41,1]占据了列0-24,F[41,00]占据了列24-49,F[41,19]占据了列50-74,依此类推,F[41,
2]占据了列475-499,而间隙滤波器方块群组F[G]占据了列 500-599;如此,依此类推,对于滤波器方块索引49,F[49,09]占据了列0-24, F[49,08]占据了列24-49,F[49,07]占据了列
50-74,依此类推,F[49,10]占据了列 475-499,而间隙滤波器方块群组F[G]占据了列500-
599;滤波器方块索引50至 63之滤波器方块群组内则是无所谓的数值。图61之范例中,滤波器方块群组系储存于权重随机存取存储器124之列0至599,不过,本发明并不限于此,滤波器方块群组F[f,c]亦可储存于其他列中。
[0608] 对权重随机存取存储器124进行寻址以将图61之各种滤波器方块群组之权重读入神经处理单元126之操作在图63处会有更详细的描述。在此可以观察到,一般而言,沿着通道c由上而下检视一给定滤波器方块索引之滤波器方块群组F[f,c]之数值时,栏值的顺序,即c(计入间隙),就会是输入方块群组之信道被神经处理单元方块5906看见的顺序,即c(计入间隙),而神经处理单元方块5906之索引会对应于输入方块群组沿着神经网络单元121旋转时之滤波器方块索引。此外,输入方块5902之旋转与非架构程序依据图63之虚拟程序代码对于权重随机存取存储器124进行之寻址,会导致间隙滤波器方块群组F[G]与间隙输入方块群组I[G]同时出现于神经处理单元126并因而产生零值栏加总。
[0609] 因为零值与任何数值之乘积即为零值,因此只需间隙输入方块群组6103与间隙滤波器方块群组6104之其中之一包含零值即可,而不须二者均包含零值。因此,在滤波器5804之权重为事前确定,而输入5802是由网络之前一个层动态取样或产生之情况下,使间隙滤波器方块群组6104具有零值即可避免需要使间隙输入方块群组6103归零,而有其帮助。不过,其他间隙输入方块群组6103 为零值之实施例亦属于本发明之范畴。
[0610] 现在请参照图62,图中显示一方块图,描述图61之一输入方块群组I[c];一个5x5之滤波器f的纵向部分以及一个通道c;图61之一滤波器方块群组F[f,c];以及图59之一输出方块。
[0611] 图62所示之输入方块群组I[c]包含12个列与16个栏。这16个栏系给予索引0至15,并且对应于输入方块5902之16个字。如图62所示,每个栏索引值是数据随机存取存储器122之栏编号的模数(modulo)B=16。因此,举例来说,假定图62之输入方块群组I[c]对应于图61中位于输入方块索引21之输入方块群组I[01]之复本。位于输入方块索引21之输入方块
5902 就会坐落于数据随机存取存储器122之栏336至351。因此,位于输入方块索引 21之栏
339之输入方块群组I[01]之字系坐落于输入方块群组索引339%16=3。在图62之范例中,输入方块群组I[c]之12个列显示为坐落在数据随机存取存储器122之列0至11,不过,这些列也可以坐落在数据随机存取存储器122 之其他列。这个由12个列与输入方块群组I[c]之栏0至11构成之二维阵列系利用输入5802中对应于通道c之一个12x12纵向部分6215予以填充。此纵向部分6215即为输入5802中位于一给定通道c之12个列与12个栏之元素。
[0612] 此输入方块群组I[c]之栏12至15不会被使用。不过,需要注意的是,在超参数W大于12之网络中,这些栏之部分或全部可能会被使用。举例来说,若是W为14,栏12与13就会被使用。此外,若是网络执行同尺寸卷积运算而非有效卷积运算,填补(padding)元素(例如零)就可能包含在栏12至15以及列 12至15内,不过,其他将填补元素放置于真实输入5802元素之边缘处的不同列与/或栏之处理方式的实施例亦属于本发明之范畴,举例来说,这些填补元素可以相对平均地散布在输入方块群组I[c]之左侧,右侧,上方与下方边缘。
[0613] 此位于给定通道c之滤波器5804,即滤波器f,之5x5纵向部分6209系由位于通道c之滤波器5804之5个列与5个栏5之权重所构成。此5x5纵向部分之25个元素系标示为0至24以说明此滤波器方块群组。进一步来说,由左至右,列0之元素系标示为0至4,列1之元素系标示为5至9,列2之元素系标示为10至14,列3之元素系标示为15至19,列4之元素则是标示为20至24。
[0614] 图62之滤波器方块群组F[f,c]包含25个列与16个栏。这16个栏系给予0至15之索引编号,以对应至滤波器方块5904之16个字。如图62 所示,各个栏索引值是权重随机存取存储器124之栏编号的模数。因此,举例来说,假定图62之滤波器方块群组F[f,c]系对应于图61之滤波器方块群组F[21,17],而坐落于滤波器方块索引21。位于滤波器方块索引21之滤波器方块5904会坐落于权重随机存取存储器124之栏336至351。因此,位于滤波器方块索引21之栏339之滤波器方块群组F[21,17]之字就会坐落于滤波器方块群组索引339%16=3。在图62之范例中,滤波器方块群组F[f,c]之25个列系显示为坐落于权重随机存取存储器
124之列0至24,不过,这些列亦可以坐落于权重随机存取存储器124之其他列。
[0615] 此滤波器方块群组F[f,c]之25个列中之各个列系在滤波器方块索引4至11 包含此5x5纵向部分6209之25个权重中之一相对应权重之P=8个复本。依序由列0至24,此相对应权重系始于列0与栏4,并前进至栏0,随后是列1与栏 4至栏0,依此类推,直到列4与栏4至栏0。因此,列0会包含权重4之8个复本,列1会包含权重3之8个复本,依此类推,列4会包含权重0之8个复本;列5会包含权重9之8个复本,列6会包含权重8之8个复本,依此类推,列9会包含权重5之8个复本;列10会包含权重14之8个复本,列11会包含权重13之8个复本,依此类推,列14会包含权重10之8个复本;列15会包含权重19之8个复本,列16会包含权重18之8个复本,依此类推,列19会包含权重15之8个复本;列20会包含权重24之8个复本,列21会包含权重 23之8个复本,依此类推,列24会包含权重20之8个复本;如此对于滤波器方块群组F[f,c]内之纵向部分6209权重之处理,搭配对于输入方块群组I[c]内之输入5802之元素之处理,会在每次执行内循环4使输入方块5902之输入5802 之元素轮流于各个神经处理单元方块5906时,使5x5纵向部分6209之权重乘上纵向部分6209所覆盖之输入5802之5x5子矩阵之相对应元素。
[0616] 滤波器方块群组F[f,c]之栏0至3与12至15在执行有效卷积之实施例不会被使用。不过,需要注意的是,在超参数W大于12之网络中,这些栏中之某些或全部可能会被使用。举例来说,若是W是14,栏12与13就会包含权重之复本。此外,若是此网络执行同尺寸卷积而非有效卷积,栏0至3与12至15 内可能包含有此权重之复本,以乘上填补(padding)元素。
[0617] 图62之输出方块5908包含一个列与16个栏。这16个栏系给予0至 15之索引编号,并且系对应于输出方块5908之16个字。如图62所示,各个栏索引值即为神经处理单元126编号或是数据随机存取存储器122(或权重随机存取存储器124)之栏编号之模数B=16。因此,举例来说,假定图62之输出方块5908系对应于输出方块索引21。位于输出方块索引21之输出方块5908系坐落于数据随机存取存储器122(或权重随机存取存储器)之栏336 至351。因此,输出方块索引21于栏339之输出方块5908字会坐落于输出方块群组索引339%16=3。此输出方块5908之字显示于栏4至11,作为8个卷积结果或栏通道列加总,表示为R0至R7,分别对应于输出5806之P=8个栏中之栏 0至7。也就是说,在各个神经处理单元方块5906内,神经处理单元4会为了对应于输出方块5908栏4之输出5806栏0,产生卷积结果或栏通道列加总,神经处理单元5会为了对应于输出方块5908栏5之输出5806栏1,产生卷积结果或栏通道列加总,依此类推,神经处理单元11会为了对应于输出方块5908栏 11之输出5806栏7,产生卷积结果或栏通道列加总;神经处理单元0-3与12-15 产生之结果则不被使用。利用前述输入方块群组I[c]与滤波器方块群组F[f,c],若是网络有不同之超参数与/或产生同尺寸卷积而非有效卷积,栏0至3与12至 15即可能会被使用。
[0618] 现在请参照图63,图中显示一虚拟程序代码,描述一非架构程序,在一具有N=1024个神经处理单元126之神经网络单元121上,搭配图61之数据随机存取存储器122与权重随机存取存储器124之配置,对一12x12x20 之输入5802,利用50个5x5之滤波器5804执行卷积运算以产生50个8x8之输出5806,所执行之运算。从许多方面看,图63之虚拟程序代码系类似于图60之虚拟程序代码,不过,图63之虚拟程序代码至少在三个方面不同于图60之虚拟程序代码。首先,图63之虚拟程序代码确定有4 个间隙输入方块群组I[G],如图61所示。第二,图63之虚拟程序代码包含数据随机存取存储器122与权重随机存取存储器124之寻址方式的细节,以确定图61之存储器配置。第三,图63之虚拟程序代码确定超参数与前述数值N。因此,列2中显示Q=8,列6中显示R=5,列9中显示在总数为24次之执行中C=20且gaps之数量为4,列11中显示S=5,并且列 19中显示对准旋转量为11。在此仅针对图63中不同于图60之列进行描述,其他列在图60中已经有充分的说明。
[0619] 在列1,即此虚拟程序代码之开头,数据随机存取存储器122列系初始化为零,而在列4,权重随机存取存储器124列系初始化为零。
[0620] 在列9,循环3之执行次数为24。这是因为,C=20个通道与间隙数量,即 4,之加总为24。这24次执行可使全部的神经处理单元方块5906运作,举例来说,特别是位于索引0至18之神经处理单元方块5906,就可以看见提供给全部 20个通道之输入方块群组I[c]。
[0621] 在列16,权重随机存取存储器124列会以1为单位递增,如此在循环4之下一次执行,权重随机存取存储器124之下一列就会被读入寄存器705,这些被读入的数据报括图62之滤波器方块群组F[f,c]之下一列之权重的8个复本。在循环4之每一次执行中,滤波器方块群组F[f,c]之25列中只有5列会被读入当前信道c之寄存器705。
[0622] 在列18,权重随机存取存储器124列会以20为单位递增,20即为R=5与 S=5之乘积减去S=5。如此会将权重随机存取存储器124列指向对应于下一个通道c之下一个滤波器方块群组F[f,c],藉此在循环3之下一次执行(循环4之下一次操作)中,滤波器方块群组F[f,c]之25列中会有额外5个列被读入下一个信道c之寄存器705。这是因为每一个滤波器方块群组F[f,c]会从前一个滤波器方块群组移位25个权重随机存取存储器124列,而依据循环4对于列16之五次操作,循环4之操作则会使权重随机存取存储器列以5为单位递增。因此,每一次循环4之操作只有滤波器方块群组F[f,c]列中的五分之一(一般而言,即1/Rth)会被读取并使用。剩余之滤波器方块群组F[f,c]列则会在后续循环2之操作中被读取与使用。
[0623] 在列19,多路复用寄存器208会以11为单位进行旋转,11即为B=16与 S=5之差值。如此可使输入方块5902对准下一个邻接的神经处理单元方块5906。这是因为一个神经处理单元方块5906之宽度为N=16,但是,依据列15中循环 4之五次操作,输入方块5902已经旋5个单位。前述旋转11单位之运作可透过一个旋转8单位(ROTATE by 8)指令,一个旋转2单位(ROTATE by 2)指令与一个旋转1单位(ROTATE by 1)指令之结合而达成。将循环4与/或循环3展开(unroll) 执行之实施例亦属于本发明之范畴,如此,列19会执行12单位之旋转,前述旋转12单位之运作可透过一个旋转8单位(ROTATE by 8)指令与一个旋转4单位(ROTATE by 4)指令之结合而达成。
[0624] 在列21,数据随机存取存储器122列会以1为单位递增,如此在循环2之下一次执行,在列13,数据随机存取存储器122之下一列就会被读入多路复用寄存器208,读入之数据报括输入5802之下一列,即如图61所示,在每一个输入方块索引之输入方块群组I[c]之下一个输入方块5902。
[0625] 在列22,权重随机存取存储器124列会以575为单位递减,575即为25与 23之乘积。数值25是R=5与S=5之乘积,此数值即为每一个滤波器方块群组 F[f,c]之列数。进一步来说,每次循环3之执行会使权重随机存取存储器124以 25为单位递增,如此会将循环3之下一次执行指向滤波器方块群组F[f,c]之开头。数值23是C=20与4个间隙之加总减1。这是因为对于每次循环2之操作,循环3会重复执行于全部24个滤波器方块群组。以575为单位之递减运算会使权重随机存取存储器124列指向每一个滤波器方块索引中最上方之滤波器方块群组F[f,c],并指向滤波器方块群组F[f,c]中,当前循环2执行之开始列下方5列处之列。
[0626] 在列25,数据随机存取存储器122列会以4为单位递减,4即为R=5减1。如此,输入5802之第一列在经过循环1此次执行之卷积运算后,会使数据随机存取存储器122列指向输入5802之下一个列,藉此,在循环1之下一次重复执行中,三维滤波器5804会有效向下滑动输入5802之一个列的距离,藉以对输入5802之下一个下方之子矩阵进行卷积运算。举例来说,若是此次循环1之执行会以滤波器5804对于输入5802之列3至7进行卷积运算并将累加器202写入输出方块5908,列25之运作结果会使下一次循环1之执行以滤波器5804对于输入
5802之列4至8进行卷积运算。
[0627] 现在请参照图64A与图64B所示,此二图整体称为图64,图中显示一方块图,描述本发明对一12x12x20之输入,利用50个5x5之滤波器执行卷积运算以产生50个8x8之输出,而不包含间隙输入/滤波器方块群组之另一实施例中,数据随机存取存储器内之输入方块群组之配置以及权重随机存取存储器内之滤波器方块群组之配置。图64之范例系类似于图61之范例,其差异处如下所述。
[0628] 图64之范例系假定一个神经网络单元121具有2048个神经处理单元 126;即N=2048。如此,因为超参数W=12,B就会是16,即N之因子中至少与W一样大的因子;而因为B=
16,G就会是2048/16=128。因此,一共会有128 个神经处理单元方块5906,每个数据随机存取存储器122列会有128个输入方块5902,并且每个权重随机存取存储器124列会有128个滤波器方块。图64所显示之输入方块索引是从零开始标示为0至127,对应至神经处理单元方块索引0至127,如前文图59所述。也就是说,每一个索引为0之输入方块5902与滤波器方块
5904会由索引为0之神经处理单元方块5906所接收;每一个索引为1之输入方块5902与滤波器方块5904会由索引为1之神经处理单元方块5906所接收;依此类推,每一个索引为127之输入方块5902与滤波器方块5904会由索引为127之神经处理单元方块5906所接收。在图64之实施例中,索引0之输入方块包含数据随机存取存储器122之字0-15;索引1 之输入方块包含数据随机存取存储器122之字16-31;依此类推,索引127之输入方块包含数据随机存取存储器122之字2032-2047。类似地,索引0之滤波器方块包含权重随机存取存储器124之字
0-15;索引1之滤波器方块包含数据随机存取存储器124之字16-31;依此类推,索引127之滤波器方块包含权重随机存取存储器124之字2032-2047。
[0629] 图64显示69个输入方块群组。这69个输入方块群组系坐落于输入方块索引0至49以及109至127,这些输入方块群组一般性地表示为I[c],其中c代表这C=20个信道之一信道索引。20个输入方块群组I[0]至I[19]系坐落于输入方块索引0至19。另外,20个输入方块群组I[0]至I[19]系坐落于输入方块索引20至39。更进一步,10个输入方块群组I[0]至I[9]系坐落于输入方块索引40至49。最后,19个输入方块群组I[1]至I[19]系坐落于输入方块索引109 至127。坐落于输入方块索引50至108之输入方块5902则不被使用。在图64之实施例中并不包含有间隙输入方块群组6103。
[0630] 图64显示50x20=1000个滤波器方块群组,一般性地表示为F[f,c],其中,f代表这F个滤波器5804中之一个滤波器,c代表C=20个信道中之一信道索引。在图64之实施例中并不包含间隙滤波器方块群组6104。在图64之范例中,权重随机存取存储器124装载128x20=2560个滤波器方块群组,而各个滤波器方块群组具有25个滤波器方块5904,因此,在图64之范例中总共有64000个滤波器方块5904用以对于12x12x20之输入5802,利用 50个5x5x20之滤波器5804进行卷积运算,以产生50个8x8之输出5806。不过,因为只具有50个滤波器5804,
128-50=78个神经处理单元方块5906所产生之卷积并不会被使用;因此,如图中所示,滤波器方块索引50至127之滤波器方块群组会包含无所谓之数值。如图中所示,滤波器方块群组F[0,0]至F[0,19] 系坐落于滤波器方块索引0,滤波器方块群组F[1,0]至F[1,19]系坐落于滤波器方块索引1,依此类推,滤波器方块群组F[49,0]至F[49,19]系坐落于滤波器方块索引49;而坐落于滤波器方块索引50至127之滤波器方块群组则为无所谓数值。在一滤波器方块索引内之各个滤波器方块群组的纵向顺序系相同于图61所示扣除间隙滤波器方块群组后之顺序;因为不存在四个间隙滤波器方块群组在图61中所占据之100个列,因此,只有列0至499会被使用。
[0631] 如前述,此巢状循环结构有利于利用神经网络单元121之旋转器多路复用器208结构来旋转关联于输入5802之所有C个通道之输入方快5902,藉此,G 个神经处理单元方块5906中,关联于F个滤波器5804之F个神经处理单元方块5906中之每一个神经处理单元方块
5906,就可以看见输入5802之全部C个通道,以利用相对应之滤波器5804进行卷积运算。如前述,输入方块群组I[1] 至I[19]系坐落于输入方块索引109至127,如此,除了输入方块群组I[0](即通道0之输入5802),位于索引0之神经处理单元方块5906亦能看见输入方块群组I[1]至I[19],因为这些输入方块群组会旋转至神经处理单元方块0;类似地,输入方块群组I[2]至I[19]系坐落于输入方块索引110至127,如此,除了输入方块群组I[0]与I[1],位于索引1之神经处理单元方块5906亦能看见输入方块群组I[2]至I[19],因为这些输入方块群组会旋转至神经处理单元方块1;依此类推,输入方块群组I[19]系坐落于输入方块索引
127,如此,除了输入方块群组I[0] 至I[18],位于索引18之神经处理单元方块5906亦能看见输入方块群组I[19],因为这个输入方块群组会旋转至神经处理单元方块18。因此,方块的数量,即 G=128,无法整除于通道数量,即C=20,之实际情况,并不需要产生间隙输入方块群组I[G]或是需要非架构程序之循环3重复超过对应于通道数量20之次数,这是因为超参数使这些额外的输入方块群组I[1]至I[19]可以坐落于输入方块索引109至127。值得注意的是,虽然在图64之范例中,F=50,C=20,N=2048 且W=12,而计算书B=16且G=128,其他神经网络之范例亦可能提供足够的空间供额外的输入方块群组放置于较大值之输入方块索引,而不需包含间隙输入/ 滤波器方块群组,也不需要额外重复执行循环3。举例来说,对于一个F=40, C=20,N=1024且W=12之神经网络单元121,因为输入方块群组I[1]至I[19]可以坐落于输入方块索引45至63,因而不需要间隙输入/滤波器方块群组。换言之,这并不能由图64之范例相较于图61之范例具有较大数量之神经处理单元126(N)的实际情况推论出,为避免使用间隙输入/滤波器方块群组需要较大数量之神经处理单元126;而是必须考虑N以及神经网络之相关联之超参数。
[0632] 权重随机存取存储器124将图64之各种滤波器方块群组之权重读入神经处理单元126之寻址方式在图65处会有更详细的说明。由此可以观察到,在通道c中由上而下检视一给定滤波器方块索引之滤波器方块群组F[f,c] 的数值时,栏数值c的顺序就会是输入方块群组之通道c被对应于此输入方块索引之神经处理单元方块5906在输入方块群组沿着神经网络单元121旋转时看见之顺序。
[0633] 现在请参照图65,图中显示一虚拟程序代码,描述一非架构程序,在一具有N=2048个神经处理单元126之神经网络单元121上,搭配第六十四图之数据随机存取存储器
122与权重随机存取存储器124之配置,对一12x12x20 之输入方块,5802利用50个5x5之滤波器5804执行卷积运算以产生50个8x8 之输出方块5806,所执行之运算。图65之虚拟程序代码在许多方面类似于图63之虚拟程序代码,不过,不同于图63之虚拟程序代码,如图64所示,图65之虚拟程序代码系假定不具有间隙输入/滤波器方块群组。因此,在列9中,C=20次重复(相较之下,图63之列9中则是24)。此外,在列22中,权重随机存取存储器列系以475为单位递减,475即为25与19之乘积(相较之下,图63则是575)。如同图63,数值 25是R=5与S=5之乘积,此数值即为各个滤波器方块群组F[f,c]之列数。数值 19则是C=20减1。这是因为在循环2之每一次操作中,循环3会重复执行于全部20个滤波器方块群组。以475为单位递减会使权重随机存取存储器124列指向各个滤波器方块索引内最上方之滤波器方块群组F[f,c],并指向滤波器方块群组F[f,c]中,循环2当前执行之开始列下方5列处之列。
[0634] 现在请参照图66A与图66B,整体称为图66,图中显示一方块图,描述本发明对一12x12x20之输入5802,利用50个5x5之滤波器5804 执行卷积运算以产生50个8x8之输出
5806之另一实施例中,权重随机存取存储器124内之滤波器方块5904群组之配置6602。图66之实施例系使用图61之输入方块群组之配置。图66之范例在许多方面系类似于图61之范例,其差异如下所述。基本上,图66之实施例与图61之实施例的主要差异点在于,执行图63与图67虚拟程序代码之非架构程序系以不同方式对权重随机存取存储器124进行编码。
[0635] 进一步来说,在图66之实施例中,各个滤波器群组F[f,c,r]系由其滤波器f,其通道c与滤波器5804之R个列中之列r所决定,并具有S=5个滤波器方块5904(位于权重随机存取存储器124中5个相对应列);不过,在图61之实施例中,各个滤波器群组F[f,c]则是由其滤波器f与其通道c所决定,并具有RxS=5x5=25个滤波器方块群组5904(位于权重随机存取存储器124中 25个相对应列)。相同的滤波器方块5904会分别坐落在图61之配置6102 与图66之配置6602;不过,这些滤波器方块5904系设置于权重随机存取存储器之不同地址,或列。换句话说,相同的滤波器方块5904会坐落在各个滤波器方块索引内;不过,这些滤波器方块5904系以不同顺序沿纵向排列,而图63与图67之虚拟程序代码系以不同方式对其寻址。因此,图61与图66之滤波器方块群组都会在权重随机存取存储器124内占据600个列。如同图61,图66亦将间隙滤波器方块系表示为F[G],不过只具有 5个滤波器方块5904(位于5个相对应权重随机存取存储器124列)。
[0636] 图66显示64x120=7680个滤波器方块群组,一般性地表示为F[f,c,r],其中,f代表F个滤波器5804中之一滤波器,c代表C=20个信道中之一信道索引,并且,r代表滤波器5804之一列,或是表示为F[G],即代表间隙滤波器方块群组。图66 (与图68)之内容中所描述之滤波器方块群组F[f,c,r] 是由S个滤波器方块5904构成之群组,这些滤波器方块5904位于权重随机存取存储器124之S个不同列,并且全部都位于相同之输入/滤波器/神经处理单元方块索引。因此,滤波器f之全部滤波器方块群组之所有滤波器方块5904都会提供至同一个神经处理单元方块5906。此外,每一个滤波器方块群组F[f,c,r]会对于滤波器5804,即滤波器f,之一通道c,装载RxS纵向部分之一列之权重 (例如图62之纵向部分6209之一列),或是在间隙滤波器方块群组F[G] 之情况下,装载零值。进一步来说,滤波器方块群组F[f,c,r]之每一个滤波器方块5904会装载滤波器5804,即滤波器f,之通道c之RxS纵向部分6209之列r 之一不同权重之P个复本。
[0637] 在图66之内容中,滤波器方块群组F[f,c,r]是一个由位于5个不同权重随机存取存储器124列之5个滤波器方块5904所构成之群组。(在图66之实施例中,这5个列在权重随机存取存储器124内系彼此相邻,即位于列 0-4,5-9;不过,这5个列彼此不相邻,而是依据这些列调整非架构程序,使其对于权重随机存取存储器124内具有滤波器方块5904之列予以寻址之实施例,亦属于本发明之范畴。)因此,图66中每一个滤波器方块群组F[f,c,r]之每一个滤波器方块具有16个字x每一个滤波器方块群组具有5个滤波器方块(位于5个权重随机存取存储器124列)=80个权重随机存取存储器124之字。如同图61,每个滤波器方块5904系装载滤波器5804,即滤波器f,之一相对应栏s,一相对应列r与一通道c之权重之P=8个复本,滤波器方块5904内之剩余B-P=16-8=8个字则不被使用(在一实施例中,则为零值)。进一步来说,每个滤波器方块群组F[f,c,r]会为滤波器5804,即滤波器f,之一通道c,装载一个5x5纵向部分之一列r之权重,或是在间隙滤波器方块群组之情况下,装载零值。进一步来说,滤波器方块群组F[f,c,r]之5个滤波器方块5904中之每一个滤波器方块5904系装载滤波器5804,即滤波器f,之一通道c之5x5纵向部分6209 之列r内之一个不同权重之8个复本。也就是说,每个滤波器方块群组F[f,c,r] 是图62所示之5组5个相邻列之其中之一。举例来说,滤波器方块群组 F[f,c,0]系对应至图62之滤波器方块群组F[f,c]之列0至
4;滤波器方块群组F[f,c,1]系对应至列5至9;滤波器方块群组F[f,c,2]系对应至列10至
14;滤波器方块群组F[f,c,3]系对应至列15至19;滤波器方块群组F[f,c,4]系对应至列 20至24。不过,如图66所示,他们并非坐落于权重随机存取存储器124 中25个彼此相邻之列,而是坐落在5个各自独立之不同群组内,而各个群组是由5个相邻列构成。进一步来说,对于R=5个列中一给定列r,此5列滤波器方块群组F[f,c,r]系彼此相邻地聚集在一起,而对此给定列而言,C=20个通道c则是彼此交错。此外,此滤波器方块群组F[f,c,r]对于一给定列之信道顺序系相同于图61。
[0638] 在图66之范例中,权重随机存取存储器124装载64x120=7680个滤波器方块群组,而各个滤波器方块群组具有5个滤波器方块5904,因此,一共有38400个滤波器方块在图66之范例中,对12x12x12之输入5802,利用 50个5x5x20之滤波器5804进行卷积运算,以产生50个8x8之输出5806。不过,因为只具有50个滤波器5804,64-50=14个神经处理单元方块
5906产生之卷积将不被使用;因此,如图中所示,滤波器方块索引50至63之滤波器方块群组系包含无所谓之数值。如图中所示,坐落于滤波器方块索引0之滤波器方块群组包括,滤波器方块群组F[0,0,0]至F[0,19,0]与四个间隙滤波器方块群组 F[G],滤波器方块群组F[0,
0,1]至F[0,19,1]与四个间隙滤波器方块群组F[G],依此类推直到滤波器方块群组F[0,0,
4]至F[0,19,4]与四个间隙滤波器方块群组F[G];坐落于滤波器方块索引1之滤波器方块群组包括,滤波器方块群组F[1,0,0]至 F[1,19,0]与四个间隙滤波器方块群组F[G],滤波器方块群组F[1,0,1]至F[1,19,1] 与四个间隙滤波器方块群组F[G],依此类推直到滤波器方块群组F[1,0,4]至 F[1,19,4]与四个间隙滤波器方块群组F[G];如此,依此类推,坐落于滤波器方块索引49之滤波器方块群组包括,滤波器方块群组F[49,0,0]至F[49,19,0]与四个间隙滤波器方块群组F[G],滤波器方块群组F[49,0,1]至F[49,19,1]与四个间隙滤波器方块群组F[G],依此类推直到滤波器方块群组F[49,0,4]至F[49,19,4]与四个间隙滤波器方块群组F[G];坐落于滤波器方块索引50至63之滤波器方块群组则为无所谓数值。
[0639] 透过设置相配合之间隙滤波器方块群组F[f,c,r],可确保利用这些间隙滤波器方块群组产生之栏加总具有零值(这是因为间隙滤波器方块群组F[G]内之零值与/或其相对应间隙输入方块群组I[G]内之零值),如此,所产生之零值栏通道加总就不会影响最终之栏通道列加总,而容许进行足够次数之旋转-这是由间隙输入方块群组I[G]额外重复执行循环3之数量所造成-使所有的神经处理单元方块5906都能看见全部20个通道。
[0640] 如图66之范例所示,对于滤波器方块索引0而言:F[0,0,0]占据权重随机存取存储器124之列0-4,四个间隙滤波器方块群组F[G]占据列5-24, F[0,19,0]占据列25-29,F[0,18,0]占据列30-34,依此类推直到F[0,1,0]占据列 115-119;F[0,0,1]占据列120-124,四个间隙滤波器方块群组F[G]占据列125-144, F[0,19,1]占据列145-149,F[0,18,1]占据列
150-154,依此类推直到F[0,1,1]占据列235-239;F[0,0,2]占据列240-244,四个间隙滤波器方块群组F[G]占据列 245-264,F[0,19,2]占据列265-269,F[0,18,2]占据列270-274,依此类推直到F[0,1,2] 占据列355-359;F[0,0,3]占据列360-364,四个间隙滤波器方块群组F[G]占据列 365-384,F[0,19,3]占据列385-389,F[0,18,3]占据列390-394,依此类推直到F[0,1,3] 占据列475-479;F[0,0,4]占据列480-484,四个间隙滤波器方块群组F[G]占据列 
485-504,F[0,19,4]占据列505-509,F[0,18,4]占据列510-514,依此类推直到F[0,1,4] 占据列595-599。对于滤波器方块索引1而言:F[1,1,0]占据列0-4,F[1,0,0]占据列5-9,四个间隙滤波器方块群组F[G]占据列10-29,F[1,19,0]占据列30-34,依此类推直到F[1,2,0]占据列115-119;F[1,1,1]占据列120-124,F[1,0,1]占据列 125-129,四个间隙滤波器方块群组F[G]占据列130-149,F[1,19,1]占据列150-154,依此类推直到F[1,2,1]占据列235-239;
F[1,1,2]占据列240-244,F[1,0,2]占据列 245-249,四个间隙滤波器方块群组F[G]占据列
250-269,F[1,19,2]占据列270-274,依此类推直到F[1,2,2]占据列355-359;F[1,1,3]占据列360-364,F[1,0,3]占据列 365-369,四个间隙滤波器方块群组F[G]占据列370-389,F[1,
19,3]占据列390-394,依此类推直到F[1,2,3]占据列475-479;F[1,1,4]占据列480-484,F[1,0,4]占据列 485-489,四个间隙滤波器方块群组F[G]占据列490-509,F[1,19,4]占据列
510-514,依此类推直到F[1,2,4]占据列595-599。此模式持续到滤波器方块索引19: F[19,
19,0]占据列0-4,F[19,18,0]占据列5-9,依此类推,F[19,0,0]占据列95-99,四个间隙滤波器方块群组F[G]则是占据列100-119;F[19,19,1]占据列120-124, F[19,18,1]占据列125-
129,依此类推,F[19,0,1]占据列215-219,四个间隙滤波器方块群组F[G]则是占据列220-
239;F[19,19,2]占据列240-244,F[19,18,2]占据列245-249,依此类推,F[19,0,2]占据列
335-339,四个间隙滤波器方块群组F[G] 则是占据列340-359;F[19,19,3]占据列360-364,F[19,18,3]占据列365-369,依此类推,F[19,0,3]占据列475-479,四个间隙滤波器方块群组F[G]则是占据列 460-479;F[19,19,4]占据列480-484,F[19,18,4]占据列485-489,依此类推,F[19,0,4] 占据列595-599,四个间隙滤波器方块群组F[G]则是占据列580-599。F[20,0,0] 占据列0-4,F[20,19,0]占据列5-9,依此类推,F[20,1,0]占据列95-99,四个间隙滤波器方块群组F[G]则是占据列100-119;F[20,0,1]占据列120-124,F[20,19,1] 占据列
125-129,依此类推,F[20,1,1]占据列215-219,四个间隙滤波器方块群组 F[G]则是占据列
220-239;F[20,0,2]占据列240-244,F[20,19,2]占据列245-249,依此类推,F[20,1,2]占据列335-339,四个间隙滤波器方块群组F[G]则是占据列 340-359;F[20,0,3]占据列360-
364,F[20,19,3]占据列365-369,依此类推,F[20,1,3] 占据列455-459,四个间隙滤波器方块群组F[G]则是占据列460-479;F[20,0,4] 占据列480-484,F[20,19,4]占据列485-489,依此类推,F[20,1,4]占据列595-599,四个间隙滤波器方块群组F[G]则是占据列580-599。
此模式持续到滤波器方块索引49:F[49,9,0]占据列0-4,F[49,8,0]占据列5-9,依此类推,F[49,10,0]占据列 95-99,四个间隙滤波器方块群组F[G]则是占据列100-119;F[49,9,1]占据列 120-124,F[49,8,1]占据列125-129,依此类推,F[49,10,1]占据215-219,四个间隙滤波器方块群组F[G]则是占据列220-239;F[49,9,2]占据列240-244,F[49,8,2] 占据列245-
249,依此类推,F[49,10,2]占据335-339,四个间隙滤波器方块群组 F[G]则是占据列340-
359;F[49,9,3]占据列360-364,F[49,8,3]占据列365-369,依此类推,F[49,10,3]占据455-
459,四个间隙滤波器方块群组F[G]则是占据列 460-479;F[49,9,4]占据列480-484,F[49,
8,4]占据列485-489,依此类推,F[49,10,4] 占据595-599,四个间隙滤波器方块群组F[G]则是占据列580-599。滤波器方块索引50至63之滤波器方块群组内之数值为无所谓数值。图
66之范例显示储存在权重随机存取存储器124列0至599之滤波器方块群组,不过,滤波器方块群组F[f,c,r]储存在其他列之实施例亦属于本发明之范畴。
[0641] 对于权重随机存取存储器124进行寻址以将图66之多种滤波器方块群组之权重读入神经处理单元126之寻址方式,在后续对应于图67处会有更详细的说明。在此可以观察到,一般而言,沿着通道c由上而下检视一给定滤波器方块索引之滤波器方块群组F[f,c,r]之数值时,栏值的顺序,即c(计入间隙),就会是输入方块群组之通道,即c(计入间隙),被神经处理单元方块 5906看见的顺序,而此神经处理单元方块5906之索引会对应于输入方块群组沿着神经网络单元121旋转时之滤波器方块索引。此外,前述由非架构程序依据图67之虚拟程序代码执行之输入方块5902之旋转运作与权重随机存取存储器之寻址动作,会使间隙滤波器方块群组F[G]与间隙输入方块群组I[G]同时呈现于神经处理单元126内而产生零值栏加总。
[0642] 现在请参照图67,图中显示一虚拟程序代码,描述一非架构程序,在一具有N=1024个神经处理单元126之神经网络单元121上,搭配图61之数据随机存取存储器122之配置6101与图66之权重随机存取存储器 124之配置6602,对一12x12x20之输入方块5802,利用50个5x5之滤波器5804 执行卷积运算以产生50个8x8之输出方块5806,所执行之运算。图
67之虚拟程序代码在许多方面系类似于图65之虚拟程序代码,不过,如图61与图66所示,图
67之虚拟程序代码假定间隙输入/滤波器方块群组系用不同之权重随机存取存储器124寻址方式以搭配图66之配置6602。因此,在列9,C=20+4个间隙=24次重复(相较之下,图65之列9则为 20)。此外,图67中不存在列18与列20,这是因为滤波器方块5904系配置于图66之滤波器方块群组F[f,c,r]内,如此,列16使权重随机存取存储器124列以1为单位递增之处理方式已足以确定正确列之地址,因而可以缓解使权重随机存取存储器124列递增(如图65之列18)以及使权重随机存取存储器列124递减(例如图65之列22)之需求。
[0643] 现在请参照图68A与图68B,整体称为图68,图中显示一方块图,描述本发明对一12x12x20之输入5802,利用50个5x5之滤波器5804 执行卷积运算以产生50个8x8之输出
5806,而不包含间隙输入/滤波器方块群组之另一实施例中,权重随机存取存储器124内之滤波器方块群组5904之配置 6802。图68之范例在许多方面系类似于图64之范例,其差异点如下所述。基本上,图68之实施例与图64之实施例之主要差异点在于图69与图65之非架构程序系以不同方式对权重随机存取存储器 124进行寻址。
[0644] 如同图64之范例,图68之范例假定一个具有2048个神经处理单元126之神经网络单元122,即N=2048。如此,因为超参数W=12,B就会是16,也就是N之因子中,至少与W一样大之因子中之最小者;并且,因为 B=16,G=2048/16=128。因此,一共有128个神经处理单元方块5906,每个数据随机存取存储器122列具有128个输入方块5902,并且,每个权重随机存取存储器124列具有128个滤波器方块5904。图68所显示之滤波器方块索引是从零开始标示为0至127,对应至神经处理单元方块索引0至127,如前文图59所述。也就是说,各个索引为0之输入方块5902与滤波器方块5904 会由索引为0之神经处理单元方块5906接收;各个索引为1之输入方块5902 与滤波器方块5904会由索引为1之神经处理单元方块5906接收;依此类推,各个索引为127之输入方块5902与滤波器方块5904则会由索引为127之神经处理单元方块5906接收。在图68之实施例中,位于索引0之输入方块包括数据随机存取存储器
122之字0-15;位于索引1之输入方块包括数据随机存取存储器122之字16-31;依此类推,位于索引127之输入方块包括数据随机存取存储器122之字2032-2047。类似地,位于索引0之滤波器方块包括权重随机存取存储器124之字0-15;位于索引1之滤波器方块包括权重随机存取存储器 124之字16-31;依此类推,位于索引127之滤波器方块包括权重随机存取存储器124之字2032-2047。
[0645] 如同图66之实施例,在图68之实施例中,每个滤波器方块 F[f,c,r]是由其滤波器f,通道c,与滤波器5804之R个列中之列r所决定,并且,每个滤波器方块F[f,c,r]具有S=5个滤波器方块5904(位于权重随机存取存储器 124之5个对应列)。相同的滤波器方块5904会坐落在图64之配置6402 与图68之配置6802;不过,这些滤波器方块5904会设置于权重随机存取存储器124之不同地址或列。换句话说,相同的滤波器方块5904会坐落在各个滤波器方块索引内;不过,这些滤波器方块5904系以不同顺序沿纵向排列,而图65与图69之虚拟程序代码系以不同方式对其寻址。因此,图64图与图68之滤波器方块群组都会在权重随机存取存储器124内占据500个列。如同图64之配置,图68之配置中不具有间隙滤波器方块。因此,图69之虚拟程序代码对于权重随机存取存储器124之配置6802的寻址方式系类似于图67之虚拟程序代码对于权重随机存取存储器124之配置6602的寻址方式,不过,图69之虚拟程序代码系经调整而将不具有间隙滤波器/输入方块群组之情形纳入考虑。
[0646] 如同图66,在图68之内容中,滤波器方块群组F[f,c,r]是一个由5个滤波器方块5904构成之群组,而这些滤波器方块系位于权重随机存取存储器124之5个不同列;每个滤波器方块群组F[f,c,r]具有80个权重随机存取存储器124之字,即每个滤波器方块具有16个字x每个滤波器方块群组具有5个滤波器方块5904(位于5个权重随机存取存储器124列)=80;每个滤波器方块 5904系装载滤波器5804,即滤波器f,之一相对应栏s,一相对应列r与一通道 c之权重之P=8个复本,滤波器方块5904内之剩余B-P=16-8=8个字则不被使用 (在一实施例中,则为零值);每个滤波器方块群组F[f,c,r]会为滤波器5804,即滤波器f,之一通道c,装载一个5x5纵向部分之一列r之权重,或是在间隙滤波器方块群组之情况下,装载零值。
[0647] 在图68之范例中,权重随机存取存储器124装载128x100=12800个滤波器方块群组,而各个滤波器方块群组具有5个滤波器方块5904,因此,在图68之范例中一共有64000个滤波器方块5904,用以对于12x12x20之输入5802,利用50个5x5x20之滤波器5804进行卷积运算,以产生50个8x8之输出5806。不过,因为只具有50个滤波器5804,128-50=78个神经处理单元5906 产生之卷积不被使用;因此,如图中所示,滤波器方块索引50至127之滤波器方块群组会包含无所谓数值。如图中所示,坐落于滤波器方块索引0之滤波器方块群组为滤波器方块群组F[0,0,0]至F[0,19,0],滤波器方块群组F[0,0,1]至 F[0,19,1],依此类推直到滤波器方块群组F[0,0,4]至F[0,19,4];坐落于滤波器方块索引1之滤波器方块群组为滤波器方块群组F[1,0,0]至F[1,19,0],滤波器方块群组F[1,0,1]至F[1,19,1],依此类推直到滤波器方块群组F[1,0,4]至F[1,19,4];依此类推,坐落于滤波器方块索引49之滤波器方块群组为滤波器方块群组F[49,0,0] 至F[49,19,0],滤波器方块群组F[49,0,1]至F[49,19,1],依此类推直到滤波器方块群组F[49,0,4]至F[49,19,4];图中并不具有间隙滤波器方块群组F[G];并且,坐落于滤波器方块索引50至127之滤波器方块群组为无所谓数值。
[0648] 在图68之范例中,就滤波器方块索引来看,并不存在图66之间隙滤波器方块群组,图66中位于间隙滤波器方块群组下方之各个滤波器方块群组都会上移占据因为不存在间隙滤波器方块群组所空出来的权重随机存取存储器124列。因此,如同图64不具有间隙输入/滤波器方块群组之实施例,图68之滤波器方块群组亦占据权重随机存取存储器124之500 个列。在图68之范例中,滤波器方块群组系储存于权重随机存取存储器 124之列0至
499,不过,滤波器方块群组F[f,c,r]储存于其他列之实施例亦属于本发明之范畴。对权重随机存取存储器124进行寻址以将图68中各种不同之滤波器方块群组之权重读入神经处理单元126之寻址方式,在图69 处会有更详细的说明。
[0649] 现在请参照图69,图中显示一虚拟程序代码,描述一非架构程序,在一具有N=2048个神经处理单元126之神经网络单元121上,搭配图64之数据随机存取存储器122之配置6401与图68之权重随机存取存储器 124之配置6802,对一12x12x20之输入5802,利用50个5x5x20之滤波器5804 执行卷积运算以产生50个8x8之输出5806,所执行之运算。图69之虚拟程序代码在许多方面系类似于图67之虚拟程序代码,不过,相较于图67之虚拟程序代码设定有如图61与图66所示之间隙输入/滤波器方块群组,图69之虚拟程序代码则不具有间隙输入/滤波器方块群组。因此,在列9,C=20次重复(相较之下,图67之列9则为24)。
[0650] 较佳地,架构程序会将权重加载权重随机存取存储器124(例如,将权重逻辑性分割为滤波器方块5904)并将输入数据加载数据随机存取存储器122(例如,将数据逻辑性分割为输入方块5902)。架构程序可采用类似于前述之方式,如对应于图25之方式,将权重与数据加载随机存取存储器122/124,不过,在图25中,数据随机存取存储器122系装载权重而权重随机存取存储器 124系装载输入数据与结果数据,相较之下,在此执行三维卷积运算之实施例中,数据随机存取存储器122则是装载输入与输出数据,而权重随机存取存储器124 则是装载权重。
[0651] 由此可以观察到,虽然输入方块5902之输入数据呈现为动态,滤波器方块 5904之权重仍然呈现为静态。也就是说,每次神经网络执行时,输入数据就会改变,例如输入一个新的影像或是一组新的影像并由神经网络单元121执行。相较之下,权重则是在发展(例如训练)神经网络的过程中产生,并且在神经网络之每一次执行中都维持不变。因此,设置滤波器方块5904内之权重所需之成本只需耗费一次,并且可以事先脱机完成。也因此,将权重设置滤波器方块 5904内,可能有利于缩短非架构程序完成对于输入利用滤波器执行卷积以产生输出之操作所需耗费的时间。此外,图64至65与图68至69之非架构程序之实施例(即不具有间隙)需要执行之旋转运作与乘法累加运算之数量较少而只在较少之时钟周期内执行,这些实施例可能会需要额外时间来适当地将输入数据设置于输入方块5902内(例如透过架构程序),这些实施例对于输入利用滤波器执行卷积以产生输出所花费之全部时间可能会少于利用间隙之实施例。至于何种方式速度较快,则会受到多种因素影响,这些因素包括间隙尺寸,神经网络之超参数,架构处理器之可用度与存储器子系统特性。
[0652] 由此可以观察到,当C(通道数量)是G(方块数量)之一因子,就不需要间隙输入/滤波器方块群组(间隙)。此外,当C不是G之一因子,若是G减去 F之差值大于或等于C减去1而使输入5802在信道0以外之所有信道之复本都可被放置于数据随机存取存储器122列末端处之未使用方块,就不需要间隙。
[0653] 由此可观察到关联于动态超参数以及对应于数据随机存取存储器122之一列中所包含之输入5802之C个通道之复本数量,即包含于一个数据随机存取存储器122列中对应于C个信道中之各个信道之输入方块5902之复本数量,之静态神经网络单元121硬件配置之各种不同情况。举例来说,在图61与图64之实施例中,数据随机存取存储器122之一列中所包含之输入5802之C个通道之复本数量为三。由此可以观察到所需之间隙数量以及伴随循环3执行次数之效应,即如前述对应于虚拟程序代码之信道执行循环。
[0654] 在第一种情况下,C少于G的一半,并且F少于G。数据随机存取存储器 122之一列中所包含之输入5802之C个通道之复本数量是G之下取整(floor)函数除以C。因此,在图61与图64之范例中,C=20且G=64且F=50,满足第一种情况之条件,而G之下取整函数除以C=floor(64/20)=3,即为数据随机存取存储器122之一列中所包含之输入5802之C个通道之复本数量。间隙之数量为G模除C,以图61与图66为例,即64%20=4。此外,未使用之神经处理单元方块5906数量为G减F,因为没有滤波器来使用这些神经处理单元方块,以图61与图66为例,即64-50=14。
[0655] 在第二种情况下,C介于G的一半与G之间,F少于G。数据随机存取存储器122之一列中仅包含之输入5802之C个通道之单一个复本。类似于第一种情况,在第二种情况中,间隙之数量为G模除C。
[0656] 在第三种情况下,C大于G且F少于G。对于输入5802之H个列中之每个列而言,C个通道系分割至N个数据随机存取存储器122列,其中N大于等于 2。也就是说,对于各个横向二维输入部分(即输入5802之H个列中一给定列之全部C个信道),数据随机存取存储器122之N个列被用于装载此给定列之C个通道之输入方块5902,并且,这C个通道向上分配给N个数据随机存取存储器列。这C个信道分割散布之数据随机存取存储器122之列数,即N,是C 之上取整(ceiling)函数除以G。举例来说,假定C=200且G=64;对于关联于输入5802之H个列中一给定列之一给定横向二维部分之全部C=200个通道,会有N=ceiling(200/64)=4个不同之数据随机存取存储器122列用于装载输入方块 5902;对于关联于输入5802之全部H个列中所有列之全部C=200个信道,数据随机存取存储器122总共会有HxN个列用于装载输入方块5902。相较之下,图61与图64之范例只需要单一个数据随机存取存储器122列,因为 C=20小于G=64。对于前面数起之N-1个列中之每一列,不会存在间隙,并且全部的神经处理单元方块5906都会被用于产生卷积结果。不过,对于数据随机存取存储器122之N个列中之最后列,若是C并非G之一因子,装载于最后一个数据随机存取存储器122列之剩余信道数量就会少于G,在此情况下,此N 个列中之最后列会以如前述第一种情况与第二种情况之方式处理。在第三种情况中,图60之虚拟程序代码系经调整加入一第五循环于循环2内。也就是说,第五循环包含循环3以及列8中,先于循环3,将数据随机存取存储器122 列读入多路复用寄存器208之操作。此第五循环会重复N次,如此,对于N个数据随机存取存储器122列中之各个列而言,该列会被读入多路复用寄存器208 并执行循环3之一次操作。对于此第五循环之前面N-1次重复执行,循环3之执行计数为G;对于此第五循环之N次重复执行中之最后一次,循环3之执行计数为C模除G,如果有就再加上间隙数。因此,完成一次第五循环之操作后 (如,对应于循环2之每一次重复执行),每一个神经处理单元126之累加器 202内就会累加另一个栏通道加总。换句话说,循环2之每一次重复系隐含着一个横向之二维输入部分(即输入5802之H个列中一给定列之全部C个通道)与一个横向之二维滤波器部分(即滤波器5804之R个列中一给定列之全部C个通道)。对于全部C个信道中之各个信道而言,栏信道加总即为对于此隐含之横向二维输入部分中此通道之部分以及此隐含之横向二维滤波器部分中此通道之部分进行卷积运算以产生一栏加总并连续地累加全部C个通道之栏加总以产生栏通道加总之执行结果。
[0657] 在第四个情况中,F大于G。这F个滤波器分割成N-1个由G个滤波器构成之群组,以及最后第N个,由F模除G个滤波器构成之群组,这些由G(或F%G)个滤波器构成之群组系依据通道数量于前述三种情况选择其一予以执行。在第一实施例中,对于滤波器之N个群组中之一给定群组,所有的Q个输入列 (即所有的Q个栏通道列加总或卷积结果)系在移动至下一个滤波器群组前,经计算并写入数据随机存取存储器122。也就是说,虚拟程序代码之第一次操作是针对此N个群组中之第一个群组,随后虚拟程序代码之第二次操作是针对此 N个群组中之第二个群组,依此类推,直到虚拟程序代码完成对于全部F个滤波器之N个群组之操作。在第二实施例中,对于所有的N个滤波器群组,Q个输出列之其中之一系在移动至下一个滤波器群组前,经计算并写入数据随机存取存储器122。也就是说,循环1之第一次操作会对于全部F个滤波器之N个群组中之每一个群组,产生这Q个输出列中之第一个输出列,接下来,循环1 之第二次操作会对于全部F个滤波器之N个群组中之每一个群组,产生这Q个输出列中之第二个输出列,依此类推,直到循环1之操作对于全部F个滤波器之N个群组中之每一个群组,产生所有的Q个输出列。此二个实施例何者为优,会受到许多因素影响,包括可由非架构程序与/或架构程序取用之数据随机存取存储器122与权重随机存取存储器124量。不过,较佳地,如前所述,个别的卷积栏通道列加总值会全部产生于神经处理单元126累加器202内,而不在数据随机存取存储器122(或权重随机存取存储器124)内写入任何中间部分加总值然后再读回这些数值。如此处理可以避免降低卷积栏通道列加总运算之精确度。
此外,由于对于数据随机存取存储器122与权重随机存取存储器124之存取动作会耗费时间,如此处理亦有助于节省时间。
[0658] 由此可以观察到,在此描述以栏信道列之顺序进行卷积并将不同之输入方块5902沿着神经处理单元方块5906利用多路复用寄存器208旋转器进行旋转之实施例,系优于传统以栏列信道之顺序进行而不具有多路复用寄存器208旋转器之卷积。此实施例并隐含有减少对存储器进行存取以读取输入5802数据之次数的优点。请参照图60之虚拟程序代码,对于数据随机存取存储器122 单一次存取动作所取得之输入5802数据,会执行SxC个乘法累加操作,举例来说,在图64之实施例中即5x20=100个乘法累加操作。此实施例并隐含有减少储存输入5802数据之存储器数量之优点,这是因为传统方式需要复制输入 5802数据配合以栏列信道顺序进行之卷积运算。此传统方法所需对于输入5802 数据之复制动作会需要由架构程序取得额外带宽并会使用更多之存储器带宽。
[0659] 随然在前述实施例中,神经网络单元121具有之权重随机存取存储器124 与数据随机存取存储器122为各自独立之存储器,不过,本发明并不限于此,权重与输入数据储存于神经网络单元121之单一个存储器之实施例亦属于本发明之范畴。相较于具有独立之权重随机存取存储器124与数据随机存取存储器122之实施例,能够对二个存储器并行进行存取动作,此单一个存储器之实施例会产生对于存储器之争夺情形并且须要对此存储器之存取顺序进行排序,而可能导致效能降低,不过,此实施例可能较具有成本效益。此外,为了说明本发明,前述实施例中之神经网络具有特定之超参阵列合(例如,H=W=12,C=20, F=50,R=S=5,P=Q=8,有效卷积)并且系执行于一特定神经网络单元121配置 (例如,1024或2048个神经处理单元126),不过,本发明并不限于此,其他具有不同超参阵列合与不同神经网络单元121硬件配置之实施例亦属于本发明之范畴,只要这些硬件配置可以有效率地执行神经处理单元/输入/滤波器方块与多路复用寄存器208旋转器之运作,将输入方块
5902依照栏信道列循环之顺序沿着神经网络单元121旋转,以产生栏通道列加总,或称卷积结果。
[0660] 多字距离旋转
[0661] 现在请参照图70,图中显示一方块图,描述本发明支持多字距离转动运算之另一个实施例之神经处理单元126之一部分。图70包括一神经处理单元126之一多路复用寄存器208。此神经处理单元126系神经网络单元121中由N个神经处理单元126构成之阵列之其中之一,并以神经处理单元J表示。图70中之多路复用寄存器208在许多方面系类似于图7之多路复用寄存器208,包含一输入207以接收来自数据随机存取存储器122之一数据字,并具有一控制输入213与一输出209。不过,不同于图7之实施例只具有单一个来自相邻神经处理单元126之输入,图70之多路复用寄存器208具有五个输入来自五个相邻之神经处理单元126。
第一个输入211-1是来自神经处理单元J-1 之输出209,即与当前之神经处理单元126距离为一之神经处理单元126,如同图7之实施例中之输入211。第二个输入211-2是来自神经处理单元J-2之输出209,即与当前之神经处理单元126距离为二之神经处理单元126。第三个输入211-4是来自神经处理单元J-4之输出209,即与当前之神经处理单元126距离为四之神经处理单元126。第四个输入211-8是来自神经处理单元J-8之输出209,即与当前之神经处理单元126距离为八之神经处理单元126。第五个输入 211-16是来自神经处理单元J-16之输出209,即与当前之神经处理单元126距离为十六之神经处理单元126。控制输入213之运作会在输入207,211-1,211-2, 211-4,211-8与211-16中选择其一提供于输出209。如此,由神经网络单元121 执行之一非架构指令即可完成一多字距离转动运算,即控制输入由输入
211-2, 211-4,211-8与211-16中择一提供于输出209。如此处理有助于缩减前述执行三维卷积之非架构程序之大小并增加其效率,如图60,63,65,67与图69中列19之对准转动运作。
[0662] 虽然在图70之实施例中,多路复用寄存器208具有五个输出以接收来自五个不同之相邻神经处理单元126之输出209,而这五个神经处理单元126与当前神经处理单元126之距离为一,二,四,八与十六,不过,本发明并不限于此,多路复用寄存器208具有较多或较少数量(如三,四,六,七)输入以接收来自不同数量与不同距离之相邻神经处理单元126之输出209之其他实施例亦属于本发明之范畴。举例来说,在一实施例中,多路复用寄存器208不包含输入211-2与211-16。此外,虽然在图70之实施例中,距离为二的次方,不过,本发明并不限于此,其中某些距离并非二之次方之实施例亦属于本发明之范畴。
[0663] 在其他实施例中,多路复用寄存器208也用于接收并选择图23之一相邻窄字输入1811以支持窄/漏斗配置之特征,并且/或接收并选择图49 之输出寄存器1104输入4905以支持输出寄存器1104回馈之特征。为了简化说明,在图70中系省略这些输入。此外,虽然图中并未显示,不过,权重多路复用寄存器705亦可以类似于图70之多路复用寄存器208之方式进行配置,即配置为接收并选择来自多字距离之相邻神经处理单元126之输出203。
[0664] 现在请参照图71,图中显示四个指令,描述神经网络单元121之多字距离转动特性,此神经网络单元121包含多个具有如图70所示之多路复用寄存器208之神经处理单元126。这四个指令中之每一个指令会设定一乘法累加算术逻辑单元运算,接收其来自于权重随机存取存储器124之当前列之次一个列之权重字,并透过图70之多路复用寄存器208接收其来自于一相邻距离分别为二,四,八与十六之神经处理单元126之数据字;也就是说,这四个指令中之第一个指令会指示N个神经处理单元126中之每一个神经处理单元126 分别在输入211-2,211-4,211-8或211-16中进行选择(例如透过控制输入213)。非架构程序内可包含一个或多个此种指令,如此,非架构程序可利用如前述图60,63,65,67与图69中之虚拟程序代码执行列19之对准旋转运作。除了前述乘法累加运算,此非架构指令可执行其他算术逻辑单元运算,例如加法,乘法,取最大值,取最小值,无操作(no-op)。特别是,无操作算术逻辑单元运算可以单纯将从数据随机存取存储器122读取之列沿着N个神经处理单元126旋转,而不影响累加器202,如此处理在对准旋转(例如列19) 之旋转量(即旋转之字数)不直接受到多路复用寄存器208支持之情况下特别有用。举例来说,若是旋转量为十一,在一个数值为八之乘法累加旋转后,会需要一个数值为一之无操作旋转接着一个数值为二之无操作旋转。此外,在一实施例中,神经处理单元126之权重字装载于一个类似于图7之多路复用寄存器705之多路复用寄存器,此多路复用寄存器系包含于一个N个字之旋转器以对于接收自权重随机存取存储器124之一列权重进行旋转,并且此多路复用寄存器系经提升以接收来自多个距离不等(例如一,二,四,八与十六)之不同相邻神经处理单元126之输出209作为其输入,类似于图70之多路复用寄存器208。此外,指定一多字距离转动运算之非架构指令可指定一大于一之计数值,例如图4中位于地址2之非架构指令所设定之COUNT=511。
[0665] 可尺寸重调存储器与可分割旋转器模式
[0666] 由前述实施例可以发现,透过神经网络之执行,神经网络单元121可提供非常高效能的计算。这是因为阵列内之神经处理单元126数量非常多,存储器 122/124具有相当大的宽度以搭配阵列之宽度,并且数据随机存取存储器122所提供之数据列可旋转至所有神经处理单元126用于搭配不同权重进行算术运算,例如:乘法累加运算,而在每秒钟造成非常大量的计算。由此可以理解并确认,在许多深度学习之应用中,关于节点数之考虑会产生动机提供一个具有更大神经处理单元126阵列与伴随而来更宽之存储器的实施例。例如,神经处理单元 126之数量与存储器122/124字之数量为4096之实施例。
[0667] 不过,在一给定神经网络中,某些层出现节点数减少之情形,特别是网络中较深之层,并非罕见,例如执行共源运作。此外,某些LSTM层会倾向于比其他类型之层来的窄。因此,对于这么宽的神经处理单元126阵列而言,可能会产生神经处理单元126阵列与/或存储器122/124无法被完全使用之情况,也就是某些存储器122/124栏与/或神经处理单元126会是不被使用的。不过,以下描述之实施例有利于在此情况下提升神经网络单元121使用率。特别是将多个神经处理单元126之多路复用寄存器208构成之N个字之旋转器分割为多个旋转器之实施例,如两个N/2个字之旋转器或四个N/4个字之旋转器。此外,在某些实施例中,则是重新调整一个或多个存储器122/124之大小使其变窄变高,而让存储器122/124内之储存空间可以被充分使用,这些实施例特别有利于需要大量权重与数据字之网络。在必须使用较高的随机存取存储器(例如权重随机存取存储器124)才能使一给定层与/或网络之所有权重配合权重随机存取存储器124,而较宽且较短之权重随机存取存储器124无法最佳地配合之情况下,此处理方式特别有用,这是因为,此处理方式可以避免将权重组移入移出权重随机存取存储器124,而有助于当许多不同批次之输入需要在紧密邻接之短暂时间内依序执行之情形。最后,在一实施例中则是结合旋转器分割与存储器尺寸重调。
[0668] 现在请参照图72,图中显示一方块图,描述图1之一神经处理单元126。图72之神经处理单元126在许多方面系类似于图2与图7之神经处理单元126之相对应部分。不过,图72之数据字多路复用寄存器208 会接收一个额外的输入,以720X表示,图72之权重字多路复用寄存器 705会接收一个额外的输入,以721X表示。这些额外的输入720X与721X是用以达成对于数据随机存取存储器122与/或权重随机存取存储器124所进行之尺寸重调,对多个多路复用寄存器208集体构成之一个N个字之旋转器所进行分割操作,或是前述之各种组合,如后续对应于图75,78,81,84,86与图88所述,例如输入7202,7212,7204与7206。
[0669] 现在请参照图73,图中显示一方块图,描述神经网络单元121执行运算所处于之一普通模式。也就是说,图73中显示之普通模式是一个不具有随机存取存储器尺寸重调与旋转器分割之模式,即类似于前述图1至图71所述之模式。在此呈现出普通模式之目的是为了说明并用以与其他采用随机存取存储器尺寸重调与/或旋转器分割之模式相区别。基本上,神经处理单元 126阵列之宽度即为N,在图73之范例中即为4096;不过,N大于或小于此数值之其他实施例亦属本发明之范畴。
[0670] 在普通模式下,权重随机存取存储器124具有W个列(例如,在前述实施例中即为2048列)并且具有4096个字之宽度。因此,如图中所示,权重随机存取存储器124之地址123会具有log2W个位(如log22048=11位)用以对W 个列进行寻址。如前述,权重随机存取存储器124同时输出4096个字,如图中所示,这些字系给予索引为字0-4095。在普通模式下,数据随机存取存储器122 具有D个列(例如,在前述实施例中即为64列)并且具有4096个字之宽度。因此,如图中所示,数据随机存取存储器122之地址125会具有log2D个位(如 log264=6位)用以对D个列进行寻址。如前述,权重随机存取存储器124同时输出4096个字,其索引为字0-4095,而数据随机存取存储器122同时输出4096 个字,这些字系输出至如图中所示宽度为4096之神经处理单元126阵列。控制逻辑7399产生控制信号213以控制数据多路复用寄存器208,并产生控制信号 213以控制图72之权重多路复用寄存器705。如图73所示,在普通模式下,阵列中所有神经处理单元126之多路复用寄存器208,例如4096个多路复用寄存器,会集体运作成为单一个4096个字之旋转器。
[0671] 此模式-无论是普通模式或是任何一个在此所述之存储器尺寸重调与/或旋转器分割模式-会确认控制逻辑7399产生于控制信号213/713之数值以控制数据多路复用寄存器208与/或权重多路复用寄存器705,并确认产生于控制信号 7606之数值以控制图76之写入多路复用器7602。此外,此模式并会确认产生给启动信号之数值,以启动(即启用(activate))或中止存储器122/124之存储器阵列中之各种区块(bank)(如图16与图17)以达成存储器122/124尺寸重调之目的。在一实施例中,此模式是以程序存储器129之执行指令(例如 MULT-ACCUM指令)进行设定;不过,在其他实施例,此模式则可以配置指令(configuration instruction)(例如INITIALIZE NPU指令)进行设定,举例来说,可透过写入控制逻辑7399内或是会提供信号至控制逻辑7299之一配置寄存器以设定模式;而在其他实施例中,此模式可由配置指令与执行指令之组合进行设定。因此,随着指令之转换,此模式会呈现动态变化。产生控制信号213/713/7606之控制逻辑7399可以是序列器128(如图1)之一部分,而如前述,这些控制信号213/713/7606可以是一微运算3418(如图34)之一部分。此模式,特别是对应于存储器尺寸重调之模式,中之至少一部分亦可由提供至控制逻辑
7399之寻址额外位7497/7498(如图74,83与85所示)予以确认。较佳地,额外位7497/7498系包含于存取存储器122/124之个别执行指令内。在一实施例中,若是额外位7497/7498为设定(set),就表示存储器122/124中相对应之存储器已经进行尺寸重调至一窄高模式(narrow-tall mode)。
[0672] 现在请参照图74,图中显示一方块图,描述神经网络单元121执行运算所处于之一窄高模式。执行于图74之窄高模式时,权重随机存取存储器124与数据随机存取存储器122的高度会有效地变成是普通模式下之两倍,而宽度则是一半。权重随机存取存储器124变窄即表示在一次给定存取中只提供N/2个权重字,例如4096/2=2048个权重字;而数据随机存取存储器122变窄即表示在一次给定存取中只提供N/2个数据字,例如4096/2=2048个数据字。权重随机存取存储器124变高,表示其有效地定出2*W个列之地址,例如 2*2048=4096个列;而数据随机存取存储器122变高,即表示其有效地定出2*D 个列之地址,例如2*64=128个列。因此,N个字之列中,对应于栏0至(N/2)-1 之左半部列0至W-1,系给予列0至W-1之地址,而N个字之列中,对应于栏 N/2至N-1之右半部列0至W-1,系给予列W至2*W-1之地址,而使权重随机存取存储器124变高,即高度变成2*W。类似地,N个字之列中,对应于栏0 至(N/2)-1之左半部列0至D-1,系给予列0至D-1之地址,而N个字之列中,对应于栏N/2至N-1之右半部列0至D-1,系给予列D至2*D-1之地址,而使数据随机存取存储器122变高,即高度变成2*D。因此,在窄高模式下,权重随机存取存储器124之地址具有一额外位7497,数据随机存取存储器122之地址具有一额外位7498,这两个位都会提供至控制逻辑7399。控制逻辑
7399会利用这些额外位7497/7498来控制数据多路复用寄存器208与权重多路复用寄存器
705,如此,存储器122/124就可以有效地作为比普通模式下更窄更高之存储器进行运作,详如后续图75所述。虽然未呈现于图73,这些寻址额外位7497/7498之出现无关于神经网络单元121运行时所处之模式;不过,在一实施例中,这些额外位7497/7498在普通模式下会被忽略,在另一实施例中,这些额外位7497/7498则是在被设定为零时,标示为普通模式。在一实施例中,为了节省耗能,若是额外位7497为零,权重随机存取存储器124就会中止栏 N/2至N-1之运作;而若是额外位7497为一,权重随机存取存储器124就会中止栏0至(N/2)-1之运作;若是额外位7498为零,数据随机存取存储器122就会中止栏N/2至N-1之运作;而若是额外位7498为一,数据随机存取存储器122 就会中止栏0至(N/2)-1之运作。在图74之实施例中,尽管存储器122/124 系经尺寸重调运作于窄高模式,神经处理单元阵列126则是作为一个4096个字之旋转器运作,而类似于普通模式。不过,在以下所述之其他实施例中(例如图
83),存储器122/124中之一个或多个存储器经尺寸重调运作于窄高模式,而神经处理单元阵列126则可作为多个旋转器进行运作,而非单一个旋转器。
[0673] 现在请参照图75,图中显示一方块图,详述图72之数据多路复用寄存器208与权重多路复用寄存器705,藉以在普通模式之外,还能支持图74之窄高模式。进一步来说,图75描述一普通神经处理单元,其索引为J,表示为神经处理单元126-J,J之数值为0至(N/2)-1,也就是索引为0 至(N/2)-1之神经处理单元126。数据多路复用寄存器208接收输入211,即相邻神经处理单元126J-1之多路复用寄存器208之输出209。数据多路复用寄存器 208并接收输入207,即数据随机存取存储器122输出之数据字J。数据多路复用寄存器208并接收输入7202,即数据随机存取存储器122输出之数据字 J+(N+2)。也就是说,虽然图74描述之数据随机存取存储器122经尺寸重调作为一窄高存储器(例如宽度为N/2,高度为2*D)进行运作,此D个列N 个字之存储器122之实体链接维持不变,如此,数据随机存取存储器122之一N 个字之列中,由log2D寻址位123选定之栏N/2至N-1之N/2个数据字输出仍然会提供至神经处理单元0至(N/2)-1之数据多路复用寄存器208之相对应数据字 J+(N+2)输入7202,如此,如下所述,多路复用寄存器208即可在寻址额外位7498 为设定时,选择数据字J+(N/2)。权重多路复用寄存器705接收输入206,即权重随机存取存储器124输出之权重字J。权重多路复用寄存器并接收输入7212,即权重随机存取存储器124输出之权重字J+(N/2)。也就是说,虽然图74 描述之权重随机存取存储器124经尺寸重调作为一窄高存储器(例如宽度为N/2,高度为2*W)进行运作,此W个列N个字之存储器124之实体链接维持不变,如此,权重随机存取存储器124之一N个字之列中,由log2W寻址位125选定之栏N/2至N-1之N/2个数据字输出,仍然会提供至神经处理单元0至(N/2)-1 之权重多路复用寄存器705之相对应权重字J+(N+2)输入7212,如此,如下所述,多路复用寄存器705即可在寻址额外位7497为设定时,选择权重字J+(N/2)。如此,举例来说,神经处理单元37之数据多路复用寄存器208由输入207接收来自数据随机存取存储器122之数据字37,并由输入7202接收数据字2085(即 37+2048),神经处理单元37之权重多路复用寄存器705则是由输入206接收来自权重随机存取存储器124之权重字37,并由输入7212接收权重字2085(即 37+2048)。
[0674] 运作于普通模式与窄高模式时,若是指令将旋转器指定为其数据源(例如类似于图4,42与45之地址2或是图57之地址8之 MULT-ACCUM ROTATE,WE ROW+1,COUNT=511指令),控制逻辑7399会在控制信号213上产生数值以选择输入211,即来自相邻神经处理单元126之数据字,提供给所有的N个神经处理单元126。运作于普通模式时,若是指令将数据随机存取存储器122指定为其数据源,控制逻辑7399会在控制信号213上产生一数值以选择输入207,即来自数据随机存取存储器122之数据字J,提供给所有N个神经处理单元126。运作于窄高模式且指令将数据随机存取存储器 122指定为其数据源时,若是额外位7498为零,控制逻辑7399会选择数据随机存取存储器122字J 207,不过,若是额外位7498为一,控制逻辑7399则会选择数据随机存取存储器122字J+(N/2)7202,提供给神经处理单元0至(N/2)-
1。
[0675] 运作于普通模式时,若是指令将权重随机存取存储器124指定为其数据源,控制逻辑7399会在控制信号713上产生一数值以选择输入206,即来自权重随机存取存储器124之权重字J。运作于窄高模式且指令将权重随机存取存储器124 指定为其数据源时,若是额外位7497为零,控制逻辑7399会选择权重随机存取存储器124字J 206,不过,若是额外位7497为一,控制逻辑7399则会选择权重随机存取存储器124字J+(N/2)7212。
[0676] 虽然图中并未显示,不过,神经处理单元N/2至N-1之数据多路复用寄存器208具有输入211与207,但不具有额外的数据字J+(N/2)输入7202,而权重多路复用寄存器705具有输入206,但不具有额外的权重字J+(N/2)输入7212。在另一个替代的实施例中,神经处理单元N/2至N-1之数据多路复用寄存器208 可额外接收数据字J-(N/2)作为输入,而控制逻辑7399会在神经处理单元0至 (N/2)-1接收数据字时,让相对应之神经处理单元N/2至N-1从数据随机存取存储器122接收相同的数据字。如此,因为提供至神经处理单元0至(N/2)-1之数据会有一复本提供至神经处理单元N/2至N-1,因此,即使不将旋转器如同图77之实施例分割成两半,依然能够获得类似的益处,也就是较短的旋转距离。
[0677] 虽然本文所述之实施例中,数据随机存取存储器122接收之一个数据字列会由多个数据多路复用寄存器208构成之一个或多个旋转器进行旋转,不过,本发明并不限于此,在其他实施例中,则是将权重随机存取存储器124接收之一个权重字列由多个权重多路复用寄存器705构成之一个或多个旋转器进行旋转。举例来说,权重多路复用寄存器705亦可接收相邻神经处理单元126之权重多路复用寄存器705输出之权重字203,类似于前述图7所示。
[0678] 现在请参照图76,图中显示一方块图,描述一写入多路复用器7602,在普通模式之外,还能支持图74之窄高模式。进一步来说,图76 描述一普通写入多路复用器7602,其索引为J+(N/2),J的数值为0至(N/2)-1,也就是说,写入多路复用器7602之索引为N/2至N-1。写入多路复用器7602 之索引系关联于数据随机存取存储器122之一列N个字中一数据字之索引,写入多路复用器7602所提供之输出系用以写入数据随机存取存储器122之一列N 个字中,具有相同索引之数据字。写入多路复用器7602有助于在窄高模式且额外位7498为设定之情况下,将索引0至(N/2)-1之神经处理单元126(即神经处理单元阵列126之左半部)产生之结果写入数据随机存取存储器122之一列N 个字中,栏N/2至N-1之数据字(即数据随机存取存储器之右半部),写入多路复用器7602并有助于在普通模式下,或是在窄高模式且额外位7498清空之情况下,将索引N/2至N-1之神经处理单元126(即神经处理单元阵列126之右半部)产生之结果写入数据随机存取存储器122之右半部之数据字。
[0679] 写入多路复用器J+(N/2)7602接收输入133J与133J+(N/2),这些输入是启动函数单元212/1112(举例来说,请参照图2与图11)对于神经处理单元J 与神经处理单元J+(N/2)之累加器202分别执行一运算(如启动函数与/或输出函数)产生之结果,同样地,J的数值为0至(N/2)-1。如此,举例来说,位于索引 4000之写入多路复用器7602之输入133J接收执行于神经处理单元1952之累加器202之结果,其输入133J+(N/2)接收执行于神经处理单元
4000之累加器202 之结果,亦即,J=1952,N=4096,N/2=2048,因此J+(N/2)=1952+2048=4000,4000即为写入多路复用器7602之索引以及数据随机存取存储器122之N个字之列中由log2D寻址位123选定之相对应数据字之索引。控制输入7606控制写入多路复用器7602在两个输入中选择其一提供于输出7604以写入数据随机存取存储器122之字J+(N/2),即数据随机存取存储器122中由N个字构成之一个列之右半部数据字之其中之一。进一步来说,如前述,运作于普通模式时,控制逻辑7399会产生数值于控制信号7606以选择输入133J+(N/
2),即关联于神经处理单元J+(N/2)之结果。运作于窄高模式时,若是额外位7498为零,控制逻辑 7399会选择输入133J+(N/2),不过,若是额外位7498为一,则会选择输入133J,即关联于神经处理单元J之结果。
[0680] 现在请参照图77,图中显示一方块图,描述神经网络单元121执行运算可处于之一分割旋转器(split-rotator)模式。运作于图77之分割旋转器模式时,神经处理单元0至(N/2)-1之N/2个数据多路复用寄存器208会作为N/2 个字之第一旋转器进行运作,而神经处理单元N/2至N-1之N/2个数据多路复用寄存器208会作为N/2个字之第二旋转器进行运作。在图77之实施例中,N为4096,第一旋转器呈现为包含神经处理单元0至2047之2048个字之旋转器0,第二旋转器呈现为包含神经处理单元2048至4095之2048个字之旋转器1。如图中所示,神经处理单元0至2047从数据随机存取存储器122接收相对应之数据字0至2047,并从权重随机存取存储器124接收相对应之权重字 0至2047;神经处理单元2048至4095从数据随机存取存储器122接收相对应之数据字2048至4095,并从权重随机存取存储器124接收相对应之权重字2048 至4095。进一步来说,运作于分割旋转器模式时,旋转器0会将先前由数据随机存取存储器122之左半部读取之2048个数据字沿着神经处理单元0至2047 旋转,旋转器1会将先前由数据随机存取存储器122之右半部读取之2048个数据字沿着神经处理单元
2048至4095旋转。分割旋转器模式可以使神经网络更有效率地执行于网络或至少其中某些层太窄而无法使用N个神经处理单元126 构成之阵列中超过半数之神经处理单元的情形。
也就是说,在分割旋转器模式下,两个不同的数据组会呈现于数据随机存取存储器122之两个半部,两个不同的相对应权重组会呈现于权重随机存取存储器124之两个半部,也就是,N 个栏中之左半部具有第一数据组,N个栏中之右半部具有第二数据组,N个栏中之左半部具有第一权重组,N个栏中之右半部具有第二权重组。举例来说,第一与第二数据组可以是关联于两个不同的影像或同一个影像中两个不同的部分。在另一个范例中,第一与第二数据组可以是关联于在不同时段接收之两个不同的输入,例如提供时间递归神经网络处理之输入,不过,这些输入之时间并不互相关联。
[0681] 现在请参照图78,图中显示一方块图,详述神经处理单元0与神经处理单元N/2内之图72之数据多路复用寄存器208,以126-0与126-N/2 表示,以及神经处理单元J之一普通(generic)数据多路复用寄存器208,以126-J 表示,藉以在普通模式外,还能支持图77之分割旋转器模式。如同图72之多路复用寄存器208,在图78中,神经处理单元0之数据多路复用寄存器208接收输入211与输入207,输入211即为相邻神经处理单元126N-1 之多路复用寄存器208之输出209,输入207即为数据随机存取存储器122输出之数据字0。神经处理单元0之数据多路复用寄存器208并接收额外输入7204,此输入即为神经处理单元126(N/2)-1之多路复用寄存器208之输出209,在图77, N=4096之实施例中,此神经处理单元即为神经处理单元2047。类似地,神经处理单元N/2(例如2048)之数据多路复用寄存器208接收输入211 与输入207,输入211即为相邻神经处理单元126(N/2)-1之多路复用寄存器208 之输出209,输入207即为数据随机存取存储器122输出之数据字N/2,神经处理单元N/2之数据多路复用寄存器208并接收额外输入7204,此输入即为神经处理单元126N-1之多路复用寄存器208之输出209,在图77,N=4096之实施例中,此神经处理单元即为神经处理单元4095。如图78所示,剩下的神经处理单元126-J(也就是神经处理单元0与N/2以外之其他神经处理单元) 之数据多路复用寄存器208也具有输入211与207,但不具有额外的数据字输入 7204。
[0682] 运作于普通模式与分割旋转器模式时,若是指令将数据随机存取存储器122 指定为其数据源,控制逻辑7399会在控制信号213上产生一数值以选择输入207,即相对应数据随机存取存储器122列之字,提供给所有N个神经处理单元126。运作于普通模式且指令将旋转器指定为其数据源时,控制逻辑7399会在控制信号213上产生一数值以选择输入211,即来自于相邻神经处理单元126之数据字,提供给所有N个神经处理单元126。运作于分割旋转器模式且指令将旋转器指定为其数据源时,控制逻辑7399会在控制信号213上产生一数值以选择输入 7204,对于神经处理单元0而言,此输入即为来自于神经处理单元(N/2)-1之数据字,对于神经处理单元N/2而言,此输入即为来自于神经处理单元N-1之数据字,而对于剩下的神经处理单元126,控制逻辑7399会在控制信号213上产生一数值以选择输入211。
[0683] 现在请参照图79,图中显示一方块图,描述N=4096个神经处理单元 126之多路复用寄存器208,耦接作为单一个4096字之旋转器以选择性执行于普通模式,或作为两个2048字之旋转器选择性执行于分割旋转器模式。类似于图3之方式,N=4096个神经处理单元126中之每一个神经处理单元会接收其相对应数据随机存取存储器122字J之输入以及来自于其相邻神经处理单元J-1 之数据字输入211。也就是说,神经处理单元1之输入211会接收神经处理单元 0输出209,神经处理单元2之输入211会接收神经处理单元1之输出209,依此类推,神经处理单元4095之输入211会接收神经处理单元4094之输出209,神经处理单元0之输入211会接收神经处理单元4095之输出209。此外,神经处理单元0并会接收神经处理单元2047之输出209作为其额外输入7204,神经处理单元2048并会接收神经处理单元4095之输出209作为其额外输入7204。运作于普通模式时,控制信号213会使4096个神经处理单元126中之每一个神经处理单元选择其相对应输入211以产生单一个4096个字之旋转器;不过,运作于分割旋转器模式时,控制信号213则会使神经处理单元0与神经处理单元 2048改为选择其额外输入7204以产生两个2048个字之旋转器。
[0684] 现在请参照图80,图中显示一方块图,描述神经网络单元121执行运算可处于之一第二分割旋转器模式。运作于图80之第二分割旋转器模式时,神经处理单元0至(N/4)-1之N/4个数据多路复用寄存器208会做为N/4个字之第一旋转器运作,神经处理单元N/4至(N/2)-1之N/4个数据多路复用寄存器208 会做为N/4个字之第二旋转器运作,神经处理单元N/
2至(3N/4)-1之N/4个数据多路复用寄存器208会做为N/4个字之第三旋转器运作,神经处理单元3N/4至 N-1之N/4个数据多路复用寄存器208会做为N/4个字之第四旋转器运作。在图
80之实施例中,N为4096,第一旋转器呈现为包含神经处理单元0至1023 之1024个字之旋转器0,第二旋转器呈现为包含神经处理单元1024至2047之 1024个字之旋转器1,第三旋转器呈现为包含神经处理单元2048至3071之1024 个字之旋转器2,第一旋转器呈现为包含神经处理单元3072至4095之1024个字之旋转器3。如图中所示,神经处理单元0至1023接收来自数据随机存取存储器122之相对应数据字0至1023以及来自权重随机存取存储器124之相对应权重字0至1023,神经处理单元1024至2047接收来自数据随机存取存储器122 之相对应数据字1024至2047以及来自权重随机存取存储器124之相对应权重字1024至2047,神经处理单元2048至3071接收来自数据随机存取存储器122 之相对应数据字2048至3071以及来自权重随机存取存储器124之相对应权重字2048至3071,神经处理单元3072至4095接收来自数据随机存取存储器122 之相对应数据字3072至4095以及来自权重随机存取存储器124之相对应权重字3072至4095。进一步来说,运作于第二分割旋转器模式时,旋转器0会将先前由一4096个字之数据随机存取存储器122列之栏0至1023读取之1024个数据字沿着神经处理单元0至1023旋转,旋转器1会将先前由一4096个字之数据随机存取存储器122列之栏
1024至2047读取之1024个数据字沿着神经处理单元1024至2047旋转,旋转器2会将先前由一4096个字之数据随机存取存储器122列之栏2048至3071读取之1024个数据字沿着神经处理单元2048至3071 旋转,旋转器3会将先前由一4096个字之数据随机存取存储器122列之栏3072 至4095读取之1024个数据字沿着神经处理单元3072至4095旋转。如此,第二分割旋转器模式可以使神经网络更有效率地执行于网络或至少其中某些层太窄而无法使用N个神经处理单元126构成之阵列中超过四分之一之神经处理单元的情形。
[0685] 现在请参照图81,图中显示一方块图,详述神经处理单元0,神经处理单元N/4,神经处理单元N/2与神经处理单元3N/4(例如神经处理单元0,神经处理单元1024,神经处理单元2048,神经处理单元3072)内之图72之数据多路复用寄存器208,这些神经处理单元分别以126-1,126-N/4,126-N/2, 126-3N/4表示,藉以在普通模式外,还能支持图77与图80所示之第一与第二分割旋转器模式。如同图78所示,图81中之神经处理单元0 之数据多路复用寄存器208接收输入211,输入207,以及额外输入7024。在图81中,神经处理单元0并接收额外输入7026以促进第二分割旋转器模式之执行,此输入7026系神经处理单元126(N/4)-1多路复用寄存器208之输出 209,在图80,N=4096之实施例中,此神经处理单元即为神经处理单元1023。类似地,神经处理单元N/2(如2048)之数据多路复用寄存器208接收输入211,输入207,以及额外输入7024。在图81中,神经处理单元N/2并接收额外输入7206以促进第二分割旋转器模式之执行,此输入7026系神经处理单元126(3N/4)-1多路复用寄存器208之输出209,在图80之实施例中,此神经处理单元即为神经处理单元3071。
[0686] 此外,神经处理单元N/4之数据多路复用寄存器208接收输入211,输入 207,以及额外输入7206以促进第二分割旋转器模式之执行,此输入7026系神经处理单元126(N/2)-1多路复用寄存器208之输出209,在图80之实施例中,此神经处理单元即为神经处理单元2047;并且,神经处理单元3N/4之数据多路复用寄存器208接收输入211,输入207,以及额外输入7206以促进第二分割旋转器模式之执行,此输入7026系神经处理单元126N-1多路复用寄存器208之输出209,在图80之实施例中,此神经处理单元即为神经处理单元4095。剩下的神经处理单元(也就是神经处理单元0,神经处理单元N/4,神经处理单元N/2与神经处理单元3N/4以外之其他神经处理单元)之数据多路复用寄存器 208虽未见于图81,这些数据多路复用寄存器也具有输入211与207,但不具有额外的数据字输入7204以及7026。
[0687] 运作于普通模式,第一分割旋转器模式与第二分割旋转器模式时,若是指令将数据随机存取存储器122指定为其数据源,控制逻辑7399会在控制信号213 上产生一数值以选择输入207,即相对应数据随机存取存储器122列之字,提供给所有N个神经处理单元126。运作于普通模式且指令将旋转器指定为其数据源时,控制逻辑7399会在控制信号213上产生一数值以选择输入211,即来自于相邻神经处理单元126之数据字,提供给所有N个神经处理单元126。运作于第一分割旋转器模式且指令将旋转器指定为其数据源时,控制逻辑7399会在控制信号213上产生一数值以选择输入7204,对于神经处理单元0而言,此输入即为来自于神经处理单元(N/2)-1之数据字,对于神经处理单元N/2而言,此输入即为来自于神经处理单元N-1之数据字,而对于剩下的神经处理单元126,控制逻辑7399会在控制信号213上产生一数值以选择输入211。运作于第二分割旋转器模式且指令将旋转器指定为其数据源时,控制逻辑7399会在控制信号 213上产生一数值以选择输入7206,对于神经处理单元0而言,此输入即为来自于神经处理单元(N/4)-1之数据字,对于神经处理单元N/4而言,此输入即为来自于神经处理单元(N/2)-1之数据字,对于神经处理单元N/2而言,此输入即为来自于神经处理单元(3N/4)-1之数据字,对于神经处理单元3N/4而言,此输入即为来自于神经处理单元N-1之数据字,而对于剩下的神经处理单元126,控制逻辑7399会在控制信号213上产生一数值以选择输入211。
[0688] 现在请参照图82,图中显示一方块图,描述N=4096个神经处理单元 126之多路复用寄存器208,耦接作为单一个4096个字之旋转器以选择性执行于普通模式,或做为两个2048个字之旋转器选择性执行于第一分割旋转器模式,或做为四个1024个字之旋转器选择性执行于第二分割旋转器模式。类似于图79,N=4096个神经处理单元126中之每一个神经处理单元都会接收其相对应数据随机存取存储器122字J输入207以及来自其相邻神经处理单元J-1之数据字输入211。也就是说,神经处理单元1接收神经处理单元0之输出209作为其输入211,神经处理单元2接收神经处理单元1之输出209作为其输入211,依此类推,神经处理单元4095接收神经处理单元4094之输出209作为其输入 211,而神经处理单元0接收神经处理单元4095之输出209作为其输入211。类似于图79,神经处理单元0并会接收神经处理单元2047之输出209作为其额外输入7204,神经处理单元2048并会接收神经处理单元4095之输出209 作为其额外输入7204。此外,神经处理单元0并会接收神经处理单元1023之输出
209作为其额外输入7206,神经处理单元1024并会接收神经处理单元2047 之输出209作为其额外输入7206,神经处理单元2048并会接收神经处理单元 3071之输出209作为其额外输入7206,神经处理单元3072并会接收神经处理单元4095之输出209作为其额外输入7206。运作于普通模式时,控制信号213 会使4096个神经处理单元126中之每一个神经处理单元选择其相对应输入211 以产生单一个4096个字之旋转器;运作于第一分割旋转器模式时,控制信号213 则会使神经处理单元0与神经处理单元2048改为选择其额外输入7204以产生两个2048个字之旋转器;运作于第二分割旋转器模式时,控制信号213则会使神经处理单元0,
1024,2048与3072改为选择其额外输入7206以产生四个1024 个字之旋转器。
[0689] 现在请参照图83,图中显示一方块图,描述神经网络单元121执行运算可处于之一混合模式。运作于图83之混合模式时,如图中所示,权重随机存取存储器124-如同于窄高模式-的高度会有效地变成是普通模式下之两倍,而宽度则是一半,不过,数据随机存取存储器122会维持普通模式下之N个数据字之宽度与D个列之高度,而旋转器-如同于分割旋转器模式-会分割为两个N/2个字之旋转器。因此,如同于窄高模式,此模式下之权重随机存取存储器124会接收提供给控制逻辑7399寻址额外位7497。运作于图83之混合模式时,神经处理单元0至(N/2)-1之N/2个数据多路复用寄存器208 会作为一个N/2个字之第一旋转器运作,神经处理单元N/2至N-1之N/2个数据多路复用寄存器208会作为一个N/2个字之第二旋转器运作,如同图77所示。如图中所示,神经处理单元0至2047接收来自数据随机存取存储器122 之相对应数据字0至2047以及来自权重随机存取存储器124之相对应权重字0 至2047,神经处理单元2048至4095接收来自数据随机存取存储器122之相对应数据字2048至4095;不过,不同于图77,在此模式下,神经处理单元 2048至4095也是接收来自权重随机存取存储器124之相对应权重字0至2047。如同运作于分割旋转器模式,运作于混合模式时,旋转器0会将先前由数据随机存取存储器122列之左半部读取之2048个数据字沿着神经处理单元0至2047 旋转,旋转器1会将先前由数据随机存取存储器122列之右半部读取之2048个数据字沿着神经处理单元2048至4095旋转。不过,这些由所有神经处理单元 126执行之运算,也可以搭配高度较高之权重随机存取存储器124内装载之一共同权重组执行,因此,对于一给定窄数据组,即宽度为N/2个数据字之数据组,可装载普通模式下之两倍数量之权重。因此,混合模式可以使神经网络更有效率地执行于网络或至少其中某些层太窄而无法使用N个神经处理单元126构成之阵列中超过半数之神经处理单元的情形。也就是说,在混合模式下,两个不同之数据组会呈现于数据随机存取存储器122之两半,也就是说,在N个栏之左半部会呈现一第一数据组,在N个栏之右半部会呈现一第二数据组,而这两个数据组会共享权重随机存取存储器124内同一个权重组,而因为所使用之权重随机存取存储器124高度较高,因而可以有效地加大此共享权重组。举例来说,第一与第二数据组可以是关联于两个不同的影像或同一个影像中两个不同的部分,而神经网络利用相同的权重进行处理。在另一个范例中,第一与第二数据组可以是关联于在不同时段接收之两个不同的输入,例如提供时间递归神经网络处理之输入,不过这些输入之时间并不互相关联,而神经网络利用相同的权重进行处理。
[0690] 现在请参照图84,图中显示一方块图,详述图72之数据多路复用寄存器208与权重多路复用寄存器705,藉以在普通模式外,还能支持图83所示之混合模式。图84显示神经处理单元0与神经处理单元N/2 之数据多路复用寄存器208(例如神经处理单元0与神经处理单元2048),这些神经处理单元分别以126-0与126-N/2表示,这些数据多路复用寄存器208相同于前述图78之数据多路复用寄存器,以支持图83中之旋转器分割。此外,图84并显示神经处理单元126-J之一权重多路复用寄存器705,其中J=0至(N/2)-1,此权重多路复用寄存器相同于前述图75之权重多路复用寄存器,以支持图83中权重随机存取存储器124之尺寸重调。最后,图84并显示神经处理单元126-J之一权重多路复用寄存器705,而其中 J=N/2至N-1,以支持图83中权重随机存取存储器124之尺寸重调,并从尺寸重调后之权重随机存取存储器124提供共享之权重字组至神经处理单元阵列126之右半部,即提供至神经处理单元N/2至N-1。
[0691] 神经处理单元126-J之权重多路复用寄存器705,其中J=N/2至N-1,接收输入206,此输入即权重随机存取存储器124输出之权重字J。此权重多路复用寄存器705并接收输入7214,此输入即权重随机存取存储器124输出之权重字 J-(N/2)。因此,举例来说,位于索引J=3707之神经处理单元之权重多路复用寄存器705之输入206会接收来自权重随机存取存储器124位于索引3707之权重字,其输入7214会接收来自权重随机存取存储器124位于索引
1659之权重字 (即J-(N/2)=3707-2048=1659)。
[0692] 运作于普通模式时,若是指令将旋转器指定为其数据源,控制逻辑7399会在控制信号213上产生数值以选择输入211,即来自相邻神经处理单元126之数据字,提供给所有的N个神经处理单元126。运作于普通模式时,若是指令将数据随机存取存储器122指定为其数据源,控制逻辑7399会在控制信号213上产生一数值以选择输入207,即来自数据随机存取存储器122之数据字J,提供给所有N个神经处理单元126。运作于普通模式时,控制逻辑7399会在控制信号213上产生一数值以选择输入206,即来自权重随机存取存储器124之权重字 J,提供给所有N个神经处理单元126。
[0693] 运作于混合模式且指定将旋转器指定为其数据源时,控制逻辑7399会在控制信号213上产生一数值以选择输入7204,对于神经处理单元0而言,此输入即为来自于神经处理单元(N/2)-1之数据字,对于神经处理单元N/2而言,此输入即为来自于神经处理单元N-1之数据字,而对于剩下的神经处理单元126,控制逻辑7399会在控制信号213上产生一数值以选择输入211。运作于混合模式时,若是指令将数据随机存取存储器122指定为其数据源,控制逻辑7399会在控制信号213上产生一数值以选择输入207,即来自数据随机存取存储器
122之数据字J,提供给所有N个神经处理单元126。
[0694] 运作于混合模式时,若是额外位7497为零:(1)J=0至(N/2)-1时,控制逻辑 7399会在控制信号713上产生一数值使神经处理单元J之权重多路复用寄存器 705选择输入206,即来自权重随机存取存储器124之权重字J;(2)J=N/2至N-1 时,控制逻辑7399会在控制信号713上产生一数值使神经处理单元J之权重多路复用寄存器705选择输入7214,即来自权重随机存取存储器124之权重字 J-(N/2)。运作于混合模式时,若是额外位7497为一:
(1)J=0至(N/2)-1时,控制逻辑7399会在控制信号713上产生一数值使神经处理单元J之权重多路复用寄存器705选择输入7212,即来自权重随机存取存储器124之权重字J+(N/2);
(2) J=N/2至N-1时,控制逻辑7399会在控制信号713上产生一数值使神经处理单元J之权重多路复用寄存器705选择输入206,即来自权重随机存取存储器124 之权重字J。
[0695] 现在请参照图85,图中显示一方块图,描述神经网络单元121执行运算可处于之一窄高半转动(narrow-tall-half-rotate)模式。运作于图86之窄高半旋转模式时,神经网络单元121之运作类似于窄高模式,如前文图74所述,数据随机存取存储器122与权重随机存取存储器124会经尺寸重调为较窄且较高之存储器。不过,在窄高半旋转模式中,旋转器会被有效地缩减为原本尺寸的一半,而阵列中剩余的神经处理单元126会被关闭。进一步来说,旋转器会被分割成一个包含神经处理单元0至(N/2)-1之N/2个字之旋转器,如同图77之分割旋转器模式;不过,神经处理单元N/2至N-1则是被关闭。
[0696] 现在请参照图86,图中显示一方块图,详述图72之数据多路复用寄存器208与权重多路复用寄存器705,藉以在普通模式外,还能支持图85所示之窄高半转动模式。图86之权重多路复用寄存器705相同于图75之权重多路复用寄存器705,并发挥相同功能。对于所有N个神经处理单元126,除了神经处理单元0,图86之数据多路复用寄存器208系相同于图75之数据多路复用寄存器208并发挥相同功能。不过,对应于神经处理单元0之图86之数据多路复用寄存器208具有额外输入7204以接收来自神经处理单元(N/2)-1之数据多路复用寄存器208之输出209(如同图78之神经处理单元0),如此,在窄高半旋转模式下,即可使神经处理单元0至(N/2)-1作为一个N/2个字之旋转器进行运作(例如在图85中标示为旋转器0之2048个字之旋转器)。也就是说,图86之数据多路复用寄存器208与权重多路复用寄存器705在窄高半旋转模式下之运作系相同于前述图75之窄高模式下之运作,其差异点仅在于在窄高半旋转模式下,控制逻辑7399会在控制信号213上产生一数值使数据多路复用寄存器208选择输入 7204而非输入211。相较于窄高模式,窄高半旋转模式具有节能之优点。
[0697] 前述实施例系针对接收自数据随机存取存储器122之数据字进行旋转器分割,不过,本发明并不限于此,针对来自权重随机存取存储器124之权重字进行旋转器分割所使用之由神经处理单元126构成之旋转器,亦可以采用类似于前述对应于数据字旋转器之方式,分割成两个或更多不同的旋转器。
[0698] 在前述实施例中,数据/权重随机存取存储器122/124系经尺寸重调为两倍高度与一半宽度,不过,本发明并不限于此,数据/权重随机存取存储器122/124 经调整为不同尺寸之实施例亦属于本发明之范畴,例如,四倍高度与四分之一宽度。而此实施例会提供另外的额外位,例如额外位7497/7498。举例来说,当数据/权重随机存取存储器122/124经尺寸重调为四倍高度与四分之一宽度时,就需要两个额外位而非一个。
[0699] 在前述实施例中,数据随机存取存储器122于尺寸重调时,会被来自于神经处理单元阵列126之右半部或左半部之结果写入,不过,本发明并不限于此,权重随机存取存储器124于尺寸重调时被来自于神经处理单元阵列126之右半部或左半部之结果写入之实施例亦属于本发明之范畴。
[0700] 现在请参照图87,图中显示一方块图,描述神经网络单元121执行运算可处于之一分割旋转器模式之另一实施例。图87之实施例在许多方面系类似于图77之实施例。不过,运作于图87之分割旋转器模式时,神经处理单元0至(N/4)-1以及神经处理单元3N/4至N-1之N/2个数据多路复用寄存器208系集体作为一个N/2个字之第一旋转器进行运作,而神经处理单元N/4至(3N/4)-1之N/2个数据多路复用寄存器208系集体作为一个N/2个字之第二旋转器进行运作。在图87之实施例中,N是4096,第一旋转器呈现为一个包含神经处理单元0至1023以及神经处理单元3072至4095之2048 个字之旋转器0,而第二旋转器呈现为一个包含神经处理单元1024至3071之2048个字之旋转器1。
[0701] 如图中所示,神经处理单元0至1023从数据随机存取存储器122接收相对应之数据字0至1023并从权重随机存取存储器124接收相对应之权重字0至 1023,神经处理单元1024至3071从数据随机存取存储器122接收相对应之数据字1024至3071并从权重随机存取存储器124接收相对应之权重字1024至 3071,神经处理单元3072至4095从数据随机存取存储器122接收相对应之数据字3072至4095并从权重随机存取存储器124接收相对应之权重字
3072至 4095。进一步来说,运作于此交替分割旋转器模式时,旋转器0会将先前由数据随机存取存储器122列之左侧四分之一与右侧四分之一读取之2048个数据字沿着神经处理单元
0至1023以及3072至3095旋转,旋转器1会将先前由数据随机存取存储器122列之中间二分之一读取之2048个数据字沿着神经处理单元 1024至3071旋转。如此,相同于图77之分割旋转器模式之实施例,图87之交替分割旋转器模式之实施例也可以使神经网络更有效率地执行于网络或至少其中某些层太窄而无法使用N个神经处理单元126构成之阵列中超过半数之神经处理单元的情形。也就是说,在此交替分割旋转器模式中,两个不同的数据组会呈现于数据随机存取存储器122之两个半部,两个不同的相对应权重组会呈现于权重随机存取存储器124之两个半部,也就是,N个栏之左侧四分之一与右侧四分之一(也就是栏0至(N/
4)-1以及栏3N/4至N–1)之组合具有第一数据组,N个栏之中间二分之一(也就是栏N/4至(3N/4)-1)具有第二数据组,N个栏之左侧四分之一与右侧四分之一(也就是栏0至(N/4)-1以及栏3N/4 至N–1)之组合具有第一权重组,N个栏之中间二分之一(也就是栏N/4至 (3N/
4)-1)具有第二权重组。举例来说,第一与第二数据组可以是关联于两个不同的影像或同一个影像中两个不同的部分。在另一个范例中,第一与第二数据组可以是关联于在不同时段接收之两个不同的输入,例如提供时间递归神经网络处理之输入,不过这些输入之时间并不互相关联。
[0702] 相较于图77之分割旋转器模式之实施例,图87之交替分割旋转器模式之实施例有利于缩短为达成旋转器分割所需增设之导线路径长度,而可享有较佳之时点,详如后述,特别是图89。为了享有较佳之时点,需要利用软件(也就是执行于神经网络单元121之程序或是执行于处理器100或处理核心之架构程序,而此处理器或处理核心会存取神经网络单元121并将其视为一接口设备而非一执行单元,如美国专利申请号15366027,15366053与 
15366057所述)分割第一数据组并将其放置于数据随机存取存储器122之栏0 至(N/4)-1以及栏3N/4至N-1,并将第二数据组放置于数据随机存取存储器122 之栏N/4至(3N/4)-1。也就是说,基本上,此软件必须意识到构成旋转器0(实际上,就是除了最右侧之旋转器以外之任何旋转器)之神经处理单元126的索引并非连续不断而必须分割并将各个数据组之片段放置于数据随机存取存储器之适当字段供这些神经处理单元126之分割旋转器处理。
[0703] 现在请参照图88,图中显示一方块图,详述神经处理单元N/4与神经处理单元3N/4(即神经处理单元1024与神经处理单元3072)内之图72之数据多路复用寄存器208,这些神经处理单元以神经处理单元126-N/4与 126-3N/4表示,以及神经处理单元J之一普通数据多路复用寄存器208,此神经处理单元以神经处理单元126-J表示,藉以在普通模式外,还能支持图87 之交替分割旋转器模式。如同图72之多路复用寄存器208,在图88 中,神经处理单元N/4之数据多路复用寄存器208接收输入211,此输入即为相邻神经处理单元126(N/4)-1之数据多路复用寄存器208之输出209,以及输入 207,此输入即为数据随机存取存储器
122输出之数据字N/4。神经处理单元N/4 之数据多路复用寄存器208并接收额外输入7204,此输入即为神经处理单元126 (3N/4)-1之多路复用寄存器208之输出209,在图87,N=4096之实施例中,此神经处理单元即为神经处理单元3071。类似地,神经处理单元3N/4(例如
3702) 之数据多路复用寄存器208接收输入211,此输入即为相邻神经处理单元126 (3N/
4)-1之数据多路复用寄存器208之输出209,以及输入207,此输入即为数据随机存取存储器
122输出之数据字3N/4,并且接收额外输入7204,此输入即为神经处理单元126(N/4)-1之多路复用寄存器208之输出209,在图87 N=4096之实施例中,此神经处理单元即为神经处理单元1023。如图88所示,剩下的神经处理单元126-J(也就是神经处理单元N/4与神经处理单元3N/4 以外之其他神经处理单元)之数据多路复用寄存器208也具有输入211与207,但不具有额外的数据字输入7204。
[0704] 运作于普通模式与前述交替分割旋转器模式时,若是指令将数据随机存取存储器122指定为其数据源,控制逻辑7399会在控制信号213上产生一数值以选择输入207,即相对应数据随机存取存储器122列之字,提供给所有N个神经处理单元126。运作于普通模式且指令将旋转器指定为其数据源时,控制逻辑 7399会在控制信号213上产生一数值以选择输入
211,即来自于相邻神经处理单元126之数据字,提供给所有N个神经处理单元126。运作于此交替分割旋转器模式且指令将旋转器指定为其数据源时,控制逻辑7399会在控制信号213 上产生一数值以选择输入7204,对于神经处理单元N/4而言,此输入即为来自于神经处理单元(3N/4)-1之数据字,对于神经处理单元3N/4而言,此输入即为来自于神经处理单元(N/
4)-1之数据字,而对于剩下的神经处理单元126,控制逻辑7399会在控制信号213上产生一数值以选择输入211。
[0705] 现在请参照图89,图中显示一方块图,描述N=4096个神经处理单元之多路复用寄存器208,耦接作为单一个4096字之旋转器以选择性执行于普通模式,或做为两个2048字之旋转器选择性执行于此交替分割旋转器模式。类似于图3所示之方式,N=4096个神经处理单元126中之每一个神经处理单元会接收其相对应数据随机存取存储器122之字J输入207以及来自于相邻神经处理单元J-1之数据字输入211。也就是说,神经处理单元1接收神经处理单元0之输出209作为其输入211,神经处理单元2接收神经处理单元1之输出209作为其输入211,依此类推,神经处理单元4095接收神经处理单元4094之输出209 作为其输入211,而神经处理单元0接收神经处理单元4095之输出209作为其输入211。此外,神经处理单元1024并会接收神经处理单元3071之输出209作为其额外输入7204,神经处理单元3072并会接收神经处理单元1023之输出209 作为其额外输入7204。运作于普通模式时,控制信号213会使4096个神经处理单元126中之每一个神经处理单元选择其相对应输入211以产生单一个
4096个字之旋转器;不过,运作于分割旋转器模式时,控制信号213则会使神经处理单元
1024与神经处理单元3072改为选择其额外输入7204以产生两个2048个字之旋转器。
[0706] 图89,如同图79,系用以描述神经网络单元121之多个神经处理单元126之多路复用寄存器208之逻辑连接。图89(图90亦同) 并描述神经网络单元121之多个神经处理单元126之多路复用寄存器208之实体配置之一实施例。由图89与图90可以观察到,神经处理单元126与其相关联之多路复用寄存器208之实体系配置于一循环。也就是说,神经处理单元
126之阵列本身系折迭,或反折,而使阵列126之一末端(例如神经处理单元4095)回到阵列
126之起始端(例如神经处理单元0)。在图89之实施例中,神经处理单元0至2047系沿着一底部列由左而右设置,而神经处理单元2048至4095系沿着一顶部列由右而左设置。此循环结构会使各个神经处理单元J实体相邻于其逻辑相邻之神经处理单元J-1。特别是,此循环结构会使神经处理单元2047与2048实体相邻,而神经处理单元0与4095实体相邻。此循环结构并会使互相连接以达成交替分割旋转器模式之神经处理单元实体相邻。进一步来说,此循环结构会使神经处理单元3072相邻于神经处理单元1023(例如,位于正上方),并使神经处理单元1024相邻于神经处理单元3071(例如,位于正下方)。实体上紧密相邻的配置方式会使连接多路复用寄存器208之输出209至多路复用寄存器208之输入211与7204之导线路径的长度变得相当短,而会使关联于此导线路径之传播延迟变得相当短。相当短的传播延迟有助于改善时序,例如,让神经网络单元121能够执行于高于神经处理单元126采用它种配置而产生较长导线路径之情况下所能达到之最大时频。
[0707] 现在请参照图90,图中显示一方块图,描述本发明一实施例之部分神经网络单元121之实体配置。图90描述数据随机存取存储器122,权重随机存取存储器124,与神经处理单元阵列126。阵列126之4096个神经处理单元系依照前述图87至图89之循环方式进行配置与链接。进一步来说,神经处理单元0至2047之实体系依序配置于一第一列,神经处理单元
2048至4095 之实体系依序配置于相邻于第一列之一第二列,如此神经处理单元0所在之第一列之末端就会相邻于神经处理单元4095所在之第二列之末端,神经处理单元 2047所在之第一列之末端就会相邻于神经处理单元2048所在之第二列之末端。权重随机存取存储器
124与数据随机存取存储器122之栏0至2047系配置于包含神经处理单元0至2047之神经处理单元阵列126之侧边,权重随机存取存储器124与数据随机存取存储器122之栏2048至
4095系配置于包含神经处理单元2048至4095之神经处理单元阵列126之侧边。如次配置可以缩短由随机存取存储器122/124之各个栏连接至阵列126中其相对应神经处理单元之导线路径。
[0708] 如图中所示,各个神经处理单元J系连接至其逻辑且实体相邻之神经处理单元J-1,举例来说,神经处理单元1系连接至神经处理单元0,神经处理单元2 系连接至神经处理单元1,依此类推,神经处理单元4095系连接至神经处理单元4094,而神经处理单元0系连接至神经处理单元4095。进一步来说,如图89所述(在图90中并未呈现),神经处理单元J之输入211系连接至其逻辑且实体相邻之神经处理单元J-1之多路复用寄存器208之输出209。此外,神经处理单元3072系连接至神经处理单元1023,而神经处理单元1024系连接至神经处理单元3071。进一步来说,如图89所述(在图90中并未呈现),神经处理单元1023之多路复用寄存器208之输出209系连接至神经处理单元3072之输入7204,神经处理单元3071之多路复用寄存器208之输出209 系连接至神经处理单元1024之输入7204。如此链接使神经处理单元阵列126在普通模式下可以作为单一个4096个字之旋转器进行运作,而在交替分割旋转器模式下可以作为两个2048个字之旋转器进行运作,这两个旋转器系以旋转器0 与旋转器
1表示。如图中所示,旋转器0包括神经处理单元0至1023以及3072 至4095,旋转器1包括神经处理单元1024至3071。此神经处理单元阵列126 之循环结构会使各个神经处理单元J实体相邻于其逻辑相邻之神经处理单元J-1,使神经处理单元3N/4(例如神经处理单元3072)实体相邻于神经处理单元(N/4)-1 (例如神经处理单元1023),使神经处理单元N/4(例如神经处理单元1024) 实体相邻于神经处理单元(3N/4)-1(例如神经处理单元3071)。
[0709] 需要理解的是,虽然图90所描述的是一种几何具规则的神经处理单元实体配置,不过,在某些方面,此实体配置也可以是几何不规则。举例来说,自动化设计工具用于执行神经网络单元121之各种组件之部分设置与布线作业时,可能造成一定程度之几何不规则。此外,虽然图90中所呈现之神经处理单元126与随机存取存储器122/124具有一特定长宽比,不过,此仅为范例,其他不同长宽比之配置方式亦可适用于本发明。此外,就一实施例而言,一组神经处理单元可以集结设计成一实体方块,而这些由神经处理单元构成之实体方块可以连接于循环之两个列。举例来说,一组32个逻辑相邻之神经处理单元 (神经处理单元J至J+31)可以集结设计为一实体方块,而64个实体方块可以连接成一列(例如,作为神经处理单元0至2047),而另外64个实体方块可以连接成一列(例如,作为神经处理单元2048至
4095)。在此实施例中,依据 32个神经处理单元构成之实体方块之设计,此循环会类似于某种相似于两列互相堆栈之缎带糖果(ribbon candy)结构。
[0710] 在图3与图19之实施例中,连接神经处理单元511之输出209与神经处理单元0之输入211之导线路径看起来相当的长,不过,需要理解的是,这些图标并非用以表示实体导线长度,而这些神经处理单元126之实体可以设置于一循环结构,如图89与图90所示,如此,连接神经处理单元511之输出 209与任何神经处理单元之输入211之导线路径之实体长度就会变得相当短,而有利于时序。类似地,虽然在图79之实施例中,连接神经处理单元4095 之输出209与神经处理单元0与2048之输入211以及连接神经处理单元2047 之输出209与神经处理单元0与2048之输入211的导线路径看起来相当的长,不过,需要理解的是,这些图标并非用以表示实体导线长度,而这些神经处理单元126之实体可以设置于一循环结构,如图89与图90所示,如此,连接神经处理单元511之输出209与任何神经处理单元之输入211之导线路径之实体长度就会变得相当短,而有利于时序。最后,虽然在图82之实施例中,连接神经处理单元4095之输出209与神经处理单元0,2048与3072之输入211,连接神经处理单元3071之输出209与神经处理单元2048与3072之输入211,连接神经处理单元2047之输出209与神经处理单元0,1024与2048之输入211,以及连接神经处理单元1023之输出209与神经处理单元0与1024之输入211的导线路径看起来相当的长,不过,需要理解的是,这些图标并非用以表示实体导线长度,而这些神经处理单元126之实体可以设置于一循环结构,如图89与图90所示,如此,连接神经处理单元511之输出209与任何神经处理单元之输入211之导线路径之实体长度就会变得相当短,而有利于时序。
[0711] 此外,在图87至图90所描述之实施例中,权重随机存取存储器124 系运作于普通模式以执行交替分割旋转器模式,不过,本发明并不限于此,其他类似于前述图83之方式,在交替分割旋转器模式时,权重随机存取存储器选择性地运作于窄高模式之实施例亦属于本发明之范畴。在此实施例中,软件会以类似于前述方式,将第一数据组进行分割并将放置于数据随机存取存储器122之栏0至(N/4)-1以及栏3N/4至N-1,并且将将第二数据组放置于数据随机存取存储器之栏N/4至(3N/4)-1。不过,此软件也会将第二数据组分割为两个半部并互换此两个半部;也就是说,此软件会将第二数据组之左半部放置于数据随机存取存储器122之栏N/2至(3N/4)-1,而将第二资料组之右半部放置于数据随机存取存储器122之栏N/4至(N/2)-1,如此适当的权重值就可用于这些资料组。在另一实施例中,控制逻辑7399系用以在控制信号713上产生数值,以控制权重多路复用寄存器705以硬件方式执行此互换。
[0712] 此外,在图87至图90所描述之实施例中,系将位于神经处理单元顶部与底部列中间处之特殊神经处理单元相连,以利于交替分割旋转器模式之运作,也就是神经处理单元3N/4之输入7204连接至神经处理单元(N/4)-1之输出 209,以及神经处理单元N/4之输入
7204连接至神经处理单元(3N/4)-1之输出 209,不过,本发明并不限于此,其他具有特殊神经处理单元采用以下所述之连接方式所概括的实施例,亦属于本发明之范围:神经处理单元K之输入7204系连接神经处理单元K+N/2-1之输出209,其中,K介于0与N/2-1之间,以及,神经处理单元L之输入7204系连接神经处理单元L-N/2-1之输出209,其中,L 介于N/2与N-1之间,并且L=K+N/2。当K是N/4以外之其他数值(因而L是 3N/4以外之其他数值,亦即不同于图87至图90之实施例)时,可采用不同之实体配置使神经处理单元K与神经处理单元K+N/
2-1实体相邻,并使神经处理单元K与神经处理单元L-N/2-1实体相邻。在此实施例中,会包含有额外的折迭或弯折。较佳地,随机存取存储器122/124之设置,以及自动设计工具对这些神经处理单元126进行之设置与布线,系透过最小化形成旋转器之神经处理单元126间以及随机存取存储器122/124与神经处理单元126间之导线路径,以优化时序。在一实施例中,随机存取存储器122/124系分成四个部分,而非两个部分,举例来说,这四个部分可设置于神经处理单元阵列126之四边。
[0713] 现在请参照图91,显示一方块图,描述本发明另一实施例之部分神经网络单元121之实体配置,此实施例系将神经处理单元阵列126分割为四个旋转器。图91类似于图90,其差异点如下所述。在图91中并未呈现数据随机存取存储器122与权重随机存取存储器124。神经处理单元3584 系连接至神经处理单元511,神经处理单元512系连接至神经处理单元
3583,神经处理单元1536系连接至神经处理单元2559,并且神经处理单元2560系连接至神经处理单元1535。进一步来说,虽然未见于图90,神经处理单元511 之多路复用寄存器208之输出209系连接至神经处理单元3584之输入7204,神经处理单元3583之多路复用寄存器
208之输出209系连接至神经处理单元512 之输入7204,神经处理单元2559之多路复用寄存器208之输出209系连接至神经处理单元1536之输入7204,并且神经处理单元1535之多路复用寄存器208 之输出209系连接至神经处理单元2560之输入7204。此链接方式可使神经处理单元阵列126在普通模式下作为单一个4096个字之旋转器进行运作,或是如图90所示,在交替分割旋转器模式下作为两个2048个字之旋转器进行运作,或是在一第二交替分割旋转器模式下作为四个1024个字之旋转器进行运作,这四个旋转器表示为旋转器0,旋转器1,旋转器2与旋转器3。如图中所示,旋转器0包含神经处理单元0至511以及3584至4095,旋转器1包含神经处理单元512至1023以及3072至3583,旋转器2包含神经处理单元1024至1535以及
2560至3071,而旋转器3包含神经处理单元1526至2559。此神经处理单元阵列126之循环结构会使各个神经处理单元J实体相邻于其逻辑相邻之神经处理单元J-1,使神经处理单元
3N/4(例如神经处理单元3072)实体相邻于神经处理单元(N/4)-1(例如神经处理单元
1023),使神经处理单元N/4(例如神经处理单元1024)实体相邻于神经处理单元(3N/4)-1(例如神经处理单元3071),如同图90之实施例,不过,也会使神经处理单元7N/8(例如神经处理单元 3584)实体相邻于神经处理单元(N/8)-1(例如神经处理单元511),使神经处理单元5N/8(例如神经处理单元2560)实体相邻于神经处理单元(3N/8)-1(例如神经处理单元
1535),使神经处理单元3N/8(例如神经处理单元1536)实体相邻于神经处理单元(5N/8)-1(例如神经处理单元2559),使神经处理单元N/8(例如神经处理单元512)实体相邻于神经处理单元(7N/8)-1(例如神经处理单元 3583)。
[0714] 惟以上所述者,仅为本发明之较佳实施例而已,当不能以此限定本发明实施之范围,即大凡依本发明申请专利范围及发明说明内容所作之简单的等效变化与修饰,皆仍属本发明专利涵盖之范围内。举例来说,软件可以执行本发明所述之装置与方法的功能、制造、形塑、仿真、描述以及/或测试等。这可由一般的程序语言(如C、C++)、硬件描述语言(HDL)包含Verilog HDL,VHDL等,或是其他既有程序来达成。此软件可以设置于任何已知的计算机可利用媒介,如磁带、半导体、磁盘、光盘(如CD-ROM、DVD-ROM等)、网络接线、无线或是其他通讯媒介。此处描述之装置与方法的实施例可被包含于一半导体智财核心,例如一微处理核心(如以硬件描述语言的实施方式)并且透过集成电路的制作转换为硬件。此外,本文所描述之装置与方法亦可包含硬件与软件之结合。因此,本文所述的任何实施例,并非用以限定本发明之范围。此外,本发明可应用于一般通用计算机之微处理器装置。最后,所属技术领域具有通常知识者利用本发明所揭露的观念与实施例作为基础,来设计并调整出不同的结构已达成相同的目的,亦不超出本发明之范围。
[0715] 附图标记
[0716] 100                            处理器
[0717] 101                            指令攫取单元
[0718] 102                            指令快取
[0719] 103                            架构指令
[0720] 104                            指令转译器
[0721] 105                            微指令
[0722] 106                            重命名单元
[0723] 108                            保留站
[0724] 112                            其他执行单元
[0725] 114                            存储器子系统
[0726] 116                            通用寄存器
[0727] 118                            媒体寄存器
[0728] 121                            神经网络单元
[0729] 122                            数据随机存取存储器
[0730] 124                            权重随机存取存储器
[0731] 126                            神经处理单元
[0732] 127                            控制与状态寄存器
[0733] 128                            序列发生器
[0734] 129                            程序存储器
[0735] 123,125,131                    存储器地址
[0736] 133,215,133A,133B,215A,215B    结果
[0737] 202                            累加器
[0738] 204                            算术逻辑单元
[0739] 203,209,217,203A,203B,209A,    输出
[0740] 209B,217A,217B
[0741] 205,205A,205B                  寄存器
[0742] 206,207,211,1811,206A,206B,    输入
[0743] 207A,207B,211A,211B,1811A,
[0744] 1811B,711
[0745] 208,705,208A,208B              多路复用寄存器
[0746] 213,713,803                    控制输入
[0747] 212                            启动函数单元
[0748] 242                            乘法器
[0749] 244                            加法器
[0750] 246,246A,246B                  乘积
[0751] 802                            多路复用器
[0752] 1104                           列缓冲器
[0753] 1112                           启动函数单元
[0754] 1400                           MTNN指令
[0755] 1500                           MFNN指令
[0756] 1432,1532                      函数
[0757] 1402,1502                      执行码字段
[0758] 1404                           src1字段
[0759] 1406                           src2字段
[0760] 1408,1508                      gpr字段
[0761] 1412,1512                      立即字段
[0762] 1422,1522                      地址
[0763] 1424,1426,1524                 数据块
[0764] 1428,1528                      选定列
[0765] 1434                           控制逻辑
[0766] 1504                           dst字段
[0767] 1602                           读取埠
[0768] 1604                           写入埠
[0769] 1606                           存储器阵列
[0770] 1702                           埠
[0771] 1704                           缓冲器
[0772] 1898                           操作数选择逻辑
[0773] 1896A                          宽多路复用器
[0774] 1896B                          窄多路复用器
[0775] 242A                           宽乘法器
[0776] 242B                           窄乘法器
[0777] 244A                           宽加法器
[0778] 244B                           窄加法器
[0779] 204A                           宽算术逻辑单元
[0780] 204B                           窄算术逻辑单元
[0781] 202A                           宽累加器
[0782] 202B                           窄累加器
[0783] 212A                           宽启动函数单元
[0784] 212B                           窄启动函数单元
[0785] 2402                           卷积核
[0786] 2404                           数据阵列
[0787] 2406A,2406B                    资料矩阵
[0788] 2602,2604,2606,2608,2902,2912, 字段
[0789] 2914,2922,2924,2926,2932,2934,
[0790] 2942,2944,2952,2954,2956,2923,
[0791] 2962,2964
[0792] 3003                           随机位来源
[0793] 3005                           随机位
[0794] 3002                           正类型转换器与输出二维点对准器
[0795] 3004                           舍入器
[0796] 3006                           多路复用器
[0797] 3008                           标准尺寸压缩器与饱和器
[0798] 3012                           位选择与饱和器
[0799] 3018                           校正器
[0800] 3014                           倒数乘法器
[0801] 3016                           向右移位器
[0802] 3028                           标准尺寸传递值
[0803] 3022                           双曲正切模块
[0804] 3024                           S型模块
[0805] 3026                           软加模块
[0806] 3032                           多路复用器
[0807] 3034                           符号恢复器
[0808] 3036                           尺寸转换器与饱和器
[0809] 3037                           多路复用器
[0810] 3038                           输出寄存器
[0811] 3402                           多路复用器
[0812] 3401                           神经处理单元管线级
[0813] 3404                           译码器
[0814] 3412,3414,3418                 微运算
[0815] 3416                           微指令
[0816] 3422                           模式指针
[0817] 3502                           时频产生逻辑
[0818] 3504                           时频降低逻辑
[0819] 3514                           接口逻辑
[0820] 3522                           数据随机存取存储器缓冲
[0821] 3524                           权重随机存取存储器缓冲
[0822] 3512                           缓和指标
[0823] 3802                           程序计数器
[0824] 3804                           循环计数器
[0825] 3806                           执行次数计数器
[0826] 3912,3914,3916                 字段
[0827] 4901                           神经处理单元群组
[0828] 4903                           屏蔽
[0829] 4905,4907,5599                 输入
[0830] 5800                           神经网络
[0831] 5802                           输入
[0832] 5804                           滤波器
[0833] 5808                           输出
[0834] 5900                           装置
[0835] 5902                           输入方块
[0836] 5904                           滤波器方块
[0837] 5906                           神经处理单元方块\
[0838] 5908                           输出方块
[0839] 6000,6300,6500,6700,6900       虚拟程序代码
[0840] 6101                           输入方块群组
[0841] 6102                           滤波器方块群组
[0842] 6104                           间隙滤波器方块群组
[0843] 6209                           滤波器方块群组之纵向部分
[0844] 6215                           输入方块群组之纵向部分
[0845] 6401                           输入方块群组之配置
[0846] 6402                           滤波器方块群组之配置
[0847] 6602                           滤波器方块群组之配置
[0848] 6802                           滤波器方块群组之配置
[0849] 720X,721X,7202,7204,7206,7212  额外输入
[0850] 7399                           控制逻辑
[0851] 7602                           写入多路复用器
[0852] 7604                           输出
[0853] 7606,713                       控制信号
[0854] 7497                           额外位
[0855] 7498                           额外位。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈