一种NPU算子多任务调度装置及方法与流程

摘要: 本技术涉及人工智能芯片与神经网络处理器,特别是涉及一种npu算子多任务调度装置及方法。背景技术:1、随着人工智能技术的落地应用,嵌入式人工智能芯片已成为各类智能...
一种NPU算子多任务调度装置及方法与流程

本技术涉及人工智能芯片与神经网络处理器,特别是涉及一种npu算子多任务调度装置及方法。

背景技术:

1、随着人工智能技术的落地应用,嵌入式人工智能芯片已成为各类智能终端中人工智能(artificial intelligence, ai)推理运算的核心载体。神经网络处理器(neuralprocessing unit, npu)作为嵌入式ai芯片的核心运算单元,其算子任务调度效率直接决定了芯片的整体运算性能、片内中央处理器负载与ai业务的实时性表现。

2、目前嵌入式ai芯片的npu算子任务调度往往采用单算子同步阻塞调度模式。在该模式下,神经网络推理过程中的每个算子任务均需片内中央处理器(central processingunit, cpu)单独完成指令构建、参数配置与启动下发,且cpu必须阻塞等待当前算子任务执行完成并收到中断反馈后,才能下发下一个算子任务,整个调度流程全程依赖cpu的串行单步控制。这种模式导致cpu深度介入每个算子的全流程调度,频繁处理中断与上下文切换,大量占用片内本就受限的cpu运算资源。同时,算子间的切换必须等待cpu串行处理完成,使得npu出现大量空闲间隙,芯片算力无法充分利用。此外,串行调度受cpu负载影响较大,算子切换延迟波动不可控,难以满足ai推理的低延迟、高实时性要求。

技术实现思路

1、基于上述问题,本技术提供了一种npu算子多任务调度装置及方法,用于降低cpu负载和交互开销,提高npu利用率和ai推理的实时性。

2、本技术实施例公开了如下技术方案:

3、本技术第一方面提供了一种npu算子多任务调度装置,包括:cpu、npu、任务调度引擎和存储器;所述cpu和所述npu均与所述任务调度引擎通信连接,所述存储器中存储有提交队列和完成队列;

4、所述cpu,用于获取神经网络模型拆分的多个算子任务的任务描述符;将多个所述任务描述符写入所述提交队列,并发送单次任务通知;所述cpu在所述单次任务通知发出后,退出对多个所述算子任务的计算控制;

5、所述任务调度引擎,用于响应于所述单次任务通知,对多个所述任务描述符执行连续调度操作;在所述连续调度操作中,所述任务调度引擎执行以下操作:从所述提交队列中获取当前任务描述符,调用所述npu执行所述当前任务描述符对应的当前算子任务;将所述npu的完成状态写入所述完成队列;在所述npu执行所述当前算子任务期间,从所述提交队列获取下一个任务描述符,在所述npu完成所述当前算子任务后执行所述下一任务描述符对应的算子任务;

6、所述cpu,还用于从所述完成队列中获取完成状态。

7、可选地,所述任务描述符包括算子指令地址字段和算子参数地址字段;所述任务调度引擎还用于:

8、基于所述当前任务描述符的算子指令地址字段,得到所述当前算子任务的算子指令在所述npu中的入口地址;

9、基于所述当前任务描述符的算子参数地址字段,得到所述当前算子任务对应的模型参数在所述存储器中的存储地址;其中,所述存储器还包括所述神经网络模型的模型参数;

10、将所述入口地址写入所述npu的指令地址寄存器,将所述存储地址写入所述npu的参数地址寄存器;

11、向所述npu发送启动信号,以调用所述npu执行所述当前算子任务。

12、可选地,所述npu执行所述当前任务描述符对应的当前算子任务,包括:

13、根据所述指令地址寄存器中的入口地址确定所述当前算子任务的算子指令,根据所述参数地址寄存器中的存储地址从所述存储器中读取所述神经网络模型在该算子任务中所需的模型参数,并基于所述模型参数执行所述算子指令对应的运算。

14、可选地,所述任务调度引擎还用于:

15、当确定触发中断时,向所述cpu发送中断信号,并停止执行调用所述npu执行下一个算子任务的操作;

16、所述cpu还用于:响应于所述中断信号,从所述完成队列中获取完成状态。

17、可选地,所述任务描述符包括中断使能标志字段,所述cpu,还用于将目标任务描述符的中断使能标志字段设置为有效值,所述目标任务描述符为多个所述算子任务中最后一个算子任务的任务描述符,将多个所述算子任务中其他算子任务的任务描述符的中断使能标志字段设置为无效值;

