1. 前置要求

1.1 硬件要求:

Blackwell 算力架构及以上。

1.2 软件要求:

  1. CUDA Toolkit version 大于等于 13.1
  2. Driver version 大于等于 580
  3. 安装 cuda-tile cupy的 python 包

2. 语法模型

2.1 Tile & Block

image 5.png

image 5.png

在官方文档里写的说明中,重点有几个:1. 不再是之前 CUDAC 的线程级别操作粒度,而是以一个 Block 的线程块进行操作;2. Tile 是对数据的切分,不是对执行单元的切分,这是两个平面。

2.2 Tile & Array

几个容易混淆的点:

  1. **Array** 基本上还是 **python** **Array** 对象,是有内存的分配的实体对象,包括了边界和实际存储的数据
  2. **TIle** 是对数据的抽象理解,Tile 的每个维度都应该是 2的幂,且只能用于 Device 部分代码中。

image 1 2.png

image 1 2.png

一个较为简单的对应关系如上图所示,Tile 的index 只表示切分成 Tile 后某个 Tile 的位置,里面的元素对应,还需要 Array 的 shape demensions 进行辅助定位。其实也就是 Cutlass 的 shape 体操,这里不多赘述。

  1. Tile 之间支持自动 padding。会按照最后一个维度进行对齐操作。比如一个是[32,1,64], 一个是[64,2],这俩 tile 之间对齐操作是:第二个 tile 进行 padding,变成:[1, 64, 64]. 可以看到,padding 的逻辑就是:如果一个 dim 上,两个 tile 中有任意一个为 1,那就 OK,如果没有,那就得 padding 到较大值,维度不够,就在左侧加 1。
  2. Tile 的消费顺序需要干预。如下图所示,还是 Cutlass 中那一套消费者-生产者模型,只不过简化了许多,降低了心智负担。