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

[object Object]

[object Object] 通过UB索引Tile将UB源Tile的数据写入GM [object Object]。操作模式通过 [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] 逐元素散射到一维化 [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] 选项(操作写入已有表;越界索引没有可写入零值的真实目标槽位)。
  • [object Object]仅Ascend 950PR/Ascend 950DT)— [object Object](确定性最大索引获胜,仅在 [object Object] 时生效)或 [object Object](warp调度器依赖)。Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品没有 [object Object] 参数,因为内核严格顺序执行,碰撞由"最后写入获胜"解决。

按目标分发摘要:

  • CPU模拟器 ——纯C++参考实现。以行主序迭代顺序遍历 [object Object],写入 [object Object](Elem语义)。当多个源映射到同一目标时,行主序迭代顺序中最后写入者获胜。
  • Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品VEC-CORE ——标量pipe驱动的单线程 / MTE3遍历。Row模式每行通过 [object Object] 发出一次宽 [object Object] DMA;Elem模式每元素执行标量UB→GM存储。支持ND-GM与ND-UB以及NZ-GM与NZ-UB tile配对。[object Object] 时始终"最后写入获胜"。
  • Ascend 950PR/Ascend 950DT SIMT ——通过 [object Object][object Object](1024线程)进行SIMT启动。Row模式使用warp并行通道写入;Elem模式将每个通道映射到一个元素。Row内核将GM table视为打包ND(行步长 = [object Object]);[object Object] 在编译时强制 [object Object][object Object] 实现为以槽位为中心的反向扫描([object Object]),结果确定且无竞争。Ascend 950PR/Ascend 950DT不支持NZ块步长布局。退化的Elem [object Object] 情况绕过SIMT启动。
[object Object][object Object]

[object Object],索引 [object Object](Ascend 950PR/Ascend 950DT上也为 [object Object]),表 [object Object]。对每行 [object Object]

tableidxr,  j    atom ⁣(tableidxr,  j,  srcr,j)for 0j<C\mathrm{table}_{\mathrm{idx}_{r},\; j} \;\leftarrow\; \mathrm{atom}\!\left(\mathrm{table}_{\mathrm{idx}_{r},\; j},\; \mathrm{src}_{r, j}\right) \quad\text{for } 0 \le j < C

其中 [object Object][object Object] 为恒等替换,否则为对应的原子累加。

[object Object]

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

table[idxr,c]    atom ⁣(table[idxr,c],  srcr,c)\mathrm{table}[\mathrm{idx}_{r, c}] \;\leftarrow\; \mathrm{atom}\!\left(\mathrm{table}[\mathrm{idx}_{r, c}],\; \mathrm{src}_{r, c}\right)

[object Object]

当选择 [object Object] / [object Object] / [object Object] 时:

table[]=src,{+,  max,  min}\mathrm{table}[\cdot] \mathrel{\oplus}= \mathrm{src}_{\cdot},\quad \oplus \in \{+,\; \max,\; \min\}

[object Object]
  • Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品。 内核在递增的 [object Object](Row)或 [object Object](Elem)顺序下严格顺序执行。[object Object] 时,后续写入始终获胜("最后写入获胜")。
  • Ascend 950PR/Ascend 950DT。 [object Object] 时:
    • [object Object] ——以给定目标槽位为目标的最大平坦索引的源位置的值被存储。实现为以槽位为中心的反向扫描,构造上无竞争。
    • [object Object] ——幸存写入者依赖warp调度器。对于无碰撞的索引集合,结果与 [object Object] 相同。
  • CPU模拟器。 行主序迭代顺序中最后写入者获胜(与 [object Object] 匹配)。

原子模式忽略 [object Object],因为GM原子R-M-W自行序列化碰撞写入。

[object Object]
[object Object]
  • [object Object]:调用者保证 [object Object];不应用任何remap。
  • [object Object]:越界行/元素直接不写入。该GM地址处的原始表值被保留。
  • [object Object][object Object]
  • [object Object][object Object]

