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

[object Object]

[object Object] 通过UB索引Tile从GM [object Object] 中读取数据到UB目标Tile。操作模式通过 [object Object] 模板参数显式选择:

  • [object Object](默认)——从 [object Object] 收集整行到 [object Object]。索引tile是1-D形式([object Object] 行主序;Ascend 950PR/Ascend 950DT上也支持 [object Object] 列主序)。允许 [object Object]
  • [object Object] ——通过 [object Object] 从一维化 [object Object] 收集元素到 [object Object]。索引tile必须与目标具有相同的有效形状。允许退化的 [object Object] 情况。

越界处理通过 [object Object] 模板参数选择。[object Object] 没有原子或冲突策略:每个目标槽有唯一的源索引,因此不会发生冲突。

目标也可以是 L1 / cube [object Object] tile(NZ布局)(索引以GM tensor形式提供)。此GM → L1路径(支持 [object Object][object Object],适用于Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品和Ascend 950PR/Ascend 950DT)见下方 章节。

按目标分发摘要:

  • CPU模拟器 ——纯C++参考实现。遍历 [object Object] 并读取 [object Object](Elem语义);CPU sim没有单独的Row coalesce路径。
  • Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品VEC-CORE ——标量pipe驱动的单线程 / MTE2遍历。Row模式每行通过 [object Object] 发出一次宽 [object Object] DMA;Elem模式每元素执行标量GM→UB拷贝。支持ND-GM与ND-UB以及NZ-GM与NZ-UB tile配对。
  • Ascend 950PR/Ascend 950DT SIMT ——通过 [object Object][object Object](1024线程)进行SIMT启动。Row模式使用warp并行通道读取;Elem模式将每个通道映射到一个元素。Row内核将GM table视为打包ND(行步长 = [object Object]);[object Object] 在编译时强制 [object Object]。Ascend 950PR/Ascend 950DT不支持NZ块步长布局。退化的Elem [object Object] 情况绕过SIMT启动,在AIV向量核心上运行 [object Object]
[object Object][object Object]

目标 [object Object],索引 [object Object](Ascend 950PR/Ascend 950DT上也为 [object Object]),表 [object Object]

dstr,j=tableidxr,  jfor 0r<R,  0j<C\mathrm{dst}_{r, j} = \mathrm{table}_{\mathrm{idx}_{r},\; j} \quad\text{for } 0 \le r < R,\; 0 \le j < C

[object Object]

目标 [object Object],索引 [object Object](与 [object Object] 相同有效形状),一维表长度为 [object Object]

dstr,c=table[idxr,c]for 0r<R,  0c<C\mathrm{dst}_{r, c} = \mathrm{table}[\mathrm{idx}_{r, c}] \quad\text{for } 0 \le r < R,\; 0 \le c < C

