Skip to content
版 本

Brcb

产 品 支 持 情 况

产 品

是 否 支 持

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 训 练 系 列 产 品

x

Kirin X90

Kirin 9030

功 能 说 明

头 文 件 路 径 为:"basic_api/kernel_operator_vec_brcb_intf.h"

Brcb接 口 对 输 入 数 据,每 一 次 取 输 入 张 量 中 的8个 数 进 行 填 充 操 作,将 每 个 数 填 充 到 结 果 张 量 的 一 个DataBlock(32字 节)中。

接 口 计 算 原 理 和 参 考 伪 代 码 如 下:

Python
import numpy as np

def Brcb(src, dst, repeatTime, repeatParams):
    outputType = np.dtype("uint16")
    oneDataBlockSize = 32
    if repeatParams.dstBlkStride == 0:
        repeatParams.dstBlkStride = 1
    
    for i in range(repeatTime): 
        for j in range(8):
            srcEleIndex = i * 8 + j
            dstBlockStartIndex = (oneDataBlockSize * i * repeatParams.dstRepStride + oneDataBlockSize * j * repeatParams.dstBlkStride) // outputType.itemsize
            dstBlockEndIndex = (oneDataBlockSize * i * repeatParams.dstRepStride + oneDataBlockSize * j * repeatParams.dstBlkStride + oneDataBlockSize) // outputType.itemsize
            dst[dstBlockStartIndex : dstBlockEndIndex] = src[srcEleIndex]

函 数 原 型

C++
template <typename T>
__aicore__ inline void Brcb(const LocalTensor<T>& dst, const LocalTensor<T>& src, const uint8_t repeatTime, const BrcbRepeatParams& repeatParams)

参 数 说 明

表 1 模 板 参 数 说 明

参 数 名 称描 述
T操 作 数 数 据 类 型。

表 2 接 口 参 数 说 明

参 数 名 称输 入/输 出含 义
dst输 出目 的 操 作 数,类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT(存 储 位 置 为Unified Buffer)。
LocalTensor的 起 始 地 址 需 要 按 照32字 节 对 齐。
src输 入源 操 作 数,类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT(存 储 位 置 为Unified Buffer)。
需 要 按 照32字 节 对 齐。
注:每 一 次 迭 代 读 取src中 的8个 元 素,所 以src的 元 素 个 数 不 小 于8 * repeatTime。
repeatTime输 入指 令 迭 代 次 数,每 次 迭 代 完 成8个DataBlock的 数 据 收 集,取 值 范 围:repeatTime∈[0,255]。
repeatParams输 入用 于 控 制 指 令 迭 代 的 相 关 参 数,类 型 为BrcbRepeatParms。
BrcbRepeatParams参 数 说 明 请 参 考表3 BrcbRepeatParams结 构 体 参 数 说 明

表 3 BrcbRepeatParams结 构 体 参 数 说 明

参 数 名 称含 义
dstBlkStride单 次 迭 代 内,矢 量 目 的 操 作 数 不 同DataBlock间 地 址 步 长,单 位 为DataBlock。
dstRepStride相 邻 迭 代 间,矢 量 目 的 操 作 数 相 同DataBlock地 址 步 长,单 位 为DataBlock。
blockNumber注:预 留 的 扩 展 参 数,当 前 因 后 续 架 构 升 级,该 参 数 已 废 弃,不 对 其 进 行 业 务 处 理。
src1BlkStride注:预 留 的 扩 展 参 数,当 前 因 后 续 架 构 升 级,该 参 数 已 废 弃,不 对 其 进 行 业 务 处 理。
src1RepStride注:预 留 的 扩 展 参 数,当 前 因 后 续 架 构 升 级,该 参 数 已 废 弃,不 对 其 进 行 业 务 处 理。
repeatStrideMode注:预 留 的 扩 展 参 数,当 前 因 后 续 架 构 升 级,该 参 数 已 废 弃,不 对 其 进 行 业 务 处 理。
strideSizeMode注:预 留 的 扩 展 参 数,当 前 因 后 续 架 构 升 级,该 参 数 已 废 弃,不 对 其 进 行 业 务 处 理。

