cutlass

GitHub
9.6k 1.8k 较难 1 次阅读 今天NOASSERTION开发框架
AI 解读 由 AI 自动生成,仅供参考

CUTLASS 是一套专为 CUDA 平台设计的高性能线性代数计算库,核心目标是简化矩阵乘法(GEMM)及相关运算的开发与优化。它通过将复杂的并行层级分解和数据移动策略封装为可复用的模块化组件,有效解决了在 NVIDIA GPU 上手动编写底层内核代码难度大、调优繁琐且难以兼顾多种硬件架构的痛点。

这套工具特别适合高性能计算工程师、深度学习框架开发者以及从事算法研究的学生和学者使用。无论是需要极致性能的底层算子开发,还是希望快速验证新算法原型的科研场景,CUTLASS 都能提供强大支持。其独特亮点在于不仅拥有成熟的 C++ 模板抽象体系,全面覆盖从 FP64 到 INT4 等多种精度及 NVIDIA 历代架构(如 Hopper、Blackwell),更在最新版本中引入了 CuTe DSL。这是一种基于 Python 的领域特定语言,让开发者无需深厚的 C++ 元编程功底,即可直观地控制线程层次与数据布局,在保持原生性能的同时大幅降低学习门槛并显著缩短编译时间,是实现 GPU 算力高效利用的得力助手。

使用场景

某自动驾驶研发团队正在为新一代 Blackwell 架构 GPU 定制低精度(MXFP4)矩阵乘法内核,以加速实时感知模型的推理速度。

没有 cutlass 时

  • 工程师必须深入编写复杂的 CUDA C++ 模板元编程代码,手动管理线程层级和数据分块,开发门槛极高且容易出错。
  • 每次调整算法策略或数据类型都需要重新编译庞大的 C++ 工程,单次迭代耗时数分钟,严重拖慢原型验证节奏。
  • 难以直接利用最新的块缩放数据类型(如 MXFP4),缺乏现成抽象导致需从零实现底层数据搬运逻辑。
  • 与 PyTorch 等深度学习框架集成时需编写大量“胶水代码”,增加了维护负担和运行时开销。

使用 cutlass 后

  • 团队利用 CuTe DSL 通过 Python 原生接口即可定义高性能内核,无需精通 C++ 模板技巧,大幅降低了开发难度。
  • 修改算子配置后可在秒级内完成编译并立即测试,实现了 orders of magnitude 更快的迭代效率,快速锁定最优参数。
  • 直接调用 cutlass 内置的 MXFP4 及 Tensor Core 专用抽象,自动处理异步数据拷贝,确保在黑石架构上跑满硬件算力。
  • 生成的内核可无缝嵌入现有训练流程,消除了额外的集成代码,让研究人员能专注于算法创新而非底层优化。

cutlass 通过 Python DSL 与模块化 C++ 抽象的结合,将原本需要数周的高性能算子开发周期缩短至几天,真正实现了从原型到生产的平滑过渡。

运行环境要求

操作系统
  • Linux (Ubuntu 18.04
  • 20.04
  • 22.04)
GPU
  • 必需 NVIDIA GPU (Volta 架构及以上,如 V100, A100, H100, B200, RTX 30/40/50 系列等)
  • 显存大小未说明
  • 需安装 CUDA Toolkit 11.4+ (推荐 12.8),针对 Hopper/Blackwell 架构的新特性需特定目标架构 (如 sm_90a, sm_100a)
内存

未说明

依赖
notes1. Windows 平台目前不支持构建 (团队正在修复)。2. 主机编译器必须支持 C++17,避免使用 GCC 8.5.0 (存在已知回归问题),推荐使用 GCC 7.5.0 或 GCC >=9。3. 对于 Hopper (GH100) 和 Blackwell 架构,编译时必须指定带 'a' 后缀的目标架构 (如 -DCUTLASS_NVCC_ARCHS="90a") 以启用加速特性,否则运行时会报错。4. Blackwell 数据中心卡 (SM100) 与 GeForce RTX 50 系列 (SM120) 的算力不同,编译的内核不通用。
python未说明 (注:CuTe DSL 为 Python 原生接口,但文中未指定具体版本)
CUDA Toolkit (>=11.4, 推荐 12.8)
C++ 编译器 (支持 C++17, 推荐 GCC >=9)
CMake
cutlass hero image

