惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
A
Arctic Wolf
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Threatpost
P
Proofpoint News Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
V
Vulnerabilities – Threatpost
V
V2EX
Webroot Blog
Webroot Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Privacy & Cybersecurity Law Blog
P
Privacy International News Feed
T
Tor Project blog
P
Proofpoint News Feed
T
Tailwind CSS Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Vercel News
Vercel News
Security Archives - TechRepublic
Security Archives - TechRepublic
MongoDB | Blog
MongoDB | Blog
T
Troy Hunt's Blog
Google DeepMind News
Google DeepMind News
NISL@THU
NISL@THU
C
CERT Recently Published Vulnerability Notes
W
WeLiveSecurity
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
GbyAI
GbyAI
Y
Y Combinator Blog
T
Threat Research - Cisco Blogs
S
Security Affairs
Google Online Security Blog
Google Online Security Blog
S
Securelist
Spread Privacy
Spread Privacy
Recent Announcements
Recent Announcements
The Register - Security
The Register - Security
C
Cybersecurity and Infrastructure Security Agency CISA
爱范儿
爱范儿
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Scott Helme
Scott Helme
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog RSS Feed
AWS News Blog
AWS News Blog

Пусть этот камень будет более крепким, чем человек

【琐记】烟火与尘埃 【Triton】Triton实现矩阵乘 【LLM推理加速】FlashAttention 【LLM推理加速】PagedAttention 【LLM推理加速】Online Softmax LLM基础知识【1】 Transformer模型 【AI编译】LayerGroup Tiling Tile的疑惑和思考 【AI编译】深度优先的Tile调度,万事大吉? 【AI编译】多级流水线Tile调度策略 【CUDA C++】GPU内存使用【3】 【AI编译】Cache缓存地址映射 【CUDA C++】GPU基本介绍【1】 【00】0序章-不受欢迎的来客 【转载】我来了——持续低熵 【Halide】调度优化【2】 【感想】写作进度报告5 【Halide】调度优化【1】 【转载】北大中文男足战报2 【BYOC】TVM切分子图 【转载】北大中文男足战报1 【AI编译】张量生命周期管理 SystemC 用寄存器同步建模方法 【脉动阵列】脉动阵列类型 【im2col】AScend conv accelerate 【感想】写作进度报告4 【BYOC】TVM添加自定义编译器 ccompiler 【感想】写作进度报告3 【Tengine】推理流程脑图【2】 【Tengine】推理流程脑图【1】 【NCNN】学习ncnn模型转换 【编译器】使用llvm编译自定义语言【3】编译 object 【编译器】使用llvm编译自定义语言【2】转llvm IR 【编译器】使用llvm编译自定义语言【1】构建AST 【AI编译】如何进行内存分配 【感想】写作进度报告2 【AI编译】layer-group之后如何tiling 【AI编译】如何进行layer-group 【量化】连续卷积层首尾量化的可行性 【Gemm】内存对齐 【gemm】Gemm计算加速 【TVM】通过代码学习编译流程【5】FuseOps 【TVM】通过代码学习编译流程【6】CodeGen 【TVM】通过代码学习类【3.5】Pass 【TVM】通过代码学习编译流程【4】BuildRelay 【AI编译】Tiling操作能优化什么时间 【TVM】通过代码学习编译流程【3】模型编译 【TVM】通过代码学习编译流程【2】模型转换 【TVM】通过代码学习编译流程【1】必要知识 【感想】写作进度报告1 【Winograd】卷积加速算法原理及实现 SystemC 等待异步事件解决方案 【TVM】Python脚本实现模型编译和保存 【推理引擎】常见AI推理框架 【3D建模】T110E3卡迪夫蓝调皮肤模型 【TVM】C++部署运行TVM 【推理引擎】NCNN和Tengine量化推理逻辑对比 【3D建模】IS-7攻城锤流纹岩皮肤展示 【TVM】根据例子走通代码库 博客汇总目录 【Im2Col】卷积加速算法【2】NHWC 【Im2Col】卷积加速算法【1】 NCHW openBlas库的安装与简单使用 C语言工程调用Cpp库解决方案 foo Hello World
【CUDA C++】GPU存储【2】
Post author: XianMu@Пусть этот камень будет более крепким, чем ч · 2026-01-16 · via Пусть этот камень будет более крепким, чем человек

# 前言

本篇是介绍 GPU 的存储硬件。资料来源于 官网 CUDA Programming Guide。本文会比官网教程简洁一些,去掉一些我不太感兴趣的内容(任性)。

参考 官网 CUDA Programming Guide

作为初学者,错误在所难免,还望不吝赐教。

# GPU Memory

