Skip to content
版 本

DataCopyPad(ISASI)

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

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

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

Atlas 200I/500 A2 推 理 产 品

Atlas 推 理 系 列 产 品AI Core

x

Atlas 推 理 系 列 产 品Vector Core

x

Atlas 训 练 系 列 产 品

x

功 能 说 明

该 接 口 提 供 数 据 非 对 齐 搬 运 的 功 能,其 中 从Global Memory搬 运 数 据 至Local Memory时,可 以 根 据 开 发 者 的 需 要 自 行 填 充 数 据。

函 数 原 型

  • dataCopyParams为DataCopyExtParams类 型,相 比 于DataCopyParams类 型,支 持 的 操 作 数 步 长 等 参 数 取 值 范 围 更 大

    • 通 路:Global Memory->Local Memory

      Text
      template <typename T, PaddingMode mode = PaddingMode::Normal>
      __aicore__ inline void DataCopyPad(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const DataCopyExtParams& dataCopyParams, const DataCopyPadExtParams<T>& padParams)
      
      Text
      template <typename T>
      __aicore__ inline void DataCopyPad(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const DataCopyExtParams& dataCopyParams, const DataCopyPadExtParams<T>& padParams)
      
    • 通 路:Local Memory->Global Memory

      Text
      template <typename T, PaddingMode mode = PaddingMode::Normal>
      __aicore__ inline void DataCopyPad(const GlobalTensor<T>& dst, const LocalTensor<T>& src, const DataCopyExtParams& dataCopyParams)
      
      Text
      template <typename T>
      __aicore__ inline void DataCopyPad(const GlobalTensor<T>& dst, const LocalTensor<T>& src, const DataCopyExtParams& dataCopyParams)
      
    • 通 路:Local Memory->Local Memory,实 际 搬 运 过 程 是VECIN/VECOUT->GM->TSCM

      Text
      template <typename T>
      __aicore__ inline void DataCopyPad(const LocalTensor<T>& dst, const LocalTensor<T>& src, const DataCopyExtParams& dataCopyParams, const Nd2NzParams& nd2nzParams)
      
  • dataCopyParams为DataCopyParams类 型

    • 通 路:Global Memory->Local Memory

      Text
      template<typename T, PaddingMode mode = PaddingMode::Normal>
      __aicore__ inline void DataCopyPad(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const DataCopyParams& dataCopyParams, const DataCopyPadParams& padParams)
      
      Text
      template<typename T>
      __aicore__ inline void DataCopyPad(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const DataCopyParams& dataCopyParams, const DataCopyPadParams& padParams)
      
    • 通 路:Local Memory->Global Memory

      Text
      template<typename T, PaddingMode mode = PaddingMode::Normal>
      __aicore__ inline void DataCopyPad(const GlobalTensor<T>& dst, const LocalTensor<T>& src,const DataCopyParams& dataCopyParams)
      
      Text
      template<typename T>
      __aicore__ inline void DataCopyPad(const GlobalTensor<T>& dst, const LocalTensor<T>& src,const DataCopyParams& dataCopyParams)
      
    • 通 路:Local Memory->Local Memory,实 际 搬 运 过 程 是VECIN/VECOUT->GM->TSCM

      Text
      template<typename T>
      __aicore__ inline void DataCopyPad(const LocalTensor<T>& dst, const LocalTensor<T>& src, const DataCopyParams& dataCopyParams, const Nd2NzParams& nd2nzParams)
      

不 同 产 品 型 号 对 函 数 原 型 的 支 持 存 在 差 异,请 参 考 下 表 中 的 支 持 度 信 息,选 择 产 品 型 号 支 持 的 函 数 原 型 进 行 开 发。

表 1 不 同 产 品 型 号 对 函 数 原 型 的 支 持 度

产 品 型 号

支 持 的 数 据 传 输 通 路

是 否 支 持 设 置 数 据 搬 运 模 式mode(搬 运 模 式 包 括 单 次 搬 运 对 齐 和 整 块 数 据 搬 运 对 齐)

