CUDA 内存池 · 设计实现

📘 30 章 · 从入门到实战
🧩 友好色系 ⚡ 全局内存 · 共享内存 · 伙伴系统 · 流同步 📁 点击卡片跳转章节 (01.html ~ 30.html)
01
全局内存、共享内存、寄存器、本地内存、常量内存、纹理内存的概念与区别。
02
cudaMalloc/cudaFree开销分析,频繁分配释放对性能的影响。
03
降低延迟、减少碎片、提高带宽利用率、支持动态大小。
04
空闲链表、伙伴系统、slab分配器、红黑树的选择与对比。
05
预分配策略、按需增长策略、固定大小池 vs 可变大小池。
06
allocate(size_t) 与 deallocate(void*) 的语义与实现。
07
内存对齐 07.html
CUDA内存对齐要求(128字节对齐),对齐分配器的实现。
08
线程安全 08.html
互斥锁、自旋锁、无锁队列在内存池中的应用。
09
延迟回收、立即回收、批量回收的权衡。
10
碎片整理 10.html
内存压缩、分代回收、最佳适应算法的实现。
11
实现固定大小(如4KB)内存池,适用于统一大小请求。
12
基于伙伴系统的可变大小内存池实现。
13
每个流独立内存池 vs 全局共享内存池。
14
确保内存安全释放的同步机制。
15
带宽测试、延迟测试、碎片率测试的方法与工具。
16
内存池调试 16.html
内存泄漏检测、越界访问检测、双重释放检测。
17
内存池与CUDA统一内存的结合。
18
内存池与CUDA图形互操作(Graphics Interop)的集成。
19
每个GPU独立池 vs 跨GPU共享池。
20
保存/恢复内存池状态用于容错。
21
绑定到特定NUMA节点的内存分配。
22
异步分配 22.html
使用CUDA流进行异步内存分配与回收。
23
统计与监控 23.html
分配次数、释放次数、当前使用量、峰值使用量。
24
配置接口 24.html
通过配置文件或API参数调整池大小、对齐方式、回收策略。
25
如何让cuBLAS、cuDNN等库使用自定义内存池。
26
单元测试 26.html
使用Google Test编写内存池的单元测试用例。
27
基准测试 27.html
对比cudaMalloc/cudaFree与内存池的性能差异。
28
常见陷阱 28.html
内存泄漏、死锁、性能回退、过度碎片化。
29
进阶优化 29.html
使用GPU原子操作、warp级分配、持久化内核。
30
实战案例 30.html
在深度学习推理引擎中集成自定义内存池的完整流程。