VectorPadding(ISASI)
产 品 支 持 情 况
功 能 说 明
根 据padMode(pad模 式)与padSide(pad方 向)对 源 操 作 数 按 照datablock进 行 填 充 操 作。
假 设 源 操 作 数 的 一 个datablock有16个 数,datablock[0:15]=a~p:
padSide==false:从datablock的 左 边 开 始 填 充,即datablock的 起 始 值 方 向(a->p)
padSide==true:从datablock的 右 边 开 始 填 充,即datablock的 结 束 值 方 向(p->a)
padMode==0:用 邻 近 数 作 为 填 充 值,例:aaa|abc(padSide=false)、nop|ppp(padSide=true)
padMode==1:用 邻 近datablock值 对 称 填 充,例:cba|abc(padSide=false)、nop|pon(padSide=true)
padMode==2:用 邻 近datablock值 填 充,偏 移 一 个 数,做 对 称 填 充,例:
- padSide=false:xcb|abc,xcb被 填 充,填 充 过 程 描 述:a被 丢 弃,对 称 填 充,x处 填 充0
- padSide=true:nop|onx,onx被 填 充,填 充 过 程 描 述:p被 丢 弃,对 称 填 充,x处 填 充0
函 数 原 型
tensor前n个 数 据 计 算
Texttemplate <typename T> __aicore__ inline void VectorPadding(const LocalTensor<T>& dst, const LocalTensor<T>& src, const uint8_t padMode, const bool padSide, const uint32_t count)tensor高 维 切 分 计 算
mask逐bit模 式
Texttemplate <typename T, bool isSetMask = true> __aicore__ inline void VectorPadding(const LocalTensor<T>& dst, const LocalTensor<T>& src, const uint8_t padMode, const bool padSide, const uint64_t mask[], const uint8_t repeatTime, const UnaryRepeatParams& repeatParams)mask连 续 模 式
Texttemplate <typename T, bool isSetMask = true> __aicore__ inline void VectorPadding(const LocalTensor<T>& dst, const LocalTensor<T>& src, const uint8_t padMode, const bool padSide, const uint64_t mask, const uint8_t repeatTime, const UnaryRepeatParams& repeatParams)
参 数 说 明
表 1 模 板 参 数 说 明
|
表 2 参 数 说 明
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 | ||
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 | ||
padding模 式,类 型 为uint8_t,取 值 范 围:[0,2]。
| ||
| ||
mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。
| ||
重 复 迭 代 次 数。矢 量 计 算 单 元,每 次 读 取 连 续 的256Bytes数 据 进 行 计 算,为 完 成 对 输 入 数 据 的 处 理,必 须 通 过 多 次 迭 代(repeat)才 能 完 成 所 有 数 据 的 读 取 与 计 算。repeatTime表 示 迭 代 的 次 数。 关 于 该 参 数 的 具 体 描 述 请 参 考高 维 切 分API。 | ||
控 制 操 作 数 地 址 步 长 的 参 数。UnaryRepeatParams类 型,包 含 操 作 数 相 邻 迭 代 间 相 同DataBlock的 地 址 步 长,操 作 数 同 一 迭 代 内 不 同DataBlock的 地 址 步 长 等 参 数。 相 邻 迭 代 间 的 地 址 步 长 参 数 说 明 请 参 考repeatStride;同 一 迭 代 内DataBlock的 地 址 步 长 参 数 说 明 请 参 考dataBlockStride。 |
返 回 值 说 明
无
约 束 说 明
操 作 数 地 址 对 齐 要 求 请 参 见通 用 地 址 对 齐 约 束。
mask仅 控 制 目 的 操 作 数 中 的 哪 些 元 素 要 写 入,源 操 作 数 的 读 取 与mask无 关。
count表 示 写 入 目 的 操 作 数 中 的 元 素 总 数,源 操 作 数 的 读 取 与count无 关。
调 用 示 例
样 例 的srcLocal和dstLocal均 为half类 型。
更 多 样 例 可 参 考LINK。
tensor高 维 切 分 计 算 样 例-mask连 续 模 式
Textuint64_t mask = 256 / sizeof(half); uint8_t padMode = 0; bool padSide = false; // repeatTime = 4, 128 elements one repeat, 512 elements total // dstBlkStride, srcBlkStride = 1, no gap between blocks in one repeat // dstRepStride, srcRepStride = 8, no gap between repeats AscendC::VectorPadding(dstLocal, srcLocal, padMode, padSide, mask, 4, { 1, 1, 8, 8 });tensor高 维 切 分 计 算 样 例-mask逐bit模 式
Textuint64_t mask[2] = { UINT64_MAX, UINT64_MAX }; uint8_t padMode = 0; bool padSide = false; // repeatTime = 4, 128 elements one repeat, 512 elements total // dstBlkStride, srcBlkStride = 1, no gap between blocks in one repeat // dstRepStride, srcRepStride = 8, no gap between repeats AscendC::VectorPadding(dstLocal, srcLocal, padMode, padSide, mask, 4, { 1, 1, 8, 8 });tensor前n个 数 据 计 算 样 例
Textuint8_t padMode = 0; bool padSide = false; AscendC::VectorPadding(dstLocal, srcLocal, padMode, padSide, 512);
结 果 示 例 如 下:
// 以srcLocal的 一 个datablock的 值 为 例,有16个 数
输 入 数 据(srcLocal): [6.938 -8.86 -0.2263 ... 1.971 1.778]
输 出 数 据(dstLocal):
[6.938 6.938 6.938 ... 6.938 6.938]