Ors
产 品 支 持 情 况
功 能 说 明
矢 量 内 每 个 元 素 和 标 量 间 做 或 操 作,支 持 标 量 在 前 和 标 量 在 后 两 种 场 景,其 中 标 量 输 入 支 持 配 置LocalTensor单 点 元 素。计 算 公 式 如 下,idx表 示LocalTensor单 点 元 素 的 位 置 系 数。

函 数 原 型
Tensor前n个 数 据 计 算
Texttemplate <typename T = BinaryDefaultType, bool isSetMask = true, const BinaryConfig& config = DEFAULT_BINARY_CONFIG, typename U, typename S, typename V> __aicore__ inline void Ors(const U& dst, const S& src0, const V& src1, const int32_t& count)Tensor高 维 切 分 计 算
mask逐bit模 式
Texttemplate <typename T = BinaryDefaultType, bool isSetMask = true, const BinaryConfig& config = DEFAULT_BINARY_CONFIG, typename U, typename S, typename V> __aicore__ inline void Ors(const U& dst, const S& src0, const V& src1, uint64_t mask[], const uint8_t repeatTime, const UnaryRepeatParams& repeatParams)mask连 续 模 式
Texttemplate <typename T = BinaryDefaultType, bool isSetMask = true, const BinaryConfig& config = DEFAULT_BINARY_CONFIG, typename U, typename S, typename V> __aicore__ inline void Ors(const U& dst, const S& src0, const V& src1, uint64_t mask, const uint8_t repeatTime, const UnaryRepeatParams& repeatParams)
参 数 说 明
表 1 模 板 参 数 说 明
预 留 参 数,暂 未 启 用,为 后 续 的 功 能 扩 展 做 保 留,需 要 指 定 时,传 入 默 认 值BinaryDefaultType即 可。 | |
是 否 在 接 口 内 部 设 置mask模 式 和mask值。
针 对 以 下 型 号,Tensor前n个 数 据 计 算API中 的isSetMask参 数 不 生 效,保 持 默 认 值 即 可。 | |
类 型 为BinaryConfig,当 标 量 为LocalTensor单 点 元 素 类 型 时 生 效,用 于 指 定 单 点 元 素 操 作 数 位 置。默 认 值DEFAULT_BINARY_CONFIG,表 示 右 操 作 数 为 标 量。 struct BinaryConfig {
int8_t scalarTensorIndex = 1; // 用 于 指 定 标 量 为LocalTensor单 点 元 素 时 标 量 的 位 置,0表 示 左 操 作 数,1表 示 右 操 作 数
};
constexpr BinaryConfig DEFAULT_BINARY_CONFIG = {1}; | |
LocalTensor类 型,根 据 输 入 参 数dst自 动 推 导 相 应 的 数 据 类 型,开 发 者 无 需 配 置 该 参 数,保 证dst满 足 数 据 类 型 的 约 束 即 可。 | |
LocalTensor类 型 或 标 量 类 型,根 据 输 入 参 数src0自 动 推 导 相 应 的 数 据 类 型,开 发 者 无 需 配 置 该 参 数,保 证src0满 足 数 据 类 型 的 约 束 即 可。 | |
LocalTensor类 型 或 标 量 类 型,根 据 输 入 参 数src1自 动 推 导 相 应 的 数 据 类 型,开 发 者 无 需 配 置 该 参 数,保 证src1满 足 数 据 类 型 的 约 束 即 可。 |
表 2 参 数 说 明
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。 LocalTensor的 起 始 地 址 需 要32字 节 对 齐。 Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:int16_t/uint16_t/int64_t/uint64_t | ||
mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。
| ||
重 复 迭 代 次 数。 矢 量 计 算 单 元,每 次 读 取 连 续 的256Bytes数 据 进 行 计 算,为 完 成 对 输 入 数 据 的 处 理,必 须 通 过 多 次 迭 代(repeat)才 能 完 成 所 有 数 据 的 读 取 与 计 算。repeatTime表 示 迭 代 的 次 数。 关 于 该 参 数 的 具 体 描 述 请 参 考高 维 切 分API。 | ||
元 素 操 作 控 制 结 构 信 息,具 体 请 参 考UnaryRepeatParams。 |
返 回 值 说 明
无
约 束 说 明
使 用Tensor高 维 切 分 计 算 接 口 时,节 省 地 址 空 间,开 发 者 可 以 定 义 一 个Tensor,供 源 操 作 数 与 目 的 操 作 数 同 时 使 用(即 地 址 重 叠),相 关 约 束 如 下:
- 对 于 单 次repeat(repeatTime=1),且 源 操 作 数 与 目 的 操 作 数 之 间 要 求100%完 全 重 叠,不 支 持 部 分 重 叠。
- 对 于 多 次repeat(repeatTime>1),操 作 数 与 目 的 操 作 数 之 间 存 在 依 赖 的 情 况 下,即 第N次 迭 代 的 目 的 操 作 数 是 第N+1次 的 源 操 作 数,不 支 持 地 址 重 叠。
- 源 操 作 数 为LocalTensor单 点 元 素 的 场 景,不 支 持 源 操 作 数 和 目 的 操 作 数 地 址 重 叠。
操 作 数 地 址 对 齐 要 求 请 参 见通 用 地 址 对 齐 约 束。
针 对Ascend 950PR/Ascend 950DT,uint64_t/int64_t数 据 类 型 仅 支 持Tensor前n个 数 据 计 算 接 口。
左 操 作 数 及 右 操 作 数 中,必 须 有 一 个 为 矢 量;当 前 不 支 持 左 右 操 作 数 同 时 为 标 量。
本 接 口 传 入LocalTensor单 点 数 据 作 为 标 量 时,idx参 数 需 要 传 入 编 译 期 已 知 的 常 量,传 入 变 量 时 需 要 声 明 为constexpr。
调 用 示 例
Tensor高 维 切 分 计 算 样 例-mask连 续 模 式
Text// dstLocal:输 出Tensor // src0Local:输 入Tensor // src1Local:输 入Tensor uint64_t mask = 128; // repeatTime = 4, 单 次 迭 代 处 理128个 数,计 算512个 数 需 要 迭 代4次 // dstBlkStride, srcBlkStride = 1, 每 个 迭 代 内src0参 与 计 算 的 数 据 地 址 间 隔 为1个datablock,表 示 单 次 迭 代 内 数 据 连 续 读 取 和 写 入 // dstRepStride, srcRepStride = 8, 相 邻 迭 代 间 的 地 址 间 隔 为8个datablock,表 示 相 邻 迭 代 间 数 据 连 续 读 取 和 写 入 // 标 量 在 后 示 例 AscendC::Ors(dstLocal, src0Local, src1Local[0], mask, 4, { 1, 1, 8, 8 }); // 标 量 在 前 示 例 static constexpr AscendC::BinaryConfig config = { 0 }; AscendC::Ors<BinaryDefaultType, true, config>(dstLocal, src0Local[0], src1Local, mask, 4, {1, 1, 8, 8});Tensor高 维 切 分 计 算 样 例-mask逐bit模 式
Text// dstLocal:输 出Tensor // src0Local:输 入Tensor // src1Local:输 入Tensor uint64_t mask[2] = { UINT64_MAX, UINT64_MAX }; // repeatTime = 4, 单 次 迭 代 处 理128个 数,计 算512个 数 需 要 迭 代4次 // dstBlkStride, srcBlkStride = 1, 每 个 迭 代 内src0参 与 计 算 的 数 据 地 址 间 隔 为1个datablock,表 示 单 次 迭 代 内 数 据 连 续 读 取 和 写 入 // dstRepStride, srcRepStride = 8, 相 邻 迭 代 间 的 地 址 间 隔 为8个datablock,表 示 相 邻 迭 代 间 数 据 连 续 读 取 和 写 入 // 标 量 在 后 示 例 AscendC::Ors(dstLocal, src0Local, src1Local[0], mask, 4, {1, 1, 8, 8}); // 标 量 在 前 示 例 static constexpr AscendC::BinaryConfig config = { 0 }; AscendC::Ors<BinaryDefaultType, true, config>(dstLocal, src0Local[0], src1Local, mask, 4, {1, 1, 8, 8});Tensor前n个 数 据 计 算 样 例
Text// 标 量 在 后 示 例 AscendC::Ors(dstLocal, src0Local, src1Local[0], 512); // 标 量 在 前 示 例 static constexpr AscendC::BinaryConfig config = { 0 }; AscendC::Ors<BinaryDefaultType, true, config>(dstLocal, src0Local[0], src1Local, 512);
结 果 示 例 如 下:
// 标 量 在 后,src1Local[0]作 为 标 量
输 入 数 据src0Local: [1 2 3 ... 512]
输 入 数 据src1Local: [1]
输 出 数 据dstLocal: [1 2 3 ... 512]
// 标 量 在 前,src0Local[0]作 为 标 量
输 入 数 据src0Local: [1]
输 入 数 据src1Local: [1 2 3 ... 512]
输 出 数 据dstLocal: [1 2 3 ... 512]