快速开始

ALT

概述

CUTLASS 4.5.0

CUTLASS 4.5.0 - 2026年3月

CUTLASS是一套用于在CUDA中实现高性能矩阵乘法(GEMM)及相关计算的抽象库,覆盖了所有层次和规模。它结合了分层分解和数据移动策略,将这些“可移动部分”拆解为可重用、模块化的软件组件和抽象。

针对概念性并行化层次中的不同层级,可以通过自定义分块大小、数据类型及其他算法策略进行专门化和调优。这种灵活性使得它们能够更简便地作为自定义内核和应用程序中的构建模块使用。

自2017年以来,CUTLASS一直提供用于高性能线性代数的CUDA C++模板抽象,并广泛支持多种计算任务,包括混合精度计算、专用数据移动(异步复制)以及适用于FP64、FP32、TF32、FP16、BF16等的数据累加抽象;还支持通过张量核心指令实现的FP32模拟计算[参见GitHub仓库:NVIDIA/cutlass/tree/main/examples/27_ampere_3xtf32_fast_accurate_tensorop_gemm];此外,还支持8位浮点类型(e5m2和e4m3)、块尺度数据类型(如NVIDIA NVFP4及OCP标准MXFP4、MXFP6、MXFP8)、窄整数类型(4位和8位有符号与无符号整数)以及二进制1位数据类型(在架构原生支持的情况下),上述功能均能在NVIDIA的Volta、Turing、Ampere、Ada、Hopper和Blackwell架构上运行。

为了进一步丰富这一基于C++的内核编程抽象生态系统,CUTLASS 4引入了CUTLASS DSL。这是一种Python原生接口,允许开发者基于CUTLASS和CuTe的核心概念编写高性能CUDA内核,且不会带来任何性能损失。这不仅显著降低了学习曲线,还将编译时间缩短了多个数量级,实现了与深度学习框架的原生集成而无需编写胶水代码,同时提供了更加直观的元编程方式,无需深厚的C++专业知识。

总体而言,我们设想CUTLASS DSL将成为一系列领域特定语言(DSL)。随着4.0版本的发布,我们首先推出了CuTe DSL。这是一种低层次编程模型,完全兼容CuTe C++抽象——暴露了布局、张量、硬件原子等核心概念,并对硬件线程和数据层次结构拥有完全控制权。

CuTe DSL展示了针对NVIDIA Ampere、Hopper和Blackwell架构所实现的可编程高吞吐量张量核心的最佳矩阵乘法和其他线性代数操作。

我们相信,它将成为学生、研究人员和性能工程师不可或缺的工具——帮助他们降低GPU编程的学习难度,快速原型化内核设计,并将优化后的解决方案投入生产。

CuTe DSL目前处于公开测试阶段,预计将于2025年夏季末结束测试并正式发布。

欲快速入门,请参考:

CUTLASS 4.5的新特性

CuTe DSL

  • 错误修复与改进
    • 改进了源代码与性能分析/调试之间的关联性

CUTLASS C++

  • 添加示例95,以支持绿色上下文SM分区
    • 允许在部分SM分配的流上启动GEMM。
  • 修复了一些内核问题:
    • 修复了Blackwell SM100/SM120内核模板中l2_capacity=0的处理问题
    • 修复了CUTLASS的Clang构建问题
  • 修复了一些性能分析工具的问题:
    • 为分块GEMM性能分析工具添加了缺失的参考内核
  • 来自社区和CUTLASS团队的各种改进与修复。感谢所有提交PR的贡献者!
  • 使用CUDA工具包13.2版本生成最优代码。

注意:已知CUTLASS 4.x版本在Windows平台上无法正常构建,无论使用哪个CUDA工具包。CUTLASS团队正在努力修复此问题。

有关所有过往版本及更新的详细信息,请参阅CHANGELOG

性能

CUTLASS提供的原语非常高效。当用于构建设备级别的GEMM内核时,它们几乎可以达到理论峰值吞吐量的充分利用。下图显示了CUTLASS 3.8在NVIDIA Blackwell SM100架构GPU上运行时,针对不同输入输出数据类型的理论峰值利用率百分比。

ALT

