8 流处理簇

  • SM是GPU中运行CUDA内核函数的部分。
  • 每一个SM含
  • 上千上万计的可以被划分到执行线程的寄存器
  • 几种类型
    • 在线程之间快速交换数据的共享内存
    • 快速分发从常量内存中读取数据的常量缓存
    • 用以从纹理内存中聚合带宽的纹理缓存;
    • 减少访问本地或全局内存造成延迟的一级缓存
  • 线程束调度器,它可很快地在线程之间切换上下文,并将就绪状态的指令发给线程束
  • 整型变量与浮点型变量操作的执行核心,它可进行:
    • 整形和单精度浮点数操作
    • 双精度浮点数操作
    • 特殊函数单元(SFU),用来执行单精度浮点数的超越函数
      ( Transcendental Functions)操作。

要这么多reg,且硬件可如此高效地在不同的线程间快速切换上下文,是为了最大化硬件的吞吐量。

  • GPU有足够的状态来应对:
    • 在一个读指令执行后
    • 数据从设备读出的数百时钟周期的
    • 执行延迟和访存延迟。

SM是多用途处理器,但是SM的设计与CPU执行核心有很多不同:

  • SM的时钟频率要低很多;
  • 支持指令并行,但不支持分支预测和预测执行;
  • 它们没有或只有很小的缓存。
  • 适合工作量下,GPU的超强计算力不仅弥补这些劣势,甚至会表现更强大。

06年的第一款支持CUDA的设备面世以来,

  • SM的设计发展,产生了3次主要更法:
  • 代号为特斯拉、费米和开普勒的架构。
  • 可调用cudaGetDeviceProperties()查看cudaDeviceProp. major和 cudaDeviceProp.minor,或调用驱动程序API函数 cuDeviceComputeCapability()来查看设备的计算能力。
  • 计算能力1.x、2.x和3.x分别对应三个架构
  • 表8-1:每一代SM硬件中新添加的功能。

8 流处理簇

2章中,

  • 2-29~2-32:不同SM的框图。
  • CUDA核心可执行整型和单精度浮点型指令;
  • 若有个双精度单元的话,还支持双精度运算;
  • 特殊函数单元实现求倒数、平方根倒数、正/余弦以及对数/指数的函数。
  • 线程束调度器在这些指令执行需要的资源变得可用时,将指令分发到这些执行单元。

本章聚焦于SM指令集的能力。

  • 有时,这也称“SASS”指令,这是CUDA驱动程序或 ptxas 翻译PTX中间码得到的本地指令。
  • 开发者不能直接改SASS代码,但英伟达通过cuobjdump开发工具使这些指令可见,这样便可通过检查已编译的微码来直接优化源代码。

8.1 内存