多级存储器层级结构的制作方法

文档序号:20112979发布日期:2020-03-17 19:25阅读:126来源:国知局
多级存储器层级结构的制作方法

本公开涉及卷积神经网络,并且具体地提高了乘积累加的存储器存取效率。



背景技术:

卷积神经网络的核心是频繁的数据操纵器和数据存取器。通过网络的数据在连续循环中被使用和再使用(reuse)。在乘积累加层附近,这种数据的循环经常重复。使用、寻址和存储,然后寻址和提取数据,并且再使用该相同的数据,代表了在当前系统中的低效率。所寻求的是一种更有效的存储器使用和再使用的方法。寻求一种根据存取频率、带宽、操作频率和通过距离将存储器划分为层级结构的方法。还寻求一种以使系统能够更快地存取数据的方式捕获和存储数据的方法。



技术实现要素:

一种在卷积神经网络中分层构造多级存储器的第一示例方法,包括以下步骤中的至少一个步骤:将存储器划分为多个部分;将所述多个部分划分为多个条带;在乘积累加(mac)阵列中利用来自所述多个条带的输入数据;将中间结果从mac阵列输出到结果缓冲器的多个条带中的至少一个条带;将中间结果从结果缓冲器的多个条带中的至少一个条带回送(loopback)到输入数据缓冲器的多个条带中的至少一个条带;以及将最终结果从结果缓冲器的多个条带中的至少一个条带输出到输出缓冲器的多个条带中的至少一个条带。

在其中一个实施例中,所述方法还包括:划分出mac权重缓冲器部分;划分出输入数据缓冲器部分;划分出结果缓冲器部分;划分出输出缓冲器部分;划分出共享数据缓冲器部分;划分出位测试权重存储器部分;划分出位测试数据存储器部分;和划分出外部随机存取存储器部分。

在其中一个实施例中,所述方法还包括:将所述输入数据缓冲器部分划分为多个输入缓冲数据条带;将所述结果缓冲器部分划分为多个结果缓冲器条带;将所述输出缓冲器部分划分为多个输出缓冲器条带;将所述共享数据缓冲器部分划分为多个共享数据条带;和将所述位测试数据存储器部分划分为多个位测试数据存储器条带。

在其中一个实施例中,所述方法还包括从所述外部随机存取存储器部分接收权重和输入数据;对来自所述位测试权重存储器部分的权重进行解压缩;和将解压缩的权重存储在所述mac权重缓冲器部分中。

在其中一个实施例中,所述方法还包括:将输入数据从所述位测试数据存储器部分导入到所述共享数据缓冲器部分的所述多个条带中的至少一个条带;将所述输入数据从所述共享数据缓冲器部分的所述多个条带中的至少一个条带导入到所述输入数据缓冲器部分的所述多个条带中的至少一个条带;和在所述mac阵列处从所述mac权重缓冲器部分和所述输入数据缓冲器部分接收权重。

在其中一个实施例中,所述方法还包括:将所述最终结果从所述输出缓冲器部分的所述多个条带中的至少一个条带输出到所述共享数据缓冲器部分的所述多个条带中的至少一个条带;将所述最终结果从所述共享数据缓冲器部分的所述多个条带中的至少一个条带输出到所述位测试数据存储器部分的所述多个条带中的至少一个条带;和将所述最终结果从所述位测试数据存储器部分的所述多个条带中的至少一个条带输出到所述外部随机存取存储器部分。

在其中一个实施例中,所述方法还包括:将所述最终结果从所述输出缓冲器部分的所述多个条带中的至少一个条带输出到所述共享数据缓冲器部分的所述多个条带中的至少一个条带;将所述最终结果从所述共享数据缓冲器部分的所述多个条带中的至少一个条带输出到所述位测试数据存储器部分的所述多个条带中的至少一个条带;和将所述最终结果从所述位测试数据存储器部分的所述多个条带中的至少一个条带输出到所述外部随机存取存储器部分。

在其中一个实施例中,所述方法还包括:存储数据集的宽度分量,使得宽度分量在存储器阵列中沿第一地址方向线性增加;存储所述数据集的高度分量,使得高度分量在所述存储器阵列中沿与所述第一地址方向正交的第二地址方向线性增加;和存储所述数据集的深度分量,使得深度分量在所述存储器阵列中沿与所述第一地址方向和所述第二地址方向对称的第三地址方向线性增加。

