Page 48 - 《软件学报》2020年第9期
P. 48

张政馗  等:面向实时应用的深度学习研究综述                                                           2669


         个大的作业按照一个四级流水线的方式工作,以约束访存行为                       [102104] .所提出的调度算法能够用于硬实时系统.
         但是该工作的局限是只能够处理 GPU 程序,而无法分析 CPU+GPU SoC 系统计算的应用.CPU 与 GPU 在协同
         过程中会发生相互等待,Kim 等学者指出:如果存在任务自我等待(self-suspension)的行为,则传统的速率单调调
         度分析就不再成立       [105] ,还研究了如何把大的任务切分成小的任务,从而降低由于任务相互等待造成的 GPU 时
         间浪费.但是,如何为这些切分的任务分配固定优先级仍是一个主要挑战,这个问题的复杂度是 NP-hard.
             鉴于 NVIDIA 公司不公开 GPU 调度逻辑的细节,在文献[15]中,Smith 等学者通过在 NVIDIA Jetson TX2 上
         开展广泛深入的“黑盒实验”,揭示了该款嵌入式 GPU 调度器的 25 条隐含知识,并被归为 8 个大类:通用调度规
         则、非抢占执行条件、线程资源约束、GPU 片内共享内存约束、寄存器资源约束、拷贝操作条件、流(stream)
         规则、其他注意事项.其中,CUDA 流表示一个 GPU 操作队列,该队列中的操作(可能由多个主机线程发出)将以
         添加到流中的先后顺序而依次执行.可以将一个流看作是 GPU 上的一个任务,不同流里的任务可以并行执行.
         所以一个流对应于并发的概念,多个流对应并行的概念.这些在 NVIDIA 官方开发手册上找不到的调度细节,对
         CUDA 程序的优化以及对 GPU 调度器的建模都非常有帮助.另一方面,GPU 厂商提供的硬件调度算法尽管能将
         计算任务尽可能快速地分配给 SM 处理器完成计算任务,但是并没有提供实时系统动态优先级调度算法所必须
         的抢占机制.由于硬件条件的限制,基于软件机制实现 GPU 的 kernel 抢占的有效调度策略较为困难,传统的方法
         是对 kernel 进一步进行划分,增加调度的灵活性.Chen 等学者在文献[106]中提出 EffiSha 抢占调度框架,使用了
         一种新颖的以 SM 为中心的转换方法,对 kernel 的形式进行转换,将 kernel 内部用于计算 ID 的 blockIdx.x 用
         taskId 进行替换,解除了 block task 与 thread block 的绑定关系,实现了 block 级别的抢占调度.但是该框架目前只
         支持单个 stream 的情况,在扩展性和效率等方面有所欠缺.Wang 等学者在文献[107]中研究了一种动态的 thread
         block 发射策略,实现了对 thread block 的动态分配.他们对基础的 GPU 架构进行了扩展,增加了必要的部件和数
         据结构用于跟踪 GPU 上的 thread block 的分配和执行情况,从而根据当前的执行状态进行动态的调整和分配.
         该方法虽然实现了有效的动态资源分配和调度,但是需要改进 GPU 的基础架构,并且引入了较大的额外负载.
             2017 年,随着 NVIDIA Pascal 架构 GPU 引入了像素级与线程级抢占,一些研究者就如何在 GPU 上实现可
         预测的实时动态优先级调度展开了研究.由于得到了 NVIDIA 公司的支持,Capodieci 等学者在 NVIDIA Tegra
         SoC 的驱动程序中实现了首个 EDF 实时调度算法              [53] .该调度策略作为 NVIDIA 虚拟机管理程序上层的软件分
         区运行,利用新一代 GPU 支持的线程级抢占特性,实现了 GPU 任务的 EDF 调度.不过,这项研究成果还未走出
         NVIDIA 的实验室,所以市场上销售的 GPU 卡并不支持 GPU 任务的 EDF 调度.针对第 2.2 节问题(6)提出的 GPU
         工作温度过高会影响任务的时间确定性问题,文献[108]提出了基于热量感知的 GPU 调度策略.其思路是:在
         GPU 任务时间模型里加入热量模型作为约束,然后通过调度分析确定任务周期性占用/释放 GPU 的时间长度,
         理论上保证了在 GPU 散热系统工作正常的情况下,GPU 任务的实时性,并且 GPU 温度不会超过阀值.最后,通过
         真实 SoC 系统测试检验了该模型的有效性.

         4.3   GPU资源管理策略
             调度策略的实现离不开资源管理策略的配合.通过管理 kernel 任务访问和使用 GPU 的资源,能够很好地提
         高多任务并行系统的时间确定性.多核 CPU 系统研究经验也表明:如果能够更多地管控程序和系统的行为,可以
         大大降低分析层面的挑战          [54] .GPU 资源的管控的主要目的是协调并行程序对各类资源访问阶段,有效降低对资
         源的访问冲突,提高程序对硬件访问的时间可预测性,可以分为“空间隔离”和“时间隔离”:空间隔离机制针对的
         是系统内存、GPU 内存、GPU 片上的各级共享缓存,时间隔离机制针对的是程序的“访存阶段”和“运算阶段”.
             在传统实时系统研究中,缓存层面的空间隔离技术包括缓存锁定、缓存旁路、缓存划分.目前,大多数 GPU
         不支持缓存划分和缓存锁定,而 NVIDIA 公司的 CUDA 平台提供了在编译阶段旁路(bypass)L1 cache 和共享内
         存的能力,但是还不支持旁路 L2 cache.文献[109]提出一种分析 GPU 程序缓存复用距离(cache reuse distance,简
         称 CRD)的技术,如果一个程序的 CRD 大于某个阈值,则缓存对于该程序的加速效果将基本不存在,因此可以旁
         路掉.文献[110]提出了优化并行 kernel 任务的线程级并行化(thread-level parallelism,简称 TLP)来提高 GPU 资源
         利用率.kernel 任务对 GPU 资源的需求是多维度的(寄存器、共享内存、线程和线程块),如果放任所有的 kernel
   43   44   45   46   47   48   49   50   51   52   53