cudaMemcpy与cudaMemcpyAsync的区别
来源:互联网 发布:中兴网络机顶盒usb 编辑:程序博客网 时间:2024/05/21 15:40
简单可以理解为:cudaMemcpy是同步的,而cudaMemcpyAsync是异步的。具体理解需要弄清以下概念:
1.CUDA Streams
在cuda中一个Stream是由主机代码发布的一系列再设备上执行的操作,必须确保顺序执行。不同streams里面的操作可以交叉执行或者并发执行。
2.默认stream
设备操作包括:数据传输和kernels,在cuda中,所有的设备操作都在stream中执行。当没有指定stream时,使用默认的stream。默认stream是一个针对设备操作同步的stream,也就是说,只有当所有之前设备上任何stream里面的操作全部完成时,才开始默认stream里面操作的执行,并且默认stream里面的一个操作必须完成,其他任何stream里面的操作才能开始。
例如以下代码:
cudaMemcpy(d_a, a, numBytes, cudaMemcpyHostToDevice);increment<<<1,N>>>(d_a)cudaMemcpy(a, d_a, numBytes, cudaMemcpyDeviceToHost);
从设备端来看,这三个操作都在默认stream中,并且按顺序执行;从主机端来看,数据传输是阻塞的或者同步传输,而kernel是异步的。第一步主机到设备的数据传输是同步的,CPU线程不能到达第二行直到主机到设备的数据传输完成。一旦kernel被处理,CPU线程移到第三行,但是改行的传输不能开始,因为设备端正在执行第二行的内容。
3.非默认stream
非默认stream中的数据传输使用函数cudaMemcpyAsync(),这个函数在主机端是非阻塞的,传输处理后控制权马上返回给主机线程
参考:https://devblogs.nvidia.com/parallelforall/how-overlap-data-transfers-cuda-cc/
阅读全文
0 0
- cudaMemcpy与cudaMemcpyAsync的区别
- cudaMemcpy与kernel
- CPU 与 GPU 之间数据转换 cudaMemcpy
- 拷贝global memory,cudaMemcpyToSymbol 和cudaMemcpy函数是否有区别
- 测试cuda的unified memory和cudaMemcpy的if判断
- 测试cuda的unified memory和cudaMemcpy的加减乘除及空间申请时间对比
- cudaMemcpyToSymbol 和cudaMemcpy
- &&与&,||与| 的区别
- &与&& ,|与||的区别
- -> 与 .的区别,&与*
- &与&& ,|与||的区别
- 注释区别???/与//的区别
- 与的区别与作用
- 与的区别与作用
- 与的区别与作用
- “//”与“\\”还有“/”与“\" 的区别
- java &与&& |与||的区别
- java &与&& |与||的区别
- OKHttp源码解析
- RecSys’16 Workshop on Deep Learning for Recommender Systems (DLRS)
- RabbitMQ分布式消息队列服务器(一、Windows下安装和部署)
- Markov Chain Monte Carlo(1)
- SocketTimeoutException,Caused by: libcore.io.ErrnoException: recvfrom failed: EAGAIN (Try again)
- cudaMemcpy与cudaMemcpyAsync的区别
- 第二阶段--最终作业
- android gradle tools 3.X 中依赖,implement、api 和compile区别
- C/C++经典——斐波那契数列
- gbk code can't encode character……gbk code can't decode byte 0xbf/
- .Net Core 图片文件上传下载
- Unity Learning for Day 19
- nextint()方法的一个小细节分享
- YII2框架学习 安全篇(二) XSS攻击和防范(下)