Scatter(ISASI)
产 品 支 持 情 况
功 能 说 明
给 定 一 个 连 续 的 输 入 张 量 和 一 个 目 的 地 址 偏 移 张 量,Scatter指 令 根 据 偏 移 地 址 生 成 新 的 结 果 张 量 后 将 输 入 张 量 分 散 到 结 果 张 量 中。
将 源 操 作 数src中 的 元 素 按 照 指 定 的 位 置(由dst_offset和base_addr共 同 作 用)分 散 到 目 的 操 作 数dst中。
函 数 原 型
tensor前n个 数 据 计 算
Texttemplate <typename T> __aicore__ inline void Scatter(const LocalTensor<T>& dst, const LocalTensor<T>& src, const LocalTensor<uint32_t>& dstOffset, const uint32_t dstBaseAddr, const uint32_t count)tensor高 维 切 分 计 算
mask逐bit模 式
Texttemplate <typename T> __aicore__ inline void Scatter(const LocalTensor<T>& dst, const LocalTensor<T>& src, const LocalTensor<uint32_t>& dstOffset, const uint32_t dstBaseAddr, const uint64_t mask[], const uint8_t repeatTime, const uint8_t srcRepStride)mask连 续 模 式
Texttemplate <typename T> __aicore__ inline void Scatter(const LocalTensor<T>& dst, const LocalTensor<T>& src, const LocalTensor<uint32_t>& dstOffset, const uint32_t dstBaseAddr, const uint64_t mask, const uint8_t repeatTime, const uint8_t srcRepStride)
参 数 说 明
表 1 模 板 参 数 说 明
表 2 参 数 说 明
目 的 操 作 数,类 型 为LocalTensor。LocalTensor的 起 始 地 址 需 要32字 节 对 齐。 | ||
用 于 存 储 源 操 作 数 的 每 个 元 素 在dst中 对 应 的 地 址 偏 移。偏 移基 于dst的 基 地 址dstBaseAddr计 算,以 字 节 为 单 位,取 值 应 保 证 按dst数 据 类 型 位 宽 对 齐,否 则 会 导 致 非 预 期 行 为。 针 对 以 下 型 号,地 址 偏 移 的 取 值 范 围 不 超 出uint32_t的 范 围 即 可。 针 对 以 下 型 号,地 址 偏 移 的 取 值 范 围 如 下:当 操 作 数 为8位 时,取 值 范 围 为[0, 216-1];当 操 作 数 为16位 时,取 值 范 围 为[0, 217-1],当 操 作 数 为32位 或 者64位 时,不 超 过uint32_t的 范 围 即 可。超 出 取 值 范 围 可 能 导 致 非 预 期 输 出。 | ||
dst的 起 始 偏 移 地 址,单 位 是 字 节。取 值 应 保 证 按dst数 据 类 型 位 宽 对 齐,否 则 会 导 致 非 预 期 行 为。 | ||
mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。
| ||
指 令 迭 代 次 数,每 次 迭 代 完 成8个datablock的 数 据 收 集,数 据 范 围:repeatTime∈[0,255]。 | ||
约 束 说 明
操 作 数 地 址 对 齐 要 求 请 参 见通 用 地 址 对 齐 约 束。
操 作 数 地 址 重 叠 约 束 请 参 考通 用 地 址 重 叠 约 束。
dstOffset中 的 偏 移 地 址 不 能 有 相 同 值,如 果 存 在2个 或 者 多 个 偏 移 重 复 的 情 况,行 为 是 不 可 预 期 的。
针 对Ascend 950PR/Ascend 950DT,uint8_t/int8_t数 据 类 型 仅 支 持tensor前n个 数 据 计 算 接 口。
调 用 示 例
完 整 使 用 样 例 请 参 见Scatter兼 容 性 样 例。
uint32_t COUNT = 128;
AscendC::Scatter(dstLocal, srcLocal, dstOffsetLocal, (uint32_t)0, COUNT); // dstOffsetLocal 用 于 存 储 源 操 作 数 的 每 个 元 素 在dst中 对 应 的 地 址 偏 移
结 果 示 例:
输 入 数 据dstOffsetLocal:
[254 252 250 ... 4 2 0]
输 入 数 据srcLocal(128个half类 型 数 据):
[0 1 2 ... 125 126 127]
输 出 数 据dstGlobal:
[127 126 125 ... 2 1 0]