how-to-optim-algorithm-in-cuda
how-to-optim-algorithm-in-cuda 是一个专注于 CUDA 算法优化与 GPU 高性能计算的学习资源库。它旨在解决开发者在编写高效 GPU 代码时面临的性能瓶颈问题,通过提供经过验证的算子实现和系统化的学习笔记,帮助用户深入理解底层优化原理。
该项目非常适合 AI 基础设施工程师、深度学习框架开发者以及希望提升 GPU 编程能力的研究人员使用。其核心内容涵盖了 Reduce、Softmax、GEMV 等基础算子的手写优化代码,并详细记录了从 Naive 实现到利用 OneFlow 模板、向量化及原子操作优化后的性能对比数据,直观展示带宽利用率的提升效果。
独特的技术亮点在于其系统性的知识整理:不仅收录了由 PyTorch 核心开发者主讲的"CUDA-MODE"课程全套中文笔记与实验代码,还深入解析了 CUTLASS、CuTe DSL、Triton 等前沿工具链,以及大模型推理训练优化策略。无论是想动手实践具体的 Kernel 优化,还是希望系统构建 GPU 技术知识体系,这里都提供了丰富的代码示例、博客翻译和技术专题,是通往 GPU 高性能计算领域的实用指南。
使用场景
某深度学习框架研发团队正在为新款大模型定制高性能推理引擎,急需手动优化关键的自定义算子以突破现有库的性能瓶颈。
没有 how-to-optim-algorithm-in-cuda 时
- 重复造轮子效率低:团队需从零编写 Reduce、Softmax 等基础算子的 CUDA 内核,缺乏成熟的模板参考,开发周期长达数周。
- 性能调优无头绪:面对 A100 等新架构,开发者难以掌握 Shared Memory 银行冲突避免、向量化加载等高级技巧,导致带宽利用率仅停留在 50%-60%。
- 学习资料碎片化:网上关于 CUTLASS、Triton 及 PTX 指令的文档分散且多为英文,缺乏系统性的中文笔记与代码对照,学习曲线极其陡峭。
- 原子操作成为瓶颈:在处理 Half 精度累加时,直接使用原生
atomicAdd导致严重的串行竞争,无法发挥 GPU 并行优势。
使用 how-to-optim-algorithm-in-cuda 后
- 直接复用成熟模板:团队直接调用仓库中经过验证的 OneFlow Elementwise 和 BlockReduce 模板,将算子开发时间从数周缩短至几天。
- 性能显著提升:参考仓库中的优化策略(如数据 Pack 和内存合并访问),在 A100 上将 Half 精度算子的带宽利用率从 52% 提升至 87% 以上,耗时降低近 40%。
- 系统化知识赋能:借助整理的 CUDA-MODE 课程笔记、CUTLASS 教程及中文博客翻译,团队成员快速掌握了 TMA、WGMMA 等前沿技术,降低了学习门槛。
- 解决特定硬件痛点:利用仓库提供的
fast-atomic-add实现方案,巧妙规避了 Half 精度原子加法的性能陷阱,确保了大规模并行计算下的数据一致性与高吞吐。
该工具通过提供“开箱即用”的高性能算子代码与系统化的底层优化知识,帮助开发者大幅缩短了从算法原型到生产级高性能 CUDA 代码的落地路径。
运行环境要求
- Linux
- 必需 NVIDIA GPU
- README 中性能测试基于 A100 PCIE 40G,代码涉及 CUDA Kernel 手写优化、CUTLASS、Triton 等,通常需要支持较新架构(如 Ampere 及以上)以运行 TMA/WGMMA 等新特性
未说明

