智能驾驶已经逐渐成为汽车的标配。
智驾芯片当然是智能驾驶的算力基石,而这玩意也常常被车企拿来宣传。
如今,已经有车企开始宣传研发了 1000Tops 的智驾芯片。
智驾芯片就如同汽车的大脑,非常的重要。
那么,开发一款智驾芯片也是非常具有极高的技术含量的。
今天,本文手把手教大家从零设计一款算力 1000Tops 的智驾芯片。
一、炼气期(L1)——算力的概念
那我们就先搞清楚这个智驾芯片算力 1000Tops 意味着什么
熟悉计算机的同学说这还不简单,
OPS 的意思就是 Operations Per Second。
每秒钟操作多少次。
计算机每秒钟算一次为 1ops。
那么 1T ops 需要计算机算多少次?
1Tops
=1000Gops
=1000,000Mops
=1000,000,000Kops
=1000,000,000,000ops
计算完毕,每秒钟操作 10 的十二次方次,也就是 1Tops。
我们假设有一个单发射 1Ghz 的 CPU,
如果要达到 1Tops 的话,基本上需要 1000 个这样的 CPU。
如果要是达到 100Tops 的处理性能,则需要 100000 个,
也就是 10 万个这样的 CPU 才行。
如果是达到 1000Tops,则需要 1,000,000,也就是 100 万个 1Ghz 的处理器。
这意味着什么?
意味着,我们可以买 100 万个处理器,将这么多 CPU 堆起来,实现 1000Tops。
这么多处理器,至少需要一个火车车厢才能装下。
也就是,通过 CPU 堆叠的方式实现 1000Tops 的算力,至少需要一个车厢。
看来,在普通汽车上,通过堆 CPU 的方式来实现这么大的算力不太可能。
那么就需要另外想办法了。
二、筑基期(L2)——矩阵乘法
办法从哪里开始考虑。
我们从最本质的地方来考虑?
智驾芯片解决什么问题?
智驾芯片的本身是运行人工智能的算法。
人工智能算法最核心的操作就是矩阵乘法。
那么矩阵乘法的计算,就是智驾芯片要解决的核心问题。
我们用一点时间把矩阵乘法梳理一下。
例如,我们有两个原始矩阵。
矩阵 A,m 行,n 列。
矩阵 B,n 行,P 列
然后,我们计算矩阵 C=A*B;
C 是矩阵 A 和矩阵 B 的乘法结果:m 行,p 列
也可以写作:
我们举一个例子
两个 2X2 的矩阵相乘,可以如下所示。
对于一个 NN 的矩阵,那么总共需要 N(NN)次乘法和 N(N*(N-1))次加法。
所以,对于一个 2*2 的矩阵,里面一共用到了 8 次乘法,4 次加法,才能得到答案。
三、金丹期(L3)——乘累加器
根据上面的分析,我们可以看到,矩阵相乘,需要的最小的算子单元就是乘法和加法。
所以你可以设计一种电路。
先做两个值的乘法,例如 a11 与 b11。
在上面的例子中,就是 1X5=5;
然后开始算,a12*b21
在上面的例子中,就是 2X7=14;
然后与上一次的乘法结果(5)加起来。
2X7 + 5 = 19
每次都可以把上一次的结果与当次乘法的结果加起来,这样就可以实现矩阵一行与一列的先相乘后求和的过程。
恭喜你,你就得到了一个乘累加器。
每个 MAC 就是一个乘累加器(Multiply Accumulate)。
但是,现在问题又来了。
一个乘累加器,只能计算一个点的。
如果要并行,一个 NXN 的矩阵,那么就需要 NXN 个乘累加器。
这样可以并行来计算。
那如果计算这个 2X2 的矩阵,
我们可以用 2X2,一共 4 个乘累加单元。
这样可以并行来计算。
下图就是这个乘累加矩阵,一共 4 个,可以同时进行计算。
通过上图,眼尖的你,一定发现了规律。
矩阵 A 和矩阵 B 相乘。
如同矩阵 A 从左往后移动,先向左移动 1,3,再移动 2,4
而矩阵 B 从上往下移动,先往下移动 5,6,再移动 7,8
然后进行相乘。
那么根据这个规律,就可以采用另一种叫做脉动阵列的方式来计算。
这个脉动和某饮品没有啥关系。
完全体现了数据的移动规律,如箭头方向所示。
第一步,按照规律,往右移动移动 1 和以及往下移动 5;
第二步,以此类推
第三步,
第四步,
第五步,
这样我们就得到了最终的矩阵相乘的值。
通过累加器的脉动阵列,可以减少芯片内部的连接,因为每个累加器的输入只来自左边和右边。
这样就可以放置很多的累加器,累加器比较容易做的很大。
于是,把累加器从 2X2 扩展一下,可以做的很大,如下图所示:
到此,你就设计了一个矩阵乘法处理单元;
上面和左面的缓存中分为存储了原始的数据矩阵 A 和 B。
在人工智能算法中,一个一般代表了权重矩阵(weight fifo),另一个代表激活矩阵。
这样你就设计了一个面向人工智能应用的处理器(NPU)最核心的单元。
矩阵乘法以及存储矩阵输入和输出的缓存。
四、元婴期(L4)——NPU
那么这个矩阵的行和列分别设置为多少合适?
由于神经网络的每一层的计算都比较多。
那么可以把行和列都设置成 8,16,32,64,96 或者更大。
那我们就先把行和列设置成 96。
那我们就得到了一个 96X96=9216 乘累加单元。
为了存储要计算的矩阵数据,给这些数据设计了一个缓存(例如 32Mbyte)。
对于矩阵乘法后的数据,还需要进行池化,激活函数,归一化等操作。
在矩阵完成运算后。
数据会被转移到激活硬件、池化硬件,并最终进入写入缓冲区以汇总结果。
还要支持多种激活函数,包括修正线性单元(ReLU)、Sigmoid 线性单元(SiLU)和 TanH。
于是在矩阵的输出结果后面又加上了 SIMD 单元可编程的处理以及池化,deconv 等模块。
这样,恭喜你,你现在就设计完毕了一个 NPU。
如下图所示:
设计完毕后,马老板就提出了一个问题,这个 NPU 的性能是多少?
有了前面的基础,这个问题就简单了。
芯片的核心算力是这个 96X96 的矩阵计算单元(黄色部分)得来的。
总计 9,216 个 MAC(乘累加)。
一次乘加算两次操作。
乘+加,所以是两次
所以,这个矩阵每次 hz 就是 18,432 次操作。
做成芯片,这个 NPU 运行频率是 2Ghz。
也就是 2GX18432 = 36864Gops=36.864Tops。
是不是很简单又清楚。
五、大乘期(L5)——智能驾驶芯片
这个时候,马老板突然说了。
才 37Tops 性能,这性能也太差了。
你刚要解释一下,功耗,面积,编程友好,利用率这些原因。
马老板才不管那套。
性能至少翻倍,不能讨价还价。
于是,你立马想到了。
可以放两个 NPU,不就可以性能翻倍了吗?
于是,你在一个 SOC 内部,放上了两个 NPU(黄色部分),
这样,这个芯片的性能一下子就能从 76.86Tops 到 73.72Tops。
四舍五入,就是 74Tops
当然,除了提供核心算力的 NPU 之外。
还有系统控制作用的 CPU,3 个四核 Cortex-A72 集群,总共 12 个 CPU,运行频率为 2.2GHz;
还有图像处理作用的 GPU,一个 Mali G71 MP12 GPU,运行频率为 1GHz
至此,恭喜你,你设计了特斯拉的智驾芯片,FSD 芯片。
然后,这个芯片采用了三星的 14nm 工艺,整个芯片 260 mm² die size(20 mm x 13 mm die size)
这是最后的芯片版图。
可以看到,整个提供算力的 NPU,几乎占了芯片面积的 50%左右。
这玩意占面积也占成本。
结果,芯片设计出来,马老板立马说,74Tops,这个性能指标还是太低。
出去不好吹牛。
至少要大于 100Tops。
有了前面的经验,聪明的你立马想到了。
直接在板子上放两颗不就行了。
那么最后方案上,我们可以看到。
系统采用了两颗 FSD 芯片,智驾系统的总的算力,也达到了 148TOPS。
这样,算力立马达到了高阶智驾的门槛。
即使是这样,也没有达到 1000Tops 的算力。
如果要达到 1000Tops 的算力。
根据上面的计算,增加算力,可以加多个 NPU,也可以增加乘累加矩阵(MAC array)的面积。
更大的矩阵乘法单元带来了更大的算力。
看来,只要是简单的堆乘累加矩阵就可以了?
这个看起来很简单。
例如,128*128 个 MAC 的 NPU,
单个 NPU 如果 2Ghz 处理能力,
其算力就能>64Tops。
一个芯片四个 NPU,单芯片就能达到 256T 处理能力。
板载 4 个芯片就能达到 1024Tops 的处理能力。
所以,有了前面的基础,看起来不费劲。
不要笑,
可能有人问?
算力怎么能这么粗暴的叠加。
要知道,某家车企就是用了四颗智驾芯片(orin-X),宣称达到了 1024Tops。
我很怀疑,他们是不是把算力都用上了,是不是扣到两颗芯片发现智驾也能工作。
其实,即使大家没有智驾软件的基础。
也能明白:
智驾软件用到的算力不等于实际硬件提供的能力。
通过小学数学也能知道,无限扩大这个乘累加器矩阵,最终的利用率就会不断降低。
例如,我们算一个 96X96 的矩阵,而用 128X128 的硬件单元算,或者 256X256 的矩阵单元算。
就有一大部分都空闲。
这个就是硬件利用率的问题。
所以,有句老话说的好,
算力不是万能的。
但是光有算力也是万万不能的。
看的见是智驾芯片的算力,
看不见的是智驾芯片上跑的软件和算法。
这些软件和算法的能力,其实更是制约各家智驾水平的差异的地方。
所以说:
芯片的算力,
算法的智力,
系统的合力,
唯有三者形成合力,才能驱动智能驾驶突破现有边界。
穿梭三界(全地形全天候)亦如履平地,至此方证“无人驾驶”天道。
后记:
本来,除了 FSD 还要写另外两款典型的智驾芯片英伟达的 orin-x 和华为的昇腾 610,但是篇幅太长了,等下次再补上。
END
作者:歪睿老哥
文章来源:歪睿老哥
推荐阅读
- 深入了解 PCIe 协议
- 当机器人学会扫堂腿:一场踢向万亿市场的芯片机遇
- 递归设计:高效实现前导 0 计算电路
- 一文搞懂 CRC 的并行实现
- 浅谈 PCIe PHY:Original 与 SerDes PIPE Architecture 对比
更多 IC 设计干货请关注IC设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。