来自存储器元件网格的神经网络权重分发的制作方法

文档序号:32255718发布日期:2022-11-19 07:56阅读:39来源:国知局
来自存储器元件网格的神经网络权重分发的制作方法
来自存储器元件网格的神经网络权重分发


背景技术:

1.本公开的实施例涉及神经网络处理,并且更具体地,涉及来自存储器元件的网格的神经网络权重分发。


技术实现要素:

2.根据本公开的实施例,提供了用于计算神经激活的神经推理芯片。在各种实施方式中,神经推理芯片包括至少一个神经核、存储器阵列、指令缓冲器和指令存储器。存储器阵列可操作地连接到至少一个神经核,存储器阵列包括多个元件,每个元件包括存储器和水平缓冲器,存储器阵列的每个元件的水平缓冲器与存储器阵列的另一个元件的水平缓冲器或至少一个神经核通信。指令缓冲器与存储器阵列通信,指令缓冲器具有对应于存储器阵列的多个元件中的每个元件的位置。指令存储器与指令缓冲器通信。指令存储器被适配为向指令缓冲器提供至少一个指令。指令缓冲器被适配为在指令缓冲器中的位置之间前进至少一个指令。指令缓冲器被适配为当存储器阵列的多个元件中的至少一个元件的存储器包含与至少一个指令相关联的数据时,从存储器阵列的多个元件中的至少一个元件在指令缓冲器中的相关联的位置向该至少一个元件提供该至少一个指令。存储器阵列的多个元件中的每个元件都被适配为响应于来自指令缓冲器的相关联的指令的到达,从其存储器向其水平缓冲器提供数据块。存储器阵列的每个元件的水平缓冲器被适配为向存储器阵列的另一个元件的水平缓冲器或向至少一个神经核提供数据块。
3.优选地,本发明提供了一种神经推理芯片,其中:指令缓冲器被适配为以每周期一个位置的速率在指令缓冲器中的位置之间前进指令,存储器阵列的每个元件的水平缓冲器被适配为以每周期一个数据块的速率向存储器阵列的另一个元件的水平缓冲器或向至少一个神经核提供数据块。
4.优选地,本发明提供了一种神经推理芯片,其包括神经核的阵列,该神经核的阵列包括至少一个神经核并具有多行。
5.优选地,本发明提供了一种神经推理芯片,其中存储器阵列是一维的,存储器阵列的多个元件被排列成一行和多列。
6.优选地,本发明提供了一种神经推理芯片,其中存储器阵列是二维的,存储器阵列的多个元件被排列成多行和多列。
7.优选地,本发明提供了一种神经推理芯片,其中存储器阵列的每个元件还包括垂直缓冲器,存储器阵列的每个元件的垂直缓冲器与存储器阵列的另一个元件的垂直缓冲器通信。
8.优选地,本发明提供了一种神经推理芯片,其中:存储器阵列的多个元件中的每个元件被适配为响应于来自指令缓冲器的相关联的指令的到达,从其存储器向其垂直缓冲器提供数据块,存储器阵列的多个元件中的每个元件被适配为从其垂直缓冲器向其水平缓冲器提供数据块,存储器阵列的每个元件的垂直缓冲器被适配为向存储器阵列的另一个元件的垂直缓冲器提供数据块。
9.优选地,本发明提供了一种神经推理芯片,其中:存储器阵列的每个元件的水平缓冲器被适配为以每周期一个数据块的速率向存储器阵列的另一个元件的水平缓冲器或至少一个神经核提供数据块,存储器阵列的每个元件的垂直缓冲器被适配为以每周期一个数据块的速率向存储器阵列的另一个元件的垂直缓冲器提供数据块。
10.优选地,本发明提供了一种神经推理芯片,其中存储器阵列的每个元件还包括暂留缓冲器(layover buffer),存储器阵列的每个元件的暂留缓冲器与存储器阵列的该元件的水平缓冲器和垂直缓冲器通信。
11.优选地,本发明提供了一种神经推理芯片,其中:存储器阵列的多个元件中的每个被适配为响应于来自指令缓冲器的相关联的指令的到达而从其存储器向其垂直缓冲器提供数据块,存储器阵列的多个元件中的每个元件被适配为从其垂直缓冲器向其暂留缓冲器提供数据块,存储器阵列的多个元件中的每个元件被适配为从其暂留缓冲器向其水平缓冲器提供数据块,存储器阵列的每个元件的垂直缓冲器被适配为向存储器阵列的另一个元件的垂直缓冲器提供数据块。
12.优选地,本发明提供了一种神经推理芯片,其中:存储器阵列的每个元件的水平缓冲器被适配为以每周期一个数据块的速率向存储器阵列的另一个元件的水平缓冲器或至少一个神经核提供数据块,存储器阵列的每个元件的垂直缓冲器被适配为以每周期一个数据块的速率向存储器阵列的另一个元件的垂直缓冲器提供数据块,存储器阵列的每个元件的暂留缓冲器被适配为以每周期一个数据块的速率向存储器阵列的该元件的水平缓冲器提供数据块。
13.优选地,本发明提供了一种神经推理芯片,其中:指令存储器被适配为每周期向指令缓冲器提供多个指令,指令缓冲器的每个位置被适配为存储多个指令,并且指令缓冲器被适配为每周期在指令缓冲器中的位置之间前进多个指令。
14.根据本公开的实施例,提供了用于计算神经激活的神经推理芯片。在各种实施方式中,神经推理芯片包括至少一个神经核、存储器阵列、多个指令缓冲器和多个指令存储器。存储器阵列可操作地耦合到至少一个神经核,存储器阵列包括多个元件,每个元件包括存储器、水平缓冲器和垂直缓冲器,存储器阵列的每个元件的水平缓冲器与存储器阵列的另一个元件的水平缓冲器通信,或者通信到至少一个神经核,并且存储器阵列的每个元件的垂直缓冲器与存储器阵列的另一个元件的垂直缓冲器连接。该多个指令缓冲器与存储器阵列通信,多个指令缓冲器中的每个指令缓冲器具有与存储器阵列的多个元件中的一个元件对应的位置。多个指令存储器各自与多个指令缓冲器中的一个多个指令缓冲器通信。每个指令存储器被适配为向其指令缓冲器提供至少一个指令。每个指令缓冲器被适配为在该指令缓冲器中的位置之间前进至少一个指令。每个指令缓冲器被适配为当存储器阵列的多个元件中的至少一个元件的存储器包含与至少一个指令相关联的数据时,从存储器阵列的多个元件中的该至少一个元件在指令缓冲器中的相关联的位置向该至少一个元件提供该至少一个指令。存储器阵列的多个元件中的每个元件都被适配为响应于来自指令缓冲器的相关联的指令的到达,从其存储器向其垂直缓冲器提供数据块。存储器阵列的多个元件中的每个元件都被适配为从其垂直缓冲器向其水平缓冲器提供数据块。存储器阵列的每个元件的垂直缓冲器被适配为向存储器阵列的另一个元件的垂直缓冲器提供数据块。存储器阵列的每个元件的水平缓冲器被适配为向存储器阵列的另一个元件的水平缓冲器或向至少
一个神经核提供数据块。
15.根据本公开的实施例,提供了用于计算神经激活的方法和计算机程序产品。从指令存储器向指令缓冲器提供至少一个指令。该至少一个指令在指令缓冲器中的位置之间前进。当存储器阵列的多个元件中的至少一个元件的存储器包含与至少一个指令相关联的数据时,从指令缓冲器向存储器阵列的多个元件中的该至少一个元件提供至少一个指令。存储器阵列包括多个元件,每个元件包括存储器和水平缓冲器,存储器阵列的每个元件的水平缓冲器与存储器阵列的另一个元件的水平缓冲器通信或与至少一个神经核通信。响应于来自指令缓冲器的至少一个指令的到达,从存储器向多个元件中的至少一个元件的水平缓冲器提供数据块。将数据块从多个元件中的至少一个的水平缓冲器提供到存储器阵列的另一个元件的水平缓冲器或至少一个神经核。
16.优选地,本发明提供了一种神经推理芯片,其中:每个指令缓冲器被适配为以每周期一个位置的速率在该指令缓冲器中的位置之间前进指令,存储器阵列的每个元件的水平缓冲器被适配为以每周期一个数据块的速率向存储器阵列的另一个元件的水平缓冲器或至少一个神经核提供数据块。
17.优选地,本发明提供了一种神经推理芯片,其包括神经核的阵列,该神经核的阵列包括至少一个神经核并具有多行。
18.优选地,本发明提供了一种神经推理芯片,其中存储器阵列是二维的,存储器阵列的多个元件被排列成多行和多列。
19.优选地,本发明提供了一种神经推理芯片,其中存储器阵列的每个元件还包括垂直缓冲器,存储器阵列的每个元件的垂直缓冲器与存储器阵列的另一个元件的垂直缓冲器通信。
20.优选地,本发明提供了一种神经推理芯片,其中:存储器阵列的多个元件中的每个元件被适配为响应于来自指令缓冲器的相关联的指令的到达,从其存储器向其垂直缓冲器提供数据块,存储器阵列的多个元件中的每个元件被适配为从其垂直缓冲器向其水平缓冲器提供数据块,存储器阵列的每个元件的垂直缓冲器被适配为向存储器阵列的另一个元件的垂直缓冲器提供数据块。
21.优选地,本发明提供了一种神经推理,其中:存储器阵列的每个元件的水平缓冲器被适配为以每周期一个数据块的速率向存储器阵列的另一个元件的水平缓冲器或至少一个神经核提供数据块,存储器阵列的每个元件的垂直缓冲器被适配为以每周期一个数据块的速率向存储器阵列的另一个元件的垂直缓冲器提供数据块。
22.优选地,本发明提供了一种神经推理芯片,其中存储器阵列的每个元件还包括暂留缓冲器,存储器阵列的每个元件的暂留缓冲器与存储器阵列的该元件的水平缓冲器和垂直缓冲器通信。
23.优选地,本发明提供了一种神经推理芯片,其中:存储器阵列的多个元件中的每个元件被适配为响应于来自指令缓冲器的相关联的指令的到达而从其存储器向其垂直缓冲器提供数据块,存储器阵列的多个元件中的每个元件被适配为从其垂直缓冲器向其暂留缓冲器提供数据块,存储器阵列的多个元件中的每个元件被适配为从其暂留缓冲器向其水平缓冲器提供数据块,存储器阵列的每个元件的垂直缓冲器被适配为向存储器阵列的另一个元件的垂直缓冲器提供数据块。
24.优选地,本发明提供了一种神经推理芯片,其中:存储器阵列的每个元件的水平缓冲器被适配为以每周期一个数据块的速率向存储器阵列的另一个元件的水平缓冲器或至少一个神经核提供数据块,存储器阵列的每个元件的垂直缓冲器被适配为以每周期一个数据块的速率向存储器阵列的另一个元件的垂直缓冲器提供数据块,存储器阵列的每个元件的暂留缓冲器被适配为以每周期一个数据块的速率向存储器阵列的该元件的水平缓冲器提供数据块。
25.优选地,本发明提供了一种神经推理芯片,其中:指令存储器被适配为每周期向指令缓冲器提供多个指令,指令缓冲器的每个位置被适配为存储多个指令,并且指令缓冲器被适配为每周期在指令缓冲器中的位置之间前进多个指令。
26.从另一方面来看,本发明提供了从指令存储器向指令缓冲器提供至少一个指令;在指令缓冲器中的位置之间前进至少一个指令;当存储器阵列的多个元件中的至少一个元件的存储器包含与至少一个指令相关联的数据时,将至少一个指令从指令缓冲器提供给多个元件中的该至少一个元件,存储器阵列包括多个元件,每个元件包括存储器和水平缓冲器,存储器阵列的每个元件的水平缓冲器与存储器阵列的另一个元件的水平缓冲器通信或者与至少一个神经核通信,响应于来自指令缓冲器的至少一个指令的到达,从存储器向多个元件中的该至少一个元件的水平缓冲器提供数据块;从多个元件中的该至少一个元件的水平缓冲器向存储器阵列的另一个元件的水平缓冲器或至少一个神经核提供数据块。
附图说明
27.图1示出了根据本公开的实施例的神经核。
28.图2示出了根据本公开的实施例的示例性推理处理单元(ipu)。
29.图3示出了根据本公开的实施例的多核推理处理单元(ipu)。
30.图4示出了根据本公开的实施例的神经核和相关联的网络。
31.图5是根据本公开的实施例的来自全局存储器阵列的数据分发的示意图。
32.图6示出了根据本公开的实施例的具有线性权重存储器阵列的示例性存储器控制器。
33.图7示出了根据本公开的实施例的使用图6的控制器的存储器分发的方法。
34.图8示出了根据本公开的实施例的具有二维权重存储器阵列的示例性存储器控制器。
35.图9示出了根据本公开的实施例的使用图8的控制器的存储器分发的方法。
36.图10示出了根据本公开的实施例的具有二维权重存储器阵列和暂留缓冲器的示例性存储器控制器。
37.图11示出了根据本公开的实施例的包括具有二维权重存储器阵列的多个存储器控制器的示例性配置。
38.图12a-图12i示出了根据本公开的实施例的利用线性权重存储器阵列的指令和顺序数据的分发。
39.图13a-图13i示出了根据本公开的实施例的利用线性权重存储器阵列的指令和随机访问的数据的分发。
40.图14a-图14m示出了根据本公开的实施例的利用二维权重存储器阵列的指令和顺
序数据的分发。
41.图15a-图15m示出了根据本公开的实施例的利用二维权重存储器阵列的指令和随机访问数据的分发。
42.图16a-图16k示出了根据本公开的实施例的利用二维存储器阵列和暂留缓冲器的指令和数据的分发。
43.图17示出了根据本公开的实施例的用于计算神经激活的方法。
44.图18描绘了根据本公开的实施例的计算节点。
具体实施方式
45.人工神经元是一种数据函数,该数学函数的输出是其输入的线性组合的非线性函数。如果一个神经元的输出是另一个神经元的输入,则这两个神经元是连接的。权重是对一个神经元的输出与另一个神经元的输入之间的连接的强度进行编码的标量值。
46.神经元通过将非线性激活函数应用于其输入的加权和来计算其输出,这称为激活。加权和是通过将每个输入乘以对应的权重并累加乘积而计算的中间结果。部分和是输入的子集的加权和。所有输入的加权和可以通过累加一个或多个部分和而分阶段计算。
47.神经网络是一个或多个神经元的集合。神经网络通常被分为神经元的组,称为层。层是一个或多个神经元的集合,该一个或多个神经元全部从相同层接收输入并且全部向相同层传送输出,并且通常执行类似的功能。输入层是从神经网络外部的源接收输入的层。输出层是向神经网络外部的目标传送输出的层。所有其它层是中间处理层。多层神经网络是具有多于一层的神经网络。深度神经网络是具有多个层的多层神经网络。
48.张量(tensor)是数值的多维阵列。张量块(tensor block)是张量中的元素的连续子阵列。
49.每个神经网络层与参数张量v、权重张量w、输入数据张量x、输出数据张量y以及中间数据张量z相关联。参数张量包含用于控制层中的控制神经元激活函数σ的所有参数。权重张量包含将输入连接到层的所有权重。输入数据张量包含该层消耗的作为输入的所有数据。输出数据张量包含该层计算的作为输出的所有数据。中间数据张量包含该层产生的作为中间计算的任何数据,例如部分和。
50.层的数据张量(输入、输出和中间)可以是三维的,其中前两个维度可以解释为对空间位置进行编码,第三个维度可以解释为对不同特征进行编码。例如,当数据张量表示彩色图像时,前两个维度对图像内的垂直坐标和水平坐标进行编码,第三个维度对每个位置的颜色进行编码。输入数据张量x的每个元素可以通过单独的权重连接到每个神经元,因此权重张量w通常具有6个维度,将输入数据张量的3个维度(输入行a、输入列b、输入特征c)与输出数据张量的3个维度(输出行i、输出列j、输出特征k)连接起来。中间数据张量z具有与输出数据张量y相同的形状。参数张量v将3个输出数据张量维度与索引激活函数σ的参数的附加维度o连接起来。在一些实施例中,激活函数σ不需要附加参数,在这种情况下附加维度是不必要的。然而,在一些实施例中,激活函数σ需要出现在维度o中的至少一个附加参数。
51.层的输出数据张量y的元素可以如等式1中计算,其中神经元激活函数σ由激活函数参数v[i,j,k,:]的向量配置,并且加权和z[i,j,k]可以如等式2中计算。
[0052]
y[i,j,k]=σ(v[i,j,k,:];z[i,j,k])
[0053]
等式1
[0054][0055]
为了简化符号,等式2中的加权和可以称为输出,其等效于使用线性激活函数y[i,j,k]=σ(z[i,j,k])=z[i,j,k],应当理解,当使用不同的激活函数时,相同的陈述适当而不失一般性。
[0056]
在各种实施例中,如上所述的输出数据张量的计算被分解成更小的问题。然后,可以在一个或多个神经核上,或者在常规多核系统的一个或多个核上并行地求解每个问题。
[0057]
从上面可以明显看出,神经网络是并行结构。给定层中的神经元接收来自一个或多个层的输入x或其他输入,该输入x具有元素xi。每个神经元基于输入和权重w来计算其状态y∈y,该权重w具有元素wi。在各种实施例中,输入的加权和由偏差b调整,然后结果被传递到非线性f(
·
)。例如,单个神经元激活可以表示为y=f(b+∑xiwi)。
[0058]
因为给定层中的所有神经元都从相同层接收输入并且独立地计算它们的输出,所以神经元激活可以被并行地计算。由于总体神经网络的此方面,在并行分发的核中执行计算加速了总体计算。此外,在每个核向量内,操作可以被并行计算。即使具有循环输入,例如当层投影回到其自身时,所有神经元仍然同时更新。实际上,循环连接被延迟以与该层的后续输入对准。
[0059]
现在参考图1,描绘了根据本公开实施例的神经核。神经核100是计算一个块的输出张量的的可平铺计算单元。神经核100具有m个输入和n个输出。在各种实施例中,m=n。为了计算输出张量块,神经核将m
×
1输入张量块101与m
×
n权重张量块102相乘,并将乘积累加成加权和,该加权和被存储在1
×
n中间张量块103中。o
×
n参数张量块包含o个参数,这些参数指定n个神经元激活函数中的每个,这些函数被应用于中间张量块103以产生1
×
n输出张量块105。
[0060]
多个神经核可以平铺在神经核阵列中。在一些实施例中,阵列是2维的。
[0061]
神经网络模型是一组常数,其共同指定由神经网络执行的整个计算,包括神经元之间的连接图以及每个神经元的权重参数和激活函数参数。训练是修改神经网络模型以执行期望的函数的过程。推理是将神经网络应用于输入以产生输出而不修改神经网络模型的过程。
[0062]
推理处理单元是执行神经网络推理的一类处理器。神经推理芯片是推理处理单元的特定物理实例。
[0063]
参考图2,根据本公开的实施例示出了示例性推理处理单元(ipu)。ipu 200包括用于神经网络模型的存储器201。如上所述,神经网络模型可以包括要计算的神经网络的突触权重。ipu 200包括激活存储器202,该激活存储器202可以是暂时的。激活存储器202可以被划分成输入区域和输出区域,并且存储神经元激活以供处理。ipu 200包括神经计算单元203,其加载有来自模型存储器201的神经网络模型。在每个计算步骤之前从激活存储器202提供输入激活。来自神经计算单元203的输出被写回到激活存储器202,以在同一个或另一个神经计算单元上处理。
[0064]
在各种实施例中,微引擎204被包括在ipu 200中。在这样的实施例中,ipu中的所有操作都由微引擎指导。如下所述,在各种实施例中可以提供中央和/或分发式微引擎。全局微引擎可被称为芯片微引擎,而局部微引擎可被称为核微引擎或局部控制器。在各种实施例中,微引擎包括一个或多个微引擎、微控制器、状态机、cpu或其他控制器。
[0065]
参考图3,示出了根据本公开的实施例的多核推理处理单元(ipu)。ipu 300包括用于神经网络模型和指令的存储器301。在一些实施例中,存储器301被划分成权重部分311和指令部分312。如上所述,神经网络模型可以包括要计算的神经网络的突触权重。ipu 300包括激活存储器302,该激活存储器302可以是暂时的。激活存储器302可以被划分成输入区域和输出区域,并且存储神经元激活以供处理。
[0066]
ipu 300包括神经核303的阵列306。每个核303包括计算单元333,其加载有来自模型存储器301的神经网络模型,并且可操作以执行向量计算。每个核还包括局部激活存储器332。在每个计算步骤之前从局部激活存储器332提供输入激活。来自计算单元333的输出被写回到激活存储器332以便在同一个或另一个计算单元上处理。
[0067]
ipu 300包括一个或多个片上网络(noc)305。在一些实施例中,部分和noc 351互连核303并在它们之间传输部分和。在一些实施例中,单独的参数分发noc 352将核303连接到存储器301,以用于将权重和指令分发到核303。将理解,noc 351和352的各种配置适当于根据本公开的使用。例如,可以使用广播网络、行广播网络、树形网络和交换网络。
[0068]
在各种实施例中,全局微引擎304被包括在ipu 300中。在各种实施例中,本地核控制器334被包括在每个核303上。在这样的实施例中,全局微引擎(芯片微引擎)和局部核控制器(核微引擎)协作地指导操作。具体地,在361,通过全局微引擎304将计算指令从模型存储器301的指令部分312加载到每个核303上的核控制器334。在362,参数(例如,神经网络/突触权重)被全局微引擎304从模型存储器301的权重部分311加载到每个核303上的神经计算单元333。在363,通过本地核控制器334,将神经网络激活数据从激活本地激活存储器332加载到每个核303上的神经计算单元333。如上所述,激活被提供给由模型定义的特定神经网络的神经元,并且可以源自同一个或另一个神经计算单元,或者源自系统外部。在364,神经计算单元333执行该计算以生成如由本地核控制器334指导的输出神经元激活。具体地,该计算包括将输入突触权重应用于输入激活。应当理解,各种方法可用于执行这种计算,包括在硅树状突(dendrite)中以及向量乘法单元。在365,计算结果按照本地核控制器334的指示存储在本地激活存储器332中。如上所述,这些阶段可以是流水线的,以便在每个核上提供神经计算单元的有效使用。还应当理解,根据给定神经网络的要求,输入和输出可以从局部激活存储器332传输到全局激活存储器302。
[0069]
因此,本公开提供了推理处理单元(ipu)中的操作的运行时控制。在一些实施例中,微引擎是集中式(单个微引擎)。在一些实施例中,ipu计算是分发式的(由核阵列执行)。在一些实施例中,操作的运行时间控制是分级的—中央微引擎和分发式微引擎都参与。
[0070]
微引擎或多个微引擎指导ipu中所有操作的执行。每个微引擎指令对应于几个子操作(例如,地址生成、加载、计算、存储等)。核微代码在核微引擎(例如,334)上运行。在本地计算的情况下,核微代码包括执行完整的单张量操作的指令。例如权重张量和数据张量之间的卷积。在分发式计算的情况下,核微代码包括对本地存储的数据张量的子集(以及部分和)执行单张量操作的指令。芯片微代码在芯片微引擎(例如304)上运行。微代码包括执
行神经网络中的所有张量操作的指令。
[0071]
现在参考图4,根据本公开的实施例示出了示例性神经核和相关联的网络。可以如参考图1所描述的方式体现的核401通过网络402

