TileLang GPU 内核开发教程:用几行 Python 写出对标 cuBLAS 的 GEMM
TileLang GPU 内核开发教程用几行 Python 写出对标 cuBLAS 的 GEMM【免费下载链接】tilelangDomain-specific language designed to streamline the development of high-performance GPU/CPU/Accelerators kernels项目地址: https://gitcode.com/GitHub_Trending/ti/tilelangTileLang 是一个构建在 TVM 编译器之上的 GPU 内核领域特定语言DSL。你用类 Python 语法描述 GEMM、FlashAttention 等算子的分块逻辑编译器自动完成内存布局、线程调度和流水线生成最终产出可直接运行的 CUDA 内核性能接近 cuBLAS 等库函数。从 Python 到 CUDATileLang 的编译链路长什么样TileLang 的核心抽象是瓦片tile一块有形状的数据单元由 warp 或线程块持有和搬运。你负责描述哪些瓦片在什么时候从哪级内存搬到哪级内存编译器负责把它翻译成硬件指令。整个语言按抽象程度分为三级你可以只停在高层也可以在同一个内核里混用不同层级初学者层硬件无感知不关心共享内存、线程细节直接描述数据搬运和计算逻辑适合先跑通算法正确性开发者层瓦片库显式使用T.alloc_shared、T.gemm等瓦片库原语控制数据在片上内存的驻留位置这是日常开发的主力层级专家层线程原语直接操作线程级原语、同步与数据布局用于压榨最后一点性能。以矩阵乘法为例分块策略贯穿三级内存全局矩阵先切成block_M × block_K的子块拷入共享内存乘积累加放在寄存器里的 fragment 中最后再把结果块写回全局内存。T.Pipelined让搬下一块和算这一块在时间上重叠这是掩盖访存延迟的关键。两步装好环境并跑出第一个 GEMM 内核安装只需要一条命令pip install tilelang python -c import tilelang; print(tilelang.__version__)官方预编译 wheel 覆盖 Linux x86-64/AArch64、Windows x86-64 和 macOS arm64。如果想从源码构建需要自定义 TVM 或特定后端开关再考虑克隆仓库git clone https://gitcode.com/GitHub_Trending/ti/tilelang cd tilelang pip install -e .编写第一个内核。examples/gemm/example_gemm.py里的 FP16 GEMM 完整实现不到 30 行核心逻辑如下tilelang.jit def matmul(A, B, block_M, block_N, block_K, dtypeT.float16, accum_dtypeT.float32): M, N, K T.const(M, N, K) A: T.Tensor((M, K), dtype) B: T.Tensor((K, N), dtype) C T.empty((M, N), dtype) with T.Kernel(T.ceildiv(N, block_N), T.ceildiv(M, block_M), threads128) as (bx, by): A_shared T.alloc_shared((block_M, block_K), dtype) B_shared T.alloc_shared((block_K, block_N), dtype) C_local T.alloc_fragment((block_M, block_N), accum_dtype) T.clear(C_local) for k in T.Pipelined(T.ceildiv(K, block_K), num_stages3): T.copy(A[by * block_M, k * block_K], A_shared) T.copy(B[k * block_K, bx * block_N], B_shared) T.gemm(A_shared, B_shared, C_local) T.copy(C_local, C[by * block_M, bx * block_N]) return C逐行解读这段代码tilelang.jit装饰器让函数在首次调用时按具体形状做特化编译T.Kernel声明启动网格每个线程块负责一个block_M × block_N的输出子块T.alloc_shared/T.alloc_fragment把瓦片分别钉在共享内存和寄存器两级T.Pipelined(num_stages3)自动把 K 维循环展开成三级流水T.gemm则映射到目标后端对应的 Tensor Core 指令NVIDIA 上会落到 WGMMA/MMA 路径。编译完成后kernel.get_kernel_source()可以打印生成的 CUDA 源码供审查kernel.get_profiler().do_bench(backendcupti)能直接测出内核延迟不用自己搭计时脚手架。GEMM 之外注意力、量化与多后端的真实覆盖TileLang 不是 GEMM 玩具算子覆盖面很宽。仓库examples/目录里的实现大多可以当作生产级参考FlashAttention 前向/反向、变长序列、GQA见examples/flash_attention/SM100Blackwell上另有专用版本DeepSeek MLA 解码examples/deepseek_mla/提供了 H100 和 AMD MI300X 两版实现是复杂算子用 TileLang 落地的典型样本量化与反量化 GEMMexamples/dequantize_gemm/覆盖 W4A8、FP4、MXFP4 等低比特路径examples/gemm_fp8/覆盖 FP8 矩阵乘2:4 结构化稀疏T.gemm_sp直接利用稀疏 Tensor Core自动调优from tilelang.autotuner import AutoTuner可以把块大小、流水级数、线程数交给搜索。example_gemm_autotune.py中还能通过MatmulTemplate的 roller 拿到针对当前芯片的 Top-K 推荐配置省掉手工枚举。跨平台方面同一份内核代码可通过 Target 对象切换后端cuda主后端SM70–SM120、hipAMD CDNA/RDNA、metalApple 芯片、ascend华为 Ascend 950CPU 走 LLVM 后端实验性。对大多数用户auto目标会自动探测当前设备无需显式指定。基准测试TileLang 与 cuBLAS 差多少结论先说标准 FP16 GEMM 场景下TileLang 与 cuBLAS 基本打平个别尺寸略优低比特量化场景优势更明显。以下为项目维护的基准结果上图横跨 RTX 4090、A100、H100、MI300X 四款 GPU以 cuBLAS/rocBLAS 为 1.0 基准TileLang 在多数矩阵尺寸上落在基准线附近或之上。混合精度推理是 TileLang 拉开差距的区间。在 A100 上的权重量化 GEMV 测试中BitBLAS-TileLang 的 WINT2AFP16 实现最高取得约 7 倍加速注意力场景的结论要客观H100 上 FlashAttention-3 仍是第一TileLang 处于紧随其后的领先梯队images/mha_performance_h100.png有完整曲线。换句话说TileLang 的价值在于一套代码同时覆盖 GEMM、Attention、量化推理和稀疏计算且每类都在各自的第一梯队而不是单项全部称王。写在最后TileLang 把 GPU 内核开发中最脏的活——内存布局、同步、流水——收进了编译器留给你的只是分块逻辑本身。上手成本是一次pip install加一个 GEMM 例子回报是能自己迭代 cuBLAS 之外的定制算子。建议从 examples/gemm/ 读到 examples/flash_attention/再按需查 docs/ 下的编程指南软件流水线、类型系统、自动调优都有专篇。【免费下载链接】tilelangDomain-specific language designed to streamline the development of high-performance GPU/CPU/Accelerators kernels项目地址: https://gitcode.com/GitHub_Trending/ti/tilelang创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Android 地理围栏开发实战:用 Geofencing API 创建、监视与移除围栏

