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

本文介绍如何使用CUDA流实现GPU上的任务级并行,通过创建多个流来重叠执行不同的核函数与数据传输操作,从而提升计算性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主机端启动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数据。这样就实现了计算和传输的重叠,达到了性能的提升。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值