WholeReduceMax
产 品 支 持 情 况
功 能 说 明
每 个repeat内 所 有 数 据 求 最 大 值 以 及 其 索 引index,返 回 的 索 引 值 为 每 个repeat内 部 索 引。归 约 指 令 的 总 体 介 绍 请 参 考如 何 使 用 归 约 计 算API。
函 数 原 型
mask逐bit模 式
Texttemplate <typename T, bool isSetMask = true> __aicore__ inline void WholeReduceMax(const LocalTensor<T>& dst, const LocalTensor<T>& src, const uint64_t mask[], const int32_t repeatTime, const int32_t dstRepStride, const int32_t srcBlkStride, const int32_t srcRepStride, ReduceOrder order = ReduceOrder::ORDER_VALUE_INDEX)mask连 续 模 式
Texttemplate <typename T, bool isSetMask = true> __aicore__ inline void WholeReduceMax(const LocalTensor<T>& dst, const LocalTensor<T>& src, const int32_t mask, const int32_t repeatTime, const int32_t dstRepStride, const int32_t srcBlkStride, const int32_t srcRepStride, ReduceOrder order = ReduceOrder::ORDER_VALUE_INDEX)
参 数 说 明
表 1 模 板 参 数 说 明
Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:uint16_t/int16_t/uint32_t/int32_t/half/float | |
|
表 2 参 数 说 明
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 LocalTensor的 起 始 地 址 需 要 保 证4字 节 对 齐(针 对half数 据 类 型),8字 节 对 齐(针 对float数 据 类 型)。 | ||
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 | ||
mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。
| ||
关 于 该 参 数 的 具 体 描 述 请 参 考高 维 切 分API。 | ||
目 的 操 作 数 相 邻 迭 代 间 的 地 址 步 长。以 一 个repeat归 约 后 的 长 度 为 单 位。 返 回 索 引 和 最 值 时,单 位 为dst数 据 类 型 所 占 字 节 长 度 的 两 倍。比 如 当dst为half时,单 位 为4Bytes; 仅 返 回 最 值 时,单 位 为dst数 据 类 型 所 占 字 节 长 度; | ||
单 次 迭 代 内datablock的 地 址 步 长。详 细 说 明 请 参 考dataBlockStride。 | ||
源 操 作 数 相 邻 迭 代 间 的 地 址 步 长,即 源 操 作 数 每 次 迭 代 跳 过 的datablock数 目。详 细 说 明 请 参 考repeatStride。 | ||
使 用order参 数 指 定dst中index与value的 相 对 位 置 以 及 返 回 结 果 行 为,ReduceOrder类 型,默 认 值 为ORDER_VALUE_INDEX。取 值 范 围 如 下:
Ascend 950PR/Ascend 950DT,支 持ORDER_VALUE_INDEX、ORDER_INDEX_VALUE、ORDER_ONLY_VALUE、ORDER_ONLY_INDEX。 |
返 回 值 说 明
无
约 束 说 明
操 作 数 地 址 对 齐 要 求 请 参 见通 用 地 址 对 齐 约 束。
操 作 数 地 址 重 叠 约 束 请 参 考通 用 地 址 重 叠 约 束。
dst结 果 存 储 顺 序 由order决 定,默 认 为 最 值、最 值 索 引。返 回 结 果 中 索 引index数 据 按 照dst的 数 据 类 型 进 行 存 储,比 如dst使 用half类 型 时,index按 照half类 型 进 行 存 储,读 取 时 需 要 使 用reinterpret_cast方 法 转 换 到 整 数 类 型。若 输 入 数 据 类 型 是half,需 要 使 用reinterpret_cast<uint16_t*>,若 输 入 是float,需 要 使 用reinterpret_cast<uint32_t*>。特 别 地,针 对Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品、Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品,ORDER_ONLY_INDEX(仅 返 回 最 值 索 引)情 况 下,读 取index时 都 需 要 使 用reinterpret_cast<uint32_t*>。针 对Ascend 950PR/Ascend 950DT,ORDER_ONLY_INDEX(仅 返 回 最 值 索 引)情 况 下,当 操 作 数 数 据 类 型 为uint16_t/int16_t/half时,读 取index都 需 要 使 用reinterpret_cast<uint32_t*>。
针 对 不 同 场 景 合 理 使 用 归 约 指 令 可 以 带 来 性 能 提 升,相 关 介 绍 请 参 考选 择 低 延 迟 指 令,优 化 归 约 操 作 性 能,具 体 样 例 请 参 考ReduceCustom。
调 用 示 例
完 整 样 例 可 参 考WholeReduce系 列 归 约 指 令 样 例。
tensor高 维 切 分 计 算 样 例-mask连 续 模 式
Text// dstLocal,srcLocal均 为half类 型,srcLocal的 计 算 数 据 量 为512,连 续 排 布,计 算 结 果 也 需 要 连 续 排 布,使 用tensor高 维 切 分 计 算 接 口,设 定mask为 最 多 的128个 全 部 元 素 参 与 计 算 // 根 据 以 上 信 息,推 断 出repeatTime为4,dstRepStride为1,srcBlkStride为1,srcRepStride为8 // 若 求 最 大 值 及 索 引,并 且 需 要 存 储 顺 序 为[value, index]的 结 果,可 以 使 用 默 认order,接 口 示 例 为: AscendC::WholeReduceMax<half>(dstLocal, srcLocal, 128, 4, 1, 1, 8); // 若 求 最 大 值 及 索 引,并 且 需 要 存 储 顺 序 为[index, value]的 结 果,接 口 示 例 为: AscendC::WholeReduceMax<half>(dstLocal, srcLocal, 128, 4, 1, 1, 8, AscendC::ReduceOrder::ORDER_INDEX_VALUE); // 若 只 求 最 大 值,并 且 需 要 存 储[value]的 结 果,接 口 示 例 为: AscendC::WholeReduceMax<half>(dstLocal, srcLocal, 128, 4, 1, 1, 8, AscendC::ReduceOrder::ORDER_ONLY_VALUE); // 若 只 求 索 引,并 且 需 要 存 储[index]的 结 果,接 口 示 例 为: AscendC::WholeReduceMax<half>(dstLocal, srcLocal, 128, 4, 1, 1, 8, AscendC::ReduceOrder::ORDER_ONLY_INDEX);tensor高 维 切 分 计 算 样 例-mask逐bit模 式
Text// dstLocal,srcLocal均 为half类 型,srcLocal的 计 算 数 据 量 为512,连 续 排 布,计 算 结 果 也 需 要 连 续 排 布,使 用tensor高 维 切 分 计 算 接 口,设 定mask为 最 多 的128个 全 部 元 素 参 与 计 算 uint64_t mask[2] = { 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF }; // 根 据 以 上 信 息,推 断 出repeatTime为4,dstRepStride为1,srcBlkStride为1,srcRepStride为8 // 若 求 最 大 值 及 索 引,并 且 需 要 存 储 顺 序 为[value, index]的 结 果,使 用 默 认order,接 口 示 例 为: AscendC::WholeReduceMax<half>(dstLocal, srcLocal, mask, 4, 1, 1, 8); // 若 求 最 大 值 及 索 引,并 且 需 要 存 储 顺 序 为[index, value]的 结 果,接 口 示 例 为: AscendC::WholeReduceMax<half>(dstLocal, srcLocal, mask, 4, 1, 1, 8, AscendC::ReduceOrder::ORDER_INDEX_VALUE); // 若 只 求 最 大 值,并 且 需 要 存 储[value]的 结 果,接 口 示 例 为: AscendC::WholeReduceMax<half>(dstLocal, srcLocal, mask, 4, 1, 1, 8, AscendC::ReduceOrder::ORDER_ONLY_VALUE); // 若 只 求 索 引,并 且 需 要 存 储[index]的 结 果,接 口 示 例 为: AscendC::WholeReduceMax<half>(dstLocal, srcLocal, mask, 4, 1, 1, 8, AscendC::ReduceOrder::ORDER_ONLY_INDEX);示 例 结 果 如 下:
Text输 入 数 据src_gm: [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 12 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ... 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 13 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3] 若ReduceOrder类 型 为ORDER_VALUE_INDEX或 默 认,则 输 出 数 据dst_gm: [11 3.09944e-06 12 5.96046e-06 ... 13 1.13249e-06] 若ReduceOrder类 型 为ORDER_INDEX_VALUE,则 输 出 数 据dst_gm: [3.09944e-06 11 5.96046e-06 12 ... 1.13249e-06 13] 若ReduceOrder类 型 为ORDER_ONLY_VALUE,则 输 出 数 据dst_gm: [11 12 ... 13 0 0 0 ...] 若ReduceOrder类 型 为ORDER_ONLY_VALUE,则 输 出 数 据dst_gm: [3.09944e-06 0 5.96046e-06 0 ... 1.13249e-06 0] 其 中,index的 值 为int数 值 的 二 进 制,在half中 的 表 达,以 上 述 结 果 为 例: 前128个 数 中,11的 位 置 在 对 应 的repeat中 为52,十 六 进 制 为0x3400,对 应half值 为3.09944e-06。 第 二 个128个 数 中,12的 位 置 在 对 应 的repeat中 为100,十 六 进 制 为0x6400,对 应half值 为5.96046e-06。 最 后128个 数 中,13的 位 置 在 对 应 的repeat中 为19,十 六 进 制 为0x1300,对 应half值 为1.13249e-06。