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-重叠内核执行和数据传输/

 posted on 2018-06-26 18:13  TonyShengTan  阅读(158)  评论(0编辑  收藏  举报