一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于存储器内计算的方法和用于计算的系统与流程

2021-09-07 22:16:00 来源:中国专利 TAG:存储器 美国 申请 提交 用于

用于存储器内计算的方法和用于计算的系统
1.相关申请的交叉引用
2.本技术要求于2020年3月6日提交的第62/986,326号美国临时申请和于2020年6月26日提交的第16/914,151号美国申请的优先权和利益,其全部内容通过引用并入本文。
技术领域
3.根据本公开的实施例的一个或多个方面涉及数据处理,并且更具体地,涉及可调整的存储器内计算。


背景技术:

4.该背景部分仅用于设置上下文,并不旨在限制本发明的范围,也不构成对现有技术的任何认可。存储器内计算(“in

memory computation”或“in

memory compute”)可以用于减少由于存储器访问瓶颈造成的性能下降。然而,高效地使用存储器内计算可能涉及在存储器内函数(function

in

memory)电路之间高效地传递中间结果,并且可能涉及使用专门适用于要执行的计算任务的存储器内函数电路。
5.因此,需要用于存储器内计算的改进的系统和方法。


技术实现要素:

6.在一些实施例中,使用生产者

消费者模型(producer

consumer model)可以提高存储器内函数电路执行具有多个阶段的计算的效率,例如,如果要计算三个矩阵的乘积,则可以使用生产者