在现代计算系统中,有效利用内存与最大限度地利用执行计算的逻辑单元同样重要。异构系统拥有多个内存空间,而图形处理器(GPU)除了缓存之外,还包含多种类型的可编程片上内存。

CPU 存储

# Global Memory(全局内存)

  • 物理本质:GPU 芯片外的 DRAM 芯片(即显存,VRAM)
  • 别名:GPU DRAM、Device Memory
  • 访问范围:所有 SM(Streaming Multiprocessors)均可访问
  • 特点:
  • 容量大(如 8GB–24GB)
  • 延迟高,但带宽极高(通过宽总线)
  • 在 CUDA 编程中通过 cudaMalloc () 分配
  • 在架构图中的位置
  • 位于 GPU 芯片外部,通过 Memory Controller 连接到 GPU 核心,通常标注为 "GPU DRAM" 或 "Global Memory"。

# System Memory / Host Memory(系统内存 / 主机内存)

  • 物理本质:CPU 旁边的 DDR4/DDR5 内存条
  • 访问者:CPU 可直接访问;GPU 需通过 PCIe 或 NVLink 访问(速度慢)
  • 在统一虚拟地址空间下:与 GPU 全局内存共用一个地址空间,但物理分离
  • 在架构图中的位置:
    位于 CPU 一侧,通过 PCIe/NVLink 总线连接到 GPU,通常标注为 "SYSTEM DRAM" 或 "Host Memory"。

# On-Chip Memory(片上内存)—— 属于每个 SM

# (a) Register File(寄存器文件)

  • 归属:每个 SM 独有
  • 分配单位:每个线程(thread)
  • 用途:存储线程的局部变量(由编译器自动分配)
  • 特点:
  • 速度最快(零延迟访问)
  • 容量有限(如每个 SM 有 65536 个 32-bit 寄存器)
  • 线程块能否被调度到 SM,取决于寄存器是否够用
  • 在架构图中的位置:
    位于 每个 SM 内部,紧邻 CUDA Core / FP32 ALU,通常标为 "Register File"。
  • 归属:每个 SM 独有
  • 分配单位:每个线程块(thread block)
  • 用途:线程块内线程间通信、数据重用(如矩阵分块)
  • 特点:
  • 速度极快(接近寄存器)
  • 容量小(通常 64KB–164KB per SM),可与 L1 缓存动态划分
  • 程序员显式管理( __shared__ 关键字)
  • 在架构图中的位置:
    位于 SM 内部,与 Register File 并列,常标为 "Shared Memory" 或包含在 "Unified Data Cache" 模块中(因与 L1 共享物理存储)。

# Caches(缓存)

# (a) L1 Cache(一级缓存)

  • 归属:每个 SM 独有
  • 物理实现:与 Shared Memory 共享同一块 SRAM(称为 Unified Data Cache)
  • 用途:缓存 global memory 的数据(可配置为更多 L1 或更多 Shared Memory)
  • 在架构图中的位置:
    通常与 Shared Memory 合并表示为 "Unified Data Cache" 或 "L1/Shared Memory" 模块,位于 SM 内部。

# (b) L2 Cache(二级缓存)

  • 归属:整个 GPU 共享
  • 用途:缓存所有 SM 对 global memory 的访问,减少 DRAM 访问次数
  • 容量:几 MB 到几十 MB(如 RTX 4090 有 72MB L2)
  • 在架构图中的位置:
    位于 所有 SM 之外、GPU DRAM 之前,通常画成一个大的 "L2 Cache" 模块,连接所有 SM 和 Memory Controller。

# (c) Constant Cache(常量缓存)

  • 归属:每个 SM 独有
  • 用途:缓存标记为 __constant__ 的只读数据(如 kernel 参数)
  • 特点:小容量、广播式访问、低延迟
  • 在架构图中的位置:
    通常在 SM 内部单独标出,或作为 L1 之外的一个小模块,标为 "Constant Cache"。

# Unified Memory(统一内存)

  • 注意:这不是一种 “物理内存”,而是一种编程模型 + 硬件 / 运行时支持机制
  • 作用:让 CPU 和 GPU 使用同一个指针访问数据,系统自动迁移数据
  • 底层仍使用:System Memory + Global Memory(物理上仍是两块)
  • 在架构图中:不对应具体硬件模块,但依赖 统一虚拟地址空间(Unified Virtual Addressing, UVA) 和 页迁移引擎(Page Migration Engine),这些通常由 MMU(内存管理单元) 和 IOMMU 支持,在高级架构图中可能不显式画出。

# 总结:

总结图

# 后记

本博客目前以及可预期的将来都不会支持评论功能。各位大侠如若有指教和问题,可以在我的 github 项目 或随便一个项目下提出 issue,并指明哪一篇博客,看到一定及时回复!