PairReduceSum
产 品 支 持 情 况
功 能 说 明
PairReduceSum:相 邻 两 个(奇 偶)元 素 求 和,例 如(a1, a2, a3, a4, a5, a6...),相 邻 两 个 数 据 求 和 为(a1+a2, a3+a4, a5+a6, ......)。归 约 指 令 的 总 体 介 绍 请 参 考如 何 使 用 归 约 计 算API。
函 数 原 型
mask逐bit模 式
Texttemplate <typename T, bool isSetMask = true> __aicore__ inline void PairReduceSum(const LocalTensor<T>& dst, const LocalTensor<T>& src, const int32_t repeatTime, const uint64_t mask[], const int32_t dstRepStride, const int32_t srcBlkStride, const int32_t srcRepStride)mask连 续 模 式
Texttemplate <typename T, bool isSetMask = true> __aicore__ inline void PairReduceSum(const LocalTensor<T>& dst, const LocalTensor<T>& src, const int32_t repeatTime, const int32_t mask, const int32_t dstRepStride, const int32_t srcBlkStride, const int32_t srcRepStride)
参 数 说 明
表 1 模 板 参 数 说 明
Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:half/float | |
|
表 2 参 数 说 明
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 | ||
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 | ||
关 于 该 参 数 的 具 体 描 述 请 参 考高 维 切 分API。 | ||
mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。
| ||
目 的 操 作 数 相 邻 迭 代 间 的 地 址 步 长。以 一 个repeat归 约 后 的 长 度 为 单 位。PairReduce完 成 后,一 个repeat的 长 度 减 半。即 单 位 为128Byte。 | ||
单 次 迭 代 内datablock的 地 址 步 长。详 细 说 明 请 参 考dataBlockStride。 | ||
源 操 作 数 相 邻 迭 代 间 的 地 址 步 长,即 源 操 作 数 每 次 迭 代 跳 过 的datablock数 目。详 细 说 明 请 参 考repeatStride。 |
返 回 值 说 明
无
约 束 说 明
- 操 作 数 地 址 对 齐 要 求 请 参 见通 用 地 址 对 齐 约 束。
- 如 果 两 两 相 加 的 两 个 元 素mask位 未 配 置(即 当 前 两 个 元 素 不 参 与 运 算),对 于Atlas 200I/500 A2 推 理 产 品,对 应 的 目 的 操 作 数 中 的 值 会 置 为0,对 于 其 他 产 品 型 号,对 应 的 目 的 操 作 数 中 的 值 不 会 变 化。比 如float场 景 下 对64个 数 使 用 当 前 指 令,mask配 置 为62,表 示 最 后 两 个 元 素 不 参 与 运 算,对 于Atlas 200I/500 A2 推 理 产 品,目 的 操 作 数 中 最 后 一 个 值 会 返 回0;对 于 其 他 产 品 型 号,目 的 操 作 数 中 最 后 一 个 值 不 会 变 化。
调 用 示 例
本 样 例 中 只 展 示Compute流 程 中 的 部 分 代 码。完 整 样 例 可 参 考PairReduceSum样 例。
PairReduceSum-tensor高 维 切 分 计 算 样 例-mask连 续 模 式
Text// 设 定mask为 最 多 的128个 全 部 元 素 参 与 计 算 int32_t mask = 256/sizeof(half); // 每 个repeat128个 元 素,一 共128个 元 素。 int repeat = 1; // dstLocal: 目 的 操 作 数tensor // srcLocal: 源 操 作 数tensor // srcBlkStride = 1, 在 一 个repeat中,block间 没 有 空 隙。 // dstRepStride = 1, srcRepStride = 8, repeat间 没 有 空 隙。 AscendC::PairReduceSum<half>(dstLocal, srcLocal, repeat, mask, 1, 1, 8);PairReduceSum-tensor高 维 切 分 计 算 样 例-mask逐bit模 式
Text// 设 定mask为 最 多 的128个 全 部 元 素 参 与 计 算 uint64_t mask[2] = { UINT64_MAX, UINT64_MAX }; // 每 个repeat128个 元 素,一 共128个 元 素。 int repeat = 1; // dstLocal: 目 的 操 作 数tensor // srcLocal: 源 操 作 数tensor // srcBlkStride = 1, 在 一 个repeat中,block间 没 有 空 隙。 // dstRepStride = 1, srcRepStride = 8, repeat间 没 有 空 隙。 AscendC::PairReduceSum<half>(dstLocal, srcLocal, repeat, mask, 1, 1, 8);示 例 结 果
Text输 入 数 据src_gm: [1, 1, 1, -1, 2, 2, -1, 2, 3, 3, 3, -1, 4, 4, -2, 4, .... ] 输 出 数 据dst_gm: [2, 0, 4, 1, 6, 2, 8, 2, .... ]