CUDA 流-重叠计算与数据传输

主机端启动kernel函数,可实现线程块级并行。为了实现任务级(线程格)级的并行,即同时在设备端启动多个核函数或数据传输操作,则需要引入CUDA流。

一系列的设备任务(计算或数据传输)正是有序地排列在CUDA流中依次执行的,默认情况下所有任务都是执行在一个默认流中。

当创建多个流时,可实现多个流的同步执行,以实现不同流中的各种操作达到重叠的效果,提升计算性能。

cudaStream_t stream;//创建流
chdaStreamCreate(&stream);//初始化流
kernel<<<g,b,0,stream>>>();//将kernel压入stream中执行。
cudaMemcpyAsync(d,h,xx,xx,stream);//将数据传输压入stream中执行。
cudaStreamSynchronize();//同步stream流
cudaStreamQuery();//查询stream流的执行情况,若执行完毕返回cudaSuccess,否则返回cudaErrorNotReady
cudaStreamDestroy();销毁流

需要注意的是,如果需要重叠计算和数据传输,则要求主机数据必须是固定内存(前文有讲)。

如图琐事,stream15完成数据a传输,然后开始处理,与此同时stram14开始进行传输b数据。这样就实现了计算和传输的重叠,达到了性能的提升。


发布了56 篇原创文章 · 获赞 30 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_17239003/article/details/78985191