第一章:智能驾驶芯片概览:从ADAS到自动驾驶的算力需求演进,主流芯片架构对比
各位同学,大家好。我是你们这堂课的主讲人。咱们开门见山,直接聊芯片。
做智能驾驶加速器,你首先得知道你的“战场”在哪。说白了,就是得搞清楚我们手里的芯片,到底要处理什么样的数据,跑什么样的算法。我个人习惯,在开始任何架构设计之前,先画一张大图,把整个系统的算力需求摸透。
1.1 算力需求的演进:从“够用”到“冗余”
早期的ADAS,比如车道保持、自动紧急制动,算力需求其实不高。几TOPS的算力,用个MCU或者低端的FPGA就能搞定。那时候的算法也简单,主要是传统的计算机视觉算法,比如Canny边缘检测、HOG特征提取。
但到了L3级以上的自动驾驶,情况就完全变了。你想想看,车要处理多路高清摄像头、激光雷达、毫米波雷达的数据。算法也从CNN进化到了Transformer,甚至开始引入BEV(Bird‘s Eye View,鸟瞰视角)感知。这算力需求,是指数级增长的。
核心观点: 算力需求不是线性增长,而是随着传感器数量和算法复杂度的提升,呈现“J型曲线”爆发。我个人在做一个L4级项目时,发现仅仅一个BEV感知模块,就吃掉了整个芯片80%的算力。这让我意识到,架构设计必须提前为这种“算力黑洞”做好准备。
我给大家整理了一个简单的演进表格,方便你们理解:
| 自动驾驶等级 | 典型功能 | 算力需求 (TOPS) | 主流芯片方案 |
|---|---|---|---|
| L0-L2 (ADAS) | ACC, LKA, AEB | 1 - 10 | MCU, 低端FPGA |
| L2+ (高阶辅助) | NOA, 记忆泊车 | 10 - 100 | Mobileye EyeQ5, 地平线征程3/5 |
| L3 (有条件自动驾驶) | 高速领航, 城区领航 | 100 - 500 | 英伟达Orin, 华为昇腾610 |
| L4/L5 (高度/完全自动驾驶) | 全场景无人驾驶 | 500+ | 英伟达Thor, 特斯拉FSD (定制) |
嗯,这里要注意,TOPS只是算力的一个维度。实际项目中,内存带宽、数据通路延迟、能效比,这些往往比峰值算力更关键。我曾经踩过一个坑,选了一颗峰值算力很高的芯片,结果因为DDR带宽不够,实际推理帧率连标称的一半都达不到。所以,看芯片不能只看TOPS。
1.2 主流芯片架构对比:四家争霸
现在市面上主流的智能驾驶芯片,基本就是四家:英伟达、特斯拉、华为、地平线。它们的架构思路,各有千秋。
1.2.1 英伟达Orin:通用计算的“巨无霸”
Orin的架构,说白了就是“堆料”。它用了大量的CUDA Core和Tensor Core,配合高速的互联总线。好处是通用性极强,什么算法都能跑,生态也最成熟。坏处是功耗高,成本也高。我个人觉得,Orin更适合做L3+的“大脑”,负责处理最复杂的多模态融合和决策规划。
1.2.2 特斯拉FSD:极致定制的“偏执狂”
特斯拉FSD芯片,是我见过最“偏执”的设计。它完全抛弃了通用GPU,转而使用大量的专用NPU(神经网络处理器)和SRAM。每个NPU核心都针对CNN做了极致优化,数据流设计得非常高效。它的理念是:既然我只跑神经网络,那就把神经网络跑到最快。代价是灵活性差,算法迭代必须跟着硬件走。
1.2.3 华为昇腾:全栈自研的“生态玩家”
华为昇腾系列,走的是“达芬奇”架构。它把计算单元分成了3D Cube、Vector和Scalar三类,分别处理矩阵运算、向量运算和标量运算。这种设计,在运行Transformer这类混合精度模型时,效率很高。而且华为有全栈软件栈,从芯片到框架到工具链,都给你配齐了。我建议,如果你团队规模不大,想快速出产品,昇腾是个不错的选择。
1.2.4 地平线征程:软硬协同的“务实派”
地平线的征程系列,强调“软硬协同”。它的BPU(Brain Processing Unit)架构,针对自动驾驶场景的典型算子做了深度优化。比如,它专门设计了“卷积加速引擎”和“非线性加速引擎”。而且,地平线提供了非常友好的开发工具,可以让你在算法和硬件之间快速迭代。我记得有一次,我们用征程5部署一个轻量级模型,从移植到调优,只花了两周时间,效率非常高。
避坑指南: 选芯片架构时,不要只看纸面参数。我曾经见过一个团队,选了算力最高的芯片,结果因为工具链不成熟,模型部署花了三个月。所以,我建议你们在做架构选型时,一定要把“生态成熟度”和“工具链易用性”作为核心指标。
1.3 NPU在SoC中的位置与作用
好了,聊完宏观的芯片对比,我们聚焦到NPU本身。NPU在SoC里到底扮演什么角色?
你可以把SoC想象成一个“城市”。CPU是“市长”,负责统筹调度;GPU是“体育馆”,能处理各种通用计算;而NPU,就是“专用工厂”,专门用来生产“神经网络推理”这个产品。
NPU的核心作用,就是加速神经网络的计算。它通常包含以下几个关键模块:
- 计算阵列(PE Array): 这是NPU的心脏,由大量乘加单元(MAC)组成,专门处理卷积和矩阵乘法。
- 片上存储(SRAM/Buffer): 用于缓存权重和中间特征图,减少对片外DDR的访问。这是NPU性能的关键。
- 数据通路(Data Path): 负责在计算阵列和存储之间搬运数据。设计得好,可以做到“数据流式计算”,极大提升效率。
- 指令控制器(Sequencer): 负责解析神经网络模型,生成计算指令。
在SoC中,NPU通常通过高速总线(如AXI总线)与CPU、GPU、DDR控制器相连。它的工作流程一般是:CPU下发任务 -> NPU从DDR加载模型和输入数据 -> NPU完成推理 -> 将结果写回DDR -> CPU读取结果。
为了让大家更直观地理解,我画了一张NPU在SoC中的位置图:
从这张图你可以看到,NPU并不是孤立存在的。它需要和CPU、GPU、DDR紧密配合。在实际调优中,我经常发现瓶颈不在NPU本身,而在总线带宽或者DDR访问延迟上。所以,做NPU加速器调优,一定要有“系统级”的视角,不能只盯着NPU内部看。
警告: 很多初学者容易犯一个错误:只关注NPU的峰值算力,而忽略了数据搬运的开销。记住,在神经网络推理中,数据搬运消耗的能量和延迟,往往比计算本身还要大。所以,优化数据流,减少片外访问,是NPU调优的核心中的核心。
好了,第一章的内容就到这里。我们梳理了算力需求的演进,对比了四家主流芯片的架构思路,也明确了NPU在SoC中的位置和作用。这些是后续所有调优工作的基础。下一章,我们会深入NPU内部,聊聊它的微架构设计。
公众号:蓝海资料掘金营,微信deep3321