1. 异步并发执行
CUDA将以下操作暴露为可彼此并发执行的独立任务:
- 主机端的计算;
- 设备端的计算;
- 从主机到设备的内存传输;
- 从设备到主机的内存传输;
- 同一设备内部的内存传输;
- 多设备间的内存传输。
这些操作之间所能实现的并发级别,取决于设备的特性集和计算能力(如下所述)。
1.1. 主机与设备的并发执行
通过异步库函数实现的主机并发执行,会在设备完成请求任务之前就将控制权返回给主机线程。使用异步调用时,多个设备操作可以一起排队,由CUDA驱动在适当的设备资源可用时执行。这大大减轻了主机线程管理设备的责任,使其可以自由执行其他任务。以下设备操作相对于主机是异步的:
- 内核启动;
- 单个设备内部的内存复制;
- 从主机到设备、内存块大小为64KB或更小的内存复制;
- 带有"Async"后缀的函数执行的内存复制;
- 内存设置函数调用。
程序员可以通过设置环境变量CUDA_LAUNCH_BLOCKING=1
来全局禁用系统上所有CUDA应用程序的内核启动异步性。此功能仅供调试使用,不应作为生产软件可靠