快速开始
如何在 CUDA 中优化算法
我还维护了一个学习深度学习框架(PyTorch和OneFlow)的仓库 https://github.com/BBuf/how-to-learn-deep-learning-framework 以及一个如何学习深度学习编译器(TVM/MLIR/LLVM)的学习仓库 https://github.com/BBuf/tvm_mlir_learn , 有需要的小伙伴可以点一点star
本工程记录如何基于 CUDA 优化一些常见的算法,同时收录了大量 GPU/大模型相关的学习笔记和博客翻译。
目录结构
how-to-optim-algorithm-in-cuda/
├── cuda-kernels/ # 【代码】CUDA 基础算子手写优化实现
│ ├── reduce/
│ ├── softmax/
│ ├── elementwise/
│ ├── gemv/
│ ├── fast-atomic-add/
│ ├── upsample-nearest2d/
│ ├── indexing/
│ └── linear-attention/
├── cuda-mode/ # 【笔记+代码】CUDA-MODE 课程笔记(77+ 讲)
│ ├── code/ # 实验代码(YHs_Sample、cudabmk)
│ ├── slides/ # 课程讲义 PPT/PDF
│ ├── lectures/ # Lecture 1-77+ 笔记
│ ├── blog-translations/ # CUDA 博客翻译
│ ├── cute-dsl/ # CuTe DSL 笔记
│ ├── lei-mao-blogs/ # Lei Mao CUDA 博客转载
│ ├── practice/ # 课后实战
│ └── tech-notes/ # GPU 技术专题
├── cutlass/ # 【笔记+代码】CUTLASS / CuTe DSL 学习
│ ├── code/ # 代码(cfx-article-src、cute-examples、swizzle)
│ ├── cute/ # CuTe Layout 笔记
│ ├── gemm/ # GEMM 实现解析
│ ├── tma/ # TMA 教程
│ ├── wgmma/ # WGMMA 教程
│ ├── swizzle/ # Swizzle 机制笔记
│ ├── instructions/ # CUDA 指令笔记
│ └── tutorials/ # CUTLASS 翻译教程
├── triton/ # 【笔记+代码】Triton 学习
│ ├── code/ # Python 代码实现
│ └── meetup/ # Triton 中国 Meetup slides
├── large-language-model/ # 【笔记】大模型推理/训练优化笔记
├── ml-engineering/ # 【笔记】ml-engineering 翻译系列
├── pytorch/ # 【笔记+代码】PyTorch 博客翻译与代码
├── papers/ # 【笔记】论文阅读
│ ├── cuda/
│ └── mlsys/
├── ptx-isa/ # 【笔记+文档】PTX ISA 学习
├── tools/ # 工具脚本(hfd.sh 等)
└── deprecated/ # 归档:过时/低相关内容
0. cuda-mode
- 课程的 Slides 和 脚本:https://github.com/cuda-mode/lectures
- 课程地址:https://www.youtube.com/@CUDAMODE
- 我的课程笔记:https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode
一直想系统看一下某个课程系统和科学的学习下 CUDA ,感觉 CUDA-MODE 这个课程能满足我的需求。这个课程是几个 PyTorch 的 Core Dev 搞的,比较系统和专业。不过由于这个课程是 Youtube 上的英语课程,所以要学习和理解这个课程还是需要花不少时间的,我这里记录一下学习这个课程的每一课的笔记,希望可以通过这个笔记帮助对这个课程以及 CUDA 感兴趣的读者更快吸收这个课程的知识。这个课程相比于以前的纯教程更加关注的是我们可以利用 CUDA 做什么事情,而不是让读者陷入到 CUDA 专业术语的细节中,那会非常痛苦。伟大无需多言,感兴趣请阅读本文件夹下的各个课程的学习笔记。
1. cuda-kernels(CUDA 基础算子)
各基础算子的 CUDA 优化实现,代码位于 cuda-kernels/ 目录。
2. reduce
这里记录学习 NIVDIA 的reduce优化官方博客 做的笔记。完整实验代码见这里 , 原理讲解请看:【BBuf的CUDA笔记】三,reduce优化入门学习笔记 。后续又添加了 PyTorch BlockReduce 模板以及在这个模板的基础上额外加了一个数据 Pack ,又获得了一些带宽的提升。详细数据如下:
性能和带宽的测试情况如下 (A100 PCIE 40G):

