并发重点在于一个极短时间段内运行多个不同的任务;并行重点在于同时运行一个任务。

1.       任务并行性:是指并行执行两个或多个不同的任务,而不是在大量数据上执行同一个任务。

2.       概念:CUDA流表示一个GPU操作队列,并且该队列中的操作将以指定的顺序执行。我们可以在流中添加一些操作,如核函数启动,内存复制以及事件的启动和结束等。这些操作的添加到流的顺序也是它们的执行顺序。

        可以将每个流视为GPU上的一个任务,并且这些任务可以并行执行。

3.       硬件前提:必须是支持设备重叠功能的GPU。支持设备重叠功能,即在执行一个核函数的同时,还能在设备与主机之间执行复制操作。

4.       声明与创建:声明cudaStream_t stream;创建cudaSteamCreate(&stream);。

5.       cudaMemcpyAsync():这是一个以异步方式执行的函数,而cudaMemcpy()是一个同步执行函数,同步执行意味着,当函数返回时,复制操作已完成,并且在输出缓冲区中包含了复制进去的内容。而在调用cudaMemcpyAsync()时,只是放置一个请求,表示在流中执行一次内存复制操作,这个流是通过参数stream来指定的。当函数返回时,我们无法确保复制操作是否已经启动,更无法保证它是否已经结束。我们能够得到的保证是,复制操作肯定会当下一个被放入流中的操作之前执行。传递给此函数的主机内存指针必须是通过cudaHostAlloc()分配好的内存。(异步操作需要使用固定内存)

6.       流同步:通过cudaStreamSynchronize()来协调,确保GPU执行完计算和复制操作。

7.       流销毁:在退出应用程序之前,需要销毁对GPU操作进行排队的流,调用cudaStreamDestroy()。

8.       针对多个流:

1)       记得对流进行同步操作。

2)       将操作放入流的队列时,应采用广度优先方式,而非深度优先的方式,换句话说,不是首先添加第0个流的所有操作,再依次添加后面的第1,2,…个流。而是交替进行添加,比如将a的复制操作添加到第0个流中,接着把a的复制操作添加到第1个流中,再继续其他的类似交替添加的行为。

3)       要牢牢记住操作放入流中的队列中的顺序影响到CUDA驱动程序调度这些操作和流以及执行的方式。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值