在其中一个实施例中,所述方法还包括:将所述多个输入缓冲数据条带划分为多个输入缓冲数据块;将所述多个结果缓冲器条带划分为多个结果缓冲器块;将所述多个输出缓冲器条带划分为多个输出缓冲器块;将所述多个输出缓冲器条带划分为多个共享数据块;和将所述多个输出缓冲器条带划分为多个位测试数据存储器块。

在其中一个实施例中,所述方法还包括:将输入数据从所述位测试数据存储器部分导入到所述共享数据缓冲器部分的所述多个块中的至少一个块;将所述输入数据从所述共享数据缓冲器部分的所述多个块中的至少一个块导入到所述输入数据缓冲器部分的所述多个块中的至少一个块;和在所述mac阵列处从所述mac权重缓冲器部分和所述输入数据缓冲器部分接收权重。

在其中一个实施例中,所述方法还包括:将所述最终结果从所述输出缓冲器部分的所述多个块中的至少一个块输出到所述共享数据缓冲器部分的所述多个块中的至少一个块;将所述最终结果从所述共享数据缓冲器部分的所述多个块中的至少一个块输出到所述位测试数据存储器部分的所述多个块中的至少一个块;和将所述最终结果从所述位测试数据存储器部分的所述多个块中的至少一个块输出到所述外部随机存取存储器部分。

在其中一个实施例中,所述方法还包括:存储数据集的宽度分量,使得宽度分量在存储器阵列中沿第一地址方向线性增加;存储所述数据集的高度分量,使得高度分量在所述存储器阵列中沿与所述第一地址方向正交的第二地址方向线性增加;和存储所述数据集的深度分量,使得深度分量在所述存储器阵列中沿与所述第一地址方向和所述第二地址方向对称的第三地址方向线性增加。

在其中一个实施例中,所述方法还包括:存储数据集的宽度分量,使得宽度分量在存储器阵列中沿第一地址方向线性增加;存储所述数据集的高度分量,使得高度分量在所述存储器阵列中沿与所述第一地址方向正交的第二地址方向线性增加;和存储所述数据集的深度分量,使得深度分量在所述存储器阵列中沿与所述第一地址方向和所述第二地址方向对称的第三地址方向线性增加。

在卷积神经网络中分层构造多级存储器的第二示例方法,包括以下步骤中的至少一个步骤:存储数据集的宽度分量,使得宽度分量在存储器阵列中沿第一地址方向线性增加;存储数据集的高度分量,使得高度分量在存储器阵列中沿与第一地址方向正交的第二地址方向线性增加;以及存储数据集的深度分量,使得深度分量在存储器阵列中沿与第一地址方向和第二地址方向对称的第三地址方向线性增加。

在卷积神经网络中分层构造多级存储器的第三示例方法,包括以下步骤中的至少一个步骤:在第一存储器中存储三维数据集的宽度分量,使得宽度分量通过第一存储器地址空间线性增加;在第二存储器中存储三维数据集的高度分量,使得高度分量通过第二存储器地址空间线性增加;以及在第三存储器中存储三维数据集的深度分量,使得深度分量通过第三存储器地址空间线性增加。

附图说明

在附图中:

图1是根据本公开的一个实施例的第一示例系统图;

图2是根据本公开的一个实施例的第二示例系统图;

图3是根据本公开的一个实施例的示例自适应存储器层级结构;

图4是根据本公开的一个实施例的存储器条带和存储器块的第一示例;

图5是根据本公开的一个实施例的多存储器条带化的第二示例;

图6是根据本公开的一个实施例的存储器布局的第三示例;

图7是根据本公开的一个实施例的存储器布局的第四示例;

图8是根据本公开的一个实施例的形成存储器层级结构的第一示例方法;

图9是根据本公开的一个实施例的形成存储器层级结构的第二示例方法;以及

图10是根据本公开的一个实施例的形成存储器层级结构的第三示例方法。

具体实施方式

写出以下列出的实施例仅用于说明该装置和方法的应用,而不是限制范围。对该装置和方法的修改的等同形式应归入权利要求的范围内。

贯穿以下描述和权利要求使用某些术语来指代特定系统部件。如本领域技术人员将理解的,不同的公司可以以不同的名称来指代部件和/或方法。本文不打算区分名称不同但功能并非不同的部件和/或方法。

在下面的讨论和权利要求中,术语“包含(including)”和“包括(comprising)”以开放式的方式使用,并且因此可以被解释为意味着“包括,但不限于......”。此外,术语“耦合(couple)”或“耦合(第三人称)”旨在意味着间接或直接连接。因此,如果第一设备耦合至第二设备,则该连接可以是通过直接连接,或通过经由其它设备和连接件的间接连接。

