随着智能驾驶行业的发展,智能驾驶功能日益复杂,领航高速辅助、领航城区辅助、跨层记忆泊车等功能逐渐落地。智能驾驶系统对传感器、算力需求日益旺盛。
智能驾驶系统既需要大量的算力,也需要多种类型的计算资源,典型的智能驾驶系统处理流程如下。
它接收并处理原始传感器信号,对车周环境进行实时的在线感知,其中包括对道路结构、车道线等静态元素,以及车辆、行人等动态障碍物的检测识别。经过多传感器和时序信息融合,转化为环境的统一表示,然后经过运动预测和决策规划模块生成本车的行驶轨迹,并转换成车辆控制信号输出到车辆执行器,从而完成自主驾驶的行为。
整个系统处理过程通常需要涉及以下几种类型的计算资源:
-
深度学习类: 环境感知模块是深度学习算力使用的大户,包括常见的各类图像、激光点云检测算法,比如物体检测、车道线检测、红绿灯识别等,都会涉及大量的典型神经网络(NN)的运算。此类模块通常使用高度定制化的NN加速器来实现。
-
视觉处理类:此类属于计算密集型,但并非深度学习类的算法模块,比如图像信号处理(ISP)、图像金字塔(Pyramid)、畸变矫正(Rectify)、局部特征提取、光流跟踪、图像编解码(Codec)等运算。此类模块通常使用硬化的专用视觉加速器来实现低时延。
-
通用计算类:虽然定制化的深度学习、视觉处理加速器可以满足大部分常见的成熟的计算密集型运算,但仍然无法覆盖全部需求。随着前沿技术的快速发展和自研技术的深入,往往还会产生相当一部分自定义的运算模块。此类模块通常也是计算密集型的操作,无法使用CPU高效实现,因此还需要通用的计算密集型处理单元(比如DSP、GPU)来实现。
-
逻辑运算类:此类模块包含大量的逻辑运算,不适合使用计算密集型的处理器实现,一般使用通用的CPU处理器来实现。此类模块包括常见的多传感器感知融合算法(比如卡尔曼滤波KF)、基于优化的决策规划算法、车辆控制算法、系统层面的功能逻辑、诊断逻辑、影子模式数据挖掘功能等。
典型的智能驾驶系统算力部署参考如下图。
如何在众多的SoC中挑选一颗匹配自家产品的SoC是一门复杂的系统工程,不单需要考虑深度学习算力,还需要考虑CPU算力、安全、内存带宽、功耗、成本等。
大疆车载致力于提供最佳性价比的智能驾驶方案,在核心芯片的选型上积攒了一些经验,在此予以分享。
一颗典型SoC的主要组成
1. CPU
CPU的内部架构可以简化为如下模型。
包括负责逻辑运算的ALU、取指/分支预测/数据转发等的Control、Cache和RAM等存储单元。相对GPU等并行运算核心,CPU的Control单元和存储单元功能更加强大,适合做逻辑控制。
在车载SoC中,根据功能不同CPU又分为Safety MCU和ACPU,前者性能较弱但实时性和安全性更强,后者多核心、高主频、性能强大但实时性和安全性有所降低。
1.1 Safety MCU
Safety MCU有多种常见的CPU架构,如英飞凌的TriCore、瑞萨的G3KH、ARM Cortex M7、ARM Cortex R5F。既有外置的MCU方案,也有内置的MCU方案,如TI TDA4内置Cortex R5F,SoC一般会内置Safety MCU来提高系统的集成度。
例如,Cortex R5F MCU核心的内部架构复杂程度参考下图,主要特点如下:
-
8级流水线;
-
CPU主频可以支持到1.0 Ghz,远超传统MCU;
-
Data Processing Unit负责各种运算和逻辑控制;
-
FPU负责浮点运算;
-
L1 Instruction/Data Cache是一级缓存,参考容量16KB+16KB;
-
Memory Protection Unit用于内存保护,保护能力有限,一般只能支持十几个区域的保护;
引自《DDI0460D_cortex_r5_r1p2_trm.pdf》
Safety MCU的核心一般是成对出现的,如下图的“Primary Core”和“Shadow Core”,两者实现指令级别的锁步(lock-step),通过“Compare”进行比较:周期性比较两个核的输出结果是否相同;如果相同则继续运行,否则需要采取一定的安全措施。容易看出,锁步核虽然用了两个核心,但其实只有一个核的算力。锁步核是实现MCU核心高诊断覆盖度的一种传统方法,这种方法已经在微控制器和复杂度较低的微处理器领域经过多年的成功验证。
Safety MCU除要求CPU核心达到ASIL D外,往往会要求内部总线、外设接口、电源等跟Main Domain隔离。否则,可能因为低安全级别的Main Domain的异常,如错误操作外设寄存器,导致MCU Domain异常。
Safety MCU的算力一般使用KDMIPS(Kilo Dhrystone Million Instructions executed Per Second)表示,如Cortex R5F的算力约2 KDMIPS。
因为MCU 运算和内存资源比较有限,且不支持MMU(Memory Management Unit,比MPU强大的内存管理单元),一般只能运行如FreeRTOS之类的小型RTOS。车载行业一般要求RTOS达到ASIL D级别,常用的MCU RTOS主要有AUTOSAR OS, SafeRTOS。一般没有配套的libc和STL库,对C++的支持不够友好,比较难开发维护复杂软件。因为Safety MCU的软硬件的安全性和实时性都较高,一般用于运行整车的数据交互、诊断、控制算法等软件。
综上,我们在进行Safety MCU选型时,除了关注Safety MCU的算力,还需要重点关注总线、外设等的隔离性,另外也需要关注片内RAM的大小。
1.2 ACPU
常用的ACPU的架构有MIPS和ARM,但以ARM的Cortex A系列为主。相比较MCU,ACPU的架构更复杂、主频更高、Cache和RAM性能更优,整体性能更强。
例如,Cortex A72 ACPU核心的内部架构复杂程度参考下图,比Safety MCU要复杂许多,相同主频下算力约为Cortex R5F的3倍,主要升级如下:
-
15级流水线:
– Branch prediction可以提升分支预测的成功率;
– Decode可以支持多条指令并行解码;
– Dispatch可以支持同时发射多条指令;
– Interger execute / Adv SIMD and FP / Load store等多个执行单元可以并行工作;
-
可以支持更高的CPU主频,如2.0 GHz;
-
Instruction / Data Cache是一级缓存,参考容量48KB+32KB;
-
二级缓存一般较大,参考容量1MB,可极大降低指令和数据Cache Miss的概率,减少对DDR的访问;
-
支持MMU,可实现内核态和用户态之间、不同进程之间的地址隔离,提高内存访问的安全性;
引自《cortex_a72_mpcore_trm_100095_0003_06_en.pdf》
对L2+系统,除要求ACPU核心达到ASIL B外,常用外设一般也要求达到ASIL B,如IPC/DMA/CSI,具体硬件安全级别要求依赖功能安全分解。
ACPU的算力一般使用KDMIPS表示,如Cortex A72的算力约11 KDMIPS。ACPU的算力取决于使用的CPU核心的架构和CPU的主频,一般架构越新支持的主频越高,常用CPU核心算力信息参考如下。
以AE结尾的ACPU Core可以支持锁步,实现ASIL D功能安全级别,如Cortex-A65AE。未来L3~L4系统会对ASIL D ACPU算力有越来越多的需求。
ACPU的资源富足,主频高,一般运行大型操作系统,如Linux。对于L2+的系统,一般功能安全会拆分出对操作系统ASIL B级别的要求,此时一般会选择QNX / VxWorks。此类操作系统,可以支持多进程,不同进程使用不同的地址空间、彼此隔离;同时可以支持智能驾驶系统成百上千个线程的复杂调度。一般会配套的libc和STL库,且部分库是通过功能安全认证的,对于复杂的上层软件的开发比较友好。
ACPU一般用于传感器数据的输入、预处理、加速器的调度、感知融合、导航规划等软件模块的部署。NN算力的增加,意味着需要处理更多的传感器、更高分辨率的相机、更丰富的场景、更复杂的功能。相应的,ACPU算力需求也会增加,以支持更多更高分辨率传感器数据的预处理、深度学习模型的前后处理、更复杂的感知融合功能、轨迹预测和行为规划、影子模式数据挖掘功能等。
综上,ACPU的选型需要重点关注算力,同时需要留意外设和操作系统的功能安全级别。此外,ACPU算力应该和NN算力相匹配,以发挥最优的系统性能。
2. 并行计算
2.1 DSP
DSP芯片,也称为数字信号处理器,是一种具有特殊结构的微处理器,相比于通用CPU,更适用于计算密集度高的处理。
在DSP芯片内部,通常采用程序和数据分开的哈弗结构,广泛采用流水线操作,同时具有专门的硬件乘法器,提供特殊的DSP指令,可以用来快速的实现各种数字信号处理算法。
DSP芯片一般具有如下的主要特点:
-
程序和数据空间分开,可以同时访问指令和数据;
-
片内具有快速RAM,通常可通过独立的数据总线进行连接;
-
有专门的硬件乘法器,在一个指令周期内可完成一次乘法和一次加法;
-
具有低开销或无开销的循环及跳转的硬件支持;
-
在单时钟周期内可以操作多个硬件地址发生器;
-
具有快速中断处理和硬件I/O支持;
-
支持流水线操作,使不同指令之间的取指、译码和执行等操作可以并行执行;
与通用微处理器相比,DSP芯片的其他通用功能相对较弱一些。DSP结构示图如下。
通过独立的指令总线和数据总线与外部数据存储进行连接,外围通常会配置L1和L2 cache,提高数据存取效率。
内部主要分为程序控制单元(PCU)、地址发生单元(AGU)和数据计算单元(DALU),外加一些地址寄存器和数据寄存器。每个处理单元都是独立的硬件模块,通过指令流水将各个模块并行起来处理,提高DSP的处理能力。
在DSP评估过程中,运算速度是DSP芯片的一个最重要的性能指标,通常有如下几个方面的考量:
-
数据位宽长度;
-
单周期内的乘累加个数;
-
寄存器个数;
-
单周期内同时可处理的指令个数;
-
内联指令丰富程度;
-
外围SRAM大小;
随着DSP在图像和机器学习领域的应用,芯片厂商对DSP也同样做了新场景的适配和支持,如TI的C71 DSP,除了支持常见的标量运算和矢量运算,还增加的矩阵乘加速器(MMA),进一步的提升了DSP的专用能力,让开发者更容易进行NN模型部署。
2.2 GPU
CPU的功能模块多,适合复杂的运算场景,大部分晶体管用在控制电路和存储上,少部分用来完成运算工作。GPU的控制相对简单,且不需要很大的Cache,大部分晶体管被用于运算,GPU的计算速度因此大增,拥有强大的浮点运算能力。
CPU与GPU架构对比示意图
当前的多核CPU一般由4或6个核组成,以此模拟出8个或12个处理进程来运算。普通的GPU就包含了几百个核,高端的有上万个核,这对于处理大量的重复处理过程有着天生的优势,同时更重要的是,它可以用来做大规模并行数据处理。
在应用方面,GPU适合前后计算步骤无依赖性、相互独立的计算场景,很多涉及到大量计算的问题基本都有这种特性,比如图形学的计算、挖矿和破解密码等,这些计算可以分解为多个相同的小任务,每个小任务由GPU中的单个核处理,GPU通过众核并发的方式提高同时处理小任务的个数,从而提高计算速度。而CPU更适合前后计算步骤严密关联,逻辑依赖较高的计算场景。
GPU相比CPU有几个特点:
-
运算资源非常丰富;
-
控制部件占得面积非常小;
-
内存带宽大;
-
内存延时高,对比CPU使用多级缓存缓解延时,GPU采用多线程的方式处理;
-
GPU处理需要数据高度对齐;
-
寄存器资源极为丰富;
所以,相对来说,GPU更适合处理分支少,数据量大,计算简单且重复的运算任务。
2.3 深度学习能力
广义上来说,只要能够运行人工智能算法的芯片都叫做深度学习芯片。但是通常意义上的深度学习芯片,指的是针对深度学习算法做了特殊加速设计的芯片。
通常来说,深度学习芯片普遍以OPS(Operations Per Second)为单位来评估深度学习的理论峰值算力。OPS的物理计算单位是乘积累加运算(Multiply Accumulate, MAC),是在微处理器中的特殊运算。1 * MAC = 2 * OPS。实现此运算操作的硬件电路单元,被称为“乘累加器”。这种运算的操作,是将乘法的乘积结果b*c和累加器a的值相加,再存入累加器a的操作:
a ← a + b*c
深度学习算力理论值取决于运算精度、MAC的数量和运行频率。对于定点和浮点计算单元共用核心的加速器,可大致简化为INT8精度下的MAC数量在FP16精度下等于减少了一半,FP32再减少一半,依次类推。例如,假设芯片内有512个MAC运算单元,运行频率为1GHz,则INT8的算力为512 * 2 * 1 GHz = 1 TOPS(Tera Operations Per Second),FP16的算力为0.5TOPS,FP32的算力为0.25TOPS。
通常,各大芯片厂商宣传的TOPS往往都是运算单元的理论值,而非整个硬件系统的真实值。实际运行起来,真正的有效算力可能只有理论值的30%算力,甚至更低。这里就涉及到“算力利用率”的概念。比如说,某个神经网络模型需要的理论算力是1TOPS,而实际运行的SoC的标称算力是4TOPS,那么利用率只有25%。
以ResNet-50及MobileNet V1网络在SoC A和SoC B上的运行数据为例,实际的有效算力会因为图片分辨率、网络结构差异等原因而不同。
这又是什么原因呢?通常来说,实际的有效算力主要受两方面的影响:
1)处理器的计算架构:从上表可以看到,即使是同一款SoC,对不同网络结构的利用率差异也非常大。这是因为深度学习加速器本身是高度定制化的计算架构,只有执行和加速器特性比较匹配的网络结构才能发挥出较高的利用率。
2)存储带宽:存储带宽决定数据搬运的速度。如果存储带宽跟不上计算速度,则数据无法及时到达计算单元,导致处理器的计算单元空置,从而导致处理器的算力利用率大打折扣。智能驾驶应用的处理场景通常具有图像分辨率大、并行样本量(batch size)小、网络结构小的特点,这对于存储带宽的要求通常会更高。
同汽车的动力指标,马力不如百公里加速时间更真实反映整车动力性能;同理,有效算力比理论算力更能反映芯片实际性能。所以,在SoC选型时需要重点关注SoC全系统能够提供的有效算力。
2.4 算力多样化需求
在深度学习推理端,各家芯片往往都会根据自家的神经网络推理框架设计对应的NN处理器,各种TPU/NPU/DPU…层出不穷,芯片厂家根据神经网络特点,通过定制化的设计处理器,使得软硬件的适配度更高,从而提高芯片算力的利用率。
市场上,除了NN处理器,像高通/TI等公司的车载芯片,在SoC上配备了GPU/DSP/CV加速器等通用算力处理器来提高车载芯片的处理能力和算法开发的扩展性。
在智能驾驶系统中,大部分的计算可以通过深度学习处理器来完成。但是,对于一些算法开发能力较强的公司来说,会根据实际的业务场景需求,来设计自己的神经网络结构,芯片厂商提供的NN处理器的算子库无法满足他们的需求,往往存在一些自定义算子的开发。另外,ISP、多传感器融合、定位与建图等功能还会涉及一些非深度学习的视觉算法的实现。此时,车载芯片上的GPU/DSP/CV加速器将可以很好的补充这部分算力需求。
DSP能够提供低功耗的矢量处理能力,相比于CPU,可以使用DSP的SIMD指令很好的应对并行度高,数据连续性较好的算法。对于并行度高,但是数据连续性较差的算法,如果部署在DSP上,将对IO带宽带来很大的挑战,无法充分发挥DSP的计算能力,但是GPU的高并发特点,可以很好的应对这种算法。同时,GPU的图像处理能力能够满足智能驾驶场景中渲染和可视化的需求。
综上,SoC选型时,需要根据业务需求,合理规划和分配算力,实现SoC各个模块协调高效合作,而非只关注深度学习算力。
3. 安全
3.1 网络安全(Cybersecurity)
随着UNECE WP29 R155法规、ISO/SAE 21434标准的发布,国内也紧跟着发布了一系列车载网络安全相关的国标、法规,包括网络安全技术相关的、流程相关的、数据保护相关的等等,这一切表明网络安全在智能网联汽车行业的重视程度在逐日提升。
网络安全机制的实现讲究纵深防御,上层包括面向服务的应用防火墙、对服务访问的鉴权和授权等,中间层包括操作系统的进程访问权限管理、文件系统加密、以太网防火墙、安全通信、调试接口管控、安全审计等,底层包括安全启动、安全升级、安全存储、密钥管理等基础功能。在芯片选型时,关于网络安全往往会考虑如下方面:
-
芯片的封装。尽量选择BGA封装的芯片。
-
芯片防信道攻击的能力。目前很多侧信道攻击的手段可以很轻易获取到芯片运行时的关键资产,例如密钥。
-
芯片的调试接口。例如JTAG,可通过某种硬件机制永久关闭,或者可通过软件安全机制控制芯片调试接口的开关。
-
芯片的安全启动。安全启动一般起始于芯片的BootRom,通过校验固件的签名,来防止固件被恶意篡改,确保了固件的完整性。
-
芯片的安全运行环境。该运行环境主要用于管理芯片运行时的关键资产,例如芯片的安全配置、密钥等,并通过硬件来实现安全算法加速服务。
-
芯片的内存保护单元。例如MMU或MPU,该单元一般集成在处理器中,由运行在处理器上的操作系统进行配置,实现运行态的内核/进程/线程的地址虚拟化和数据隔离。
-
芯片唯一SN。一般会用于绑定、认证等安全业务。
除了以上技术要求之外,在芯片选型时,也需要考虑供应商网络安全资质的要求,例如是否有CSMS管理体系。
3.2 功能安全(FuSa)
众所周知 “智能驾驶、安全第一”。SoC作为智能驾驶控制器的核心,其安全性能是确保最终交付安全产品的关键。因此在SoC芯片的设计选型中,必须把功能安全作为核心指标进行评估:
-
SoC芯片支持的功能安全完整性等级(ASIL)是否满足最终产品的安全等级需求;
-
SoC芯片的安全设计是否匹配当前的产品的功能安全概念;
-
SoC芯片是否全面考虑支持不同驾驶自动化等级产品应用;
为了实现上述目标,同时需要对SoC供应商的功能安全的设计和开发能力进行全面评估:
-
对SoC的安全设计概念进行评估,包括安全需求、安全状态、故障容错时间间隔等;
-
对SoC的安全机制设计进行评估,包含诊断机制、自检机制、安全隔离和冗余设计等;
-
对SoC的安全分析结果进行评估,包括定性安全分析、定量安全分析和相关失效分析结果等;
-
对SoC的开发工具链的鉴定报告进行检查,包括工具软件的置信度评估结果,软件工具开发过程评估等;
-
对厂商提供的SoC相关的安全审核、认证和评估结果进行检查,包括是否是独立的第三方审核和评估,评估范围、评估报告的等;
功能安全的级别跟SoC的功能安全目标相关。评估时需要细分SoC内部各个模块的功能安全等级,从软件和硬件维度,确认SoC的功能安全设计是否能够全面、有效的满足自家产品的安全需求。在产品应用层面,还需要全面评估产品引入功能安全设计后,潜在的SoC算力需求增加、通信带宽增大、存储容量需求增加等方面的变化,确保SoC安全功能设计能够在项目中完整落地。
4. 其他
4.1 内存带宽
SoC内部的CPU、NN加速器、GPU等除了执行指令外,还会从DDR读取指令和读写数据。但DDR的访问不能单周期完成,典型的访问延时100ns+。尽管Cache在一定程度上可以缓解DDR的访问延时问题,但考虑到多核心并发、随机访问DDR,DDR带宽往往会成为CPU和各个加速器运行的瓶颈。例如,假设NN加速器处理一帧图像,50ms用于DDR数据的加载和存储,50ms用于在数据运算,此时帧率是10Hz;如果DDR的带宽减半,此时需要100ms用于DDR数据的加载和存储,50ms用于在数据运算,此时帧率为6.7Hz。可见,DDR带宽可以间接影响各个处理器和加速器的运行的效率。
常用的单通道(32bit) DDR的频率和带宽参考如下。
如下图为内存多通道交织的例子:如果只使用一个通道,对DDR的访问是单通道串行的;如果CPU同时连接到4通道的DDR,4个通道之间的访问可以并发,提高DDR带宽。
综上,除了关注DDR的单通道带宽外,还需要重点关注DDR的通道数,如理论上双通道的DDR带宽是单通道的2倍。
4.2 功耗和成本
相同的芯片规格,芯片的工艺会直接影响到芯片的功耗,如7nm和16nm 30T算力的SoC功耗大约为15W和30W。算力的增加同样会增加功耗,如7nm 30T和200T算力的SoC功耗大约为15W和100W。功耗的大小又会影响到结构和散热,较高的功耗需要增加风扇、尺寸、铜管、材料等,进一步增加域控制器的成本。
算力的增加也意味着芯片成本的增加,如200T算力的SoC的价格约为30T算力的SoC的7倍,所以在选择芯片规格的时候也要重点关注对算力的真实需求,过多的预留可能会导致成本的浪费。
综上,选型时除了关注工艺外,也需要考虑算力带来的散热和成本的增加。
SoC芯片是组成车载域控制器的核心器件,是智能驾驶的大脑。如何确保智能驾驶的大脑能够在相对合理的功耗和成本下有效处理各类业务,如环境感知、定位建图、运动预测、规划控制、影子模式等,是芯片选型的重中之重。
// 左右滑动查看下一篇
官网在这
原文始发于微信公众号(大疆车载):智能驾驶域控制器SoC选型