针对二维阵列处理器的性能增强的制作方法

文档序号:14034011阅读:162来源:国知局
针对二维阵列处理器的性能增强的制作方法

本申请要求于2015年7月23日提交的题为“mireplicavisual-processingarchitecture:convolutionalneuralnetworks”的申请号为62/195,921的美国临时申请的优先权,该申请的整体通过引用并入在此,并为了如在此完全和全面阐述的所有目的。



背景技术:

许多应用程序涉及二维数据集合。视觉处理应用程序就是一个示例。在此使用的术语“视觉处理”涉及图像和视频图片元素(“像素”)和相关数据的一般处理类别。这包括诸如增强图像和转换像素格式、运动检测和跟踪,以及识别静止图像或视频帧中的特征或对象的应用程序。涉及可以以二维集合表示的数据的其它应用程序包括物理量(诸如力或电磁场)的建模。在一些情况下,三维数据集合可以以二维表示,诸如通过投影或变换到二维平面中,或者作为多个相邻的二维数据集合。

卷积神经网络包含大量的检测和分类算法。近来,二维(2d)卷积神经网络(cnn)由于其对大量图像对象的检测和分类的能力而受到广泛关注。cnn具有许多不同的配置,但该配置由基本元素组成,其通过调节网络参数和互连拓扑结构而允许网络“受训练”以识别对象,以实现高水平的检测可靠性,在现有实施方式中通常为超过90%。

cnn通常被分类为“深度”神经网络,通常具有四层或更多层。cnn的“卷积”层通常具有比输入更多的输出值,输出进而成为下一个卷积层的输入。如下面进一步讨论的,由此产生的运算的数量非常大,并且对一个输入图像帧执行检测处理所需的时钟周期的数量可以容易地在十亿的量级上。对于许多应用程序来说,实时图像识别是期望的,诸如自动操作车辆的签名读取或在安全情况下的面部识别。因此,检测速度的提高可以极大地提高这种图像识别应用程序的性能和能力。

附图说明

以下对各种公开实施例的详细描述参考了附图,在附图中:

图1是示出示例性卷积神经网络的某些方面的简化框图;

图2是示出在卷积神经网络中的卷积运算的图;

图3是示出与单个像素相关联的检测输出所依赖的图像、信号、权重和偏置元素的数量的图;

图4是示出瓦片(tile)处理器数据流实施方式的某些方面的简化框图;

图5是示出针对在示例性cnn检测处理的操作期间执行的数据请求的延迟的直方图;

图6是示出在一些实施例中与在此描述的瓦片处理器一起使用的指令生成单元的实施例的某些方面的简化框图;

图7是示出在卷积神经网络中的示例性子采样(subsampling)操作的图;

图8是示出示例性卷积神经网络中的子采样操作导致的数据矢量宽度的图;

图9是示出在采用子采样执行示例性卷积神经网络期间的瓦片处理器数据存储器存储的图;

图10是示出提供示例性卷积神经网络的改进的并行性(parallelism)和更快的执行的数据重组方案的图;

图11是示出在执行采用子采样和矢量级联(vectorconcatenation)的示例性卷积神经网络期间的瓦片处理器数据存储器存储的图;

图12是示出在不存在数据重组方案的情况下对示例性卷积运算的行和列输入的图;

图13是示出使用数据重组方案的示例性卷积运算的行和列输入的图;

图14是示出作为数据重组方案的一部分的数据的输入置乱(shuffling)的图;

图15是示出作为数据重组方案的一部分的数据的输入置乱的图;

图16是示出针对在利用数据重组的示例性cnn检测处理的操作期间执行的数据请求的延迟的直方图;

图17是示出用于示例性卷积神经网络的交错数据重组方案的图;

图18是示出作为数据重组方案的一部分的数据的输入置乱的图;以及

图19是示出针对在利用交错数据重组方案的示例性cnn检测处理的操作期间执行的数据请求的延迟的直方图。

具体实施方式

概述

公开了用于增加对二维阵列中的数据的处理操作的速度以及用于检测图像中的特征的方法和系统。用于检测二维图像中的特征的处理器实现的方法的实施例包括在并行处理系统内的一组数据存储器中存储表示第一图像的像素的第一图像数据。并行处理系统包括通过指令流水线连接的一行多个基本上相同的数据处理器,其中指令流水线适于轮流将来自多个数据处理器中的第一数据处理器的指令依次传送到每一个相邻数据处理器。数据处理器中的每一个包括第一图像数据存储在其中的一组数据存储器中的相应数据存储器。另外,数据存储器中的每一个被分区为包括具有基本上相同的存储容量的多个存储器区域,并且存储第一图像数据包括将表示第一图像的相继垂直切片的数据存储在并行处理系统的数据存储器的相应的相邻存储器区域中。

该方法的该实施例继续在耦接到并行处理系统的主机处理器的存储器中存储特征内核数据,该特征内核数据包括表示一组权重矩阵的权重数据。该方法进一步包括对于第一图像内的多个选择像素中的每一个,在包括选择像素的二维像素区域上执行一组卷积,并且将非线性函数应用于每一个卷积的结果以产生与选择像素对应的特征映射图像素(featuremappixel)。使用该组权重矩阵中的相应一个权重矩阵执行该组卷积中的每一个卷积,并且对于权重矩阵中的每一个产生特征映射图像素。该方法继续对于权重矩阵中每一个存储包括所有特征映射图像素的特征映射图,其中存储特征映射图包括将表示特征映射图的单独像素的数据存储在并行处理系统的数据存储器的相应的单独存储器区域中。对于特征映射图的每一个像素,将表示来自使用所有权重矩阵产生的特征映射图中的每一个特征映射图的对应像素的数据存储在相同的存储器区域中。该方法的该实施例进一步包括处理特征映射图以产生关于在第一图像内是否检测到特定特征或特征类别的决定。

