WholeReduceSum
产 品 支 持 情 况
功 能 说 明
每 个 迭 代 内 所 有 数 据 求 和。归 约 指 令 的 总 体 介 绍 请 参 考如 何 使 用 归 约 计 算API。
函 数 原 型
mask逐bit模 式
Texttemplate <typename T, bool isSetMask = true> __aicore__ inline void WholeReduceSum(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)mask连 续 模 式
Texttemplate <typename T, bool isSetMask = true> __aicore__ inline void WholeReduceSum(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)mask逐bit模 式
Texttemplate <typename T, bool isSetMask = true, typename U = T> __aicore__ inline void WholeReduceSum(const LocalTensor<U>& 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)mask连 续 模 式
Texttemplate <typename T, bool isSetMask = true, typename U = T> __aicore__ inline void WholeReduceSum(const LocalTensor<U>& 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)
参 数 说 明
表 1 模 板 参 数 说 明
|
表 2 参 数 说 明
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 LocalTensor的 起 始 地 址 需 要 保 证2字 节 对 齐(针 对half数 据 类 型),4字 节 对 齐(针 对float数 据 类 型)。 Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:uint32_t/int32_t/half/float | ||
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 LocalTensor的 起 始 地 址 需 要32字 节 对 齐。 源 操 作 数 的 数 据 类 型 需 要 与 目 的 操 作 数 保 持 一 致。 针 对Ascend 950PR/Ascend 950DT:src数 据 类 型uint16_t和int16_t时,dst数 据 类 型 分 别 为uint32_t和int32_t,其 他 情 况 下,dst数 据 类 型 均 与src数 据 类 型 相 同。 Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:uint16_t/int16_t/uint32_t/int32_t/half/float | ||
mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。
| ||
关 于 该 参 数 的 具 体 描 述 请 参 考高 维 切 分API。 | ||
目 的 操 作 数 相 邻 迭 代 间 的 地 址 步 长。以 一 个repeat归 约 后 的 长 度 为 单 位。 | ||
单 次 迭 代 内datablock的 地 址 步 长。详 细 说 明 请 参 考dataBlockStride。 | ||
源 操 作 数 相 邻 迭 代 间 的 地 址 步 长,即 源 操 作 数 每 次 迭 代 跳 过 的DataBlock数 目。详 细 说 明 请 参 考repeatStride。 |
返 回 值 说 明
无
约 束 说 明
操 作 数 地 址 对 齐 要 求 请 参 见通 用 地 址 对 齐 约 束。
操 作 数 地 址 重 叠 约 束 请 参 考通 用 地 址 重 叠 约 束。
对 于WholeReduceSum,其 内 部 的 相 加 方 式 采 用 二 叉 树 方 式,两 两 相 加:
假 设 源 操 作 数 为128个half类 型 的 数 据[data0,data1,data2...data127],一 个repeat可 以 计 算 完,计 算 过 程 如 下。
- data0和data1相 加 得 到data00,data2和data3相 加 得 到data01...data124和data125相 加 得 到data62,data126和data127相 加 得 到data63;
- data00和data01相 加 得 到data000,data02和data03相 加 得 到data001...data62和data63相 加 得 到data031;
- 以 此 类 推,得 到 目 的 操 作 数 为1个half类 型 的 数 据[data]。
需 要 注 意 的 是 两 两 相 加 的 计 算 过 程 中,计 算 结 果 大 于65504时 结 果 保 存 为65504。例 如 源 操 作 数 为[60000,60000,-30000,100],首 先60000+60000溢 出,结 果 为65504,第 二 步 计 算-30000+100=-29900,第 四 步 计 算65504-29900=35604。
调 用 示 例
完 整 样 例 可 参 考WholeReduce系 列 归 约 指 令 样 例。
tensor高 维 切 分 计 算 样 例-mask连 续 模 式
Text// dstLocal,srcLocal均 为half类 型,srcLocal的 计 算 数 据 量 为512,连 续 排 布,计 算 结 果 也 需 要 连 续 排 布,使 用tensor高 维 切 分 计 算 接 口,设 定mask为 最 多 的128个 全 部 元 素 参 与 计 算 // 根 据 以 上 信 息,推 断 出repeatTime为4,dstRepStride为1,srcBlkStride为1,srcRepStride为8 AscendC::WholeReduceSum<half>(dstLocal, srcLocal, 128, 4, 1, 1, 8);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 AscendC::WholeReduceSum<half>(dstLocal, srcLocal, mask, 4, 1, 1, 8);针 对 不 同 场 景 合 理 使 用 归 约 指 令 可 以 带 来 性 能 提 升,相 关 介 绍 请 参 考选 择 低 延 迟 指 令,优 化 归 约 操 作 性 能,具 体 样 例 请 参 考ReduceCustom。