【infra之路】GPU 执行与存储层次全景关系图

复制代码
┌─────────────────────────────────────────────────────────────────────┐
│                        GRID (Kernel Launch)                         │
│  ┌──────────────────┐ ┌──────────────────┐       ┌──────────────┐  │
│  │   BLOCK (0,0)    │ │   BLOCK (1,0)    │ ...   │ BLOCK (n,m)  │  │
│  │                  │ │                  │       │              │  │
│  │ ┌──────────────┐ │ │ ┌──────────────┐ │       │              │  │
│  │ │  WARP 0      │ │ │ │  WARP 0      │ │       │              │  │
│  │ │ T0 T1 ...T31 │ │ │ │ T0 T1 ...T31 │ │       │              │  │
│  │ ├──────────────┤ │ │ ├──────────────┤ │       │              │  │
│  │ │  WARP 1      │ │ │ │  WARP 1      │ │       │              │  │
│  │ │ T32 T33...T63│ │ │ │ T32 T33...T63│ │       │              │  │
│  │ ├──────────────┤ │ │ ├──────────────┤ │       │              │  │
│  │ │  ...         │ │ │ │  ...         │ │       │              │  │
│  │ └──────────────┘ │ │ └──────────────┘ │       │              │  │
│  │                  │ │                  │       │              │  │
│  │ ╔══════════════╗ │ │ ╔══════════════╗ │       │              │  │
│  │ ║ SHARED MEM   ║ │ │ ║ SHARED MEM   ║ │       │              │  │
│  │ ║ (per Block)  ║ │ │ ║ (per Block)  ║ │       │              │  │
│  │ ╚══════════════╝ │ │ ╚══════════════╝ │       │              │  │
│  └──────────────────┘ └──────────────────┘       └──────────────┘  │
└─────────────────────────────────────────────────────────────────────┘
          │ mapped to                    │ mapped to
          ▼                              ▼
┌─────────────────────────────────────────────────────────────────────┐
│                     PHYSICAL HARDWARE (SM)                          │
│                                                                     │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │                    WARP SCHEDULER                           │   │
│  │  selects ready warp → issues instruction every cycle        │   │
│  └──────────────────────────┬──────────────────────────────────┘   │
│                             │                                      │
│              ┌──────────────┼──────────────┐                       │
│              ▼              ▼              ▼                       │
│  ┌───────────────┐ ┌───────────────┐ ┌───────────────┐            │
│  │  REG FILE     │ │  L1 / SMEM    │ │  LD/ST UNIT   │            │
│  │  (per Thread) │ │  (per SM)     │ │  → L2 → HBM   │            │
│  │  64K × 32bit │ │               │ │               │            │
│  └───────────────┘ │ ┌───────────┐ │ └───────────────┘            │
│                    │ │ L1 CACHE  │ │                               │
│                    │ │ 128B Line │ │                               │
│                    │ │(Warp-gran.)│ │                               │
│                    │ ├───────────┤ │                               │
│                    │ │SHARED MEM │ │                               │
│                    │ │ 32 Banks  │ │                               │
│                    │ │ × 4B each │ │                               │
│                    │ │(Bank Conf!)│ │                               │
│                    │ └───────────┘ │                               │
│                    └───────────────┘                               │
└─────────────────────────────────────────────────────────────────────┘

五层抽象的归属与边界

复制代码
软件抽象层(程序员可见)          硬件实现层(对程序员透明)
━━━━━━━━━━━━━━━━━━━━━          ━━━━━━━━━━━━━━━━━━━━━━━━
Grid    ──────────────────→     整个 GPU(所有 SM)
Block   ──────────────────→     单个 SM(一个 Block 不跨 SM)
Thread  ──────────────────→     寄存器 + ALU 时间片
Warp    ──────────────────→     调度器最小发射单元(32 Threads 锁步)
Shared Memory ───────────→     SM 内 32-Bank SRAM
L1 Cache ────────────────→     SM 内 128B-Line SRAM(与 SMEM 物理共享)
L2 Cache ────────────────→     全芯片共享,32B Sector
HBM     ─────────────────→     片外 DRAM Stack

关键关系速查表

关系 说明
Grid → Block Grid 是 Block 的二维/三维数组;Block 间无序、无同步(除 Cooperative Groups)
Block → Warp Block 内线程按创建顺序每 32 个编为一个 Warp;Warp 是实际调度单位
Warp → Thread Warp 内 32 线程SIMT 锁步执行;分支发散时串行化 mask 切换
Block → Shared Mem 每个 Block 独占一块 SMEM;Block 结束后 SMEM 内容失效
Warp → L1 L1 line = 128B = 一个 Warp 的完美合并请求大小
Warp → Bank 32 threads ↔ 32 banks;同周期同 bank 不同地址 → conflict
Thread → Register 每个 Thread 有独立寄存器文件;跨 Thread 通信必须经 SMEM/L1
L1/SMEM → L2 → HBM 逐级容量增大、延迟增大、粒度变化;Memory Controller 做粒度适配

最容易混淆的三个边界

  1. Warp ≠ Block

    Block 是资源分配单位(SMEM、barrier),Warp 是执行单位。一个 Block 可能有 8 个 Warp,但同一时刻只有部分 Warp 在发射指令。

  2. L1 ≠ Shared Memory

    物理上共用同一块 SRAM,可配置比例(如 64KB/64KB),但逻辑上完全独立:L1 是自动管理的 cache(128B line),SMEM 是显式管理的 scratchpad(32-bank)。Bank conflict 只影响 SMEM,不影响 L1。

  3. Thread 不是并行单位

    硬件从不单独调度一个 Thread。所有资源分配、指令发射、内存访问都以 Warp(32T) 为原子单位。"Thread" 只是编程模型中的索引抽象。


一句话总结

Grid/Block/Thread 是程序员的组织抽象,Warp/Bank/SMEM/L1 是硬件的执行现实。前者决定"数据怎么分",后者决定"数据怎么跑"。性能优化的本质,就是让前者的划分方式恰好对齐后者的物理约束------Warp 对齐 32,SMEM 对齐 32-bank,L1 对齐 128B,L2 对齐 32B sector,HBM 对齐 burst size。

相关推荐
todoitbo8 分钟前
Q1 MuJoCo 模型里的 49 项传感器定义与 60 维数据:一次关节和 IMU 输出核验
人工智能·ai·机器人·1024程序员节·启元机器人
RFID科技的魅力12 分钟前
2026 年 RFID 资产标签批量制作怎么做?RFID 标签打印机实操指南
运维·人工智能·嵌入式硬件·物联网
再__努力1点15 分钟前
RK3576/RV1126B多路视频 AI 开源引擎 CosmoEdge:从模型到交付,轻松搞定!
人工智能·opencv·计算机视觉·架构·课程设计
IT_陈寒26 分钟前
Redis的LRU淘汰策略坑了我一整天
前端·人工智能·后端
墨抒颖 msy.plus27 分钟前
矩阵、注意力与 GPU:拆解 DeepGEMM 与 FlashMLA
人工智能·llm·gpu·源码解析·1024程序员节·deepseek
甲维斯37 分钟前
K3.1pro你这“机灵鬼”,3D建模无敌了!
人工智能
企业数字化笔记38 分钟前
AI视频卡顿怎么定位?用帧差和时间戳区分静帧与播放问题
人工智能
一级新生1 小时前
提示词工程:跟 AI 打交道的手艺
人工智能·大模型·dify·1024程序员节·提示词工程