CuTe DSL介绍
概览
CUTALSS 4.x弥合了CUDA内核开发的生产力和性能之间的差距。通过为功能强大的CUTALSS C++模板库提供基于Python的DSL,它可以在NVIDIA GPU上实现更快的迭代、更容易的原型制作和更平缓的高性能线性代数学习曲线。
总体而言,我们将CUTLASS DSL视为一个领域特定语言(DSL)。随着4.0的发布,我们将在CuTe DSL中发布其中的第一个。这是一个低级编程模型,与CuTe C++抽象完全一致,暴露了布局、张量、硬件原子等核心概念,以及对硬件线程和数据层次结构的完全控制。
为什么开发CUTLASS DSLs?
虽然CUTALSS通过其C++模板抽象提供了卓越的性能,但复杂性可能会给许多开发人员带来挑战。CUTLASS 4.x通过以下方式解决了这个问题:
简化元编程:Python中的元编程比C更直观++
加速迭代:使用熟悉的Python语法和极快的编译时间进行快速原型制作
降低障碍:GPU编程概念的学习曲线缩短,CuTe C++和DSL之间保持一致性
保持性能:生成的代码利用了优化的CUTLASS原语
学生可以学习GPU编程概念,而不需要复杂的C++模板。研究人员和性能工程师可以在转向生产实现之前快速探索算法、原型和调优内核。
关键概念和方法
CUTLASS DSL将Python代码转换为自定义中间表示(IR),然后使用MLIR和ptxas将其实时(JIT)编译为优化的CUDA内核。
CuTe DSL核心抽象
布局——描述数据在内存和线程中的组织方式。
张量——将数据指针或迭代器与布局元数据结合起来。
原子——代表基本的硬件操作,如矩阵乘法累加(MMA)或内存复制。
平铺操作–定义如何在线程块和扭曲之间应用原子(例如TiledMma、TiledCopy)。
有关CuTe抽象的更多信息,请参阅CuTe C++库文档。
python内核表达式
开发人员使用熟悉的Python语法和控制流来表达内核逻辑、数据移动和计算。
DSL使用简洁的Python代码简化了表示循环平铺、线程策略和数据转换。
即时编译
Python内核在运行时使用MLIR基础设施和NVIDIA的ptxas工具链编译成CUDA设备代码,实现了快速迭代和交互式调试。
与CUTLASS C++的关系
CUTLASS DSL不能替代CUTLASS C++库或其2.x和3.x API。相反,它的目标是成为一个高生产率的内核创作框架,与CUTRASS 3.x C++API共享所有概念,如CuTe、流水线、调度器等。
性能:生成的内核旨在在性能上与CUTALSS C++内核相匹配;然而,由于多年来CUTALSS C++中添加的优化缺失,可能存在一些性能差距,DSL示例中也可能缺失这些优化。
库:CUTALSS DSL目前没有像CUTALSS C++那样提供完整的GEMM/Conv自动调优分析器或库接口。相反,它侧重于生成和自动调整单个内核实例(例如:通过图块大小探索)以及本地集成支持自动调整DL框架。
如何开始?
快速入门指南-初始设置和安装。
CuTe DSL–使用CuTe DSL的典型开发和工作流程概述。
CuTe DSL API–请参阅完整的API文档。
局限性——了解当前的CuTe DSL约束和与C++的差异。
FAQs-常见问题和已知问题。