404与附加核相互连接。在该实施例中,网络402负责分发权重和/或指令,网络403负责分发部分和,并且网络404负责分发激活。然而,将理解,本公开的各种实施例可以组合这些网络,或者进一步将它们分离成多个附加网络。
[0072]
输入激活(x)是经由激活网络404从核外到激活存储器405的核401。层指令被分发到核401,从核外经由权重/指令网络402到指令存储器406。层权重(w)和/或参数被分发到核401,从核外经由权重/指令网络402到权重存储器407和/或参数存储器408。
[0073]
向量矩阵乘法(vmm)单元409从权重存储器407读取权重矩阵(w)。向量矩阵乘法(vmm)单元409从激活存储器405读取激活向量(v)。然后,向量矩阵乘法(vmm)单元409计算向量矩阵乘法并将结果提供给向量单元410。向量单元410从部分和存储器411读取附加部分和,并经由部分和网络403从核外接收附加部分和。向量-向量单元410根据这些源部分和计算向量-向量运算。例如,可以依次对各个部分和求和。将所得到的目标部分和写入部分和存储器411,经由部分和网络403传送到核外,和/或反馈以供向量-向量单元410进一步处理。
[0074]
在针对给定层的输入的所有计算完成之后,来自向量-向量单元410的部分和结果被提供给激活单元412以用于输出激活的计算。激活向量(y)被写入激活存储器405。层激活(包括写入激活存储器的结果)经由激活网络404从激活存储器405跨核重新分发。在接收时,它们被写入到每个接收核的本地激活存储器。在完成对给定帧的处理时,从激活存储器405读取输出激活,并经由网络404将其传送到核外。
[0075]
因此,在操作中,核控制微引擎(例如,413)协调核的数据移动和计算。微引擎发出读取激活存储器地址操作,以将输入激活块加载到向量矩阵乘法单元中。微引擎发出读取权重存储器地址操作,以将权重块加载到向量矩阵乘法单元中。微引擎向向量-矩阵乘法单元发出计算操作,使得向量-矩阵乘法单元计算部分和块。
[0076]
微引擎发出部分和读/写存储器地址操作、向量计算操作或部分和通信操作中的一个或多个,以便进行以下操作中的一个或多个:从部分和源读取部分和数据;使用部分和算术单元计算;或将部分和数据写入部分和目标。将部分和数据写入部分和目标可以包括经由部分和网络接口与核的外部通信,或者将部分和数据传送到激活算术单元。
[0077]
微引擎发出激活函数计算操作,使得激活函数算术单元计算输出激活块。微引擎发出写激活存储器地址,输出激活块经由激活存储器接口被写入激活存储器。
[0078]
因此,为给定核定义了各种源、目标、地址类型、计算类型和控制组件。
[0079]
向量-向量单元410的源包括向量矩阵乘法(vmm)单元409、来自参数存储器408的常数、部分和存储器411、来自先前周期的部分和结果(tgt部分和)、以及部分求和网络403。
[0080]
向量-向量单元410的目标包括部分和存储器411、后续周期的部分和结果(src部分和)、激活单元412和部分和网络403。
[0081]
因此,给定指令可以从激活存储器405读取或写入、从权重存储器407读取或从部分和存储器411读取或写入。由核执行的计算操作包括vmm单元409的向量矩阵乘法、向量-向量单元410的向量(部分和)操作以及激活单元412的激活功能。
[0082]
控制操作包括更新程序计数器和循环和/或顺序计数器。
[0083]
因此,发出存储器操作以从权重存储器中的地址读取权重,从参数存储器中的地址读取参数,从激活存储器中的地址读取激活,以及向部分和存储器中的地址读取/写入部分和。发出计算操作以执行向量矩阵乘法、向量操作和激活函数。发出通信操作以选择向量-向量操作数、在部分和网络上路由消息、以及选择部分和目标。通过指定微引擎中的程序计数器、循环计数器和顺序计数器的控制操作来控制跨层循环输出和跨层循环输入。
[0084]
现在参考图5,提供了根据本公开的实施例的来自全局存储器阵列的数据分发的示意图。全局存储器阵列501包括多个元件502,每个元件502包括存储器元件504和缓冲器503。经由网络507从全局阵列501向核506的阵列505提供权重和指令。以上关于图3讨论了核303的示例性配置,图3中的存储器303可以如结合全局存储器阵列501所描述的那样来实现,其中核阵列306对应于505。
[0085]
如上所述,用于神经推理的多核架构在计算能力方面提供了显著的优点。然而,如果神经网络权重和参数没有按时提供给计算核,则核不能执行任何有用的计算。结果,神经芯片的性能可能受到将神经网络权重和参数递送到芯片上的计算核的能力的限制。与诸如动态随机存取存储器(dram)或高带宽存储器(hbm)的典型的片外存储器相比,片上存储器大大提高了存储器带宽。此外,片上存储器比片外存储器更节能,从而导致更节能的神经推理系统。在各种实施例中,片上存储器可以包括静态随机存取存储器(sram)或其他嵌入式存储器。然而,以与处理速度相称的速率向核递送神经网络权重仍是挑战。
[0086]
利用卷积神经网络(cnn)可以实现特定的效率。在cnn中,重复使用相同的权重矩阵(有时称为卷积滤波器)。为了最小化所使用的片上存储器的量,优选的是在一个位置中存储给定的权重矩阵而不重复。为了存储大的神经网络,片上存储器的一些实施例由许多存储器元件的集合组成。还将理解,许多核是存储器权重的目标。这导致多对多通信问题(许多存储器元件到许多核)。权重的广播可能产生片上网络(noc)拥塞,并且可能产生许多冲突和流水线停顿,从而导致广播带宽的降级。
[0087]
如上所述,在神经推理芯片的各种实施例中,提供神经推理核的网格以加速神经网络推理。在各种实施例中,提供指令的预调度。神经网络评估涉及规则的计算模式,因此可以在没有任何停顿的情况下预先调度指令以便实现高性能。然而,优选的是,所有神经网络权重被及时地按照预先调度的方式递送至核。如果权重递送网络拥塞并且权重递送停顿,则神经网络评估的预调度失败。
[0088]
本公开提供了一种用于将权重参数从存储器元件网格传递到计算核的网格的无停顿权重传递片上网络。下面首先示出一维方案,然后扩展到二维网格方案。这些方法进一步扩展到支持不同的各种权重分发,例如条带化(其中,核的不同行得到不同的权重)。
[0089]
即使将指令传递到存储器元件和将数据从存储器元件传递到计算核的时间变化,本文描述的方法也无冲突地工作。这些方法寻址可以以任何顺序访问任何列的指令流。新方案消除了所有列同时开始的约束。
[0090]
现在参考图6,根据本公开的实施例示出了具有线性权重存储器阵列的示例性存储器控制器。存储器控制器601包括指令存储器,在此示出为具有四个指令槽611

