news 2026/9/16 19:22:34

CUTLASS GEMM 怎么用:跑通第一个 GPU 矩阵乘法的完整流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CUTLASS GEMM 怎么用:跑通第一个 GPU 矩阵乘法的完整流程

CUTLASS GEMM 怎么用:跑通第一个 GPU 矩阵乘法的完整流程

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

CUTLASS 是 NVIDIA 的 header-only CUDA C++ 模板库,核心是覆盖 FP16/BF16/FP8/INT 等多精度的 GEMM(矩阵乘法)内核。读完本文,你能完成环境配置、编译并运行仓库自带的第一个 GEMM 示例,并看懂它靠哪两个机制逼近硬件峰值算力。

算一个 8192×8192×8192 的矩阵乘:朴素循环差在哪

假设你的任务是训练一个中间层,需要反复计算两个 8192×8192 的 FP16 矩阵相乘。直接写三重循环的 CUDA 内核,每个线程独立读 A、B 元素做乘加,会遇到两个硬伤:一是同一块数据被成百上千个线程重复从全局内存搬运,带宽先于算力耗尽;二是访存延迟无法被计算掩盖,Tensor Core 大量空转。

CUTLASS 做的事情就是把这两个问题拆掉:先按"分块"把大矩阵切成若干 tile,让每个 CTA(线程块)只负责一小块结果;再用流水线把"取下一块数据"和"算当前块"重叠起来。它的分层接口从设备级一直下探到指令级,每一层都可以单独定制。

图:CUTLASS 把 GEMM 拆成六层原语,上层做分发,下层做计算,各层可独立替换

安装并验证构建环境 🚀

CUTLASS 是纯头文件库,业务代码只需把include/加进编译器的头文件搜索路径即可;跑仓库自带的示例才需要 CMake 构建。最短路径如下(5 步):

  1. 确认本机装有 CUDA Toolkit 12.x 和 CMake,NVIDIA 驱动正常(nvidia-smi能看到卡)。
  2. 克隆仓库:git clone https://gitcode.com/GitHub_Trending/cu/cutlass
  3. 让 CMake 找到 nvcc:export CUDACXX=/usr/local/cuda/bin/nvcc
  4. 指定目标架构进入构建,例如 Ampere(sm_80):mkdir build && cd build && cmake .. -DCUTLASS_NVCC_ARCHS=80
  5. 只编译第一个示例并运行:make 00_basic_gemm -j && ./examples/00_basic_gemm

示例自带一个朴素参考内核做逐元素校验,打印Passed即说明环境链路与模板实例化都正常。

看懂让 CUTLASS GEMM 变快的两个机制

把大矩阵切成 tile:每个 CTA 只负责一块

一句话原理:GEMM 被分解成三级 tile——CTA 级、warp 级、线程(指令)级——每级只处理自己那一小块,数据在"全局内存 → 共享内存 → 寄存器"逐级下沉,复用率随之提高。类比餐厅后厨:不是每个厨师都去仓库取全部食材,而是按工单各领自己那口锅的料,传菜带再统一出餐。

图:A 取 Mtile×Ktile、B 取 Ktile×Ntile 两个子块,累加得到 C 上对应的 Mtile×Ntile 结果块

分层流水线:边算当前块,边取下一块

仅分块还不够——CTA 算完当前 K 块后要等下一块数据搬进共享内存,这段时间算力空转。CUTLASS 的MmaPipelined用多级缓冲(multi-stage)解决:数据搬运和 MMA 计算走两条流水线,取第 i+1 块时正好在算第 i 块,访存延迟被计算覆盖掉。类比洗衣房传送带:一边烘干这一件,一边往机器里投下一件,传送带不停。

图:device → kernel → CTA → warp → thread → instruction 各层的组件,主循环由 transform 迭代器 + MmaPipelined 组成

在 Blackwell 上压低 GQA 的推理延迟

