Axpy
产 品 支 持 情 况
功 能 说 明
头 文 件 路 径 为:"basic_api/kernel_operator_vec_ternary_scalar_intf.h"。
向 量 和 标 量 的 乘 积,并 将 乘 积 结 果 逐 元 素 加 到 的 输 出 向 量 上。计 算 公 式 如 下:
$$ dst_j = scalar × src_i + dst_i $$
函 数 原 型
tensor前n个 数 据 连 续 计 算
C++template <typename T, typename U> __aicore__ inline void Axpy(const LocalTensor<T>& dst, const LocalTensor<U>& src, const U& scalar, const int32_t count)tensor高 维 切 分 计 算
mask逐bit模 式
C++template <typename T, typename U, bool isSetMask = true> __aicore__ inline void Axpy(const LocalTensor<T>& dst, const LocalTensor<U>& src, const U& scalarValue, uint64_t mask[], const uint8_t repeatTime, const UnaryRepeatParams& repeatParams)mask连 续 模 式
C++template <typename T, typename U, bool isSetMask = true> __aicore__ inline void Axpy(const LocalTensor<T>& dst, const LocalTensor<U>& src, const U& scalarValue, uint64_t mask, const uint8_t repeatTime, const UnaryRepeatParams& repeatParams)
参 数 说 明
表 模 板 参 数 说 明
| 参 数 名 | 描 述 |
|---|---|
| T | 目 的 操 作 数 数 据 类 型。 |
| U | 源 操 作 数 数 据 类 型。 |
| isSetMask | 是 否 在 接 口 内 部 设 置mask。 • true,表 示 在 接 口 内 部 设 置mask。 • false,表 示 在 接 口 外 部 设 置mask,开 发 者 需 要 使 用SetVectorMask接 口 设 置mask值。这 种 模 式 下,接 口 入 参 中 的mask值 设 置 为 占 位 符MASK_PLACEHOLDER,用 于 占 位,无 实 际 含 义。 |
表 参 数 说 明
| 参 数 名 称 | 输 入/输 出 | 说 明 |
|---|---|---|
| dst | 输 出 | 目 的 操 作 数。 类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 |
| src | 输 入 | 源 操 作 数。 类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 |
| scalarValue | 输 入 | 源 操 作 数,scalar标 量。scalarValue的 数 据 类 型 需 要 和src保 持 一 致。 |
| count | 输 入 | 参 与 计 算 的 元 素 个 数。关 于 该 参 数 的 具 体 说 明 请 参 考连 续 计 算。 |
| mask/mask[] | 输 入 | mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。 设 置 详 见掩 码 操 作 |
| repeatTime | 输 入 | 重 复 迭 代 次 数。 矢 量 计 算 单 元,每 次 读 取 连 续 的256字 节 数 据 进 行 计 算,为 完 成 对 输 入 数 据 的 处 理,必 须 通 过 多 次 迭 代(repeat)才 能 完 成 所 有 数 据 的 读 取 与 计 算。repeatTime表 示 迭 代 的 次 数。 关 于 该 参 数 的 具 体 描 述 请 参 考高 维 切 分API。 |
| repeatParams | 输 入 | 控 制 操 作 数 地 址 步 长 的 参 数。UnaryRepeatParams类 型,包 含 操 作 数 相 邻 迭 代 间 相 同DataBlock的 地 址 步 长,操 作 数 同 一 迭 代 内 不 同DataBlock的 地 址 步 长 等 参 数。 相 邻 迭 代 间 的 地 址 步 长 参 数 说 明 请 参 考repeatStride;同 一 迭 代 内DataBlock的 地 址 步 长 参 数 说 明 请 参 考dataBlockStride。 |
数 据 类 型
PAR列 表 示 矢 量 计 算 单 元 一 个 迭 代 能 够 处 理 的 元 素 个 数。
表 Ascend 950PR/Ascend 950DT支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | scalar数 据 类 型 | dst数 据 类 型 | PAR |
|---|---|---|---|
| half | half | half | 128 |
| float | float | float | 64 |
| half | half | float | 64 |
| int64_t | int64_t | int64_t | 64 |
| uint64_t | uint64_t | uint64_t | 64 |
| bfloat16_t | bfloat16_t | bfloat16_t | 128 |
表 Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品 支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | scalar数 据 类 型 | dst数 据 类 型 | PAR |
|---|---|---|---|
| half | half | half | 128 |
| float | float | float | 64 |
| half | half | float | 64 |
表 Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品 支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | scalar数 据 类 型 | dst数 据 类 型 | PAR |
|---|---|---|---|
| half | half | half | 128 |
| float | float | float | 64 |
| half | half | float | 64 |
表 Atlas 200I/500 A2 推 理 产 品 支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | scalar数 据 类 型 | dst数 据 类 型 | PAR |
|---|---|---|---|
| half | half | half | 128 |
| float | float | float | 64 |
| half | half | float | 64 |
表 Atlas 推 理 系 列 产 品AI Core支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | scalar数 据 类 型 | dst数 据 类 型 | PAR |
|---|---|---|---|
| half | half | half | 128 |
| float | float | float | 64 |
| half | half | float | 64 |
表 Atlas 训 练 系 列 产 品 支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | scalar数 据 类 型 | dst数 据 类 型 | PAR |
|---|---|---|---|
| half | half | half | 128 |
| float | float | float | 64 |
| half | half | float | 64 |
表 Kirin X90支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | scalar数 据 类 型 | dst数 据 类 型 | PAR |
|---|---|---|---|
| half | half | half | 128 |
| float | float | float | 64 |
| half | half | float | 64 |
表 Kirin 9030支 持 的 数 据 类 型 组 合 情 况
| src数 据 类 型 | scalar数 据 类 型 | dst数 据 类 型 | PAR |
|---|---|---|---|
| half | half | half | 128 |
| float | float | float | 64 |
| half | half | float | 64 |
返 回 值 说 明
无
约 束 说 明
- 地 址 对 齐 约 束 参 考地 址 对 齐 约 束。
- 操 作 数 地 址 重 叠 约 束 请 参 考地 址 重 叠 约 束。
- 源 操 作 数 的 数 据 类 型 为half、目 的 操 作 数 的 数 据 类 型 为float的 情 况 下,不 支 持 地 址 重 叠。
- 使 用tensor高 维 切 分 计 算 接 口 时,src和scalar的 数 据 类 型 为half、dst的 数 据 类 型 为float的 情 况 下,一 个 迭 代 处 理 内 最 多 处 理64个 输 入 数 据。
- 针 对Ascend 950PR/Ascend 950DT,int64_t、uint64_t数 据 类 型 仅 支 持tensor前n个 数 据 计 算 接 口。
调 用 示 例
本 样 例 中 只 展 示Compute流 程 中 的 部 分 代 码。如 果 您 需 要 运 行 样 例 代 码,请 参 考 完 整 样 例复 合 计 算 样 例。
tensor高 维 切 分 计 算 样 例-mask连 续 模 式。
C++// repeatTime = 4, mask = 128, 128 elements one repeat, 512 elements total // srcLocal数 据 类 型 为half,scalar数 据 类 型 为half,dstLocal数 据 类 型 为half // dstBlkStride, srcBlkStride = 1, no gap between blocks in one repeat // dstRepStride, srcRepStride = 8, no gap between repeats AscendC::Axpy(dstLocal, srcLocal, (half)2.0, 128, 4,{ 1, 1, 8, 8 }); // srcLocal数 据 类 型 为half,scalar数 据 类 型 为half,dstLocal数 据 类 型 为float // repeatTime = 8, mask = 64, 64 elements one repeat, 512 elements total // dstBlkStride, srcBlkStride = 1, no gap between blocks in one repeat // dstRepStride = 8, srcRepStride = 4, no gap between repeats AscendC::Axpy(dstLocal, srcLocal, (half)2.0, 64, 8,{ 1, 1, 8, 4 }); // 每 次 迭 代 选 取 源 操 作 数 前4个datablock参 与 计 算tensor高 维 切 分 计 算 样 例-mask逐bit模 式。
C++uint64_t mask[2] = { 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF }; // repeatTime = 4, 128 elements one repeat, 512 elements total, half精 度 组 合 // dstBlkStride, srcBlkStride = 1, no gap between blocks in one repeat // dstRepStride, srcRepStride = 8, no gap between repeats AscendC::Axpy(dstLocal, srcLocal, (half)2.0, mask, 4,{ 1, 1, 8, 8 });tensor前n个 数 据 计 算 样 例。
C++AscendC::Axpy(dstLocal, src0Local, (half)2.0, 512);// half精 度 组 合
结 果 示 例 如 下:
输 入 数 据(src0Local):
[1. 2. 3. 4. 5. 6. ... 512.]
输 入 数 据(scalarValue):2.0
输 出 数 据(dstLocal)初 始 值:
[0. 0. 0. 0. 0. 0. ... 0.]
进 行Axpy计 算 后,输 出 数 据(dstLocal):
[2. 4. 6. 8. 10. 12. ... 1024.]