614。权重存储器阵列602包括多个元件621

624,每个元件包括数据缓冲器625和存储器元件626。指令缓冲器603包括多个元件631

634和634,每个元件对应于权重存储器元件621和621

624中的一个624。如上文关于图5所述,核网格604包括多个核641。
[0091]
参照图7,示出了使用图6的控制器的存储器分发方法。在701,从指令存储器601发出指令。指令沿着指令缓冲器603在元件631

634和634之间前进。当指令到达存储适当数据的列(例如,存储器元件621)时,将数据从存储器(例如,在此示例中为存储器626)读取到数据缓冲器(例如,在此示例中为缓冲器625)。一旦读取,数据就沿着数据缓冲器传播,例如从存储器元件621到622

624。在到达最终元件624之后,该值被传递到核网格604。
[0092]
应当理解,可以从控制器601发出顺序指令,例如每周期发出一个。每个指令沿指令缓冲器603前进的周期的数量与数据沿数据缓冲器(在存储器元件621

624中)前进的周期的数量的总和是恒定的,而不管数据的位置如何。特别地,指令分发的总延迟加上数据分配的总延迟是恒定的。即使在随机接入的情况下,仍然是这种情况。
[0093]
参考图8,根据本公开的实施例示出了具有二维权重存储器阵列的示例性存储器控制器。存储器控制器801包括指令存储器,在此示出为具有四个指令槽811