3. elementwise
将 oneflow 的 elementwise 模テン抽出来方便大家使用,这个 elementwise 模テン实现了高效的性能和带宽利用率,并且用法非常灵活。完整实验代码见这里 ,原理讲解请看:【BBuf 的CUDA笔记】一,解析OneFlow Element-Wise 算子实现 。这里以逐点乘为例,性能和带宽的测试情况如下 (A100 PCIE 40G):
| 优化手段 | 数据类型 | 耗时(us) | 带宽利用率 |
|---|---|---|---|
| naive elementwise | float | 298.46us | 85.88% |
| oneflow elementwise | float | 284us | 89.42% |
| naive elementwise | half | 237.28us | 52.55% |
| oneflow elementwise | half | 140.74us | 87.31% |
可以看到无论是性能还是带宽,使用 oneflow 的 elementwise 模テン相比于原始实现都有较大提升。
4. FastAtomicAdd
实现的脚本是针对half数据类型做向量的内积,用到了atomicAdd,保证数据的长度以及gridsize和blocksize都是完全一致的。一共实现了3个脚本:
- https://github.com/BBuf/how-to-optim-algorithm-in-cuda/blob/master/cuda-kernels/fast-atomic-add/atomic_add_half.cu 纯half类型的atomicAdd。
- https://github.com/BBuf/how-to-optim-algorithm-in-cuda/blob/master/cuda-kernels/fast-atomic-add/atomic_add_half_pack2.cu half+pack,最终使用的是half2类型的atomicAdd。
- https://github.com/BBuf/how-to-optim-algorithm-in-cuda/blob/master/cuda-kernels/fast-atomic-add/fast_atomic_add_half.cu 快速原子加,虽然没有显示的pack,但本质上也是通过对单个half补0使用上了half2的原子加。
性能和带宽的测试情况如下 (A100 PCIE 40G):
| 原子加方式 | 性能(us) |
|---|---|
| 纯half类型 | 422.36ms |
| pack half2类型 | 137.02ms |
| fastAtomicAdd | 137.01ms |
可以看到使用pack half的方式和直接使用half的fastAtomicAdd方式得到的性能结果一致,均比原始的half的原子加快3-4倍。
5. UpsampleNearest2D
upsample_nearest_2d.cu 展示了 oneflow 对 upsample_nearest2d 的前后向的优化 kernel 的用法,性能和带宽的测试情况如下 (A100 PCIE 40G):
| 框架 | 数据类型 | Op类型 | 带宽利用率 | 耗时 |
|---|---|---|---|---|
| PyTorch | Float32 | UpsampleNearest2D forward | 28.30% | 111.42us |
| PyTorch | Float32 | UpsampleNearest2D backward | 60.16% | 65.12us |
| OneFlow | Float32 | UpsampleNearest2D forward | 52.18% | 61.44us |
| OneFlow | Float32 | UpsampleNearest2D backward | 77.66% | 50.56us |
| PyTorch | Float16 | UpsampleNearest2D forward | 16.99% | 100.38us |
| PyTorch | Float16 | UpsampleNearest2D backward | 31.56% | 57.38us |
| OneFlow | Float16 | UpsampleNearest2D forward | 43.26% | 35.36us |
| OneFlow | Float16 | UpsampleNearest2D backward | 44.82% | 40.26us |
可以看到基于 oneflow upsample_nearest2d 的前后向的优化 kernel 可以获得更好的带宽利用率和性能。注意这里的 profile 使用的是 oneflow 脚本,而不是 upsample_nearest_2d.cu ,详情请看 cuda-kernels/upsample-nearest2d/README.md 。
6. indexing
在 PyTorch 中对 index_add 做了极致的优化,我这里将 PyTorch 的 index_add 实现 进行了剥离,方便大家应用于其它框架。具体请看 indexing 文件夹的 README 。其中还有和 oneflow 的 index_add 实现的各个 case 的性能比较结果。整体来说 PyTorch 在 index Tensor元素很小,但Tensor很大的情况下有较大的性能提升,其它情况和 OneFlow 基本持平。详情请看 cuda-kernels/indexing/README.md 。
7. softmax
学习了oneflow的softmax kernel实现以及Faster Transformer softmax kernel的实现,并以个人的角度分别解析了原理和代码实现,最后对性能做一个对比方便大家直观的感受到oneflow softmax kernel相比于FasterTransformer的优越性。代码位于 cuda-kernels/softmax/。
8. linear-attention
学习一些 linear attention 的 cuda 优化技巧。代码位于 cuda-kernels/linear-attention/。

9. large-language-model
收集了和大语言模型原理,训练,推理优化相关的文章和学习笔记,位于 large-language-model/。
10. papers
GPU / AI 系统论文阅读笔记,位于 papers/,分为:
- papers/cuda/:CUDA 体系结构相关论文
- papers/mlsys/:ML 系统(分布式训练、推理)相关论文
11. triton
Triton 学习过程中的代码记录和学习笔记,位于 triton/,分为:
- triton/code/:Flash Attention、LayerNorm 等 Triton / PyTorch 实现
- triton/meetup/:Triton 中国 Meetup slides 汇总
12. ptx-isa
对 CUDA PTX ISA 文档的翻译和学习,位于 ptx-isa/。
13. pytorch
对 PyTorch 团队发布的 CUDA 技术的学习笔记和博客翻译,位于 pytorch/。
14. cutlass
CUTLASS / CuTe DSL 相关的学习笔记,位于 cutlass/。
学习资源
BBuf 公众号的笔记文章列表以及 CUDA/大模型基础设施领域的优质博客资源汇总,请参阅 RESOURCES.md。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备