title: 【CUDA 基础】4.4 核函数可达到的带宽

categories:

- CUDA

- Freshman

tags:

- 带宽

- 吞吐量

- 矩阵转置

toc: true

date: 2018-05-13 12:08:02



Abstract: 本文通过矩阵转置这一个例子,调整,优化核函数,使其达到最优的内存带宽

Keywords: 带宽,吞吐量,矩阵转置

开篇废话

下面是废话,与本文知识无关,可以直接跳到下面红字处开始本文知识的学习。

废话继续,这两天没更新博客了,上一篇是转发的MIT人工智能实验室的研究指南,也就是告诉刚入学的研究生怎么做研究,要怎么积累,那篇文章发表在1988年,MIT的AI实验室网站目前仍然能检索的到,通读全文,感受很多,也学会了很多东西,当一个健康的框架搭好了以后,后面的好功能会源源不断的涌现,教育也是,当一套体系形成,那么就会有源源不断的人才和成果出现,相反,如果体系本身漏洞百出,根基不稳,短时间真的改不了,人也一样,价值观一旦确定,这个人的人生也就基本定型了——正所谓三岁看老。

今天废话有点多,如果没兴趣,可以直接跳到这里

上一章我们研究怎么通过调整线程网格结构和核函数来达到SM的最高利用率,今天我们来研究如何达到内存带宽的最大利用率。

还是要提那个老例子,但是说实话,这的很形象,也很有用,记住这个例子基本就能了解CUDA的优化大概要从哪入手了:

一条大路(内存读取总线)连接了工厂生产车间(GPU)和材料仓库(全局内存),生产车间又有很多的工作小组(SM),材料仓库有很多小库房(内存分块),工作小组同时生产相同的产品互不干扰(并行),我们有车从材料仓库开往工厂车间,什么时候发车,运输什么由工作小组远程电话指挥(内存请求),发车前,从材料仓库装货的时候,还要听从仓库管理员的分配,因为可能同一间库房可能只允许一个车来拿材料(内存块访问阻塞),然后这些车单向的开往工厂,这时候就是交通问题了,如果我们的路是单向(从仓库到工厂)8车道,每秒钟能通过16辆车,那么我们把这个指标称为带宽。当然我们还有一条路是将成品运输到成品仓库,这也是一条路,与原料库互不干扰,和材料仓库到工厂的路一样,也有宽度,也是单向的,如果这条路堵住,和仓库到工厂的路堵住一样,此时工厂要停工等待。

最理想的状态是,路上全是车,并且全都高速行驶,工厂里的所有工人都在满负荷工作,没有等待,这就是优化的最终目标,如果这个目标达到了,还想进一步提高效率,那么你就只能优化你的工艺了(算法)


上面的这个就是粗糙的GPU工作过程。例子还是比较贴切的,但是有点描述粗糙,多读两遍应该会有点收获的。

内存延迟是影响核函数的一大关键,内存延迟,也就是从你发起内存请求到数据进入SM的寄存器的整个时间。

内存带宽,也就是SM访问内存的速度,它以单位时间内传输的字节数进行测量。

上一节我们用了两种方法改善内核性能:

  • 最大化线程束的数量来隐藏内存延迟,维持更多的正在执行的内存访问达到更好的总线利用率
  • 通过适当的对齐和合并访问,提高带宽效率

然而,当前内核本身的内存访问方式就有问题,上面两种优化相当于给一个拖拉机优化空气动力学外观,杯水车薪。

我们本文要做的就是看看这个核函数对应的问题,其极限效率是多少,在理想效率之下,我们来进行优化,我们本文那矩阵转置来进行研究,看看如何把一种看起来没办法优化的内核,重新设计让它达到更好的性能。

内存带宽

完整内容参考 https://face2ai.com/CUDA-F-4-4-核函数可达到的带宽/

【CUDA 基础】4.4 核函数可达到的带宽的更多相关文章

  1. CUDA基础介绍

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

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

    title: [CUDA 基础]6.3 重叠内和执行和数据传输 categories: - CUDA - Freshman tags: - 深度优先 - 广度优先 toc: true date: 20 ...

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

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

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

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

  5. 【CUDA 基础】5.6 线程束洗牌指令

    title: [CUDA 基础]5.6 线程束洗牌指令 categories: - CUDA - Freshman tags: - 线程束洗牌指令 toc: true date: 2018-06-06 ...

  6. 【CUDA 基础】5.4 合并的全局内存访问

    title: [CUDA 基础]5.4 合并的全局内存访问 categories: - CUDA - Freshman tags: - 合并 - 转置 toc: true date: 2018-06- ...

  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 基础】5.0 共享内存和常量内存

    title: [CUDA 基础]5.0 共享内存和常量内存 categories: - CUDA - Freshman tags: - 共享内存 - 常量内存 toc: true date: 2018 ...

随机推荐

  1. ingress安装配置

    Traefik Traefik 是一款开源的反向代理与负载均衡工具.它最大的优点是能够与常见的微服务系统直接整合,可以实现自动化动态配置.目前支持 Docker.Swarm.Mesos/Maratho ...

  2. kubernetes kubeadm安装v1.14

    1.我们这里准备两台Centos7的主机用于安装,后续节点可以根究需要添加即可:master node01两台都得改:cat /etc/hosts192.168.71.134 master192.16 ...

  3. k8s之dashboard认证、资源需求、资源限制及HeapSter

    1.部署dashboard kubernetes-dashboard运行时需要有sa账号提供权限 Dashboard官方地址:https://github.com/kubernetes/dashboa ...

  4. 图解Java继承内存分配

    图解Java继承内存分配   继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法. (3)子 ...

  5. Python取值的灵活性用法

    samp_string = "Whatever you are, be a good one." for i in samp_string: print(i) ,len(samp_ ...

  6. JS基础_全局作用域

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. sqlserver错误状态码解释

    Code Error Message 0 操作成功完成. 1 功能错误. 2 系统找不到指定的文件. 3 系统找不到指定的路径. 4 系统无法打开文件. 5 拒绝访问. 6 句柄无效. 7 存储控制块 ...

  8. 【opencv 源码剖析】 三、 morphOp 数学形态学滤波函数, 腐蚀和膨胀就是通过这个函数得到的

    // //_kernel : 形态学滤波的核 //anchor: 锚点再滤波核的位置 //iterations: 迭代次数 static void morphOp( int op, InputArra ...

  9. linux 下安装python2.7.13

    1.下载所必要的依赖包 yum -y install python-devel openssl openssl-devel gcc sqlite sqlite-devel mysql-devel li ...

  10. 【Log4J】

    学习mybatis中用到了Log4J 在此记录下 引入 引入Maven配置 <!-- https://mvnrepository.com/artifact/log4j/log4j --> ...