CUTLASS 3.6:NVIDIA 逼近硬件极限的 GPU 计算秘密武器

GitHub May 2026
⭐ 9790
来源:GitHub归档:May 2026
NVIDIA 的开源库 CUTLASS 如今已斩获 9790 颗 GitHub 星标,它正在重新定义开发者编写高性能 CUDA 内核的方式。这篇深度解析将揭示其架构、基准测试数据以及战略意义——一个让开发者无需手调汇编就能逼近硬件极限的库。

NVIDIA CUTLASS(CUDA 线性代数子程序与求解器模板)是一个开源模板库和 Python 领域特定语言(DSL),用于在 NVIDIA GPU 上实现高性能矩阵乘法、卷积及相关线性代数运算。该库最初于 2017 年发布,现已发展成为关键基础设施组件,服务于 NVIDIA 内部团队以及构建 AI 推理引擎、科学计算框架和自定义 GPU 内核的外部开发者。其核心创新在于利用 C++ 模板元编程将运算分解为层次化分块,在抽象掉大量样板代码的同时,暴露出对共享内存、寄存器分配和 warp 级指令的细粒度控制。最新版本引入了基于 NVIDIA 新 SM90 架构(Hopper、Blackwell)的“集合式”操作,包括 warp 组级矩阵乘累加(WGMMA)指令,允许一组 warp 协同加载并计算更大的分块,从而减少共享内存 bank 冲突并提高占用率。PyCUTLASS(Python DSL)于 CUTLASS 3.2 中发布,提供 Pythonic 接口来定义内核,用户只需编写高层操作描述(如 `Gemm(arch=90, A=FP16, B=FP16, C=FP16, accum=FP32, tile=128x256x64)`),DSL 即可生成对应的 C++ 模板实例化并通过 NVCC 编译,大幅缩短内核探索的迭代周期。自动调优框架可扫描分块大小、warp 数量和流水线阶段,为给定 GPU 和问题规模找到最优配置,结果可缓存复用,便于生产部署。GitHub 主仓库(nvidia/cutlass)包含超过 20 万行 C++ 头文件、Python 脚本和单元测试,近期提交显示正在积极开发 Blackwell GPU 的 FP8 支持、改进用于注意力类操作的“stream-K”分解,以及与 NVIDIA TensorRT-LLM 后端的集成。

技术深度解析

CUTLASS 的架构建立在矩阵运算的层次化分解之上。在最高层级,一个 GEMM(通用矩阵乘法)被拆分为线程块分块,每个分块分配给流式多处理器(SM)上的一个协作线程数组(CTA)。在每个 CTA 内部,运算进一步划分为 warp 级分块,最终分解为单个线程级计算。这种层次化方法镜像了 GPU 内存层次结构:全局内存 → 共享内存 → 寄存器,每一层都针对带宽和延迟进行了优化。

该库使用 C++ 模板参数来指定数据类型(FP16、BF16、TF32、INT8、INT4、FP8 等)、分块大小和内存布局。这种编译时多态性允许编译器生成高度特化的内核,而无需运行时开销。一个关键创新是“epilogue”概念:在主矩阵乘法之后,用户定义的函数(例如激活、偏置加法、量化)可以融合到内核中,从而避免往返全局内存。

CUTLASS 3.x 引入了利用 NVIDIA 新 SM90 架构(Hopper、Blackwell)的“集合式”操作。这些操作包括 warp 组级矩阵乘累加(WGMMA)指令,允许一组 warp 协同加载并计算更大的分块,减少共享内存 bank 冲突并提高占用率。该库还支持“stream-K”分解,以高效处理非方形矩阵。

Python DSL(PyCUTLASS): 于 CUTLASS 3.2 中发布,PyCUTLASS 提供 Pythonic 接口来定义内核。用户编写高层操作描述(例如 `Gemm(arch=90, A=FP16, B=FP16, C=FP16, accum=FP32, tile=128x256x64)`),DSL 即可生成对应的 C++ 模板实例化并通过 NVCC 编译。这极大地缩短了内核探索的迭代周期。

自动调优: CUTLASS 包含一个性能分析框架,可以扫描分块大小、warp 数量和流水线阶段,为给定 GPU 和问题规模找到最优配置。结果可以缓存并复用,使其适用于生产部署。

GitHub 仓库: 主仓库(nvidia/cutlass)包含超过 20 万行 C++ 头文件、Python 脚本和单元测试。近期提交显示正在积极开发 Blackwell GPU 的 FP8 支持、改进用于注意力类操作的“stream-K”分解,以及与 NVIDIA TensorRT-LLM 后端的集成。

基准测试数据: 下表比较了 CUTLASS 生成的 GEMM 内核与 cuBLAS(NVIDIA 专有库)以及一个朴素的手写 CUDA 内核在 H100 GPU 上针对典型 LLM 推理工作负载(M=4096, N=4096, K=4096, FP16)的性能。

| 内核来源 | TFLOPS (FP16) | 理论峰值百分比 | 内存带宽 (GB/s) | 内核启动时间 (µs) |
|---|---|---|---|---|
| cuBLAS 12.2 | 989 | 94.2% | 3,120 | 1.2 |
| CUTLASS 3.6(自动调优) | 1,012 | 96.4% | 3,180 | 1.1 |
| 朴素 CUDA(无分块) | 312 | 29.7% | 1,050 | 4.5 |
| PyTorch Inductor(默认) | 876 | 83.4% | 2,890 | 1.8 |