以下两张图展示了自CUTLASS 3.1以来,在NVIDIA H100(NVIDIA Hopper架构)上CUTLASS性能的持续提升。CUTLASS 3.5.1是使用CUDA 12.5u1工具包编译的。张量核心操作是通过CUDA的mmawgmma指令实现的。

ALT ALT

CuTe

CUTLASS 3.0引入了一个新的核心库CuTe,用于描述和操作线程与数据的张量。CuTe是一组C++ CUDA模板抽象,用于定义和操作线程与数据的分层多维布局。CuTe提供了LayoutTensor对象,能够紧凑地封装数据的类型、形状、内存空间和布局,同时为用户自动完成复杂的索引计算。这样一来,程序员只需关注算法的逻辑描述,而繁琐的底层管理工作则由CuTe代劳。借助这些工具,我们可以快速设计、实现和修改所有的密集线性代数运算。

CuTe的核心抽象是分层多维布局,它可以与数据数组组合起来表示张量。这种布局表示能力强大,几乎可以涵盖实现高效密集线性代数所需的全部内容。布局还可以通过函数式组合进行合并与操作,我们在此基础上构建了一整套常用的操作,例如分块和划分。

从CUTLASS 3.0开始,其模板中的GEMM层次结构全面采用了CuTe。这大大简化了设计过程,并提高了代码的可组合性和可读性。更多关于CuTe的文档可以在其专用文档目录中找到。

兼容性

最低要求:

  • 架构:Volta(计算能力 7.0)
  • 编译器:必须支持至少 C++17
  • CUDA 工具包版本:11.4

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 在 Windows 平台上无法构建,无论使用哪个 CUDA 工具包。CUTLASS 团队正在努力修复此问题。

硬件

CUTLASS 可以在以下 NVIDIA GPU 上成功运行,并且预计在基于 Volta、Turing、Ampere、Ada 和 Hopper 架构的 NVIDIA GPU 上具有高效性能。

GPU CUDA 计算能力 CUTLASS-3 所需的最低 CUDA 工具包版本
NVIDIA V100 Tensor Core GPU 7.0 11.4
NVIDIA TitanV 7.0 11.4
NVIDIA GeForce RTX 20x0 系列 7.5 11.4
NVIDIA T4 7.5 11.4
NVIDIA A100 Tensor Core GPU 8.0 11.4
NVIDIA A10 8.6 11.4
NVIDIA GeForce RTX 30x0 系列 8.6 11.4
NVIDIA GeForce RTX 40x0 系列 8.9 11.8
NVIDIA L40 8.9 11.8
NVIDIA H100 Tensor Core GPU 9.0 11.8
NVIDIA H200 Tensor Core GPU 9.0 11.8
NVIDIA B200 Tensor Core GPU 10.0 12.8
NVIDIA B300 Tensor Core GPU 10.3 13.0
NVIDIA DRIVE Thor 11.0 13.0
NVIDIA GeForce RTX 50x0 系列 12.0 12.8
NVIDIA DGX Spark 12.1 13.0

目标架构

一般来说,为某一目标架构生成的 PTX 代码可以在未来的架构上运行(即向前兼容)。然而,CUDA 12.0 引入了“架构加速特性”的概念,其 PTX 不具备向前兼容性保证。Hopper 和 Blackwell 的一些 PTX 指令属于这一类架构加速特性,因此需要指定 sm_90asm100a 作为目标架构(注意末尾的“a”)。有关此类及其他架构加速指令的详细信息,请参阅 CUDA 文档

目标架构信息通过 CMake 标志 CUTLASS_NVCC_ARCHS 传递给 CUTLASS。为了在 Hopper GH100 上实现最佳性能,用户需要将目标架构设置为 90a 来构建 CUTLASS。如果用户不小心构建了一个使用 SM90a 特性(例如 Hopper Tensor Core 指令)的内核,并使用 SM90 目标架构(缺少“a”),无论使用 CUDA 工具包 12 还是 11.8,该内核都可能会因运行时错误而失败。

cmake .. -DCUTLASS_NVCC_ARCHS="90a"

或者

cmake .. -DCUTLASS_NVCC_ARCHS="100a"

注意:数据中心产品中使用的 NVIDIA Blackwell SM100 架构与支撑 NVIDIA Blackwell GeForce RTX 50 系列 GPU 的架构(SM120)具有不同的计算能力。因此,为 Blackwell SM100 架构编译并包含架构条件特性的内核(使用 sm100a)与 RTX 50 系列 GPU 不兼容。

