
CUTLASS 4.4.1 - 2026年2月
CUTLASS 是一套用于在 CUDA 中实现高性能矩阵-矩阵乘法(GEMM)及相关计算的抽象集合,涵盖所有层级和规模。它融合了分层分解和数据移动的策略。CUTLASS 将这些“活动部件”分解为可重用、模块化的软件组件和抽象。
针对概念上并行化层次结构的不同层级,其原语可以通过自定义的平铺大小、数据类型和其他算法策略进行专门化和调优。由此产生的灵活性简化了它们作为自定义内核和应用程序中构建块的使用。
自 2017 年以来,CUTLASS 一直为高性能线性代数提供 CUDA C++ 模板抽象,这些抽象为广泛的计算提供了广泛支持,包括混合精度计算、专门的数据移动(异步拷贝)以及针对 FP64、FP32、TF32、FP16、BF16、通过张量核心指令实现的 FP32 仿真、8位浮点类型(e5m2 和 e4m3)、块缩放数据类型(NVIDIA NVFP4 和 OCP 标准 MXFP4、MXFP6、MXFP8)、窄整数类型(4位和8位有符号及无符号整数)以及二进制1位数据类型(在架构允许原生支持此类数据类型的场景下),覆盖了 NVIDIA 的 Volta、Turing、Ampere、Ada、Hopper 和 Blackwell 架构。
在这个丰富的基于 C++ 的内核编程抽象生态系统之上,CUTLASS 4 新增了 CUTLASS DSLs。这是一套原生 Python 接口,用于基于核心 CUTLASS 和 CuTe 概念编写高性能 CUDA 内核,且不牺牲任何性能。这带来了更平缓的学习曲线、数量级更快的编译时间、与深度学习框架的原生集成(无需编写胶水代码),以及更直观的元编程体验,无需深厚的 C++ 专业知识。
总体而言,我们将 CUTLASS DSLs 设想为一个领域特定语言(DSL)家族。随着 4.0 版本的发布,我们推出了其中的第一个成员:CuTe DSL。这是一个低层级的编程模型,与 CuTe C++ 抽象完全一致——它暴露了布局(layouts)、张量(tensors)、硬件原子(hardware atoms)等核心概念,并提供对硬件线程和数据层次结构的完全控制。
CuTe DSL 展示了针对 NVIDIA Ampere、Hopper 和 Blackwell 架构实现的可编程、高吞吐量 张量核心 的优化矩阵乘法及其他线性代数运算。
我们相信,它将成为学生、研究人员和性能工程师不可或缺的工具——降低 GPU 编程的学习门槛,快速原型化内核设计,并将优化方案投入生产。
CuTe DSL 目前处于公开测试阶段,预计将于 2025 年夏季结束前结束测试。
快速入门请参考:
- CUTLASS C++ 快速入门指南.
- CuTe DSL 快速入门指南.
cutlass/python/CuTeDSL/setup.sh --cu13 进行设置cute.experimental:在现有 CuTe DSL API 之上引入一个更高层级、可组合的层(并非独立的抽象),可以与现有的 Cute DSL 构建块混合使用。cutlass.__version__ 用于获取 DSL 版本的字符串表示cutlass.CUDA_VERSION 用于获取一个版本类,以告知 DSL 使用的 CUDA 版本CopyDsmemStoreOp,用于将数据存储到分布式共享内存并执行显式同步。mixed_input_fmha_decode.py 获取使用示例)。现在可以通过 Python Epilogue Fusion Configuration (EFC) 函数为持久化密集 GEMM 定制化尾融合(epilogue fusion),某种程度上类似于 CUTLASS C++ 的 EVT。它还提供了一个 PyTorch 评估器来比较结果。
更多编写峰值性能内核的示例
acc_scale 分组混合输入 gemm 内核变体,为解码场景提供更好的性能。所有 mixed_input_gemm 示例已移至单独的文件夹 mixed_input_gemm。通用工具函数也已提取到同一文件夹下的 mixed_input_host_utils.py 中。
错误修复与改进
cute.printf 使用 f-string 的问题cta_tile_n = 256 且启用累加器重叠优化时,小 K 参考检查错误的问题。修复了在 aarch64 架构上使用 tvm-ffi 时的段错误问题
API 变更
blackwell_helpers.py 中的 get_num_tmem_alloc_cols。请改用 tmem_allocator.py 中的版本。SM100_TMEM_CAPACITY_COLUMNS 和 SM100_TMEM_MIN_ALLOC_COLUMNS。LdMatrix16x16x8bOp 和 StMatrix16x8x8bOp 现在在调用 __init__ 时需要显式指定 transpose=True,以避免数据转置的歧义。LdMatrix16x16x8bOp 的拷贝特性已更新,以忠实于 PTX 指令,不进行置换。置换变体重命名为 LdMatrix16x8x8bOp。--host_problem_shape_available。如果提供了该参数,则基于主机端问题形状进行网格划分;否则,我们将启动尽可能多的 SM。hardware_info.get_max_active_cluster 支持传入特定流进行查询。适用于基于绿色上下文(green context)的 SM 分区。group_bulk_copy_modes 现已弃用,请直接使用 group_modes。cute.arch.calc_packed_f32x2_op 默认启用 ftz 改为默认禁用 ftz。在使用 CTK 13.1 的 CuTe DSL 中,cutlass.cute.arch 中的以下 API 现在要求使用字符串字面量作为参数,而不是枚举:
fence_proxyfence_view_async_tmem_opcalc_packed_f32x2_opwarp_redux_syncatomic_addatomic_andatomic_oratomic_xoratomic_maxatomic_minatomic_exchatomic_casstoreload为混合输入 gemm 示例使用“高级控制文件”以获得更好性能。
AuxTmaParams 中使用非静态的 TmaGbasis。tma_gbasis。AuxTmaParams 的 TmaGbasis 参数的限制,允许用户手动构造动态的 gbasis。canimplement 中的除零问题。nvMatmulHeuristics 时的 API 破坏性变更问题。media/docs 下的一些失效链接。注意:已知 CUTLASS 4.x 版本在所有 CUDA 工具包下的 Windows 平台上构建失败。
CUTLASS 团队正在修复此问题。
有关所有过往版本和更新的详细信息,请参阅 CHANGELOG。
CUTLASS 原语非常高效。当用于构建设备级 GEMM 内核时,它们几乎能充分利用峰值理论吞吐量。下图显示了 CUTLASS 3.8 在 NVIDIA Blackwell SM100 架构 GPU 上运行各种输入和输出数据类型时,相对于理论峰值利用率的百分比。
下面两幅图展示了自 CUTLASS 3.1 以来,在 NVIDIA H100(NVIDIA Hopper 架构)上 CUTLASS 性能的持续改进。
CUTLASS 3.5.1 使用 CUDA 12.5u1 工具包 编译。
张量核心操作使用 CUDA 的 mma 和 wgmma 指令实现。