在上述方法的另一实施例中,特征内核数据进一步包括偏差数据,该偏差数据表示与该组权重矩阵中的每一个权重矩阵相关联的偏差值,并且使用与该组权重矩阵中的相应一个权重矩阵相关联的偏差值执行该组卷积中的每一个卷积。在实施例中,对于多个选择像素中的每一个执行所述一组卷积包括在并行处理系统的相邻数据处理器中依次执行用于执行该组卷积的指令。在另一实施例中,在并行处理系统的相邻数据处理器中依次执行指令的单个迭代包括对于第一图像的一个水平行内的所有选择像素执行该组卷积。

在该方法的另一实施例中,多个选择像素由在第一图像内的水平和垂直方向中由通过整数子采样因数n定义的多个像素间隔开的像素组成。在另一实施例中,依次执行并行处理系统的相邻数据处理器中的指令的单个迭代包括对于第一图像的n个水平行内的所有选择像素执行该组卷积,其中n个水平行是间隔开n个像素的一系列水平行内的相邻行。

在另一实施例中,存储特征映射图同样包括在相邻数据处理器中依次执行指令的单个迭代期间,将与第一图像的n个水平行的最高行中的选择像素对应的特征映射图像素存储在并行处理系统内的数据处理器的第一组相邻存储器区域中,其中第一组相邻存储器区域位于最靠近并行处理系统的指令流水线的开始的数据处理器中。在该实施例中,存储特征映射图同样包括在相邻数据处理器中依次执行指令的单个迭代期间,将与第一图像的n个水平行的下一较低行中的选择像素对应的特征映射图像素存储在与第一组相邻存储器区域相邻的下一组相邻存储器区域中,其中下一组相邻存储器区域位于进一步沿着并行处理系统的指令流水线定位的数据处理器中。该实施例同样包括在相邻数据处理器中依次执行指令的单个迭代期间,将与n个水平行的任何附加的较低行中的选择像素对应的特征映射图像素存储在进一步沿着并行处理系统的指令流水线定位的数据处理器中的相继组的相邻存储器区域中。

在另一实施例中,存储特征图包括在相邻数据处理器中依次执行指令的单个迭代期间,以从n个水平行的最高行到最低行的顺序,将与n个水平行中的每一个水平行中的第一选择像素对应的第一系列的n个特征映射图像素中的每一个特征映射图像素存储在并行处理系统中的数据处理器的相应的相邻存储器区域中。这些特征映射图像素存储在存储器区域中,从位于最靠近并行处理系统的指令流水线的开始的数据处理器的第一存储器区域开始。在该实施例中,存储特征图同样包括在相邻数据处理器中依次执行指令的单个迭代期间,以从n个水平行的最高行到最低行的顺序,将与n个水平行中的每一个水平行中的第二选择像素对应的第二系列的n个特征映射图像素中的每一个特征映射图像素存储在并行处理系统中的数据处理器的相应的相邻存储器区域中。此外,存储特征图包括在相邻数据处理器中依次执行指令的单个迭代期间,以从n个水平行的最高行到最低行的顺序,将与n个水平行中的每一个水平行中的附加选择像素对应的任何附加系列的n个特征映射图像素中的每一个特征映射图像素存储在并行处理系统中的数据处理器的相应的相邻存储器区域中,从紧接着存储先前系列的特征映射图像素中的最后特征映射图像素的存储器区域的存储器区域开始。

在用于检测二维图像中的特征的方法的实施例中,处理特征映射图以产生决定包括重新排列表示特征映射图像素的存储数据,使得表示与第一图像中具有相同水平位置的选择像素对应的特征映射图像素的数据全部存储在并行处理系统中的数据处理器的相同存储器区域内。在该实施例中,处理特征映射图同样包括对于每一个特征映射图内的多个选择特征映射图像素中的每一个,随后在包括选择特征映射图像素的二维特征映射图像素区域上执行附加的一组卷积,其中使用存储在主机处理器的存储器中的附加一组权重矩阵中的相应一个权重矩阵来执行附加一组卷积中的每一个卷积。在另一实施例中,第一图像构成较大图像的水平切片,以及该方法进一步包括,在完成表示第一图像的最高行的第一图像数据的一组卷积之后,用表示刚好预先包括在第一图像中的较大图像的最低行下面的较大图像的一行的数据覆写表示第一图像的最高行的第一图像数据。

用于检测二维图像中的特征的数据处理系统的实施例包括:一行基本上相同的数据处理器,其中数据处理器通过指令流水线连接,该指令流水线适于轮流将来自多个数据处理器中的第一数据处理器的指令依次传送到每一个相邻数据处理器,以及数据处理器中的每一个数据处理器包括数据存储器,该数据存储器被分区为包括基本上相同的存储容量的多个存储器区域。数据处理系统的该实施例进一步包括耦接到该行的数据处理器的主机处理器,其中主机处理器包括数据存储器,其适于存储特征内核数据,该特征内核数据包括表示一组权重矩阵的权重数据和表示一组权重矩阵内的每一个权重矩阵的偏差值的偏差数据。该主机处理器进一步包括控制模块,该控制模块适于提取并提供给指令流水线由多个数据处理器执行的指令;以及存储的程序指令,其在被提供给指令流水线并由该行的数据处理器执行时可被操作以实现上述用于检测二维图像中的特征的方法的某些步骤。

在数据处理系统的进一步实施例中,控制模块包括耦接到主机处理器和该行的数据处理器的指令生成单元。指令生成单元适于提供主机处理器与该行的数据处理器之间的接口,并将从主机处理器接收到的定制编译器指令翻译为可由该行的数据处理器中的数据处理器执行的指令。