Ascend 950PR/Ascend 950DT

GM->VECIN/VECOUT、GM->A1/B1、GM->TSCM、VECIN/VECOUT->GM、A1/B1->GM、VECIN/VECOUT->TSCM、 GM->VECCALC

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

GM->VECIN/VECOUT、VECIN/VECOUT->GM、VECIN/VECOUT->TSCM

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

GM->VECIN/VECOUT、VECIN/VECOUT->GM、VECIN/VECOUT->TSCM

Atlas 200I/500 A2 推 理 产 品

GM->VECIN/VECOUT、VECIN/VECOUT->GM

参 数 说 明

表 2 模 板 参 数 说 明

参 数 名

描 述

T

操 作 数 以 及paddingValue(待 填 充 数 据 值)的 数 据 类 型。

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

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品,支 持 的 数 据 类 型 为:half/bfloat16_t/int16_t/uint16_t/float/int32_t/uint32_t/int8_t/uint8_t/int64_t/uint64_t/double

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品,支 持 的 数 据 类 型 为:half/bfloat16_t/int16_t/uint16_t/float/int32_t/uint32_t/int8_t/uint8_t/int64_t/uint64_t/double

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

mode

配 置 数 据 搬 运 模 式。PaddingMode类 型,定 义 如 下:

enum class PaddingMode : uint8_t {
    Normal = 0,  // 默 认 模 式,与 原 有 数 据 搬 运 格 式 保 持 一 致,每 次 数 据 搬 运 都 会 补 齐 至32字 节 对 齐
    Compact,     // 紧 凑 模 式,允 许 单 次 搬 运 不 对 齐,统 一 在 整 块 数 据 末 尾 补 齐 至32字 节 对 齐
};

表 3 接 口 参 数 说 明

参 数 名

输 入/输 出

描 述

dst

输 出

目 的 操 作 数,类 型 为LocalTensor或GlobalTensor。

LocalTensor的 起 始 地 址 需 要 保 证32字 节 对 齐。

GlobalTensor的 起 始 地 址 无 地 址 对 齐 约 束。

src

输 入

源 操 作 数,类 型 为LocalTensor或GlobalTensor。

LocalTensor的 起 始 地 址 需 要 保 证32字 节 对 齐。

GlobalTensor的 起 始 地 址 无 地 址 对 齐 约 束。

dataCopyParams

输 入

搬 运 参 数。

  • DataCopyExtParams类 型,具 体 参 数 说 明 请 参 考表4
  • DataCopyParams类 型,具 体 参 数 说 明 请 参 考表5

padParams

输 入

从Global Memory搬 运 数 据 至Local Memory时,可 以 根 据 开 发 者 需 要,在 搬 运 数 据 左 边 或 右 边 填 充 数 据。padParams是 用 于 控 制 数 据 填 充 过 程 的 参 数。

  • DataCopyPadExtParams类 型,具 体 参 数 请 参 考表6
  • DataCopyPadParams类 型,具 体 参 数 请 参 考表7

nd2nzParams

输 入

从VECIN/VECOUT->TSCM进 行 数 据 搬 运 时,可 以 进 行ND到NZ的 数 据 格 式 转 换。nd2nzParams是 用 于 控 制 数 据 格 式 转 换 的 参 数,Nd2NzParams类 型,具 体 参 数 请 参 考表3

注 意:Nd2NzParams的ndNum仅 支 持 设 置 为1

下 文 表 格 中 列 出 的 结 构 体 参 数 定 义 请 参 考${INSTALL_DIR}/include/ascendc/basic_api/interface/kernel_struct_data_copy.h,${INSTALL_DIR}请 替 换 为CANN软 件 安 装 后 文 件 存 储 路 径。

表 4 DataCopyExtParams结 构 体 参 数 定 义

参 数 名 称

含 义

blockCount

