Skip to content
版 本

Scatter(ISASI)

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品

x

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品

x

Atlas 200I/500 A2 推 理 产 品

Atlas 推 理 系 列 产 品AI Core

Atlas 推 理 系 列 产 品Vector Core

x

Atlas 训 练 系 列 产 品

x

功 能 说 明

给 定 一 个 连 续 的 输 入 张 量 和 一 个 目 的 地 址 偏 移 张 量,Scatter指 令 根 据 偏 移 地 址 生 成 新 的 结 果 张 量 后 将 输 入 张 量 分 散 到 结 果 张 量 中。

将 源 操 作 数src中 的 元 素 按 照 指 定 的 位 置(由dst_offset和base_addr共 同 作 用)分 散 到 目 的 操 作 数dst中。

函 数 原 型

  • tensor前n个 数 据 计 算

    Text
    template <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模 式

      Text
      template <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连 续 模 式

      Text
      template <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 模 板 参 数 说 明

参 数 名

描 述

T

操 作 数 数 据 类 型。

Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:uint8_t/int8_t/uint16_t/int16_t/half/bfloat16_t/uint32_t/int32_t/float/uint64_t/int64_t

Atlas 200I/500 A2 推 理 产 品,支 持 的 数 据 类 型 为:uint8_t/int8_t/uint16_t/int16_t/half/uint32_t/int32_t/float

Atlas 推 理 系 列 产 品AI Core,支 持 的 数 据 类 型 为:uint16_t/uint32_t/float/half

表 2 参 数 说 明

参 数 名 称

输 入/输 出

含 义

dst

输 出

目 的 操 作 数,类 型 为LocalTensor。LocalTensor的 起 始 地 址 需 要32字 节 对 齐。

src

输 入

源 操 作 数,类 型 为LocalTensor。数 据 类 型 需 与dst保 持 一 致。

dstOffset

输 入

用 于 存 储 源 操 作 数 的 每 个 元 素 在dst中 对 应 的 地 址 偏 移。偏 移基 于dst的 基 地 址dstBaseAddr计 算,以 字 节 为 单 位,取 值 应 保 证 按dst数 据 类 型 位 宽 对 齐,否 则 会 导 致 非 预 期 行 为。

针 对 以 下 型 号,地 址 偏 移 的 取 值 范 围 不 超 出uint32_t的 范 围 即 可。

Atlas 推 理 系 列 产 品AI Core

针 对 以 下 型 号,地 址 偏 移 的 取 值 范 围 如 下:当 操 作 数 为8位 时,取 值 范 围 为[0, 216-1];当 操 作 数 为16位 时,取 值 范 围 为[0, 217-1],当 操 作 数 为32位 或 者64位 时,不 超 过uint32_t的 范 围 即 可。超 出 取 值 范 围 可 能 导 致 非 预 期 输 出。

Atlas 200I/500 A2 推 理 产 品

Ascend 950PR/Ascend 950DT

dstBaseAddr

输 入

dst的 起 始 偏 移 地 址,单 位 是 字 节。取 值 应 保 证 按dst数 据 类 型 位 宽 对 齐,否 则 会 导 致 非 预 期 行 为。

count

输 入

执 行 处 理 的 数 据 个 数。

mask/mask[]

输 入

mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。

  • 连 续 模 式:表 示 前 面 连 续 的 多 少 个 元 素 参 与 计 算。取 值 范 围 和 操 作 数 的 数 据 类 型 有 关,数 据 类 型 不 同,每 次 迭 代 内 能 够 处 理 的 元 素 个 数 最 大 值 不 同。当 操 作 数 为8位 或16位 时,mask∈[1, 128];当 操 作 数 为32位 时,mask∈[1, 64];当 操 作 数 为64位 时,mask∈[1, 32]。
  • 逐bit模 式:可 以 按 位 控 制 哪 些 元 素 参 与 计 算,bit位 的 值 为1表 示 参 与 计 算,0表 示 不 参 与。参 数 类 型 为 长 度 为2的uint64_t类 型 数 组。

    例 如,mask=[8, 0],8=0b1000,表 示 仅 第4个 元 素 参 与 计 算。

    参 数 取 值 范 围 和 操 作 数 的 数 据 类 型 有 关,数 据 类 型 不 同,每 次 迭 代 内 能 够 处 理 的 元 素 个 数 最 大 值 不 同。当 操 作 数 为8位 或16位 时,mask[0]、mask[1]∈[0, 264-1]并 且 不 同 时 为0;当 操 作 数 为32位 时,mask[1]为0,mask[0]∈(0, 264-1];当 操 作 数 为64位 时,mask[1]为0,mask[0]∈(0, 232-1]。

repeatTime

输 入

指 令 迭 代 次 数,每 次 迭 代 完 成8个datablock的 数 据 收 集,数 据 范 围:repeatTime∈[0,255]。

特 别 地,针 对 以 下 型 号:
  • Atlas 200I/500 A2 推 理 产 品
  • Ascend 950PR/Ascend 950DT

操 作 数 为8位时,每 次 迭 代 完 成4个datablock(32Bytes)的 数 据 收 集。

srcRepStride

输 入

相 邻 迭 代 间 的 地 址 步 长,单 位 是datablock。

约 束 说 明

  • 操 作 数 地 址 对 齐 要 求 请 参 见通 用 地 址 对 齐 约 束

  • 操 作 数 地 址 重 叠 约 束 请 参 考通 用 地 址 重 叠 约 束

  • dstOffset中 的 偏 移 地 址 不 能 有 相 同 值,如 果 存 在2个 或 者 多 个 偏 移 重 复 的 情 况,行 为 是 不 可 预 期 的。

  • 针 对Ascend 950PR/Ascend 950DT,uint8_t/int8_t数 据 类 型 仅 支 持tensor前n个 数 据 计 算 接 口。

调 用 示 例

完 整 使 用 样 例 请 参 见Scatter兼 容 性 样 例

Text
uint32_t COUNT = 128;
AscendC::Scatter(dstLocal, srcLocal, dstOffsetLocal, (uint32_t)0, COUNT); // dstOffsetLocal 用 于 存 储 源 操 作 数 的 每 个 元 素 在dst中 对 应 的 地 址 偏 移

结 果 示 例:

Text
输 入 数 据dstOffsetLocal:
[254 252 250 ... 4 2 0]
输 入 数 据srcLocal(128个half类 型 数 据): 
[0 1 2 ... 125 126 127]
输 出 数 据dstGlobal:
[127 126 125 ... 2 1 0]

免 责 声 明:本 站 内 容 由 asc-devkit 仓 master 分 支 自 动 编 译 生 成,属 于 持 续 开 发 版 本,可 能 存 在 缺 陷,仅 供 预 览 与 参 考。如 需 稳 定 及 商 用 资 料,请 查 阅 官 方 昇 腾 社 区