异步任务总述
Runtime将下列操作视为彼此可并发执行的独立任务:
- 主机计算
- 设备计算
- 主机到设备的内存复制
- 设备到主机的内存复制
- 设备内部内存复制
- 设备间内存复制
这些操作之间的实际并发程度取决于设备的特性集和计算能力,详见下文:
-
主机与设备并发执行
通过异步接口实现主机并发:接口在设备完成任务前就返回控制权给主机线程。利用异步调用,可以一次性将多个设备操作排队,在设备资源可用时执行,从而减轻主机线程的管理负担,使其能够执行其他任务。以下设备操作相对于主机是异步的:
- Kernel执行
- 模型运行实例执行
- 接口名带 Async 的计算任务
- 接口名带 Async 的内存拷贝;涉及非锁页主机内存时,异步内存拷贝也可能退化为同步。
-
多个Kernel并发执行
同一个Context中下发的多个Kernel是可以并发执行的,不同Context间的多个Kernel同样可以并发执行。任务调度器会根据Stream的优先级和AI Core忙闲状态进行统一调度。
-
不同加速器任务并发执行
除AI Core外,Device上还提供其他硬件加速器,例如AI CPU、DVPP(Digital Vision Pre-Processing)、Random(随机数生成器)等,不同的加速器任务之间并发执行。不同代AI处理器支持的硬件加速器不同,需以实际硬件用户手册中的说明为准。
-
数据传输与计算任务并发
数据传输有独立的DMA(Direct Memory Access)引擎,可以与计算任务并发执行。
-
双向数据传输
从Host到Device和从Device到Host的数据传输是可并发的。