MLP_Conv2D是功用完全的规划,可将2D输入图画与多个内核一起进行卷积。 该规划充分运用了MLP和BRAM模块,每个MLP一个周期履行12个int8乘法。此外,MLP列和BRAM块平等级联以有效地将图画数据传递,然后答应一起处理多个内核。
该规划运用NoC接入点(NAP)从片上网络(NoC)读取或写入数据。NoC连接到Speedster7t器材中的GDDR6操控器再到外部存储器。
AlexNet
虽然开端为AlexNet图画和内核巨细装备了MLP_Conv2D规划,可是2D卷积是一个通用进程,因而能够从头装备该规划并使其习惯许多不同的2D办法。
2D卷积的一般原理是在图画(实践上是另一个2D矩阵)上传递内核(2D矩阵)。关于每次核算,内核均以输入图画的像素为中心,并对每个内核值(称为权重)与其当时对齐的像素履行乘法运算。这些乘法的总和给出了原始图画像素的特定卷积成果。然后将内核移至下一个像素,并重复该进程。
通过训练的内核,2D卷积生成一个输出成果图画,杰出显现输入图画的特定特征,例如笔直线,水平线,改变视点的对角线和改变半径的曲线。然后能够将这些特征输入到其他处理层(包含其他2D卷积),然后能够将其标识为(通常在软件中)为特定目标。
因而,二维卷积处理不该被视为图画识别的完好解决方案,而应被视为处理操作链中的单个要害组件。
图1 单个Kernel进行2D卷积的动态示意图
乘法密度
2D卷积的应战是所需的乘法数量,这便是MLP中专用的乘法器阵列。关于AlexNet装备,每个内核为11×11= 121个权重值。可是,卷积实践上是3D的,因为输入图画具有三层(RGB),因而一组内核有121×3 = 363个乘法来发生单个输出成果。AlexNet输入图画为227×227;可是,此图画的stride为4(在核算之间内核移动了四个像素)。此进程导致输出成果矩阵为54×54 = 2916个成果。因而,关于一幅图画需求363×2916 = 1,058,508次乘法;即处理一个图画需求进行一百万次以上的累加运算。其间单个Kernel进行2D卷积的动态示意图如下:
关于MLP_Conv2D,其规划旨在一次处理一幅图画中的60个内核,单次履行超越6000万次乘法累加操作。
图2 单个MLP_Conv2D实例资源运用
MLP_Conv2D规划能够以750 MHz的频率运转。单个MLP能够在137 µs内对具有11×11内核的单个227×227 RGB输入图画进行卷积,相当于每秒15.4GOPS(包含乘和加)。 但一个MLP_Conv2D实例由60个并行运转的MLP构成,能够一起对60个输入图画进行卷积,相当于924GOPS。 最终,将多达40个MLP_Conv2D实例化到单个器材中,每个实例都通过自己的NAP将数据传输到GDDR6存储器,然后完成了组合高达37 TOPS的功用-相当于每秒处理28,8000张图画(本规划首要针对卷积核)。
图3 并行40个MLP_Conv2D实例资源运用
MLP_Conv2D环绕MLP和BRAM块功用而规划,并运用它们各自的内部级联走线。 相同,NAP答应直接从外部存储器路由数据互联。这些功用可完成最小的附加逻辑或路由要求,运用率表如下:
图4 MLP_Conv2D框图
数据流:单个MLP
每个MLP都有一个附近的BRAM。 在此规划中BRAM用于存储内核并将其屡次传递到MLP。 初始化时,将从输入NAP中读取不同的内核,并将其写入相应的BRAM。 BRAM在写侧装备为72位,而读取设置为144位。在操作期间,仅将96位用作内核权重,即读取为4个权重×3层×8位。初始图画数据从NAP读取到输入FIFO中,该输入FIFO用于将图画存储为一系列行。虽然此输入存储器被列为FIFO,但仍可作为可重复读取的FIFO,因为能够屡次从中读取行。该存储器装备为144位宽,仅运用96位,由两个BRAM72K组成。每个字由4个像素×3层×8位组成。初始化时,将读取满足的行以匹配内核中的行数加上笔直跨步所需的行数。即
Initial Lines read = FILTER_HEIGHT + STRIDE
一旦加载了初始数据和内核,便开端核算。
从输入FIFO中读取榜首条图画行,并读取与内核水平巨细匹配的图画数据像素数量。在读取这些像素时,将读取匹配的内核权重。MLP将这些96位流的每一个乘以12个int8值并累加成果。输入FIFO前进到第二行,重复此进程,直到内核的一切行都与输入图画左上角的恰当像素相乘。在此进程中,MLP堆集了成果;现在,该成果是图画与内核卷积的左上角的2D卷积。该成果以16位成果的方法从MLP输出。重复此进程,输入FIFO跨行超前STRIDE参数设置的像素数(关于当时规划,STRIDE固定为4)。在每个处理周期包含在内时,都会生成另一个成果,直到水平地获取了恰当数量的成果停止。
然后,将输入FIFO下移STRIDE行数,然后重复该进程以生成输入图画中下一组线的卷积成果。当输入FIFO向下移动时,不再需求FIFO中的初始行,因而与MLP核算并行时,将加载下一组用于输入图画的STRIDE行。考虑外部存储源的带宽要求时,能够看到映像和内核仅从内存中读取一次。然后,它们能够从各自的BRAM中从头运用,然后减少了外部存储器带宽的整体担负,其进程参阅图表1。
数据流:多个MLP
MLP的一个明显特点是能够将数据和成果从一个MLP或BRAM级联到同一列中。 MLP_Conv2D通过将MLP及其相关的BRAM放在列组中来运用这些级联途径。在将BRAM加载到内核时,级联途径用于将数据流水线传输到每个BRAM,而且运用BRAM块地址形式挑选要写入内核的BRAM。
在核算进程中,输入的图画数据将在MLP的列中级联,以便每个MLP在其下一个街坊之后的一个周期接纳到图画数据。一起,操控内核读取的BRAM读取地址以一个周期的推迟级联到BRAM列中。这样,每个MLP在其从前的MLP之后一个周期接纳相同的图画数据和相同的内核读取地址。每个MLP的核算差异在于,其相关的BRAM将具有不同的内核数据。成果是一个图画并行地与多个内核卷积。并行卷积的数量称为BATCH。
数据流:核算成果
如前所述,每个MLP为内核和图画部分的每个卷积生成16位成果。
MLP摆放在16列中,因而从该列中生成一个256位字,该字由该列中每个MLP的成果组成。然后将此256位字写入输出NAP。 这种组织导致卷积成果作为同一图画的图层存储在内存中;因而,当三层或RGB存储在单个输入字中时,匹配输入字摆放。
然后,因为能够在完好的256位成果上的16个并行实例中履行激活功用,因而该组织答应将触及的成果并行处理到激活层中。相同,一旦256位成果通过输出NAP写回到存储器中,则能够将成果读回到另一个2D卷积电路中。
图5 MLP_Conv2D布局示意图
布局
在Speedster7t架构中,每个NAP对应32个MLP。该规划通过优化,可运用两个NAP,一个用于读取,一个用于写入,因而能够对应64个MLP。
可是,输入和输出FIFO需求两个BRAM 72K存储块才干创立一个256位宽的组合存储器。因而,这些存储器将耗费64个可用方位中的四个用于数据I / O。
规划被组织为运用与两个NAP相相关的四列MLP。可是,榜首列和最终一列都运用14个MLP,剩余两个MLP方位别离用于输入和输出FIFO。中心两列运用一切16个可用的MLP。在平面图中,各列的摆放方法是使榜首列(底部具有输入FIFO存储器)与NAP相邻,以改进时序。
下面显现了一个实例,即运用了60个MLP(Batch=60)的规划实践布局图(杰出显现了道路):
图6 60个MLP布局图
在全芯片构建中运用40个实例时,尽力使每个实例都运用NAP与内存进行通讯。成果,FMax仍能到达750MHz,并运用掉芯片中的一切80个NAP以及94%的MLP和BRAM72K。
图7 2400个MLP布局图