图1描绘了示例混合计算系统100,其可以用于实施与过程800、900和1000的一个或多个部分或步骤的操作相关联的神经网。在该示例中,与混合系统相关联的处理器包括现场可编程门阵列(fpga)122,图形处理器单元(gpu)120和中央处理单元(cpu)118。

处理单元118、120和122具有提供神经网的能力。cpu是可以执行许多不同功能的通用处理器,其通用性导致执行多个不同任务的能力,然而,其对多个数据流的处理是有限的并且其相对于神经网络的功能是非常有限的。gpu是具有许多能够依次处理并行任务的小处理核的一种图形处理器。fpga是现场可编程器件,其具有被重新配置和以硬连线的电路的方式执行可编程到cpu或gpu中的任何功能的能力。由于fpga的编程是以电路的形式,因此其速度比cpu快许多倍,并且明显快于gpu。

系统可以包含其他类型的处理器,例如加速处理单元(apu),其包括具有片上gpu元件的cpu和专用于执行高速数字数据处理的数字信号处理器(dsp)。专用集成电路(asic)也可以执行fpga的硬连线功能,然而,设计和生产asic的前置时间大约是一年的若干个季度,而不是编程fpga中可用的快速周转实现。

图形处理器单元120、中央处理单元118和现场可编程门阵列122彼此连接并且连接到存储器接口和控制器112。fpga通过连接至存储器互连的可编程逻辑电路130而连接到存储器接口。由于fpga以非常大的带宽工作的事实并且为了将fpga中用来执行存储器任务的电子线路最小化,利用了这种附加的器件。存储器接口和控制器112被另外连接到持久性存储器磁盘110、系统存储器114和只读存储器(rom)116。

可以利用图1的系统以对fpga进行编程和训练。gpu可以很好地处理非结构化数据并且可以被利用以进行训练,一旦数据已经被训练,就可以找到确定性推理模型,并且cpu可以利用由gpu确定的模型数据对fpga进行编程。

存储器接口和控制器连接到中央互连124,中央互连另外连接到gpu120、cpu118和fpga122。中央互连124另外连接到输入和输出接口128以及网络接口126。

图2描绘了可用于实施与过程600的一个或多个部分或步骤的操作相关联的神经网的第二示例混合计算系统200。在该示例中,与混合系统相关联的处理器包括现场可编程门阵列(fpga)210和中央处理单元(cpu)220。

fpga210电连接到fpga控制器212,fpga控制器212与直接存储器存取(dma)218接口连接。dma连接到输入缓冲器214和输出缓冲器216,输入缓冲器214和输出缓冲器216两者都耦合到fpga,以分别对进入fpga和从fpga出来的数据进行缓冲。dma218具有两个先进先出(fifo)缓冲器,一个用于主cpu,另一个用于fpga,dma允许将数据写入适当的缓冲器以及从适当的缓冲器读取数据。

在dma的cpu侧是主开关228,主开关228将数据和命令传送(shuttle)到dma。dma还连接到sdram控制器224,sdram控制器224允许将数据从cpu220传送到fpga和从fpga传送到cpu220,并且sdram控制器还连接到外部sdram226和cpu220。主开关228连接到外围设备接口230。闪存控制器222控制持久性存储器并且连接到cpu220。

本公开讨论了可能的多级层级结构存储器系统。在图3所示的一个示例中,系统具有四个级别:外部随机存取存储器310,用于权重的片上共享随机存取存储器312和用于激活数据的片上共享随机存取存储器314,由多个阵列共享的共享缓冲器318,输出缓冲器320、输入数据缓冲器322和结果缓冲器324。该架构可以提供功耗和可持续存储器带宽之间的平衡。

存储器功耗与存取宽度、存取频率、操作频率、从存储器到计算元件的数据行进距离以及存储器位置成比例。片外随机存取存储器的存取的频率高并且功耗高。对大型片上共享存储器的宽数据访问是高度耗电的。

一种可能的解决方案是限制对本地随机存取存储器的高频率存取,并且将存储器与乘积累加阵列紧密耦合,以在实现高带宽的同时使功耗最小化。另一种可能的解决方案是利用智能调度来使对大存储器的存取最小化。

在图3中,元件348描绘了去往和来自外部随机存取存储器的数据通路。元件330、334和346描绘了权重读取路径。元件332、318和342描绘了激活数据输入路径。元件336、338、340和344描绘了将激活数据写回到位测试存储器(btmem)。