指 定 该 指 令 包 含 的 连 续 传 输 数 据 块 个 数,数 据 类 型 为uint16_t,取 值 范 围:blockCount∈[1, 4095]。

blockLen

指 定 该 指 令 每 个 连 续 传 输 数 据 块 长 度,该 指 令 支 持 非 对 齐 搬 运每 个 连 续 传 输 数 据 块 长 度 单 位 为 字 节。数 据 类 型 为uint32_t,取 值 范 围:blockLen∈[1, 2097151],blockLen必 须 是 sizeof(T) 的 整 数 倍,需 要 注 意UB不 要 超 限

srcStride

源 操 作 数,相 邻 连 续 数 据 块 的 间 隔(前 面 一 个 数 据 块 的 尾 与 后 面 数 据 块 的 头 的 间 隔)。

如 果 源 操 作 数 的 逻 辑 位 置 为VECIN/VECOUT,则 单 位 为dataBlock(32字 节)。如 果 源 操 作 数 的 逻 辑 位 置 为GM,则 单 位 为 字 节

数 据 类 型 为uint32_t,srcStride不 要 超 出 该 数 据 类 型 的 取 值 范 围。

特 别 地,针 对 如 下 型 号:

Ascend 950PR/Ascend 950DT

数 据 类 型 为int64_t,如 果 源 操 作 数 的 逻 辑 位 置 为VECIN/VECOUT,取 值 范 围 为[0, 65535];如 果 源 操 作 数 的 逻 辑 位 置 为GM,取 值 范 围 为[-blockLen, 2^40-1]。

dstStride

目 的 操 作 数,相 邻 连 续 数 据 块 间 的 间 隔(前 面 一 个 数 据 块 的 尾 与 后 面 数 据 块 的 头 的 间 隔)。

如 果 目 的 操 作 数 的 逻 辑 位 置 为VECIN/VECOUT,则 单 位 为dataBlock(32字 节),如 果 目 的 操 作 数 的 逻 辑 位 置 为GM,则 单 位 为 字 节

数 据 类 型 为uint32_t,dstStride不 要 超 出 该 数 据 类 型 的 取 值 范 围。

特 别 地,针 对 如 下 型 号:

Ascend 950PR/Ascend 950DT

数 据 类 型 为int64_t,如 果 目 的 操 作 数 的 逻 辑 位 置 为VECIN/VECOUT,取 值 范 围 为[0, 65535];如 果 目 的 操 作 数 的 逻 辑 位 置 为GM,取 值 范 围 为[0, 2^40-1]。

rsv

保 留 字 段。

表 5 DataCopyParams结 构 体 参 数 定 义

参 数 名 称

含 义

blockCount

指 定 该 指 令 包 含 的 连 续 传 输 数 据 块 个 数,数 据 类 型 为uint16_t,取 值 范 围:blockCount∈[1, 4095]。

blockLen

指 定 该 指 令 每 个 连 续 传 输 数 据 块 长 度,该 指 令 支 持 非 对 齐 搬 运每 个 连 续 传 输 数 据 块 长 度 单 位 为 字 节。数 据 类 型 为uint16_t,blockLen不 要 超 出 该 数 据 类 型 的 取 值 范 围,blockLen必 须 是 sizeof(T) 的 整 数 倍

srcStride

源 操 作 数,相 邻 连 续 数 据 块 的 间 隔(前 面 一 个 数 据 块 的 尾 与 后 面 数 据 块 的 头 的 间 隔),如 果 源 操 作 数 的 逻 辑 位 置 为VECIN/VECOUT,则 单 位 为dataBlock(32字 节)。如 果 源 操 作 数 的 逻 辑 位 置 为GM,则 单 位 为 字 节。数 据 类 型 为uint16_t,srcStride不 要 超 出 该 数 据 类 型 的 取 值 范 围。

dstStride