Android 地理围栏开发实战:用 Geofencing API 创建、监视与移除围栏

文档教程移动开发 【免费下载链接】android-training-course-in-chinese Android官方培训课程中文版 项目地址: https://gitcode.com/gh_mirrors/an/android-training-course-in-chinese 点击查看 免费下载 地理围栏(Geofencing)将"用户…

2026/10/7 7:57:01 阅读更多 →
OpenClaw Skill 集成指南:7分钟跑通本地部署与高频报错排查

OpenClaw Skill 集成指南:7分钟跑通本地部署与高频报错排查

我第一台跑 OpenClaw(Clawdbot)的机器是一台 2021 年的 Windows 笔记本,配置不算差,但当时折腾集成 Skill 花了我整整一个下午。后来把整个流程捋顺了才发现,真正耗时间的根本不是部署本身,而是环境里那些“…

2026/10/6 7:37:45 阅读更多 →
django-oscar 自定义促销条件(Custom Offer Condition)开发指南:代理模型、create_condition 注册与数据迁移部署

django-oscar 自定义促销条件(Custom Offer Condition)开发指南:代理模型、create_condition 注册与数据迁移部署

后端电商 【免费下载链接】django-oscar Domain-driven e-commerce for Django 项目地址: https://gitcode.com/gh_mirrors/dj/django-oscar 点击查看 免费下载 本指南以 django-oscar 官方 HOWTO 文档《How to create a custom offer condition》为骨架&#xff0…

2026/10/6 7:37:43 阅读更多 →

最新新闻

P2G与电-气综合能源系统规划:从模型构建到Matlab代码实现

P2G与电-气综合能源系统规划:从模型构建到Matlab代码实现

1. 课题拆解:P2G与电-气综合能源系统到底在规划什么先说一个经常被问到的点:电-气综合能源系统规划,规划的是什么?很多人第一反应是“这不就是配电网规划加个天然气网络吗”,如果你也是这么想的,那这个课题…

2026/10/7 12:13:56 阅读更多 →
计及P2G厂站的电-气综合能源系统规划:Matlab复现与MILP建模全解析

计及P2G厂站的电-气综合能源系统规划:Matlab复现与MILP建模全解析

做综合能源的硕士生,看到“计及P2G厂站的电-气综合能源系统规划”这种题目,第一反应应该是:这又是个要啃硬骨头的复现。P2G(Power to Gas)的本质是电转气,把电网里富余的电能变成天然气,让电力系…

2026/10/7 12:13:56 阅读更多 →
Linux系统休眠唤醒机制深度解析:从ACPI到设备驱动

Linux系统休眠唤醒机制深度解析:从ACPI到设备驱动

搞过嵌入式Linux或者服务器整机功耗优化的朋友,应该都有这个感受:让CPU跑满很容易,但让一个系统安稳地睡下去、再把它精准地叫醒,反而是最折腾的一摊事。我最早跟system sleep打交道,是在移植某ARM平台的时候&#xff…

2026/10/7 12:13:56 阅读更多 →
SpringBoot+Vue+Mybatis小说阅读系统:前后端分离与动态SQL实战

SpringBoot+Vue+Mybatis小说阅读系统:前后端分离与动态SQL实战

简介:一套基于SpringbootVueMybatis的小说阅读管理系统完整源码,面向Java Web初学者、毕业设计或课程设计学生,以及需要掌握前后端分离项目的开发者。压缩包共480个文件、约5.1MB,包含82个Java后端源码、44个HTML页面、39个CSS样式…

2026/10/7 12:13:55 阅读更多 →
STM32与eFuse实现工业电源路径可编程保护的设计实践

STM32与eFuse实现工业电源路径可编程保护的设计实践

一块带着多路传感器供电的工业主控板,车间操作员把 24V 接线端子误插到 36V 电源上,整板烧毁。这是我早年做嵌入式项目时真实遇到过的事。后来重新设计产品时,我在 12V 母线进入系统负载前加了一颗 TPS259483AYWPR 电子保险丝,让 …

2026/10/7 12:13:55 阅读更多 →
AI赋能教师实操手册2:一线教学现场的AI落地指南

AI赋能教师实操手册2:一线教学现场的AI落地指南

“AI挺好,但我打开对话框就不知道问什么。”这是我去年在一个教师培训群里看到的一条留言,也是很多一线老师接触AI大模型后最真实的卡点。工具摆在那里,教程也刷了不少,可一落到自己的备课、上课、批作业,还是不知道怎…

2026/10/7 12:12:55 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

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

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

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

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

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

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/7 11:43:46 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/6 1:18:13 阅读更多 →