用于提高卷积效率的方法、系统和装置与流程

文档序号:20686474发布日期:2020-05-08 18:52阅读:314来源:国知局
用于提高卷积效率的方法、系统和装置与流程

相关申请

该专利始自要求享有于2017年5月19日提交的序列号为62/508,896的美国临时专利申请的利益的申请。序列号为62/508,896的美国临时专利申请特此通过引用方式全部并入本文。特此要求享有序列号为62/508,896的美国临时专利申请的优先权。

概括而言,本公开涉及图像处理,并且更具体而言,涉及用于提高卷积效率的方法、系统和装置。



背景技术:

近年来,对图像处理能力的需求已经超出大功率专用桌上型硬件的范围,并且已经成为个人和/或其它移动设备的期望。移动设备通常包括受尺寸约束、温度管理约束和/或电源约束所限制的处理能力。

附图说明

图1示出了使用卷积的示例输入体积和示例输出体积的示例卷积运算。

图2示出了基于“每个输出位置”的示例多通道卷积运算。

图3示出了示例池化操作的示意图。

图4示出了示例全连接操作的示意图。

图5示出了示例卷积神经网络(cnn)加速器的框图。

图6示出了示例数据路径元件(dpe)。

图7是示例系数存储库的图示。

图8是描述用于示例系数存储的示例寻址模型的示例表。

图9是描述基于非fp16格式的示例系数存储库的示例寻址模型的示例表。

图10示出了用于实现本文公开的示例的示例卷积运算。

图11示出了基于示例1*256卷积布置的示例连接复用器的示例操作。

图12示出了基于示例2*128卷积布置的示例连接复用器的示例操作。

图13是用于实现图5的示例cnn加速器的另一示例cnn加速器的示例实施方式的框图。

图14是表示可以被执行以实现图5的cnn加速器和/或图13的cnn加速器来处理与输入图像相关联的图像数据的示例机器可读指令的流程图。

图15是表示可以被执行以实现图5的cnn加速器和/或图13的cnn加速器来执行具有可选池化的卷积运算的示例机器可读指令的流程图。

图16是表示可以被执行以实现图5的cnn加速器和/或图13的cnn加速器来执行重叠池化操作的示例机器可读指令的流程图。

图17是表示可以被执行以实现图5的cnn加速器和/或图13的cnn加速器来执行全连接操作的示例机器可读指令的流程图。

图18是表示可以被执行以实现图5的cnn加速器和/或图13的cnn加速器来配置示例累加器的示例机器可读指令的流程图。

图19是示例处理器平台的框图,所述示例处理器平台被构造为执行图14-18的示例机器可读指令来实现图13的示例cnn加速器。

附图未按比例绘制。通常,在整个附图和所附的书面描述中将使用相同的附图标记来指代相同或相似的部分。

具体实施方式

包括个人和/或其他移动设备的典型计算系统采用高级图像处理或计算机视觉算法来使人类视觉系统可以执行的任务自动化。计算机视觉任务包括获取、处理、分析和理解数字图像,这部分地促进从数字图像中提取维度数据以产生数字和/或符号信息。计算机视觉算法可以使用数字和/或符号信息来进行决策和/或以其他方式执行与三维(3-d)姿态估计、事件检测、对象识别、视频跟踪等相关联的操作。

先进的图像处理或计算机视觉算法可以采用卷积神经网络(cnn或convnet)。cnn是一种深层的人工神经网络,其通常用于对图像进行分类、通过相似度(例如,照片搜索)对图像进行聚类以及使用卷积在图像内执行对象识别。如本文中所使用的,卷积是指通过积分从两个给定的函数导出的函数,所述积分表达如何通过另一函数的形状来修改一个函数的形状。例如,cnn可以用于通过穿过与输入图像上的图像特征(例如,水平线、二维(2-d)形状等)相对应的一个或多个滤波器来识别被包括在输入图像中的面部、个人、路牌、动物等,以识别输入图像内图像特征的匹配。

在一些示例中,cnn摄取(ingest)和/或以其他方式将图像处理为张量,所述张量是具有附加维度的数字矩阵。例如,cnn可以获得由3-d张量表示的输入图像,其中,第一和第二维度对应于矩阵的宽度和高度,并且第三维度对应于矩阵的深度。例如,矩阵的宽度和高度可以对应于输入图像的宽度和高度,并且矩阵的深度可以对应于图像的颜色深度(例如,颜色层)或颜色编码(例如,红-绿-蓝(rgb)编码)。

与神经网络相比,cnn可以很好地缩放到完整图像。例如,典型的神经网络接收输入(例如,单个矢量)并且通过一系列隐藏层转换输入,其中,每个隐藏层包括一组神经元,其中,每个神经元都全连接到先前层中的所有神经元,并且其中,单个层中的神经元完全独立地起作用并且不共享任何连接。在这样的示例中,典型的神经网络可以将200x200x3(例如,200像素x200像素x3色深)的图像转换为120,000权重,其中,每个权重可以具有多于一个神经元。例如,图像可以具有与每个色深相对应的三个输入通道,其中,每个输入通道的尺寸为200像素x200像素。

典型的cnn也可以接收输入并通过一系列隐藏层来转换输入。例如,cnn可以具有多个卷积层、池化层和/或全连接层。在这样的示例中,cnn可以具有多个三层结构(layertriplet),其包括卷积层、池化层和全连接层。在一些示例中,cnn具有输出到一个或多个全连接层的多个卷积和池化层对。在一些示例中,cnn可以包括20层、30层等。

卷积层应用卷积函数或运算来将输入(先前)层的图像映射到cnn中的下一层。卷积是3-d的,因为每个输入层可以具有与输入图像相关联的多个输入特征(例如,输入通道)。卷积层通过在每个个体的输入通道中形成区域滤波器窗口并通过计算(1)与区域滤波器窗口相关联的滤波器权重与(2)由区域滤波器窗口覆盖的输入数据的乘积来生成输出数据或激活来执行卷积。例如,可以通过使用卷积滤波器来扫描包括多个区域滤波器窗口的多个输入通道来确定输入图像的输出特征。

池化层从每个输出通道中的一组激活中提取信息。池化层可以执行与最大池化层相对应的最大池化操作或与平均池化层相对应的平均池化操作。最大池化操作包括在池化窗口内选择激活的最大值。平均池化操作包括计算池化窗口内的激活的平均值。

全连接层获得由卷积层和/或池化层计算的数据,并且将数据分类到一个或多个类别中。全连接层确定分类的数据是否对应于输入图像的特定图像特征。例如,全连接层可以确定分类的数据是对应于简单的图像特征(例如,水平线)还是更复杂的图像特征,例如动物(例如,猫)。

在一些实例中,cnn执行后处理操作,例如在卷积层、池化层等之后发起的参数化整流线性单元(prelu)操作或整流线性单元(relu)操作。prelu操作和relu操作对应于应用于cnn神经元的输出的激活函数。例如,在cnn从卷积层、池化层等生成输出之后,prelu操作或relu操作可以包括在激活上应用逐元素激活函数。例如,prelu操作可以包括当输出小于prelu基本参数时,将激活乘以第一prelu参数和/或以其他方式通过第一prelu参数来缩放激活。在其他实例中,prelu操作可以包括当激活大于prelu基本参数时,将激活乘以第二prelu参数和/或以其他方式将通过第二prelu参数来缩放激活。relu操作可以包括将最大值函数应用于激活,其中,relu操作返回在零与激活之间的最大值。在这样的实例中,relu操作可以包括将任何否定元素设置为零,并且因此通过消除和/或以其他方式避免对激活的其他指数、乘法或除法运算来加快cnn的训练。

然而,cnn的隐藏层可以具有以三个维度排列的神经元,所述三个维度包括宽度、高度和深度。cnn层中的每个神经元仅连接到其前一层的一部分(例如,相对较小的区域(例如,2x2激活图、3x3激活图等))。与其中层的所有神经元都连接到前一层的所有神经元的典型神经网络相比,cnn层的神经元由于层之间的连接数量显著较少,导致显著较低的权重。

本文公开的示例提高了cnn操作的效率。本文公开的示例cnn加速器实现了多通道cnn矩阵卷积,其中,在任何层(包括全连接层)处具有可选的非重叠最大和平均池化,并具有可选的prelu/relu/relu-x和按激活缩放和偏差。与顺序执行个体卷积运算的先前的实施方式相比,本文公开的示例cnn加速器实质上并行执行多个卷积运算。另外,示例cnn加速器可以实现重叠池化(例如,最大池化、平均池化等)操作。

图1示出了使用卷积的示例输入体积102和示例输出体积104的示例卷积运算100。图1的示例输入体积102对应于由存储在多维矩阵中的像素值表示的示例输入图像(例如,照片、视频帧等)106。例如,可以从诸如相机之类的设备或从存储器(例如,非易失性存储器、易失性存储器等)取回输入图像106。示例输入体积102包括代表多维矩阵的一组示例输入通道(c1、cc等)110、112。示例输入体积102由xxyxc表示,其中,x和y是示例像素108中的每个示例输入通道110、112的尺寸,并且c代表输入通道的数量或输入体积102的深度。每个示例像素108由数字表示。例如,该数字可以对应于像素108的颜色的强度(例如,红色、绿色或蓝色的强度)。

在图1的所示示例中,输入体积102包括多个多维矩阵,其包括具有尺寸x和y的第一通道110和具有尺寸x和y的c通道112。在一些示例中,输入通道c的数量对应于输入图像的颜色编码(例如,红-绿-蓝(rgb)编码)。例如,输入体积102可以对应于尺寸为200x200x3的输入图像106,其中,输入图像106的高度为200像素(例如,y=200),宽度为200像素(例如,x=200),并且具有3种编码的颜色(例如,c=3)。

在图1的所示示例中,通过使用示例滤波器(例如,第一示例滤波器(filter1)114和第二示例滤波器(filterk)116)对输入体积102进行卷积来生成输出体积104。图1的示例滤波器114、116对应于图像特征。例如,图像特征可以是可以被包括在输入图像106中的水平线、垂直线、对角线等。替代地,示例滤波器114、116被称为特征检测器或内核。在图1的所示示例中,滤波器114、116是尺寸为fw、fh、c的多维矩阵,其中,fw以系数或权重(例如,与第一滤波器114相关联的第一系数118、与第二滤波器116相关联的第二系数120等等)表示滤波器114、116的宽度,fh以系数118、120表示滤波器114、116的高度,并且c表示滤波器114、116的深度。在图1的所示示例中,输入体积102的深度与滤波器114、116的深度匹配。例如,滤波器通道的数量等于由c表示的输入通道的数量。示例系数118、120表示可学习的值,其可以被调整以识别被包括在示例输入图像106中的图像特征。

在图1的所示示例中,滤波器114、116的相应通道(例如,c1、c2、cc等)是包括9个示例系数118、120的3×3矩阵。替代地,示例滤波器114、116的通道可以是不同的矩阵大小,其包括不同数量的系数。在图1的所示示例中,第一滤波器(滤波器1)114包括第一系数118,并且第二滤波器(滤波器k)116包括第二系数120,其中,第一系数118与第二系数120不同。替代地,第一示例系数118中的一个或多个和第二示例系数120中的一个或多个可以相同。在图1的所示示例中,滤波器114、116包括用于每个通道的不同系数。在图1的所示示例中,卷积运算100使用k个滤波器114、116。例如,卷积运算100可以使用50个滤波器(例如,k=50)、100个滤波器(例如,k=100)等等。

在操作中,通过执行示例输入通道部分124与示例滤波器114、116的点积来生成示例输出位置122。在典型的cnn中,也可以将诸如示例输出位置122之类的输出位置称为激活。例如,卷积运算100可以包括计算第一滤波器114的第一滤波器通道和第一输入通道110的输入通道部分124的第一点积。示例卷积运算100可以包括计算第一示例滤波器114的第二滤波器通道和第二示例输入通道112的示例输入通道部分124的第二点积。计算附加点积,直到为每个输入通道124计算了点积为止。

在图1的所示示例中,基于均具有深度c的滤波器114、116来为每个输出位置122计算c个点积。在这样的示例中,示例输出通道128的第一示例输出通道(k1)126的输出位置122通过确定第一点积、第二点积等(上至c个点积)的总和来计算。在典型的cnn中,诸如第一示例输出通道126之类的输出通道也可以称为激活图、特征图或卷积特征。

响应于计算第一示例输出通道126的示例输出位置122,针对第二示例输入通道部分130、第三示例输入通道部分132等计算点积,直到第一示例输入通道110的全部都被处理。响应于处理第一示例输入通道110的全部,示例卷积运算100继续针对其余输入通道(例如,c2、c3等,上至cc)中的每一个执行上述操作以生成示例输出通道128中的对应的示例输出通道。

在图1的所示示例中,卷积运算100仅访问输入通道部分124一次。如果考虑第一示例输出通道122,则仅需要读取输入数据和相关联的滤波,并且可以针对所有后续输出通道128重复该操作,但是具有对应的不同滤波器。通过并行而不是顺序地执行示例卷积运算100,减少了所需数据量。输入数据的多个通道与适当的示例滤波器114、116进行卷积运算,以针对多个示例输出通道128并行生成示例输出位置122,其在一些示例中均可选地被池化。

图2示出了基于“每个输出位置”的示例多通道卷积运算200。例如,多通道卷积运算200可以基于每个激活来执行。图2的示例多通道卷积运算200表示示例cnn(例如,cnn加速器、cnn硬件加速器等)的示例卷积层。例如,多通道卷积运算200可以向池化层提供激活,所述池化层转而可以向全连接层(例如,非线性层)或另一卷积层提供激活。在这样的示例中,全连接层可以向另一个三层结构提供激活,以包括另一个卷积、池化和全连接层。

在图2的所示示例中,使用多个维度为fw和fh的示例滤波器204来对具有以列或字(例如,16比特字)为单位的维度x和以行为单位的维度y的示例输入数据202进行卷积,其中,fw和fh二者均为三(3)。例如,可以从图1的输入图像106和/或从存储器获得输入数据202。在图2的所示示例中,输入数据202包括本地存储的数据的l个示例行206,以供多个输入通道进行卷积运算。在图2的所示示例中,针对每个输入通道存储了行206的一部分。在一些示例中,行206包括用于输入通道的所有数据,而在其他示例中,行206包括用于输入通道的数据的一部分。

