前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GPU编程(二): GPU架构了解一下!

GPU编程(二): GPU架构了解一下!

作者头像
sean_yang
发布2018-11-09 16:54:57
2.3K0
发布2018-11-09 16:54:57
举报
文章被收录于专栏:Sorrower的专栏Sorrower的专栏

目录

  • 前言
  • GPU架构

  • GPU处理单元
  • 概念GPU
  • GPU线程与存储
  • 参考
  • 最后

前言

之前谈了谈CUDA的环境搭建. 这次说一下基本的结构, 如果不了解, 还是没法开始CUDA编程的.


GPU架构

GPU处理单元

GPU处理单元

从这张GPU概念内核图开始讲起, 会发现和CPU内核是不同的, 少了三级缓存以及分支预测等等. 但是增加了ALU, 扩大了上下文存储池. 增加ALU目的就是增强运算能力, 可以直接进行向量或者矩阵运算. 增加Ctx个数就是为了隐藏延迟, 遇到阻塞可以直接切换下一个. 然后, 此图是我依据一张比较官方的图进行重绘的. 图含8个ALU, 4组执行环境(Execution context), 每组有8个Ctx. 这样, 一个这样的内核可以并发(concurrent but interleaved)执行4条指令流(instruction streams), 32个并发程序片元(fragment).


概念GPU

复制16个上述的处理单元, 得到一个GPU. 实际肯定没有这么简单的, 所以可以说是概念GPU.

概念GPU

图含16个处理单元, 128个ALU, 64组执行环境(Execution context), 512个并发程序片元(fragment). 假设频率1GHz的话, 运算能力以及是256GFLOPS了. 祭出n多年前的卡皇GTX 480, 就已经有480个CUDA核, 内存带宽177.4GB/s. 而GTX 980 Ti有2816个CUDA核, 内存带宽336.5GB/s. 所以运算能力早就是非常恐怖的了. 如果全部画出来, 基本上密集恐惧症福利了(手动滑稽). 但是带宽依旧是瓶颈, 虽然比CPU带宽高了一个数量级, 但是可以看到, GTX 980 Ti的带宽也就是多年前GTX 480的两倍左右.


GPU线程与存储

由于目前还没有完全依靠GPU运行得机器, 一般来说, 都是异构的, CPU+GPU. 这一点在GPU编程上是要特别注意的, 也就是Host与Device.

HOST-DEVICE

在CUDA架构下, 显示芯片执行时的最小单位是thread. 数个thread可以组成一个block. 一个block中的thread能存取同一块共享的内存, 而且可以快速进行同步的动作. 不同block中的thread无法存取同一个共享的内存, 因此无法直接互通或进行同步. 因此, 不同block中的thread能合作的程度是比较低的. 上图:

线程结构1

线程结构2

然后依据thread, block和grid, 有着不同的存储. 可以结合下面两幅图进行理解:

线程存储1

线程存储2

GPU都是SIMT(单指令多线程)的, 线程是基本操作单位. 所以所有结构的核心都是线程, 存储也是依据线程结构设计.


参考

http://html.rhhz.net/tis/html/20150101.htm# http://hustcat.github.io/gpu-architecture/ https://blog.csdn.net/Ddreaming/article/details/52504125 https://www.geforce.cn/hardware/desktop-gpus/geforce-gtx-980-ti/specifications https://www.bilibili.com/video/av10436982?t=1317&p=6

----

最后

这次的话, 有些图是自己做的, 有几张是参考文章中的. 这些图是很重要的, 就像写c程序, 不懂操作系统是没法写好的. 想做GPU编程, 不懂结构也是不行的. 喜欢记得点赞哦, 有意见或者建议评论区见~


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.10.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 前言
  • GPU架构
    • GPU处理单元
      • 概念GPU
      • GPU线程与存储
      • 参考
      • 最后
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档