用于增加对二维阵列中的数据的处理操作的速度的处理器实现的方法的实施例包括在并行处理系统内的一组数据存储器中存储表示第一阵列的元素的第一阵列数据。并行处理系统包括由指令流水线连接的一行多个基本上相同的数据处理器,该指令流水线适于轮流将来自多个数据处理器中的第一数据处理器的指令依次传送到每一个相邻的数据处理器。数据处理器中的每一个包括该组数据存储器中的相应一个数据存储器,并且数据存储器种的每一个被分区为包括具有基本上相同的存储容量的多个存储器区域。在该方法的实施例中,存储第一阵列数据包括将表示第一阵列的相继列的数据存储在并行处理系统的数据存储器的相应的相邻存储器区域中。

用于增加处理操作的速度的方法进一步包括,对于第一阵列内的多个选择元素中的每一个,对选择元素执行处理操作以产生与选择元素对应的输出元素。在该实施例中,多个选择元素由在第一阵列内的水平和垂直方向中由通过整数子采样因数n定义的多个元素间隔开的元素组成。对于多个选择元素中的每一个选择元素执行处理操作包括在并行处理系统的相邻数据处理器中依次执行用于执行处理操作的指令,并且在并行处理系统的相邻数据处理器中依次执行指令的单个迭代包括对于第一阵列的n个水平行内的所有选择元素执行处理操作,其中n个水平行是间隔开n个元素的一系列水平行内的相邻行。该方法进一步包括存储包括所有输出元素的输出阵列,其中存储输出阵列包括将表示输出阵列的单独元素的数据存储在并行处理系统的数据存储器的相应单独存储器区域中。

在用于增加处理操作的速度的方法的另一实施例中,执行处理操作包括在包括选择元素的二维元素区域上执行一个或多个卷积,并且使用存储在耦接到并行处理系统的主机处理器的数据存储器中的系数矩阵执行一个或多个卷积中的每一个。

在用于增加处理操作的速度的方法的另一实施例中,存储输出阵列进一步包括在相邻数据处理器中依次执行指令的单个迭代期间,将与第一阵列的n个水平行中的最高行的选择元素对应的输出元素存储在并行处理系统内的数据处理器的第一组相邻存储器区域中。第一组相邻存储器区域在位于最靠近并行处理系统的指令流水线的开始的数据处理器中。在该实施例中,存储输出阵列进一步包括在相邻数据处理器中依次执行指令的单个迭代期间,将与第一阵列的n个水平行中的下一较低行中选择元素对应的输出元素存储在与第一组相邻存储器区域相邻的下一组相邻存储器区域中。下一组相邻存储器区域位于进一步沿着并行处理系统的指令流水线定位的数据处理器中。存储输出阵列同样包括在相邻数据处理器中依次执行指令的单个迭代期间,将与n个水平行中的任何附加较低行中的选择元素对应的输出元素存储在进一步沿着并行处理系统的指令流水线定位的数据处理器中的相继组的相邻存储器区域中。

在该方法的另一实施例中,存储输出阵列进一步包括,在相邻数据处理器中依次执行指令的单个迭代期间,以从n个水平行的最高行到最低行的顺序,将与n个水平行中的每一个水平行中的第一选择元素对应的第一系列的n个输出元素中的每一个输出元素存储在并行处理系统中的数据处理器的相应的相邻存储器区域中。输出元素存储在存储器区域中,从位于最靠近并行处理系统的指令流水线的开始的数据处理器的第一存储器区域开始。在该实施例中,存储输出阵列进一步包括,在相邻数据处理器中依次执行指令的单个迭代期间,以从n个水平行的最高行到最低行的顺序,将与n个水平行中的每一个水平行中的第二选择元素对应的第二系列的n个输出元素中的每一个输出元素存储在并行处理系统中的数据处理器的相应的相邻存储器区域中。这些输出元素存储在存储器区域中,从紧接着存储第一系列的输出元素中的最后输出元素的存储器区域的存储器区域开始。存储输出阵列同样包括,在相邻数据处理器中依次执行指令的单个迭代期间,以从n个水平行的最高行到最低行的顺序,将与n个水平行中的每一个水平行中的附加选择元素对应的任何附加系列的n个输出元素中的每一个输出元素存储在并行处理系统中的数据处理器的相应的相邻存储器区域中。这些输出元素存储在存储器区域中,从紧接着存储在先前系列的输出元素中的最后输出元素的存储器区域的存储器区域开始。

在另一实施例中,用于增加处理操作的速度的方法进一步包括重新排列表示输出元素的存储数据,使得表示来自输出阵列的相同列的输出元素的数据全部存储在并行处理系统中的数据处理器的相同存储器区域内,以及对于输出阵列内的多个选择输出元素中的每一个,随后对选择输出元素执行附加处理操作。

用于增加对二维阵列中的数据的处理操作的速度的数据处理系统的实施例包括一行基本上相同的数据处理器,其中数据处理器通过指令流水线连接,该指令流水线适于轮流将来自多个数据处理器中的第一个数据处理器的指令依次传送到每一个相邻的数据处理器。数据处理器中的每一个数据处理器包括数据存储器,该数据存储器被分区以包括具有基本上相同的存储容量的多个存储器区域。该系统进一步包括耦接到该行的数据处理器的主机处理器,其中主机处理器包括适于存储固定数据的数据存储器,用于处理存储在该行的数据处理器的数据存储器中的阵列数据的操作。主机处理器进一步包括控制模块,该控制模块适于提取并提供给指令流水线由多个数据处理器执行的指令,并且存储的程序指令在被提供给指令流水线并且由多个数据处理器执行时可被操作以实现上述用于增加处理操作的速度的方法的某些步骤。

在数据处理系统的另一实施例中,控制模块包括耦接到主机处理器和该行的数据处理器的指令生成单元,其中指令生成单元适于提供主机处理器和该行的数据处理器之间的接口,并将从主机处理器接收到的定制编译器指令翻译成数据处理器可执行的指令。在该系统的另一实施例中,执行处理操作包括执行包括选择元素的二维元素区域上的一个或多个卷积,以及使用存储在主机处理器的数据存储器中的系数矩阵来执行一个或多个卷积中的每一个卷积。