[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]
[object Object]
[object Object]
[object Object]
[object Object]
  • [object Object] —UB目标tile([object Object]);形状 [object Object]
  • [object Object] —源GM [object Object][object Object] 必须是 [object Object],与目标元素类型匹配。
  • [object Object] —UB索引tile([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] 元素类型必须是以下之一:[object Object][object Object][object Object][object Object][object Object][object Object][object Object][object Object][object Object]
  • 在AICore目标上(CPU模拟器以 [object Object] 编译时),还支持 [object Object][object Object]
  • [object Object] 元素类型必须是 [object Object][object Object]

Tile与内存类型:

  • [object Object] 必须是向量Tile([object Object])。
  • [object Object] 必须是向量Tile([object Object])。
  • [object Object][object Object] 必须使用行主序布局([object Object])。
  • [object Object] 必须是位于GM内存中的 [object Object]
  • [object Object] 必须使用 [object Object]

形状约束:

  • [object Object]
  • [object Object] 的形状必须为 [object Object](按行gather)或 [object Object](按元素gather)。
  • [object Object] 行宽必须满足32字节对齐,即 [object Object] 必须是32的倍数。
  • [object Object] 的静态shape必须满足 [object Object]
[object Object]

支持的数据类型:

  • [object Object] / [object Object] 元素类型必须是以下之一:[object Object][object Object][object Object][object Object][object Object][object Object][object Object][object Object]。Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品不支持 [object Object][object Object][object Object]
  • [object Object] 元素类型必须是 [object Object][object Object]

Tile与内存类型:

  • [object Object] 必须是向量Tile([object Object])。
  • [object Object] 必须是向量Tile([object Object])。
  • 索引tile 始终[object Object](ND),无论表布局如何。
  • [object Object] 必须是位于GM内存中的 [object Object][object Object]
  • 目标tile的bulk + sub布局必须与表布局精确配对:
    • [object Object][object Object][object Object]
    • [object Object][object Object][object Object](= 512Byte)。

形状约束:

  • 填充后的 [object Object] 必须在两种布局中均为32字节对齐。[object Object] / [object Object] 不受此规则约束。
  • 对于 [object Object][object Object][object Object]
  • 对于 [object Object][object Object][object Object]
  • 两种模式均要求 [object Object][object Object]
  • NZ表额外要求 [object Object](= 16)、[object Object](= 32Byte / 元素宽度)、[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]。在 [object Object] 构建中还包含 [object Object][object Object][object Object]
  • [object Object] 元素类型必须是 [object Object][object Object]

Tile与内存类型:

  • [object Object] 必须是向量Tile([object Object])。
  • [object Object] 必须是向量Tile([object Object])。
  • SIMT内核对UB tile的布局无感知:每次UB读写均通过 [object Object],因此 [object Object] 可以为 [object Object][object Object](搭配 [object Object])。
  • [object Object] 必须是位于GM内存中的 [object Object][object Object]
  • GM表布局:仅 [object Object] Ascend 950PR/Ascend 950DT SIMT内核将GM寻址为扁平行主序缓冲区,行步长硬编码为 [object Object][object Object] 强制 [object Object],因此表不能有任何行间填充。

形状约束:

  • 填充后的 [object Object](RowMajor)或 [object Object](ColMajor)必须32字节对齐。
  • 对于 [object Object]:索引tile的有效形状为 [object Object][object Object] [object Object][object Object])。
  • 对于 [object Object][object Object][object Object][object Object][object Object][object Object] 无关。
  • 两种模式均要求 [object Object][object Object]。Elem模式中退化的 [object Object] 形状绕过SIMT启动。
[object Object]

[object Object] 同时接受编译时和运行时动态形状:

  • [object Object][object Object] 及/或 [object Object] 将运行时有效范围存储在tile对象中;实现通过 [object Object] / [object Object] 读取。
  • [object Object] / [object Object] 中一个或多个 [object Object] 条目使用运行时尺寸构造;实现通过 [object Object] 读取。

[object Object] 中的静态断言以 [object Object] 为门控,仅对编译时已知维度生效。

示例:

[object Object]
[object Object]

Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品和Ascend 950PR/Ascend 950DT上模式是显式的,不会自动检测。[object Object] 中的静态断言根据所选的 [object Object] 值验证提供的tile形状:

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

[object Object][object Object] 是匹配的 [object Object] tile时,[object Object](Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品)运行专用的NZ路径([object Object][object Object])。

  • 常量。 [object Object][object Object]。每个分形块为 [object Object] 元素(= 512Byte)。
  • 逻辑形状。 逻辑行 = [object Object]。逻辑列 = [object Object]。Row模式的OOB以逻辑行数进行限制/取模;Elem模式以总元素数进行。
  • Row模式。 对每个逻辑行 [object Object],内核将 [object Object] 映射到 [object Object],将 [object Object] 映射到 [object Object],然后对每个外层批次发出 一次多burst MTE2传输。当 [object Object] 时,内核在DMA循环前对整个tile预填 [object Object] 并跳过OOB行的DMA。
  • Elem模式。 对每个 [object Object],内核将 [object Object] 映射到 [object Object],然后通过 [object Object] 转换为NZ物理偏移。遍历顺序为块列 → 行 → 块内列,确保连续写入目标连续32Byte UB块。