18、所述任务调度引擎具体用于:在启动所述npu执行每个算子任务之前,基于该算子任务的任务描述符的中断使能标志字段,确定是否需要触发中断;若该算子任务的任务描述符的中断使能标志字段为所述有效值,在所述cpu完成该算子任务后,向所述cpu发送所述中断信号。

19、可选地,所述任务调度引擎具体用于:当所述完成队列中已写入的完成状态的数量达到预设数量时,向所述cpu发送所述中断信号。

20、可选地,所述提交队列为环形队列结构,所述cpu维护所述提交队列的尾指针,所述任务调度引擎维护所述提交队列的头指针;所述任务调度引擎还包括门铃寄存器;

21、所述cpu,具体用于在将所述任务描述符写入所述提交队列后,更新所述尾指针以指示新写入的任务描述符的范围;并通过更新所述门铃寄存器向所述任务调度引擎发送所述单次任务通知;

22、所述任务调度引擎,具体用于响应于接收到所述门铃寄存器的所述单次任务通知后,根据所述头指针,从所述提交队列中依次读取任务描述符,每读取一个任务描述符,更新所述头指针。

23、可选地,所述任务调度引擎还包括超时阈值寄存器;

24、所述cpu,还用于将超时阈值预先写入所述超时阈值寄存器;

25、所述任务调度引擎,还用于在调用所述npu计算当前算子任务后,监测所述npu的执行反馈;

26、若在所述超时阈值内接收到所述npu返回的完成信号,将正常完成状态作为所述完成状态写入所述完成队列;若在所述超时阈值内接收到所述npu返回的错误信号,将执行失败状态写入所述完成队列;若超出所述超时阈值仍未接收到所述npu返回的信号,将超时状态写入所述完成队列。

27、可选地,所述存储器包括第一存储器和第二存储器,所述第一存储器的存取速度高于所述第二存储器,所述第二存储器的存储容量大于所述第一存储器;

28、所述第一存储器用于存储所述提交队列和所述完成队列;

29、所述第二存储器用于存储所述神经网络模型的模型参数。

30、第二方面,本技术实施例提供了一种npu算子多任务调度方法,应用于第一方面任一项所述的任务调度装置,所述方法包括:

31、cpu获取神经网络模型拆分的多个算子任务的任务描述符,将多个所述任务描述符写入所述提交队列,发送单次任务通知,并退出对多个所述算子任务的计算控制;

32、响应所述单次任务通知,任务调度引擎对多个所述任务描述符执行连续调度操作;其中,在所述连续调度操作中,所述任务调度引擎执行以下操作:从所述提交队列中获取当前任务描述符,调用所述npu执行所述当前任务描述符对应的当前算子任务;将所述npu的完成状态写入所述完成队列;在所述npu执行所述当前算子任务期间,从所述提交队列获取下一个任务描述符,在所述npu完成所述当前算子任务后执行所述下一任务描述符对应的算子任务;

33、cpu从完成队列中获取完成状态。

34、相较于现有技术,本技术具有以下有益效果:

35、本技术提出的npu算子多任务调度装置包括:cpu、npu、任务调度引擎和存储器;cpu和npu均与任务调度引擎通信连接,存储器中存储有提交队列和完成队列;cpu,用于获取神经网络模型拆分的多个算子任务的任务描述符;将多个任务描述符写入提交队列,并发送单次任务通知;cpu在单次任务通知发出后,退出对多个算子任务的计算控制;任务调度引擎,用于响应于单次任务通知,对多个任务描述符执行连续调度操作;其中,在连续调度操作中,任务调度引擎执行以下操作:从提交队列中获取当前任务描述符,调用npu执行当前任务描述符对应的当前算子任务;将npu的完成状态写入完成队列;在npu执行当前算子任务期间,从提交队列获取下一个任务描述符,在npu完成当前算子任务后执行下一任务描述符对应的算子任务;cpu,还用于从完成队列中获取完成状态。

36、本技术提供的调度装置,通过在cpu和npu之间增加一个任务调度引擎,cpu将神经网络模型拆分的多个算子任务的任务描述符写入存储器中的提交队列,触发任务调度引擎执行调度npu执行算子任务计算,cpu退出算子任务计算,这种方式可以确保cpu在npu计算期间被尽可能释放以处理其他实时任务,有效降低了cpu负载。任务调度引擎接收到cpu发动的单次任务通知之后,连续从提交队列中获取多个算子任务,并调用npu计算算子任务,并在npu执行当前算子任务期间,任务调度引擎并行获取下一任务描述符,并在当前算子任务完成后,执行下一任务描述符对应的算子任务,这种方式实现了npu计算流水线的衔接,维持了npu的高负荷运行,提高了npu利用率和ai推理的实时性。