任务调度器与运行管理器工程组成软硬件之间的大坝系统。在执行时,任务调度器对硬件进行任务的驱动,为昇腾AI处理器提供具体的目标任务,与运行管理器一起完成任务调度流程,并将输出数据回送给运行管理器,充当了一个任务输送分发和数据回传的通道。
任务调度器功能简介
任务调度器运行在设备侧的任务调度CPU上,负责将运行管理器分发的具体任务进一步派发到AI CPU上。它也可以通过硬件任务块调度器(Block Scheduler,BS)把任务分配到到AI CORE上执行,并在执行完成后返回任务执行的结果给运行管理器。通常任务调度器处理的主要事务有:AI Core任务、AI CPU任务、内存拷贝任务、事件记录任务、事件等待任务、清理维护(Maintenance)任务以及性能分析(Profiling)任务。
内存拷贝主要以异步方式进行。事件记录任务主要记录事件的发生信息,如果存在等待该事件的任务,则这些任务在事件记录完成后可以解除等待,继续执行,消除由事件记录而导致执行流的阻塞。事件等待任务指如果等待的事件已经发生,则等待任务直接完成;当等待的事件尚未发生时,将等待任务填入待处理列表中,同时暂停事件等待任务所在执行流中后续所有任务的处理,在等待的事件发生时,再进行事件等待任务的处理。
在任务执行完成后,由清理维护任务根据任务参数不同进行相应的清理工作,回收计算资源。在执行过程还有可能要对计算的性能进行记录和分析,这时需要用到性能分析任务,来控制性能分析操作的启动和暂停。
任务调度器的功能框架如上图所示,任务调度器通常位于设备端,功能有任务调度CPU来完成。任务调度CPU由调度接口(Interface)、调度引擎(Engine)、调度逻辑处理模块、AI CPU调度器、任务块调度器、系统控制(SysCtrl)模块、性能分析(Profile)和日志(Log)模块组成。
任务调度CPU通过调度接口实现与运行管理器和驱动之间的通信和交互。将任务通过结果传送给任务调度引擎,任务调度引擎作为任务调度实现的主体,负责实现任务组织、任务依赖及任务调度控制等流程,管理着整个任务调度CPU的执行过程。任务调度引擎根据任务的具体类型,将任务分为计算、存储和控制三种类型,分发给不同调度逻辑处理模块,启动具体核函数任务、存储任务以及执行流间事件依赖等逻辑的管理与调度。
逻辑处理模块分为核函数执行模块(Kernel Execute)、直接存储访问执行模块(DMA Execute)和事件执行模块(Event Execute)。核函数执行模块进行计算任务的调度处理,实现AI CPU,AI Core上任务的调度逻辑,对具体的核函数进行调度处理。而直接存储访问执行模块实现存储任务的调度逻辑,对内存拷贝等进行调度处理。事件执行模块负责实现同步控制任务的调度逻辑,实现执行流间事件依赖的逻辑处理。在完成不同类型任务的调度逻辑处理后,开始直接交由相应的控制单元进行硬件执行。
针对AI CPU的任务执行,由任务调度CPU中的AI CPU调度器用软件的方式对AI CPU进行状态管理及任务调度。而对于AI Core的任务执行,则由任务调度CPU将处理后的任务通过一个单独的任务块调度器硬件分发到AI Core上,由AI Core进行具体计算,计算完成的结果也是由任务块调度器返回给任务调度CPU。
任务调度CPU在完成任务调度的过程中,由系统控制对系统进行配置和芯片功能的初始化,同时由性能分析和日志模块监测整个执行流程,记录关键执行参数以及具体执行细节,在整个执行结束或者报错时,可以进行具体的性能分析或者错误定位,为执行过程的正确性和高效性进行详细的评估分析提供依据。