CUTLASS 仓库代码组织结构全解析:从 CUDA 模板库到实例生成、Profiler 与测试
2026/9/16 5:51:12 网站建设 项目流程

CUTLASS 仓库代码组织结构全解析:从 CUDA 模板库到实例生成、Profiler 与测试

【免费下载链接】cutlassCUDA Templates and Python DSLs for High-Performance Linear Algebra项目地址: https://gitcode.com/GitHub_Trending/cu/cutlass

本篇技术指南以官方文档 media/docs/cpp/code_organization.md 为骨架,系统梳理 CUTLASS(CUDA Templates for Linear Algebra Subroutines and Solvers)仓库的目录结构与设计哲学。读完本文,你将掌握include/include/cute/tools/examples/media/test/等核心目录的职责边界、GEMM 从 device 到 thread 的分层协作模型,以及 CUTLASS Instance Library 如何通过 Python 脚本程序化生成、CUTLASS Profiler 如何加载并评测这些实例,从而具备快速定位源码、定制算子与开展二次开发的能力。

CUTLASS 代码组织:GEMM 从 device、kernel、threadblock、warp 到 thread 的层次结构及 epilogue 处理

仓库总览:八大组成部分

CUTLASS 仓库围绕一套可组合的模板库及其配套工具组织,主要包含以下组件:

组件说明仓库位置
CUTLASS Template LibraryCUDA 线性代数子程序与求解器模板(仅头文件)include/cutlass/
CuTe Template LibraryCUTLASS 的核心词汇表:布局(Layout)类型及其代数(仅头文件)include/cute/
CUTLASS Utilities辅助测试程序、示例与客户端应用的伴随库tools/util/
CUTLASS Instance Library覆盖设计空间的 CUTLASS 模板实例化集合tools/library/ + python/cutlass_library/
CUTLASS Profiler加载实例库并执行其中全部操作的命令行应用tools/profiler/
ExamplesCUTLASS 模板库及组件的 SDK 示例examples/
Media配套文档、图片与性能数据media/
TestsCUTLASS 模板库与工具的测试组件test/

这些组件并非彼此孤立:CUTLASS 模板库是核心计算原语,CuTe 为其提供布局与索引抽象,Utilities 支撑示例与测试,Instance Library 通过脚本批量实例化模板以覆盖配置空间,Profiler 则消费实例库做功能与性能评测。

CUTLASS Template Library:按协作作用域组织的模板层

CUTLASS Template Library 是一组 CUDA C++ 模板类,用于在 NVIDIA GPU 上执行高效的矩阵计算。与 NVIDIA CUB 类似,其组件依据协作元素的作用域(scope)层级化组织。例如,warp 级 GEMM 组件由单个 warp 内的线程集合共同执行矩阵乘法。上图展示了从设备级到线程级的每一层。

客户端应用可以直接访问每个作用域提供的功能。CUTLASS 模板按如下目录结构实现(仅头文件):

include/ # 顶层 include 目录。客户端应用应以该路径为目标 cutlass/ # CUDA 线性代数子程序与求解器模板 - 仅头文件 arch/ # 架构特性的直接暴露(含指令级 GEMM) gemm/ # 面向通用矩阵乘法计算特化的代码 thread/ # 线程级算子 warp/ # warp 级算子 collective/ # 3.x API 算子:tiled mma/copy 构建于其上的全线程协作算子 threadblock/ # CTA 级算子 kernel/ # CUDA kernel 入口 device/ # 在整个设备上启动 kernel(s) * # 与作用域无关的组件及 GEMM 基础词汇类型定义 layout/ # 矩阵、张量及其它数学对象在内存中的布局定义 reduction/ # 带宽受限、不适用 "gemm" 模型的归约 kernel thread/ warp/ threadblock/ kernel/ device/ * transform/ # 面向布局、类型与域变换特化的代码 thread/ warp/ threadblock/ kernel/ device/ * util/ # 杂项 CUTLASS 组件 * # 核心词汇类型与基础算术算子

以 include/cutlass/gemm/ 为例,当前仓库实际包含thread/warp/collective/threadblock/device/kernel/以及dispatch_policy.hppgemm.h等顶层文件,与上述文档结构完全对应。其中collective/对应 3.x API——即 tiled MMA/Copy 之上、面向全部线程协作的算子层,是 media/docs/cpp/cutlass_3x_design.md 所描述的 CUTLASS 3.x 架构的核心组织单元。

同样,include/cutlass/ 顶层还散落着cutlass.hhalf.hbfloat16.htfloat32.hfloat8.hcomplex.harray.haligned_buffer.h等基础词汇类型与算术算子头文件,它们被上层的 arch/gemm/layout/reduction/transform 各模块共享。

