请阅读【嵌入式及芯片开发学必备专栏】
文章目录
- NPU 算力
- MAC 阵列简介
- MAC 阵列特点
- MAC 阵列的结构
- MAC 阵列架构示例
- MAC 阵列计算举例
- 示例计算
- TOPS 计算方法
NPU 算力
OpenCV 算法会消耗很大一部分自动驾驶芯片的算力,在车上堆摄像头的同时也需要堆TOPS,那么视觉处理能力为什么用TOPS评估呢?通常计算机视觉算法是基于卷积神经网络的,而卷积神经网络的本质是累积累加算法(Multiply Accumulate)。
下图是一个非常生动的卷积过程
MAC 阵列简介
MAC(Multiply-Accumulate)阵列是电子计算领域中的一个基本单元,广泛应用于数字信号处理(DSP)、神经网络加速以及其他需要高效数学计算的领域。MAC 单元能够执行乘积累加运算,即在一个操作周期内同时进行乘法和加法运算。
一个 MAC 单元基本上执行以下操作:
A = A * B + C
MAC 阵列特点
- 高效计算:MAC 能够在单个操作周期内完成乘法和加法运算,大大提高了计算效率。
- 广泛应用:在数字信号处理、图像处理、机器学习等领域,MAC 是关键的计算单元。
- 并行处理:多个 MAC 单元可以并行工作,加速复杂计算任务。
MAC 阵列的结构
一个典型的 MAC 阵列由多个 MAC 单元组成,每个 MAC 单元独立进行乘积累加运算。通过并行计算和流水线技术,MAC 阵列可以显著提高计算性能。
MAC 阵列架构示例
假设我们有一个 4x4 的 MAC 阵列,表示有 4 行 4 列,共 16 个 MAC 单元。每个单元独立执行如下操作:
Sum_{ij} = Sum_{ij} + (A_i * B_j)
其中,( i ) 和 ( j ) 分别表示 MAC 单元的行和列索引。
MAC 阵列计算举例
假设我们有两个向量 ({A} ) 和 ( {B} ),并且我们希望计算它们的点积。向量 ( {A} ) 和 ( {B} ) 分别为:
{A} = [a_1, a_2, a_3, a_4]
{B} = [b_1, b_2, b_3, b_4]
我们将使用一个 1x4
的 MAC 阵列来计算它们的点积:
步骤
- 初始化:设定初始值 {Sum} = 0。
- 逐步计算:
- 第一步:{Sum} ={Sum} + (a_1 * b_1)
- 第二步:{Sum} ={Sum} + (a_2 * b_2)
- 第三步:{Sum} ={Sum} + (a_3 * b_3)
- 第四步:{Sum} ={Sum} + (a_4 * b_4)
示例计算
假设:
{A} = [2, 3, 4, 5]
{B} = [1, 0, -1, 2]
根据上述步骤,我们计算点积:
- 初始化:{Sum} = 0)
- 第一步:{Sum} = 0 + (2 * 1) = 2)
- 第二步:{Sum} = 2 + (3 * 0) = 2)
- 第三步:{Sum} = 2 + (4 * -1) = 2 - 4 = -2)
- 第四步:{Sum} = -2 + (5 * 2) = -2 + 10 = 8)
最终结果:
{A} cdot {B} = 8
TOPS 计算方法
在NPU中,芯片都用 MAC 阵列(乘积累加运算,MAC/ Multiply Accumulate) 作为NPU给神经网络加速,许多运算(如卷积运算、点积运算、矩阵运算、数字滤波器运算、乃至多项式的求值运算)都可以分解为数个MAC指令,因此可以提高上述运算的效率。
MAC矩阵是AI芯片的核心。TOPS是MAC在1秒内操作的数,计算公式为:
TOPS = MAC矩阵行 * MAC矩阵列 * 2 * 主频;
公式中的 2 可理解为一个MACC(乘加运算)为一次乘法和一次加法,为2次运算操作。
下面以特斯拉自动驾驶FSD芯片为例。
特斯拉资料中,该芯片的目标是自主4级和5级。FSD芯片采用三星(德克萨斯州奥斯汀的工厂)的14纳米工艺技术制造,集成了3个四核Cortex-A72集群,共有12个CPU,工作频率为2.2GHz,1个(ARM的)Mali G71 MP12 GPU,2个NPU工作频率为2GHz,每个周期,从 SRAM 读取 256byte 字节的激活数据和另外128byte的权重数据到MAC阵列中。
每个NPU拥有 96x96 MAC,另外在精度方面,乘法为8x8bit
,加法为32bit
,两种数据类型的选择很大程度上取决于他们降功耗的努力(例如32bitFP
加法器的功耗大约是32bit整数加法器的9倍。
在2GHz的工作频率下,NPU单核算力为 36.86TOPS
:
TOPS = MAC矩阵行 * MAC矩阵列 * 2 * 主频 = 96 * 96 * 2 * 2G = 36.864 TOPS(单核)
在点积运算之后,数据转移到激活硬件,最后写入缓存,以汇总结果。
FSD支持许多激活功能,包括ReLU、SiLU 和 TanH。每个周期,将128byte的数据写回SRAM。所有操作同时且连续地进行,重复直到完成整个计算。
推荐阅读:
https://gitcode.csdn.net/65ed7c771a836825ed79b0bf.html
https://zhuanlan.zhihu.com/p/393418195