KIMI 校园招聘 · 高性能计算实习

第一阶段学习计划
基础强化 · 月 1–2

专业背景:电子信息工程  ·  岗位方向:HPC / CUDA 内核优化  ·  Infra Team

8 周 · 约 90 学时
每日 3–4 小时
需 GPU 资源(第 3 周起)
产出:可展示 GitHub 作品集
00

阶段总览

核心产出
GEMM
从 Naive 到 Tensor Core
完整实现 + 性能报告
性能目标
50%
达到 cuBLAS FP16
性能的 50% 以上
技能覆盖
4
C++ / GPU 架构
CUDA / Tensor Core
阶段终极目标 基于 Tensor Core 实现 FP16 GEMM,与 cuBLAS 进行性能对比,写出包含 Nsight Compute 截图的量化分析报告,并将全部代码整理至 GitHub(含 README 性能表格)。
01

周计划

第 1 周 现代 C++ 核心特性 ≈ 10 h
  • Move 语义 & 右值引用:完美转发、std::move;CUDA 代码大量依赖这些特性避免不必要拷贝
  • 智能指针:unique_ptr / shared_ptr 的实现原理;GPU 内存管理的 RAII 封装
  • 模板与 auto:函数模板、类模板、模板特化;理解 CUTLASS 深度嵌套模板的前提
  • Lambda + std::function:用于 kernel 启动封装和回调场景
动手任务
用现代 C++ 封装一个带 RAII 的 CUDA 内存管理类(构造时 cudaMalloc,析构时 cudaFree,正确处理拷贝/移动语义)
第 2 周 GPU 体系结构深度理解 ≈ 12 h
  • SM / Warp / 调度模型:32 线程为一个 warp;理解 warp divergence 如何导致性能损失
  • 内存层次(必须背的数字):寄存器 → L1/共享内存 → L2 → HBM;A100 HBM 带宽 2 TB/s,L2 12 MB,共享内存 192 KB/SM
  • Ampere 架构(A100):Tensor Core 第三代、cp.async 异步拷贝、L2 缓存分区策略
  • Hopper 架构(H100):了解 WGMMA 指令和 TMA(Tensor Memory Accelerator)的设计动机
动手任务
用 nvidia-smi / deviceQuery 查清楚实验 GPU 的 SM 数、共享内存大小、Tensor Core 数量;手绘一张内存层次延迟对比图
第 3 周 CUDA 编程模型入门 ≈ 14 h
  • Kernel 语法:<<<grid, block>>> 启动参数设计原则;grid/block/thread 三级层次
  • 线程索引计算:1D/2D/3D 全场景推导;处理不整除时的边界条件
  • 内存管理:cudaMalloc / cudaMemcpy / 统一内存(UVM);流(stream)与异步执行模型
  • 渐进实现:向量加法 → 矩阵转置 → Naive 矩阵乘法(每个都要验证正确性)
动手任务
完成 Naive GEMM(C = A × B),与 CPU 串行结果对比,误差 < 1e-4(FP32);记录 kernel 运行时间
第 4 周 性能分析工具 + Shared Memory 优化 ≈ 14 h
  • Nsight Compute:读懂 Roofline 模型,定位 compute-bound vs memory-bound;重点关注 Memory Throughput 和 SM Active Cycles
  • Nsight Systems:分析 CPU/GPU 时间线、stream 并发、PCIe 数据传输开销
  • Shared Memory Tiling:将 Naive GEMM 改为 Tiled 版本,消除全局内存重复读取;目标加速 ≥ 5×
  • Bank Conflict:原理分析(32 路 bank);padding 技巧(加 1 列)消除 bank conflict
动手任务
Tiled GEMM vs Naive GEMM 性能对比;截图 Nsight Compute 的 Roofline 图,能指出当前 kernel 的瓶颈位置
第 5–6 周 CUDA 进阶优化技术 ≈ 20 h
  • Warp-level 原语:__shfl_xor_sync / __reduce_add_sync;实现 warp-level reduce(比 shared memory 方案快约 30%)
  • 向量化读写:float4 / uint4 改写全局内存访问;目标内存带宽利用率 ≥ 80%
  • Software Pipelining:用 cp.async 实现 double buffering prefetch;隐藏内存延迟
  • Occupancy 分析:寄存器用量 vs 共享内存 vs 并发 warp 数的三角权衡;用 __launch_bounds__ 控制
动手任务
实现带 double buffering 的 GEMM;目标性能达到 cuBLAS FP32 的 60% 以上;用 Nsight 截图证明内存延迟被有效隐藏
第 7–8 周 Tensor Core 入门 + 综合里程碑 ≈ 20 h
  • WMMA API:nvcuda::wmma 的 fragment / fill / load / mma / store 五个接口;理解 tile 形状约束(16×16×16)
  • 数据类型:FP16 vs BF16 vs TF32 的精度与性能权衡;推理用 FP16,训练常用 BF16
  • CUTLASS 初探:阅读 examples/00_basic_gemm;理解五层模板结构的最外两层(Device / Kernel)
  • GitHub 整理:整理 1–2 月全部代码,写 README(含性能对比表格、Nsight 截图)
里程碑任务(必须完成)
基于 Tensor Core 实现 FP16 GEMM,与 cuBLAS 对比达到 50%+ 性能;写量化分析报告:每步优化的加速比 + Nsight 截图 + 瓶颈分析
02

