从硬件架构到软件工具链,存算一体大算力AI芯片的创新与实践( 三 )


从PPA的角度来看 , CIMD的算力密度和能效比是比较高的 , 我们的数据在不同先进工艺下 , 它的能效比可以达到几十TOPS甚至上百TOPS 。 因为是纯数字电路 , 所以CIMD是没有计算误差的 。 模拟电路的算力密度也可以做得比较高 , 能效比甚至会比数字电路更高 , 但是它是有计算误差的 , 而且其计算精度会比较低 。 如果在同等精度下的话 , 模拟的存算电路并不会比数字的存算电路有太大的优势 。 但在比较低精度的情况下 , 模拟电路的能效比会更高一些 , 但是它的计算误差、精度的问题 , 还有校正、噪声、温度等这些影响是比较难解决的 。 所以后摩智能的第一代落地量产的产品是以CIMD为基础的 。
讲完最底层的CIMD , 接下来看看怎样把CIMD组成一个可以用来计算的单元 。 我们把若干个CIMDMacro组成一个MacroGroup , 数据是以数据流stream的方式流入Macro , 结果同样以流的方式流出 。 这里的一个好处是 , 在数据流入Macro过程中 , 如果feature数据有很多0 , 是可以节省一部分功耗的 , 甚至节省计算时间 。 这里天然的可以支持feature稀疏化的效果 , 不像有些AI处理器里讲稀疏化 , 比如Orin的稀疏化是对weight做稀疏 , 需要做重新的设计、训练 , 而我们的计算单元针对feature可以做稀疏化的加速 。
从硬件架构到软件工具链,存算一体大算力AI芯片的创新与实践
文章图片
但需要考虑的问题是计算需要在Macro上映射 。 上图中举了一个例子 , 我们的计算单元Macro会组成一个3×3的阵列 , 如果是有4个3×3的阵列 , 可以把它类似组成一个SystolicArray , 类似TPU脉动阵列的形式 , 数据feature可以从旁边的Tile里边或者是TileSRAM里的MultiBankSharedMemory流入到MacroGroup里 , 结果同样可以流出MacroGroup 。
MacroGroup之间的结果可能是一个Partialsum , Partialsum做一个加法之后 , 可以写到当前Tile的SharedMemory里面去 , 也有可能通过Partialsumbus流到临近Tile的计算单元里面 。
除了传统的AINPU或者AICore , 还要考虑一个利用率的问题 , 利用率上除了时间利用率 , 还要考虑空间利用率 。 比如 , 上面的例子为什么是一个3×3的结构 , 因为大多数卷积神经网络中的卷积核 , 最常用的是3×3kernel , 所以用一个3×3的阵列是可以最高效的计算3×3的卷积 。 但是除了3×3以外 , 还有5×5 , 7×7或者1×1等的卷积规格 , 这时怎样把一个5×5、7×7的一个kernel映射到3×3的阵列里 , 这是一个非常难的问题 , 需要大家仔细考虑怎么把空间上的利用率用满 , 这也是在用Macro设计时需要重点关注或考虑的问题 。
从硬件架构到软件工具链,存算一体大算力AI芯片的创新与实践
文章图片
MacroGroup可以作为TensorEngine里一个最重要的单元 , 那TensorEngine和其他的一些控制单元或者计算单元 , 组成一个Tile 。 从上图可以看出 , Tile里包括了CPU , CPU主要用来做控制 , 通过一个指令分发单元把不同的指令分发给TensorEngine、VectorEngine , SpecialFunctionUnit , 还有一个多通道的DMA , 以及一个Switch 。 Switch起到了一个路由的作用 , 用来在不同的Tile之间传输数据 。 我们自己设计了一个数据的传输总线 , 通过传输和路由 , 还有多播的机制 , 让数据可以在不同的Tile , 甚至在不同的AICore之间进行共享和传播 , 这样可以极大的提高带宽的利用率 , 减少数据和memory之间的传输 。
另外 , 还需要考虑的是Tile之间的同步问题 。 比如两个Tile之间需要共同完成一个计算时 , 那Tile0和Tile1之间怎么进行同步 , 这也需要在设计中考虑 。
从硬件架构到软件工具链,存算一体大算力AI芯片的创新与实践