CUDA流任务并行

       CUDA流表示一个GPU操作队列,并且该队列中的操作将以指定的顺序执行。可以将每个流视为GPU的一个任务,并且这些任务可以并行执行,即相同流顺序执行,不同流并行执行;不同流并行执行时不同流所要执行的任务要没有依赖关系;当不手动创建流时,cuda将会默认一个流操作。

       在硬件选择上,这里有一个概念,支持设备重叠功能,支持设备重叠功能的 GPU 能够在执行一个 CUDA C 核函数的同时,还能在设备和主机之间执行复制操作;这在流并行过程中很重要,我们假设有流A和流B,设备重叠就会允许流A在复制过程中同时流B进行核函数计算,这会大大加快速度;

cudaDeviceProp   prop;
int  whichDevice;
cudaGetDevice(&whichDevice);
cudaGetDevice(&prop, whichDevice);
if(prop.deviceOverlap){
   std::cout<<"the device  will handle overlaps"<<std::endl;
}

        我们知道cudaMemcpy与CPU操作是同步的,为了实现设备重叠,cuda提供了cudaMemcpyAsync用于数据拷贝操作,它是异步的,不会等待复制完成就会执行程序的下一步;

        但注意,cudaMemcpyAsync仅对分页锁定的主存储器有效,如果传入指向可分页存储器的指针,那么将返回一个错误;

        页锁定的主机内存由cudaHostAlloc()分配。页锁定的主机内存也称为固定内存

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值