开发者
下载
[object Object][object Object]

[object Object]

在Tile之间移动/复制,可选通过模板参数和重载选择实现定义的转换模式。

[object Object] 用于:

  • Vec -> Vec移动
  • Mat -> Left/Right/Bias/Scaling/Scale(Microscaling) 移动(目标相关)
  • Acc -> Mat/Vec移动(目标相关)
[object Object]

在有效区域内将元素从 [object Object] 复制或转换到 [object Object]。具体转换取决于所选模式和目标。

对于纯复制情况:

dsti,j=srci,j\mathrm{dst}_{i,j} = \mathrm{src}_{i,j}

[object Object]

Cube Unit以 NZ(Normal-ZigZag)fractal格式消费操作数:Tile被划分为 [object Object] fractal,每个fractal以 [object Object]("N"——列主序外层块)和 [object Object]("Z"——fractal内行主序)存储。[object Object] 将RowMajor [object Object]/[object Object] Tile([object Object])重新打包为NZ布局。无需 [object Object]

[object Object]undefined

[object Object] 目标([object Object])是避免 [object Object] scatter上UB bank冲突的标准用法。

[object Object]

对于MXFP8/MXFP4矩阵乘,每组E8M0指数须以 ZZ 格式送达Cube的scale操作数:[object Object] 块(32Byte = 16列 × 2行组),按Cube每个fractal列对一个块的方式线性化。两种变体:

ND → ZZ[object Object],默认):源指数为ND分组(axis-1)。

DZZ[rb,c,q,δ]=DND[16rb+δ][2c+q]D_{ZZ}[r_b, c, q, \delta] = D_{ND}[16r_b + \delta][2c + q]

其中 rb[0,R/16)r_b \in [0, R/16)c[0,C/2)c \in [0, C/2)q[0,2)q \in [0,2)δ[0,16)\delta \in [0,16)

DN → ZZ[object Object]):源指数为DN分组(axis-0)。等价于转置后ND→ZZ:

EZZ[cb,p,q,δ]=EDNT[16cb+q][2p+δ]=EDN[2p+δ][16cb+q]E_{ZZ}[c_b, p, q, \delta] = E_{DN}^{T}[16c_b + q][2p + \delta] = E_{DN}[2p + \delta][16c_b + q]

其中 cb[0,N/16)c_b \in [0, N/16)p[0,M^/2)p \in [0, \hat M/2)q[0,16)q \in [0,16)δ{0,1}\delta \in \{0,1\}M^=M/32\hat M = M/32

对于固定的 (cb,p)(c_b, p),ZZ块的32Byte来自两段连续的16Byte源数据(EDN[2p]E_{DN}[2p]EDN[2p+1]E_{DN}[2p+1]);因此DN→ZZ使用连续加载 + [object Object](比ND→ZZ的 [object Object] 更高效)。

[object Object]

X→ZZ 转换接受 [object Object] 操作数(3参数重载)。ND→ZZ用作 [object Object] 索引缓冲;DN→ZZ为接口一致接受但不访问[object Object] scatter无需scratch)。ND→NZ无 [object Object]

[object Object]

PTO AS设计建议将 [object Object] 拆分为一组操作:

[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]

声明于 [object Object][object Object]

[object Object]
[object Object]
[object Object]
[object Object]
[object Object]undefined
[object Object][object Object]
  • [object Object] 有以下重载族:
    • 纯移动:[object Object]
    • relu形式:[object Object]
    • 累加器到向量形式:[object Object]
    • 向量量化形式:[object Object]
    • 标量量化形式:[object Object][object Object]
  • [object Object] 取值为 [object Object]
  • [object Object] 取值为 [object Object]
