一、Stream的概念
用到CUDA的程序一般需要处理海量的数据,内存带宽经常会成为主要的瓶颈。在Stream的帮助下,CUDA程序可以有效地将内存读取和数值运算并行,从而提升数据的吞吐量。
Cuda stream是指一堆异步的cuda操作,他们按照host代码调用的顺序执行在device上。
典型的cuda编程模式我们已经熟知了:
· 将输入数据从host转移到device
· 在device上执行kernel
· 将结果从device上转移回host
Cuda Streams
所有的cuda操作(包括kernel执行和数据传输)都显式或隐式的运行在stream中,stream也就两种类型,分别是:
· 隐式声明stream(NULL stream)
· 显示声明stream(non-NULL stream)
异步且基于stream的kernel执行和数据传输能够实现以下几种类型的并行:
· Host运算操作和device运算操作并行
· Host运算操作和host到device的数据传输并行
· Host到device的数据传输和device运算操作并行
· Device内的运算并行
二、Stream的使用
由于GPU和CPU不能直接读取对方的内存,CUDA程序一般会有一下三个步骤:1)将数据从CPU内存转移到GPU内存(HtoD),2)GPU进行运算并将结果保存在GPU内存(DtoD),3