请参阅 功能文档,了解哪些内核需要哪些目标架构的详细信息。

文档

CUTLASS 的相关信息记录在以下文档中,并附有 Doxygen 文档

  • 快速入门指南 - CUTLASS 的构建和运行基础
  • 功能概述 - 总结了 CUTLASS 提供的功能
  • CUDA 中高效的 GEMM - 描述了如何在 CUDA 中高效地实现 GEMM 内核
  • CUTLASS 3.x 设计 - 介绍了 CUTLASS 3.x 的设计、优势,以及 CuTe 如何使我们能够编写更具组合性的组件
  • GEMM API 3.x - 描述了 CUTLASS 3.x 的 GEMM 模型和 C++ 模板概念
  • GEMM API 2.x - 描述了 CUTLASS 2.x 的 GEMM 模型和 C++ 模板概念
  • 隐式 GEMM 卷积 - 描述了 CUTLASS 中的 2D 和 3D 卷积
  • 代码组织 - 描述了 CUTLASS 项目的组织结构和内容
  • 术语 - 解释了代码中使用的术语
  • 编程指南 - 提供了编写高效现代 CUDA C++ 的指导原则
  • 基础类型 - 描述了 CUTLASS 中用于表示数值和数组的基本 C++ 类
  • 布局 - 描述了矩阵和张量在内存中的布局
  • 分块迭代器 - 描述了用于在内存中遍历矩阵分块的 C++ 概念
  • CUTLASS 性能分析工具 - 基于命令行的性能分析应用程序
  • CUTLASS 实用工具 - 提供了额外的模板,以促进快速开发
  • 依赖内核启动 - 描述了 Hopper 中的一项新特性,允许在同一流中重叠执行依赖内核,以及它在 CUTLASS 中的应用。

资源

我们还在2018年GPU技术大会上发表的演讲中描述了高效GEMM的结构: GPU技术大会2018

构建CUTLASS

CUTLASS是一个仅包含头文件的模板库,无需构建即可被其他项目使用。客户端应用程序应在其包含路径中指定CUTLASS的include/目录。

CUTLASS的单元测试、示例和实用工具可以通过CMake进行构建。CMake的最低版本在快速入门指南中给出。请确保CUDACXX环境变量指向您系统上安装的CUDA Toolkit中的NVCC。

$ export CUDACXX=${CUDA_INSTALL_PATH}/bin/nvcc

在CUTLASS项目中创建一个构建目录,然后运行CMake。默认情况下,CUTLASS会为CUDA架构版本5.0、6.0、6.1、7.0、7.5、8.0、8.6、8.9和9.0编译内核。为了减少编译时间,您可以更改CMake配置设置CUTLASS_NVCC_ARCHS来指定要为哪些架构构建CUTLASS。

$ mkdir build && cd build

$ cmake .. -DCUTLASS_NVCC_ARCHS=80               # 为NVIDIA的Ampere架构编译

build/目录中,通过使用make构建目标test_unit来编译并运行CUTLASS的单元测试。

单元测试被组织成几个二进制文件,分别对应CUTLASS的顶级命名空间,可以通过make的-j命令行参数并行执行。

$ make test_unit -j
...
...
...
[----------] 全局测试环境清理
[==========] 共有57个测试用例中的946个测试已运行。(总耗时10812毫秒)
[  PASSED  ] 946个测试。

在支持的平台上,所有测试都应通过,尽管测试的具体数量可能会随时间变化。

项目结构

CUTLASS由一个仅包含头文件的库以及实用工具、工具、示例和单元测试组成。Doxygen文档提供了CUTLASS项目中定义的文件、类和模板概念的完整列表。

关于源代码组织的详细说明可以在CUTLASS文档中找到,但以下几个主要组件在此简要概述。

CUTLASS模板库