问题:低延迟 GQA(Grouped Query Attention,大模型推理里的多查询分组注意力)单 batch 请求时,SM 利用率和访存模式与训练态完全不同,常规 GEMM 配置下端到端延迟偏高。做法:仓库在 examples/93_blackwell_low_latency_gqa/ 里针对该场景重排了 CTA 组织与累加器写回路径——累加块按"CTA 邮箱"切分,多个 CTA 的结果异步汇合,减少 CTA 间同步等待。效果:在 Blackwell 上显著压缩了单请求解码阶段的延迟,具体实现可对照目录内源码与其figures/下的结构图。

图:低延迟 GQA 场景下 CTA 的划分与协作方式

核心骨架(FP32 SGEMM 实例化,完整代码见 examples/00_basic_gemm/basic_gemm.cu):

using Gemm = cutlass::gemm::device::Gemm< float, cutlass::layout::RowMajor, // A float, cutlass::layout::ColumnMajor, // B float, cutlass::layout::RowMajor // C >; Gemm::Arguments args({M, N, K}, A, lda, B, ldb, C, ldc, {1.0f, 0.0f}); Gemm gemm; cutlass::Status status = gemm(args); // 内部完成 configure + launch

继续往哪走

  • examples/README.md:全部 90+ 个示例的清单与说明,按编号选场景
  • examples/00_basic_gemm/:本文跑通的示例源码,改 tile 尺寸做对照实验
  • media/docs/cpp/quickstart.md:构建、运行单测的详细步骤
  • media/docs/cpp/gemm_api.md:GEMM 模板参数与性能调优指引
  • include/cute/:CuTe 布局代数头文件,3.x 内核的地基

下一步建议先翻一遍 examples/ 列表,挑一个最贴近你业务的编号跑通,再用 tools/profiler/ 对同一配置做性能测量。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 19:22:23

UltraEdit 的 Ctrl+A 全选失效?把 TaoToken 的 Key 给 Codex 查 alt+a 行模式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 19:22:19

Kimi K2 Thinking 执行 300 轮 Agent 任务,Key 用 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 19:22:02

AI Agent技能层:TypeScript+NX构建可治理的skills工程范式

1. “agent-skills”不是库名&#xff0c;而是AI工程中一个被严重低估的抽象层你点开 GitHub 搜索agent-skills&#xff0c;大概率会看到零星几个冷门仓库&#xff0c;Star 数个位数&#xff0c;文档页空白&#xff0c;README 里只有一行// TODO: add description。这很反常——…

作者头像 李华
网站建设 2026/9/16 19:20:45

Linux云服务器搭建《僵尸毁灭工程》专用服务器全流程指南

开头先交代一下背景&#xff1a;我最早玩《僵尸毁灭工程》&#xff08;Project Zomboid&#xff09;是在朋友拉我联机时&#xff0c;一群人挤在游戏内那张四个人的地图里&#xff0c;一开始还挺新鲜&#xff0c;可一到后期就会遇到同一个问题——主机不在线&#xff0c;整队人就…

作者头像 李华
网站建设 2026/9/16 19:18:20

提示词工程:提升AI交互质量的核心技巧

1. 提示词&#xff08;Prompt&#xff09;的本质与价值在人工智能交互领域&#xff0c;提示词&#xff08;Prompt&#xff09;就像一把打开智能系统的钥匙。它不仅仅是简单的文字输入&#xff0c;而是用户与AI模型之间的精确沟通桥梁。我从事AI产品设计多年&#xff0c;深刻体会…

作者头像 李华
网站建设 2026/9/16 19:17:46

Docker镜像删除报conflict?从原理到实战彻底解决

用了一年多的 Docker&#xff0c;最近在清理本地镜像时突然被这个报错拦住了&#xff1a;$ docker rmi 3b5d1b1e1c9e Error response from daemon: conflict: unable to delete 3b5d1b1e1c9e (cannot be forced) - image is being used by running container 8f2a1c4e6d7b乍一看…

作者头像 李华