本文来源公众号“DeepDriving”,仅用于学术分享,侵权删,干货满满。
原文链接:CUDA编程-05:流和事件
1 CUDA流
在CUDA
中有两个级别的并发:内核级并发和网格级并发。前面的文章DeepDriving | CUDA编程-04:CUDA内存模型-CSDN博客介绍的是内核级并发,这种并发方式是通过数据并行的方式用多个GPU
线程去并发地完成一个内核任务,而网格级并发则是把一个任务分解为多个内核任务,通过在一个设备上并发地运行多个内核任务来实现任务的并发执行,这种方式使得设备的利用率更高。CUDA
流是一系列异步操作的集合,同一个CUDA
流中的操作严格按照顺序在GPU
上运行,使用多个流同时启动多个内核任务就可以实现网格级并发。
首先来回顾一下一个典型的CUDA
程序的执行流程:
-
将数据从
host
拷贝到device
上; -
在
device
上执行内核任务ÿ