目 的 操 作 数,相 邻 连 续 数 据 块 间 的 间 隔(前 面 一 个 数 据 块 的 尾 与 后 面 数 据 块 的 头 的 间 隔),如 果 目 的 操 作 数 的 逻 辑 位 置 为VECIN/VECOUT,则 单 位 为dataBlock(32字 节),如 果 目 的 操 作 数 的 逻 辑 位 置 为GM,则 单 位 为 字 节。数 据 类 型 为uint16_t,dstStride不 要 超 出 该 数 据 类 型 的 取 值 范 围。

表 6 DataCopyPadExtParams<T>结 构 体 参 数 定 义

参 数 名 称

含 义

isPad

是 否 需 要 填 充 用 户 自 定 义 的 数 据,取 值 范 围:true,false。

true:填 充padding value

false:表 示用 户 不 需 要 指 定 填 充 值,会 默 认 填 充随 机 值。

leftPadding

连 续 搬 运 数 据 块 左 侧 需 要 补 充 的 数 据 范 围,单 位 为 元 素 个 数。

leftPadding、rightPadding所 占 的 字 节 数 均 不 能 超 过32字 节。

rightPadding

连 续 搬 运 数 据 块 右 侧 需 要 补 充 的 数 据 范 围,单 位 为 元 素 个 数。

leftPadding、rightPadding所 占 的 字 节 数 均 不 能 超 过32字 节。

paddingValue

左 右 两 侧 需 要 填 充 的 数 据 值,需 要 保 证 在 数 据 占 用 字 节 范 围 内。

数 据 类 型 和 源 操 作 数 保 持 一 致,T数 据 类 型。

当 数 据 类 型 长 度 为64位 时,该 参 数 只 能 设 置 为0。

表 7 DataCopyPadParams结 构 体 参 数 定 义

参 数 名 称

含 义

isPad

是 否 需 要 填 充 用 户 自 定 义 的 数 据,取 值 范 围:true,false。

true:填 充padding value

false:表 示用 户 不 需 要 指 定 填 充 值,会 默 认 填 充随 机 值。

leftPadding

连 续 搬 运 数 据 块 左 侧 需 要 补 充 的 数 据 范 围,单 位 为 元 素 个 数。

leftPadding、rightPadding所 占 的 字 节 数 均 不 能 超 过32字 节。

rightPadding

连 续 搬 运 数 据 块 右 侧 需 要 补 充 的 数 据 范 围,单 位 为 元 素 个 数。

leftPadding、rightPadding所 占 的 字 节 数 均 不 能 超 过32字 节。

paddingValue

左 右 两 侧 需 要 填 充 的 数 据 值,需 要 保 证 在 数 据 占 用 字 节 范 围 内。

uint64_t数 据 类 型,且 该 参 数 只 能 设 置 为0。

