Skip to content
版 本

BlockReduceMin

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

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

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

Atlas 200I/500 A2 推 理 产 品

Atlas 推 理 系 列 产 品AI Core

Atlas 推 理 系 列 产 品Vector Core

x

Atlas 训 练 系 列 产 品

功 能 说 明

对 每 个datablock内 所 有 元 素 求 最 小 值。归 约 指 令 的 总 体 介 绍 请 参 考如 何 使 用 归 约 计 算API

函 数 原 型

  • mask参 数 逐bit模 式

    Text
    template <typename T, bool isSetMask = true>
    __aicore__ inline void BlockReduceMin(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参 数 连 续 模 式

    Text
    template <typename T, bool isSetMask = true>
    __aicore__ inline void BlockReduceMin(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 模 板 参 数 说 明

参 数 名

描 述

T

操 作 数 数 据 类 型。

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

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

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

Atlas 200I/500 A2 推 理 产 品,支 持 的 数 据 类 型 为:half/float

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

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

isSetMask

是 否 在 接 口 内 部 设 置mask。

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

表 2 参 数 说 明

参 数 名 称

输 入/输 出

含 义

dst

输 出

目 的 操 作 数。

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

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

src

输 入

源 操 作 数。

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

LocalTensor的 起 始 地 址 需 要32字 节 对 齐。

repeatTime

输 入

迭 代 次 数。取 值 范 围 为[0, 255]。

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

mask/mask[]

输 入

mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。

  • 逐bit模 式:可 以 按 位 控 制 哪 些 元 素 参 与 计 算,bit位 的 值 为1表 示 参 与 计 算,0表 示 不 参 与。

    mask为 数 组 形 式,数 组 长 度 和 数 组 元 素 的 取 值 范 围 和 操 作 数 的 数 据 类 型 有 关。当 操 作 数 为16位 时,数 组 长 度 为2,mask[0]、mask[1]∈[0, 264-1]并 且 不 同 时 为0;当 操 作 数 为32位 时,数 组 长 度 为1,mask[0]∈(0, 264-1];当 操 作 数 为64位 时,数 组 长 度 为1,mask[0]∈(0, 232-1]。

    例 如,mask=[8, 0],8=0b1000,表 示 仅 第4个 元 素 参 与 计 算。

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

dstRepStride

输 入

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

每 个repeat(8个datablock)归 约 后,得 到8个 元 素,所 以 源 操 作 数 类 型 为half类 型 时,RepStride单 位 为16Byte;源 操 作 数 类 型 为float类 型 时,RepStride单 位 为32Byte。

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

srcBlkStride

输 入

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

srcRepStride

输 入

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

返 回 值 说 明

约 束 说 明

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

  • 为 了 节 省 地 址 空 间,您 可 以 定 义 一 个Tensor,供 源 操 作 数 与 目 的 操 作 数 同 时 使 用(即 地 址 重 叠),需 要 注 意 计 算 后 的 目 的 操 作 数 数 据 不 能 覆 盖 未 参 与 计 算 的 源 操 作 数,需 要 谨 慎 使 用。

  • 对 于Atlas 200I/500 A2 推 理 产 品,若 配 置 的mask/mask[]参 数 后,存 在 某 个datablock里 的 任 何 一 个 元 素 都 不 参 与 计 算,则 该datablock内 所 有 元 素 的 最 小 值 会 填 充 为inf返 回。比 如float场 景 下,当mask配 置 为32,即 只 计 算 前4个datablock,则 后 四 个datablock内 的 最 小 值 会 返 回inf。half场 景 下,最 小 值 会 返 回65504。

  • 针 对 不 同 场 景 合 理 使 用 归 约 指 令 可 以 带 来 性 能 提 升,相 关 介 绍 请 参 考选 择 低 延 迟 指 令,优 化 归 约 操 作 性 能,具 体 样 例 请 参 考ReduceCustom

调 用 示 例

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

  • BlockReduceMin-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::BlockReduceMin<half>(dstLocal, srcLocal, repeat, mask, 1, 1, 8);
    
  • BlockReduceMin-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::BlockReduceMin<half>(dstLocal, srcLocal, repeat, mask, 1, 1, 8);
    

结 果 示 例 如 下:

Text
输 入 数 据src_gm: 
[10, 10, 10, 10, 10, 10, 10, 10,
 10, 10, 10, 2, 10, 10, 10, 10,
 10, 10, 10, 10, 10, 10, 10, 10,
 10, 10, 10, 10, 10, -3, 10, 10,
 ...
 10, 10, 10, 10, 10, 10, 10, 10,
 10, 4, 10, 10, 10, 10, 10, 10,
]  

输 出 数 据dst_gm: 
[2, -3, ..., 4]

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