关于各层职责与作用域协作的进一步约定,可参阅 编程规范指南。

CuTe:布局与张量的词汇表

CuTe 是一组 C++ CUDA 模板抽象,用于定义和操作线程与数据的层次化多维布局。它提供LayoutTensor对象,将数据的类型、形状、内存空间与布局紧凑地打包在一起,并替用户完成复杂的索引计算——用户只需聚焦算法的逻辑描述,繁琐的索引簿记交给 CuTe。借助这些工具,可以快速设计、实现和修改各类稠密线性代数运算。

CuTe 的头文件位于 include/cute/,包括:

  • algorithm/copygemm等核心操作及对cute::tuple的操作定义;
  • arch/:copy 与数学指令的裸 PTX 包装结构;
  • atom/:构建于 arch 算子之上(或关联)的元信息,其中 mma_atom.hpp 定义cute::Mma_Atomcute::TiledMma,copy_atom.hpp 定义cute::Copy_Atomcute::TiledCopy,另有*sm*.hpp提供各架构特化的元信息;
  • container/:CuTe 核心容器类型,即cute::tuple
  • numeric/:CuTe 内部数值实现;
  • 顶层文件(如 layout.hpp、tensor.hpp、int_tuple.hpp、swizzle.hpp 等):ShapeStrideLayoutTensor等核心库类型及相关操作。

CuTe 的完整教程见 media/docs/cpp/cute/index.rst 系列文档(00_quickstart、01_layout、02_layout_algebra、03_tensor、04_algorithms、0x_gemm_tutorial 等)。

Tools 三件套:实例库、Profiler 与 Utilities

CUTLASS Instance Library:脚本程序化生成实例

CUTLASS Instance Library 包含上述 CUTLASS 模板在受支持的配置、数据类型、块结构与 tile 尺寸上的实例化。这些实例化由一组脚本程序化生成,以覆盖整个设计空间:

tools/ library/ # 包含全部感兴趣 kernel 实例化的静态/动态库 # (带若干构建级过滤开关,可编译特定子集) include/cutlass/library/ # CUTLASS 交付库头文件(cutlass::library:: 命名空间) handle.h # 主机侧 kernel 启动 API,类似 cuBLAS library.h # 描述算子实例 tile 结构的枚举与结构体 manifest.h # 全部实例的集合 src/ python/ cutlass_library/ # 程序化生成 CUTLASS 模板实例的脚本 gemm_operations.py library.py generator.py # 程序化生成脚本入口 - 由 cmake 调用 manifest.py

实际仓库中,python/cutlass_library/ 已扩展出gemm_operation.pyconv2d_operation.pyconv3d_operation.pyrank_2k_operation.pyrank_k_operation.pysymm_operation.pytrmm_operation.py以及sm90_shapes.pysm100_shapes.py等按架构维护 shape 的模块;tools/library/include/cutlass/library/ 亦增加了types.hoperation_table.hsingleton.h等支撑文件,tools/library/src/ 则包含gemm_operation_3x.hpphandle.cumanifest.cpp等实现。这印证了文档描述的“脚本 + 头文件 + 源文件”三位一体的实例生成架构。

生成流程:执行 CMake 时,CUTLASS Instance Library 的生成脚本(generator.py 为入口,由 CMake 调用)会被执行,在build/tools/library/generated/下构造出一组实例化产物。

CUTLASS Profiler:命令行驱动的评测环境

CUTLASS Profiler 专门用于加载 CUTLASS Instance Library 并执行其中包含的全部操作。这个命令行驱动的应用会构造一个用于评测功能与性能的执行环境,实现在:

tools/ profiler/

当前仓库的 tools/profiler/ 包含src/(如gemm_operation_profiler.cuconv2d_operation_profiler.cu等各类算子的 profiler 实现)与include/,并在 tools/profiler/CMakeLists.txt 中注册构建目标。

构建方式如下:

$ make cutlass_profiler -j

CUTLASS Profiler 的详细用法(命令行参数、操作选择、性能度量方法等)见 CUTLASS Profiler 文档,其功能与性能度量准则可进一步参考 GEMM 性能度量方法学指南。

CUTLASS Utilities:示例与测试的伴随库

tools/util/定义了一个支撑 CUTLASS 测试程序、示例及其它客户端应用的伴随库(头文件 + 源文件),结构如下:

tools/ util/ include/cutlass/util/ # CUTLASS Utility 伴随库 reference/ # CUTLASS 算子的功能性参考实现(几乎不考虑性能) detail/ device/ # CUTLASS 算子的设备侧参考实现 thread/ kernel/ host/ # CUTLASS 算子的主机侧参考实现