在图2的所示示例中,多通道卷积运算200包括实质上并行地生成示例输出通道210的示例输出位置208中的每一个。例如,数据行206中的第一个使用滤波器204中的第一个进行卷积以生成被包括在输出通道210中的第一个中的输出位置208中的第一个,其与使用滤波器204中的第二个对数据行206中的第一个进行卷积运算来生成被包括在输出通道210中的第二个中的输出位置208中的第二个实质上并行地进行。

在图2的所示示例中,每个输出通道210具有其自己的累加器(例如,以硬件和/或机器可读指令实现的累加器)和/或以其他方式与之相关联。在一些示例中,最大池化或平均池化是通过对示例池区域212中的每个元素执行比较操作、存储操作和累加操作在输出通道210上实现的,并且仅输出所得结果。

在图2的所示示例中,池区域212是输出位置208的2x2区域。替代地,示例池区域212可以是任何其他大小。例如,池化操作可以包括取被包括在池区域212中的值的最大值、平均值等,并输出所得的最大值、平均值等。在一些示例中,池化操作包括重叠。在其他示例中,池化操作不包括重叠。例如,池区域212不能与另一池区域重叠,因为仅当池化操作不包括重叠时每个位置才必须被读取一次。

图3示出了示例池化操作300的示意图。图3的示例池化操作300表示示例cnn的池化层。例如,池化操作300可以将输出提供给cnn的全连接层或cnn的另一卷积层。在图3的所示示例中,池化操作300包括处理来自图2的多通道卷积运算200的输出通道210。在图3的所示的示例中,输出通道210具有分别对应于输出通道210的高度、宽度和深度的尺寸h、w和c。

在图3的所示示例中,池化操作300通过计算池区域212的最大值(例如,最大池化)或平均值(例如,平均池化)并且在示例池化的输出通道304中的相应的池化的输出通道的示例输出位置302中的相应输出位置处输出最大值或平均值来处理图2的池区域212。在图3所示的示例中,池化的输出通道304具有尺寸h、w和c以匹配图2的输出通道210。

图3的示例池化操作300基于池化操作300的步幅(stride)(例如,步幅长度)来处理(例如,迭代地处理)多个池区域212。在图3的所示示例中,步幅长度是与池区域212被相邻地移动(例如,被移动到输出通道210的右侧)一个索引、一列等相对应的步幅长度。在图3的所示的示例中,池化操作300是重叠池化操作。例如,图3中所描绘的池区域212在第一位置处。在计算出输出位置302中的第一个之后,将池区域212移动到第二位置,其中,当步幅长度为一时,第二位置是第一位置右侧一个索引或一列。在这样的示例中,在第一位置中的池区域212的第二列与在第二位置中的池区域212的第一列重叠。示例池化操作300在输出通道210的全部上计算池区域212的最大值或平均值。

图4示出了示例全连接操作400的示意图。图4的示例全连接操作400是示例cnn的全连接层。例如,全连接操作400可以将输出提供给另一cnn三层结构,其包括另一卷积、池化和全连接层。在cnn中,全连接层具有到前一层中所有激活的全连接。全连接层类似于用于执行矢量矩阵乘法的通道卷积。

在图4的所示示例中,数据输入402被示为1xm阵列,并且系数或权重阵列404为vxm。对应的示例输出阵列406的大小为1xv。将每列(大小为m)乘以每个元素以获得总和,并将其执行v次。在一些示例中,cnn评估输出阵列406以确定图像特征被包括在图1的输入图像106中的百分比可能性。例如,cnn可以确定输入图像106中包括多个简单图像特征(例如,水平线、对角线等)的百分比可能性。在其他示例中,cnn可以确定输入图像106中包括诸如猫、狗、大象等的多个复杂图像特征的百分比可能性。

图5示出了示例cnn加速器500的框图。在图5所示的示例中,cnn加速器500是用于加速图像分类算法和/或图像和视频识别、推荐器系统和自然语言处理中的其他类型的过程的平台(例如,硬件平台)或硬件加速器。附加地或替代地,cnn加速器500可以由在硬件处理器上执行的软件实现。示例cnn加速器500实现以下各项中的至少一项:图1的示例卷积运算100、图2的示例多通道卷积运算200、图3的示例池化操作300或图4中的全连接操作400。在图5的所示示例中,cnn加速器500包括示例控制器502、示例直接存储器访问(dma)控制器504、示例数据存储库506、示例系数存储库508、示例连接复用器(conxtnmux)510、示例数据路径元件(dpe)阵列512和示例输出缓冲器514。

在图5的所示示例中,cnn加速器500包括控制器502,以确定cnn加速器500的操作模式和操作顺序。例如,控制器502可以指示cnn加速器500以卷积模式操作(具有可选的池化)、池化模式(例如,重叠池化模式)或全连接模式(例如,非线性模式)来进行操作。在一些示例中,控制器502确定是否对由一个或多个模式生成的输出执行后处理操作(例如,prelu操作、relu操作等)。示例控制器502指示示例dma控制器504取回与输入通道相关联的系数数据和图像数据,以用于卷积和/或以其他方式处理。例如,控制器502可以指示dma控制器504从示例主存储器516取回与图2的滤波器204相关联的输入数据202和系数数据。

在一些示例中,控制器502基于模式来配置cnn加速器500的一个或多个组件。例如,控制器502可以通过将数据存储库506和/或系数存储库508组织到一个或多个随机存取存储器(ram)(例如,静态ram(sram)、动态ram(dram)等)块中来配置数据存储库506和/或系数存储库508。在其他示例中,控制器502将连接复用器510的矩阵配置为以特定配置、顺序和/或方式从数据存储库506接收数据(例如,从数据存储库506接收1x256、2x128、4x64等数据矩阵)。在其他示例中,控制器502将dpe阵列512配置为以卷积模式、池化模式或全连接模式操作。

在一些示例中,控制器502确定卷积模式的卷积布置。例如,控制器502可以确定卷积模式的1x256、2x128、4x64、8x32等卷积布置。例如,在2x128卷积布置中,对于128个输出通道,对于单个位置,输入通道的两个流被顺序求和,其中,最终结果是两个流的总和。在一些示例中,控制器502基于确定在卷积运算期间保持未使用的dpe520的数量来确定卷积布置。

在卷积运算需要64个输入通道和192个输出通道的示例中,与1*256卷积布置相比,控制器502可以确定使用4*64卷积布置。例如,通过确定使用4*64卷积布置,cnn加速器500可以利用所有256个dpe520。在这样的示例中,可以在三批64个输出通道中处理192个输出通道,其中,64个输出通道中的每个输出通道都由4个dpe520处理(例如,256个dpe=4个dpe*64个输出通道)以实现完全的dpe利用率。通过确定使用1*256卷积布置,示例cnn加速器500将具有64个未使用的dpe520,因为将并行处理192个输出通道,其中,192个输出通道中的每个输出通道均由1个dpe520处理,因此,导致仅75%的dpe利用率。示例控制器502可以通过确定4*64卷积布置导致大于其他卷积布置的dpe利用率来确定使用4*64卷积布置。

在一些示例中,控制器502确定和/或以其他方式控制cnn加速器500的操作顺序。例如,控制器502可以选择要处理的数据存储库506的一条或多条数据线、要处理的系数存储库508的一个或多个系数块等等。例如,控制器502可以通过生成地址命令和/或通过选择数据存储库506、系数存储库508和/或输出缓冲器514的地址来选择要处理的数据来控制cnn加速器500的操作顺序。

在图5的所示示例中,cnn加速器500包括dma控制器504,以从计算系统的主存储器516取回数据。在图5的所示示例中,主存储器516是dram。替代地,示例主存储器516可以是sram或任何其他类型的非易失性或易失性存储器。在图5的所示示例中,dma控制器504是存储器接口。例如,dma控制器504从主存储器516查询、接收和/或以其他方式取回数据(例如,图像数据、系数数据等),并且将取回的数据经由示例数据输入接口518传送到数据存储库506、系数存储库508等等。

在图5的所示示例中,cnn加速器500包括数据存储库506,以存储数据矩阵并将该数据矩阵的部分供应给连接复用器510以进行处理。在图5的所示示例中,数据存储库506是dram。替代地,示例数据存储库506可以是sram或任何其他类型的非易失性或易失性存储器。示例数据存储库506包括16个存储实例,其中,每个实例的大小为8kb,以产生128kb的总存储。示例数据存储库506被配置为每条数据线128比特的512条数据线。替代地,示例数据存储库506可以被配置为具有不同数量的存储实例、不同存储实例大小、不同数量的数据线和/或每条数据线不同数量的比特。下面结合图11和/或12描述了与示例数据存储库506相对应的附加细节。

在图5的所示示例中,cnn加速器500包括系数存储库508,以存储系数的数据矩阵(例如,滤波器系数、内核系数等),并且将该数据矩阵的部分供应给dpe阵列512以进行处理。在一些示例中,系数存储库508存储一个或多个偏差值和/或一个或多个缩放值。在图5的所示示例中,系数存储库508是dram。替代地,示例系数存储库508可以是sram或任何其他类型的非易失性或易失性存储器。下面结合图7、图8和/或图9描述与示例系数存储库508相对应的附加细节。

在图5的所示示例中,cnn加速器500包括连接复用器510以选择存储在数据存储库506中的数据的部分。在一些示例中,连接复用器510基于cnn加速器500的卷积布置来从数据存储库506选择数据。例如,响应于控制器502将cnn加速器500配置为基于2x128卷积布置进行操作,连接复用器510从数据存储库506选择两组128个浮点(fp)16比特(fp16)字(例如,2x128个fp16字),并且将256个fp16字发送到dpe阵列512以进行处理。

在图5的所示示例中,cnn加速器500包括dpe阵列512以执行一个或多个卷积运算、一个或多个池化操作或一个或多个全连接操作。在一些示例中,dpe阵列512执行后处理操作,例如但不限于偏置操作、参数整流线性单元(prelu)操作、整流线性单元(relu)操作(例如,relu-x操作)或缩放操作。在这样的示例中,dpe阵列512基于从控制器502接收的命令、指令等来执行操作(例如,卷积运算等)之一或后处理操作之一。在图5的所示示例中,dpe阵列512包括256个示例dpe520,其中,256个dpe520中的每一个都可以执行操作(例如,卷积运算、池化操作等)、后处理操作(例如,prelu操作、relu操作等)等,其实质上与dpe阵列512的其他dpe520并行地进行。替代地,可以使用图5中描绘的少于或多于256个dpe520。下面结合图6描述对应于dpe520的附加细节。

在图5的所示示例中,cnn加速器500包括示例输出缓冲器514,用于存储来自dpe阵列512的输出并将该输出传输至外部计算设备、硬件、系统等,以进行进一步处理。图5的示例输出缓冲器514包括单独的读取和写入端口。示例输出缓冲器514具有256个通道,其中,通道中的每个通道是16比特输入/输出(i/o)通道。示例输出缓冲器514是被配置为2x8*4096比特数据矩阵的8千字节(kb)存储器存储的一个实例。例如,输出缓冲器514充当乒乓缓冲器。替代地,示例输出缓冲器514可以包括多于一个实例和/或少于或多于8kb的存储器存储。替代地,示例输出缓冲器514可以以任何其他配置(例如,4x4*4096比特数据矩阵、8x2*4096比特数据矩阵等)来配置。

尽管在图5中示出了实现示例cnn加速器500的示例方式,但是图5所示的元素、过程和/或设备中的一个或多个可以以任何其他方式来组合、划分、重新布置、省略、消除和/或实现。此外,示例控制器502、示例dma控制器504、示例数据存储库506、示例系数存储库508、示例连接复用器510、示例dpe阵列512、示例输出缓冲器514、示例dpe520和/或更一般地图5的示例cnn加速器500可以通过硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实现。因此,例如,示例控制器502、示例dma控制器504、示例数据存储库506、示例系数存储库508、示例连接复用器510、示例dpe阵列512、示例输出缓冲器514、示例dpe520和/或更一般地示例cnn加速器500中的任何一个可以通过一个或多个模拟或数字电路、逻辑电路、可编程处理器、可编程控制器、图形处理单元(gpu)、数字信号处理器(dsp)、专用集成电路(asic)、可编程逻辑器件(pld)和/或现场可编程逻辑设备(fpld)来实现。当阅读本专利的任何装置或系统权利要求以涵盖纯软件和/或固件实施方式时,示例控制器502、示例dma控制器504、示例数据存储库506、示例系数存储库508、示例连接复用器510、示例dpe阵列512、示例输出缓冲器514和/或示例dpe520中的至少一个特此被明确地定义为包括非暂时性计算机可读存储设备或存储盘,例如存储器、数字多功能盘(dvd)、压缩盘(cd)、蓝光盘等,包括软件和/或固件。更进一步地,附加于或代替图5中所示的元素、过程和/或设备,图5的示例cnn加速器500可以包括一个或多个元素、过程和/或设备,和/或可以包括任何或所有所示元素、过程和设备中的多于一个。如本文所使用的,短语“在通信中”(包括其变型)涵盖直接通信和/或通过一个或多个中间组件的间接通信,并且不需要直接的物理(例如,有线)通信和/或恒定的通信,而是此外附加地包括以周期性间隔、计划的间隔、非周期性间隔和/或一次性事件进行的选择性通信。

图6示出了示例dpe600。图6的dpe可以对应于图5的dpe520中的一个或多个。图6的示例dpe600执行卷积运算、池化操作或全连接操作。在一些示例中,图6的dpe600可以基于图5的示例cnn加速器500的模式(例如,操作模式)来执行后处理操作,例如偏置操作、prelu操作、relu操作(例如,relu-x操作)、缩放操作等。在图6所示的示例中,dpe600包括示例乘法器(mult)602、示例累加器(accum)604、示例寄存器(reg)606和示例比较器(comp)608。

