[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](Ascend 950PR/Ascend 950DT上也为 [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](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];不应用任何remap。[object Object]:越界行/元素直接不写入。该GM地址处的原始表值被保留。[object Object]:[object Object]。[object Object]:[object Object]。
没有 [object Object] 选项—OOB索引从未标识真实目标槽位,因此 [object Object] 是自然的"OOB时无操作"策略。
同步形式:
声明于 [object Object]:
[object Object]
Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品没有 [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]、[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]。
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]。
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]将运行时有效范围存储在tile中。[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] 是匹配的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] 后置flag对。内核从不使用 [object Object]。
Ascend 950PR/Ascend 950DT实现将几乎整个pipe模型隐藏在 [object Object] 之后。唯一显式的握手在标量回退路径([object Object],用于Elem [object Object])。
AIV向量核心192KB UB。[object Object] 不从内核内部分配任何UB scratch—仅消耗调用者分配的源tile和索引tile。
Ascend 950PR/Ascend 950DT SIMT内核在AIV上运行。最大可用:
默认安全工作集 ≤ 128KB。超过时需通过 [object Object] 显式声明。
- Row vs. Elem。 Row coalesce实现最佳聚合带宽。Elem coalesce每通道发出一次标量UB读取 + GM写入。
- 原子加法成本(Row)。 每次调用一次
[object Object]/[object Object]对;MTE3原子加法单元处理每次burst的累加。 - OOB成本。
[object Object]免费;[object Object]每行/元素增加一个分支;[object Object]/[object Object]增加一次算术remap。
- 形状自适应启动。 SIMT网格大小根据解析的valid范围确定。
- 冲突策略成本。
[object Object]:per-lane寄存器内反向扫描,提前终止。[object Object]:零额外开销。原子模式:由GM原子R-M-W自行序列化。 - Row vs. Elem带宽。 Row coalesce实现最佳GM写入带宽;Elem coalesce每通道一次标量GM存储。