Skip to content
版 本

RepeatReduceSum

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品

Atlas 200I/500 A2 推 理 产 品

x

Atlas 推 理 系 列 产 品AI Core

Atlas 推 理 系 列 产 品Vector Core

x

Atlas 训 练 系 列 产 品

功 能 说 明

每 个repeat内 所 有 数 据 求 和。和WholeReduceSum接 口 相 比,不 支 持mask逐bit模 式。建 议 使 用 功 能 更 全 面 的WholeReduceSum接 口。

函 数 原 型

该 原 型 仅 支 持 如 下 产 品 型 号:

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品

Atlas 推 理 系 列 产 品AI Core

Atlas 训 练 系 列 产 品

Text
template <typename T, bool isSetMask = true>
__aicore__ inline void RepeatReduceSum(const LocalTensor<T>& dst, const LocalTensor<T>& src, const int32_t repeatTime, const int32_t mask, const int32_t dstBlkStride, const int32_t srcBlkStride, const int32_t dstRepStride, const int32_t srcRepStride);

该 原 型 仅 支 持 如 下 产 品 型 号:

Ascend 950PR/Ascend 950DT

Text
template <typename T, bool isSetMask = true, typename U = T>
__aicore__ inline void RepeatReduceSum(const LocalTensor<U>& dst, const LocalTensor<T>& src, const int32_t repeatTime, const int32_t mask, const int32_t dstBlkStride, const int32_t srcBlkStride, const int32_t dstRepStride, const int32_t srcRepStride);

参 数 说 明

表 1 模 板 参 数 说 明

参 数 名

描 述

T

源 操 作 数 数 据 类 型。

U

目 的 操 作 数 数 据 类 型。

isSetMask

是 否 在 接 口 内 部 设 置mask。

  • true,表 示 在 接 口 内 部 设 置mask。
  • false,表 示 在 接 口 外 部 设 置mask,开 发 者 需 要 使 用SetVectorMask接 口 设 置mask值。这 种 模 式 下,接 口 入 参 中 的mask值 设 置 为 占 位 符MASK_PLACEHOLDER,用 于 占 位,无 实 际 含 义。

表 2 参 数 说 明

参 数 名 称

输 入/输 出

含 义

dst

输 出

目 的 操 作 数。

类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。

LocalTensor的 起 始 地 址 需 要 保 证2字 节 对 齐(针 对half数 据 类 型),4字 节 对 齐(针 对float数 据 类 型)。

Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:uint32_t/int32_t/half/float

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品,支 持 的 数 据 类 型 为:half/float

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品,支 持 的 数 据 类 型 为:half/float

Atlas 推 理 系 列 产 品AI Core,支 持 的 数 据 类 型 为:half/float

Atlas 训 练 系 列 产 品,支 持 的 数 据 类 型 为:half/float

src

输 入

源 操 作 数。

类 型 为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

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品,支 持 的 数 据 类 型 为:half/float

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品,支 持 的 数 据 类 型 为:half/float

Atlas 推 理 系 列 产 品AI Core,支 持 的 数 据 类 型 为:half/float

Atlas 训 练 系 列 产 品,支 持 的 数 据 类 型 为:half/float

repeatTime

输 入

重 复 迭 代 次 数。取 值 范 围 为[0, 255]。矢 量 计 算 单 元,每 次 读 取 连 续 的256Bytes数 据 进 行 计 算,为 完 成 对 输 入 数 据 的 处 理,必 须 通 过 多 次 迭 代 才 能 完 成 所 有 数 据 的 读 取 与 计 算。repeatTime表 示 迭 代 的 次 数。

关 于 该 参 数 的 具 体 描 述 请 参 考高 维 切 分API

mask

输 入

