🧑🏫 GPU 模拟器 · 30 章
从零开始
手写
1
课程导论与项目概览
01
为什么需要GPU模拟器?模拟器能做什么?课程目标与最终成果展示。
2
搭建开发环境
02
Python环境配置、必要的库 (NumPy, Pygame) 安装、项目目录结构设计。
3
GPU核心概念速览
03
从CPU到GPU的思维转变、SIMT模型初探、线程与线程束的概念。
4
设计指令集架构 (ISA)
04
定义微型GPU指令、操作码与操作数设计、指令编码格式。
5
实现指令解码器
05
从二进制到指令、解析操作码与操作数、错误处理与边界检查。
6
构建核心执行单元 (ALU)
06
实现整数运算单元、浮点运算单元、处理特殊操作(比较、逻辑运算)。
7
寄存器文件与内存模型
07
设计寄存器堆、全局内存与共享内存的抽象、内存访问对齐与合并。
8
线程调度器 (Warp Scheduler)
08
理解Warp的概念、实现轮询调度算法、处理线程束发散。
9
实现一个简单的SIMT核心
09
将ALU、寄存器、调度器整合、单指令多线程的执行流程。
10
内存控制器与缓存模拟
10
实现一级缓存(L1)、二级缓存(L2)、缓存一致性(简化版)。
11
纹理与光栅化单元 (可选)
11
纹理坐标与采样、简单的三角形光栅化算法 (Bresenham)。
12
帧缓冲区与显示输出
12
定义帧缓冲区格式、渲染到Pygame窗口、实现简单像素着色器。
13
编写第一个GPU程序:向量加法
13
从CPU版本到GPU版本、编写Kernel函数、在模拟器上运行并验证。
14
矩阵乘法优化
14
朴素矩阵乘法、利用共享内存分块、分析性能瓶颈。
15
归约算法与原子操作
15
并行归约求和、实现原子加操作、处理线程同步问题。
16
实现一个简单的软光栅化渲染器
16
顶点处理、片段着色、深度测试与遮挡剔除。
17
调试与性能分析工具
17
添加日志与跟踪、统计指令吞吐量与带宽、可视化Warp占用率。
18
支持多核心 (SM) 扩展
18
从单SM到多SM架构、任务分发与负载均衡、核心间通信。
19
实现一个简单的内存分配器
19
设备端内存管理、malloc与free的模拟、处理内存碎片。
20
异常处理与错误恢复
20
模拟非法地址访问、处理除零错误、实现看门狗定时器。
21
编写一个简单的光线追踪器
21
光线与球体求交、并行计算像素颜色、输出渲染结果。
22
卷积神经网络 (CNN) 推理加速
22
实现卷积层、池化层、在模拟器上运行简单CNN模型。
23
动态并行 (Dynamic Parallelism)
23
从GPU启动GPU Kernel、父子Kernel同步、应用场景与限制。
24
虚拟内存与地址转换
24
实现页表与TLB、处理缺页中断(模拟)、地址空间隔离。
25
功耗与温度模型 (模拟)
25
估算动态功耗、模拟温度上升与降频、实现功耗管理策略。
26
实现一个简单的GPU汇编器
26
将汇编代码转换为机器码、支持标签与跳转、生成二进制文件。
27
编写一个简单的GPU调试器
27
单步执行、查看寄存器与内存、设置断点。
28
性能优化实战
28
分析并优化真实算法 (N体问题)、使用分析工具定位瓶颈、对比优化前后。
29
扩展指令集
29
添加新指令 (三角函数、随机数)、更新解码器与ALU、测试正确性。
30
课程总结与未来展望
30
回顾整个模拟器架构、讨论真实GPU复杂性、推荐进阶学习路径与资源。