Skip to content

第7章:向量、GPU 与性能上界

并行形式

指令级并行在一个指令流中寻找独立指令;线程级并行运行多个执行流;数据级并行把相似操作施加到多个数据元素。它们可以同时存在,但程序中的依赖与通信会限制每一种并行性。

SIMD 指令操作多个数据通道,向量架构用向量长度等状态处理较长序列。GPU 通常将线程分组共同发射指令。组内控制流分歧可能让不同路径分段执行,活跃线程减少,降低有效利用率。

访存合并与计算密度

相邻线程访问相邻地址时,设备更容易把访问合并成较少的内存事务。跨步或随机访问可能传输很多未使用字节,因此理论带宽无法全部转成有用数据。

算术强度 II 定义为执行的浮点操作数除以某一指定存储层边界传输的字节数。Roofline 模型给出

Pmin(Ppeak,BI),P\le\min(P_{peak}, B I),

其中 BB 为该边界可用带宽。必须说明字节数按 DRAM、缓存还是设备互连计算。

若峰值为 2 TFLOP/s,主存带宽 200 GB/s,算法强度为 2 FLOP/B,则带宽上界为 400 GFLOP/s,增加算术单元并不能越过这个限制。

分块矩阵乘法

朴素矩阵乘法要执行 O(n3)O(n^3) 次乘加。若每次都从慢存储重新取得操作数,数据搬运成本很高。分块把小矩阵块留在快存储内,复用同一数据参与多个乘加,从而提高算术强度。

块越大并非总越好:可能放不进共享内存或寄存器,降低并发驻留数量,甚至溢出到慢存储。选择块大小是容量、并行度和复用之间的权衡。

能耗与加速器

动态功耗常用 αCV2f\alpha C V^2 f 作粗略模型,另有静态漏电等消耗。升频可能需要升压,功耗增长因此不只是线性。

专用加速器通过限制通用性减少控制和数据搬运开销。但端到端任务还包含主机准备、数据传输和同步。只报告核函数的加速比,会遗漏实际应用中无法加速的时间。

练习

  1. 上述机器要接近计算峰值,算术强度至少达到多少?
  2. 分块后操作数相同,程序为什么仍可能明显加速?
  3. 一个 GPU 内核快十倍,但传输占原总时间一半,整体最多能快多少?

上次更新: