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

用于使用存储器内处理进行矩阵乘法的装置和方法与流程

2022-03-08 20:07:20 来源:中国专利 TAG:


1.本公开的实施例涉及存储器内处理(processing-in-memory,pim)。


背景技术:

2.超低功率机器学习处理器对于执行嵌入式系统的认知任务而言是至关重要的,因为功率预算例如在电池或能量收集源的情况下是有限的。然而,由深度卷积神经网络(dcnn)生成的数据在常规的冯
·
诺依曼架构中导致存储器与计算单元之间的繁重通信量,并且不利地影响了这些系统的能效。作为加速dcnn执行的有前途的解决方案,基于电阻性随机存取存储器(reram)的非易失性pim应运而生。reram的高单元密度允许在芯片上实现大的片上reram阵列以存储dcnn的参数,而合适的功能,例如矢量矩阵乘法(vmm)可以直接在reram阵列及其外围电路中执行。


技术实现要素:

3.在此公开了用于使用pim进行矩阵乘法的装置和方法的实施例。
4.在一个示例中,一种用于矩阵乘法的装置包括行和列形式的pim块阵列、控制器以及累加器。每个pim块都被配置为处于计算模式或存储器模式。控制器被配置为将pim块阵列划分为:第一组pim块,每个pim块都被配置为处于存储器模式;以及第二组pim块,每个pim块都被配置为处于计算模式。第一组pim块被配置为存储第一矩阵,并且第二组pim块被配置为存储第二矩阵并且基于第一和第二矩阵计算第三矩阵的部分和。累加器被配置为基于第三矩阵的部分和输出第三矩阵。
5.在一些实施例中,第一组pim块包括pim块阵列的行,并且第二组pim块包括pim块阵列的剩余部分。
6.在一些实施例中,第一组pim块的尺寸小于第一矩阵的尺寸。在一些实施例中,控制器被配置为将第一矩阵映射到第一组pim块,使得第一组pim块基于第一组pim块的尺寸同时存储第一矩阵的一部分。
7.在一些实施例中,该装置还包括处于第一和第二组pim块之间的复用器(mux)。在一些实施例中,控制器还被配置为控制mux以将数据从第一组pim的每个pim块定向到第二组pim块的相应列中的pim块。
8.在一些实施例中,第一组pim块的至少一个pim块未处于相同的相应列中。
9.在一些实施例中,第二组pim块的尺寸匹配第二矩阵的尺寸。
10.在一些实施例中,第二矩阵具有三个或更多个维度。在一些实施例中,控制器被配置为将第二矩阵映射到第二组pim块,使得第二组pim块的每个pim块都存储第二矩阵的相应部分。
11.在一些实施例中,控制器被配置为控制第二组pim块以在计算第三矩阵的部分和时执行第一和第二矩阵的卷积。
12.在一些实施例中,第一矩阵包括卷积神经网络(cnn)中的特征图,并且第二矩阵包
括cnn的核(kernel)。
13.在一些实施例中,pim块阵列中的每个pim块包括存储器阵列和被配置为在存储器模式下被停用的矢量-矢量乘法(vvm)引擎。
14.在另一示例中,pim设备包括存储器阵列、矢量-矢量乘法(vvm)引擎和控制电路。存储器阵列被配置为存储第一矢量。控制电路被配置为在计算模式下启用vvm引擎并控制vvm引擎以执行第一矢量和第二矢量之间的点积以生成部分和。控制电路还被配置为在存储器模式下停用vvm引擎并控制存储器阵列以写入或读出第一矢量。
15.在一些实施例中,vvm引擎包括位计数器、移位累加器和多个and门。
16.在一些实施例中,pim设备还包括第一缓冲器,所述第一缓冲器被配置为从另一pim设备接收和缓冲第二矢量。
17.在一些实施例中,pim设备还包括第二缓冲器,所述第二缓冲器被配置为缓冲部分和并将该部分和发送给另一pim设备。
18.在一些实施例中,存储器阵列包括reram阵列。
19.在又一示例中,公开了一种由行和列形式的pim块阵列实现的用于矩阵乘法的方法。pim块阵列的第一组pim块每个都由控制器配置为处于存储器模式,并且pim块阵列的第二组pim块每个都由控制器配置为处于计算模式。第一矩阵由控制器映射到第一组pim块,并且第二矩阵由控制器映射到第二组pim块。第三矩阵的部分和由第二组pim块基于第一和第二矩阵来计算。第三矩阵基于第三矩阵的部分和来生成。
20.在一些实施例中,第一组pim块包括pim块阵列的行,并且第二组pim块包括pim块阵列的剩余部分。
21.在一些实施例中,第一组pim块的尺寸小于第一矩阵的尺寸。在一些实施例中,第一矩阵的一部分由第一组pim块基于第一组pim块的尺寸同时存储。
22.在一些实施例中,来自第一组pim块的每个pim块的数据由第一组pim块和第二组pim块之间的mux定向到第二组pim块的相应列中的pim块。
23.在一些实施例中,第一组pim块的至少一个pim块未处于相同的相应列中。
24.在一些实施例中,第二组pim块的尺寸匹配第二矩阵的尺寸。
25.在一些实施例中,第二矩阵具有三个或更多个维度。在一些实施例中,第二矩阵的相应部分由第二组pim块的每个pim块来存储。
26.在一些实施例中,为了计算第三矩阵的部分和,执行第一和第二矩阵的卷积。
27.在一些实施例中,第一矩阵包括cnn中的特征图,并且第二矩阵包括cnn的核。
附图说明
28.并入本文并形成说明书一部分的附图图解说明了本公开的实施例,并且与说明书一起进一步用于解释本公开的原理并使得本领域技术人员能够使用本公开。
29.图1示出了包括pim块阵列的装置的框图。
30.图2示出了根据本公开一些实施例的包括可重新配置的pim块阵列的示例性装置的框图。
31.图3示出了根据本公开一些实施例的包括用于矩阵乘法的pim块阵列的示例性装置的框图。
32.图4示出了根据本公开一些实施例的图3中的装置中的示例性pim块的框图。
33.图5a示出了根据本公开一些实施例的图4所示处于存储器模式的pim块的详细框图。
34.图5b示出了根据本公开一些实施例的图4所示处于计算模式的pim块的详细框图。
35.图6a示出了根据本公开一些实施例的用于在矩阵乘法中处于计算模式的pim块的示例性映射方案。
36.图6b示出了根据本公开一些实施例的用于在矩阵乘法中处于存储器模式的pim块的示例性映射方案。
37.图7示出了根据本公开一些实施例的矩阵乘法中的不同pim块之间的示例性数据流。
38.图8示出了根据本公开一些实施例的矩阵乘法中的不同pim块之间的示例性计算流。
39.图9是根据本公开一些实施例的由pim块阵列实施的用于矩阵乘法的示例性方法的流程图。
40.本公开的实施例将参考附图予以描述。
具体实施方式
41.尽管讨论了本发明的配置和布置,但是应当理解,此讨论仅仅是为了图解说明目的。本领域技术人员能够理解,可使用其它配置和布置而不偏离本公开的主旨和范围。对本领域技术人员显而易见的是,本发明也可用于其它多种应用。
42.应当注意,本发明说明书所提到的“一个实施案例”、“一实施方案”、“示例性实施例”、“一些实施例”等等是指,所描述的实施例可能包括特定特征、结构或特性,但不是每个实施例都一定包括该特定特征、结构或特性。此外,这样的表述并不一定指同一个实施例。此外,当特定特征、结构或特性结合某实施案例被描述时,属于本领域技术人员知识范围的是,结合其它实施例来实施这样的特定特征、结构或特性,而不管是否在此明确说明。
43.一般来说,术语可以至少部分地根据上下文中的使用来理解。例如,在此使用的术语“一个或多个”,至少部分地根据上下文,可用于以单数形式来描述任何特征、结构或特性,或以复数形式来描述特征、结构或特性的组合。类似地,诸如“一个”、“一”、或“该”之类的术语又可以至少部分地根据上下文被理解为表达单数用法或表达复数用法。
44.现有基于reram的nvpim架构主要为混合信号方式。例如,一些nvpim设备包括大量的数字/模拟转换器和模拟/数字转换器(adc/dac)以分别将数字输入变换成用于pim操作的模拟信号然后将计算结果变换回数字格式。然而,adc/dac占用了这些pim设计的大部分面积和功耗。提出了数字pim架构以通过消除a/d转换来提高能效并且改善应对这样的随机性的总设计弹性。一些nvpim设备例如尝试使用存储器内“nor”逻辑运算来实现vmm。然而,存储器内“nor”逻辑运算需要在每个“nor”运算开始时将存储器单元初始化为低电阻状态(lrs)。当将“nor”逻辑相组合以计算乘法或累加时,还需要附加的存储器空间来存储每个中间“nor”结果。此外,现有nvpim架构的高性能是以过量的数据复制或写入为代价来实现的。
45.在更高层级,当执行cnn中的矩阵乘法时,已知nvpim架构通常将nvpim块作为计算
设备与随机存取存储器(ram)结合使用以用于存储输入和输出数据以及来自计算的中间结果。例如,图1示出了包括pim块阵列的装置100的框图。装置100包括ram 102、pim块104阵列和总线106。每个pim块104都包括adc和dac以分别用于将数字输入变换成用于pim操作的模拟信号然后将计算结果变换回数字格式。每个pim块104还包括reram阵列,其每个都被配置为通过施加具有不同幅度和时长的电激励来在两个或更多电平(level)之间切换。每个reram元件都通过输入处的电压来表示矢量,然后在输出处收集的位线电流形成vmm结果。输入和输出数据通过总线106、例如装置100的主/系统总线被传输,并且存储在ram 102中,例如装置100的主/系统存储器中,而不是pim块104中。在矩阵乘法期间,中间数据也需要频繁地在每个pim块104与ram 102之间交换。
46.根据本公开的各个实施例提供了可重新配置的pim架构,其在各种矩阵乘法应用中,比如cnn中的卷积中,具有更高能效和灵活性。在pim块层级,每个pim块都可以被重新配置为处于计算模式和存储器模式二者任一。在计算模式下,矢量之间的点积的部分和可以在数字电路、即vvm引擎中被计算,以消除高成本的adc/dac。在更高层级,相同pim块的阵列和多个mux可以根据要执行的特定任务被重新配置为优化的布置。在一些实施例中,pim块阵列被配置成处于存储器模式的第一组pim块和处于计算模式的第二组pim块以用于执行矩阵乘法,比如cnn中的卷积。例如,特征图(features map)的数据和核(kernel)的权重可以使用有效的数据映射方案基于pim阵列的配置被对齐,由此避免以前的nvpim架构中的过量数据复制或写入。
47.图2示出了根据本公开一些实施例的包括可重新配置的pim块阵列的示例性装置200的框图。装置200可以包括pim块202阵列、多个mux 204、控制器206、累加器208、全局功能单元210和总线212。每个pim块202都可以是相同的,并且被配置为要么处于用于存储例如两维或更多维的矢量或矩阵之类的数据的存储器模式、要么处于用于存储数据以及执行诸如vmm或vvm之类的矢量/矩阵计算的计算模式。随着要执行的特定任务的改变,例如cnn中的卷积层或全连接(fc)层中的计算,每个pim块202都可以基于特定任务的计算方案在计算模式与存储器模式之间重新配置。在一些实施例中,即使pim块202阵列的布局是预设的,例如为正交的行和列的形式,mux 204的配置仍然可以根据要执行的特定任务灵活改变。例如,通过启用和停用不同行的pim块202之间的某些mux 204,pim块202阵列的布置可以被配置为适应与特定任务相对应的计算方案和数据流。根据一些实施例,被启用的mux 204将pim块202阵列划分成两个或更多个组,每个组都被配置为处于相同的计算或存储器模式。此外,尽管pim块202之间的缺省数据流处于相同的行和/或列,但是被启用的mux 204可以按照特定任务的需要进一步在不同行和/或列之间重定向数据流。
48.总线212可以是装置200的主/系统总线,其用于将诸如矩阵之类的输入数据传输到pim块202阵列。与图1中的装置100不同——装置100包括集中式的ram 100以用于存储输入和输出以及中间结果——,装置200中的一组pim块202可以被配置为处于存储器模式以替代ram 102。结果,根据一些实施例,数据流不再处于每个pim块104与集中式ram 102之间,而是基于pim块202阵列的布置、例如pim块202阵列的布局和/或mux 204的配置而遵循特定路径。pim块202阵列的输出、例如部分求和(和)可以被发送到累加器208,所述累加器208可以进一步被配置为基于部分和生成输出矩阵。
49.在一些实施例中,全局功能单元210被配置为执行任何合适的全局杂项功能,比如
池化、激活和编码方案等。例如,全局功能单元210可以执行零标志编码方案以节省零值到存储器阵列中的不必要的写入。附加的列可以由全局功能单元210添加到存储器阵列中以存储零标志,所述零标志对应于存储在存储器阵列的多个列中的高精度数据。零标志的缺省值可以是“0”,其指示数据是非零的。如果数据是零,则零标志可以被设置为“1”,其指示不执行到存储单元的写入以节省写入能量。在下面将详细描述的准备阶段期间,被标记为零的数据的所加载的位在该数据的零标志为“1”的情况下可以全部被设置为“0”。控制器206被配置为控制装置100的其它部件的运行,例如数据映射和数据流以及pim块202阵列和mux 204的计算方案。在一些实施例中,控制器206还被配置为重新配置每个vvm运算的数据精度。
50.图3示出了根据本公开一些实施例的包括用于矩阵乘法的pim块阵列的示例性装置300的框图。装置300可以包括:多个pim体(bank)302,其每个都用于矩阵乘法;以及输入/输出(i/o)接口304,其被配置为与诸如主处理器和/或系统存储器之类的其它设备交换数据。在一些实施例中,装置300被配置为执行cnn中的各种操作。例如,pim体的一些组306可以从i/o接口304接收图像、执行cnn中的卷积层中的操作并且生成中间特征图。pim体的另一组308可以接收中间特征图、执行cnn中的fc层中的操作并且生成图像的标签,所述标签被发送回i/o接口304。
51.图3还示出了用于执行cnn中的卷积层和fc层中的矩阵乘法的示例性pim体302。图3中的pim体302可以是图2中的装置200的一个示例,如下文详细描述的,所述装置200是基于cnn中的卷积层和fc层中的矩阵乘法任务来配置的。在一些实施例中,控制器206被配置为将pim块202阵列划分为:第一组pim块312,每个pim块都被配置为处于存储器模式;以及第二组pim块314,每个pim块都被配置为处于计算模式。第一组pim块312可以被配置为存储第一矩阵,比如cnn中的输入特征图。第二组pim块314可以被配置为存储第二矩阵,比如cnn的核,并且基于第一和第二矩阵计算诸如输出特征图之类的第三矩阵的部分和。在一些实施例中,累加器208被配置为从第二组pim块314接收部分和并且基于第三矩阵的部分和输出第三矩阵。例如,累加器208可以基于相应部分和生成第三矩阵的每个元素。
52.如图3所示,根据一些实施例,第一组pim块312包括pim块202阵列的行,例如pim块202阵列的第一行。根据一些实施例,第二组pim块312然后包括pim块202阵列的剩余部分。在一些实施例中,mux 204中的处于第一和第二组pim块314和312之间的仅仅一个mux 204被启用。也就是说,控制器206可以被配置为启用处于pim块202阵列的第一和第二行之间的mux 204并且停用其余mux 204(未在图3中示出)以将pim块202阵列划分成处于存储器模式的第一组pim块312和处于计算模式的第二组pim块314。如下面将详细描述的那样,控制器206还被配置为控制mux 204以将数据从第一组pim块312的每个pim块202定向到第二组pim块314的相应列中的pim块202。第一组和第二组pim块312和314之间的数据流路径可以在矩阵乘法中的不同阶段基于相应矩阵乘法方案在控制器206的控制下改变。例如,第一组pim块312的至少一个pim块202未处于相同的相应列中。在一个示例中,在第一组pim块312的第一列中加载的数据可以由mux 204重定向到第二列、第三列或者第二组pim块314的第一列之外的任何列。
53.如上所述,每个pim块202都可以是可被配置为处于存储器模式和计算模式二者任一的相同pim设备。参考图4,每个pim块202都可以包括存储器阵列402和vvm引擎404,所述
vvm引擎404被配置为在存储器模式下被停用。在一些实施例中,存储器阵列402包括reram阵列。能够理解,在其它示例中,存储器阵列402可以包括任何其它合适的存储器,举几个例子来说,所述存储器包括但不限于:相变随机存取存储器(pram)、磁阻随机存取存储器(mram)、铁电随机存取存储器(fram)。存储器阵列402可以存储第一矢量。pim块202还可以包括控制电路406,所述控制电路406被配置为在计算模式下启用vvm引擎404并控制vvm引擎404以执行第一矢量与第二矢量之间的点积以生成部分和。控制电路406还可以被配置为在存储器模式下停用vvm引擎404并控制存储器阵列402以写入或读出第一矢量。
54.在一些实施例中,pim块202还包括外围电路,包括行解码器416和列解码器414以用于促进存储器阵列402的操作。外围电路可以包括用于促进存储器阵列402的操作的任何合适的数字、模拟和/或混合信号外围电路。例如,外围电路可以包括下列各项中的一个或多个:页缓冲器、解码器(例如行解码器416或列解码器414)、灵敏放大器(sense amplifier)、驱动器、电荷泵、电流或电压参考、或者电路的任何有源或无源部件(例如晶体管、二极管、电阻器或电容器)。pim块202还可以包括存储器i/o接口412,所述存储器i/o接口412可操作地耦合在存储器阵列402与存储器总线之间以在存储器总线与存储器阵列402之间写入和读出第一矢量。pim块202还可以包括用于中间数据存储的各种缓冲器,包括:列缓冲器408,其被配置为通过存储器总线接收和缓冲例如来自其它pim设备的第二矢量;以及部分和缓冲器410,其被配置为缓冲部分和并通过部分和总线将部分和发送给另一pim设备。
55.图5a示出了根据本公开一些实施例的处于存储器模式的pim块202的详细框图。图5b示出了根据本公开一些实施例的处于计算模式的图4中的pim块202的详细框图。vvm引擎404可以包括位计数器502、移位累加器508以及多个and门506。如图5a所示,控制电路406可以在存储器模式下停用vvm引擎404和部分和缓冲器410(以虚线示出),使得pim块202充当存储器元件以用于在存储器阵列402中存储第一矢量。如图5b所示,控制电路406可以在计算模式下启用vvm引擎404和部分和缓冲器410(以实线示出),使得存储在存储器阵列402中的第一矢量和列缓冲器408中缓冲的第二矢量可以被发送给vvm引擎404以计算第一和第二矢量的点积,所述点积可以在部分和缓冲器410中作为部分和被缓冲。
56.在执行cnn中的特征图和核的卷积的一个示例中,当pim块202处于存储器模式时,pim块202充当支持读取和写入访问的存储器;当pim块202处于计算模式时,pim块202可以执行vvm以便以可重新配置的数据精度来计算cnn执行中的输出特征图的部分和。在存储器模式下,当访问pim块202中的特征图时,仅仅列缓冲器408可以被激活(存储器阵列402和控制电路406在任何操作期间都总是开启)。列缓冲器408可以被用于对在存储器列的每行上正在被访问的输入数据进行缓冲。存储器阵列402可能需要支持行和列访问二者。在计算模式下,部分和缓冲器410和vvm引擎404被激活,并且所执行的vvm的计算可以表达为:
[0057][0058]
其中a和b分别是原始地存储在第一组pim块312(处于存储器模式的pim块202)中的特征图的列、以及存储在第二组pim块314(处于计算模式的pim块202)中的核。应当注意,a可以在计算模式下在准备阶段期间已经被加载到pim模块202的列缓冲器408中。n和m分别
是a和b的位宽。在b在计算模式下从pim块202的存储器阵列402的列中被读出以后,其可以被发送到vvm引擎404中以使用and门506执行a与b之间的点积,或者a
·
b=[a0b0,...,a
row-1brow-1
]。a
·
b可以被发送到位计数器502中以计算a
·
b的元素的和。如果特征图和核的位宽不是1(即二进制精度),则上面的过程可以重复n
×
m次以计算a和b的高阶位之间的点积。可能需要移位累加运算以计算具有不同权重的点积之和,并且部分和缓冲器410可以被用于存储中间部分和。为了处理负值,vvm引擎404可以被复制以并行处理正累加和负累加二者。矢量中的每个元素的符号位可以首先从存储器阵列402中被读取,并且确定哪个vvm引擎404可以执行正或负数据的累加。然后,负的部分和可以在部分和累加期间从正部分和中被减去。
[0059]
回过来参考图3,控制器206可以被配置为执行数据映射过程以将第一矩阵映射到第一组pim块312并且将第二矩阵映射到第二组pim块314。在一些实施例中,第一组pim块312的尺寸小于第一矩阵的尺寸。例如,第一矩阵可以是cnn中的特征图。控制器206被配置为将第一矩阵映射到第一组pim块312,使得第一组pim 312基于第一组pim块312的尺寸同时存储第一矩阵的一部分。也就是说,第一矩阵可以被“折叠”为变成多块,每块都适应于第一组pim块312的尺寸。在一些实施例中,第二组pim块314的尺寸匹配第二矩阵的尺寸。例如,诸如cnn中的核的第二矩阵可以具有三个或四个维度。控制器206可以被配置为将第二矩阵映射到第二组pim块314,使得第二组pim块314的每个pim块202都存储第二矩阵的相应部分。也就是说,pim块202的数目和第二组pim块314的布局可以基于第二矩阵的元素数目和布局来确定,以形成第二组pim块314中的pim块314中的pim块202与第二矩阵中的元素之间的一一映射。
[0060]
继续上面在cnn中执行特征图和核的卷积的示例,可以推断,网络层(即,核)的权重可以存储在第二组pim块314中,并且特征图可以存储在第一组pim块312中。由于特征图和核可以是高维张量,因此它们可以首先被展开成多个矢量,然后逐列存储在pim块202的存储器阵列402中。如下面详细描述的那样,这样的按列布置可以方便地支持可重新配置的数据精度。
[0061]
假设核的配置由[in
ch
,out
ch
,k,k]表示,其中in
ch
是输入通道的数目,out
ch
是输出通道的数目,k是核的尺寸。特征图的配置由[in
ch
,h,w]来表示,其中h和w分别是特征图的高度和宽度。每个pim块202的存储器阵列402的大小是[row,col],其中row和col分别是行和列的数目。核权重和特征图参数的位宽分别是n和m。每个存储器单元可以仅仅可靠地存储二进制值,即“0”和“1”。对于大小为k
×
k并对应于相同输出通道的in
ch
核而言,可以将in
ch
核的处于相同位置的元素分组为一矢量,并且可以将该矢量映射到第二组pim块314中的一个pim块202的列。核的处于不同位置的元素可以被映射为第二组pim块314中的不同pim块202。因此,核可以被映射到第二组pim块314中总共k
×
k个pim块202,这如图6a所示。如果核权重的位宽n》1,则可能需要存储器阵列402中的处于不同列的n个存储单元来表示一个核元素,其中假定in
ch
≤row并且out
ch
×
n≤col。如果in
ch
》row或out
ch
×
n》col,则可能需要将映射扩展到第二组pim块314中的更多pim块202。
[0062]
图6b示出了特征图到第一组pim块312的映射。可以将不同特征图的in
ch
的同一行的相同位置处的元素分组为矢量,并且可以将矢量映射到第一组pim块312中的一个pim块202的列。然后,元素位置可以水平滑动,并且可以将经分组的矢量映射到第一组pim块312
中的相同pim块202中的不同列。可能存在总共w个这样的矢量,它们覆盖了所有特征图的相同行上的元素,并被映射到第一组pim块312中的pim块202中。如果特征图的位宽n》1,则可能需要存储器阵列402的不同列处的n个存储单元来表示一个特征图参数。在那之后,移至特征图的下一行,可以重复上面的所有操作以将特征图的这一新行映射到第一组pim块312中的另一个pim块202。应当注意,每次仅需要存储特征图的k行即可促进计算。当需要k 1行时,它可以覆写第一组pim块312中的第一行的位置。如果in
ch
》row或w
×
n》col,则可能需要将映射扩展到第一组pim块312中的更多pim块202。
[0063]
例如,为了使用存储器阵列大小为256
×
256的pim块202来计算具有核[256,32,3,3]和特征图[256,32,32]的vgg网络中的conv3
×
3层,可能需要将特征图和核分别映射到具有3个pim块202的第一组pim块312(以下称为“comp.block”)和具有9个pim块202的第二组pim块314(以下称为“mem.block”),这如图7所示。comp.block块(i,j)(i,j=0,1,2)表示in
ch
×
ch核中的元素(i,j),并且mem.block块(3,j)(j=0,1,2)表示参与计算的特征图的第j行。
[0064]
为了将fc层的核映射到第二组pim块314中的piim块202,权重矩阵的列被直接映射到pim块202的列,并且pim块202的多个列可以被组合以支持权重的高精度。再者,如果权重矩阵的大小大于第二组pim块314的大小,则权重矩阵可以映射到多个第二组pim块314。
[0065]
根据一些实施例,在数据映射之后,控制器206被配置为控制第二组pim块314以在计算第三矩阵的部分和时执行第一矩阵和第二矩阵的卷积。继续上面在cnn中执行特征图和核的卷积的示例,卷积的计算可以分为三个阶段-准备、计算和平移,这如图8所示。
[0066]
在准备阶段,特征图可以先从mem.block中被逐列读取,然后被发送到comp.block的每一行的输入中。数据传输方向可以由要计算的输出特征图的行索引r
out
来确定。例如,r
out
=0处于卷积开始处。块(3,j)(j=0,1,2)的列i(i=0,1,2)可以被读出并被发送到块(i,j)(i,j=0,1,2)的输入以计算行r
out
=0。在获取行r
out
=0以后,r
out
移动到1。存储块(3,0)中的输入特征图的第0行的位置可能会被第3行覆写。块(3,j)(j=0,1,2)的列i(i=0,1,2)可以被读出并被发送到块(i,(j 2)%3)(i,j=0,1,2)的输入以计算行r
out
=1,这如图8所示。通常,块(3,j)(j=0,1,2)的列i(i=0,1,2)可以被读出并被发送到块(i,f(j))(i,j=0,1,2)来计算行r
out
。函数f(j,r
out
)可以表达为:
[0067]
f(j,r
out
)=(j k-r
out
%k)%k
ꢀꢀꢀ
(2)
[0068]
其中在本示例中k为3。
[0069]
在计算阶段,comp.block可以按下式来计算特征图与权重之间的vvm结果:
[0070][0071]
其中i、j是阵列中pim块202的索引,ic、oc分别是输入和输出通道的索引,x
i,j,ic
是存储在块(i,j)中存储的特征图的第ic个输入通道,w
oc,ic,i,j
是存储在块(i,j)中的核的oc输出通道的第ic个输入通道。在本示例中,可以同时在块(0,0)