reference/下以 “最小化性能考虑” 的方式提供功能性参考实现,是验证自定义算子正确性的重要参照。详见 CUTLASS Utilities 文档。

Examples:从基础 GEMM 到融合算子

为演示 CUTLASS 组件,examples/中实现了若干 SDK 示例,将 CUTLASS 模板应用于基础计算。文档列举的经典示例包括:

examples/ 00_basic_gemm/ # 以单精度输入输出启动基础 GEMM 01_cutlass_utilities/ # 演示用于张量分配与初始化的 CUTLASS Utilities 02_dump_reg_smem/ # 打印寄存器与共享内存内容的调试工具 03_visualize_layout/ # 可视化 CUTLASS 中全部布局函数的工具 04_tile_iterator/ # 演示内存中 tile 迭代器 05_batched_gemm/ # 演示 CUTLASS 的 batched strided GEMM 操作 06_splitK_gemm/ # 演示 Split-K 并行归约 kernel 07_volta_tensorop_gemm/ # 演示使用 Volta Tensor Core 的混合精度 GEMM 08_turing_tensorop_gemm/ # 演示使用 Turing Tensor Core 的整数 GEMM 10_planar_complex/ # 演示 planar complex GEMM kernel 11_planar_complex_array/ # 演示带 batch 特定问题尺寸的 planar complex kernel 12_gemm_bias_relu/ # 演示 GEMM 融合 bias 与 relu 激活 13_fused_two_gemms/ # 演示将两个 GEMM 融合进单个 kernel

值得注意的是,当前仓库的 examples/ 目录已远超文档列举的范围:既有09_turing_tensorop_conv2dfprop14_ampere_tf32_tensorop_gemm16_ampere_tensorop_conv2dfprop等早期扩展(对应示例编号已连续递增),也有覆盖 Hopper(48_hopper_warp_specialized_gemm54_hopper_fp8_warp_specialized_gemm57_hopper_grouped_gemm)、Blackwell(70_blackwell_gemm73_blackwell_gemm_preferred_cluster83_blackwell_sparse_gemm)以及 SM103(89_sm103_fp4_ultra_gemm)等新架构的大量示例。此外41_fused_multi_head_attention61_hopper_gemm_with_topk_and_softmax92_blackwell_moe_gemm等示例还覆盖了注意力、MoE 等上层应用。文档中的示例列表可作为理解示例主题与编号规律的起点。

Media:文档、图片与性能数据

media/目录存放伴随 CUTLASS 库及组件的文档、图片和性能结果数据。除本文所属的 media/docs/cpp/ 之外,媒体图片(含本文引用的 GEMM 层次结构图)位于 media/images/,性能结果数据则散见于 media/ 下的数据目录。

Tests:与源码镜像组织的单元测试

CUTLASS 的测试程序按层级组织,与源文件组织方式镜像对应

test/ # CUTLASS Template Library 单元测试 unit/ arch/ core/ gemm/ device/ kernel/ thread/ threadblock/ warp/ reduction/ kernel/ thread/ transform/ threadblock/ *

当前仓库的 test/unit/ 在文档列出的arch/core/gemm/reduction/transform/之外,还包含cute/conv/epilogue/layout/pipeline/cluster_launch/substrate/nvrtc/util/等测试目录,进一步覆盖了 CuTe、卷积、流水线与集群启动等新组件——这与源码目录的持续扩展保持同步。

测试可在顶层作用域通过以下方式构建与运行:

$ make test_unit

也可以构建并显式执行每个独立目标,例如cutlass_test_unit_gemm_device

测试被配置为指定合适的 GTest filter 字符串,以避免在预期不通过的架构上运行,因此正常情况下不应有测试失败。实际运行的测试数量会随时间推移随新增测试而波动。

阅读路径建议

按文档定位,从代码组织视角出发的推荐阅读路径为:

  1. 先通读本文及 media/docs/cpp/code_organization.md 建立目录心智模型;
  2. 深入 CuTe:跟随 CuTe 系列教程 理解Layout/Tensor抽象;
  3. 结合 CUTLASS 3.x 设计文档 理解collective/层的作用域模型;
  4. 阅读 CUTLASS Profiler 文档 与 Utilities 文档 掌握工具链用法;
  5. 以 examples/00_basic_gemm/ 等示例为起点,动手运行并对照 test/unit/ 中的测试目标验证理解。

Copyright (c) 2017 - 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. SPDX-License-Identifier: BSD-3-Clause.

【免费下载链接】cutlassCUDA Templates and Python DSLs for High-Performance Linear Algebra项目地址: https://gitcode.com/GitHub_Trending/cu/cutlass

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询