大数据,机器学习,人工智能机器学习和人工智能入门机器学习与数据挖掘

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

2018-10-23  本文已影响27人  sean_depp

目录

  • 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的两倍左右.

SM

看到上图, GPU硬件的一个核心组件是SM, SM是英文名是Streaming Multiprocessor, 翻译过来就是流式多处理器. SM的核心组件包括CUDA核心, (其实就是ALU, 如上图绿色小块就是一个CUDA核心)共享内存, 寄存器等, SM可以并发地执行数百个线程, 并发能力就取决于SM所拥有的资源数. 当一个kernel被执行时, 它的gird中的线程块被分配到SM上, 一个线程块只能在一个SM上被调度. SM一般可以调度多个线程块, 这要看SM本身的能力. 那么有可能一个kernel的各个线程块被分配多个SM, 所以grid只是逻辑层, 而SM才是执行的物理层. SM采用的是SIMT(Single-Instruction, Multiple-Thread, 单指令多线程)架构, 基本的执行单元是线程束(wraps), 线程束包含32个线程, 这些线程同时执行相同的指令, 但是每个线程都包含自己的指令地址计数器和寄存器状态,也有自己独立的执行路径.


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
  • 每个处理器上有一组本地32位寄存器(Registers);
  • 并行数据缓存或共享存储器(Shared Memory), 由所有标量处理器核心共享, 共享存储器空间就位于此处;
  • 只读固定缓存(Constant Cache), 由所有标量处理器核心共享, 可加速从固定存储器空间进行的读取操作(这是设备存储器的一个只读区域);
  • 一个只读纹理缓存(Texture Cache), 由所有标量处理器核心共享, 加速从纹理存储器空间进行的读取操作(这是设备存储器的一个只读区域), 每个多处理器都会通过实现不同寻址模型和数据过滤的纹理单元访问纹理缓存.
线程存储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
https://zhuanlan.zhihu.com/p/34587739
https://blog.csdn.net/sunmc1204953974/article/details/51000970
https://www.jianshu.com/p/4477174c12f6


最后

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


上一篇下一篇

猜你喜欢

热点阅读