814。权重存储器阵列802包括多个元件,排列成行和列821

824,每个元件包括数据缓冲器825和存储器元件826。除了数据缓冲器825外,二维情况还包括第二缓冲器827以容纳列内的数据的通信。指令缓冲器803包括多个元件831

834,每个元件对应于一列权重存储器元件821、821

824。如上文关于图5所述,核网格804包括多个核841。
[0094]
参照图9,示出了使用图8的控制器的存储器分发方法。在901,从指令存储器801发出指令。在902,指令在元件831

834之间沿着指令缓冲器803前进。在903,当指令到达存储了适当数据的列(例如,列821)时,将数据从存储器(例如,在该示例中的存储器826)读取到数据缓冲器(例如,在该示例中的缓冲器825)。在904处,一旦读取,数据就沿着缓冲器垂直地(例如,沿列821向下)传播。在905,数据沿着每一行,例如从列821到822

824传播。在906,在到达最后一列824之后,将值递送到核网格804。
[0095]
如在一维情况下,指令分发、垂直分发和水平分发的步骤之间的总延迟是恒定的。特别地,指令分发的延迟周期加上垂直分发的周期加上水平分发的周期的总和是恒定的。此外,将理解,当多个列不按顺序访问时,指令和数据递送的延迟彼此匹配。
[0096]
参考图10,示出了根据本公开的实施例的具有二维权重存储器阵列和暂留缓冲器的示例性存储器控制器。存储器控制器1001包括指令存储器,在此示出为具有四个指令槽1011