include/                     # 客户端应用程序应在构建的包含路径中指定此目录

  cutlass/                   # 线性代数子程序和求解器的CUDA模板——仅包含头文件

    arch/                    # 直接暴露架构特性(包括指令级GEMM)

    conv/                    # 针对卷积优化的代码

    epilogue/                # 针对GEMM/卷积后处理阶段优化的代码

    gemm/                    # 针对通用矩阵乘法计算优化的代码

    layout/                  # 矩阵、张量及其他数学对象在内存中的布局定义

    platform/                # 具备CUDA功能的标准库组件

    reduction/               # 带宽受限的归约内核,不符合“gemm”模型

    thread/                  # 可在CUDA线程内执行的SIMT代码

    transform/               # 针对布局、类型和域转换优化的代码

    *                        # 核心词汇类型、容器和基本数值运算

  cute/                      # CuTe布局、布局代数、MMA/Copy原子、分块MMA/Copy

    algorithm/               # 对核心操作的定义,如复制、GEMM以及对cute::tuple的操作

    arch/                    # 复制和数学指令的裸PTX包装结构体

    atom/                    # 与arch/运算符相关联或基于arch/运算符构建的元信息

      mma_atom.hpp           # cute::Mma_Atom和cute::TiledMma

      copy_atom.hpp          # cute::Copy_Atom和cute::TiledCopy

      *sm*.hpp               # 针对复制和数学操作的特定架构元信息

    *                        # 核心库类型,如Shape、Stride、Layout、Tensor及其相关操作

CUTLASS SDK示例

CUTLASS SDK示例应用CUTLASS模板来实现基本计算。

工具

tools/
  library/                   # CUTLASS实例库——包含所有受支持的CUTLASS模板的实例化版本
    include/
      cutlass/
        library/

  profiler/                  # CUTLASS性能分析工具         ——用于在CUTLASS库中执行操作的命令行实用程序

  util/                      # CUTLASS实用工具        ——包含大量帮助类,用于
    include/                 #                            管理设备内存中的张量、GEMM的参考实现、
      cutlass/               #                            张量的随机初始化以及输入输出。
        util/

测试

test/unit/目录包含使用Google Test实现的单元测试,展示了核心API组件的基本用法以及对CUTLASS GEMM计算的全面测试。

构建和运行单元测试的说明在快速入门指南中有所介绍。

性能剖析

tools/profiler/目录包含一个用于启动每个GEMM内核的命令行实用程序。可以按以下方式构建:

$ make cutlass_profiler -j16