消费者模型,以允许在前两个因子的整个乘积完成之前开始计算总体乘积。
7.根据具体情况,执行特定计算的不同方法可以是有利的。在一些实施例中,存储器中不同的“岛(island)”可以包含具有不同能力的存储器内函数电路,并且调度器可以根据计算任务的性质和每个岛中的存储器内函数电路的能力,由连接到岛的主机处理电路将不同的计算任务委托(delegate)给相应的岛。
8.根据本发明的实施例,提供了用于存储器内计算的方法,该方法包括:由第一存储器内函数电路执行第一指令,以产生作为结果的第一值,其中第一计算任务包括第二计算任务和第三计算任务,第二计算任务包括第一指令;由第一存储器内函数电路将第一值存储在第一缓冲器中;由第二存储器内函数电路从第一缓冲器读取第一值;以及由第二存储器内函数电路执行第二指令,第二指令使用第一值作为自变量,第三计算任务包括第二指令,其中:由第一存储器内函数电路将第一值存储在第一缓冲器中包括将第一值直接存储在第一缓冲器中,由第二存储器内函数电路从第一缓冲器读取第一值包括从第一缓冲器直接读取第一值,第一存储器内函数电路在第一量的存储器中;第二存储器内函数电路在第一量的存储器中;并且第一缓冲器在第一量的存储器中。
9.在一些实施例中,该方法还包括由第一存储器内函数电路调整指针,该指针标识第一量的存储器中的第一缓冲器的第一部分的边界,该调整包括移动该边界,其中对该边
界的移动具有使得第一值被包括在第一部分内的效果。
10.在一些实施例中,该方法还包括:由第一存储器内函数电路执行第三指令,以产生作为结果的第二值,第二计算任务包括第三指令;以及由第二存储器内函数电路执行第四指令,第四指令使用第二值作为自变量,第三计算任务包括第四指令。
11.在一些实施例中:第一计算任务包括计算第一矩阵、第二矩阵和第三矩阵的乘积;第二计算任务包括计算第一矩阵和第二矩阵的乘积,以形成第一乘积矩阵;并且第三计算任务包括计算第一乘积矩阵和第三矩阵的乘积。
12.在一些实施例中,该方法还包括由第三存储器内函数电路执行第三指令,其中:第四计算任务包括第三指令,第一存储器内函数电路在第一量的存储器中,第三存储器内函数电路在第二量的存储器中,并且第三存储器内函数电路具有不同于第一存储器内函数电路的能力的能力。
13.在一些实施例中,第四计算任务包括:计算存储在第二量的存储器中的第一矩阵和存储在第二量的存储器中的第二矩阵的乘积;以及计算第三矩阵和第四矩阵的乘积,使存储的第一矩阵和第二矩阵的元素的存储顺序保持不变,第三矩阵是第一矩阵的转置,或者第四矩阵是第二矩阵的转置。
14.在一些实施例中:第一计算任务包括计算第五矩阵、第六矩阵和第七矩阵的乘积;第二计算任务包括计算第五矩阵和第六矩阵的乘积,以形成第一乘积矩阵;并且第三计算任务包括计算第一乘积矩阵和第七矩阵的乘积。
15.在一些实施例中,第一量的存储器与第二量的存储器基本上隔离。
16.在一些实施例中,计算第五矩阵和第六矩阵的乘积包括计算第五矩阵的子矩阵和第六矩阵的子矩阵的乘积。
17.在一些实施例中,计算第五矩阵和第六矩阵的乘积包括计算第一矩阵的行和第二矩阵的列的点积(dot product)。
18.在一些实施例中,计算第五矩阵和第六矩阵的乘积包括计算第一矩阵的列和第二矩阵的行的外积(outer product)。
19.在一些实施例中,第二计算任务包括计算从由sigmoid函数、整流线性单元函数、双曲正切函数及其组合构成的组选择的函数。
20.在一些实施例中,第三计算任务包括计算第五矩阵和第六矩阵的乘积,函数的计算结果是第五矩阵的元素。
21.根据本发明的实施例,提供了用于计算的系统,该系统包括:主机处理电路;和第一量的存储器,包括第一存储器内函数电路、第二存储器内函数电路和第一缓冲器,主机处理电路被配置为对第一存储器内函数电路和第二存储器内函数电路进行编程,该编程使得:第一存储器内函数电路:执行第一指令,以产生作为结果的第一值,其中第一计算任务包括第二计算任务和第三计算任务,第二计算任务包括第一指令;并且将第一值存储在第一缓冲器中;以及第二存储器内函数电路:从第一缓冲器读取第一值;以及执行第二指令,第二指令使用第一值作为自变量,第三计算任务包括第二指令,其中:由第一存储器内函数电路将第一值存储在第一缓冲器中包括将第一值直接存储在第一缓冲器中,由第二存储器内函数电路从第一缓冲器读取第一值包括从第一缓冲器直接读取第一值。
22.在一些实施例中,该编程还使得第一存储器内函数电路调整指针,该指针标识第
一量的存储器中的第一缓冲器的第一部分的边界,该调整包括移动该边界,其中对该边界的移动具有使得第一值被包括在第一部分内的效果。
23.在一些实施例中,该编程还使得:在执行第二指令之后,第一存储器内函数电路执行第三指令,以产生作为结果的第二值,第二计算任务包括第三指令;以及在执行第三指令之后,第二存储器内函数电路执行第四指令,第四指令使用第二值作为自变量,第三计算任务包括第四指令。
24.在一些实施例中:第一计算任务包括计算第一矩阵、第二矩阵和第三矩阵的乘积;第二计算任务包括计算第一矩阵和第二矩阵的乘积,以形成第一乘积矩阵;并且第三计算任务包括计算第一乘积矩阵和第三矩阵的乘积。
25.在一些实施例中,主机处理电路还被配置为对第三存储器内函数电路进行编程,对第三存储器内函数电路的编程使得第三存储器内函数电路执行第三指令,其中:第四计算任务包括第三指令,第三存储器内函数电路在第二量的存储器中,并且第三存储器内函数电路具有不同于第一存储器内函数电路的能力的能力。
26.在一些实施例中,第四计算任务包括:计算存储在第二量的存储器中的第一矩阵和存储在第二量的存储器中的第二矩阵的乘积;以及计算第三矩阵和第四矩阵的乘积,使所存储的第一矩阵和第二矩阵的元素的存储顺序保持不变,第三矩阵是第一矩阵的转置,或者第四矩阵是第二矩阵的转置。
27.根据本发明的实施例,提供了用于计算的系统,该系统包括:用于处理的装置;和第一量的存储器,包括第一存储器内函数电路、第二存储器内函数电路和第一缓冲器,用于处理的装置被配置为对第一存储器内函数电路和第二存储器内函数电路进行编程,该编程使得:第一存储器内函数电路:执行第一指令,以产生作为结果的第一值,其中第一计算任务包括第二计算任务和第三计算任务,第二计算任务包括第一指令;以及将第一值存储在第一缓冲器中;以及第二存储器内函数电路:从第一缓冲器读取第一值;以及执行第二指令,第二指令使用第一值作为自变量,第三计算任务包括第二指令,其中:由第一存储器内函数电路将第一值存储在第一缓冲器中包括将第一值直接存储在第一缓冲器中,由第二存储器内函数电路从第一缓冲器读取第一值包括从第一缓冲器直接读取第一值。
附图说明
28.应当理解,附图仅示出了示例,并且也可以构造未明确示出的其他实施例。参考说明书、权利要求书和附图,将理解和明白本公开的这些和其他特征和优点,附图中:
29.图1a示出了根据本公开的实施例的包括多个存储体(bank)组的存储器的框图,每个存储体组包括多个存储体,该存储器还包括多个存储器内函数电路;
30.图1b示出了根据本公开的实施例的具有多个读出放大器、全局输入输出寄存器和存储器内函数电路的存储体的框图;
31.图1c示出了根据本公开的实施例的由存储器内函数电路执行的指令的表格;
32.图2a示出了根据本公开的实施例的生产者