[object Object]
  • 形状须匹配:[object Object][object Object]
  • 支持的Tile类型对在编译期限制为:
    • [object Object]
    • [object Object]
    • [object Object]
  • 对于 [object Object]
    • 支持的源/目标dtype对为 [object Object][object Object][object Object]
    • 源行数必须为 [object Object]
    • [object Object] 必须64字节对齐
  • 对于 [object Object]
    • 目标dtype须等于源dtype且为 [object Object]
    • 源行数必须为 [object Object]
    • [object Object] 必须128字节对齐
  • 对于 [object Object]
    • 额外执行 [object Object] 编译期检查
    • 纯/relu形式使用由 [object Object] 推导的类型转换前量化模式
    • 标量量化形式使用 [object Object]
    • 向量量化形式要求 [object Object] 操作数 [object Object],使用 [object Object]
[object Object]
  • [object Object] 要求:
    • 目标/源dtype必须相同
    • 支持的元素类型为 [object Object][object Object][object Object][object Object][object Object][object Object][object Object][object Object][object Object]
    • 源布局须满足以下之一:
      • [object Object]
      • [object Object]
      • [object Object]
  • [object Object] 用于MX路径,要求源/目标dtype一致且支持 [object Object]
  • 支持的路径包括:
    • [object Object]
    • [object Object]
    • [object Object]
    • 特定的 [object Object] 等内部路径变体由Ascend 950PR/Ascend 950DT实现处理
  • 对于 [object Object]
    • 支持的dtype对为 [object Object][object Object][object Object][object Object]
    • 源行数必须为 [object Object]
    • [object Object] 必须64字节对齐
    • bias表占用 [object Object] 不得超过 [object Object] 字节
  • 对于 [object Object]
    • 源行数必须为 [object Object]
    • [object Object] 必须128字节对齐
    • fixpipe缓冲占用 [object Object] 不得超过 [object Object] 字节
  • 对于 [object Object]
    • [object Object] 选择 [object Object][object Object][object Object][object Object]
    • 双目标模式要求 [object Object]
    • 双目标模式不支持 [object Object] 路径
    • 对于32位目标类型([object Object]/[object Object]),使用 [object Object][object Object](分裂前)须为32的倍数
    • 目标stride须非零且 [object Object] 须为32字节的倍数
  • 对于 [object Object]
    • 目标stride须非零且 [object Object] 须为32字节的倍数
    • relu/标量量化/向量量化形式通过相应重载支持
[object Object][object Object]
[object Object]

ND→NZ的 [object Object] 无——2参数重载通过 [object Object] 原地重新打包。

[object Object]

给定量化输入形状 M×NM \times N(组大小 G=32G = 32),ND分组E8M0指数Tile形状为:

[object Object]undefined

[object Object] 缓冲保存 [object Object] 使用的 [object Object] B16索引缓冲:

tmpBytes=(16+rbP+16)×2=(32+M16N64)×2\boxed{\mathrm{tmpBytes} = \bigl(16 + r_b \cdot P + 16\bigr) \times 2 = \left(32 + \left\lceil\tfrac{M}{16}\right\rceil \cdot \tfrac{N}{64}\right) \times 2}

  • 16 B16 lanes头部空间 + rb×Pr_b \times P 个gather索引 + 16 B16 lanes尾部空间。
  • [object Object] dtype = [object Object](E8M0),形状 [object Object]

示例: M=128M = 128N=256N = 256 → 指数Tile 128×8128 \times 8rb=8r_b = 8P=4P = 4

tmpBytes=(32+8×4)×2=128 B\mathrm{tmpBytes} = (32 + 8 \times 4) \times 2 = 128\ \mathrm{B}

[object Object]

DN分组指数形状为 M^×N\hat M \times N,其中 M^=M/32\hat M = M/32[object Object] 为接口一致接受 [object Object] 操作数但不访问它[object Object] scatter无需scratch)。任意非零尺寸Tile即可满足签名。

[object Object]
[object Object]

[object Object] 生成量化数据 + E8M0指数后,两个 [object Object] 将它们重新打包供Cube Unit使用。完整流水线见 [object Object] / [object Object]

[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object][object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]