GPU 硬件基础及内存模型


文章目录

  • GPU 硬件基础及内存模型
  • CUDA编程的2大特色:
  • GPU内存:
  • GPU硬件
  • 第3代GPU架构Fermi的SM有如下特点:
  • 每个流式多处理器SM组成
  • Rererence

CUDA编程的2大特色:

  • 通过层次结构组织线程
  • 通过层次结构组织内存访问点

GPU各级缓存、各种内存都是可以软件控制的,可以手动指定变量存储的位置。

GPU内存:

  • 寄存器(Register):寄存器是GPU上运行速度最快的内存空间,带宽为8TB/s,延迟为1个时钟周期。尽量将数据声明为局部变量,尽量使用寄存器
  • 共享内存(Shared memory):GPU上可受用户控制的一级缓存。具有更高的带宽与更低的延迟,通常其带宽为1.5TB/s左右,延迟为1~32个时钟周期。当存在重复利用的数据时,将数据放在共享内存里。如果数据不被重用,则直接将数据从全局内存或常量内存读入寄存器即可。
  • 常量内存(Constant Memory)
  • 全局内存(Global Memory):**GPU中最大、延迟最高并且最常使用的内存。**在编程中对全局内存访问的优化以最大化程度提高全局内存的数据吞吐量是十分重要的。尽量减少内存子系统再次发出访问操作的次数

Gpu内存有多大_数据

GPU硬件

GPU实际上是一个流式多处理器SM(Streaming-Multiprocessor)的阵列,每个SM包含N个计算核,这是GPU可以同时处理很多任务的关键

Gpu内存有多大_GPU_02

第3代GPU架构Fermi的SM有如下特点:

  • 每个 SM 32 个 CUDA 内核,比 GT200 高出 4 倍
  • 8 倍于 GT200 的峰值双精度浮点性能
  • Dual Warp Scheduler 2个独立的warp,同时调度和发送指令
  • 64 KB RAM,具有可配置的共享内存和 L1 缓存分区

每个流式多处理器SM组成

  • 大量的计算核(CUDA核):为线程的每个时钟执行浮点或整数指令
  • 寄存器(Register)
  • 共享内存(Shared Memory)
  • **LDU(Load-Store Units):**每个SM有16个Load/Store单元,允许16个线程每个时钟周期计算源和目的地址,支持将每个地址的数据读取和存储到缓存或DRAM中。
  • 特殊函数单元 SFU(Special-Function Units):处理sin、cos、求倒数、开平方函数。每个SFU在每个时钟周期内为每个线程执行一个指令;一个warp需要执行8个时钟周期。SFU流水线与调度单元解耦,使得调度单元可以向其他执行单元发出指令,同时SFU正忙。
  • 双warp调度器(Wrap Scheduler)SM将32个并行的线程归为一组称为线程束(即warp),以此为单位进行调度。每个SM具有两个warp调度器和两个指令分派单元,允许同时有两个warp被分派指令和执行。Fermi的双warp调度器选择两个warp,每个warp的指令会发送到16个核心、16个加载/存储单元或4个SFU中。由于warp独立执行,Fermi的调度器不需要从指令流中检查依赖关系。使用这种优雅的双分发模型,Fermi实现了接近硬件峰值的性能。

Gpu内存有多大_CUDA_03

512 个 CUDA 核心被组织成 16 个 SM,每个 32 个核心。

GPU 有6个 64 位显存分区,用于 384 位显存接口,总共支持高达 6 GB 的 GDDR5 DRAM 显存。

主机接口通过 PCI-Express 将 GPU 连接到 CPU。 GigaThread 全局调度程序将线程块分发给 SM 线程调度程序。

Fermi 的 16 个 SM 位于一个普通的 L2 缓存周围。

每个 SM 是一个垂直的矩形条带,包含橙色部分(调度程序和调度器)、绿色部分(执行单元)和浅蓝色部分(寄存器文件和 L1 缓存)。

Gpu内存有多大_CUDA_04

这种结构通过层级结构组织大量的CUDA计算核,并给各级都分配相应的内存系统,使得GPU具有高并行度计算的能力

Gpu内存有多大_数据_05

内存接口位数是显卡或其他设备与内存之间传输数据时的数据位数。主要体现在2个方面:

  • 内存带宽:内存接口位数越高,设备每秒钟可以传输的数据量就越大,带宽就越大。带宽的大小直接影响设备的性能。
  • 内存容量:内存接口位数和内存容量之间有一定的关系。例如,如果显卡的内存接口位数为256位,那么它对应的内存容量通常为2GB或4GB。因为一般来说,内存容量越大,数据位数也就越大,需要更高的内存接口位数才能满足数据传输的需求。

Rererence

NVIDIA fermi架构白皮书

CUDA编程入门(二)GPU硬件基础

Nvidia架构演进——Fermi架构