1014。这些指令槽被布置在多列中,以允许在一个周期内同时发出多个指令。在该示例中,槽1011和1013存储将在第一周期内发出的指令,而槽1012和1014存储第二周期的指令。权重存储器阵列1002包括多个元件,其以行和列1021

1024排列,每个元件包括数据缓冲器1025和存储器元件1026。除了数据缓冲器1025之外,二维情况还包括第二(垂直)缓冲器1027,以容纳列内的数据的通信。在该示例中,在垂直缓冲器1027和水平缓冲器1025之间还包括暂留缓冲器1028。指令缓冲器1003包括多个元件1031

1034,每个元件对应于一列权重存储器元件1021

1024。每个元件1031

1034可以存储在同一周期期间发出的多个指令。如上文关于图5所述,核网格1004包括多个核1041。
[0097]
在该示例性实施例中,条带化被支持。特别地,能够读取同一列上的多个数据。添加了暂留缓冲器1028来支持读取多个数据和传送数据的条带。向不同的行传送不同的数据在各种情况下是有用的-协作的神经推理核有效地倍增带宽以接收存储器阵列。
[0098]
指令分发、垂直分发、在暂留缓冲器中等待的时间以及水平分发的总时间是恒定
的,而不管源数据存储在哪里以及数据被分发在哪行。通过垂直缓冲器分发数据的最大周期数被确定为垂直分发和在暂留缓冲器中等待的组合时间。这样,所有数据同时从暂留缓冲器出来到水平缓冲器。可以对每个垂直分发的分组分配计数器,该计数器对每个时钟周期进行倒计数。这是确保在同一周期内所有数据从暂留缓冲器传输到水平缓冲器的一种方式。
[0099]
参考图11,根据本公开的实施例示出了包括具有二维权重存储器阵列的多个存储器控制器的示例性配置。存储器控制器1101各自包含指令存储器,此处示出为具有四个指令槽1111

