异步任务总述

Runtime将下列操作视为彼此可并发执行的独立任务:

  • 主机计算
  • 设备计算
  • 主机到设备的内存复制
  • 设备到主机的内存复制
  • 设备内部内存复制
  • 设备间内存复制

这些操作之间的实际并发程度取决于设备的特性集和计算能力,详见下文:

  1. 主机与设备并发执行

    通过异步接口实现主机并发:接口在设备完成任务前就返回控制权给主机线程。利用异步调用,可以一次性将多个设备操作排队,在设备资源可用时执行,从而减轻主机线程的管理负担,使其能够执行其他任务。以下设备操作相对于主机是异步的:

    • Kernel执行
    • 模型运行实例执行
    • 接口名带 Async 的计算任务
    • 接口名带 Async 的内存拷贝;涉及非锁页主机内存时,异步内存拷贝也可能退化为同步。
  2. 多个Kernel并发执行

    同一个Context中下发的多个Kernel是可以并发执行的,不同Context间的多个Kernel同样可以并发执行。任务调度器会根据Stream的优先级和AI Core忙闲状态进行统一调度。

  3. 不同加速器任务并发执行

    除AI Core外,Device上还提供其他硬件加速器,例如AI CPU、DVPP(Digital Vision Pre-Processing)、Random(随机数生成器)等,不同的加速器任务之间并发执行。不同代AI处理器支持的硬件加速器不同,需以实际硬件用户手册中的说明为准。

  4. 数据传输与计算任务并发

    数据传输有独立的DMA(Direct Memory Access)引擎,可以与计算任务并发执行。

  5. 双向数据传输

    从Host到Device和从Device到Host的数据传输是可并发的。