没有 [object Object] 选项—OOB索引从未标识真实目标槽位,因此 [object Object] 是自然的"OOB时无操作"策略。

[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]

Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品没有 [object Object] 模板参数(内核始终顺序执行,碰撞为确定性的"最后写入获胜")。

[object Object]
[object Object]
[object Object]
  • [object Object] —目标GM [object Object][object Object] 必须是 [object Object],与源元素类型匹配。
  • [object Object] —UB源tile([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] 值。Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品不支持 [object Object] / [object Object]
  • [object Object][object Object] 值。
  • [object Object]仅Ascend 950PR/Ascend 950DT)— [object Object] 值。仅在 [object Object] 时生效。
[object Object]
[object Object]
[object Object][object Object]undefined
[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](按行)或 [object Object](按元素)。
  • [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][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])。
  • 索引tile 始终[object Object](ND)。
  • [object Object] 必须是GM中的 [object Object][object Object]
  • 源tile的布局必须与表布局精确配对:
    • [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]。Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品不支持无符号整数原子加法。
  • [object Object][object Object] 在Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品上不支持

形状约束:

  • 填充后的 [object Object] 必须32字节对齐。
  • [object Object][object Object][object Object]
  • [object Object][object Object][object Object]
  • NZ表额外要求:[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]

Tile与内存类型:

  • [object Object] 必须是向量Tile([object Object])。
  • [object Object] 必须是向量Tile([object Object])。
  • SIMT内核对UB tile的布局无感知:每次读写均通过 [object Object]
  • GM表布局:仅 [object Object] Ascend 950PR/Ascend 950DT SIMT内核将GM寻址为扁平行主序缓冲区,行步长硬编码为 [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](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] 将运行时有效范围存储在tile中。
  • [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] 验证tile形状与所选 [object Object] 值:

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

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

  • 常量。 [object Object][object Object]。每个分形块为 [object Object] 元素(= 512Byte)。
  • Row模式。 对每个逻辑源行,内核映射索引和行到NZ块地址,每批次发出一次多burst MTE3传输。
  • Elem模式。 内核映射 [object Object][object Object] 并通过 [object Object] 转为NZ物理偏移。遍历顺序为块列 → 行 → 块内列
[object Object][object Object]

调用者不需要插入任何额外屏障,只需在 [object Object] 之前使用标准的 [object Object] 后置flag对。内核从不使用 [object Object]

[object Object]undefined
[object Object]

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

[object Object][object Object]

AIV向量核心192KB UB。[object Object] 不从内核内部分配任何UB scratch—仅消耗调用者分配的源tile和索引tile。

[object Object]

Ascend 950PR/Ascend 950DT SIMT内核在AIV上运行。最大可用:

[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]
[object Object]
[object Object][object Object]
  1. Row vs. Elem。 Row coalesce实现最佳聚合带宽。Elem coalesce每通道发出一次标量UB读取 + GM写入。
  2. 原子加法成本(Row)。 每次调用一次 [object Object] / [object Object] 对;MTE3原子加法单元处理每次burst的累加。
  3. OOB成本。 [object Object] 免费;[object Object] 每行/元素增加一个分支;[object Object]/[object Object] 增加一次算术remap。
[object Object]
  1. 形状自适应启动。 SIMT网格大小根据解析的valid范围确定。
  2. 冲突策略成本。 [object Object]:per-lane寄存器内反向扫描,提前终止。[object Object]:零额外开销。原子模式:由GM原子R-M-W自行序列化。
  3. Row vs. Elem带宽。 Row coalesce实现最佳GM写入带宽;Elem coalesce每通道一次标量GM存储。
[object Object]
  • :连续块传输Tile → GM。
  • :索引收集GM → Tile(逆操作)。
  • :基于索引的Tile内部散射。