1114。权重存储器阵列1102包括多个元件,其被布置在行和列1121

1124中,每个元件包括数据缓冲器1125和存储器元件1126。除了数据缓冲器1125之外,二维情况还包括第二(垂直)缓冲器1127,以容纳列内的数据通信。存储器阵列1102的每一行具有对应的指令缓冲器1103,其包括多个元件1131

1134,每个元件对应于一列权重存储器元件1121

1124。如上关于图5所述,核网格1104包括多个核1141。
[0100]
在该示例中,每行具有单独的存储器控制器,该存储器控制器具有指令存储器和指令缓冲器。使用这种方法,每个存储器元件物理上位于靠近其对应的指令缓冲器。这使得指令缓冲器能够控制存储器元件而没有附加的流水线延迟。
[0101]
参考图12a至图12i,根据本公开的实施例示出了指令和数据的分发。在该示例中,从左到右读取数据,其中每个图像描绘连续的周期。指令存储器中的存储器控制指令和要由指令读取的数据被相同的符号标记。例如,指令存储器中的第一指令a0将读取存储在存储器阵列的最左列中的存储器元件中的数据a0。在图12a中,指令a0被示出在指令缓冲器中。在图12b中,发出第二指令,并且a0和a1都在指令缓冲器中。在图12c中,发出第三指令,并且a0、a1和a2在指令缓冲器中。在图12d中,发出第四指令,并且a0、a1、a2和a3在指令缓冲器中,到达它们的目的地存储器阵列元件。在图12e中,执行指令a0、a1、a2和a3,从对应的存储器读取到其数据缓冲器。在图12f中,数据前进通过数据缓冲器,数据a0到达核网格。在图12g中,数据前进通过数据缓冲器,其中数据a1到达核网格。在图12h中,数据前进通过数据缓冲器,其中数据a2到达核网格。在图12i中,数据前进通过数据缓冲器,其中数据a3到达核网格。
[0102]
参考图13a至图13i,根据本公开的实施例示出了指令和数据的分发。在该示例中,以随机顺序读取数据,其中每个图像描绘一个周期。在图13a中,指令a2被发出,到达指令缓冲器。在图13b中,第二指令被发出,并且a2和a1都在指令缓冲器中,其中a2到达其目的列。在图13c中,第三指令a3被发出,指令a1前进,指令a2被执行,将数据读入数据缓冲器。a1和a3位于指令缓冲器中。在图12d中,第四指令a0被发出,指令a1前进,数据a2前进通过数据缓冲器,并且指令a3被执行,将数据读入数据缓冲器。a0和a1位于指令缓冲器中。在图13e中,指令a0前进,a1执行,从存储器读取数据,并且数据a2和a3前进通过数据缓冲器。在图13f中,数据前进通过数据缓冲器,数据a2到达核网格。在图13g中,数据前进通过数据缓冲器,其中数据a1到达核网格。在图13h中,数据前进通过数据缓冲器,其中数据a3到达核网格。指令a0被执行,从而将数据读取到存储器中。在图13i中,数据前进通过数据缓冲器,其中数据a0到达核网格。尽管对应于指令的数据位于随机存储器元件处,但是不存在网络冲突,因为前进指令的周期数和前进数据的周期数之和是恒定的。另外,数据按照指令的顺序,即a2、a1、a3和a0的顺序,被传送到核网格。
[0103]
参考图14a至图14m,根据本公开的实施例示出了指令和数据的分发。在该示例中,从二维权重存储器阵列读取数据,其中每个图像描绘一个周期。在图14a中,指令a0被发出,到达指令缓冲器。在图14b中,第二指令被发出,并且a0和a1都在指令缓冲器中。在图14c中,第三指令a2被发出,指令a0和a1前进。a0、a1和a2在指令缓冲器中。在图14d中,第四指令a3被发出,且先前指令前进。a0、a1、a2和a3在指令缓冲器中。在图14e中,所有指令在其对应列上执行,从而从存储器读取数据。在图14f中,垂直缓冲器开始沿着每列传播数据。在图14g中,垂直数据传播继续。a1列完成了垂直分发,但在开始水平传播之前等待附加的周期,以便与其它列均衡延迟。在图14h中,垂直数据传播完成。在图14i中,数据被复制到水平缓冲器。在图14j至图14m中,数据前进通过水平缓冲器,直到所有数据到达核阵列。
[0104]
参考图15a至图15m,根据本公开的实施例示出了指令和数据的分发。在该示例中,以随机顺序从二维权重存储器阵列读取数据,其中每个图像描绘一个周期。在图15a中,指令a2被发出,到达指令缓冲器。在图15b中,第二指令a1被发出,并且a2和a1都在指令缓冲器中,a2到达其目标列。在图15c中,第三指令a3被发出,并且指令a1前进。a1和a3在指令缓冲器中,并且将a2的数据读入垂直缓冲器中。在图14d中,发布第四指令a0,且先前指令前进。a1和a0位于指令缓冲器中。a2的数据是垂直分发的。a3的数据被读入垂直缓冲器。在图15e中,a0前进。从存储器读取a1的数据。数据a2和a3沿着垂直缓冲器向前分发。在图14f中,垂直缓冲器继续沿每一列传播数据。a0沿着指令缓冲器前进。在图15g中,垂直数据传播对于a1和a3继续。指令a0到达其目标列。其垂直分发完成后,将a2的数据复制到水平缓冲器。在图15h中,数据a0被读入对应的垂直缓冲器,并且对于a1继续垂直传播。数据a2前进通过水平缓冲器。数据a3从垂直缓冲器复制到对应的水平缓冲器。在图15i中,数据a2和a3前进通过水平缓冲器。a2和a3的数据之间,a1的数据被无冲突地复制到水平缓冲器中。在图15j中,将第一指令a2的数据递送到核网格。a1和a3的数据前进通过水平缓冲器,而a0的数据前进通过垂直缓冲器。在图15k中,递送第二指令a1的数据。最后一个指令a0完成垂直分发。在图15l中,递送a3的数据。a0的数据被复制到水平缓冲器。在图15m中,a0的数据被递送到核阵列。虽然指令从随机位置读取数据,但是数据无冲突地前进,并且按照指令顺序被递送到核网格。为了避免垂直缓冲器中的网络冲突,在垂直数据传播的持续时间内不应从存储器元件的同一列读取指令。
[0105]
参考图16a至图16k,根据本公开的实施例示出了指令和数据的分发。在该示例中,从二维权重存储器阵列读取数据,其中每个图像描绘一个周期。在同一周期中发出指令对。在该示例中,第一行存储器元件具有数据a0,第二行存储器元件具有数据b0。数据a0被分发在所有偶数行上,而b0被分发在所有奇数行上。
[0106]
在图16a中,指令a0和b0被发出,到达指令缓冲器。在图16b中,指令a1和b1被发出,并且a0和b0前进。在图16c中,每对指令前进到其目的列。在图16d中,所有指令在其对应列上执行,从而将数据从存储器读取到对应垂直缓冲器中。在图16e中,垂直缓冲器开始沿着每一列传播数据。垂直缓冲器传输数据,而一些数据被存储在暂留缓冲器中。暂留缓冲器在数据已经到达其目标行并且需要等待直到水平分发开始时使用。在图16f中,垂直数据传播继续。在图16g中,所有数据到达其目标行并被复制到暂留缓冲器。条带模式(stripe pattern)在暂留缓冲区中。在图16h中,数据从暂留缓冲器被复制到水平缓冲器。在图16i中,数据前进通过数据缓冲器。在图16j中,数据前进通过数据缓冲器,将数据条带a0和b0传
递到核网格。在图16j中,数据前进通过数据缓冲器,将数据条带a1和b1传递到核网格。
[0107]
参考图17,示出了用于计算神经激活的方法。在1701处,将至少一个指令从指令存储器提供给指令缓冲器。在1702,使该至少一个指令在指令缓冲器中的位置之间前进。在1703处,当存储器阵列的多个元件中的至少一个元件的存储器含有与该至少一个指令相关联的数据时,将该至少一个指令从指令缓冲器提供到多个元件中的该至少一个元件。存储器阵列包括多个元件,每个元件包括存储器缓冲器和水平缓冲器,存储器阵列的每个元件的水平缓冲器与存储器阵列的另一个元件的水平缓冲器通信或与至少一个神经核通信。在1704处,响应于来自指令缓冲器的该至少一个指令的到达,将数据块从存储器提供到多个元件中的该至少一个元件的水平缓冲器。在1705,将数据块从多个元件中的该至少一个元件的水平缓冲器提供给存储器阵列的另一个元件中的水平缓冲器或至少一个神经核。
[0108]
本公开的各种实施例使用指令缓冲器、水平缓冲器、垂直缓冲器和暂留器的组合来提供一维或二维存储器阵列中的指令和数据分发。应了解,本发明可应用于具有附加缓冲器的更高维度阵列。在这些实施例中,从指令发出到从数据阵列输出的数据的时间是恒定的,即使每个阶段可能花费不同的时间量。可以以随机顺序访问列。在具有高于一维的情况下,访问同一列的两个指令应当由垂直分发时间来分离。在一维的情况下,垂直分发时间为零,因此没有约束。
[0109]
在各种实施例中,提供一种系统,其包含存储器阵列、指令缓冲器和水平数据缓冲器。用于指令分发和用于存储器分发的周期数的总和对于所有指令是恒定的。
[0110]
在各种实施例中,提供一种二维存储器阵列。为存储器阵列的每一行提供水平缓冲器。为存储器阵列的每一列提供垂直缓冲器。指令分发的周期数、沿垂直缓冲器的数据分发的周期数和沿水平缓冲器的数据分发的周期数的总和是恒定的。
[0111]
在各种实施例中,提供一种二维存储器阵列。为存储器阵列中的每个位置提供了暂留缓冲器。用于指令分发的周期数、用于沿垂直缓冲器的数据分发的周期数、用于沿水平缓冲器的数据分发的周期数、以及用于暂留缓冲器的数据转接的周期数的总和是恒定的。
[0112]
现在参考图18,示出了计算节点的示例的示意图。计算节点10仅是合适的计算节点的一个示例,并且不旨在对本文描述的实施例的使用范围或功能提出任何限制。无论如何,计算节点10能够被实现和/或执行上文阐述的任何功能。
[0113]
在计算节点10中,存在计算机系统/服务器12,其可与许多其它通用或专用计算系统环境或配置一起操作。适合与计算机系统/服务器12一起使用的公知的计算系统、环境和/或配置的示例包括但不限于个人计算机系统、服务器计算机系统、瘦客户端、胖客户端、手持式或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络pc、小型计算机系统、大型计算机系统、以及包括任何上述系统或设备的分发式云计算环境等。
[0114]
计算机系统/服务器12可以在计算机系统可执行指令的一般上下文中描述,诸如由计算机系统执行的程序模块。通常,程序模块可以包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、逻辑、数据结构等。计算机系统/服务器12可以在分发式云计算环境中实践,其中任务由通过通信网络链接的远程处理设备执行。在分发式云计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机系统存储介质中。
[0115]
如图18所示,计算节点10中的计算机系统/服务器12以通用计算设备的形式示出。
计算机系统/服务器12的组件可以包括但不限于一个或多个处理器或处理单元16、系统存储器28以及将包括系统存储器28的各种系统组件耦合到处理器16的总线18。
[0116]
总线18表示若干类型的总线结构中的任何一种的一个或多个,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各种总线体系结构中的任何一种的处理器或局部总线。作为示例而非限制,这些体系结构包括工业标准体系结构(isa)总线、微通道体系结构(mca)总线、增强型isa(eisa)总线、视频电子技术标准协会(vesa)局部总线、外围部件互连(pci)总线、外围部件互连快速(pcie)和高级微控制器总线体系结构(amba)。
[0117]
在各种实施例中,一个或多个推理处理单元(未示出)被耦合到总线18。在这样的实施例中,ipu可以经由总线18从存储器28接收数据或向其写入数据。同样,ipu可以经由总线18与其它组件交互,如本文所描述的。
[0118]
计算机系统/服务器12通常包括各种计算机系统可读介质。这样的介质可以是计算机系统/服务器12可访问的任何可用介质,并且它包括易失性和非易失性介质、可移动和不可移动介质。
[0119]
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(ram)30和/或高速缓冲存储器32。计算机系统/服务器12还可以包括其他可移动/不可移动、易失性/非易失性计算机系统存储介质。仅作为示例,存储系统34可被提供用于从不可移动、非易失性磁介质(未示出,并且通常被称为“硬盘驱动器”)读取和向其写入。尽管未示出,但是可以提供用于从可移动、非易失性磁盘(例如,“软盘”)读取和向其写入的磁盘驱动器,以及用于从诸如cd-rom、dvd-rom或其它光学介质等可移动、非易失性光盘读取或向其写入的光盘驱动器。在这种情况下,每个都可以通过一个或多个数据介质接口连接到总线18。如下文将进一步描绘及描述,存储器28可包含具有经配置以执行本发明的实施例的功能的一组(例如,至少一个)程序模块的至少一个程序产品。
[0120]
具有一组(至少一个)程序模块42的程序/实用程序40,以及操作系统、一个或多个应用程序、其它程序模块和程序数据,可作为示例而非限制存储在存储器28中。操作系统、一个或多个应用程序、其它程序模块和程序数据或其某种组合中的每个可包括联网环境的实现。程序模块42通常执行这里描述的实施例的功能和/或方法。
[0121]
计算机系统/服务器12还可以与诸如键盘、指示设备、显示器24之类的一个或多个外部设备14、使得用户能够与计算机系统/服务器12交互的一个或多个设备、和/或任何使计算机系统/服务器12能够与一个或多个其它计算设备通信的设备(例如网卡、调制解调器等)通信。这种通信可以经由输入/输出(i/o)接口22发生,然而,计算机系统/服务器12可以经由网络适配器20与一个或多个网络通信,所述网络是诸如局域网(lan)、通用广域网(wan)和/或公共网络(例如,因特网)。如图所示,网络适配器20经由总线18与计算机系统/服务器12的其它组件通信。应当理解,尽管未示出,但其它硬件和/或软件组件可以与计算机系统/服务器12结合使用,示例包括但不限于:微代码、设备驱动程序、冗余处理单元、外部磁盘驱动器阵列、raid系统、磁带驱动器和数据档案存储系统等。
[0122]
本公开可以实现为系统、方法和/或计算机程序产品。计算机程序产品可以包括其上具有计算机可读程序指令的(一个或多个)计算机可读存储介质,该计算机可读程序指令用于使处理器执行本公开的各方面。
[0123]
计算机可读存储介质可以是能够保留和存储由指令执行设备使用的指令的有形
设备。计算机可读存储介质可以是例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或前述的任何合适的组合。计算机可读存储介质的更具体示例的非穷举列表包括以下:便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式光盘只读存储器(cd-rom)、数字多功能盘(dvd)、存储器棒、软盘、诸如上面记录有指令的打孔卡或凹槽中的凸起结构的机械编码装置,以及上述的任何适当组合。如本文所使用的计算机可读存储介质不应被解释为暂时性信号本身,诸如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,通过光纤线缆的光脉冲)、或通过导线传输的电信号。
[0124]
本文描述的计算机可读程序指令可以从计算机可读存储介质下载到相应的计算/处理设备,或者经由网络,例如因特网、局域网、广域网和/或无线网络,下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或网络接口从网络接收计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
[0125]
用于执行本公开的操作的计算机可读程序指令可以是汇编指令、指令集架构(isa)指令、机器相关联的指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言(例如smalltalk、c++等)以及常规的过程式编程语言(例如“c”编程语言或类似的编程语言)。计算机可读程序指令可以完全在用户的计算机上执行,部分在用户的计算机上执行,作为独立的软件包执行,部分在用户的计算机上并且部分在远程计算机上执行,或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络连接到用户的计算机,包括局域网(lan)或广域网(wan),或者可以连接到外部计算机(例如,使用因特网服务提供商通过因特网)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla)的电子电路可以通过利用计算机可读程序指令的状态信息来执行计算机可读程序指令以使电子电路个性化,以便执行本公开的方面。
[0126]
本文参考根据本公开的实施例的方法、装置(系统)和计算机程序产品的流程图图示和/或框图来描述本公开的方面。将理解,流程图和/或框图的每个框以及流程图和/或框图中的框的组合可以由计算机可读程序指令来实现。
[0127]
这些计算机可读程序指令可以被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,使得经由计算机或其他可编程数据处理装置的处理器执行的指令创建用于实现流程图和/或框图的一个或多个框中指定的功能/动作的装置。这些计算机可读程序指令还可以存储在计算机可读存储介质中,其可以引导计算机、可编程数据处理装置和/或其他设备以特定方式工作,使得其中存储有指令的计算机可读存储介质包括制品,该制品包括实现流程图和/或框图的一个或多个框中指定的功能/动作的各方面的指令。
[0128]
计算机可读程序指令还可以被加载到计算机、其他可编程数据处理装置或其他设备上,以使得在计算机、其他可编程装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,使得在计算机、其他可编程装置或其他设备上执行的指令实现流程图和/或框
图的一个或多个框中指定的功能/动作。
[0129]
附图中的流程图和框图示出了根据本公开的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。在这点上,流程图或框图中的每个框可以表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些替代实施方案中,框中所提及的功能可不按图中所提及的次序发生。例如,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的顺序执行,这取决于所涉及的功能。还将注意,框图和/或流程图图示的每个框以及框图和/或流程图图示中的框的组合可以由执行指定功能或动作或执行专用硬件和计算机指令的组合的专用的基于硬件的系统来实现。
[0130]
已经出于说明的目的呈现了对本公开的各种实施例的描述,但是其并非旨在是穷举的或限于所公开的实施例。在不背离所描述的实施例的范围的情况下,许多修改和变化对于本领域的普通技术人员将是显而易见的。选择本文所使用的术语以最好地解释实施例的原理、实际应用或对市场上存在的技术改进,或使本领域的其他普通技术人员能够理解本文所公开的实施例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1