在此所述的方法和系统导致二维cnn实施方式的速度以及涉及子采样的二维阵列上的其它操作的实质性改进。在共同拥有的美国专利申请号13/602,958,现在的美国专利号9,183,614和美国专利申请号15/054,118中进一步解释了在此描述的新颖的瓦片处理器架构的某些方面,其中的每一个通过引用整体并入本文。与其它方法不同的是,瓦片处理器架构允许横跨图像帧的整个宽度同时进行处理,并支持整个神经网络的低延迟通信,包括大量网络参数的分配,而基本上没有通信开销(overhead)。此外,该架构为数据重组提供了机会,其使并行性超越了现有解决方案的可能性-至少是并行性的四倍的因数。在实施例中,cnn由单线程c++源程序直接实现。

cnn概述

cnn是非常计算和通信密集型的,并且在跨越并行处理元件进行分区非常困难的上下文上进行操作。图1示出了基于提供给埃因霍芬理工大学嵌入式处理器架构课程的参考代码的示例cnn的通用组件,可在https://sites.google.com/site/5kk73gpu2013/assignment/cnn(该特定示例检测和分类交通标志)上获得。神经网络100由标记为层1至层4的四个层组成。每一层使用多个特征映射图,其针对输入图像中的像素和每一个特征映射图确定由像素定义的区域(在该情况下,在其左上角处有像素的区域)与特征映射图匹配的程度。这大致类似于在每一个位置处作出这种确定的神经元,因此大致类似于术语“神经网络”。可能的特征图的示例性集合在图1中示出。24个特征映射图的集合102可以在层1中使用,40个特征映射图的集合104可以在层2中使用,并且24个特征映射图的集合106可以在图3中使用。在图1的实施例中,相继层中使用的特征映射图逐渐表示更复杂的特征。卷积神经网络中经常出现这种情况。如图1中所标记,特征映射图集合102、104和106用于识别面部。在图1中示出了适于识别其它对象的其它示例性特征映射图集合。虽然在图1中未示出,但是适于识别交通标识的类似特征映射图集合将被用于识别输入图像108,交通标识。如图1所示的特征映射图是固定数据,并且同样可以使用诸如“特征检测器”的其它术语而被引用。术语“特征映射图”同样可以用于描述由特征映射图与输入图像的比较产生的输出“图像”。

通过将图像部分与特征映射图进行的该比较作为用于对象检测的基本概念,在网络实施方式中存在多个基础操作,如图1中所示:

*子采样(图中的“samp”)。图像对象可以处于距视口(即观看位置)不同的距离,所以模式匹配必须考虑匹配特征中的距离范围。这是通过将图像在各个层处进行子采样来实现的,这将图像信息(具有一些可接受的损失)置于更密集的表示(更小的宽度和高度)中。最后一层(层4)比较所有层的摘要(summary),以指示是否在给定位置处检测到对象,并且可选地对该对象进行分类(例如,标识上指示的速度)。

*2d卷积(图中的“conv”)。这是将图像的区域与特征映射图进行匹配的基本操作。这些区域的尺寸对于任何给定的网络都是固定的,但是可以从一层到下一层以及一个网络到下一个网络变化。这是网络设计的一部分。

*非线性激活函数(图中的“actv”)。该函数确定区域与特征匹配的程度,并丢弃不具有高于特定阈值的匹配的区域(通过丢弃定义该区域的单个像素的输出,在这种情况下再次是左上像素)。可选地,它可以将更大的值分配给进一步高于阈值的输出,以强调这些位置。

*来自层1的不同特征映射图(图中的“pcnt”)的输出的部分互连。该操作考虑来自前一层的特征映射图比较的各种组合,形成关于在前一层中具有匹配的特征的更丰富的一组信息。

*来自层2的不同特征映射图(图中的“fcnt”)的输出的完全互连。这同样形成了更丰富的一组信息,但产生许多更多的组合,所以在本示例中只在层3中完成。

*最后的阈值计算(图中的“thresh”)。这总结网络在任何给定位置做出的“决定”-在该位置处是否检测到特征。在最后的卷积之后,这由大于零的一些值指示。如果这是真的,则其它卷积可用于将检测分类为特定类别的检测对象,其中该卷积的大小指示分类中的置信水平。

诸如图1的卷积神经网络中最耗时的操作是图2中所示的图像数据的2d卷积。该操作计算在给定的垂直位置y处和水平位置x处的信号输出sy,x。该图示出了6×6卷积,意味着它使用例如输入图像108内的区域202来计算输出,其中区域202是6个像素高和6个像素宽,其中x和y由左上角定义。被比较的各种特征由内核定义,该内核由偏差b和权重矩阵wm,n组成。在图2的实施例中,权重矩阵204具有表示特征映射图集合208内的特征映射图206的强度变化的36个元素wy,x。

卷积运算由以下等式定义:

卷积将图像数据与权重矩阵的相应元素的乘积相加,产生添加到偏差的单个值以产生信号。因此,卷积产生与具有输入强度值iny,x的像素的空间位置对应的输出信号值sy,x。非正式地,该操作对于像素值和权重值之间具有较高对应度的区域产生较大的信号值。例如,如果图像在权重具有较高值(同样较轻值)的相同位置处较轻,则两者的乘积具有相对大的值(并且,对于匹配的较暗区域,使用负权重来施加正偏差会导致相对大的值)。卷积和越大,匹配度越高。actv函数丢弃了具有相对弱值的卷积输出,因此它们不参与进一步的卷积层。

因为卷积横跨整个图像执行(在此描述的测试实施方式中,图像宽度为1280像素,并且高度为720像素),所以卷积在其本身上是计算强度大的。然而,这只是操作复杂性的一部分。图3示出了示例网络的单个输出具有的依赖性,从输出(“1检测”)回溯通过网络,并且考虑到所有卷积内核和互连操作(取决于组合的数量,输入集合的组合导致比输入集合更多的输出集合)。