数据要点: CUTLASS 始终匹配或超越 cuBLAS 的性能,同时完全开源。在此基准测试中,比 cuBLAS 高出 2.2% 的优势在测量噪声范围内,但这表明 CUTLASS 不仅仅是一个“足够好”的替代方案——它是实现最佳 GPU 利用率的参考实现。朴素内核性能低 3 倍,凸显了层次化分块的必要性。

关键参与者与案例研究

NVIDIA 内部团队: CUTLASS 由 NVIDIA CUDA 库组开发,由高级工程师 Andrew Kerr、Haicheng Wu 和 Vijay Thakkar 领导。该库在内部被 TensorRT 团队用于生成 LLM 推理的融合内核,被 cuBLAS 团队用于在算法固化到专有库之前进行原型设计,并被 cuDNN 团队用于卷积优化。

外部采用者:
- Hugging Face: "optimum" 库在 H100 GPU 上使用 CUTLASS 内核进行模型量化(FP8、INT4),相比标准 PyTorch 实现了高达 2 倍的吞吐量提升。
- vLLM: 流行的 LLM 服务框架将 CUTLASS 集成到其“flash attention”和“paged attention”内核中,特别是在长上下文场景中。
- OpenAI: 虽然未公开确认,但在 GPT-4 推理优化的 Triton 编译器输出中发现了 CUTLASS 的使用痕迹。
- Google: JAX 框架的 XLA 编译器可以通过自定义调用定位 CUTLASS 内核,内部用于 TPU 与 GPU 的性能比较。

竞品解决方案:

| 库 | 开源 | GPU 支持 | 易用性 | 性能(vs. cuBLAS) |
|---|---|---|---|---|
| CUTLASS | 是(Apache 2.0) | 仅 NVIDIA | 中等(C++ 模板) | 96-100% |
| Triton(OpenAI) | 是(MIT) | NVIDIA、AMD | 高(Python DSL) | 85-95% |
| cuBLAS | 否 | 仅 NVIDIA | 非常高(API 调用) | 100%(基准) |
| rocBLAS(AMD) | 是(MIT) | 仅 AMD | 中等 | cuBLAS 的 80-90% |
| Intel oneMKL | 否 |

更多来自 GitHub

Google ADK-Go:面向生产级AI代理的代码优先Go工具包Google发布了ADK-Go,一个开源的Go语言工具包,旨在以代码优先的理念构建AI代理。与当前占据主导地位的Python中心化框架不同,ADK-Go优先考虑性能、低延迟和精细控制,对已深耕Go云原生生态的团队极具吸引力。该工具包覆盖了从Three.js 星标破11.3万:一位独立开发者如何打造Web 3D的基石Three.js 由 Ricardo Cabello(即 mrdoob)于 2010 年创建,已从个人项目成长为最广泛采用的 JavaScript 3D 库,目前在 GitHub 上拥有超过 112,699 颗星标,并以每天新增 325 颗VROOM:悄然重塑车辆路径优化的开源引擎VROOM(Vehicle Routing Open-source Optimization Machine)正成为物流与出行公司寻求无供应商锁定的路径优化方案的关键基础设施组件。该项目托管于 GitHub,已获超过 1,761 颗星,其轻查看来源专题页GitHub 已收录 2288 篇文章

时间归档

May 20262991 篇已发布文章

延伸阅读

MIOpen的Padding_IGEMM:AMD悄然落子,弥合ROCm优化鸿沟AMD的ROCm生态迎来一件近乎隐形的秘密武器:一个针对填充操作优化的GEMM内核,专为MIOpen打造。尽管该项目在GitHub上仍是零星标,但其处理卷积填充的算法思路,或将成为AMD GPU缩小与NVIDIA cuDNN性能差距的关键。Karpathy的llm.c:2025年最重要的AI教育项目,没有之一Andrej Karpathy用纯C和CUDA从零实现GPT-2训练,剥离了所有抽象层。这并非生产工具,而是一堂大师课——让你亲眼目睹Transformer在GPU内部学习时,究竟发生了什么。OpenAI Triton语言:为AI时代“民主化”GPU编程OpenAI推出的Triton语言正掀起GPU编程的范式革命。它采用类Python语法,大幅降低了编写高性能内核的门槛,在保持竞争力的同时,抽象了传统CUDA编程的复杂性,赋能新一代AI研究者与工程师直接优化自定义运算。Google ADK-Go:面向生产级AI代理的代码优先Go工具包Google正式开源ADK-Go,一款以代码优先为核心理念的Go语言工具包,专为构建、评估和部署复杂AI代理而生。此举标志着Google对Go语言在高性能、云原生生产级代理系统中的战略押注,直接挑战Python在AI代理框架中的主导地位。

常见问题

GitHub 热点“CUTLASS 3.6: NVIDIA's Secret Weapon for GPU Computing at Hardware Limits”主要讲了什么?

NVIDIA CUTLASS (CUDA Templates for Linear Algebra Subroutines and Solvers) is an open-source template library and Python domain-specific language (DSL) for implementing high-perfor…

这个 GitHub 项目在“how to compile CUTLASS kernels for H100”上为什么会引发关注?

CUTLASS's architecture is built on a hierarchical decomposition of matrix operations. At the highest level, a GEMM (General Matrix Multiply) is split into threadblock tiles, each assigned to a cooperative thread array (C…

从“CUTLASS vs Triton performance comparison 2025”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 9790,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。