一种可能的存储器层级结构将数据/权重输入分解为多个逻辑分区以减少更昂贵的存储器存取,即随机存取存储器和/或btmem,并且以最小的存储器成本增加数据再使用。

网络被分为不同的部分:外部动态ram310、用于权重的位转移存储器(btmem_w)312、用于激活数据的位转移存储器(btmem_d)314、权重解压缩器316、共享数据缓冲器318、输出缓冲器320、输入数据缓冲器322、结果缓冲器324和乘积累加阵列328。

输入激活数据被划分为多个条带410(图4),使得条带化数据可以适合片上sram、位测试数据存储器(btmem_d)。用于条带的中间层的输出数据344被回送作为用于下一层的输入数据342,形成链接的处理顺序,这极大地减少了随机存取存储器存取。

每部分滤波器权重以高度压缩格式适配于位测试权重存储器(btmem_w),并且由权重解压缩器316解压缩并发送334至mac权重缓冲器326。该部分中的条带再使用同一滤波器权重,这大大减少了外部ram存取。

可以进一步将条带410(图4)划分为块(tile)412(图4)以增加局部累加并且削减执行延迟。在一个示例中,处理一个输入块的中间结果被保存在结果缓冲器324(图3)中,并且仅最终结果340(图3)在被写回到共享数据缓冲器318(图3)之前被发送至输出缓冲器320(图3)。

输入激活数据在一批内的每层是三维的。不同的引擎针对存储器的不同级别以及从不同的起始坐标以不同的顺序(例如深度到宽度到高度(d->w->h)或宽度到高度到深度(w->h->d))读取数据。

例如,在图5中的不同条带可以具有不同的起始坐标。图5说明了旋转偏移,示出了四个存储体。

为了支持非常高带宽的存取,示例存储器组织方案可以利用具有如图5所示的旋转偏移的多个堆积(banked)的存储器或具有如图6和图7所示的数据混合的多个堆积的存储器。

图6和7描绘了数据混合,该数据混合通过对于跨越存储体的不同地址,给予以z->x->y顺序读取的同一物理地址x->y->z,来支持不同的读取顺序。在图6和图7中示出了未对准的数据间距(datapatch)。通过利用存储开销的小的存储百分比(在图6和7中被突出显示为“额外的”),实现了未对准的模式,使得通过向不同的存储体给予不同的地址来获得读取x-y-z、y-x-z或z-x-y顺序。

图8描绘了形成存储器层级结构的第一示例方法,包括将存储器划分810为多个部分(如图3所示):外部随机存取存储器310、用于权重的片上共享随机存取存储器312和用于激活数据的片上共享随机存取存储器314、由多个阵列共享的共享缓冲器318以及输出缓冲器320、输入数据缓冲器322和结果缓冲器324。该方法然后包括将所述多个部分划分812为多个条带410(图4),以及将所述多个条带划分814为多个块412(图4)。该方法然后包括在mac阵列328(图3)中利用816来自所述多个块的输入数据,并将中间结果从mac阵列输出818到结果缓冲器324(图3)的多个块中的至少一个块,以及将中间结果从所述结果缓冲器的多个块中的至少一个块回送820到输入数据缓冲器322(图3)的多个块中的至少一个块。该方法然后包括将最终结果从所述结果缓冲器的多个块中的至少一个块输出822到输出缓冲器320(图3)的多个块中的至少一个块。

图9描绘了形成如图5所示的存储器层级结构500的第二示例方法,包括:存储910数据集的宽度分量,使得宽度分量在存储器阵列中沿第一地址方向线性增加;以及存储912数据集的高度分量,使得高度分量在存储器阵列中沿与第一地址方向正交的第二地址方向线性增加。该方法还包括存储914数据集的深度分量,使得深度分量在存储器阵列中沿与第一地址方向和第二地址方向对称的第三地址方向线性增加。

图10描绘了形成如图6和图7所示的存储器层级结构600,700的第三示例方法,包括:在第一存储器中存储1010三维数据集的宽度分量,使得宽度分量通过第一存储器地址空间线性增加;在第二存储器中存储1012三维数据集的高度分量,使得高度分量通过第二存储器地址空间线性增加;以及在第三存储器中存储1014三维数据集的深度分量,使得深度分量通过第三存储器地址空间线性增加。