消费者配置中的两个存储器内函数电路的框图;
33.图2b示出了根据本公开的实施例的生产者

消费者操作的流程图;
34.图3a示出了根据本公开的实施例的涉及两个矩阵的部分的操作的一般数据布局
图;
35.图3b示出了根据本公开的实施例的涉及两个矩阵的部分的点积操作的数据布局图;
36.图3c示出了根据本公开的实施例的涉及两个矩阵的部分的外积操作的数据布局图;
37.图3d示出了根据本公开的实施例的涉及两个矩阵的部分的张量积(tensor product)操作的数据布局图;以及
38.图3e示出了根据本公开的实施例的涉及两个矩阵的部分的按元素(element

wise)的向量积操作的数据布局图。
具体实施方式
39.下面结合附图阐述的详细描述旨在作为根据本公开提供的可适应的存储器内函数系统的示例性实施例的描述,并且不旨在代表其中可以构建或利用本公开的唯一形式。该描述结合所示实施例阐述了本公开的特征。然而,应当理解,相同或等效的函数和结构可以通过不同的、也旨在包含在本公开的范围内的实施例来实现。如本文别处所示,相似的元素编号旨在表示相似的元素或特征。
40.在一些实施例中,使用生产者

消费者模型可以提高存储器内函数(function

in

memory,fim)电路执行具有多个阶段的计算的效率。一般地,当数据源和数据宿(sink)之间存在异步时,可以使用生产者消费者模型。生产者保持推送(push)部分就绪的输入而不等待消费者的确认,并且消费者开始处理队列中的任何内容。队列具有开始和结束指针来保持跟踪高效数据。好处包括更好的延迟和避免需要对完全准备好的输入进行阻塞(只要它们可以被独立处理)。例如,如果要计算(“calculate”或“compute”)三个矩阵的乘积,则可以使用这样的模型。一个或多个存储器内函数电路的第一集合可以计算这三个矩阵的第一矩阵和这三个矩阵的第二矩阵的乘积,以形成第一乘积矩阵,并且一个或多个存储器内函数电路的第二集合可以计算第一乘积矩阵和这三个矩阵的第三矩阵的乘积。在一些实施例中,第一乘积矩阵的元素可以一次被计算一个。如本文所用,术语“存储器内函数”、“存储器内计算”可互换使用。
41.生产者