在图6的所示示例中,dpe600包括乘法器602以执行两个值的乘法运算。在一些示例中,乘法器602将从第一示例接口(datain)610获得的第一值与从第二示例接口(coeff/bias/scale)612获得的第二值相乘。在图6的所示示例中,第一接口610是数据存储库接口。例如,从第一接口610接收的数据可以对应于经由图5的连接复用器510从数据存储库506接收的数据。在图6的所示示例中,第二接口612是系数存储库接口。例如,从第二接口612接收的数据可以是来自图5的系数存储库508的偏差值、系数值、缩放值等。

在图6的所示示例中,乘法器602是二进制乘法器(例如,一个或多个二进制或逻辑加法器)。基于从示例使能接口(enable)614接收的信号来启用示例乘法器602。例如,从使能接口614接收到的信号可以对应于由图5的控制器502生成的二进制值(例如,与0相关联的低信号,或者与1相关联的高信号)。基于来自示例旁路选择器接口(bypass_sel)616的信号来绕开示例乘法器602。例如,从旁路选择器接口616接收的信号可以对应于由图5的控制器502生成的二进制值。例如,当来自旁路选择器接口616的信号是高信号(例如,第一旁路接口618被启用)时,来自第一接口610和/或第二接口612的一个或多个值可以经由第一示例旁路接口(bypass)618穿过。例如,当执行dpe600的一个或多个操作时,控制器502可以将信号发送到旁路选择器接口616以用于速度增加和/或功率降低。

在图6的所示示例中,dpe600包括累加器604,以执行加法或累加操作。图6的示例累加器604是保存有带符号定点值的24比特累加器。在一些示例中,在累加期间动态地调整采用fp格式的整数比特和小数比特的数量,以确保实现范围对精度的合适的平衡。例如,累加器604可以被调整为修改累加器604的范围(例如,可以被累加和/或以其他方式被存储在累加器604中的数据的大小)或精度中的至少一个。累加器604最初可以配置为获得、处理和/或以其他方式处理12个整数比特。当到累加器604的输入需要比可用数量的整数比特更大数量的比特时,示例累加器604可以调整12个整数比特。在这样的示例中,累加器604从12个整数比特增加到一定数量的整数比特,从而以小数比特为代价来匹配输入(例如,范围增加但是精度降低)。

在一些示例中,当累加器加法的结果溢出时,累加器604调整和/或以其他方式修改累加器604可以处理的整数比特数。例如,累加器604可以将整数比特数增加一,并且因此,小数比特数减少一(例如,范围增加但是精度降低)。在一些示例中,当累加器加法的结果不使用整数比特的全部范围时,累加器604调整和/或以其他方式修改累加器604可以处理的整数比特数。例如,累加器604可以将整数比特数减少1,但最少为12比特,并且因此,小数比特数增加1(例如,范围减小但是精度提高)。替代地,示例累加器604可以将整数比特数增加(例如,迭代地增加)或减少(例如,迭代地减少)多于一。

在示例累加器604的范围和/或精度被调整的示例中,累加器604可以生成近似值、估计值等。例如,响应于累加器604执行精度平衡操作(其中,累加器604增加或降低累加器604的精度(例如,增加比特(例如,小数比特)的数量、减少比特的数量等)以调整或修改累加器604的范围),与未修改累加器604的情况下的输出相比,累加器604的输出可以得到近似值或估计值。然而,由累加器604生成的近似值、估计值等与尚未修改累加器604的情况下的输出实质上等效和/或以其他方式相称。例如,图6的dpe600的一个或多个操作、过程、输出等的执行和/或生成不基于累加器604的精度、范围等被调整而受影响。在这样的示例中,操作或输出的任何改变实质上可忽略。

在图6的所示示例中,乘法器602基于两个值的相乘来生成到累加器604的输出。当来自第二示例使能接口(enable)620的信号指示累加器604被启用时,示例累加器604从乘法器602获得输出并且计算输出与先前计算的总和的总和。例如,从第二使能接口620接收的信号可以对应于由图5的控制器502生成的二进制值。例如,当从第二使能接口620接收到高信号时,启用累加器604。

在一些示例中,基于来自旁路选择器接口616的信号来绕开累加器604。例如,当从旁路选择器接口616接收到高信号(例如,第二旁路接口622被启用)时,来自乘法器602的值可以经由第二示例旁路接口(bypass)622来绕开累加器604。在一些示例中,基于来自示例清除累加器接口(clr)624的信号来清除和/或以其他方式清空累加器604。例如,从清除累加器接口624接收的信号可以对应于由图5的控制器502生成的二进制值。

在图6的所示示例中,累加器604的输出被发送到寄存器606或示例数据输出接口626中的至少一个。图6的示例数据输出接口626是输出缓冲器接口。例如,数据输出接口626可以将数据发送到图5的输出缓冲器514。图6的示例寄存器606是用于在被写入示例数据输出接口626之前保存结果(例如,个体结果)的中间存储元件。例如,dpe600可以使用寄存器606来存储用于平均池化操作的值。基于来自示例清除寄存器接口(store_clr)628的信号来清除和/或以其他方式清空示例寄存器606。例如,从清除寄存器接口628接收的信号可以对应于由图5的控制器502生成的二进制值。例如,当从清除寄存器接口628接收到高信号时,可以删除存储在寄存器606中的值。

在图6的所示示例中,dpe600被配置用于卷积模式。在操作中,示例乘法器602将来自第一接口610的数据输入值(例如,fp16中表示的激活值、像素值等)与来自第二接口612的系数值相乘以生成卷积输出值(例如,激活、激活值、激活输出等)。示例乘法器602将卷积输出值发送到示例累加器604。响应于接收到卷积输出值,示例累加器604将卷积输出值发送到数据输出接口626,所述数据输出接口626转而发送到图5的输出缓冲器514。

在一些示例中,将卷积模式下的dpe600配置用于可选的池化。例如,dpe600可以基于从最大池化接口(mp_pool)627接收到高信号而配置用于卷积模式下的最大池化操作。响应于接收到高信号,dpe600等待直到在将存储在示例寄存器606中的池输出值(例如,图2的池区域212的最大值)发送到数据输出接口626之前,对整个池区域进行处理。

在示例最大池化操作中,示例乘法器602将来自第一接口610的第一数据输入值与来自第二接口612的第一系数值相乘以生成第一卷积输出值。例如,第一数据输入值可以是来自图2的输入数据202的fp16中的第一像素值、第一激活值等,并且第一系数值可以是图2的滤波器204中的第一滤波器的fp16中的第一系数值。例如,第一卷积输出值可以是图2的池区域212的输出位置208中的第一输出位置。示例乘法器602将第一卷积输出值发送到示例累加器604,所述示例累加器604将第一卷积输出值发送到示例寄存器606。示例寄存器606将第一卷积值发送到示例比较器608的第一示例输入629。

响应于存储,示例乘法器602将来自第一接口610的第二数据输入值与来自第二接口612的第二系数值相乘以生成第二卷积输出值。例如,第二数据输入值可以是来自图2的输入数据202的第二像素值、第二激活值等,并且第二系数值可以是图2的滤波器204中的第一滤波器的第二系数。示例乘法器602将第二卷积输出值发送到示例累加器604。当从示例池接口(pool)630接收到高信号时,示例累加器604将第二卷积输出值发送到比较器608的第二示例输入631。例如,从池接口630接收的信号可以对应于由图5的控制器502生成的二进制值。示例池接口630在池化被启用(例如,平均池化或最大池化被启用)时生成高信号,并且在池化未被启用时生成低信号。例如,当从池接口630接收到高信号时,累加器604将第二卷积输出值发送到比较器608的第二输入631。例如,第二卷积输出值可以是图2的池区域212的输出位置208中的第二输出位置。

在图6的所示示例中,当dpe600正在执行最大池化操作时,比较器608确定第一卷积输出值和第二卷积输出值的最大值。响应于确定第一卷积输出值(例如,寄存器606中的存储值)小于第二卷积输出值,示例比较器608生成用于示例比较器输出632的高信号(例如,对应于二进制值1的信号)。用于示例比较器输出632的高信号使示例触发器(flip-flop)634能够生成为1(例如,对应于高信号的二进制值)的示例逻辑输出(y_ff)636。例如,逻辑输出636对应于二进制值(例如,为0或1的值)。例如,当逻辑输出636为1时,该项被描述为y_ff,并且当逻辑输出636为0和/或以其他方式对应于低信号时,该项被描述为~y_ff。

响应于示例逻辑输出636为1和/或以其他方式被启用,示例控制器502将第二卷积输出值存储在寄存器606中作为池输出值。例如,控制器502生成到示例存储库接口(store||y_ff&pool&prelu)644的信号。来自示例存储库接口644的信号对应于二进制值。响应于从示例存储库接口644接收到低信号,示例控制器502不指示示例寄存器606存储值。响应于从示例存储库接口644接收到高信号,示例控制器502指示寄存器606存储该值。例如,当逻辑输出636为高信号、池接口630为高信号并且示例prelu接口(prelu)638为低信号(例如,dpe600未在执行prelu操作)时,来自存储库接口644的信号为高信号。在其他示例中,当逻辑输出636中的至少一个是低信号、池接口630是低信号或者prelu接口638是高信号时,存储库接口644输出低信号。

响应于确定第一卷积输出值(例如,示例寄存器606中的存储值)大于第二卷积输出值,比较器608生成到示例比较器输出632的低信号,其指示示例触发器634生成对应于示例逻辑输出636的低信号。响应于示例逻辑输出636对应于低信号和/或以其他方式被禁用,示例控制器502不将第二卷积输出值存储在寄存器606中。

示例dpe600处理(例如,迭代处理)数据输入值,直到已经处理了整个池区域(例如,图2的池区域212)。当已经处理了整个池区域时,当示例最大池化接口627被启用时,示例寄存器606将池输出值(例如,图2的池区域212的最大值)输出到示例数据输出接口626。

在其他示例中,当以卷积模式操作时,dpe600可以配置用于平均池化操作。例如,乘法器602可以计算与图2的池区域212的输出位置208相对应的第一输出值、第二输出值、第三输出值和第四输出值。示例累加器604可以计算第一至第四输出值的总和。例如,乘法器602可以计算第一输出值,累加器604将其与零值相加以基于第一输出值来产生第一总和。在这样的示例中,乘法器602可以计算第二输出值,累加器604将其与第一总和相加以生成等于第一和第二输出值的第二总和,等等,直到计算出总数并且总数等于第一到第四输出值的总和。

响应于计算总数,示例累加器604将总数存储在示例寄存器606中,所述示例寄存器606转而基于来自第三示例接口(!prelu||avpool||bias_scale_en)637的信号来将总数发送到示例乘法器602。例如,第三接口637的信号可以对应于由图5的控制器502生成的二进制值。例如,当dpe600未在执行prelu操作(例如,prelu!=1),dpe600正在执行偏置操作或缩放操作(例如,bias_scale_en==1),或者dpe600正在执行平均池化操作(例如,av_pool==1)时,第三接口637的信号为高信号。例如,当dpe600正在执行平均池化操作时,第三接口637针对表达!prelu||avpool||bias_scale_en输出高信号。

响应于从示例寄存器606接收到总数,示例乘法器602通过将总数与示例池大小值(1/av;x)640相乘来计算平均池值,并且将平均池值输出到示例累加器604,所述示例累加器604转而将平均池值输出到示例数据输出接口626。示例池大小值640对应于池区域的大小。例如,池大小值640可以是1/(池宽度x池高度)的商。例如,与图2的池区域212相关联的池大小值640是1/4(例如,1/4=1/(2x2))。在图6的所示示例中,乘法器602基于来自示例平均池化接口(avpool)642的信号来取回池大小值640。例如,来自平均池化接口642的信号可以对应于由图5的控制器502生成的二进制值。例如,当dpe600正在执行平均池化操作时,平均池化接口642输出高信号。

在一些示例中,dpe600被配置用于池化操作。例如,dpe600可以获得与图2的池区域212的输出位置208相对应的第一输入值、第二输入值、第三输入值和第四输入值。在这样的示例中,dpe600可以确定第一至第四输入值的平均值或最大值,如上所述。

在其他示例中,dpe600可以被配置用于一个或多个后处理操作,包括偏置操作、缩放操作、prelu操作或relu操作(例如,relu-x操作)中的至少一个。例如,dpe600可以配置用于在每层的基础上在任何层输出处进行偏置操作、缩放操作、prelu操作或relu-x操作。例如,累加器604可以基于来自示例偏置缩放使能接口(bias_scale_en)646的信号从第二接口612获得偏置值或缩放值。例如,来自偏置缩放使能接口646的信号对应于二进制值。例如,当偏置缩放使能接口646输出高信号时,累加器604可以从第二接口612获得偏置值或缩放值。

在示例偏置操作中,示例累加器604将从第二接口612取回的偏置值与存储在示例寄存器606中的输出值(例如,卷积输出值、平均池值、最大池值、池输出值等)相加。在示例缩放操作中,当偏置缩放使能接口646输出高值时,示例乘法器602将输出值与从第二接口612取回的缩放值相乘和/或以其他方式用所述缩放值来缩放输出值。

在一些示例中,在dpe600执行卷积运算、池化操作等之后,dpe600被配置用于prelu操作。在这样的示例中,图5的控制器502生成到prelu接口638的高信号。例如,从prelu接口638接收的信号可以对应于由图5的控制器502生成的二进制值。例如,响应于控制器502向prelu接口638生成高信号,比较器608将与卷积运算或池化操作的输出相对应的第一值与对应于示例prelu基本参数(t0)648的第二值进行比较。例如,第一值可以是图2的输出位置208中的第一输出位置的值、图2的池区域212的最大值等等。在图2所示的示例中,prelu基本参数648是转换为fp16格式的10比特带符号整数。替代地,示例prelu基本参数648可以是任何其他数量的比特和/或采用任何其他格式。

