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的交换不会影响
组合
因为是函数,自然可以这样使用,记为,有
显然,且的定义域和相同,考虑一个简单的情况,其过程为
若我们能够找出一个能直接描述这种映射关系,则是可组合的,在上面的例子中
同理可以有
左可除性
设,为正整数,设为一种可能的分解,我们说对于是左可除的,如果存在满足
- 上一个条件下,, 如果,还需要满足
- 上一个条件下,如果 ,还需要
若满足前两个条件而不满足第三条,则称为弱左可除
对于一个,可表示为
约束
上面提到的值域需要是定义域的子集,这是一种约束,考虑简单情况,一般来说可以这样定义这个约束
设,,,说是可组合的,如果满足
- 能被左除,记,其中
- 可被弱左除
如此约束的原因是
我们渴望找到一种直接能够提供等价变换,但我们知道
显然我们要寻找的来源于,换句话说是的切片,同理也是的切片,实际上就是一个在位置上为的向量坐标:,要求左除本质是找到切片开始的起始坐标,弱左除则是约束切片开始位置加上切片长度不会超过总长
组合
特殊情况
设 和 组成 ,,且是满足上述约束的,的定义分两种情况
假设,有
若,则
否则,存在一个,使得,其中如果
区间
设布局 的映射函数为 。 记 为 在区间 上的值域的最小连续整数区间。 再设 ,则 允许访问的位置范围为 。于是, 的 区间 为 。 若 ,则 ,于是 。
一般情况
设形状元组
以及布局
并记
我们称二元组 是可组合的,若满足:
对所有 ,二元组 在上述约束下都是可组合的
对所有二元组 ()的区间两两互不相交。
在这种情况下,如果
是一个步长元组,并且
那么我们将组合 定义为连接得到的布局:
其中每个 的定义如特殊情况相同
我们知道,
根据定义
一般情况下二者是不等的,但是要求了不许相交则满足了
不严谨但是比较好理解的说,每个分解为向量坐标后都处于不同的有效维度中,通过点积公式很容易就发现二者相等