title: 【CUDA 基础】6.3 重叠内和执行和数据传输

categories:

- CUDA

- Freshman

tags:

- 深度优先

- 广度优先

toc: true

date: 2018-06-20 20:10:09



Abstract: 本文介绍如何利用流的重叠来隐藏主机到设备的数据传输延迟

Keywords: 深度优先,广度优先

开篇废话

热烈庆祝上证跌破3000点。如果股市是一个国家经济最好的衡量标准之一的话,我们的中国梦该醒醒了。

前面一节我们主要研究多个内核在不同流中的不同行为,主要使用的工具是NVVP,NVVP是可视化的非常实用的工具,值得大家深入研究一下。

Fermi架构和Kepler架构下有两个复制引擎队列,也就是数据传输队列,一个从设备到主机,一个从主机到设备。所以读取和写入是不经过同一条队列的,这样的好处就是这两个操作可以重叠完成了,注意,只有方向不同的时候才能数据操作。同向的时候不能进行此操作。

应用程序中,还需要检查数据传输和内核执行之间的关系,分为以下两种:

  • 如果内核使用数据A,那么对A进行数据传输必须要安排在内核启动之前,且必须在同一个流中
  • 如果内核完全不使用数据A,那么内核执行和数据传输可以位于不同的流中重叠执行。

第二种情况就是重叠内核执行和数据传输的基本做法,当数据传输和内核执行被分配到不同的流中时,CUDA执行的时候默认这是安全的,也就是程序编写者要保证他们之间的依赖关系。

但是第一种情况也可以进行重叠,只要对核函数进行一定的分割,我们用向量加法来完成本文的研究。

使用深度优先调度重叠

完整内容 https://face2ai.com/CUDA-F-6-3-重叠内核执行和数据传输/

【CUDA 基础】6.3 重叠内和执行和数据传输的更多相关文章

  1. 【CUDA 基础】6.2 并发内核执行

    title: [CUDA 基础]6.2 并发内核执行 categories: - CUDA - Freshman tags: - 流 - 事件 - 深度优先 - 广度优先 - 硬件工作队列 - 默认流 ...

  2. 【CUDA 基础】3.1 CUDA执行模型概述

    title: [CUDA 基础]3.1 CUDA执行模型概述 categories: CUDA Freshman tags: CUDA SM SIMT SIMD Fermi Kepler toc: t ...

  3. 【CUDA 基础】3.2 理解线程束执行的本质(Part I)

    title: [CUDA 基础]3.2 理解线程束执行的本质(Part I) categories: CUDA Freshman tags: 线程束分化 CUDA分支 toc: true date: ...

  4. CUDA基础介绍

    一.GPU简介 1985年8月20日ATi公司成立,同年10月ATi使用ASIC技术开发出了第一款图形芯片和图形卡,1992年4月ATi发布了Mach32图形卡集成了图形加速功能,1998年4月ATi ...

  5. 【CUDA 基础】6.1 流和事件概述

    title: [CUDA 基础]6.1 流和事件概述 categories: - CUDA - Freshman tags: - 流 - 事件 toc: true date: 2018-06-10 2 ...

  6. 【CUDA 基础】6.0 流和并发

    title: [CUDA 基础]6.0 流和并发 categories: - CUDA - Freshman tags: - 流 - 事件 - 网格级并行 - 同步机制 - NVVP toc: tru ...

  7. 【CUDA 基础】5.2 共享内存的数据布局

    title: [CUDA 基础]5.2 共享内存的数据布局 categories: - CUDA - Freshman tags: - 行主序 - 列主序 toc: true date: 2018-0 ...

  8. 【CUDA 基础】5.1 CUDA共享内存概述

    title: [CUDA 基础]5.1 CUDA共享内存概述 categories: - CUDA - Freshman tags: - CUDA共享内存模型 - CUDA共享内存分配 - CUDA共 ...

  9. 【CUDA 基础】3.6 动态并行

    title: [CUDA 基础]3.6 动态并行 categories: - CUDA - Freshman tags: - 动态并行 - 嵌套执行 - 隐式同步 toc: true date: 20 ...

随机推荐

  1. centos8自定义目录安装nginx

    1.安装工具和库 # PCRE是一个Perl库,包括 perl 兼容的正则表达式库.nginx 的 http 模块使用 pcre 来解析正则表达式 # zlib库提供了很多种压缩和解压缩的方式, ng ...

  2. 字典的setdefault()

    setdefault(key, default) 函数 ---有key获取值.没key设置 key:default dict.setdefault(key, default=None) 如果 key ...

  3. 怎样查看Redis的版本号

    Q: 怎样查看Redis版本 A: 下面两条命令都可以查看redis 版本: redis-server --version redis-server -v

  4. 关于ManualResetEvent的实例分析

    最近用WPF开发时使用多个定时器处理时需要实例化N多个DispatcherTimer,而且全部暴露在程序外部,显得很冗杂,例如下面的例子:用到的两个定时器就要实例化两个DispatcherTimer, ...

  5. splice与slice区别

    共同点:均是删除数组元素并返回结果. 区别:splice会改变原数组,而slice不会.并且splice会导致数组塌陷. 数组塌陷:使用splice删除元素时,剩余的数组元素索引的顺讯会改变. let ...

  6. 微信小程序点击图片预览-wx.previewImage

    <view class='imgList'> <view class='imgList-li' wx:for='{{imgArr}}'> <image class='im ...

  7. C++手动调用析构函数无效问题排查

    在学习C++的时候,都知道不要手动调用析构函数,也不要在构造函数.析构函数里调用虚函数.工作这么多年,这些冷门的知识极少用到,渐渐被繁杂的业务逻辑淹没掉. 不过,最近项目里出现了析构函数没有被正确地调 ...

  8. IDM下载百度资源出现403的解决方法

    测试发现是受cookie的影响,百度为了防止用外部下载工具突破限速加入了cookie验证,因为一般的下载工具请求下载的时候不会附加cookie信息. IDM就是这样,它请求下载文件时只知道文件的下载地 ...

  9. react 预览pdf 转换

    function getReader(response){ return new Promise(function(resolve,reject){ response.blob().then( blo ...

  10. 数学模块 math 函数的调用

    数学模块 math 模块名: math 注: linux下为内建模块 Mac OS下为标准库模块 数学模块用法: import math # 或 from math import * 数据 描述 ma ...