学习资源

📘
CUDA C++ Programming Guide(NVIDIA 官方)
最权威的一手文档。重点读 §1–5(编程模型)、§7(内存模型)、§9(性能优化)。不要从头读——按需查阅,遇到不理解的概念就来查。
必读
📙
PMPP《Programming Massively Parallel Processors》第 4 版
第 1–2 月读前 8 章。讲解 CUDA 编程模型最系统的教材,配套代码在 GitHub 有完整实现。EE 背景读起来会很顺——硬件思维直接对得上。
必读
📝
Simon Boehm — "How to Optimize a CUDA GEMM"
siboehm.com 上的博客。从 Naive → Tiling → Vectorized → Warp Tiling → Tensor Core 一步步优化,每步附性能数据。这是整个第一阶段最重要的单篇资料——照着自己实现一遍,不要直接复制代码。
必读
🔬
Nsight Compute Best Practices Guide(NVIDIA 官方)
面试必考:会用 Nsight 分析 kernel、能看懂 Roofline 图。此文档直接告诉你每个指标的含义和优化方向,实际操作价值极高。从第 4 周开始结合实验同步阅读。
必读
🌐
Lei Mao's Blog — CUDA 系列文章
leimao.github.io,覆盖 Shared Memory、Warp Primitives、Tensor Core 等专题,中等深度,补充 PMPP 没讲清楚的部分。遇到具体问题时搜索对应文章即可。
推荐
📕
《Effective Modern C++》Scott Meyers
只需读 Item 1–17(类型推导 + Move 语义)和 Item 23–29(右值引用)。约 100 页,第 1 周集中看完。其余章节可在第 3–4 月阶段按需补充。
推荐
💬
GPU MODE Discord + Lectures(YouTube)
活跃的 CUDA/GPU 优化社区,有每周 lecture 录像,Mark Saroufim 等大佬讲课。建议加入 Discord 随时提问,有卡壳的问题在社区发出来,进度比自学快 2–3 倍。
推荐
📄
NVIDIA Ampere / Hopper 架构白皮书
了解 WGMMA / TMA 这些 Kimi JD 明确要求的知识点。第 1–2 月略读架构概览部分(10–15 页),建立宏观认知;第 3–4 月结合 Triton 实践深入。
拓展
03

每日时间安排

周一
📖 理论学习 90 min
⌨ 动手编码 90 min
周二
⌨ 编码 + Debug 120 min
📝 学习笔记 30 min
周三
📖 博客阅读 90 min
⌨ 性能分析实验 60 min
周四
⌨ 实验 + 优化迭代 150 min
周五
📖 理论补充 60 min
📝 整理代码 + push GitHub 60 min
周末
⌨ 大块时间 · 完成当周任务 2–3 h / 天
💡
GPU 资源:推荐 AutoDL(autodl.com)按小时计费。RTX 3090 约 ¥1.5/h(日常调试),A100 约 ¥4/h(跑性能对比实验)。每周预算 15–30 元足够。Colab Pro 可作备选,但时长不稳定。建议创建一个 PyTorch 2.x 预装镜像,省去配环境时间。
📊
笔记策略:用 Obsidian 或 Notion 记录每次 Nsight Compute 的截图和关键数字。面试时直接展示"我的 kernel 从 X GFLOPS 优化到 Y GFLOPS,瓶颈从 memory-bound 转为 compute-bound"——远比背理论更有说服力。
04

性能进展预期

各版本 GEMM 相对 cuBLAS 性能目标(FP16,A100)
Naive GEMM(第 3 周)~1–3%
Tiled GEMM — Shared Memory(第 4 周)~15–25%
Double Buffering + Vectorize(第 6 周)~40–60%
Tensor Core FP16(第 8 周 · 目标)≥ 50%
cuBLAS FP16(基准线)100%

* 数值为 4096×4096 矩阵乘典型估算,实际因 tile size 选择、GPU 型号有所浮动

05

第 8 周末 · 里程碑自检

全部勾选后方可进入第二阶段(Triton + FlashAttention)

C++ 与工程能力
能徒手写带 RAII 的 CUDA 内存封装类(构造分配、析构释放、拷贝语义正确)
理解 nvcc 编译流程,会用 CMakeLists.txt 管理 CUDA 项目
会用 compute-sanitizer 排查越界 / 竞态问题
🖥
GPU 架构知识
能脱口说出 A100 关键参数:SM 数(108)、HBM 带宽(2 TB/s)、L2 容量(40 MB)、Tensor Core TFLOPS
能解释 Warp Divergence 的成因及避免方法,举出实际代码场景
能描述 Shared Memory Bank Conflict 的 N-way 成因,知道 padding 多少列能消除
GEMM 实现 & 性能
Naive GEMM 结果与 CPU / cuBLAS 误差 < 1e-4(FP32)
Tiled GEMM(Shared Memory)相比 Naive 加速 ≥ 5×
Tensor Core GEMM(FP16)达到 cuBLAS FP16 性能的 50% 以上
Nsight Compute 可读:能找到 Memory Throughput 和 SM Active Cycles 数据并解释其含义
📦
GitHub 作品集
仓库有清晰 README,包含性能对比表格(Naive / Tiled / Tensor Core vs cuBLAS)
每步优化都有代码注释,说明优化原理和效果
至少一张 Nsight Compute Roofline 截图附在 README 中