CUTLASS 3.0 引入了一个新的核心库 CuTe,用于描述和操作线程与数据的张量。
CuTe 是一组 C++ CUDA 模板抽象,用于定义和操作线程与数据的分层多维布局。
CuTe 提供了 Layout 和 Tensor 对象,它们紧凑地封装了数据的类型、形状、内存空间和布局,同时为用户执行复杂的索引计算。
这使得程序员可以专注于算法的逻辑描述,而 CuTe 则为他们处理繁琐的簿记工作。借助这些工具,我们可以快速设计、实现和修改所有密集线性代数运算。
CuTe 的核心抽象是分层多维布局,它们可以与数据数组组合以表示张量。
布局的表示能力足够强大,几乎可以表示我们实现高效密集线性代数所需的一切。
布局也可以通过函数式组合进行操作,在此基础上我们构建了大量常见操作,例如平铺和分区。
CUTLASS 3.0 及更高版本在其模板的整个 GEMM 层次结构中采用了 CuTe。
这极大地简化了设计,并提高了代码的可组合性和可读性。
更多关于 CuTe 的文档可以在其 专属文档目录 中找到。
最低要求:
CUTLASS 需要支持 C++17 的主机编译器,并且使用 CUDA 12.8 工具包 构建时性能最佳。
它也与 CUDA 11.4、CUDA 11.5、CUDA 11.6、CUDA 11.7、CUDA 11.8 以及所有其他 CUDA 12.x 版本兼容。
我们已测试以下环境。
| 操作系统 | 编译器 |
|---|---|
| Ubuntu 18.04 | GCC 7.5.0 |
| Ubuntu 20.04 | GCC 10.3.0 |
| Ubuntu 22.04 | GCC 11.2.0 |
注意:已知 GCC 8.5.0 在折叠表达式和重载运算符方面存在回归问题。建议使用 GCC 7.5.0 或(首选)GCC >= 9。
注意:已知 CUTLASS 3.x 版本在所有 CUDA 工具包下的 Windows 平台上构建失败。
CUTLASS 团队正在修复此问题。
CUTLASS 已在以下 NVIDIA GPU 上成功运行,并且预计在基于 Volta、Turing、Ampere、Ada 和