用 于 控 制 每 次 迭 代 内 连 续 的 多 少 个 元 素 参 与 计 算。取 值 范 围 和 操 作 数 的 数 据 类 型 有 关,数 据 类 型 不 同,每 次 迭 代 内 能 够 处 理 的 元 素 个 数 最 大 值 不 同。当 操 作 数 为16位 时,mask∈[1, 128];当 操 作 数 为32位 时,mask∈[1, 64]。

dstBlkStride

输 入

此 参 数 无 效,可 以 配 置 任 意 值。

srcBlkStride

输 入

单 次 迭 代 内datablock的 地 址 步 长。详 细 说 明 请 参 考dataBlockStride

dstRepStride

输 入

目 的 操 作 数 相 邻 迭 代 间 的 地 址 步 长。以 一 个repeat归 约 后 的 长 度 为 单 位。

单 位 为dst数 据 类 型 所 占 字 节 长 度。比 如 当dst为half时,单 位 为2Bytes。

注 意,此 参 数 值Atlas 训 练 系 列 产 品不 支 持 配 置0。

srcRepStride

输 入

源 操 作 数 相 邻 迭 代 间 的 地 址 步 长,即 源 操 作 数 每 次 迭 代 跳 过 的datablock数 目。详 细 说 明 请 参 考repeatStride

返 回 值 说 明

约 束 说 明

  • 操 作 数 地 址 对 齐 要 求 请 参 见通 用 地 址 对 齐 约 束

  • 操 作 数 地 址 重 叠 约 束 请 参 考通 用 地 址 重 叠 约 束

  • 对 于RepeatReduceSum,其 内 部 的 相 加 方 式 采 用 二 叉 树 方 式,两 两 相 加:

    假 设 源 操 作 数 为128个half类 型 的 数 据[data0,data1,data2...data127],一 个repeat可 以 计 算 完,计 算 过 程 如 下。

    1. data0和data1相 加 得 到data00,data2和data3相 加 得 到data01...data124和data125相 加 得 到data62,data126和data127相 加 得 到data63;
    2. data00和data01相 加 得 到data000,data02和data03相 加 得 到data001...data62和data63相 加 得 到data031;
    3. 以 此 类 推,得 到 目 的 操 作 数 为1个half类 型 的 数 据[data]。

    需 要 注 意 的 是 两 两 相 加 的 计 算 过 程 中,计 算 结 果 大 于65504时 结 果 保 存 为65504。例 如 源 操 作 数 为[60000,60000,-30000,100],首 先60000+60000溢 出,结 果 为65504,第 二 步 计 算-30000+100=-29900,第 四 步 计 算65504-29900=35604。

调 用 示 例

本 样 例 中 只 展 示Compute流 程 中 的 部 分 代 码。完 整 样 例 可 参 考WholeReduce系 列 归 约 指 令 样 例

Text
// dstLocal,srcLocal均 为half类 型,srcLocal的 计 算 数 据 量 为512,连 续 排 布,计 算 结 果 也 需 要 连 续 排 布,使 用tensor高 维 切 分 计 算 接 口,设 定mask为 最 多 的128个 全 部 元 素 参 与 计 算
// 根 据 以 上 信 息,推 断 出repeat为4,dstRepStride为1,srcBlkStride为1,srcRepStride为8,dstBlkStride无 效,此 处 配 置0,因 此 接 口 示 例 为:
int mask = 128; // 参 与 计 算 的 有 效 数 字
int repeat = 4; // repeat = 512 / mask
AscendC::RepeatReduceSum<half>(dstLocal, srcLocal, repeat, mask, 0, 1, 1, 8);

结 果 示 例 如 下:

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 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 
 ...
 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 
]
输 出 数 据(dst_gm):
[128 256 ... 384]

免 责 声 明:本 站 内 容 由 asc-devkit 仓 master 分 支 自 动 编 译 生 成,属 于 持 续 开 发 版 本,可 能 存 在 缺 陷,仅 供 预 览 与 参 考。如 需 稳 定 及 商 用 资 料,请 查 阅 官 方 昇 腾 社 区