[object Object][object Object]

调用者不需要插入任何额外屏障,只需在 [object Object] 之前使用标准的 [object Object] 后置 [object Object] / [object Object] 对,将索引tile带到向量pipe上的干净状态。

[object Object]undefined
[object Object]

Ascend 950PR/Ascend 950DT实现将几乎整个pipe模型隐藏在 [object Object] 之后。唯一显式的内核端握手在标量回退路径([object Object],用于Elem [object Object]):

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

AIV向量核心具有标准的CANN 192KB UB布局。[object Object] 不从内核内部分配任何UB scratch—唯一的UB消费者是调用者分配的目标tile和索引tile。

[object Object]

Ascend 950PR/Ascend 950DT SIMT内核在AIV向量核心上运行。所有用户tile必须适应AIV的256KB Unified Buffer,加上两个固定的运行时预留:8KB保留区域和Data Cache(最少32KB)。因此最大可用为:

[object Object]

当使用 [object Object] 手动放置tile时,编译器看到 [object Object],全部 216KB 可作为 [object Object] 使用。当工作集在默认预算下超过128KB时,通过 [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]
[object Object][object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]

除上述GM → UB gather外,[object Object] 还支持直接收集索引选择的数据到 L1 / cube [object Object] tile(NZ fractal布局) 中。当 [object Object] 时,自动选择GM → L1路径。

[object Object]

GM → L1变体将索引作为GM [object Object][object Object] / [object Object])提供。Row模式复用三参数形式;Elem模式需要第四个参数 [object Object](GM workspace):

[object Object]
[object Object]
  • Dtypes。 Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品:[object Object]。Ascend 950PR/Ascend 950DT额外支持 [object Object]。Row模式进一步要求 [object Object]
  • 索引。 [object Object] 必须是GM [object Object],类型为 [object Object][object Object]
  • 表。 [object Object][object Object]
  • Scratch(仅Elem)。 [object Object]
  • 目标。 [object Object],NZ形式([object Object]),[object Object][object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]

Ascend 950PR/Ascend 950DT上Elem GM → L1路径有两个executor,通过第三个模板参数 [object Object] 选择:

[object Object]
  • [object Object](四参数形式的默认值)——cube核心通过标量加载遍历索引。
  • [object Object] —— AIV向量核心通过SIMT内核并行化gather。
[object Object]
[object Object]
[object Object][object Object]
  1. Row vs. Elem。 Row coalesce实现最佳聚合带宽。Elem coalesce每个活跃通道发出一条标量GM读取 + UB写入。
  2. 顺序标量循环(Elem)。 Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品以单线程顺序遍历 [object Object] 个通道。
  3. DMA成本(Row)。 ND:每行一次 [object Object] 调用。NZ:每个(逻辑行,批次)对一次调用。
  4. OOB成本。 [object Object] 免费;[object Object]/[object Object] 每通道增加一次算术remap;[object Object] 写入 [object Object] 内联(Elem)或预零tile并跳过OOB行的DMA(Row)。
[object Object]
  1. 形状自适应启动。 SIMT网格大小根据解析的 [object Object]/[object Object] 确定。
  2. OOB策略成本。 [object Object]:零开销。[object Object]/[object Object]:每通道一次算术remap。[object Object]:每通道一次比较和选择。
  3. 模式/OOB无线程分支。 所有决策均为 [object Object]
  4. Row vs. Elem带宽。 Row coalesce实现最佳聚合带宽;Elem coalesce每通道执行一次标量GM加载。
[object Object]
  • :连续块传输GM → Tile。
  • :索引散射Tile → GM(逆操作)。
  • :基于索引的Tile内部gather(同vec-core上的UB-to-UB)。