Page 41 - 《软件学报》2020年第9期
P. 41
2662 Journal of Software 软件学报 Vol.31, No.9, September 2020
2.2 硬件计算平台所面临的关键问题
实时系统要求在系统实际执行之前对时间行为进行分析,以确保在运行时系统的时间约束能够得到满足.
一般通过任务级时间行为分析 [48] ,即最坏执行时间(worst-case execution time,简称 WCET)分析,与系统级实时
调度与调度分析 [49] 加以保证.WCET 分析的主要功能是分析程序的执行路径信息以及程序对硬件的访问行为,
从而求得最坏执行时间.实时调度分析的目标是:在给定每个任务的 WCET 以及系统的实时调度算法的情况下,
利用数学手段分析系统中的所有任务是否能在截止期之前完成.在 GPU 目标硬件平台上部署实时 DNN 任务需
要解决以下 6 个主要问题:
(1) 针对 GPU 的 WCET 分析和实时调度分析尚不成熟
CPU 和 GPU 在体系结构上存在本质不同,导致 CPU 程序与 GPU 程序的执行特性、访存特性差别很大,这
对程序的时间行为有巨大影响 [50] .现有的实时系统研究大多针对于 CPU,相关技术不能直接用于 GPU 程序的分
析.现有的 GPU 性能分析与优化相关研究主要考虑系统的平均性能,而非实时性能(即最坏情况下的性能)与可
调度性,因此也无法满足实时系统的要求.相对于 GPU 硬件的快速发展,面向 GPU 的实时系统时间分析与优化
已严重滞后,这成为了 GPU 面向实时嵌入式系统应用的主要障碍.
(2) GPU 调度机制的细节信息不公开
文献[51]指出:当前主流的 GPU 生产厂商(例如 NVIDIA)出于商用机密的原因不公开 GPU 内部调度器的调
度逻辑,客观上对实时 GPU 任务负载的可调度性分析造成了障碍.而且厂商有可能在没有任何通知的情况下,
在新版本的 GPU 上修改调度逻辑.此外,由于 GPU 厂商的主要市场是高性能计算领域,提高任务的吞吐量和减
小执行时间延迟是 GPU 调度器要追求的目标,这种调度策略必然不适合实时系统中任务的执行时间需要具有
可预测性的要求.毫无疑问,嵌入式 GPU 调度策略的透明性给自动驾驶的安全性埋下了隐患.
(3) GPU 上执行混合关键任务会发生任务间干涉
GPU 上运行单个任务时,该任务独享 GPU 上的所有硬件资源,包括流处理器簇(SM)、cache、寄存器文件、
内存、PCI-E 总线等.当 GPU 上执行混合关键任务时,由于需要共享资源,一个任务的执行时间将受到其他并行
任务的干涉 [52] .干涉会增加系统执行时间的不确定性,如果设计不当,会造成系统整体执行性能的严重下降.同
时,干涉会导致任务的状态空间随并行任务的增加呈现指数爆炸,这为任务级时间分析带来了巨大的挑战.还需
要注意一点:一个 GPU 程序往往包含若干个 kernel 函数,在运行时会为每个 kernel 函数分配线程块(第 1.3 节).
线程块是 GPU 资源分配的单位,线程束是 GPU 调度和执行的单位.这是比 GPU 任务更加细粒度的执行元素,
增加了分析与调度的难度.
(4) GPU 不支持对混合关键任务的抢占
早期的 NIVDIA GPU(如 Tesla,Fermi,Kepler,Maxwell 架构)不提供抢占机制.Pascal 架构开始为图像任务和
计算任务提供像素级(pixel-level)抢占和线程级(thread-level)抢占支持 [53] ,但这是针对单 GPU 程序使用场景,目
的是提高单任务的实时性.但是 GPU 调度器所提供的抢占粒度太小,不足以在任务级实现支持混合关键任务的
动态优先级调度如 EDF(earliest-deadline first,最早时限优先)等.
(5) CPU+GPU SoC 平台上存在 CPU 和 GPU 之间协同的不确定性
在 NVIDIA Jetson TX2 嵌入式 SoC 平台中,CPU 和 GPU 共享了 8GB 的 DDR 内存(图 3).文献[54]指出,CPU
与 GPU 在访问共享内存可能会发生冲突造成 CPU 任务和 GPU 任务访存延迟的不确定性.由于 GPU 没有中断
线路,所以响应 CPU 通知事件的唯一方式是通过 CUDA 的同步机制.文献[51]指出:CPU 与 GPU 之间的同步操
作存在时间不确定性,同步操作完成的时间取决于在 GPU 上同时运行的其他任务,从而造成 GPU 任务的响应时
间无确定上界.除了 CUDA 的显式同步操作(如 cudaDeviceSynchronize,cudaStreamSynchronize)完成时间的不确
定性,一些共享内存访问的操作也会引发隐式同步行为,更增加了时间不确定性和分析的难度.
(6) GPU 工作温度过高会自动触发 GPU 降频运行
NVIDIA 开发者社区的一篇技术文章 [55] 指出:在不做任何设置的情况下,NVIDIA GPU 的工作频率会随着
GPU 的工作温度变化、能耗管理策略自动调整 GPU 工作频率,并呈现频繁的波动变化,导致同样的 GPU 程序