块(2,2)中生成共计3
×
3=9个部分和。所有这9个部分和可以由累加器208累加以产生输出特征图的相应元素。注意,可以out
ch
次重复以上计算,以生成全部out
ch
个特征图的相同位置处的元素。在本示例中,out
ch
为32。
[0072]
在计算阶段,输入特征图的r
out
k行可以被存储到mem.block中,并覆写r
out
行的位置,这如上所述。在移位阶段,可以读取块(3,j)(j=0,1,2)的列c
out
k

1,其中c
out
是要计算的输出特征图的列索引。然后,可以将块(i,j)的输入移至块(i

1,j)(i,j=0,1,2),并且块(3,j)的列c
out
k

1可以按如上所述那样被发送到块(2,f(j))。注意,这样的微妙的移位设计避免了多次复制特征图元素,并且因此减少了与存储器写入相关联的能耗。
[0073]
图9是根据本公开一些实施例的由pim块阵列实施的用于矩阵乘法的示例性方法900的流程图。图9中所示pim块阵列的示例包括图3中所示的pim块202阵列。能够理解,方法900中所示的操作不是穷尽的,而是其它操作也可以在所示操作之前、之后或之间执行。另外,所述操作中的一些可以同时执行或者以与图9中所示不同的顺序执行。
[0074]
参考图9,方法900开始于操作902,在操作902中,pim块阵列的第一组pim块每个都由控制器配置为处于存储器模式,并且pim块阵列的第二组pim块每个都由控制器配置为处于计算模式。在一些实施例中,第一组pim块包括pim块阵列的行,并且第二组pim块包括pim块阵列的剩余部分。如图3所示,控制器206可以将第一组pim块312中的每个pim块202配置为处于存储器模式,并且将第二组pim块314中的每个pim块202配置为处于计算模式。
[0075]
方法900进行到操作904,这如图9所示,在操作904中,第一矩阵由控制器映射到第一组pim块,并且第二矩阵由控制器映射到第二组pim块。在一些实施例中,第一矩阵包括cnn中的特征图,并且第二矩阵包括cnn的核。在一些实施例中,第一组pim块的尺寸小于第一矩阵的尺寸,并且第一矩阵的一部分由第一组pim块基于第一组pim块的尺寸同时存储。在一些实施例中,第二组pim块的尺寸匹配第二矩阵的尺寸。例如,第二矩阵可以具有三个或更多个维度,并且第二矩阵的相应部分可以由第二组pim块的每个pim块来存储。如图3所示,控制器206可以将第一矩阵,比如特征图映射到第一组pim块312,并且将第二矩阵,比如核映射到第二组pim块314。
[0076]
方法900进行到操作906,这如图9所示,在操作906,第三矩阵的部分和由第二组pim块基于第一和第二矩阵来计算。在一些实施例中,来自第一组pim块的每个pim块的数据由第一组pim块和第二组pim块之间的mux定向到第二组pim块的相应列中的pim块。在一些实施例中,第一组pim块的至少一个pim块未处于相同的相应列中。在一些实施例中,计算第三矩阵的部分和包括执行第一和第二矩阵的卷积。如图3所示,第一和第二组pim块312和314之间的mux 204可以在它们之间引导数据,并且第二组pim块314可以基于第一和第二矩阵来计算第三矩阵的部分和。
[0077]
方法900进行到操作908,这如图9所示,第三矩阵基于第三矩阵的部分和来生成。如图3所示,第三矩阵可以由累加器208基于由第二组pim块312计算出的第三矩阵的部分和来生成。
[0078]
前文对各种具体实施例的详细描述旨在充分公开本发明的概要性质,以使他人可以通过应用领域内的基本常识,在不进行过度实验且不背离本发明的基本概念的情况下,容易地修改/调整这些具体实施例以适应多种应用。因此,上述调整和修改基于本发明的教导和指导,旨在使这些修改和调整保持在本发明所描述的实施例的等同物的含义以及范围之内。能够理解,此处所用的词汇或术语均以描述为目的,从而使得具有专业知识的人在本发明的启示和指导下可以理解这些词汇和术语,而不应该被用来限定本发明的内容。
[0079]
本发明通过借助功能模块来解释特定功能和特定关系,来实现对本发明中的实施
案例的描述。为方便叙述,上述功能模块的界定是任意的。只要能实现所需的特定功能和特定关系,其它替代的界定也可被采用。
[0080]
发明内容和摘要部分可能阐述了本发明的一个或多个实施方式,但并不包括发明人构思的所有示例性实施例,因此,不旨在以任何方式限定本发明和权利要求书的范围。
[0081]
本发明的范围不受限于任一上述实施例,而应该依据权利要求书及其等同物来定义。
再多了解一些

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

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

相关文献