Nvidia CUDA初级教程4 GPU体系架构概述

Nvidia CUDA初级教程4 GPU体系架构概述

视频:https://www.bilibili.com/video/BV1kx411m7Fk?p=5
讲师:周斌

本节内容:

  • 为什么需要GPU
  • 三种方法提升GPU的处理速度
  • 实际GPU的设计举例:
    • NVDIA GTX 480: Fermi
    • NVDIA GTX 680: Kepler
  • GPU存储器设计

名词解释

  • FLOPS - Floating-point OPerations per Second
  • GFLOPS - One billion (10e9) FLOPS
  • TFLOPS - 1000GFLOPS

为什么需要GPU

  • 应用的需求越来越高
  • 计算机技术由应用驱动 Application Driven
    • 石油勘探
    • 气象预报

GPU图示

结构略图

GPU是一个异构的多处理器芯片,为图形图像处理优化

在这里插入图片描述

执行单元 Execute Shader

在这里插入图片描述

CPU类型的内核

在这里插入图片描述

可以看到,在常规的CPU类型的芯片中,真正进行运算的部分(左侧)所占的面积并不大,而是大缓存和上节提到的乱序执行控制逻辑、分支预测器等优化部分占了很大一部分面积。

思路1:精简、减肥

移除掉那些来帮助单个指令流执行的更快的组件。

两个核,同时执行两个程序片元

在这里插入图片描述

16个核,同时执行16个程序片元

在这里插入图片描述

指令流共享:多个程序片元共享指令流。因为如果要执行不同的指令流的话,就需要复杂的控制机构。

思路二:增加ALU,SIMD

在这里插入图片描述

  • 处理单元ALU改进
  • 指令变化
  • 多数据并行

128(16*8)个程序片元同时执行,并发16路指令流

在这里插入图片描述

这16路可以共享相同的指令流,也可以不共享。

注意:

  • SIMD处理并不总是需要显式的SIMD指令:
    • 选项一:显式的向量运算指令
      • SSE等
    • 选项二:标量指令,但是硬件进行矢量化
      • 硬件进行指令流共享
      • NVIDIA等架构
      • 多个片元共享指令流
分支处理怎么办?

在这里插入图片描述

由于共享相同的指令流,故按照根据逻辑,某些数据在分支被执行时,另一些在其他分支的数据只能等待。因为它们共享指令流,同一时间必须做相同的事情。

停滞怎么办?

指令有时需要等待其依赖的数据

思路三:片元切换,掩藏延迟

上面提到,很多时候(如分支处理、停滞等),会出现大量片元等待的情况,这无疑会大大降低效率。对此,我们有思路三:

  • 大量的独立片元相互切换
  • 通过偏远切换来掩藏延迟

给单个片元设置多个(彼此独立的)任务,当某个任务停滞时,去执行其他任务。

获得较高的吞吐 throughput。

上下文存储空间

在这里插入图片描述

18个小的上下文:更好的延迟掩藏的效果

在这里插入图片描述

12个中等大小的上下文

在这里插入图片描述

四个大的上下文:延迟隐藏效果较差

在这里插入图片描述

每个上下文更大,但是延迟隐藏能力较差

注意:

  • 上下文切换可以使软件管理也可以是硬件管理,也可以是结合管理。

总结

“我”的设计

根据上面的三个思路,我们得到了一种芯片设计:

在这里插入图片描述

  • 16个核
  • 每个核8个乘加ALU
  • 16个同时指令流
  • 64路并发指令流
  • 512 (16*4*8) 个并发程序片元
  • 256GFLOPS,1GHz

三个关键思路

  1. 保留每个核的计算部分,将其他部分尽量移除
  2. 将每个核填满 ALU (通过共享指令流)
    • 选项1:显式的 SIMD 向量指令
    • 选项2:隐式的共享,由硬件管理
  3. 通过在多组任务间切换避免停滞

不同GPU架构举例

Fermi架构

Kepler架构

存储和数据访问

CPU类型的缓存

在这里插入图片描述

CPU通常会有多级缓存

GPU型的吞吐处理核

GPU中有更多的ALU,没有传统的分级缓存,需要更高的带宽

在这里插入图片描述

带宽是非常宝贵的资源

减少带宽需求

  • 减少不必要的数据请求,做更多的计算
  • 每次访存多取数据,从而减少访存次数

现代GPU的存储器结构

在这里插入图片描述

总结

GPU的特点

GPU是异构、众核的处理器

针对吞吐优化

高效的GPU任务具备的条件

  • 具有成千上万的独立工作
    • 尽量利用大量的ALU单元
    • 大量的片元切换掩藏延迟
  • 可以共享指令流
    • 适用于 SIMD
  • 最好是计算密集的任务
    • 通信和计算的开销比例合适
    • 不要受制于访存带宽
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值