BilinearInterpolation(ISASI)
产 品 支 持 情 况
功 能 说 明
功 能 分 为 水 平 迭 代 和 垂 直 迭 代。每 个 水 平 迭 代 顺 序 地 从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模 式:
Texttemplate <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连 续 模 式:
Texttemplate <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 模 板 参 数 说 明
Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:half。 |
表 2 参 数 说 明
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 | ||
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 | ||
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 | ||
mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。
| ||
| ||
垂 直 迭 代 间,目 的 操 作 数 地 址 偏 移 量,以 元 素 为 单 位,取 值 范 围 为[128, 65535),vROffset * sizeof(T)需 要 保 证32字 节 对 齐 。 | ||
Ascend 950PR/Ascend 950DT,不 需 要 分 配 临 时 空 间。 |
返 回 值 说 明
无
约 束 说 明
操 作 数 地 址 对 齐 要 求 请 参 见通 用 地 址 对 齐 约 束。
src0、src1、src0Offset之 间 不 允 许 地 址 重 叠,且 两 个 垂 直repeat的 目 的 地 址 之 间 不 允 许 地 址 重 叠。
调 用 示 例
更 多 样 例 可 参 考LINK。
接 口 样 例-mask连 续 模 式
TextAscendC::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模 式
TextAscendC::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);
结 果 示 例 如 下:
输 入 数 据(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]