Skip to content
版 本

BilinearInterpolation(ISASI)

产 品 支 持 情 况

产 品

是 否 支 持

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

功 能 说 明

功 能 分 为 水 平 迭 代 和 垂 直 迭 代。每 个 水 平 迭 代 顺 序 地 从src0Offset读 取8个 偏 移 值,表 示src0的 偏 移,每 个 偏 移 值 指 向src0的 一 个DataBlock的 起 始 地 址,如 果repeatMode=false,从src1中 取 一 个 值,与src0中8个DataBlock中 每 个 值 进 行 乘 操 作;如 果repeatMode=true,从src1中 取8个 值,按 顺 序 与src0中8个DataBlock中 的 值 进 行 乘 操 作,最 后 当 前 迭 代 的dst结 果 与 前 一 个dst结 果 按DataBlock进 行 累 加,存 入 目 的 地 址,在 同 一 个 水 平 迭 代 内dst地 址 不 变。然 后 进 行 垂 直 迭 代,垂 直 迭 代 的dst起 始 地 址 为 上 一 轮 垂 直 迭 代 的dst起 始 地 址 加 上vROffset,本 轮 垂 直 迭 代 占 用dst空 间 为dst起 始 地 址 之 后 的8个DataBlock,每 轮 垂 直 迭 代 进 行hRepeat次 水 平 迭 代。

函 数 原 型

  • mask逐bit模 式:

    Text
    template <typename T>
    __aicore__ inline void BilinearInterpolation(const LocalTensor<T>& dst, const LocalTensor<T>& src0, const LocalTensor<uint32_t>& src0Offset, const LocalTensor<T>& src1, uint64_t mask[], uint8_t hRepeat, bool repeatMode, uint16_t dstBlkStride, uint16_t vROffset, uint8_t vRepeat, const LocalTensor<uint8_t> &sharedTmpBuffer)
    
  • mask连 续 模 式:

    Text
    template <typename T>
    __aicore__ inline void BilinearInterpolation(const LocalTensor<T>& dst, const LocalTensor<T>& src0, const LocalTensor<uint32_t>& src0Offset, const LocalTensor<T>& src1, uint64_t mask, uint8_t hRepeat, bool repeatMode, uint16_t dstBlkStride, uint16_t vROffset, uint8_t vRepeat, const LocalTensor<uint8_t> &sharedTmpBuffer)
    

参 数 说 明

表 1 模 板 参 数 说 明

参 数 名

描 述

T

操 作 数 数 据 类 型。

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

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

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

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

表 2 参 数 说 明

参 数 名

输 入/输 出

描 述

dst

输 出

目 的 操 作 数。

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

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

src0、src1

输 入

源 操 作 数。

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

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

两 个 源 操 作 数 的 数 据 类 型 需 要 与 目 的 操 作 数 保 持 一 致。

src0Offset

输 入

源 操 作 数。

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

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

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]。

hRepeat

输 入

水 平 方 向 迭 代 次 数,取 值 范 围 为[1, 255]。

repeatMode

输 入

迭 代 模 式:

  • false:每 次 迭 代src0读 取 的8个datablock中 每 个 值 均 与src1的 单 个 数 值 相 乘。
  • true:每 次 迭 代src0的 每 个datablock分 别 与src1的1个 数 值 相 乘,共 消 耗8个block和8个elements。

dstBlkStride

输 入

单 次 迭 代 内,目 的 操 作 数 不 同DataBlock间 地 址 步 长,以32B为 单 位。

vROffset

输 入

垂 直 迭 代 间,目 的 操 作 数 地 址 偏 移 量,以 元 素 为 单 位,取 值 范 围 为[128, 65535),vROffset * sizeof(T)需 要 保 证32字 节 对 齐 。

vRepeat

输 入

垂 直 方 向 迭 代 次 数,取 值 范 围 为[1, 255]。

sharedTmpBuffer

输 入

临 时 空 间。

Ascend 950PR/Ascend 950DT,不 需 要 分 配 临 时 空 间。

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品,需 要 保 证 至 少 分 配 了src0.GetSize() * 32 + src1.GetSize() * 32字 节 的 空 间。

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品,需 要 保 证 至 少 分 配 了src0.GetSize() * 32 + src1.GetSize() * 32字 节 的 空 间。

Atlas 推 理 系 列 产 品AI Core,需 要 保 证 至 少 分 配 了src0OffsetLocal.GetSize() * sizeof(uint32_t)字 节 的 空 间。

返 回 值 说 明

约 束 说 明

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

  • src0、src1、src0Offset之 间 不 允 许 地 址 重 叠,且 两 个 垂 直repeat的 目 的 地 址 之 间 不 允 许 地 址 重 叠。

调 用 示 例

更 多 样 例 可 参 考LINK

  • 接 口 样 例-mask连 续 模 式

    Text
    AscendC::LocalTensor<half> dstLocal, src0Local, src1Local;
    AscendC::LocalTensor<uint32_t> src0OffsetLocal;
    AscendC::LocalTensor<uint8_t> tmpLocal;
    uint64_t mask = 128;        // mask连 续 模 式
    uint8_t hRepeat = 2;        // 水 平 迭 代2次
    bool repeatMode = false;    // 迭 代 模 式
    uint16_t dstBlkStride = 1;  // 单 次 迭 代 内 数 据 连 续 写 入
    uint16_t vROffset = 128;    // 相 邻 迭 代 间 数 据 连 续 写 入
    uint8_t vRepeat = 2;        // 垂 直 迭 代2次
    
    AscendC::BilinearInterpolation(dstLocal, src0Local, src0OffsetLocal, src1Local, mask, hRepeat, repeatMode,
                dstBlkStride, vROffset, vRepeat, tmpLocal);
    
  • 接 口 样 例-mask逐bit模 式

    Text
    AscendC::LocalTensor<half> dstLocal, src0Local, src1Local;
    AscendC::LocalTensor<uint32_t> src0OffsetLocal;
    AscendC::LocalTensor<uint8_t> tmpLocal;
    uint64_t mask[2] = { UINT64_MAX, UINT64_MAX }; // mask逐bit模 式
    uint8_t hRepeat = 2;        // 水 平 迭 代2次
    bool repeatMode = false;    // 迭 代 模 式
    uint16_t dstBlkStride = 1;  // 单 次 迭 代 内 数 据 连 续 写 入
    uint16_t vROffset = 128;    // 相 邻 迭 代 间 数 据 连 续 写 入
    uint8_t vRepeat = 2;        // 垂 直 迭 代2次
    
    AscendC::BilinearInterpolation(dstLocal, src0Local, src0OffsetLocal, src1Local, mask, hRepeat, repeatMode,
                dstBlkStride, vROffset, vRepeat, tmpLocal);
    

结 果 示 例 如 下:

Text
输 入 数 据(src0Local,half): [1,2,3,...,512]
输 入 数 据(src1Local,half): [2,3,4,...,17]
输 入 数 据(src0OffsetLocal,uint32_t): [0,32,64,...,992]
输 出 数 据(dstLocal,half): [389, 394, 399, 404, ...,4096]

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