单个输出分类取决于38,280个信号元素(“s”,包括输入图像)以及272,588个内核元素(计数偏差“b”和权重“w”二者)。注意,层2必须被重复25次以形成到层3的5×5信号输入,并且层1必须被重复36次以形成到层2的6×6信号输入,或者总共36×25=900次以形成到层3的5×5输入。输出检测在每一个输出位置处形成,每一个输出位置具有不同的数据依赖性集合。在这些依赖性中存在重叠,因为相邻的输出具有相邻的上下文集合,但每一个输出都是唯一的。

图1的示例网络(使用nvidiageforcegtx460)的传统实施方式需要大约1,400,000,000个周期来在输入图像的帧上执行。相比之下,映射到瓦片架构的一个实施例对于相同的网络需要大约32,000,000个周期,这是快几乎44倍的因数。该实施例包括层1和层2中的以2的因数进行的子采样,以及全部四层中的2d卷积。处理元素的基本数量和操作在传统实施方式和瓦片处理器实施方式之间是可比较的,但是在数据流如何实现方面存在非常大的差异-也就是图3中的数据依赖性如何得到满足。

传统的处理器解决方案实现数据流,使得信号和内核数据必须被传送到处理元件。这可以通过将数据从共享存储器移动到处理元件(在通用图形处理器中)或通过在处理元件(在“视觉处理器”中)之间明确地移动数据来实现。该移动不仅需要时间进行传送,而且还要求处理元件同步,使得传送在程序中的有意义的点处发生,这通常要求数据的来源或目的地暂停,直到到达适当的点。

相比之下,在此描述的系统和方法中,瓦片处理器阵列以在所有处理元件之间共享的方式在本地存储器中的适当地方保留所有上下文(例如,用于周围像素的图像数据),而数据移动或同步几乎没有或者没有开销。图4示出了用于在此描述的方法和系统的瓦片处理器阵列的关键方面。示出了一组四个互连的瓦片处理器401。术语“瓦片”是指帧中的像素的直线区域或二维阵列,其为4、8或16像素宽且高达256像素高。每一个处理元件或瓦片处理器在像素的唯一瓦片上操作,其中相邻瓦片映射到相邻瓦片处理器。尽管在此主要针对图像处理应用程序来描述瓦片处理,但是应当理解,所公开的实施例被认为适于涉及二维数据集合,特别是二维相关数据集合的数据处理的任何应用程序。

瓦片处理器401具有与传统处理器相同的许多组件,除了没有指令存储器和没有指令提取逻辑的显著例外。图4的描述旨在示出瓦片处理器401的非传统组件,并且描绘多个瓦片处理器401的分组。瓦片处理器401的组件的布置可能不反映组件之间的所有互连。除了在此另有说明外,瓦片处理器401包括传统处理器(包括例如电源)的组件,其以本领域已知的传统处理器的方式互连。代替使用传统的指令存储器和指令提取逻辑,瓦片处理器401使用由控制模块提取并使用由串行指令缓冲器或i缓冲器、寄存器400组成的指令流水线来分配的指令,该寄存器400将所有瓦片处理器耦接到相同的指令序列。

在i-缓冲器400中接收的指令由解码逻辑402解码,并且由功能单元406使用加载和存储以提取操作数并将结果写入到分区的数据存储器410(dmem)中来对在联组的寄存器文件408中的寄存器的内容执行操作。瓦片处理器的特别新颖的特征包括区域状态逻辑404、寄存器文件联组机制408、数据存储器分区机制410、远程访问逻辑412、瓦片互连网络414以及这些的组合。网络414没有示出为分立的硬件块,因为它表示将所有瓦片处理器耦接到所有其它瓦片处理器的dmem的完全连接的网络。每一个瓦片处理器的远程访问逻辑412耦接到本地访问互连416,该本地访问互连416在单个周期中将来自四个瓦片处理器中的任何一个的请求路由到任何其它的处理器。远程访问逻辑418同时确定是否有任何请求不是针对本地组中的处理器,并且将任何这种请求呈现给非本地瓦片互连420,非本地瓦片互连420将该非本地请求耦接到最终目的地。本地访问互连416、远程访问逻辑418和非本地瓦片互连420是特定级别的互连网络414。

每一个数据路径(“瓦片路径”)可以通过执行以另一瓦片路径中的存储器(或相同瓦片路径中的存储器的不同区域)为目标的加载指令来访问共享上下文。该加载是以确保目标数据已经被计算的方式实现的,通常不会增加指令的周期。

图5示出了在第一瓦片处理器实施方式实施例中的瓦片路径之间的信号业务的数据流延迟的直方图。在水平轴上显示往返延迟(从加载请求到数据响应的周期),并且具有给定延迟的访问数量在垂直轴上。(直方图中有两个峰值,因为子采样操作发生在大跨度的数据上,并且需要更多的相对远程通信)。在12个周期内几乎所有请求都得到满足,包括同步。瓦片路径横跨位置进行多个任务,在这种情况下是4个位置,执行相同的指令序列4次。因此,例如,在其它3个位置处的4个指令序列在下一个指令序列要求响应之前提供足够的时间来接收响应。

除了数据的该低开销运动之外,与传统解决方案相比,瓦片阵列在数据流实施方式中还具有两个更重要的优点。首先,网络的各层处的数据在共享存储器中保留原样,并且不必从一层传送到下一层。传统的解决方案需要信号数据到计算元件的35,000,000,000个数据传送的量级,如可以通过图3中所示的依赖性的扩展看到的。相比之下,在该实施例中,瓦片阵列需要约38,000,000个传送(在图5中的总分布)。输入数据传送一次,所有网络层都在该输入上执行,并且然后任何检测被输出到表。所需的唯一数据传送是用于子采样以及用于访问针对卷积的信号区域。层间互连或网络层之间传送数据不需要其它传送。

