恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
CUTLASS入门指南:3步跑通你的第一个GPU矩阵乘法
首页
资讯中心
/
CUTLASS入门指南:3步跑通你的第一个GPU矩阵乘法
CUTLASS入门指南:3步跑通你的第一个GPU矩阵乘法
发布时间:2026/9/16 14:22:55
CUTLASS入门指南3步跑通你的第一个GPU矩阵乘法【免费下载链接】cutlassCUDA Templates and Python DSLs for High-Performance Linear Algebra项目地址: https://gitcode.com/GitHub_Trending/cu/cutlassCUTLASS 是 NVIDIA 推出的开源 CUDA C 模板库专门解决如何在 GPU 上把矩阵乘法GEMM和线性代数运算做到接近理论峰值性能这个问题。这篇文章带你从环境准备到跑通最小 GEMM 示例顺带讲清楚一个最重要的概念——矩阵分块目标是让你 30 分钟内从听说过 CUTLASS过渡到能跑通第一个例子。它到底能帮你干什么场景一训练/推理里的核心 GEMM。深度学习里最重的计算就是 GEMM自己手写 CUDA 很难榨干 Tensor Core。CUTLASS 把 GEMM 分解成可复用的模板组件按精度和布局实例化即可。一组真实数据在 H100 SXM5MxN5632x3072上CUTLASS 3.5.1 CUDA 12.5 相比 CUTLASS 3.1 CUDA 12.1FP32 累加 FP32 的配置下加速比最高约 45%个别配置K8192接近 80%。图不同精度配置下的 GEMM 性能加速对比横轴为输入/输出精度组合场景二卷积神经网络的前向计算。卷积可以改写为隐式 GEMM——把激活张量和滤波器张量重排成两个矩阵然后复用和矩阵乘法完全相同的那套 Tensor Core 路径效果是卷积 kernel 和 GEMM 一样快。下图就是仓库中 INT4 精度 conv2d 前向的真实示例128 通道的激活与滤波器被重排成块状矩阵图INT4 精度下卷积前向传播如何映射为矩阵分块场景三Transformer 类 kernel。低精度注意力、MoE 分组 GEMM 这类热点算子同样有现成实现。例如 Blackwell 上 FMHA 的 2-kernel 反向传播在 FP8 下比 1-kernel 版本快约 25%见examples/77_blackwell_fmha/。CUTLASS 的组织方式是一张分层组件图从设备级一路拆到指令级每一层都是独立的模板你可以按需替换其中任何一层图GEMM 从设备级到指令级的分层组件结构快速上手跑通第一个 GEMM 的 3 个步骤 第 1 步环境怎么搭只需要两个东西CUTLASS 源码 CUDA Toolkit最低 11.0推荐 12.x。CUTLASS 是纯头文件库不需要先编译安装库本身git clone https://gitcode.com/GitHub_Trending/cu/cutlass cd cutlass第 2 步核心概念只用一张图讲明白把大矩阵乘法想象成切披萨M×N 的输出 C 被切成一块块小方格比如 128x128每个 GPU 线程块CTA负责做其中一块。为了算出一块 C它只需要取 A 的一行块和 B 的一列块沿着 K 方向逐片累加。图GEMM 矩阵分块策略每个 CTA 负责 C 的一个 Block用 A、B 的对应条块累加得到简单说就是分块是为了让数据能塞进共享内存反复复用而不是每次都回显存读。你以后看到的所有 tile 参数都是在这张图上切不同大小的格子。第 3 步最小可运行代码这就是仓库examples/00_basic_gemm/里示例的核心部分一共就这几行#include iostream #include cutlass/gemm/device/gemm.h using ColumnMajor cutlass::layout::ColumnMajor; // 定义单精度 GEMMD alpha * A*B beta * C using CutlassGemm cutlass::gemm::device::Gemm float, ColumnMajor, // 矩阵A的元素类型与布局 float, ColumnMajor, // 矩阵B的元素类型与布局 float, ColumnMajor; // 矩阵C/D的元素类型与布局 int main() { int M 1024, N 1024, K 1024; // A、B、C、D 为设备端指针lda/ldb/ldc/ldd 为行距分配代码从略 CutlassGemm::Arguments args( {M, N, K}, // 问题尺寸 {A, lda}, // 源矩阵A {B, ldb}, // 源矩阵B {C, ldc}, // 源矩阵C {D, ldd}, // 目标矩阵D {1.0f, 0.0f}); // 标量 alpha、beta CutlassGemm gemm; cutlass::Status status gemm(args); // 构建参数、分配workspace、启动kernel std::cout (status cutlass::Status::kSuccess ? GEMM 成功 : GEMM 失败) std::endl; return 0; }编译时只需把include/目录加进头文件路径nvcc -stdc17 -I include -I examples/common -o basic_gemm examples/00_basic_gemm/basic_gemm.cu ./basic_gemm运行后你应该看到终端先打印矩阵尺寸和耗时信息最后一行输出Passed.——这说明 CUTLASS 的结果和参考实现逐元素对上了。往深里走一层Tensor Core 与 warp 级分块 基础示例里 CUTLASS 帮你选好了指令但真正压榨性能的关键是 warp 级用的 MMA 指令如mma.sync.8x8x4。一条 MMA 指令让一个 warp 的 32 个线程协作算出一小块矩阵乘积每个线程在寄存器里持有几个元素硬件负责把它们组合成完整的乘累加。它和基础用法的区别在于基础代码只管调 GEMM而这里你要决定线程块 tile 多大如 128x128x8、精度组合、共享内存布局怎么排才能喂饱 Tensor Core 并隐藏访存延迟。图warp 级 MMA 指令8x8x4中寄存器数据的布局这一步不是必须的但如果你要做性能调优绕不开它。想看完整的模板实例化过程直接读examples/07_volta_tensorop_gemm/想看 Hopper/Blackwell 上最新的 warp specialization 写法看examples/48_hopper_warp_specialized_gemm/。去哪接着学 官方文档media/docs/cpp/— 中文读者可直接看 C 快速上手和 API 参考解决这个模板参数到底传什么的问题示例代码examples/00_basic_gemm/— 从 00 号最基础 GEMM 一路排到 93 号 Blackwell 低延迟 GQA按编号顺序看就是难度递进Python 入口python/— CuTe DSL 用 Python 写高性能 kernel适合不想先啃 C 模板元编程的读者打开终端git clone https://gitcode.com/GitHub_Trending/cu/cutlass然后照着第 3 节走一遍5 分钟后你就有自己的第一个 GEMM 了。【免费下载链接】cutlassCUDA Templates and Python DSLs for High-Performance Linear Algebra项目地址: https://gitcode.com/GitHub_Trending/cu/cutlass创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考