使用索引Tile或编译时掩码模式来收集/选择元素。
基于索引的gather(概念性定义):
设 [object Object],[object Object]。对于 [object Object] 且 [object Object]:
确切的索引解释和边界行为由实现定义。
基于掩码模式的gather是由 [object Object] 控制的实现定义的选择/归约操作。
基于索引的gather:
[object Object]
基于掩码模式的gather:
[object Object]
[object Object]
[object Object]
声明于 [object Object]:
[object Object]
[object Object]
[object Object]
收集满足与每行阈值标量比较条件的元素的索引。
[object Object]
对于 [object Object] 的每一行 [object Object],使用 [object Object](GT或EQ)将每个元素 [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],或[object Object](仅EQ模式)。[object Object]必须是[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]。[object Object]必须是[object Object]或[object Object]。
- 基于索引的gather:实现检查 (Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品):
[object Object]必须是2或4字节(b16/b32)。[object Object]必须是4字节(b32:[object Object]、[object Object])。[object Object]必须与[object Object]类型相同。[object Object]必须与[object Object]类型相同。[object Object]且[object Object]。[object Object](连续的目标存储)。
- 基于索引的gather:实现检查 (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]必须与[object Object]类型相同。[object Object]且[object Object]。
- 基于掩码模式的gather:实现检查 (Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品):
- 源元素大小必须是
[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](连续的目标存储)。
- 源元素大小必须是
- 基于掩码模式的gather:实现检查 (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]、[object Object]、[object Object]、[object Object]、[object Object]、[object Object]、[object Object]或[object Object]之一。- 支持的数据类型限制为目标定义的集合(通过实现中的
[object Object]强制执行),且[object Object],[object Object](连续的目标存储)。
- 源元素大小必须是
- 基于比较的gather:实现检查:类型与
[object Object]约束详见 一节。 - 边界 / 有效性:
- 索引边界不通过显式运行时断言进行验证;超出范围的索引行为由目标定义。
- 临时Tile:
- 基于索引的Gather (Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品):C++ API需要显式传入
[object Object]Tile。[object Object]必须与[object Object]类型相同([object Object]或[object Object])。[object Object]且[object Object]。tmp Tile用于存放b16源类型的[object Object]中间结果供[object Object]使用;对于b32源类型,结果直接写入[object Object],但API仍需要[object Object]。 - 基于索引的Gather (Ascend 950PR/Ascend 950DT):
[object Object]Tile被接受但不使用。Ascend 950PR/Ascend 950DT硬件无需临时缓冲区即可处理基于索引的Gather。 - 基于比较的Gather (Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品):C++ API需要显式传入
[object Object]Tile,该Tile作为三个内部区域的合并暂存缓冲区:- cmpsTmp(比较结果位图):偏移量0,以
[object Object]存储,大小 =[object Object]字节。 - indexTmp(索引数组):偏移量 =
[object Object],以[object Object]存储,大小 =[object Object]字节。 - cvtTmp(转换后的k值数组):偏移量 =
[object Object]+[object Object],以[object Object]存储,大小 =[object Object]字节。 最小tmp大小必须满足:
- cmpsTmp(比较结果位图):偏移量0,以
- 基于比较的Gather (Ascend 950PR/Ascend 950DT):
[object Object]Tile被接受但不使用。Ascend 950PR/Ascend 950DT硬件无需临时缓冲区即可处理基于比较的Gather。
- 基于索引的Gather (Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品):C++ API需要显式传入
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]