构建所有 GEMM 和卷积核(耗时极长

默认情况下,对于每种数据类型、数学指令和布局,仅实例化一个分块大小。 若要实例化所有分块大小,请在从空的 build/ 目录运行 CMake 时设置以下环境变量。 请注意,这将生成 数以万计 的内核,并导致漫长的构建时间。 此外,还会使二进制文件体积庞大,在某些平台上可能导致链接器在构建库时失败。 因此,强烈建议仅生成一部分内核,如下一小节所示。

$ cmake .. -DCUTLASS_NVCC_ARCHS=90a -DCUTLASS_LIBRARY_KERNELS=all
...
$ make cutlass_profiler -j16

构建部分 GEMM 和卷积核(缩短构建时间

若要严格编译单个内核或少量内核,可以使用逗号分隔的内核名称列表,并配合通配符来缩小内核集合。以下示例展示了为 NVIDIA Ampere 和 Turing 架构精确编译单个或部分内核的方法:

构建部分 Tensor Core GEMM 内核

若要编译针对 NVIDIA Ampere 和 Turing 架构、采用 FP32 累加且 FP16 输入的部分 Tensor Core GEMM 内核,请使用以下 CMake 命令行:

$ cmake .. -DCUTLASS_NVCC_ARCHS='75;80' -DCUTLASS_LIBRARY_KERNELS=cutlass_tensorop_s*gemm_f16_*_nt_align8
...
$ make cutlass_profiler -j16

用于分析部分 Tensor Core GEMM 内核的命令行示例如下:

./tools/profiler/cutlass_profiler --kernels=cutlass_tensorop_s*gemm_f16_*_nt_align8 --m=3456 --n=4096 --k=4096

...
=============================
  问题编号:1

        提供者:CUTLASS
   操作类型:GEMM
       操作:cutlass_tensorop_s1688gemm_f16_256x128_32x2_nt_align8

          状态:成功
    验证:开启
     处理结果:通过

reference_device:通过
          cuBLAS:通过

       参数:--gemm_kind=universal --m=3456 --n=4096 --k=4096 --A=f16:列 --B=f16:行 --C=f32:列 --alpha=1  \
                  --beta=0 --split_k_slices=1 --batch_count=1 --op_class=tensorop --accum=f32 --cta_m=256 --cta_n=128  \
                  --cta_k=32 --stages=2 --warps_m=4 --warps_n=2 --warps_k=1 --inst_m=16 --inst_n=8 --inst_k=8 --min_cc=75  \
                  --max_cc=1024

           字节数:118,489,088 字节
           浮点运算次数:115,992,428,544 次浮点运算

         运行时间:1.55948 毫秒
          内存带宽:70.7616 GiB/s

            计算强度:74,378.8 GFLOP/s



=============================
...

构建单个 CUDA Core GEMM 内核

若要编译针对 NVIDIA Ampere 和 Turing 架构的单个 SGEMM 内核,请使用以下 CMake 命令行:

$ cmake .. -DCUTLASS_NVCC_ARCHS='75;80' -DCUTLASS_LIBRARY_KERNELS=cutlass_simt_sgemm_128x128_8x2_nn_align1
...
$ make cutlass_profiler -j16

用于分析单个 SGEMM CUDA 核的命令行示例如下:

$ ./tools/profiler/cutlass_profiler --kernels=sgemm --m=3456 --n=4096 --k=4096

=============================
  问题编号:1

        提供者:CUTLASS
   操作类型:GEMM
       操作:cutlass_simt_sgemm_128x128_8x2_nn_align1

          状态:成功
    验证:开启
     处理结果:通过

          cuBLAS:通过

       参数:--m=3456 --n=4096 --k=4096 --A=f32:列 --B=f32:列 --C=f32:列 --alpha=1 --beta=0 --split_k_slices=1  \
                  --batch_count=1 --op_class=simt --accum=f32 --cta_m=128 --cta_n=128 --cta_k=8 --stages=2 --warps_m=4  \
                  --warps_n=2 --warps_k=1 --inst_m=1 --inst_n=1 --inst_k=1 --min_cc=50 --max_cc=1024

           字节数:180,355,072 字节
           浮点运算次数:115,992,428,544 次浮点运算

         运行时间:6.73655 毫秒
          内存带宽:24.934 GiB/s

            计算强度:17,218.4 GFLOP/s

=============================

构建部分 Tensor Core 卷积核

若要编译针对 NVIDIA Ampere 和 Turing 架构、采用 FP32 累加且 FP16 输入、实现前向传播(fprop)的部分 Tensor Core 卷积核,请使用以下 CMake 命令行:

$ cmake .. -DCUTLASS_NVCC_ARCHS='75;80' -DCUTLASS_LIBRARY_KERNELS=cutlass_tensorop_s*fprop_optimized_f16
...
$ make cutlass_profiler -j16

用于分析部分 Tensor Core 卷积核的命令行示例如下:

$ ./tools/profiler/cutlass_profiler --kernels=cutlass_tensorop_s*fprop_optimized_f16 --n=8 --h=224 --w=224 --c=128 --k=128 --r=3 --s=3

...
=============================
  问题编号:1

        提供者:CUTLASS
   操作类型:2D 卷积
       操作:cutlass_tensorop_s16816fprop_optimized_f16_128x128_32x5_nhwc

          状态:成功
    验证:开启
     处理结果:通过

reference_device:通过

       参数:--conv_kind=fprop --n=8 --h=224 --w=224 --c=128 --k=128 --r=3 --s=3 --p=224 --q=224 --pad_h=1 --pad_w=1  \
                  --stride_h=1 --stride_w=1 --dilation_h=1 --dilation_w=1 --Activation=f16:nhwc --Filter=f16:nhwc --Output=f32:nhwc  \
                  --conv_mode=cross --iterator_algorithm=optimized --alpha=1 --beta=0 --split_k_mode=串行 --split_k_slices=1  \
                  --eq_gemm_provider=无 --op_class=tensorop --accum=f32 --cta_m=128 --cta_n=128 --cta_k=32 --stages=5  \
                  --warps_m=2 --warps_n=2 --warps_k=1 --inst_m=16 --inst_n=8 --inst_k=16 --min_cc=80 --max_cc=1024

           字节数:1,130,659,840 字节
           浮点运算次数:118,482,796,544 次浮点运算

         运行时间:0.711496 毫秒
          内存带宽:1,479.99 GiB/s

            计算强度:166,526 GFLOP/s

=============================
...

构建一个卷积 CUDA 内核

要编译并运行一个使用 F32 累加和 FP32 输入、针对 NVIDIA Ampere 和 Turing 架构实现前向传播(fprop)的 CUDA Core 卷积内核,请使用以下 CMake 命令行:

$ cmake .. -DCUTLASS_NVCC_ARCHS='75;80' -DCUTLASS_LIBRARY_KERNELS=cutlass_simt_sfprop_optimized_128x128_8x2_nhwc
...
$ make cutlass_profiler -j16

用于分析一个 CUDA Core 卷积内核的示例命令行如下:

$ ./tools/profiler/cutlass_profiler --kernels=cutlass_simt_sfprop_optimized_128x128_8x2_nhwc --n=8 --h=224 --w=224 --c=128 --k=128 --r=3 --s=3


=============================
  问题 ID:1

        提供者:CUTLASS
   操作类型:conv2d
       操作:cutlass_simt_sfprop_optimized_128x128_8x2_nhwc

          状态:成功
    验证:开启
     处理结果:通过

reference_device:通过

       参数:--conv_kind=fprop --n=8 --h=224 --w=224 --c=128 --k=128 --r=3 --s=3 --p=224 --q=224 --pad_h=1 --pad_w=1  \
                  --stride_h=1 --stride_w=1 --dilation_h=1 --dilation_w=1 --Activation=f32:nhwc --Filter=f32:nhwc --Output=f32:nhwc  \
                  --conv_mode=cross --iterator_algorithm=optimized --alpha=1 --beta=0 --split_k_mode=serial --split_k_slices=1  \
                  --eq_gemm_provider=none --op_class=simt --accum=f32 --cta_m=128 --cta_n=128 --cta_k=8 --stages=2 --warps_m=4  \
                  --warps_n=2 --warps_k=1 --inst_m=1 --inst_n=1 --inst_k=1 --min_cc=50 --max_cc=1024

           字节数:2055798784 字节
           浮点运算次数:118482796544 次浮点运算

         运行时间:7.34266 毫秒
          内存带宽:260.752 GiB/秒

            计算性能:16136.2 GFLOPS/秒


=============================

编译 CUTLASS 内核和 CUTLASS Profiler 的更多细节

关于

CUTLASS 由 NVIDIA 公司以开源软件的形式发布,采用 三条款“新”BSD 许可证

贡献者

CUTLASS 的官方开发者和贡献者列表可在以下位置找到:CONTRIBUTORS

版权

版权所有 © 2017 - 2026 NVIDIA CORPORATION & AFFILIATES。保留所有权利。 SPDX 许可证标识:BSD-3-Clause

  重新分发和使用源代码及二进制文件,无论是否修改,均在满足以下条件时被允许:

  1. 源代码的再分发必须保留上述版权声明、本条件列表以及以下免责声明。

  2. 二进制形式的再分发必须在随附的文档或其他材料中复制上述版权声明、本条件列表以及以下免责声明。

  3. 未经事先书面许可,不得使用版权持有者的名称或其贡献者的名称来认可或推广由此软件衍生的产品。

  本软件按“原样”提供给版权所有者和贡献者,不提供任何明示或暗示的保证,包括但不限于适销性和特定用途适用性的暗示保证。在任何情况下,版权所有者或贡献者均不对直接、间接、偶然、特殊、示范性或后果性损害承担责任(包括但不限于替代品或服务的采购、使用损失、数据丢失、利润损失或业务中断)。即使已被告知发生此类损害的可能性,亦不承担任何责任。

版本历史

v4.4.22026/03/17
v4.4.12026/02/28
v4.4.02026/02/26
v4.3.52026/01/09
v4.3.42025/12/24
v4.3.32025/12/12
v4.3.22025/12/05
v4.3.12025/12/02
v4.3.02025/11/24
v4.2.12025/09/24
v4.2.02025/09/18
v4.1.02025/07/28
v4.0.02025/06/27
v3.9.22025/05/04
v3.9.12025/05/01
v3.9.02025/04/25
v3.8.02025/02/21
v3.7.02025/01/18
v3.6.02024/12/25
v3.5.12024/08/29

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|5天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|6天前
开发框架图像Agent

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 真正成长为懂上

150k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|昨天
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|昨天
插件Agent图像

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 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|4天前
插件开发框架