消费者模型的使用可能使得没有必要在开始计算第一乘积矩阵和这三个矩阵的第三矩阵的乘积之前完成第一乘积矩阵的计算。不是等待直到第一乘积矩阵的所有元素已经被计算,一个或多个存储器内函数电路的第一集合可以使得第一乘积矩阵的元素在被计算时对于一个或多个存储器内函数电路的第二集合可用。一个或多个存储器内函数电路的第二集合然后可以继续进行对第一乘积矩阵和这三个矩阵的第三矩阵的乘积的计算的部分,只要对于每个这样的部分有足够的数据可用。例如,如果一个或多个存储器内函数电路的第二集合将第一乘积矩阵和第三矩阵的乘积计算为第一乘积矩阵的行和第三矩阵的列的多个点积,则一个或多个存储器内函数电路的第二集合可以在其变得可用时开始使用第一乘积矩阵的每行。
42.根据具体情况,执行特定计算的不同方法可能是有利的。例如,第一矩阵和第二矩阵的矩阵乘积可以被计算为第一矩阵的行和第二矩阵的列的点积集合。这种方法可能需要相对少的寄存器空间,因为每个这样的点积产生单一数字(single number)。或者,可以通
过形成第一矩阵的子矩阵与第二矩阵的子矩阵的乘积来计算矩阵乘积。这种方法可能需要更多的寄存器空间,但是其优点在于,可以在不对存储器中的数据进行重新排序的情况下高效地执行计算其他乘积(诸如任一矩阵的转置与另一矩阵的乘积)。
43.在一些情况下,基于数据局部性(locality)、可用缓冲空间和存储器中输入矩阵的布局(例如,行主序(row major)或列主序(column major))之间的折衷,存在用于执行矩阵乘法的多个选项。在一些实施例中,系统重新评估这些折衷,因为数据可能被布置在不具有合适的高速缓存的主存储器内部。
44.在一些实施例中,存储器中不同的“岛”可以包含具有不同能力的存储器内函数电路,并且调度器可以根据计算任务(computing task)的性质和每个岛中的存储器内函数电路的能力,由连接到岛的主机处理电路将不同的计算任务委托给相应的岛。如本文所用,“计算任务”是要由计算机执行的操作的任何集合;由此,计算任务可以包括多个较小的计算任务或由多个较小的计算任务组成。
45.参考图1a,在一些实施例中,存储器(例如,高带宽存储器(high bandwidth memory,hbm)或双列直插式存储器模块(dual in

line memory module,dimm))可以被布置为多个存储体组(bg0、bg1、bg2、bg3),每个存储体组包括多个存储体105(例如,bg0包括标记为a、b、c和d的存储体105)。图1a的一些特征(诸如硅通孔(through

silicon via,tsv))是特定于hbm的;其他形式的存储器(例如,dimm)可以以类似的方式操作。dram存储器可以被组织成片排(rank)、芯片和存储体105。“片排”可以是具有共享芯片选择引脚的存储器的一部分。每个片排可以包括八个芯片,并且每个芯片可以包括16个存储体105。芯片的存储体105可以被组织成“大存储体(megabank)”,使得例如由来自一个片排中的八个芯片中的每一个芯片的存储体0组成的存储体105的集合可以是大存储体0。芯片可以并行读取到256位宽的总线上,八个芯片中的每一个芯片提供256位数据中的32位。此外,图1a中,“rowdec”可以表示行解码器,“coldec”可以表示列解码器,“wrio”可以表示写输入输出,“tccdl”可以表示延迟时间,“tck”可以表示时钟周期时间。
46.存储器可以连接到主机处理电路205(例如,cpu或gpu,或者具有附加元件(诸如存储器控制器(memory controller,mc))的cpu或gpu)以及为主机处理电路205提供存储。在一些实施例中,主机处理电路205位于网络路径的主机侧(例如,它是主机服务器)。在存储器内计算机(in

memory compute,imc)系统中,每个存储体105可以包括输入/输出读出放大器112(input/output sense amplifier,iosa)和存储器内函数(fim)电路110(也可以称为“存储器内计算电路”或“存储器内处理电路(process in memory circuit)”)。如本文所用,存储器内函数电路是能够执行算术运算或逻辑运算并且比主机处理电路205更直接地连接到存储器(并且也比加速器更直接)的处理电路。如本文所用,“更直接地”意味着涉及更少的中间元件(例如,以不涉及主机处理器存储器接口(host

processor memory interface)和将来自多个存储体和片排(rank)的数据多路复用到同一通道(channel)总线上的窄总线的方式连接)。例如,在其中存储器通过ddr总线连接到主机处理电路205的系统中,ddr总线的存储器侧上的处理电路可以被认为是存储器内函数电路,而在ddr总线的主机处理电路侧上的处理电路(例如,主机处理电路205可以对其委托计算任务的在ddr总线的主机处理电路侧的加速器)不被认为是存储器内函数电路。图1b示出了在一些实施例中的这种存储体105的结构,并且图1c是示出可由存储器内函数电路110执行的操作的列表的
表格。在一些实施例中,主机处理电路205向存储器内函数电路110发送数字(例如,与图1c的表格的行中的一行相对应的、0到9之间的一个数字),然后存储器内函数电路110执行对应的操作。主机处理电路205可以通过保留供将来使用(reserved

for

future

use,rfu)位(例如,ddr接口的rfu位)向存储器内函数电路110发送指令(或者,等同地,标识指令的数字)。
47.如图1b所示,存储器内函数电路110可以包括寄存器115(例如,rop和rz)、算术逻辑单元(arithmetic logic unit,alu)120和多路复用器125(每个在图1b中标记为“mux”),它们可以一起用于执行指令(例如,图1c中的表格所列的指令)。存储器内函数电路110还可以包括fim逻辑220、控制器210和存储器映射寄存器225(下面将进一步详细讨论)。如图1c的表格所示,指令可以使存储器内函数电路110将一个寄存器的内容复制到另一个寄存器中(例如,指令0

5和9),或者对两个寄存器的内容执行操作(“op”),并且将结果存储在第三个寄存器中(在图1c的表格的指令集的情况下,在寄存器rz中)。该操作可以是算术操作(例如,例如根据ieee

754执行的 、

、x、或/)、或逻辑操作(例如,按位&(与(and))、|(或(or))、^(异或(exclusive or))或者~(二进制补码(ones complement)))。当指令是图1c的表格中的指令6、7和8之一的指令,寄存器(例如,存储器映射寄存器225之一)可以指定要执行的操作(例如,特定的算术操作或逻辑操作)。回到图1b,算术逻辑单元120可以包括16通路(16

lane)、16位浮点(16

bit floating point,fp

16)向量单元或8通路、32位浮点(32

bit floating point,fp

32)向量单元,使得各种操作成为可能。非限制性示例可以包括张量操作(例如,点积、外积、relu(整流器或整流器线性单元)、vssqr(对向量的元素求平方)和vssqrt(取向量的每个元素的平方根)。为了高效使用存储器内函数电路110,数据可以被安排在存储器中,使得多个操作数在开放行(open row)中同时可用。如本文所用,“开放行”指的是读出放大器112中的数据(在行激活被发出之后)。开放行可以例如包括alu可以从其读取多个操作数(例如,32位操作数)的8192位数据。
48.如上所述,在一些实施例中,可以使用生产者

消费者模型来提高存储器内函数电路110执行具有多个阶段的计算的效率。图2a示出了生产者

消费者配置中第一存储器内函数电路110a和第二存储器内函数电路110b的框图,在该生产者

消费者配置中,第一存储器内函数电路110a和第二存储器内函数电路110b两者都连接到缓冲器230和存储指针235的存储器位置或寄存器。在一个示例中,第一计算任务包括三个矩阵(第一矩阵、第二矩阵和第三矩阵)的乘积。计算第一矩阵和第二矩阵的乘积可以被标识为第二计算任务(被包括在第一计算任务中),并且计算(i)第一矩阵和第二矩阵的乘积(由第二计算任务计算)和(ii)第三矩阵的乘积可以被标识为第三计算任务(也被包括在第一计算任务中)。如图2b所示,在该示例中,第一存储器内函数电路110a(在该示例中可以作为生产者操作)可以在240处执行第一指令,以产生作为结果的第一值。第一指令可以包括(例如,由以下组成)计算第一矩阵的行和第二矩阵的列的点积,并且第一值可以是计算出的点积的值。在245,第一存储器内函数电路110a可以将第一值存储在缓冲器230中,诸如在用于存储由第一存储器内函数电路110a生成的中间结果(诸如第一矩阵和第二矩阵的乘积)的缓冲器的第一部分中。指针235可以标识用于存储这种结果的缓冲器的第一部分(如下面进一步详细讨论的)。
49.一旦第一值在缓冲器230中可用,第二存储器内函数电路110b(在该示例中可以作为消费者操作)可以在250处从缓冲器230读取第一值,并且可以在255处使用第一值作为自
变量来执行第二指令。第二指令可以是第三计算任务的一部分,并且它可以包括例如形成(i)第一矩阵和第二矩阵的乘积(其可以包括第一值)的行和(ii)第三矩阵的列的点积。以这种方式,作为使用生产者

消费者模型的结果,第二存储器内函数电路110b可能不需要在开始执行第三计算任务之前等待整个第二计算任务(计算第一矩阵和第二矩阵的乘积)完成。
50.如上所述,缓冲器230的第一部分可以存储中间结果以供第二存储器内函数电路110b使用。缓冲器230的第一部分的边界可以由指向缓冲器230的指针235来标识。缓冲器230的第一部分可以用于存储中间值。缓冲器230的第一部分的边界由指针定义(边界之一由指针235定义)。这有助于在该区域使用锁(lock)(或其他同步),并且确保在生产者释放该锁后,只有生产者可以写入该区域(事实上确保消费者只能处理)。在将第一值存储在缓冲器230中之后,第一存储器内函数电路110a可以调整指针235,使得在调整指针235之后,第一值(在调整指针235之前,第一值不在缓冲器230的第一部分中)在缓冲器230的第一部分中。指针的调整可以向第二存储器内函数电路110b指示第一值是准备要由第二存储器内函数电路110b使用的中间结果。由此,第二存储器内函数电路110b的操作的模式可以是(i)使用缓冲器230的第一部分中其尚未使用的数据来执行计算,或者(ii)如果没有这样的数据,则等待直到更多的数据在缓冲器230的第一部分中变得可用(例如,当作为指针235被调整的结果,缓冲器230的第一部分的边界被移动时)。如本文所用,存储器的部分或区域的“边界”是(i)存储器的部分或区域中的最大地址,或者(ii)存储器的部分或区域中的最小地址。因此,存储器的每个部分或区域都有两个边界。
51.第一存储器内函数电路110a和第二存储器内函数电路110b可以直接访问缓冲器和指针,在这种意义上,两者都可以直接读写缓冲器和指针,而无需主机处理电路205的参与。如本文所用,由存储器内函数电路110“直接读取”存储器意味着在没有主机处理电路205参与的情况下读取存储器,并且由存储器内函数电路110“直接写入”存储器意味着在没有主机处理电路205参与的情况下写入存储器。
52.在使用生产者

消费者模型的另一个示例中,神经网络推理计算可以涉及计算神经网络的第一层的激活(activation),并将该激活乘以神经网络的后续层中的权重;在这种情况下,生产者存储器内函数电路可以计算激活函数,并且消费者存储器内函数电路可以在每个激活已经生成时,将每个激活乘以一个或多个权重。计算激活函数可以涉及评估sigmoid函数、整流线性单元(rectifier linear unit,relu)函数、或双曲正切函数、或任何其他合适的函数。
53.如上所述,在一些实施例中,连接到主机的存储器可以包括一个或多个存储器“岛”。每个这样的岛可以是一定量的存储器(quantity of memory)。如本文所用,“一定量的存储器”是物理地址的连续范围内的任意的存储器单元集合。每个岛可以包括具有不同能力的存储器内函数电路110。例如,第一岛可以包括多个存储器内函数电路110,每个存储器内函数电路110被配置为执行对门控递归单元(gated recurrent unit)的计算,该计算可以包括计算两个sigmoid函数和双曲正切。第二岛可以例如包括多个存储器内函数电路110,每个存储器内函数电路具有被配置为执行矩阵乘法的算术逻辑单元120。主机处理电路205可以根据不同计算任务中的每一个的性质和不同岛中的存储器内函数电路110的相应能力,将不同的计算任务委托给不同的岛。以这种方式,系统可以在其调整或适应不同计
算任务的能力方面是“可适应的”或“可调整的”。
54.这些岛可以彼此基本上隔离。如本文所用,如果(i)在没有主机处理电路205的参与的情况下,第一量的存储器的存储器内函数电路110不能读取或写入第二量的存储器的存储器单元,并且(ii)在没有主机处理电路205的参与的情况下,第二量的存储器的存储器内函数电路110不能读取或写入第一量的存储器的存储器单元,则包括存储器内函数电路110的第一量的存储器与包括存储器内函数电路110的第二量的存储器“基本上隔离”。
55.在一些实施例中,不同岛中的存储器内函数电路110可以在这样的顺序上不同,其中它们以该顺序使用来自开放单元的数据来执行(i)向量操作(其可以是矩阵操作的一部分)或(ii)矩阵操作。图3a

3e示出了执行向量或矩阵操作的几种方式。参考图3a,为了形成两个矩阵(第一矩阵和第二矩阵)的矩阵乘积(其结果可以加到第三矩阵的内容上),如图所示,第一矩阵的部分a可以存储在第一组16个瓦片(tile)中,第二矩阵的部分b可以存储在第二组16个瓦片中。部分a和部分b本身可以是矩阵。每个瓦片可以包括十六个fp

16(16位浮点)值。由此,每个瓦片占用256位,并且所示的32个瓦片可以填充dram的8192位的一行。a的第一行的每个瓦片可以乘以b的对应列的所有瓦片,例如,a00可以乘以b00、b01、b02和b03中的每一个,a01可以乘以b10、b11、b12和b13中的每一个,以此类推。类似地,a10可以乘以b00、b01、b02和b03中的每一个。可以一次一列地读取开放行,每列具有256位,并且对应于图3a中所示的瓦片之一。
56.图3b示出了可以用于通过形成矩阵部分a的行与矩阵部分b的列的点积来计算矩阵乘积的数据配置。在图3b的示例中,矩阵部分a的第一瓦片a00存储包括元素a00、a01等的行,并且矩阵部分b的第一瓦片b00存储包括元素b00、b01、b02等的列。在本文使用的术语中,小写“a”或“b”后跟指示其在向量中的位置的数字(其可以是fp

16数)表示矩阵的元素,大写“a”或“b”后跟表示其位置的数字表示存储在瓦片中的多个矩阵元素(例如,16个矩阵元素)。在操作中,从开放行的第一列将a的行读取到第一寄存器115(例如,rop寄存器)。然后,从开放行的第二列将b的列连同第一寄存器的内容一起读取到算术逻辑单元120,并且算术逻辑单元120计算点积,并将其保存在存储器内函数电路110的第二寄存器中。这种计算矩阵乘积的方法可以具有需要很少空间来存储中间乘积(即,点积,每个点积是乘积矩阵的元素)的优点。
57.图3c示出了可以用于通过形成矩阵部分a的列与矩阵部分b的行的外积来计算矩阵乘积的数据配置。在图3c的示例中,矩阵部分a的第一瓦片a00存储包括元素a00、a01等的列,并且矩阵部分b的第一瓦片b00存储包括元素b00、b01、b02等的行。在操作中,从开放行的第一列将a的列读取到第一寄存器115(例如,rop寄存器)。然后,从开放行的第二列将b的行连同第一寄存器的内容一起读取到算术逻辑单元120,并且算术逻辑单元120计算外积,并将其保存在存储器内函数电路110的第二寄存器中。与图3b的方法相比,这种计算矩阵乘积的方法具有适合在更简单、更快速的硬件中实现的优点(因为可以不使用加法器树),但代价是使用更大的寄存器(足够大以存储外积矩阵)来存储中间乘积。矩阵乘积的元素可以通过对乘积数组的每个元素求和来计算。
58.图3d示出了可以用于通过将矩阵部分a的子矩阵与矩阵部分b的子矩阵形成矩阵(或“张量”)积来计算矩阵乘积的数据配置。在图3d的示例中,矩阵部分a的第一瓦片a00存储包括元素a00、a01等的子矩阵,并且矩阵部分b的第一瓦片b00存储包括元素b00、b01、b02
等的子矩阵。在操作中,从开放行的第一列将子矩阵a读取到存储器内函数电路110中的第一寄存器115(例如,rop寄存器)。然后,从开放行的第二列将子矩阵b连同第一寄存器的内容一起读取到算术逻辑单元120,并且算术逻辑单元120计算子矩阵a和子矩阵b的矩阵乘积,并且将其保存在存储器内函数电路110的第二寄存器中。这种计算矩阵乘积的方法相比图3b的方法具有使用更小的加法器树的优点,并且能够(利用合适的算术逻辑单元120)在不对存储器中的数据进行重新排序的情况下计算涉及转置的乘积(例如,存储器内函数电路110能够从一个开放行中计算ab、a
t
b和ab
t
中的一个以上)。
59.图3e示出了可以用于计算矩阵部分a的行与矩阵部分b的行(或者,以类似的方式,矩阵部分a的列与矩阵部分b的列)的按元素的向量积的数据配置。例如,这种能力对于计算卷积可能是有用的。在图3e的示例中,矩阵部分a的第一瓦片a00存储包括元素a00、a01等的行,并且矩阵部分b的第一瓦片b00存储包括元素b00、b01、b02等的行。在操作中,从开放行的第一列将a的行读取到存储器内函数电路的第一寄存器115(例如,rop寄存器)。然后,从开放行的第二列将b的行与第一寄存器的内容一起读取到算术逻辑单元120,并且算术逻辑单元120计算元素方向的向量积,并且将其保存在存储器内函数电路110的第二寄存器中。
60.在一些实施例中,调度器可以安排由存储器内函数电路110执行要执行的各种计算任务,例如通过插桩(instrument)要由主机处理电路205执行的代码,以使主机处理电路205对存储器内函数电路进行编程,从而执行由此委托给存储器内函数电路的特定计算任务。对存储器内函数电路进行编程可能需要向存储器内函数电路写入使得存储器内函数电路执行指令或执行读取或写入操作的命令。调度器可以由处理电路(例如,由主机处理电路205或另一个处理电路)在编译时(例如,使用源代码或目标代码的静态分析)执行,或者它可以在运行时(run time)(由处理电路)执行。
61.调度器可以分析框架图(例如,tensorflow
tm
图)来分配多个fim岛,每个fim岛具有不同特征(寄存器大小、时钟速率、通路(lane)等)。调度器可以进一步(i)保持不同岛的占用率(例如,尽最大可能确保所有的岛一直在执行计算,(ii)识别可以并行执行的计算任务,并且调度它们由不同的岛执行,以及(iii)使用如上所述的生产者

消费者模型,以减少等待其他计算完成时存储器内函数电路的空闲。
62.调度器还可以包括自适应布置多路复用器(adaptive placement multiplexor),该自适应布置多路复用器可以识别适于委托给存储器内函数电路的计算任务,并且使用成本函数来分析将任何计算任务委托给各种不同类型的岛中的每个岛所期望的益处。例如,如果计算任务包括一个或多个矩阵乘法,则自适应布置多路复用器可以针对以下中的每一个评估成本函数:(i)图3b的配置、(ii)图3c的配置、和(iii)图3d的配置,然后将计算任务委托给包含具有成本函数最小的配置的存储器内函数电路的岛。
63.在一些实施例中,本文描述的方法可用于执行卷积,或者用于门控递归单元(gated recurrent unit,gru)或多层感知器(multilayer perceptron,mlp),或用于分散(scatter)和聚集(gather)操作的计算。
64.如本文所用,“某事物的一部分”是指该事物的全部或少于全部。因此,例如,“矩阵的一部分”意味着矩阵的全部或少于全部。如本文所用,向量(例如,矩阵的行或列)是矩阵的示例(例如,它是1xn矩阵或nx1矩阵)。如本文所用,术语“或”应该被解释为“和/或”,因此,例如,“a或b”是指“a”或“b”或“a和b”中的任何一个
65.应当理解,尽管术语“第一”、“第二”、“第三”等在本文可以用于描述各种元素、部件、区域、层和/或部分,但是这些元素、部件、区域、层和/或部分不应该被这些术语所限制。这些术语仅用于区分一个元素、部件、区域、层或部分与另一个元素、部件、区域、层或部分。因此,在不脱离本发明构思的精神和范围的情况下,本文讨论的第一元素、部件、区域、层或部分可以被称为第二元素、部件、区域、层或部分。
66.本文使用的术语仅仅是为了描述特定的实施例,而不是为了限制本发明构思。如本文所用,术语“基本上”、“大约”和类似的术语被用作近似术语,而不是程度术语,并且旨在说明本领域普通技术人员将会认识到的测量或计算值中的固有偏差。
67.如本文所用,单数形式“一”和“一个”旨在也包括复数形式,除非上下文清楚地指示出其他形式。还将理解,当在本说明书中使用时,术语“包括”指定所陈述的特征、整数、步骤、操作、元素和/或部件的存在,但是不排除存在或添加一个或多个其他特征、整数、步骤、操作、元素、部件、和/或它们的组。如本文所用,术语“和/或”包括一个或多个相关列出项目的任何和所有组合。当在元素列表之前时,诸如“至少一个”的表达修饰整个元素列表,而不是修饰列表中的单个元素。此外,当描述本发明构思的实施例时,使用“可以”是指“本公开的一个或多个实施例”。此外,术语“示例性的”旨在指示示例或说明。如本文所用,术语“使用”、“使用了”和“被使用”可以被认为分别与术语“利用”、“利用了”和“被利用”同义。
68.应当理解,当一个元素或层被称为“在另一个元素或层上”、“连接到”、“耦合到”或“邻近于”另一个元素或层时,它可以直接在该另一个元素或层上或连接到、耦合到或邻近于该另一个元素或层,或者可以存在一个或多个中间元素或层。相反,当一个元素或层被称为“直接在另一个元素或层上”、“直接连接到”、“直接耦合到”或“直接邻近”另一个元素或层时,不存在中间元素或层。
69.本文所述的任何数值范围旨在包括包含在所述范围内的相同数值精度的所有子范围。例如,“1.0至10.0”或“1.0至10.0之间”的范围旨在包括所述最小值1.0和所述最大值10.0之间(并且包括二者)的所有子范围,即最小值等于或大于1.0,并且最大值等于或小于10.0,例如2.4至7.6。本文所述的任何最大数值限制旨在包括其中包含的所有较低数值限制,而本说明书中所述的任何最小数值限制旨在包括其中包含的所有较高数值限制。
70.本文使用的术语“处理电路”是指用于处理数据或数字信号的硬件、固件和软件的任何组合。处理电路硬件可以包括例如专用集成电路(application specific integrated circuit,asic)、通用或专用中央处理单元(central processing unit,cpu)、数字信号处理器(digital signal processors,dsp)、图形处理单元(graphics processing units,gpu)和可编程逻辑器件,诸如现场可编程门阵列(field programmable gate array,fpga)。如本文所用,在处理电路中,每个函数由被配置(即,硬连线的)来执行该函数的硬件配置来执行,或者通过被配置为执行存储在非暂时性存储介质中的指令的更通用的硬件(诸如cpu)来执行。处理电路可以在单个印刷电路板(printed circuit board,pcb)上制造,或者分布在几个互连的pcb上。处理电路可以包含其他处理电路;例如,处理电路可以包括互连在pcb上的两个处理电路,fpga和cpu。
71.尽管本文已经具体描述和说明了可适应的存储器内函数系统的示例性实施例,但是许多修改和改变对于本领域技术人员来说是明显的。因此,应当理解,根据本公开的原理构建的可适应的存储器内函数系统可以不同于本文具体描述的方式来实施。本发明也在以
下权利要求及其等同物中定义。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