01 异构ADS芯片的背景
ADS因其减少交通事件和无人驾驶的能力而备受关注。传统的ADAS功能在当今市场上已经被广泛运用,例如自动紧急刹车和车道保持,是当检测到危险时,通过对制动、加速以及转向的大略掌握来实现的。而对付最新的ADAS功能,例如自适应巡航和智能停车,则须要对车辆的转向以及速率进行更加精确的掌握。但是,这些高等的功能只能在限定的场景或者区域运行。在不久的将来,更高等的 ADS系统有望在更广泛的区域(如拥挤的城市街道、路况繁芜的村落庄街道)支持更智能的掌握,如自动紧急转向和自动代客停车[1]。

ADS可以掌握车辆的移动,它们可以从多个传感器(例如摄像头、Radar、Lidar)的输入中识别物体,并根据识别的结果做出车辆掌握的决策。Figure 1是ADS运用的示例[2]。

Figure 1. ADS运用的示例
该示例包含四个流程:
a.在Sensing过程中, ADS系统吸收来自多个传感器的信息;
b.在Perception过程中,ADS系统对行人、车辆、路面、红绿灯、交通标志等物体进行检测和分类,识别其位置,预测周围物体的行为;
c.在Planning过程中,ADS系统利用Perception过程的结果方案出车俩的路径;
d.在Control过程中,ADS系统通过掌握转向、加速和制动来掌握车俩的运动
为了实现目标检测和运动轨迹预测,图像识别和机器学习是ADS系统的必备技能。深度学习的引入,可以实现更高的检测精度和跟踪更多的目标[3]-[7]。但是,这也使得ADS系统变得更加繁芜。此外,估量未来的ADS系统可以更进一步的掌握车辆,使得全自动驾驶成为可能。因此,ADS的运用程序须要大算力、高性能和低功耗的SoC芯片。
为了同时兼顾高性能和低功耗,ADAS/ADS的芯片常日会采取异构的SoC架构。Figure 2是NVIDIA的Orin系列芯片的架构图[8]。该SoC内部有Arm Cortex-A78AE CPU,NVIDIA Ampere GPU,NVDLA,vision accelerator等多种加速器。
Figure 2. Jetson AGX Orin Series Functional Block Diagram
02 任务调度的模型与实现
构建一个拥有大量异构加速器的软硬件系统并非易事。Figure 3是一个异构SoC系统示例,个中包含利用shared memory的CPU和多种加速器[9]。由于加速器可能须要利用CPU生产的数据,因此内存的coherence和consistence的设计十分具有寻衅。并且操作系统的堆栈、编译器以及调度器都须要重新设计,加速器的粒度也须要仔细定义。因此,编程模型的选择、调度器的设计是ADS系统的主要问题,好编程模型和调度器可以极大的提高算法在ADS芯片中的运算效率。
Figure 3. 异构SoC系统示例
学界和工业界一贯在探求不同级别的并行编程模型来提高打算性能,常日的并行编程模型有ILP (Instruction Level Parallelism)、TLP (Thread Level Parallelism)和DLP (Data Level Parallelism),如Figure 4。这三种并行模型均与打算机体系构造的发展相吻合。处理器中的指令乱序调度使得ILP的能力大幅增长;多核的设计使得TLP变尤为主要;vector打算单元的增加,例如GPGPU,使得DLP得到有效利用。
Figure 4. ILP、TLP和DLP示意图
异构ADS芯片拥有大量的专用异构加速器。ILP、TLP和DLP并不能充分发挥异构加速器的打算潜能,因此选择一种新的编程模型作为ADS算法和芯片的接口迫不及待。异构加速器的利用天然为task作为打算单元铺平了道路,TLP (Task Level Parallelism)也顺理成章的被引入进来。个中,task是将一组指令定义成原语的抽象层级,该原语可以在程序中重复利用。用户的线程可以由多个task组成,常日一个task是由芯片中一种加速器实行的。如Figure 5所示,多个task可以根据不同的算法和运用处景构成DAG实现细粒度并行,task之间的边表示依赖关系。
Figure 5. 由多个task构成的DAG
常日,基于task的并行打算环境由两个组件组成:
(1)任务并行API和
(2)任务runtime系统[10]
前者定义了开拓职员描述并行性、依赖性、数据分发等的办法,而后者定义了环境的效率和能力。runtime确定了支持的体系构造、调度的目标、调度策略和非常处理等。但是,这种基于软件的调度用具有固有的缺陷:
a.在CPU上运行调度程序实例是一种开销,当任务粒度较小、加速器数量很多时,软件调度会占用大量的CPU资源,并且使得端到真个打算效率发生显著低落;
b.任务在加速器上实行结束,必须通过具有长延迟的中断来关照CPU,进一步导致调度的latency变大;
c.调度的软件开销、延迟开销导致无法编译出细粒度的任务,导致无法利用细粒度的并行性;
Figure 6是不同的任务粒度对OmpSs软件调度器加速效果的影响[11]。在前半段,当任务粒度变小时,Speedup是逐渐上升的;当任务粒度逐渐降落到某个点时,调度开销已经无法被打算粉饰,Speedup开始低落。
Figure 6. OmpSs在不同任务粒度下的加速器效果
如果ADS系统中包含一个SoC级别的硬件任务调度器,则可以大大减轻上述缺陷,编译器可以编译出细粒度的任务来充分利用细粒度的并行。Figure 7是在Figure 3的根本上,将HTS (Hardware Task Scheduler)加入到包含CPU和各种加速器的系统中[9]。
Figure 7 包含HTS的异构SoC系统
CPU可以将任务和任务间的依赖关系都推送到HTS,CPU只须要轮询任务完成行列步队、处理非常等。HTS会掩护多少个任务行列步队,类似与OoO CPU中实行的指令。HTS会掩护全体系统中每个加速器的忙闲状态,并将任务发送给空闲的加速器上。
当任务实行结束时,加速器写任务完成描述符来关照HTS,这比中断处理快几个数量级。HTS可以处理任务间的依赖关系,当某个任务依赖解除时,HTS会以无序的办法调度该任务,这可以在异构ADS系统中带来巨大的速率提升。如Figure 8所示,HTS的调度比较于runtime带来显著性能提升[9]。
Figure 8. HTS比较于runtime带来的性能提升
因此,任务调度可以显著提升ADS芯片的打算效率。
03 任务调度洞察
业内已经有一些将任务调度运用到ADS的示例了。
Apollo Cyber RT是一个专为自动驾驶设计的开源runtime框架。它是基于中央化的打算模型,针对自动驾驶场景的延迟低、并发高和吞吐高进行了专门优化。Cyber RT在Apollo中紧张的浸染是一个中间件,作为RTOS和自动驾驶各个模块的中间通信接口。Cyber RT在Apollo架构中如Figure 9所示。
Figure 9. Apollo架构
Cyber RT的运行流程如Figure 10所示。编译器会将算法编译成DAG,每个算法都可以进行优先级、运行韶光及利用资源等方面的配置;Cyber RT可以结合DAG创建任务,并为每个任务分配一个coroutine;调度器根据调度任务类型以及调度策略等将任务放入对付Processor的行列步队中进走运算。
Figure 10. Cyber RT运行流程
Cyber RT的调度逻辑如Figure 11所示。每个Processor均有一个任务行列步队,由Scheduler将行列步队中的任务编排好;任务在哪个Processor上运行,哪些任务先运行,哪些后运行,均由调度器统一调度;任务实行发生壅塞时,支持context switch;支持Thread级的高低优先级抢占。
Figure 11. 调度策略
比较于Apollo纯软件调度,Ascend供应了软硬件结合的调度方案。Ascend开拓软件栈支持原生的可微分编程范式和原生的实行模式,在开拓效率和打算效率之间进行了折中。一方面,开拓者可以轻易的将DNN模型支配到各种Ascend设备上,这些设备也可以配备不同的Ascend core上。开拓者可以利用high-level的编程模型实现一次性的开拓和按需支配。另一方面,拥有更多架构知识的专家可以利用low-level的编程模型和库进一步提高打算效率。Ascend的开拓软件栈如Figure 12所示[12]。
Figure 12. Ascend开拓软件栈
Pytorch、Tensorflow和MindSpore等DNN开拓框架处于全体开拓软件栈的顶端。MindSpore是Ascend core的专用框架。它可以充分的利用Ascend的打算资源,实现很高的打算效率。这些DNN开拓框架的输出被称为“Graph”,它表示算法中粗粒度的依赖关系。然后,如Figure 13所示,Graph Engine会对“Graph”进行切分,将适宜CPU逻辑处理的算子切分到CPU子图,将打算密集型算子切分到专用加速器子图[13],即被转换成Stream。个中,Stream是由多少个有序的Task组成[12]。
Figure 13. Graph切分示例
TBE (Tensor Boost Engine) DSL (Domain Specific Language)是用Level-3编程模型开拓的,可以让没有硬件知识的用户也可以在这个级别编写代码,也称为数学编程级别。在编译器的帮助下,可以从TBE DSL描述中自动天生实例Tasks[12]。
程序员还可以在parallel/kernel level (Level-2)编程模型中开拓实例task。此级别类似于GPU 的 CUDA 或 OpenCL。它引入了所谓的TIK (Tensor Iterator Kernel)接口,用于利用 Python 进行并行编程。专用的编译器技能,称为Auto Tiling,用于将大的task转换为小的task,以适应 Ascend 架构。在强化学习算法的帮助下,该技能通过智能搜索合法映射空间,为任何程序供应最佳的映射和调度[12]。
如Figure 12所示,编程模型的Level-1是C编程接口,也称为CCE-C (Cube-based Compute Engine)。在这个Level,架构的所有设计细节都是向开拓者公开的。开拓者可以在C代码中嵌入汇编,从而充分的利用硬件加速能力[12]。
如上文所述,APP在不同Level的编程模型会被转换为不同的表达形式,即Stream、Task和Block,如Figure 14所示[12]。所有的这些表达在不同级别的调度器中并行实行,详细先容如下:
运用层:多个运用可以在同一个Ascend SoC上并行实行。Stream/Task层:图编译器会将每个运用编译成多个Stream,每个Stream中有多个Task。多个Stream的Task可以在TS (Task Scheduler)的调度下并行实行,同一个Stream的Task串行实行。TS在Ascend SoC如Figure 15所示[14]。Block层:每个Task可以被分成多少个Block(须要由开拓者或编译器显式描述),不同的Block可以被分发到不同的Core上实行。Figure 14. Ascend调度层级
Figure 15. Ascend 310 SoC架构图
参考文献
1.ZERO, IN PURSUIT OF VISION. "Euro NCAP 2025 Roadmap." (2017).
2.Yamada, Yutaka, et al. "A 20.5 tops multicore soc with dnn accelerator and image signal processor for automotive applications." IEEE Journal of Solid-State Circuits55.1 (2019): 120-132.
3.Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. "Imagenet classification with deep convolutional neural networks." Advances in neural information processing systems 25 (2012).
4.Simonyan, Karen, and Andrew Zisserman. "Very deep convolutional networks for large-scale image recognition." arXiv preprint arXiv:1409.1556 (2014).
5.Girshick, Ross, et al. "Rich feature hierarchies for accurate object detection and semantic segmentation." Proceedings of the IEEE conference on computer vision and pattern recognition. 2014.
6.Long, Jonathan, Evan Shelhamer, and Trevor Darrell. "Fully convolutional networks for semantic segmentation." Proceedings of the IEEE conference on computer vision and pattern recognition. 2015.
7.He, Kaiming, et al. "Deep residual learning for image recognition."Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.
8.NVIDIA Jetson AGX Orin Series Technical Brief, 2022.
9.Hegde, Kartik, Abhishek Srivastava, and Rohit Agrawal. "HTS: A hardware task scheduler for heterogeneous systems." arXiv preprint arXiv:1907.00271 (2019).
10.Thoman, Peter, et al. "A taxonomy of task-based parallel programming technologies for high-performance computing." The Journal of Supercomputing 74.4 (2018): 1422-1434.
11.Tan, Xubin, et al. "Performance analysis of a hardware accelerator of dependence management for task-based dataflow programming models." 2016 IEEE International Symposium on Performance Analysis of Systems and Software (ISPASS). IEEE, 2016.
12.Liao, Heng, et al. "Ascend: a scalable and unified architecture for ubiquitous deep neural network computing: Industry track paper." 2021 IEEE International Symposium on High-Performance Computer Architecture (HPCA). IEEE, 2021.
13.https://www.mindspore.cn/docs/zh-CN/r1.8/design/heterogeneous_training.html
14.Liao, Heng, et al. "DaVinci: A Scalable Architecture for Neural Network Computing." Hot Chips Symposium. 2019.










