【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。

相关推荐
lancyu1 小时前
关于多轮对话机器人的上下文Token优化和解决方案
人工智能·python·深度学习·机器学习·chatgpt·机器人·prompt
奈斯先生Vector1 小时前
从 127.0.0.1:3080 到插件运行时:DeepSeek Harness 远程开发与版本治理实战
linux·运维·人工智能·ubuntu·aigc
joinwell521 小时前
AI Agent 的技能不是工具权限:为什么“会怎么做”和“允许做什么”必须分开?
人工智能
IT_陈寒1 小时前
Vite动态导入差点让我秃头,原来问题出在这
前端·人工智能·后端
luckystar513~1 小时前
自己动手写Agent Harness【agent tools】:给它装手和眼睛(工具注册与执行流水线)
人工智能
工具分享2 小时前
陪跑跟品爆单AI选品助手,高效跟品会赔本吗?
人工智能·python
COOLMO研究AI2 小时前
Python 如何实现 AI API 的提示词(Prompt)版本管理与热更新
人工智能·python·prompt
官乐2 小时前
AI面试指南(多agent开发流程)
人工智能·面试·职场和发展
学习zhao极致it2 小时前
AI量化交易训练营(完结)
人工智能