响应于第一值(例如,寄存器606中的存储值)小于第二值(例如,示例prelu基本参数(t0)648),示例比较器608输出低信号,并且因此使得示例逻辑输出636对应于低信号。响应于示例逻辑输出636对应于低信号,示例乘法器602基于第一示例prelu输入参数(a0)650与存储在示例寄存器606中的输出值的相乘来计算第一prelu输出值。例如,当prelu接口638输出高信号(例如,dpe600正在执行prelu操作)并且逻辑输出636对应于低信号时,示例prelu开关接口(prelu&~y_ff)652输出高信号。

在其他示例中,当第一值大于第二值时,比较器608输出高信号,并且因此使逻辑输出636与高信号相对应。响应于示例逻辑输出636对应于高信号,示例乘法器602基于第二示例prelu输入参数(a1)654与存储在示例寄存器606中的输出值的相乘来计算第二prelu输出值。例如,当prelu接口638输出高信号并且逻辑输出636对应于高信号时,prelu开关接口652生成低信号。prelu操作的一般形式在下面的等式(1)和等式(2)中描述:

y=a0*x,如果x<t0

等式(1)

y=a1*x,如果x>t0

等式(2)

在上面的等式(1)-(2)的所示示例中,y是指由乘法器602计算的prelu输出值,x是指存储在寄存器606中的输出值,a0是指第一prelu输入参数650,a1是指第二prelu输入参数654,并且t0是指prelu基本参数648。

在一些示例中,在dpe600执行卷积运算、池化操作等之后,dpe600被配置用于relu操作(例如,relu-x操作)。在这样的示例中,图5的控制器502生成到示例relu-x接口(relu_x)656的高信号。例如,从relu-x接口656接收的信号可以对应于二进制值。例如,响应于控制器502生成到relu-x接口656的高信号,比较器608将与卷积运算或池化操作的输出相对应的第一值与对应于示例relu-x参数(1/av;x)658的第二值进行比较。例如,第一值可以是图2的输出位置208中的第一输出位置的值\图2的池区域212的最大值等等。在图2所示示例中,relu-x参数658是fp16值。替代地,示例relu-x参数658可以是任何其他数量的比特和/或采用任何其他格式。

在图6的所示示例中,relu-x参数658与池大小值(1/av;x)640共享寄存器。在一些示例中,relu-x参数658的值为零。在这样的示例中,relu-x操作执行下面的等式(3)中描述的函数:

