GPU微观物理结构框架
一.CPU 和 GPU 在物理结构和设计上有何区别
首先需要解释CPU(Central
Processing Unit)和GPU(Graphics
Processing Unit)这两个缩写分别代表什么。CPU即中央处理器,GPU即图形处理器。其次,要解释两者的区别,要先明白两者的相同之处:两者都有总线和外界联系,有自己的缓存体系,以及数字和逻辑运算单元。一句话,两者都为了完成计算任务而设计。

先直观地上个示意图:
GPU微观物理结构框架-编程之家
  从图中可以看到,CPU和GPU均有自己的存储(橙色部分,实际的存储体系比图示更为复杂),控制逻辑(黄色部分)和运算单元(绿色部分),但区别是CPU的控制逻辑更复杂,而GPU的运算单元虽然较小但是众多,GPU也可以提供更多的寄存器和程序猿可控的多级存储资源。
CPU和GPU的差异可以描述在下面表格中:
GPU微观物理结构框架-编程之家
  两者的区别在于存在于片内的缓存体系和数字逻辑运算单元的结构差异:CPU虽然有多核,但总数没有超过两位数,每个核都有足够大的缓存和足够多的数字和逻辑运算单元,并辅助有很多加速分支判断甚至更复杂的逻辑判断的硬件;GPU的核数远超CPU,被称为众核(NVIDIA Fermi有512个核)。每个核拥有的缓存大小相对小,数字逻辑运算单元也少而简单(GPU初始时在浮点计算上一直弱于CPU)。从结果上导致CPU擅长处理具有复杂计算步骤和复杂数据依赖的计算任务,如分布式计算,数据压缩,人工智能,物理模拟,以及其他很多很多计算任务等。
  GPU由于历史原因,是为了视频游戏而产生的(至今其主要驱动力还是不断增长的视频游戏市场),在三维游戏中常常出现的一类操作是对海量数据进行相同的操作,如:对每一个顶点进行同样的坐标变换,对每一个顶点按照同样的光照模型计算颜色值。GPU的众核架构非常适合把同样的指令流并行发送到众核上,采用不同的输入数据执行。在2003-2004年左右,图形学之外的领域专家开始注意到GPU与众不同的计算能力,开始尝试把GPU用于通用计算(即GPGPU)。之后NVIDIA发布了CUDA,AMD和Apple等公司也发布了OpenCL,GPU开始在通用计算领域得到广泛应用,包括:数值分析,海量数据处理(排序,Map-Reduce等),金融分析等等。
  简而言之,当程序员为CPU编写程序时,倾向于利用复杂的逻辑结构优化算法从而减少计算任务的运行时间,即Latency。当程序员为GPU编写程序时,则利用其处理海量数据的优势,通过提高总的数据吞吐量(Throughput)来掩盖Lantency。目前,CPU和GPU的区别正在逐渐缩小,因为GPU也在处理不规则任务和线程间通信方面有了长足的进步。另外,功耗问题对于GPU比CPU更严重。

CPU和GPU之间的差异(缓存、核心数量、内存、线程数等)可用下图展示出来:
GPU微观物理结构框架-编程之家
二.GPU微观物理结构技术

GPU的微观结构因不同厂商、不同架构都会有所差异,但核心部件、概念、以及运行机制大同小异。下面将展示部分架构的GPU微观物理结构。

  1. NVidia Tesla架构
    GPU微观物理结构框架-编程之家
    Tesla微观架构总览图如上。下面将阐述它的特性和概念:
    拥有7组TPC(Texture/Processor Cluster,纹理处理簇)
    每个TPC有两组SM(Stream Multiprocessor,流多处理器)
    每个SM包含:
    o 6个SP(Streaming Processor,流处理器)
    o 2个SFU(Special Function Unit,特殊函数单元)
    o L1缓存、MT Issue(多线程指令获取)、C-Cache(常量缓存)、共享内存
    除了TPC核心单元,还有与显存、CPU、系统内存交互的各种部件。
  2. NVidia Fermi架构
    GPU微观物理结构框架-编程之家
    Fermi架构如上图,它的特性如下:
    拥有16个SM
    每个SM:
    o 2个Warp(线程束)
    o 两组共32个Core
    o 16组加载存储单元(LD/ST)
    o 4个特殊函数单元(SFU)
    每个Warp:
    o 16个Core
    o Warp编排器(Warp Scheduler)
    o 分发单元(Dispatch Unit)
    每个Core:
    o 1个FPU(浮点数单元)
    o 1个ALU(逻辑运算单元)
  3. NVidia Maxwell架构
    GPU微观物理结构框架-编程之家
    采用了Maxwell的GM204,拥有4个GPC,每个GPC有4个SM,对比Tesla架构来说,在处理单元上有了很大的提升。
  4. NVidia Kepler架构
    GPU微观物理结构框架-编程之家5. NVidia Turing架构
    GPU微观物理结构框架-编程之家
    上图是采纳了Turing架构的TU102 GPU,它的特点如下:
    6 GPC(图形处理簇)
    36 TPC(纹理处理簇)
    72 SM(流多处理器)
    每个GPC有6个TPC,每个TPC有2个SM
    4,608 CUDA核·
    72 RT核
    576 Tensor核
    288 纹理单元
    12×32位 GDDR6内存控制器 (共384位)
    单个SM的结构图如下:
    GPU微观物理结构框架-编程之家
    每个SM包含:
    64 CUDA核
    8 Tensor核
    256 KB寄存器文件
    TU102 GPU芯片实物图:
    GPU微观物理结构框架-编程之家
  5. GPU架构的共性

所有GPU架构,虽然有所差异,但存在着很多相同的概念和部件:

· GPC

· TPC

· Thread

· SM、SMX、SMM

· Warp

· SP

· Core

· ALU

· FPU

· SFU

· ROP

· Load/Store Unit

· L1 Cache

· L2 Cache