Skip to content

CuTe Layout笔记

并不严谨

cutlass3引入cute,cute的layout抽象很强大,但由于资料介绍不到位导致这部分不是那么好懂,为了理解其本质,这里记录一些相关内容

Layout

一个布局是由一对具有相同维度的正整数元组组成的,其中被称为shape,stride,写作

扁平化的布局意味着shape和stride中没有内部括号。例如, 是一个扁平化布局,而不是,当然,两者含义完全相等

Layout本质上是一个函数,且满足双射,输入可以是坐标也可以是等价的线性坐标

布局的大小,长度,模式

是一个布局,其中是一个满足的整数,那么

  • size,即
  • length
  • 的一个mode 中的一对

为方便书写,记为

连接

给定两个布局,则

同构

组成 的大小,对于任意

布局函数

对于一个布局,其布局函数

为布局的大小,比如内存连续矩阵,其大小为,输入可以是坐标,换到线性坐标上即

给定输入,的输出为

可以看出

合并

合并不会改变布局

合并规则

考虑一个只有2个mode的布局,当时,这一个mode可以直接去除,如

另一种情况是紧密的排布,即,对于,我们有,

所以可以合并为,其他情况不可合并

具有两个以上mode的布局,我们可以递归地应用上述情况,每次尝试合并两个相邻的积分模式,直到不能再合并为止。这保证了布局函数保持不变。

,其输入,

考虑两个连续的mode可合并,即

这个写法不严谨,因为mode改变了,也发生了变化,应该分解到各个mode得到,总之就这个意思

补集

排序布局

, 如果且如果,那么

排序后的布局改变了布局的意义,因为mode的顺序被交换了,但其点积的本质导致函数的签名不会改变

可补

, 为一个正整数, 如果未排序那么将替换为其排序版本,若满足以下条件则称可补

补集

, 为一个正整数, 如果是可补的,则其补集定义为

不难看出其是排序好的,严格递增的,当,可能会在新的一个维度上进一,而,即 , 由于,故,不等式成立

的大小为

当我们将拼(连接并按某种规则交换mode)在一起会得到

可合并为

虽然不一定按这种方便的情况去排布但我们知道mode的交换不会影响

组合

因为是函数,自然可以这样使用,记,有

显然,且的定义域和相同,考虑一个简单的情况,其过程为

若我们能够找出一个能直接描述这种映射关系,则是可组合的,在上面的例子中

同理可以有

左可除性

,为正整数,设为一种可能的分解,我们说对于是左可除的,如果存在满足

  • 上一个条件下,, 如果,还需要满足
  • 上一个条件下,如果 ,还需要

若满足前两个条件而不满足第三条,则称为弱左可除

对于一个,可表示为

约束

上面提到的值域需要是定义域的子集,这是一种约束,考虑简单情况,一般来说可以这样定义这个约束

,说是可组合的,如果满足

  • 能被左除,记,其中
  • 可被弱左除

如此约束的原因是

我们渴望找到一种直接能够提供等价变换,但我们知道

显然我们要寻找的来源于,换句话说切片,同理也是切片,实际上就是一个在位置上为的向量坐标:,要求左除本质是找到切片开始的起始坐标,弱左除则是约束切片开始位置加上切片长度不会超过总长

组合

特殊情况

组成 ,,且是满足上述约束的,的定义分两种情况

假设,有

,则

否则,存在一个,使得,其中如果

区间

设布局 的映射函数为 。 记 在区间 上的值域的最小连续整数区间。 再设 ,则 允许访问的位置范围为 。于是, 的 区间 为 。 若 ,则 ,于是

一般情况

设形状元组

以及布局

并记

我们称二元组 是可组合的,若满足:

  1. 对所有 ,二元组 在上述约束下都是可组合的

  2. 对所有二元组 )的区间两两互不相交。


在这种情况下,如果

是一个步长元组,并且

那么我们将组合 定义为连接得到的布局:

其中每个 的定义如特殊情况相同

我们知道,

根据定义

一般情况下二者是不等的,但是要求了不许相交则满足了

不严谨但是比较好理解的说,每个分解为向量坐标后都处于不同的有效维度中,通过点积公式很容易就发现二者相等