其次,对保留原样的数据进行操作的该能力是由于瓦片阵列不需要开销来传送内核数据的事实。在更传统的解决方案中,该内核数据必须伴随信号数据,这要求将内核数据或图像数据交换到计算元件的本地存储器中。内核数据比信号数据大得多-总共290,000,000,000个传送。这是必需的,因为每个计算元件的总存储量为针对所有内核数据的311,000个存储器位置,在没有低效的存储器使用的情况下,太大以至于不能在多个计算元件中保留原样。

在瓦片阵列中,内核数据位于主机存储器中的一个存储器区域中,并且被传送到瓦片路径而没有开销。图6中示出了用于在主机处理器和瓦片处理器之间进行接口的指令生成单元(igu)的实施例的框图。在主机处理器和瓦片处理器之间的接口涉及的任务取决于程序指令被执行的性质。即使程序特别适于由瓦片处理器执行时,也需要用适当的排序提取指令并将其提供给瓦片处理器的指令流水线的控制模块。图6的igu同样执行来自传统编译器的定制指令到适于由瓦片处理器执行的指令的翻译。以该方式,可以使用瓦片处理器来执行为传统处理器编写的程序。

igu被实现为主机的数据路径中的功能单元。该功能单元具有典型的配置,在于它具有两个输入操作数-主机数据a和主机数据b-并返回单个结果-主机结果。igu的实施方式分布在三个流水线级,对应于图的上部、中部和下部:属性级602、解码级604和i缓冲器级606。属性级实现了到主机处理器的主接口,接收主机操作码和数据a和数据b操作数,并且返回对象跟踪器结果,其中对象跟踪器识别由瓦片处理器的操作生成的多值矢量。该级同样汇总了解码级所需的信息,以将来自主机的定制指令转换成瓦片路径指令。igu的解码级从属性级接收指令和属性信息,并使用寄存器分配标志和寄存器分配队列处理寄存器的分配和解除分配。解码级同样形成针对专用处理器的指令,并将指令传递到指令缓冲器级。

igu的i缓冲器级包括标量寄存器和标量函数单元,用于接收来自专用处理器的标量数据,采用由主机处理器提供的其它标量操作数对标量数据进行操作,并存储标量结果。igu通过标量功能单元608连接到主机数据存储器。i缓冲器级同样包括优化队列和指令重放缓冲器,用于管理由专用处理器执行的指令。在具有如专用处理器的瓦片阵列的实施例中,i缓冲器级实现了专利号为9,183,614的美国专利中描述的“主机处理器”的指令提取和排序操作。用于瓦片处理器的指令生成单元在2016年2月25日提交的题为“hardwareinstructiongenerationunitforspecializedprocessors(专用处理器的硬件指令生成单元)”的申请号为15/054,118的美国专利申请中进一步描述,该申请通过引用整体和用于所有目的并入本文中。

对于cnn的实施方式,内核数据只包含常数值,其取决于被检测对象的类别而变化,但是对于给定的一组检测不变。因此,内核数据是主机程序的一部分,作为常数存储在主机存储器中,并直接设置在“主机数据b”输入端口(用于立即数据)上。该数据直接通过指令流水线(“矢量1-管道”)流动,并且被施加到所有上下文中,而没有通信或同步开销。

cnn优化-数据重组

瓦片阵列的数据流能力实现了独特的优化,其为性能上的大幅增加添加了一定量的数据流开销。到目前为止所讨论的并且具有如上图5所示的延迟结果的基线实施方式是基于从上述参考代码到基于瓦片的编程模型的示例算法的直接映射。如由图7所示,这包括对层1和层2的输入直接子采样。存在各种形式的子采样,但是本形式仅对每隔一个输入信号所限定的区域和每隔一个扫描线进行卷积以形成对卷积的输入。图7包括源图像700,其可以更一般地是任何二维数据阵列。卷积窗口702用于在用于执行卷积的选择像素(或阵列元素)处执行卷积。对于窗口702,选择的像素是位置0,0处的像素704。在图7的实施例中,对于行索引y和列索引x都具有偶数的每一个像素是用于卷积的选择像素。在阵列706中示出了用于源图像700的这些选择像素的集合。

卷积本身使用连续的信号值,如由卷积窗口702内的输入图像的阴影区域所示,但是因为卷积区域的位置在层1和层2二者中都以2的因数进行子采样,所以如图8所示,这些层中的每一层的输出处的矢量宽度以2的因数减小。图8示出了从可用于每一级处的处理的元素行的宽度的角度看示例cnn的层1和层2中的卷积的操作。在层1内,行堆栈802表示存储在处理器中(在该情况下,在瓦片处理器的数据存储器中)的输入图像数据。由于示例cnn中的卷积是6×6卷积,因此需要从y到y+5的六个输入行来执行第一层1卷积。在实施例中,cnn处理基于源图像的水平切片连续地进行,按照执行卷积所需的来一次存储许多行。在这种实施例中,当存储的图像数据的上一行不再需要时,它们可以被图像数据的新行覆写。类似地,由卷积产生的信号数据同样可以被保持为具有执行下一个卷积层所需的行数的水平切片。

图8中的行堆栈804从矢量宽度的角度示出了作为用于层1卷积的选择像素的图像数据像素的部分(fraction)。当层1卷积在层1的行y中的选择像素上执行时,所得到的信号值变成层2中的输入行806(行y)。层2中的后续输入行的空间显示在行806下方;当在层1中接收到足够的输入数据以从附加行开始执行卷积时,生成这些行。因为在图8的实施例中,层2同样以2的因数进行子采样,所以表示作为用于层2卷积的选择像素的输入线y像素的部分的行808是行806的一半宽。