y=min(z,(max(0,x))

等式(3)

在以上等式(3)的示例中,y是指relu-x输出值,x是指存储在寄存器606中的输出值,并且z是指relu-x参数658。例如,当dpe600被配置用于relu-x操作时,控制器502将relu-x参数658设置为零,并且比较器608确定在寄存器606中存储的输出值是否大于零。如果示例比较器608确定输出值大于零,则示例控制器502将relu-x参数658设置为relu-x值,并且比较器608确定存储在寄存器606中的输出值是否大于relu-x值。如果示例比较器608确定存储在寄存器606中的输出值大于relu-x值,则将该输出值发送到数据输出接口626,否则经由示例relu-x值接口(~y_ff&relu_x)660将relu-x值发送到数据输出接口626。

在图6的所示示例中,乘法器602、寄存器606和比较器608是基于fp16的。例如,乘法器602、寄存器606和比较器608可以处理、存储和/或以其他方式处置采用fp16格式的值。在图6的所示示例中,累加器604是基于固定的24比特的格式。例如,累加器604可以处理、存储和/或以其他方式处置基于固定的24比特的格式的值。替代地,示例乘法器602、示例累加器604、示例寄存器606和/或示例比较器608中的一个或多个可以采用任何其他格式。

在一些示例中,累加器604经由示例相邻dpe接口662从相邻dpe获得数据。例如,累加器604可以从图5的dpe520中的耦合到图6的dpe600的一个dpe520获得数据。在要计算多个流的一个或多个总和(例如,将卷积运算分成多个输入流)的示例中,示例累加器604处理从相邻dpe获得的数据。例如,dpe600可以被配置用于2x128卷积布置,其中,图1的输入通道110、112的两个流针对单个位置顺序求和。在这样的示例中,当控制器502生成到示例相邻数据接口(accum)664的高信号时,dpe600可以从另一dpe600获得输入流。例如,响应于相邻数据接口664接收到高信号,乘法器602经由相邻dpe接口662从相邻dpe接收数据。在这样的示例中,控制器502将高信号发送到旁路选择器接口616以启用第一旁路接口618。响应于第一示例旁路接口618被启用,示例乘法器602将来自相邻dpe的所接收的数据发送到示例累加器604,其中,累加器604基于由dpe600计算出的第一总和与由相邻dpe计算出的第二总和来计算总和。

图7是基于图5的示例cnn加速器500的操作模式而被组织成第二示例系数存储库702和第三示例系数存储库704的第一示例系数存储库700的图示。示例系数存储库700、702、704可以对应于图5的示例系数存储库508。例如,系数存储库700、702、704可以从图5的控制器502寻址和/或控制。

在图7的所示示例中,系数存储库700、702、704包括单独的读取和写入输入/输出(i/o)端口或通道。每个示例系数存储库700、702、704具有256个通道(ch0-ch255),其中,每个通道是16比特。每个示例系数存储库700、702、704被配置为256*4096比特的单个实例,以在产生128kb的总存储。替代地,示例系数存储库700、702、704可以是任何其他大小和/或采用任何其他配置。

在图7的所示示例中,第一系数存储库700具有256个通道的256个fp16输出,以产生256x256字的系数存储,其中,每个fp16输出连接到图5的dpe520之一。在图7所示的示例中,当cnn加速器500在1*256模式下操作时,第一系数存储库700由图5的控制器502配置成第二系数存储库702。例如,当在1*256模式下操作时,图1的输入通道110、112中的每一个都针对图1的每个输出通道126的单个位置(例如,输出通道122)顺序求和。例如,1*256模式对应于dpe520之一处理1个输入通道以在256个输出通道中实质上并行地产生输出位置。

在图7的所示示例中,当cnn加速器500在1*256模式下操作时,第一系数存储库700由图5的控制器502配置成第二系数存储库702。图7的第二示例系数存储库702配置为单个系数块,其中,将单个块被划分成256列(例如,从ch0至ch255),其中,256列中的每一列代表用于图1的所有输入通道110、112的一组系数。例如,256列中的每一列可以对应于图1的滤波器114、116之一。

在图7的所示示例中,当cnn加速器500在2*128模式下操作时,第一系数存储库700由图5的控制器502配置成第三系数存储库704。例如,当在2*128模式下操作时,针对图1的每个输出通道126针对单个位置(例如,输出通道122)对图1的输入通道110、112的两个流顺序地求和。在这样的示例中,2*128模式的结果是两个流的总和。例如,2*128模式对应于dpe520中的两个dpe520处理1个输入通道以在128个输出通道中实质上并行地产生输出位置。

在图7的所示示例中,第三系数存储库704被配置成两个示例系数块706、708,其中,每个框706、708对应于图5的数据存储库506的每个数据ram块。在图7的所示示例中,块706、708中的每一个包括128列。例如,第一块706包括第一组的64个通道(例如,ch0至ch63),并且第二块708包括第二组的64个通道(例如,ch64至ch127)。在图7的所示示例中,块706、708之一中的一列代表用于图1的输入通道110、112的一半的一组系数。在图7的所示示例中,每个地址存在128*fp16字的两个块706、708,因此块706、708之一针对来自数据存储库506的每个数据输入块应用于图5的两组dpe520之一。

替代地,当示例的cnn加速器500在4*64模式下操作时,第一示例系数存储库700可以由图5的示例控制器502配置成第四系数存储库(未示出)。例如,第四系数存储库可以被配置为4个系数块,其中,4个块中的每一个对应于图5的数据存储库506的每个数据ram块。例如,第四系数存储库可以具有每地址64*fp16字的四个块,因此四个块之一针对来自数据存储库506的每个数据输入块应用于图5的四组dpe520之一。

替代地,当示例的cnn加速器500在8*32模式下操作时,第一示例系数存储库700可以由图5的示例控制器502配置成第五系数存储库(未示出)。例如,第五系数存储库可以被配置为八个系数块,其中,八个块中的每一个对应于图5的数据存储库506的每个数据ram块。例如,第五系数存储库可以具有每地址32*fp16字的八个块,因此八个块之一针对来自数据存储库506的每个数据输入块应用于图5的八组dpe520之一。

替代地,当示例cnn加速器500在16*16模式下操作时,第一示例系数存储库700可以由图5的示例控制器502配置成第六系数存储库(未示出)。例如,第六系数存储库可以被配置为十六个系数块,其中,十六个块中的每一个对应于图5的数据存储库506的每个数据ram块。例如,第六系数存储库可以具有每地址16*fp16字的十六个块,因此十六个块之一针对来自数据存储库506的每个数据输入块应用于图5的十六组dpe520之一。

例如,当在4*64模式下操作时,针对图1的每个输出通道126针对单个位置(例如,输出通道122)对图1的输入通道110、112的四个流顺序地求和。在这样的示例中,4*64模式的结果是四个流的总和。例如,4x64模式对应于dpe520中的四个dpe520处理1个输入通道以实质上并行地产生64个输出通道的输出。

图8是示例表格800,其描述了图5的示例系数存储库508的示例寻址模型。在图8的示例表800中,示例地址序列列(addresssequence)802描述了用于示例系数存储库508的寻址方案。在示例地址序列列802中,术语chstrin是指输入通道步幅值,并且术语chstrout是指输出通道步幅值。在图8的示例表800中,示例输入通道列(inputchannel)804表示用于卷积运算的输入通道(例如,图1的输入通道110、112)。

在图8的示例表800中,示例数据列(data[127:0])806表示128比特字,所述128比特字一次为八个通道中的每一个存储单个系数16比特字,从而实际上占用16比特通道,而与系数模式无关(例如,1*256模式,2*128模式等)。例如,fp16完全占据16比特通道,2uf8个系数占据16比特通道等等。示例系数列(coefficient)808表示滤波器的索引(例如,图1的第一滤波器114的系数)。

图9是示例表900,其描述了用于基于非fp16格式的图5的示例系数存储库508的示例寻址模型。在图9的示例表900中,16比特被分配给每个通道。在示例数据列(data[127:0])902中的每个16比特通道(例如,ch0、ch1、ch7等)中,为所有输入通道打包数据。对于非fp16模式,输入通道步幅(chstrin)没有直接含义,但是被计算为步幅,使得当乘以每ram的通道数量(ch_per_ram)时,步幅将正确到达下一ram块(例如,chstrin可以在非128比特边界上对齐)。以下描述了用于3x3卷积(例如,9个系数)的4比特托盘化图像的示例:

具有4个通道、8比特系数的示例3x3滤波器:coeffstride(in)=4.5行=0x0048h。

具有4个通道、4比特系数的示例2x2滤波器:coeffstride(in)=2.25行=0x0024h。

图10示出了用于实现本文公开的示例的示例卷积运算1000。例如,卷积运算1000可以由图5的cnn加速器500执行。在图10的示例中,卷积运算1000的卷积模式是1x256模式,其中,针对用于多个输出通道的示例输出通道1006针对单个示例输出位置1004将示例输入通道1002中的每个示例输入通道1002顺序地求和。

在图10的所示示例中,输入通道1002的尺寸为28像素宽(x=28)并且28像素高(y=28)并且50通道深(c=50)。使用尺寸为5像素宽(fw=5)、5像素高(fh=5)和50通道深(c=50)的示例滤波器1010来针对示例输入通道1002处理示例输入位置1008。替代地,示例输入通道1002可以对应于cnn的辅助卷积层(例如,初始卷积层之后的卷积层)。例如,输入通道1002可以包括与像素值相比的激活。

在图10的所示示例中,通过计算滤波器1010和输入通道1002的输入位置1008的所有卷积的所有乘积的总和来确定输出位置1004。通过对示例输入通道1002的其余输入位置进行卷积直到处理了输入位置的全部,来处理示例输出通道1006的附加输出位置。响应于处理了示例输入通道1002的输入位置的全部,示例cnn加速器500使用一组不同的滤波器来计算另一输出通道。在图10的所示示例中,cnn加速器500用用于100组滤波器的不同组的滤波器来对输入通道1002进行卷积(例如,迭代地卷积),以生成100个输出通道。

图11示出了基于1x256卷积布置的图5的示例连接复用器510的示例操作1100。在图11的所示示例中,连接复用器510具有跨图5的dpe520的所有256个dpe520复制的单个fp16输出。在图11的所示示例中,连接复用器510从数据存储库506中选择fp16数据。

在图11的所示示例中,基于1x256卷积布置来配置数据存储库506。在图11的示例中描绘的数据存储库506被组织成被配置为单个大ram的16个示例块(ram0-ram15)1102。每个块1102包括fp16字的八个示例列1104,并且八个列1104中的每个列1104包括多个示例数据线1106。替代地,示例块1102可以具有少于或多于八列和/或少于或多于图11中描绘的数据线。在图11的所示示例中,每条数据线1106包括输入通道的八个字。示例连接复用器510基于滤波器来为每个周期选择八个输入字中的适当字,并且选择正被处理的当前输入通道。图5的示例控制器502基于输入通道步幅来确定适当字的地址。示例控制器502基于组合ram地址和连接矩阵地址中的至少一个来确定总地址。

在图11的所示示例中,一次处理单个输入通道。例如,在第一时钟周期期间,连接复用器510选择与第一输入通道相对应的每个块1102的数据线1106中的前两个,并将多条数据线1106输出到图1的dpe520中的相应dpe520。例如,连接复用器510可以选择32条数据线1106(例如32条数据线=(2条数据线/块)x(16个块)),其中,每条数据线1106包括128比特(例如,128比特=(16比特/字)x(8字/数据线))以产生要由dpe520处理的4096比特(例如,4096比特=(128比特/数据线)x(2条数据线/块)x16块)。在这样的示例中,在第二时钟周期期间,连接复用器510可以选择与第二输入通道相对应的16个块1102中的每个块1102的下两条数据线1106,并且将多条数据线1106输出到dpe520中的相应dpe520以用于处理。在这样的示例中,数据存储库506、连接复用器510等的寻址和控制顺序由图5的控制器502或dma控制器504中的至少一个进行。

图12示出了基于2*128卷积布置的图5的示例连接复用器510的示例操作1200。在图12的所示示例中,连接复用器510具有跨图5的dpe520的两组128复制的两个fp16输出。在图12的所示示例中,连接复用器510从数据存储库506中选择fp16数据。

在图12的所示示例中,基于2x128卷积布置来配置数据存储库506。在图12的示例中描绘的数据存储库506被组织成被配置为两个示例ram块1204、1206的16个示例块(ram0-ram15)1202。第一示例ram块1204包括ram0-ram7,并且第二示例ram块1206包括ram8-ram15。每个块1202包括fp16字的八个示例列1208,并且八个列1208中的每列包括多个示例数据线1210。在图12的所示示例中,第一ram块1204包括输入通道组的前一半,并且第二ram块1206包括输入通道组的后一半。替代地,示例块1202可以具有少于或多于八列和/或少于或多于图12中描绘的数据线。

在图12的所示示例中,一次处理单个输入通道。例如,在第一时钟周期期间,连接复用器510选择被包括在第一ram块1204中的每个块1202的数据线1210中的前两条和在被包括在第二ram块1206中的每个块1202的数据线1210中的前两条,其中,所选择的数据线1210对应于要处理的第一输入通道。示例连接复用器510将多条数据线1210输出到图1的dpe520中的相应dpe520。例如,连接复用器510可以从第一ram块1204中选择16条数据线1210,并且从第二ram块1206中选择16条数据线1210,其中,每条数据线1210包括128比特以产生4096比特以供dpe520处理。

在这样的示例中,在第二时钟周期期间,连接复用器510可以选择第一ram块1204中的每个块1202的下两条数据线1210和与要处理的第二输入通道相对应的第二ram块1206中的每个块1202的下两条数据线1210。示例连接复用器510将多条数据线1210输出到dpe520中的相应dpe520以进行处理。在这样的示例中,数据存储库506、连接复用器510等的寻址和控制顺序由图5的控制器502或dma控制器504中的至少一个进行。

图13是用于实现图5的示例cnn加速器500的示例cnn加速器1300的示例实施方式的框图。图13的示例cnn加速器1300通过处理多个输入通道和/或实质上并行地(例如,基本同时地)生成一个或多个输出通道来加速卷积运算。在图13的所示示例中,cnn加速器1300包括示例dpe库存引擎1302、示例dpe配置优化器1304、示例模式选择器1306、示例卷积引擎1308、示例池化引擎1310和示例全连接引擎1312。

在图13的所示示例中,cnn加速器1300包括dpe库存引擎1302,以库存和/或以其他方式识别驻留在平台上的可用dpe(例如,图5的cnn加速器500)。示例dpe库存引擎1302可以对应于图5的示例控制器502。在图13的所示示例中,dpe库存引擎1302实现用于查询、确定、表征和/或识别驻留在平台上的dpe的单元。在一些示例中,dpe库存引擎1302确定可供处理的图5的dpe520的数量。在一些示例中,dpe库存引擎1302确定图5的一个或多个dpe520的卷积布置、模式等,和/或更一般地,确定图5的cnn加速器500的卷积布置、模式等。

在图13的所示示例中,cnn加速器1300包括示例dpe配置优化器1304,以选择和/或以其他方式确定dpe配置、模式等,以增加(例如,最大化)和/或以其他方式优化dpe资源利用率并且降低(例如,最小化)和/或以其他方式优化功耗。示例dpe配置优化器1304可以对应于图5的示例控制器502。在图13的所示示例中,dpe配置优化器1304实现用于确定dpe配置、模式等的单元,以增加dpe资源利用率并降低功耗。例如,当cnn加速器500处于卷积模式、池化模式、全连接模式等时,dpe配置可以对应于数据存储库506、系数存储库508、dpe阵列512等的配置。示例dpe配置优化器1304实现用于使用很低的功率(例如,很少或没有重复的数据移动)和最大的硬件利用率来提供图5的示例cnn加速器500的最佳操作的单元。

在一些示例中,为了减少数据移动,可以将输出的总数量和总系数集保持在图5的示例系数存储库508中。在一些示例中,dpe配置优化器1304基于滤波器尺寸来确定系数存储库508的配置以减少数据移动。例如,对于使用fp16系数的3x3的滤波器大小,dpe配置优化器1304可以确定大约28个输入通道的极限(例如,28≈256/9,其中,系数存储库508具有256个位置)。在这样的示例中,dpe配置优化器1304确定28个输入通道的限制,以确保输出的总数量和总系数集可以被存储在图5的系数存储库508中。

在一些示例中,dpe配置优化器1304减少了输出通道的数量,其中,模式的每次减小都会使输入通道处理能力加倍。例如,dpe配置优化器1304可以从1*256卷积布置改变为2*128卷积布置或4*64卷积布置以提供相同的加速度,但是具有较少的整体功率使用。在一些示例中,当所有输入通道(例如,输入图像数据)或与图像相关联的所有系数都不适合系数存储库508时,dpe配置优化器1304部署循环缓冲器管理。例如,dpe配置优化器1304可以配置每通道循环缓冲器管理系统,其中,所有通道尽早从存储器(例如sram、dram等)中连续进行补充,以确保没有停顿或停顿最少。

在一些示例中,dpe配置优化器1304停止和/或以其他方式阻止cnn加速器1300基于通过使用卷积安排而产生的dpe利用率来继续进行操作(例如,卷积运算、池化操作、全连接操作等)。例如,dpe配置优化器1304可以选择1*256卷积布置作为要被分析、评估、处理等的第一卷积布置。在这样的示例中,基于操作要求(例如,要进行处理或生成的输入通道的数量、输出通道的数量等等)在cnn加速器1300操作期间dpe阵列512的256个dpe520中的64个dpe520未使用,dpe配置优化器1304可以确定1*256卷积布置导致75%的第一dpe利用率。示例dpe配置优化器1304可以将75%的第一dpe利用率与90%的dpe利用率门限进行比较,并且基于比较来确定第一dpe利用率不满足dpe利用率门限(例如,75%的第一dpe利用率低于90%的dpe利用率门限)。响应于确定第一dpe利用率不满足dpe利用率门限,示例dpe配置优化器1304可以使示例cnn加速器1300停止在第一卷积布置的情况下执行操作,直到对于dpe利用率生成、确定和/或评估另一卷积布置为止。

在一些示例中,响应于停止,dpe配置优化器1304选择第二卷积布置,例如4x64卷积布置以进行处理。在这样的示例中,基于操作要求在cnn加速器1300的操作期间dpe阵列512中的256个dpe520中的0个未使用,dpe配置优化器1304可以确定4*64卷积布置导致100%的第二dpe利用率。示例dpe配置优化器1304可以将100%的第二dpe利用率与90%的dpe利用率门限进行比较,并且基于比较确定第二dpe利用率满足dpe利用率门限(例如,第二dpe利用率100%大于90%的dpe利用率门限)。响应于确定第二dpe利用率满足dpe利用率门限,示例dpe配置优化器1304可以指示示例cnn加速器1300执行具有第二卷积布置的操作。附加地或替代地,示例dpe配置优化器1304可以将第二dpe利用率与第一dpe利用率进行比较,并且指示示例cnn加速器1300基于具有大于第一卷积布置的dpe利用率的第二卷积布置来用第二卷积布置执行操作。

在一些示例中,dpe配置优化器1304调整(例如,动态调整、动态配置等)dpe520的累加器604的配置。在一些示例中,当输入值不需要累加器604可用的现有数量的整数比特时,dpe配置优化器1304减少累加器604的整数比特数。例如,dpe配置优化器1304可以减少累加器604可以处理的整数比特数以增加范围,但是降低累加器604的精度。在一些示例中,当累加器604溢出时,dpe配置优化器1304增加累加器604的整数比特数。例如,配置优化器1304可以增加累加器604可以处理的整数比特数,以增加范围,但是降低累加器604的精度。

在图13的所示示例中,cnn加速器1300包括模式选择器1306,以选择操作模式、要执行的操作和/或卷积布置。示例模式选择器1306可以对应于图5的示例控制器502。在图13的示例中,模式选择器1306实现用于选择诸如卷积模式、池化模式、全连接模式等的操作模式并且基于所选择的模式来配置cnn加速器1300的单元。在一些示例中,模式选择器1306在卷积模式内选择可选的池化模式。在一些示例中,模式选择器1306选择模式之一内的后处理操作。例如,模式选择器1306可以指示图5的dpe520在卷积模式下完成卷积运算之后、在池化模式下完成池运算之后等执行偏置运算、缩放操作、prelu操作、relu操作等。

在一些示例中,模式选择器1306基于所选模式配置图5的cnn加速器500。例如,模式选择器1306可以基于所选模式配置图5的数据存储库506、系数存储库508、dpe阵列512等。例如,模式选择器1306可以通过指示dma控制器504将系数值发送到系数存储库508来将系数存储库508配置用于卷积模式。在其他示例中,模式选择器1306可以通过指示系数存储库508将偏差参数、缩放参数等发送到dpe阵列512以进行处理来将dpe阵列512配置用于偏置操作、缩放操作等。

在图13的所示示例中,cnn加速器1300包括卷积引擎1308以对与输入图像相关联的图像数据执行卷积运算和/或以其他方式促进所述卷积运算。示例卷积引擎1308可以对应于图5的示例控制器502。例如,卷积引擎1308可以对应于控制器502,以指示和/或以其他方式引导数据存储库506、系数存储库508、dpe520中的一个或多个等来执行卷积运算。在图13的所示示例中,卷积引擎1308包括用于用多个滤波器对包括激活值、像素值等的多个输入通道进行卷积的单元,以实质上并行地生成多个输出通道。例如,卷积引擎1308包括用于促进使用dpe阵列512的一个或多个dpe520进行卷积运算的单元。

在一些示例中,卷积引擎1308通过获得与输入图像(例如,图1的输入图像106)相关联的图像数据(例如,激活值、像素值等)、用与要在输入图像中检测的感兴趣的图像特征相关联的滤波系数对图像数据进行卷积运算并且生成与图像数据和滤波系数的重叠相关联的输出来执行卷积运算。在这样的示例中,模型选择器1306基于卷积布置来配置图5的数据存储库506、系数存储库508、dpe阵列512等。

在模式选择器1306选择2*128卷积布置的示例中,示例卷积引擎1308将示例数据存储库506配置成两个ram块,如以上结合图12所述。如以上结合图7的第三示例系数存储库704所述,示例卷积引擎1308将系数存储库508配置成两个系数块。示例卷积引擎1308在示例数据存储库506中针对要处理的每个输入通道加载数据线的一部分或全部补充,并且将与输入数据相关联的系数加载到图5的示例系数存储库508中,使得数据线和系数与图5的dpe520中的相应dpe520对齐。

响应于示例数据存储库506和示例系数存储库508被加载和/或以其他方式配置,示例卷积引擎1308针对第一输出位置(例如,图10的输出位置1004)实质上并行地执行卷积运算(例如,图10的卷积运算1000)。例如,卷积引擎1308通过将存储在数据存储库506中的适当的字(例如,与输入位置1008相关联的字)寻址并发送到dpe520中的相应dpe520来实现卷积运算,同时被包括在系数存储库508中的系数被循环通过到dpe520以生成卷积输出值。

示例卷积引擎1308处理(例如,迭代处理)这些字,直到处理了全部字(例如,与图10的输入位置1008相关联的全部字)为止。在一些示例中,当针对输入位置已处理所有字时,卷积引擎1308执行后处理操作(例如,偏置操作、缩放操作、prelu操作、relu操作等)。使用输入通道步幅,示例卷积引擎1308使用dpe520对接下来的通道进行卷积,直到处理了输入通道的所有输入位置,以生成卷积输出值。

在一些示例中,卷积引擎1308对卷积模式内的卷积输出执行可选的池化操作(例如,平均池化操作、最大池化操作等)。例如,卷积引擎1308可以将到输出缓冲器(例如,图5的输出缓冲器514)的池区域(例如,图2的池区域212)的平均值、最大值等确定为池输出。当输出缓冲器514已满时(例如,已经针对每个dpe520计算了门限量的值),示例卷积引擎1308将池输出和/或更一般地将dpe520的输出从输出缓冲器514写入存储器。

在图13的所示示例中,cnn加速器1300包括池化引擎1310,以对一个或多个卷积输出执行池化操作,例如平均池化操作或最大池化操作。示例池化引擎1310可以对应于图5的示例控制器502。例如,池化引擎1310可以对应于控制器502,其指示和/或以其他方式引导数据存储库506、系数存储库508、dpe520中的一个或多个等执行池化模式内的池化操作。在所示的示例中,池化引擎1310实现用于对由卷积引擎1308生成的一组卷积输出执行池化操作的单元。

在一些示例中,池化引擎1310处理池区域以生成池输出。例如,池化引擎1310可以处理图3的池区域212以基于池区域212的平均值、最大值等来生成图3的输出位置302。例如,池化引擎1310可以对于2x2池每4个时钟周期输出数据,对于3x3池每9个时钟周期输出数据,等等。示例池化引擎1310通过计算池区域中的数据总和并将该总和乘以1/av来执行平均池化操作,其中,av是通过计算池宽度乘以池高度而确定的池大小。示例池化引擎1310通过确定池区域的最大值来执行最大池化操作。

在图13的所示示例中,cnn加速器1300包括全连接引擎1312,以使用来自卷积引擎1308的输出(例如,卷积输出)和/或来自池化引擎1310的输出(例如,池输出)来基于训练数据集将输入图像(例如,图1的输入图像106)分类成各种类别。图13的示例全连接引擎1312可以对应于图5的控制器502。例如,控制器502可以指示数据存储库506、系数存储库508、dpe阵列512等执行全连接操作(例如,生成图4的输出阵列406)。在图13的所示示例中,全连接引擎1312实现用于基于卷积输出和/或池输出来对输入图像的图像特征进行分类以检测和/或以其他方式识别被包括在输入图像中的图像特征的单元。

在一些示例中,cnn加速器1300通过使用一个或多个链表来实现图5的cnn加速器500。链表是数据元素的线性集合,其中,线性顺序不是由它们在存储器中的物理位置给出的,而是每个数据元素都指向数据元素中的下一个。在一些示例中,链表存储在系统存储器中。例如,链表可以存储在图5的主存储器516并且由图5的控制器502执行。在一些示例中,链表促进子功能,所述子功能可以级联形成宏功能。在一些示例中,子功能的数量没有限制,因为卷积引擎1308、池化引擎1310、全连接引擎1312等可以顺序通过每个操作,直到到达指示宏功能结束的null链接为止。例如,控制器502可以将cnn加速器500的整体cnn功能分解成可清楚识别的块,并且执行每个块直到到达null链接为止。

在一些示例中,图13的cnn加速器1300维护两个或多个单独的链表。图13的示例cnn加速器1300可以默认地以轮询方式或以任何其他方式执行和/或以其他方式处理两个或多个链表。在一些示例中,图13的cnn加速器1300可以锁定或冻结一个或多个链表,以确保在移交给链表中的第二个之前链表之一已被完成。

示例dpe库存引擎单元、示例dpe配置优化器单元、示例模式选择器单元、示例卷积引擎单元、示例池化引擎单元和/或示例全连接引擎单元由在硬件处理器上执行的软件实现。附加地或替代地,示例dpe库存引擎单元、示例dpe配置优化器单元、示例模式选择器单元、示例卷积引擎单元、示例池化引擎单元和/或示例全连接引擎单元可以替代地由逻辑电路实现,所述逻辑电路被构造为执行逻辑操作以实现期望的功能,所述逻辑电路例如asic、fpga等,和/或这种电路与软件和/或固件的组合。

尽管在图5中示出了实现示例cnn加速器500的示例方式,但图5所示的元素、过程和/或设备中的一个或多个可以以任何其他方式组合、划分、重新布置、省略、消除和/或实现。此外,图13的示例dpe库存引擎1302、示例dpe配置优化器1304、示例模式选择器1306、示例卷积引擎1308、示例池化引擎1310、示例全连接引擎1312和/或更一般地示例cnn加速器1300可以通过硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实现。因此,例如,图13的示例dpe库存引擎1302、示例dpe配置优化器1304、示例模式选择器1306、示例卷积引擎1308、示例池化引擎1310、示例全连接引擎1312和/或更一般地示例cnn加速器1300中的任何一个可以通过一个或多个模拟或数字电路、逻辑电路、可编程处理器、可编程控制器、图形处理单元(gpu)、数字信号处理器(dsp)、专用集成电路(asic)、可编程逻辑器件(pld)和/或现场可编程逻辑器件(fpld)来实现。当阅读本专利的任何装置或系统权利要求以覆盖纯软件和/或固件实施方式时,示例dpe库存引擎1302、示例dpe配置优化器1304、示例模式选择器1306、示例卷积引擎1308、示例池化引擎1310和/或示例全连接引擎1312中的至少一个特此明确定义为包括非暂时性计算机可读存储设备或存储磁盘,例如存储器、数字多功能盘(dvd)、压缩盘(cd)、蓝光盘等,包括软件和/或固件。更进一步地,附加于或替代图13所示的元素、过程和/或设备,图13的示例cnn加速器1300可以包括一个或多个元素、过程和/或设备,和/或可以包括所示的元素、过程和设备中的任何一个或全部中的多于一个。如本文所使用的,短语“在通信中”(包括其变型)涵盖直接通信和/或通过一个或多个中间组件的间接通信,并且不需要直接的物理(例如,有线)通信和/或恒定的通信,而是附加地包括以周期性间隔、计划的间隔、非周期性间隔和/或一次性事件进行的选择性通信。

在图14-18中示出了流程图,其表示用于实现图13的cnn加速器1300的示例硬件逻辑、机器可读指令、硬件实现的状态机和/或其任何组合。机器可读指令可以是可执行程序或可执行程序的一部分,以供计算机处理器(例如,下面结合图19讨论的示例处理器平台1900中示出的处理器1912)执行。程序可以体现为存储在非暂时性计算机可读存储介质中的软件,所述非暂时性计算机可读存储介质例如cd-rom、软盘、硬盘驱动器、dvd、蓝光盘或与处理器1912相关联的存储器,但是整个程序和/或其部分可以替代地由处理器1912以外的设备执行和/或以固件或专用硬件体现。此外,尽管参考图14-18所示的流程图描述了示例程序,但是可以替代地使用实现示例cnn加速器1300的许多其他方法。例如,可以改变框的执行顺序,和/或可以改变、消除或组合所描述的一些框。附加地或替代地,任何或所有框可以由构造为在不执行软件或固件的情况下执行对应的操作的一个或多个硬件电路(例如,分立和/或集成的模拟和/或数字电路、fpga、asic、比较器、运算放大器(op-am)、逻辑电路等)实现。

如上所述,图14-18的示例过程可以使用存储在非暂时性计算机和/或机器可读介质上的可执行指令(例如,计算机和/或机器可读指令)来实现,所述非暂时性计算机和/或机器可读介质例如硬盘驱动器、闪存、只读存储器、光盘、数字多功能盘、高速缓存、随机存取存储器和/或任何其他存储设备或存储磁盘,其中在任何持续时间(例如,对于延长的时间段、永久地、对于短暂实例、对于暂时缓冲和/或对于信息的缓存)内存储了数据。如本文所使用的,术语非暂时性计算机可读介质被明确定义为包括任何类型的计算机可读存储设备和/或存储盘,并且排除传播信号并排除传输介质。

“包含”和“包括”(及其所有形式和时态)在本文中用作开放式术语。因此,每当权利要求采用任何形式的“包括(include)”或“包含(comprise)”(例如,包括(comprises)、包含(includes)、包含有(comprising)、包括有(including)、具有等)作为前序或在任何种类的权利要求记载内时,应理解为在不超出对应权利要求或记载的范围的情况下,可以存在附加的元素、术语等。如本文所使用的,当例如在权利要求的前序中使用短语“至少”作为过渡术语时,其以与术语“包括”和“包含”是开放式的相同的方式是开放式的。当术语“和/或”例如以诸如a、b和/或c的形式使用时,其指代a、b、c的任何组合或子集,例如(1)仅a,(2)仅b,(3)仅c,(4)a与b,(5)a与c,(6)b与c,以及(7)a与b与c。

图14是表示可以被执行以实现图5的cnn加速器500和/或图13的cnn加速器1300以处理与输入图像相关联的图像数据的示例机器可读指令1400的流程图。图14的示例机器可读指令1400开始于框1402处,在所述框1402处,示例cnn加速器1300清点可用数据处理元件(dpe)。例如,dpe库存引擎1302可以确定dpe520用于处理的可用性、一个或多个dpe520的配置和/或模式等。

在框1404处,示例cnn加速器1300选择dpe配置以最大化dpe资源利用率并最小化功耗。例如,dpe配置优化器1304可以基于滤波器大小、要处理的输入通道的数量、要生成的输出通道的期望数量等来确定使用1*256卷积布置、2*128卷积布置等,以提高dpe资源利用率并降低功耗。在这样的示例中,dpe配置优化器1304可以限制输入通道的数量,以确保与输入通道相关联的图像数据的全部以及对应的系数可以完全存储在图5的cnn加速器500中以减少(例如,最小化)数据移动以减少功耗,同时保持相当高的dpe资源利用率(例如,75%的利用率、100%的利用率等)。

响应于选择dpe配置,示例cnn加速器1300在框1406处确定dpe配置是否导致或产生一个或多个未使用的dpe。在操作要求包括64个输入通道和192个输出通道的示例中,dpe配置优化器1304确定使用4*64卷积布置,其基于4*64针对所有输入循环3次,与其他卷积布置(例如,1*256、2*128、4*32等)相比导致更高的dpe利用率。

如果在框1406处,示例cnn加速器1300确定存在未使用的dpe,则控制前进到框1408,以中止cnn加速器1300的操作以生成替代的dpe配置。例如,dpe配置优化器1304可以确定防止或阻止cnn加速器1300的操作的进行,直到为该操作指派、指定门限量的可用dpe520为止。例如,dpe配置优化器1304可以确定生成dpe520的替代卷积布置,以将dpe利用率增加到高于dpe利用率门限。例如,如果dpe配置优化器1304在框1404处选择了1*256的卷积布置,则64个未使用的dpe520将导致贯穿卷积运算的75%的dpe利用率,并因此造成与诸如4x64卷积布置之类的其他卷积布置相比更长的卷积时间,这将导致0个未使用的dpe520和对应的100%dpe利用率。

在这样的示例中,dpe配置优化器1304可以在框1408处生成和/或以其他方式确定4*64卷积布置。例如,dpe配置优化器1304可以基于4*64卷积布置的dpe利用率大于(1)先前生成的卷积布置的dpe利用率(例如,1*256卷积布置)和/或(2)dpe利用率门限(例如,75%的dpe利用率,90%的dpe利用率等等)来确定使用4*64卷积布置。例如,dpe配置优化器1304可以基于对应的dpe利用率满足dpe利用率门限(例如,dpe利用率大于dpe利用率门限)来生成并确定使用4*64卷积布置。响应于在框1408处生成替代dpe配置,控制返回到框1404以选择在框1408处生成的dpe配置。替代地,如果不存在导致没有未使用的dpe520或满足dpe利用率门限的替代的dpe配置,控制可以从框1406前进到框1410(例如,在超时时段之后,在评估一个或多个卷积布置的dpe利用率之后等等)以继续进行当前的dpe配置,生成指示没有替代dpe配置的警报,或中止cnn加速器1300的操作。

如果在框1406处,示例cnn加速器1300确定不存在未使用的dpe,则在框1410处,cnn加速器1300选择控制器模式。例如,模式选择器1306可以确定进行具有可选池化模式、重叠池化模式或全连接模式进的卷积运算。

响应于选择具有可选池化模式的卷积,控制前进到框1412以开始具有可选池化模式的卷积运算。下面结合图15描述可以用于实现框1412的示例过程。例如,控制器502可以指示dpe520以卷积模式、具有池化的卷积模式等进行操作。

响应于选择重叠池化模式,控制前进到框1414以开始在重叠池化模式下操作。下面结合图16描述可以用于实现框1414的示例过程。例如,控制器502可以指示dpe520以重叠池化模式进行操作。

响应于选择全连接模式,控制前进到框1416以开始在全连接模式下操作。下面结合图17描述可以用于实现框1416的示例过程。例如,控制器502可以指示dpe520以全连接模式操作。响应于结束和/或以其他方式执行框1412处的具有可选的池化操作的卷积、框1414处的重叠池化操作或框1416处的全连接操作,示例机器可读指令1400结束。

图15是表示可以被执行以实现图5的cnn加速器500和/或图13的cnn加速器1300来执行具有可选池化的卷积的示例机器可读指令1412的流程图。示例机器可读指令1412可以实现图14的示例机器可读指令1400的框1412。图15的示例机器可读指令1412开始于框1502处,在框1502处,示例cnn加速器1300将cnn加速器1300的模式设置为具有可选池的卷积。例如,模式选择器1306可以将cnn加速器1300配置用于具有可选池模式的卷积。

在框1504处,示例cnn加速器1300确定输入通道是否存在最小数量的行。例如,卷积引擎1308可以确定在存储中是否存在最小数量的行以对感兴趣的输入通道进行卷积。例如,图5的dma控制器504可以将要处理的一个或多个输入通道所需的多个数据行发送到数据存储库506。

如果在框1504处,示例cnn加速器1300确定输入通道不存在最小数量的行,则控制在框1504处等待,直到最小数量的行变得可用。如果在框1504处,示例cnn加速器1300确定输入通道的最小数量的行存在,则控制前进到框1506以开始对输入通道进行卷积。例如,卷积引擎1308可以用图10的滤波器1010之一对图10的输入通道1002之一进行卷积,以生成卷积输出值。

响应于开始输入通道的卷积,控制前进到框1508,以确定卷积是否完成。例如,卷积引擎1308可以使输入通道1002之一与滤波器1010之一进行卷积,直到图10的输入位置1008的全部值都已被处理为止。如果在框1508处,示例cnn加速器1300确定卷积未完成,则控制等待直到卷积完成,否则控制前进到框1510,以确定是否还有更多输入要处理。例如,卷积引擎1308可以确定在要处理的输入位置1008中包括附加的激活值、像素值等。

如果在框1510处,示例cnn加速器1300确定有更多输入要处理,则控制返回到框1504,以确定是否存在最小数量的行来处理附加输入。如果在框1510处,示例cnn加速器1300确定没有要处理的输入,则在框1512处,cnn加速器1300累加小计(例如,计算与图10的输入位置1008相对应的卷积输出值的总和)。例如,卷积引擎1308可以累加小计。

在框1514处,示例cnn加速器1300确定是否启用池化。例如,模式选择器1306可以确定启用平均池化、最大池化等。如果在框1514处,示例cnn加速器1300确定未启用池化,则控制前进到框1518以写入到输出缓冲器。例如,卷积引擎1308可以针对图10的输入位置1008将卷积输出的累加值输出到输出缓冲器以生成图10的输出位置1004。响应于写入到输出缓冲器,图15的示例机器可读指令1412返回到图14的示例机器可读指令1400而结束。例如,卷积引擎1308生成与正在与滤波器1010进行卷积的输入通道1002的输入位置1008相对应的输出位置1004。在这种示例中,卷积引擎1308可以对输入通道1002中的其余输入位置进行卷积(例如,迭代地卷积)以生成输出通道1006。

如果在框1514处,示例cnn加速器1300确定启用了池化,则控制前进到框1516以执行池化和卷积比较。例如,池化引擎1310可以计算输出通道1006的池区域的平均值或最大值。响应于执行池化和卷积比较以生成池输出值,控制前进到框1518以将池输出值写入到输出缓冲器。

图16是表示可以被执行以实现图5的cnn加速器500和/或图13的cnn加速器1300以执行重叠池化的示例机器可读指令1414的流程图。图14的示例机器可读指令1414可以被用于实现图14的示例机器可读指令1400的框1414。图14的示例机器可读指令1414在框1602处开始,在该框处,示例cnn加速器1300将cnn加速器1300的模式设置为重叠池化。例如,模式选择器1306可以将cnn加速器1300配置用于重叠池化模式。

响应于将模式设置为重叠池化,示例cnn加速器1300在框1604处确定池区域是否存在最小数量的行。例如,池化引擎1310可确定是否有最小数量的行存在于存储中以处理池区。例如,图5的dma控制器504可以将处理图2的池区域212所需的多个数据行发送到数据存储库506。

如果在框1604处,示例cnn加速器1300确定池区域不存在最小数量的行,则控制在框1604处等待直到最小数量的行变得可用。如果在框1604处,示例cnn加速器1300确定池区域存在最小数量的行,则控制前进到框1606,将当前值与所存储的值进行比较以进行最大池化或累加以进行平均池化。例如,池化引擎1310可以比较(例如,迭代地比较)池区域的值,以确定当被配置为最大池化时池区域的最大值。在其他示例中,池化引擎1310可以累加池区域的值,并且基于池区域的大小和池区域的累加值来计算池区域的平均值。响应于计算最大池值或平均池值,图16的示例机器可读指令1414返回到图14的示例机器可读指令1400而结束。

图17是表示可以被执行以实现图5的cnn加速器500和/或图13的cnn加速器1300以执行全连接操作的示例机器可读指令1416的流程图。图17的示例机器可读指令1416可以用于实现图14的示例机器可读指令1400的框1416。图17的示例机器可读指令1416开始于框1702处,在框1702处,示例cnn加速器1300将cnn加速器1300的模式设置为全连接模式。例如,模式选择器1306可以将cnn加速器1300配置用于全连接模式。

响应于将模式设置为全连接模式,示例cnn加速器1300配置系数存储库以保存n个完整矢量。例如,图5的控制器502可以指示dma控制器504将图4的系数阵列404发送到图5的系数存储库508。

在框1706处,示例cnn加速器1300在ram中分发数据矩阵,以使所有dpe能够并行处理矢量。例如,图5的控制器502可以指示dma控制器504从图5的主存储器516发送数据(例如,卷积输出值、池输出值等)到数据存储库506,所述数据存储库506转而经由连接复用器510将数据发送到dpe520,其中,每个dpe520实质上与其他dpe520并行地执行生成和/或以其他方式计算图4的输出阵列406的一部分。响应于处理矢量,图17的示例机器可读指令1416返回到图14的示例机器可读指令1400而结束。

图18是表示可以被执行以实现图5的cnn加速器500和/或图13的cnn加速器1300以配置(例如,动态配置)累加器的示例机器可读指令1800的流程图。示例机器可读指令1800开始于框1802处,在框1802处,示例cnn加速器1300确定输入所需的多个整数比特。例如,dpe配置优化器1304可以确定到累加器604的输入值需要17个整数比特,并且累加器604的配置使累加器604能够处理16个整数比特。

在框1804处,示例cnn加速器1300确定所需的整数比特数是否大于当前的整数比特数。例如,dpe配置优化器1304可以确定17个整数比特的输入值需要比累加器604的配置的16个整数比特更多的整数比特。

如果在框1804处,示例cnn加速器1300确定所需的整数比特数大于当前的整数比特数,则控制前进到框1810,以将fp16转换为定点格式。如果在框1804处,示例cnn加速器1300确定所需的整数比特数小于当前的整数比特数,则在框1806处,cnn加速器1300通过增加整数比特数到所需的数量并相应减少小数比特数来调整定点格式。例如,dpe配置优化器1304可以将整数比特数从16个整数比特增加到17个整数比特,以增加累加器604的范围,并且减少小数比特数以降低累加器604的精度。

响应于调整定点格式,示例cnn加速器1300在框1808处将累加器对齐更新的定点格式。例如,在此示例中dpe配置优化器1304可以将累加器604对齐17个整数比特的更新的定点格式。响应于在框1808处对齐累加器,示例cnn加速器1300在框1810处将fp16输入转换为定点格式。例如,卷积引擎1308、池化引擎1310、全连接引擎1312等可以将到累加器604的输入从fp16转换为定点格式。

在框1812处,示例cnn加速器将输入与累加值相加。例如,卷积引擎1308、池化引擎1310、全连接引擎1312等可以将到累加器604的输入值与先前存储的值或先前累加的值相加。

响应于将输入与累加值相加,示例cnn加速器1300确定是否存在加法溢出。例如,dpe配置优化器1304可以确定累加器604的整数比特数不足以防止溢出。

如果在框1814处,示例cnn加速器1300确定存在加法溢出,则控制前进到框1822以将累加器的定点格式调整1,并将小数比特减少1。在步骤1814处,示例cnn加速器1300确定不存在加法溢出,然后,在框1816处,cnn加速器1300确定相加结果是否正在使用整数比特的完整范围。例如,dpe配置优化器1304可以将整数比特数减少1以减小范围,由于未使用整数比特的完整范围而不需要所述范围,并且提高精度来优化和/或以其它方式改善图6的累加器604的操作。

如果在框1816处,示例cnn加速器1300确定相加结果正在使用整数比特的完整范围,则控制前进到框1824以将相加结果与定点格式对齐并指派给累加器。例如,dpe配置优化器1304可以基于使用累加器604的整数比特的完整范围的相加结果来确定累加器604被优化。

如果在框1816处,示例cnn加速器1300确定相加结果未在使用整数范围的完整范围,则在框1818处,cnn加速器1300确定整数比特数是否大于12。例如,dpe配置优化器1304确定累加器604的整数比特数是否高于12个整数比特的最小门限值,并且如果不是,则将整数比特数增加到至少等于最小门限值的值。替代地,最小门限值可以是整数比特的任何其他数量。

如果在框1818处,示例cnn加速器1300确定整数比特数不大于12,则控制前进到框1822,以通过将整数比特数增加1并将小数比特减少1来调整累加器的定点格式。例如,dpe配置优化器1304可以通过增加整数比特数来增加累加器604的范围,但是可以通过减少小数比特数来降低累加器604的精度。响应于调整定点格式,控制前进到框1824,以将相加结果与定点格式对齐并指派给累加器。

如果在框1818处,示例cnn加速器1300确定整数比特数大于12,则在框1820处,cnn加速器1300通过将整数比特数减少1并且将小数比特增加1来调整定点格式。例如,dpe配置优化器1304可以通过减少整数比特数来减小累加器604的范围,但是通过增加小数比特数来增加累加器604的精度。

响应于在框1820处调整定点格式,控制前进到框1824以将相加结果与定点格式对齐并指派给累加器。例如,dpe配置优化器1304可以将相加结果与更新的定点格式对齐,并将更新后的定点格式指派给累加器604。响应于将相加结果与定点格式对齐并指派给累加器,图18的示例机器可读指令1800结束。

图19是示例处理器平台1900的框图,所述示例处理器平台1900被构造为执行图14-18的指令以实现图13的cnn加速器1300。处理器平台1900可以是例如服务器、个人计算机、工作站、自学习机(例如,神经网络)、移动设备(例如,手机、智能电话、诸如ipadtm之类的平板电脑)、个人数字助理(pda)、因特网设备、dvd播放器、cd播放器、数字录像机、蓝光播放器、游戏控制台、个人录像机、机顶盒、耳机或其他可穿戴设备或任何其他类型的计算设备。

所示示例的处理器平台1900包括处理器1912。所示示例的处理器1912是硬件。例如,处理器1912可以由来自任何期望的族或制造商的一个或多个集成电路、逻辑电路、微处理器、gpu、dsp或控制器来实现。硬件处理器可以是基于半导体(例如,基于硅)的设备。在该示例中,处理器1912实现图13的示例cnn加速器1300、示例dpe库存引擎1302、示例dpe配置优化器1304、示例模式选择器1306、示例卷积引擎1308、示例池化引擎1310以及示例全连接引擎1312。

所示示例的处理器1912包括本地存储器1913(例如,高速缓存)。所示示例的处理器1912经由总线1918与包括易失性存储器1914和非易失性存储器1916的主存储器通信。易失性存储器1914可以由同步动态随机存取存储器(sdram)、动态随机存取存储器(dram)、动态随机存取存储器和/或任何其他类型的随机存取存储器设备实现。非易失性存储器1916可以由闪存和/或任何其他期望类型的存储设备来实现。对主存储器1914、1916的访问由存储器控制器控制。

所示示例的处理器平台1900还包括接口电路1920。接口电路1920可以通过任何类型的接口标准来实现,例如以太网接口、通用串行总线(usb)、接口、近场通信(nfc)接口和/或pciexpress接口。

在所示示例中,一个或多个输入设备1922连接到接口电路1920。输入设备1922允许用户将数据和/或命令录入到处理器1912中。输入设备1922可以通过例如音频传感器、麦克风、相机(静态或视频)、键盘、按钮、鼠标、触摸屏、触控板、轨迹球、等点设备实现和/或语音识别系统来实现。

一个或多个输出设备1924也连接到所示示例的接口电路1920。输出设备1924可以例如由显示设备(例如,发光二极管(led)、有机发光二极管(oled)、液晶显示器(lcd)、阴极射线管显示器(crt)、就地开关(ips)显示器、触摸屏等)、触觉输出设备、打印机和/或扬声器实现。因此,所示示例的接口电路1920通常包括图形驱动程序卡、图形驱动程序芯片和/或图形驱动程序处理器。

所示示例的接口电路1920还包括通信设备,例如发射机、接收机、收发机、调制解调器、住宅网关、无线接入点和/或网络接口,以促进经由网络1926与外部机器(例如,任何种类的计算设备)的数据交换。通信可以经由例如以太网连接、数字用户线(dsl)连接、电话线连接、同轴电缆系统、卫星系统、现场线无线系统、蜂窝电话系统等。

所示示例的处理器平台1900还包括一个或多个用于存储软件和/或数据的大容量存储设备1928。这样的大容量存储设备1928的示例包括软盘驱动器、硬盘驱动器、光盘驱动器、蓝光盘驱动器、独立磁盘冗余阵列(raid)系统和数字多功能盘(dvd)驱动器。

图14-18的机器可执行指令1932可以被存储在大容量存储设备1928中、在易失性存储器1914中、在非易失性存储器1916中和/或在可移动非暂时性计算机可读存储介质(例如,cd或dvd)上。

根据前述内容,将理解的是,已经公开了示例系统、方法、装置和制造品,其改善了卷积神经网络的卷积效率。本文公开的示例通过将多个输入通道与多个滤波器进行卷积以实质上并行地和/或实质上同时生成输出通道的多个输出位置来加速卷积运算。本文公开的示例通过基于操作模式或卷积布置中的至少一个为输入图像数据和滤波器系数配置存储实例来提供增强的卷积效率。本文公开的示例通过在卷积运算期间仅访问一次输入通道的输入位置来最小化和/或减少cnn加速器内的数据移动,来以降低的功率提供改进的卷积运算。

示例1包括一种用于提高卷积效率的装置,所述装置包括:数据处理元件(dpe)库存引擎,其用于识别被包括在dpe阵列中的平台可用的dpe;模式选择器,其用于确定所述dpe中的所识别的dpe的卷积布置;dpe配置优化器,其用于基于所述dpe中的所识别的dpe来确定dpe利用率;以及卷积引擎,其用于当所述dpe利用率满足dpe利用率门限时,使用所述dpe中的所识别的dpe来促进卷积运算。

示例2包括示例1的装置,其中,所述卷积引擎用于:将(a)输入通道的输入位置的激活值与(b)与所述输入位置相对应的滤波器系数相乘以生成卷积输出;以及计算所述卷积输出的总和,以生成输出通道的输出位置。

示例3包括示例2的装置,其中,所述输出位置是第一输出位置,并且所述卷积引擎用于:计算包括包含所述第一输出位置在内的输出位置的池区域;以及计算所述池区域的平均值或最大值中的至少一个。

示例4包括示例3的装置,其中,所述卷积引擎用于对所述池区域的至少一个平均值或最大值执行偏置操作、缩放操作、参数整流器线性单元操作或整流器线性单元操作中的至少一个。

示例5包括示例1的装置,其中,所述卷积布置是第一卷积布置,并且所述dpe利用率是第一dpe利用率,并且所述dpe配置优化器用于:比较所述第一dpe利用率和所述dpe利用率门限;当所述第一dpe利用率不满足所述dpe利用率门限时,阻止对所述卷积运算的所述促进;将与第二卷积布置相关联的第二dpe利用率与所述dpe利用率门限进行比较;以及所述卷积引擎用于当所述第二dpe利用率基于所述比较满足所述dpe利用率门限时,使用所述第二卷积布置来促进所述卷积运算。

示例6包括示例1的装置,其中,所述dpe阵列包括256个dpe。

示例7包括示例1的装置,其中,所述卷积布置是1*256、2*128、4*64、8*32或16*16卷积布置中的至少一个。

示例8包括示例1的装置,其中,所述卷积引擎使用所述dpe中的所识别的dpe来实质上并行地促进所述卷积运算。

示例9包括示例1的装置,其中,所述卷积引擎通过调整累加器的整数比特数以修改所述累加器的范围或调整所述累加器的小数比特数以修改所述累加器的精度中的至少一个来促进所述卷积运算。

示例10包括一种非暂时性计算机可读存储介质,其包括指令,所述指令当被执行时使机器至少执行以下步骤:识别被包括在数据处理元件(dpe)阵列中的平台可用的dpe;确定所述dpe中的所识别的dpe的卷积布置;基于所述dpe中的所识别的dpe来确定dpe利用率;以及当所述dpe利用率满足dpe利用率门限时,使用所述dpe中的所识别的dpe来促进卷积运算。

示例11包括示例10的非暂时性计算机可读存储介质,其还包括指令,所述指令当被执行时使所述机器至少执行以下步骤:将(a)输入通道的输入位置的激活值与(b)与所述输入位置相对应的滤波器系数相乘以生成卷积输出;以及计算所述卷积输出的总和,以生成输出通道的输出位置。

示例12包括示例11的非暂时性计算机可读存储介质,其中,所述输出位置是第一输出位置,并且还包括指令,所述指令当被执行时使所述机器至少执行以下步骤:计算包括包含所述第一输出位置在内的输出位置的池区域;以及计算所述池区域的平均值或最大值中的至少一个。

示例13包括示例11的非暂时性计算机可读存储介质,还包括指令,所述指令当被执行时,使所述机器至少对所述池区域的至少一个平均值或最大值执行偏置操作、缩放操作、参数整流器线性单元操作或整流器线性单元操作中的至少一个。

示例14包括示例10的非暂时性计算机可读存储介质,其中,所述卷积布置是第一卷积布置,并且所述dpe利用率是第一dpe利用率,并且还包括指令,所述指令当被执行时使所述机器至少执行以下操作:比较所述第一dpe利用率和所述dpe利用率门限;当所述第一dpe利用率不满足所述dpe利用率门限时,阻止对所述卷积运算的所述促进;将与第二卷积布置相关联的第二dpe利用率与所述dpe利用率门限进行比较;以及当所述第二dpe利用率基于所述比较满足所述dpe利用率门限时,使用所述第二卷积布置来促进所述卷积运算。

示例15包括示例10的非暂时性计算机可读存储介质,其中,所述dpe阵列包括256个dpe。

示例16包括示例10的非暂时性计算机可读存储介质,其中,所述卷积布置是1*256、2*128、4*64、8*32或16*16卷积布置中的至少一个。

示例17包括示例10的非暂时性计算机可读存储介质,其中,所述dpe中的所识别的dpe实质上并行地促进所述卷积。

示例18包括示例10的非暂时性计算机可读存储介质,还包括指令,所述指令当被执行时使所述机器至少调整累加器的整数比特数以修改所述累加器的范围或调整所述累加器的小数比特数以修改所述累加器的精度。

示例19包括一种用于提高卷积效率的方法,所述方法包括:识别被包括在数据处理元件(dpe)阵列中的平台可用的dpe;确定所述dpe中的所识别的dpe的卷积布置;基于所述dpe中的所识别的dpe来确定dpe利用率;以及当所述dpe利用率满足dpe利用率门限时,使用所述dpe中的所识别的dpe来促进卷积运算。

示例20包括示例19的方法,还包括:将(a)输入通道的输入位置的激活值与(b)与所述输入位置相对应的滤波器系数相乘以生成卷积输出;以及计算所述卷积输出的总和,以生成输出通道的输出位置。

示例21包括示例20的方法,其中,所述输出位置是第一输出位置,还包括:计算包括包含所述第一输出位置在内的输出位置的池区域;以及计算所述池区域的平均值或最大值中的至少一个。

示例22包括示例21的方法,还包括对所述池区域的至少一个平均值或最大值执行偏置操作、缩放操作、参数整流器线性单元操作或整流器线性单元操作中的至少一个。

示例23包括示例19的方法,其中,所述卷积布置是第一卷积布置,并且所述dpe利用率是第一dpe利用率,并且还包括:比较所述第一dpe利用率和所述dpe利用率门限;当所述第一dpe利用率不满足所述dpe利用率门限时,阻止对所述卷积运算的所述促进;将与第二卷积布置相关联的第二dpe利用率与所述dpe利用率门限进行比较;以及当所述第二dpe利用率基于所述比较满足所述dpe利用率门限时,使用所述第二卷积布置来促进所述卷积运算。

示例24包括示例19的方法,其中,所述dpe阵列包括256个dpe。

示例25包括示例19的方法,其中,所述卷积布置是1*256、2*128、4*64、8*32或16*16卷积布置中的至少一个。

示例26包括示例19的方法,其中,所述dpe中的所识别的dpe实质上并行地促进所述卷积。

示例27包括示例19的方法,其中,促进所述卷积运算包括调整累加器的整数比特数以修改所述累加器的范围或调整所述累加器的小数比特数以修改所述累加器的精度中的至少一个。

示例28包括一种用于提高卷积效率的装置,该装置包括:用于识别被包括在dpe阵列中的平台可用的dpe的第一单元;用于确定所述dpe中的所识别的dpe的卷积布置的第二单元;用于基于所述dpe中的所识别的dpe来确定dpe利用率的第三单元;以及用于当所述dpe利用率满足dpe利用率门限时使用所述dpe中的所识别的dpe来促进卷积运算的第四单元。

示例29包括示例28的装置,其中,所述第四单元用于:将(a)输入通道的输入位置的激活值与(b)与所述输入位置相对应的滤波器系数相乘以生成卷积输出;以及计算所述卷积输出的总和,以生成输出通道的输出位置。

示例30包括示例29的装置,其中,所述输出位置是第一输出位置,并且所述第四单元用于:计算包括包含所述第一输出位置在内的输出位置的池区域;以及计算所述池区域的平均值或最大值中的至少一个。

示例31包括示例30的装置,其中,所述第四单元用于对所述池区域的至少一个平均值或最大值执行偏置操作、缩放操作、参数整流器线性单元操作或整流器线性单元操作中的至少一个。

示例32包括示例28的装置,其中,所述卷积布置是第一卷积布置,并且所述dpe利用率是第一dpe利用率,并且所述第三单元用于:比较所述第一dpe利用率和所述dpe利用率门限;当所述第一dpe利用率不满足所述dpe利用率门限时,阻止对所述卷积运算的所述促进;将与第二卷积布置相关联的第二dpe利用率与所述dpe利用率门限进行比较;以及所述第四单元用于当所述第二dpe利用率基于所述比较满足所述dpe利用率门限时,使用所述第二卷积布置来促进所述卷积运算。

示例33包括示例28的装置,其中,所述dpe阵列包括256个dpe。

示例34包括示例28的装置,其中,所述卷积布置是1*256、2*128、4*64、8*32或16*16卷积布置中的至少一个。

示例35包括示例28的装置,其中,所述第四单元使用所述dpe中的所识别的dpe来实质上并行地促进所述卷积运算。

示例36包括示例28的装置,其中,所述第四单元通过调整累加器的整数比特数以修改所述累加器的范围或调整所述累加器的小数比特数以修改所述累加器的精度中的至少一个来促进所述卷积运算。

本文公开的示例可以应用于通过链路耦合到相应网关的物联网(iot)网络。物联网(iot)是其中大量计算设备彼此互连并互连到因特网以提供非常低级别的功能和数据采集的概念。因此,如本文中所使用的,iot设备可以包括半自治设备,其与其他iot设备和更广泛的网络(例如,因特网)通信来执行诸如感测或控制等的功能。

通常,iot设备在存储器、大小或功能上受到限制,从而允许以与较小数量的较大设备相似的成本部署较大数量的iot设备。然而,iot设备可以是智能电话、笔记本电脑、平板电脑或pc,或其他更大的设备。此外,iot设备可以是虚拟设备,例如智能电话或其他计算设备上的应用。iot设备可以包括iot网关,用于将iot设备耦合到其他iot设备和云应用,以用于数据存储、过程控制等。

iot设备的网络可以包括商业和家庭自动化设备,例如水分配系统、电力分配系统、管道控制系统、工厂控制系统、电灯开关、恒温器、锁、相机、警报器、运动传感器等等。iot设备可以是可通过远程计算机、服务器和其他系统来访问的,例如以控制系统或访问数据。

因特网和类似网络的未来发展可以涉及非常大量的iot设备。因此,在本文讨论的技术的上下文中,这种未来联网的许多创新将解决所有这些层不受阻碍地增长的需求,以发现并制造可访问的连接资源并且支持用于隐藏和分隔连接的资源的能力。可以使用任何数量的网络协议和通信标准,其中,每种协议和标准被设计为解决特定目标。此外,协议是支持人类可访问服务的结构的一部分,其无论位置、时间或空间如何都操作。创新包括服务提供和相关联的基础架构,例如硬件和软件;安全增强;以及基于在服务级别和服务提供协议中指定的服务质量(qos)条款提供服务。

骨干链路可以包括任何数量的有线或无线技术,包括光网络,并且可以是局域网(lan)、广域网(wan)或因特网的一部分。此外,这样的通信链路可以促进iot设备和网关二者之间的光信号路径,包括使用促进各种设备的互连的muxing/demuxing组件。

网络拓扑可以包括任何数量的类型的iot网络,例如使用蓝牙低功耗(ble)链路用网络提供的网状网络。可以存在的其他类型的iot网络包括用于通过ieee802.11链路与iot设备进行通信的无线局域网(wlan)网络、用于通过lte/lte-a(4g)或5g蜂窝网络与iot设备进行通信的蜂窝网络、以及低功率广域(lpwa)网络,例如与由lora联盟颁布的lorawan规范兼容的lpwa网络、或与因特网工程任务组(ietf)颁布的规范兼容的低功耗广域网(lpwan)网络上的ipv6。此外,相应iot网络可以使用任何数量的通信链路(例如,lte蜂窝链路、lpwa链路或基于ieee802.15标准(例如,)的链路)与外部网络提供商(例如,第2层或第3层提供商)进行通信。相应iot网络还可以使用诸如约束应用协议(coap)之类的各种网络和因特网应用协议来操作。相应iot网络也可以与协调器设备集成在一起,所述协调器设备提供形成链接设备和网络的群集树的链路链。

这些iot网络中的每一个都可以为诸如本文所述的技术特征之类的新技术特征提供机会。改进的技术和网络可以实现设备和网络的指数增长,包括将iot网络用作雾设备或系统。随着此类改进技术的使用不断增长,可以开发iot网络以进行自我管理、功能演进和协作,而无需直接的人工干预。改进的技术甚至可以使iot网络能够在没有集中控制的系统的情况下运行。因此,本文所描述的改进技术可以被用于自动化和增强远远超出当前实施方式的网络管理和操作功能。

在示例中,可以通过用于认证、授权和计费(aaa)的分散系统来保护iot设备之间的通信,例如骨干链路上的通信。在分散的aaa系统中,可以跨互连的异构网络基础结构实现分布式支付、信用、审计、授权和认证系统。这允许系统和网络能够朝着自主操作的方向发展。在这些类型的自主操作中,机器甚至可能签约人力资源并与其他机器网络协商伙伴关系。这可以允许实现共同的目标,并且针对概述的计划的服务水平协议来平衡服务提供,并且实现提供计量、测量、可追溯性和可追踪性的解决方案。新的供应链结构和方法的创建可以使得在人工干预的情况下创建多种服务、挖掘多种服务的价值并且使多种服务折叠。

通过将诸如声音、光、电子交通、面部和模式识别、气味、振动之类的感测技术集成到iot设备之间的自主组织中,可以进一步增强这样的iot网络。感测系统的集成可以允许针对合同服务目标、业务流程和基于服务质量(qos)的群集和资源融合进行系统、自主的通信和服务提供协调。

物联网设备的集群可以被配备为与其他物联网设备以及云网络通信。这可以允许iot设备在设备之间形成自组织网络,从而允许它们充当单个设备,其可以称为雾设备。

与iot设备的网状网络通信的云计算网络可以在云计算网络的边缘处充当雾设备。物联网设备的网状网络可以称为雾,在云的边缘处操作。

雾可以被认为是大规模互连的网络,其中,许多iot设备例如通过无线电链路彼此通信。作为示例,可以使用由开放连接基金会tm(ocf)发布的互连规范来促进该互连网络。该标准允许设备发现彼此并建立用于互连的通信。也可以使用其他互连协议,包括例如优化的链路状态路由(olsr)协议、对于移动自组网(b.a.t.m.a.n.)路由协议更好的方式或oma轻量级m2m(lwm2m)协议等。

三种类型的iot设备包括网关、数据聚合器和传感器,但是可以使用iot设备和功能的任何组合。网关可以是提供云和雾之间的通信的边缘设备,并且还可以为从传感器获得的数据提供后端处理功能,例如运动数据、流量数据、温度数据等。数据聚合器可以从任何数量的传感器收集数据,并执行后端处理功能以进行分析。结果、原始数据或二者可以通过网关传递到云。传感器可以是完整的iot设备,例如既能够收集数据又能够处理数据。在一些情况下,传感器的功能可能会受到更多限制,例如收集数据并允许数据聚合器或网关处理数据。

来自任何iot设备的通信可以沿着任何iot设备之间的便利路径(例如,最便利的路径)传递以到达网关。在这些网络中,互连的数量提供了大量的冗余,以允许即使丢失了许多iot设备,也可以保持通信。此外,由于连接到另一iot设备的距离可能比连接到网关的距离小得多,因此使用网状网络可以允许使用功率非常低或与基础设施相距较远的iot设备。

从这些iot设备提供的雾可以作为位于云边缘处的单个设备(例如,雾设备)呈现给云中的设备(例如,服务器)。在该示例中,来自雾设备的警报可以被发送而没有被识别为来自雾内的特定iot设备。以这种方式,雾可以被认为是分布式平台,其提供计算和存储资源以执行处理或数据密集型任务,例如数据分析、数据聚合和机器学习等。

在一些示例中,可以使用命令式编程样式来配置iot设备,例如其中每个iot设备具有特定功能和通信伙伴。然而,可以以声明性编程样式配置形成雾设备的iot设备,从而允许iot设备重新配置其操作和通信,例如响应于条件、查询和设备故障来确定所需的资源。作为示例,来自位于服务器处的用户的关于由iot设备监测的设备的子集的操作的查询可以导致雾设替代择回答该查询所需的iot设备,例如特定传感器。来自这些传感器的数据然后可以由传感器、数据聚合器或网关的任意组合进行聚合和分析,然后再由雾设备发送到服务器以回答查询。在此示例中,雾中的iot设备可以基于查询来选择使用的传感器,例如添加来自流量传感器或温度传感器的数据。此外,如果一些iot设备无法操作,则雾设备中的其他iot设备可以提供类似数据(如果可用的话)。

尽管本文已经公开了一些示例系统、方法、装置和制品,但是本专利的覆盖范围不限于此。相反,本专利覆盖了完全落入本专利权利要求范围内的所有系统、方法、装置和制品。

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