转载请注明来源:http://www.cnblogs.com/shrimp-can/p/5231857.html

简单可以理解为: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/

cudaMemcpy与cudaMemcpyAsync的区别的更多相关文章

  1. C++ OP相关注意事项

    C++ OP相关注意事项 Paddle中Op的构建逻辑 1.Paddle中Op的构建逻辑 Paddle中所有的Op都继承自OperatorBase,且所有的Op都是无状态的,每个Op包含的成员变量只有 ...

  2. c#与java的区别

    经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...

  3. jquery和Js的区别和基础操作

    jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...

  4. 【原】nodejs全局安装和本地安装的区别

    来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,我们帮忙去解决问题. 转型后是这样的,团队成员更多需要去寻找业务的 ...

  5. 探究@property申明对象属性时copy与strong的区别

    一.问题来源 一直没有搞清楚NSString.NSArray.NSDictionary--属性描述关键字copy和strong的区别,看别人的项目中属性定义有的用copy,有的用strong.自己在开 ...

  6. X86和X86_64和X64有什么区别?

    x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令集,所有intel早期的cpu,amd早期的cpu都支持这种指令集,ntel官方文档里面称为&qu ...

  7. Java中Comparable与Comparator的区别

    相同 Comparable和Comparator都是用来实现对象的比较.排序 要想对象比较.排序,都需要实现Comparable或Comparator接口 Comparable和Comparator都 ...

  8. MySQL中interactive_timeout和wait_timeout的区别

    在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR (HY000): Lost connection to MySQL server ...

  9. 设置line-height:1.5和line-height:150%或者line-height:150px的区别

    直接正题: 看一下line-height可能的值: 其实可以分为两类: (1)不带单位的(如line-height:1.5),这种是推荐使用的: (2)带单位的(如line-heigth:30px/1 ...

随机推荐

  1. ESRI ArcGIS 产品线资源网站大集合

    友情提示:国外网站国内访问速度较慢,可以配合VPN等进行加速访问. 首先给出官方网站,以下所有链接均可在官方找到. http://www.esri.com 紧接着是产品线: http://www.es ...

  2. PLSQL语法深入浅出

    一:PLSQL概览:PLSQL 是Oracle公司在SQL基础上进行扩展而成的一种过程语言.PLSQL提供了典型的高级语言特 性,包括封装,例外处理机制,信息隐藏,面向对象等:并把新的编程思想带到了数 ...

  3. CoreCLR源码探索(三) GC内存分配器的内部实现

    在前一篇中我讲解了new是怎么工作的, 但是却一笔跳过了内存分配相关的部分. 在这一篇中我将详细讲解GC内存分配器的内部实现. 在看这一篇之前请必须先看完微软BOTR文档中的"Garbage ...

  4. DB2_自动生成值

    生成数字序列的两种方法 在 DB2 中可以用两种方法自动生成一个数字序列: 定义带有 IDENTITY 属性的列. 创建 SEQUENCE 对象. IDENTITY 列 当用 IDENTITY 属性定 ...

  5. 使用jsCompress压缩混淆js代码的一些常见的问题和技巧

    不同的团队使用的js混淆器或压缩工具不一样,jsCompress是一款绿色的免费的js压缩工具,时代定制的UI团队推荐大家使用,不仅性能优越,而且操作非常人性化. 使用jsCompress.exe时, ...

  6. 初探 discuz

    测试: vim /etc/hosts       ##ip地址转换 修改windows 的配置文件,写字板打开 vim /usr/local/apache/conf/httpd.conf vim /u ...

  7. Vimium -为键盘而生

    The hacker's browser. 作为一个Chrome的忠实使用者,从开发人员工具到谷歌的扩展程序(extensions)[插件],这些都在无形之中提高我们的工作效率. N年前的一天,看到了 ...

  8. 改变radio默认样式

    改变radio默认样式,代码如下: <!doctype html> <html> <head> <meta charset="UTF-8" ...

  9. java IoC

    IoC,控制反转,是spring的核心,通俗点讲就是我们不必再自己去用new创建对象了,通过l配置将类注入到IoC容器中,在启动时,IoC容器去帮我们创建对象,并管理其依赖关系,这种实现方式叫做DI, ...

  10. 实现 $.extend 的深复制和浅复制

    $.extend 是jquery常用的一个方法,该方法通过传第一个布尔型参数可以指定为深复制还是浅复制,如何使用不在本文讨论. 先来理解下什么是深复制: var ob1 = {'name' : 'Ja ...