数 据 类 型

Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:int8_t、uint8_t、int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float、int64_t、uint64_t。

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品,支 持 的 数 据 类 型 为:int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float。

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品,支 持 的 数 据 类 型 为:int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float。

Atlas 推 理 系 列 产 品AI Core,支 持 的 数 据 类 型 为:int16_t、uint16_t、half、int32_t、uint32_t、float。

Kirin X90,支 持 的 数 据 类 型 为:uint16_t、half、uint32_t、float。

Kirin 9030,支 持 的 数 据 类 型 为:uint16_t、half、uint32_t、float。

返 回 值 说 明

约 束 说 明

  • 操 作 数 地 址 对 齐 要 求 请 参 见通 用 地 址 对 齐 约 束
  • 不 支 持 源 操 作 数 与 目 的 操 作 数 使 用 同 一 块 内 存 地 址。
- repeatTime = 0表 示 不 会 执 行 计 算 操 作,不 会 对 目 的 操 作 数 进 行 写 入,该 接 口 将 被 视 为 NOP(空 操 作)。该 约 束 适 用 于 以 下 型 号。
  • Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品
  • Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品
  • BrcbRepeatParams结 构 体 内 参 数dstBlkStride不 支 持 设 置 为0,若 设 置 成0可 能 产 生 未 定 义 行 为。
- 针 对Atlas 推 理 系 列 产 品AI Core,使 用 时 需 要 预 留8KB的Unified Buffer空 间,作 为 接 口 的 临 时 数 据 存 放 区。

关 键 特 性 说 明

源 操 作 数 不 支 持Stride参 数 配 置,始 终 采 用 连 续 读。

目 的 操 作 数 连 续

利 用dstBlkStride和dstRepStride参 数 进 行 连 续 写,从 源 操 作 数 取8个half数 据 类 型 的 元 素 填 充 到 连 续 的8个DataBlock中。

dstBlkStride为1:说 明 同 一 迭 代 内 目 的 操 作 数 中 相 邻DataBlock地 址 连 续。

dstRepStride为8:说 明 相 邻 迭 代 间 目 的 操 作 数 中 首 尾DataBlock地 址 连 续。

图 1 目 的 操 作 数 连 续

目的操作数连续

目 的 操 作 数 非 连 续

利 用dstBlkStride和dstRepStride参 数 进 行 跳 写,从 源 操 作 数 取8个half数 据 类 型 的 元 素 填 充 到 非 连 续 的8个DataBlock中。

dstBlkStride为2:说 明 同 一 迭 代 内 目 的 操 作 数 中 相 邻DataBlock地 址 非 连 续(间 隔1个DataBlock)。

dstRepStride为16:说 明 相 邻 迭 代 间 目 的 操 作 数 中 首 尾DataBlock地 址 非 连 续(间 隔1个DataBlock)。

图 2 目 的 操 作 数 非 连 续

目的操作数非连续

调 用 示 例

本 样 例 中 只 展 示Compute流 程 中 的 部 分 代 码。如 果 您 需 要 运 行 样 例 代 码,请 将 该 代 码 段 拷 贝 并 替 换Brcb样 例完 整 样 例 模 板 中Compute函 数 的 部 分 代 码 即 可。

C++
// repeatTime = 2, 128 elements one repeat, 256 elements total
// srcLocal数 据 类 型 为half,dstLocal数 据 类 型 为half
// dstBlkStride = 1, no gap between blocks in one repeat
// dstRepStride = 8, no gap between repeats 
AscendC::Brcb(dstLocal, srcLocal, 2, {1,8});

结 果 示 例 如 下:

输 入 数 据(srcLocal):
[1 2 3 ... 16]
输 出 数 据(dstLocal)初 始 值:
[0. 0. 0. 0. 0. 0. ... 0.]
进 行Brcb计 算 后,输 出 数 据(dstLocal):
[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 ... 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16]

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