下 面 分 别 给 出 如 下 场 景 的 配 置 示 例:

  • GM->VECIN/VECOUT

  • VECIN/VECOUT->GM

  • VECIN/VECOUT->TSCM

  • 搬 运 模 式 的 配 置 示 例

  • GM->VECIN/VECOUT

    • 参 数 解 释

      • 当blockLen+leftPadding+rightPadding满 足32字 节 对 齐 时,若isPad为false,左 右 两 侧 填 充 的 数 据 值 会 默 认 为 随 机 值;否 则 为paddingValue。
      • 当blockLen+leftPadding+rightPadding不 满 足32字 节 对 齐 时,框 架 会 填 充 一 些 假 数 据dummy,保 证 左 右 填 充 的 数 据 和blockLen、假 数 据 为32字 节 对 齐。若leftPadding、rightPadding都 为0:dummy会 默 认 填 充 待 搬 运 数 据 块 的 第 一 个 元 素 值;若leftPadding/rightPadding不 为0:isPad为false,左 右 两 侧 填 充 的 数 据 值 和dummy值 均 为 随 机 值;否 则 为paddingValue。
    • 配 置 示 例1:

      • blockLen为64,每 个 连 续 传 输 数 据 块 包 含64字 节;srcStride为1,因 为 源 操 作 数 的 逻 辑 位 置 为GM,srcStride的 单 位 为 字 节,也 就 是 说 源 操 作 数 相 邻 数 据 块 之 间 间 隔1字 节;dstStride为1,因 为 目 的 操 作 数 的 逻 辑 位 置 为VECIN/VECOUT,dstStride的 单 位 为DataBlock数 量(每DataBlock为32字 节),也 就 是 说 目 的 操 作 数 相 邻 数 据 块 之 间 间 隔1个dataBlock。
      • blockLen+leftPadding+rightPadding满 足32字 节 对 齐,isPad为false,左 右 两 侧 填 充 的 数 据 值 会 默 认 为 随 机 值;否 则 为paddingValue。此 处 示 例 中,leftPadding、rightPadding均 为0,则 不 填 充。
      • blockLen+leftPadding+rightPadding不 满 足32字 节 对 齐 时,框 架 会 填 充 一 些 假 数 据dummy,保 证 左 右 填 充 的 数 据 和blockLen、假 数 据 为32字 节 对 齐。leftPadding/rightPadding不 为0:若isPad为false,左 右 两 侧 填 充 的 数 据 值 和dummy值 均 为 随 机 值;否 则 为paddingValue。

    • 配 置 示 例2:

      • blockLen为47,每 个 连 续 传 输 数 据 块 包 含47字 节;srcStride为1,表 示 源 操 作 数 相 邻 数 据 块 之 间 间 隔1字 节;dstStride为1,表 示 目 的 操 作 数 相 邻 数 据 块 之 间 间 隔1个dataBlock。
      • blockLen+leftPadding+rightPadding不 满 足32字 节 对 齐,leftPadding、rightPadding均 为0:dummy会 默 认 填 充 待 搬 运 数 据 块 的 第 一 个 元 素 值。
      • blockLen+leftPadding+rightPadding不 满 足32字 节 对 齐,leftPadding/rightPadding不 为0:若isPad为false,左 右 两 侧 填 充 的 数 据 值 和dummy值 均 为 随 机 值;否 则 为paddingValue。

    • 配 置 示 例3:

      • blockLen为48,每 个 连 续 传 输 数 据 块 包 含48字 节;srcStride为-48,表 示 源 操 作 数 相 邻 数 据 块 之 间 间 隔-48字 节,相 当 于 每 次 传 输 的 连 续 数 据 块 都 是 同 一 块;dstStride为1,表 示 目 的 操 作 数 相 邻 数 据 块 之 间 间 隔1个dataBlock。
      • blockLen+leftPadding+rightPadding不 满 足32字 节 对 齐,leftPadding、rightPadding均 为0:dummy会 默 认 填 充 待 搬 运 数 据 块 的 第 一 个 元 素 值。
      • blockLen+leftPadding+rightPadding不 满 足32字 节 对 齐,leftPadding/rightPadding不 为0:若isPad为false,左 右 两 侧 填 充 的 数 据 值 和dummy值 均 为 随 机 值;否 则 为paddingValue。

  • VECIN/VECOUT->GM

    • 当 每 个 连 续 传 输 数 据 块 长 度blockLen为32字 节 对 齐 时,下 图 呈 现 了 需 要 传 入 的DataCopyParams示 例,blockLen为64,每 个 连 续 传 输 数 据 块 包 含64字 节;srcStride为1,因 为 源 操 作 数 的 逻 辑 位 置 为VECIN/VECOUT,srcStride的 单 位 为dataBlock(32字 节),也 就 是 说 源 操 作 数 相 邻 数 据 块 之 间 间 隔1个dataBlock;dstStride为1,因 为 目 的 操 作 数 的 逻 辑 位 置 为GM,dstStride的 单 位 为 字 节,也 就 是 说 目 的 操 作 数 相 邻 数 据 块 之 间 间 隔1字 节。

    • 当 每 个 连 续 传 输 数 据 块 长 度blockLen不 满 足32字 节 对 齐,由 于Unified Buffer要 求32字 节 对 齐,框 架 在 搬 出 时 会 自 动 补 充 一 些 假 数 据 来 保 证 对 齐,但 在 当 搬 到GM时 会 自 动 将 填 充 的 假 数 据 丢 弃 掉。下 图 呈 现 了 该 场 景 下 需 要 传 入 的DataCopyParams示 例 和 假 数 据 补 齐 的 原 理。blockLen为47,每 个 连 续 传 输 数 据 块 包 含47字 节,不 满 足32字 节 对 齐;srcStride为1,表 示 源 操 作 数 相 邻 数 据 块 之 间 间 隔1个dataBlock;dstStride为1,表 示 目 的 操 作 数 相 邻 数 据 块 之 间 间 隔1字 节。框 架 在 搬 出 时 会 自 动 补 充17字 节 的 假 数 据 来 保 证 对 齐,搬 到GM时 再 自 动 将 填 充 的 假 数 据 丢 弃 掉。

  • VECIN/VECOUT->TSCM

    **注 意:**内 部 实 现 涉 及AIC和AIV之 间 的 通 信,实 际 搬 运 路 径 为VECIN/VECOUT->GM->TSCM,发 送 通 信 消 息 会 有 开 销,性 能 会 受 到 影 响

    图1 VECIN/VECOUT->TSCM搬 运 示 意 图所 示,展 示 了 从VECIN/VECOUT搬 运 到GM,再 搬 运 到TSCM的 过 程:示 例 中 数 据 类 型 为half,单 个datablock(32字 节)含 有16个half元 素,源 操 作 数 中 的A1~A6、B1~B6、C1~C6为 需 要 进 行 搬 运 的 数 据。

    • 从VECIN/VECOUT->GM的 搬 运,数 据 存 储 格 式 没 有 发 生 转 变,依 然 是ND。

      • blockCount为 需 要 搬 运 的 连 续 传 输 数 据 块 个 数,设 置 为3;
      • blockLen为 一 个 连 续 传 输 数 据 块 的 大 小(单 位 为 字 节),设 置 为6 * 32 = 192;
      • srcStride为 源 操 作 数 相 邻 连 续 数 据 块 的 间 隔(前 面 一 个 数 据 块 的 尾 与 后 面 数 据 块 的 头 的 间 隔),源 操 作 数 逻 辑 位 置 为VECIN/VECOUT,其 单 位 为datablock,两 个 连 续 传 输 数 据 块(A1~A6、B1~B6)中 间 相 隔1个A7,因 此srcStride设 置 为1;
      • dstStride为 目 的 操 作 数,相 邻 连 续 数 据 块 间 的 间 隔(前 面 一 个 数 据 块 的 尾 与 后 面 数 据 块 的 头 的 间 隔),目 的 操 作 数 逻 辑 位 置 为GM,其 单 位 为 字 节,两 个 连 续 传 输 数 据 块(A1~A6、B1~B6)中 间 相 隔2个 空 白 的datablock,因 此dstStride设 置 为64字 节。
    • 从GM->TSCM的 搬 运,数 据 存 储 格 式 由ND转 换 为NZ。

      • ndNum固 定 为1,即A1~A6、B1~B6、C1~C6视 作 一 整 个ndMatrix;
      • nValue为ndMatrix的 行 数,即 为3行;
      • dValue为ndMatrix中 一 行 包 含 的 元 素 个 数,即 为6 * 16 = 96个 元 素;
      • srcNdMatrixStride为 相 邻ndMatrix之 间 的 距 离,因 为 仅 涉 及1个ndMatrix,所 以 可 填 为0;
      • srcDValue表 明ndMatrix的 第x行 和 第x+1行 所 相 隔 的 元 素 个 数,如A1~B1的 距 离,即 为8个datablock,8 * 16 = 128个 元 素;
      • dstNzC0Stride为src同 一 行 的 相 邻datablock在NZ矩 阵 中 相 隔datablock数,如A1~A2的 距 离,即 为7个datablock (A1 + 空 白 + B1 + 空 白 + C1 + 空 白 * 2);
      • dstNzNStride为src中ndMatrix的 相 邻 行 在NZ矩 阵 中 相 隔 多 少 个datablock,如A1~B1的 距 离,即 为2个datablock(A1 + 空 白);
      • dstNzMatrixStride为 相 邻NZ矩 阵 之 间 的 元 素 个 数,因 为 仅 涉 及1个NZ矩 阵,所 以 可 以 填 为1。

    图 1 VECIN/VECOUT->TSCM搬 运 示 意 图

  • 搬 运 模 式 的 配 置 示 例

    • Normal模 式

      blockLen为48,每 个 连 续 传 输 数 据 块 包 含48字 节;srcStride为0,因 为 源 操 作 数 的 逻 辑 位 置 为GM,srcStride的 单 位 为 字 节,即 源 操 作 数 相 邻 数 据 块 之 间 紧 密 排 列;dstStride为0,因 为 目 的 操 作 数 的 逻 辑 位 置 为VECIN、VECOUT,dstStride的 单 位 为DataBlock(32字 节),目 的 操 作 数 相 邻 数 据 块 之 间 无 间 隔,注 意 数 据 块 包 含leftPadding/rightPadding数 据。

      blockLen + leftPadding + rightPadding满 足32字 节 对 齐,isPad为false,左 右 两 侧 填 充 的 数 据 值 会 默 认 为 随 机 值,否 则 为paddingValue。此 处 示 例 中,leftPadding为0,rightPadding为16,每 个 连 续 传 输 数 据 块 都 会 在 右 侧 填 充16字 节。目 的 操 作 数 的 总 长 度 为192字 节。

    • Compact模 式

      blockLen为48,每 个 连 续 传 输 数 据 块 包 含48字 节;srcStride为0,因 为 源 操 作 数 的 逻 辑 位 置 为GM,srcStride的 单 位 为 字 节,即 源 操 作 数 相 邻 数 据 块 之 间 紧 密 排 列;dstStride为0,因 为 目 的 操 作 数 的 逻 辑 位 置 为VECIN、VECOUT,dstStride的 单 位 为DataBlock(32字 节),目 的 操 作 数 相 邻 数 据 块 之 间 紧 密 排 列,不 会 填 充 数 据

      blockLen * blockCount + leftPadding + rightPadding 满 足32字 节 对 齐,isPad为false,左 右 两 侧 填 充 的 数 据 值 会 默 认 为 随 机 值,否 则 为paddingValue。此 处 示 例 中,leftPadding为0,rightPadding为16,在 最 后 一 个 数 据 块 右 侧 填 充16字 节。目 的 操 作 数 的 总 长 度 为160字 节。

返 回 值 说 明

约 束 说 明

  • leftPadding、rightPadding的 字 节 数 均 不 能 超 过32字 节。
  • 针 对Ascend 950PR/Ascend 950DT,VECIN/VECOUT->TSCM通 路,仅 支 持 如 下 数 据 类 型:half、bfloat16_t、int16_t、uint16_t、float、int32_t、uint32_t、int8_t、uint8_t、int64_t、uint64_t、double。

调 用 示 例

本 示 例 实 现 了GM->VECIN->GM的 非 对 齐 搬 运 过 程,完 整 使 用 样 例 请 参 见DataCopyPad样 例

Text
AscendC::DataCopyExtParams copyParams{1, 20 * sizeof(half), 0, 0, 0}; 
AscendC::DataCopyPadExtParams<half> padParams{true, 0, 2, 0};
// 从GM->VECIN搬 运40字 节
AscendC::DataCopyPad(dstGlobal, src0Global, copyParams, padParams);

结 果 示 例:

Text
输 入 数 据src0Global: [1 2 3 ... 32]
输 出 数 据dstGlobal:[1 2 3 ... 20]

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