本领域的技术人员将理解,本文中所描述的各种说明性的块、模块、元件、部件、方法和算法可被实施为电子硬件、计算机软件或两者的组合。为了说明硬件和软件的这种可互换性,上面已经在功能方面对各种说明性的方框、模块、元件、部件、方法和算法进行了大致描述。将该功能实施为硬件还是软件取决于强加于整个系统的特定应用和设计约束。熟练的技术人员可以针对每个特定应用以不同方式实现所描述的功能。各种部件和块可以不同地布置(例如,以不同的顺序布置,或以不同的方式划分)而完全不脱离主题技术的范围。

应理解,所公开的过程中的步骤的特定顺序或层级是对示例方法的说明。基于设计偏好,可以理解的是,可以重新排列过程中的步骤的特定顺序或层级。一些步骤可以同时执行。所附方法权利要求以样本顺序呈现各个步骤的元素,并不意味着限制于所呈现的特定顺序或层级。

提供前面的描述是为了使本领域的技术人员能够实践本文中所描述的各个方面。前面的描述提供了主题技术的各种示例,并且主题技术不限于这些示例。对于本领域技术人员来说,对这些方面的各种修改是明显的,并且本文定义的一般原理可以应用于其他方面。因此,权利要求不旨在限于本文所示的方面,而是旨在使全部范围与权利要求的语言表述相一致,其中除非特别地如此说明,否则对单数元素的引用并非旨在表示“一个且仅一个”,而是表示“一个或多个”。除非另外特别说明,否则术语“一些”是指一个或多个。男性中的代词(例如,他的)包括女性和中性(例如,她的和它的),反之亦然。标题和副标题(如果有的话)仅用于方便而使用,并不限制本发明。谓词“被配置以”,“可操作以”和“被编程以”并不意味着对主语的任何特定的有形的或无形的修改,而是旨在可互换地使用。例如,被配置以监控和控制操作或部件的处理器,还可以意味着处理器被编程以监控和控制操作或处理器可操作以监控和控制操作。同样地,被配置以执行代码的处理器,可以被解释为被编程以执行代码或可操作以执行代码的处理器。

诸如“方面”之类的短语并不暗示这样的方面对于主题技术是必不可少的或者这样的方面适用于主题技术的所有配置。涉及一方面的公开可适用于所有配置或一个或多个配置。一个方面可提供一个或多个示例。诸如方面的短语可以指代一个或多个方面,反之亦然。诸如“实施例”之类的短语并不暗示这样的实施例对于主题技术是必不可少的或者这样的实施例适用于主题技术的所有配置。涉及一个实施例的公开可以适用于所有实施例或一个或多个实施例。实施例可以提供一个或多个示例。诸如“实施例”的短语可以指代一个或多个实施例,反之亦然。诸如“配置”之类的短语并不暗示这种配置对于主题技术是必不可少的或者这种配置适用于主题技术的所有配置。涉及一种配置的公开可以适用于所有配置或一个或多个配置。一种配置可以提供一个或多个示例。诸如“配置”的短语可以指代一个或多个配置,反之亦然。

本文使用“示例”一词来表示“用作示例或说明”。本文中描述为“示例”的任何方面或设计不必被解释为比其他方面或设计更优选或更具优势。

本领域普通技术人员已知或以后将知道的、贯穿本公开内容所描述的各个方面的元件的所有结构和功能等同物通过引用被明确地并入本文,并且旨在由权利要求所涵盖。此外,无论在权利要求中是否明确地叙述了这样的公开内容,本文所公开的内容都不旨在捐献于公众。除非使用短语“用于......的装置”明确地叙述该要素,或者在方法权利要求的情况下,使用短语“用于......的步骤”来叙述该要素,否则任何权利要求要素均不得根据35u.s.c.§112的规定进行解释。此外,关于在说明书或权利要求中使用术语“包括(include)”、“具有”或类似术语的含义,这样的术语旨在被包括在术语“包含”的方式内,类似于当“包括”在权利要求中被用作连接词时,对“包括”的解释那样。

对“一个实施例”、“实施例”、“一些实施例”、“各种实施例”或类似表述的引用指示特定元件或特性被包括在本发明的至少一个实施例中。尽管短语可能出现在各个地方,但短语不一定指的是同一实施例。结合本公开,本领域技术人员将能够设计和结合适合于实现上述功能的各种机制中的任何一种。

应当理解,本公开仅教导了说明性实施例的一个示例,并且本领域技术人员在阅读本公开之后可以容易地设计出本发明的许多变型,并且本发明的范围由以下权利要求确定。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1