图9中示出了当采用如上所述的子采样执行卷积时的瓦片处理器数据存储器的数据存储的图示。图9中的列表示四个数据存储器902、904、906和908。这些类似于图4的瓦片处理器阵列的数据存储器410,但是周围的瓦片处理器和它们之间的互连在图9中未示出。在图9的实施例中,连接数据处理器的指令流水线从左向右移动,使得数据存储器902处于最靠近指令流水线的开始的数据处理器中。数据存储器中的每一个被分区成四个存储器区域,诸如数据存储器902的区域910、912、914和916。沿着图9的存储器区域中的每一个存储器区域的左侧是一列图像数据,用在顶部处的“in”表示,并在源图像中通过y、x位置被引用。将图像数据或其它二维阵列数据存储在瓦片处理器中的方式是通过在横跨图像水平移动时将每一个水平位置处的像素或元素映射到相继的存储器区域。因此,区域910(第一处理器902的第一区域)中的像素具有x索引0,而下一区域912中的像素具有x索引1,并且从一个存储器底部处的区域移动到下一个存储器顶部处的区域,在整个数据存储器组中依此类推。在图9的实施例中,源图像是16个像素宽,使得x的范围从0到15。其它瓦片处理器阵列当然可以具有更多的数据处理器,并且数据存储器同样可以被分区为更多数量的区域,但区域的数量应该是二的幂。

除了源图像数据之外,图9中的数据存储器中的每一个数据存储器存储从所执行的卷积得到的信号数据。这些输出元素可以在此被称为特征映射图像素,或者被称为用于更一般化的阵列处理操作的输出元素。对于本公开中描述的cnn实施方式示例,存在6个层1特征映射图,导致每一个选择的像素六个层1卷积,以及六个结果信号值。在图9的实施例中,符号s11指的是从层1输出的信号,特征映射图1,而s22表示来自层1的输出,特征映射图2。如图9所示,来自层2卷积的信号输出同样被存储在数据存储器中。在所示的图像像素数据是从源图像接收的第一数据的实施例中,没有足够的图像行被接收以产生任何层2卷积输出。

如图9中所示,在存储器区域中的每一个存储器区域中已经存储了六行图像数据,并且已经对于存储的水平图像切片的顶行上的选择像素执行了层1卷积。在该实施例中,对瓦片处理器的指令已经使第一瓦片处理器902执行从头四个选择的像素开始的卷积,那些卷积用于y索引0和x索引0、2、4和6。来自这些卷积的信号数据依次存储在瓦片处理器902的4个区域中。该操作继续横跨瓦片处理器,直到处理器在x=10处“用完”选择的像素。因为卷积在每一个方向中需要具有6个像素的窗口,所以对于该图像第10个水平像素是可以执行卷积的最后一个水平像素,并且第11到第15区域具有“apr”标记以指出它们在“围裙(apron)”中,并且即使没有子采样,也不会具有信号数据。由于卷积需要子采样位置右侧的五个像素,所以瓦片处理器906和908不参与卷积。在具有使用更多的图像处理器的更宽的源图像的更实际的情况下,在图像边缘处的围裙效应将会很小。然而,在这种情况下,从子采样因数为2的瓦片处理器活动的损失将近达到可用处理器的一半。

瓦片处理器中的数据处理器被设计为并行工作;它们执行相同的指令,该指令在每一个相邻处理器之间具有一个时钟周期的偏移量。由于横跨整个矢量并行执行卷积运算,所以图8和图9中所示的矢量长度的减少直接在层2处以2的因数并且在层3和层4处以另一个2的因数减小可用并行度。这产生超过两倍的性能,因为层3和层4执行更多的总操作-与层1中6个卷积以及层2中60个卷积相比,在层3中每一个矢量总共640个卷积,并且在层4中80或640个(取决于是否检测到对象)。

卷积运算在每一个位置处是相同的,并且在瓦片实施方式中对数据存储器中静止的数据执行。互连或层间信号数据通信不需要数据通信。由于这个原因,将来自多线的子采样矢量重组为出现在比子采样线更宽的单个矢量内是有利的。这为数据重组增加了一些开销,但是允许针对每一个重组操作执行在层2-4中的大量卷积。

在图10的实施例中,层1中的数据被重组,使得垂直方向中的矢量组织允许在六个线y至y+5和线y+2至y+7上并行进行垂直卷积。这导致两个相邻的输出线出现在相同的输出矢量内。在层2内,执行相似的操作,导致具有四条相邻线的层2输出出现在相同输出矢量内。除了堆栈1002包括8个图像线而不是6个以外,图10的行堆栈802类似于图8的堆栈802。为了对两行(线y和线y+2)进行卷积,在一个瓦片处理器迭代期间,卷积被延迟直到再接收到两个线使得有足够的数据执行线y+2卷积。行堆栈1004表示从线y和线y+2二者中选择的像素;这些在一个瓦片处理器阵列迭代中执行,使得在迭代期间并行完成两倍的许多卷积。应注意到,图像数据实际上并未从一个瓦片处理器区域移动到另一瓦片处理器区域,以在级别1处实现该重组。相反,瓦片处理器阵列被编程为使得阵列的一侧上的处理器对行y中选择的像素执行卷积,而另一侧上的处理器对行y+2中的选择的像素执行卷积。在执行沿着线y和y+2的选择像素的卷积的迭代之后,下一个迭代可以在组合线y+4和y+6的行处开始较低的四个线。

图11示出了在实现图10中所示的层1重组时的瓦片处理器存储器中的数据存储的示例。图11描绘了图9中所示的瓦片处理器数据存储器的相同阵列,但是在图11的实施例中瓦片处理器被编程为对于存储在区域1102到1112中的结果使用沿着线y的选择像素,并且对于存储在区域1114到1124中的结果使用沿着线y+2的选择像素,来执行层1卷积。存储器区域中的每一个存储器区域包括8线而不是6线的图像数据,并且第一组存储器区域具有与源图像的y=0行对应的信号数据,而第二组存储器区域具有与y=2行对应的信号数据。在存储器区域的左侧上,示出用于指定到层1的输入行(在源图像中)的索引y1,并且在存储器区域的右侧上,示出用于指定到层2的输入行的索引y2(在层1输出特征映射图中的每一个中)。由于子采样的因数为2,因此层1中的y1+2行成为层2中的y2+1行。

