昇腾AI软件栈任务调度器调度流程在神经网络的离线模型执行过程中,任务调度器接收来自离线模型执行器的具体执行任务,这些任务之间存在依赖关系,需要先解除依赖关系,再进行任务调度等步骤,最后根据具体的任务类型分发给AI Core或AI CPU,完成具体硬件的计算或执行。在任务调度过程中,任务是由多条执行指令(CMD)组成,由任务调度器和运行管理器进行相互交互,完成整个任务指令的有序调度。运行管理器执行在主机的CPU上,指令队列位于设备上的内存中,任务调度器进行具体任务指令的下发。调度过程的详细流程如图所示。
首先运行管理器调用驱动的dvCommandOcuppy接口进入指令队列中,根据指令的尾部信息查询指令队列中可用的存储空间,并将可以用的指令存储空间地址返回给运行管理器。运行管理器接收到地址后,将当前准备好的任务指令填充进指令队列存储空间中,并调用驱动的dvCommandSend接口更新指令队列当前的尾部信息和信用(credit)信息。队列接收新增的任务指令后,产生doorbell中断,并通知任务调度器在设备内存中的指令队列新增了任务指令。任务调度器得到通知后,进入设备内存中,搬运任务指令进入调度器的缓存中进行保存,并且更新设备端DDR内存中指令队列的头部信息。最后,任务调度器根据执行情况,将缓存中的指令发送给AI CPU或AI Core进行执行。
和大多数加速器运行时软件栈的构造基本一致,昇腾AI处理器中的运行管理器、驱动和任务调度器紧密配合,共同有序完成任务分发至相应硬件资源并执行。这个调度过程为深度神经网络计算过程中紧密有序的输送了任务,保证了任务执行的连续性和高效性。