为了理解如何完成该重组,首先理解对于基线实施方式如何对数据进行子采样而不重组是有用的。这在图12中示出。水平卷积在6个像素的跨度1202(“每列迭代”)上执行:对于矢量的并行操作,通过子采样从输入中提取像素,其中距子采样位置有0-5的偏移。该图突出显示在水平卷积的前两个迭代中对于第三子采样位置选择的像素(“x”)。垂直卷积是通过重复y+0到y+5的6个线中的每个线的水平迭代来完成的。请注意,使用多个内核的多个卷积(在该示例中为六个)将应用于相同的子采样数据。

如图13中所示,为了使子采样矢量的大小加倍,对在y和y+2处两个水平线执行类似的操作,其中第二子采样线级联在第一子采样线的矢量结束处。类库允许这在单个语句中使用用于分配的范围掩码来完成。这使得水平卷积可以同时对两个水平线执行(两个线使用相同的内核)。这以进行级联的设置时间为代价,使性能近似翻倍。由于多个内核被卷积用于单个矢量重组,所以大部分潜在的性能优势得以实现。

如图10中所示,对层1中的重组的数据执行卷积导致两个相邻的输出线出现在层2的输入处的单个矢量内。例如,图10的行1006将层2的线y和层2的线y+1级联。这种组织在层2内不方便使用,因为相邻的线应该优选地出现在垂直的相同的位置-相反,这种组织使得在垂直方向中每隔一条线相邻。然而,可以通过在子采样之后对输入数据进行置乱来形成更好的组织,以形成对层2卷积的输入。

该置乱操作在图14中示出。不同于在图10的顶部处的层1重组,图14的置乱是层1信号数据从一个瓦片处理器存储器区域到另一个瓦片处理器存储器区域的实际移动。该想法是将用于下一个卷积的图像数据布置成使得意图垂直彼此相邻的像素被存储在相同的存储器区域中。子采样允许4个水平卷积线被放置在近似相同的矢量宽度中(因为卷积不能在右边界处完成,并且几个位置不出现在输出中,所以稍微小一点)。为了达到该目的,在相同的矢量内对4个垂直线进行子采样和级联:对于偶数线从矢量的左侧开始,并且对于奇数线从右侧开始。应该理解,该操作应用于所有的水平卷积(x+0到x+5)以及所有的垂直卷积(y+0到y+5)。然而,该重组应用于层2内的十六个卷积,所以尽管有重组开销,也存在净收益。

在层3中执行类似的重组以定位输入,使得其更适合于卷积运算(在该情况下是5×5)。然而,在该神经网络的示例中,层3不使用子采样,所以这是输入矢量的简单旋转,使得相继的水平线在垂直方向中是相邻的,如图15所示。与其它层一样,这导致相继线的输出出现在单个矢量中,在输出的4个相邻的子矢量中。该组织可以被直接用在参考cnn代码的层4中进行检测和分类,而不需要进一步的重组。

上述使用数据重组和置乱的优化的cnn实施方式的该实施例在10,200,000个周期中执行,约是上述基线瓦片处理器实施方式的性能(32,000,000个周期)的3.1倍和是上面提及的现有技术的实施方式的性能的约137倍(1,400,000,000个周期)。图16示出了该实施方式的延迟直方图。数据重组已经为基线实施方式增加了约21,000,000个传送,但瓦片阵列的数据流实施方式支持这些传送,对延迟分布影响很小,这是实现数据重组的关键优势,使得该优化成为可能。

cnn优化-数据流优化

对于子采样或者对于将矢量级联成较大的矢量,目前呈现的瓷砖式cnn实施方式的版本都需要相对大的数据移动跨度级联。如图17中所示,这可以用另一种创建大矢量的方式来避免。不进行矢量的级联,而是使来自不同线的矢量元素交错,使得来自不同线的元素在到卷积的输入位置中交替。卷积的输出同样在交替位置中。如在图11中所示的层1重组的情况下,在层1处的该交错通过瓦片处理器提取用于卷积的数据的方式来完成。

该交错技术具有以下优点:子采样仅需要数据元素的小的移动,因为这些元素被移动到附近位置而不是横跨矢量宽度的大约一半。它同样不需要大量的数据移动来级联矢量。它确实需要类似于图14和图1中所示的输入置乱,但这只是输入索引的不同形式。图18示出了用于层2的该置乱。其它层使用类似的风格-这意味着与之前的情况相比,层4中的对象被以不同的顺序检测到,但这不会影响正确性。

所测试的cnn图像识别示例的交错实施例在7,170,000个周期中完成,约为基线情况的4.5倍和约为现有技术性能的19.5倍。数据存储器要求同样较小:先前的优化版本使用256个寄存器和205个存储器位置(包括用于溢出寄存器的89个位置);数据流优化版本使用208个寄存器(没有溢出)和100个存储器位置(仅用于共享数据)。

图19示出了数据流优化的益处。延迟的分布要严格得多,7个周期以上的访问次数非常少,并且没有由于矢量的大跨度访问而导致的第二峰值。到目前为止访问总数在示出的所有中都是最小的。与先前优化情况的55,100,000相比,传送的总数量为34,300,000。它同样小于基线情况下所需的37,600,000个传送,因为很少有处理图像帧的迭代。

在此提供的描述意在说明本发明的原理和实施例。一旦完全理解了上述公开内容,许多变化和修改对于本领域技术人员将变得显而易见。旨在将任何权利要求解释为包含所有这些变化和修改。

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