Skip to content

UB与UB数据搬运

总体说明

Unified Buffer(UB)之间的数据搬运提供了灵活的接口支持,共有两组接口:DataCopy提供了基础的数据搬运能力,支持连续和非连续数据搬运;Copy除了支持连续和非连续数据搬运,还提供了mask操作和DataBlock间隔操作的能力,支持在接口内部和接口外部设置mask。具体接口功能如下表所示。

表 1 UB与UB数据搬运接口概述

数据通路功能描述
UB->UB连续数据搬运(DataCopy)提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续数据搬运。
UB->UB高维切分数据搬运(DataCopy)提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续和非连续的数据搬运。
UB->UB连续数据搬运(Copy)支持连续数据搬运,数据搬运时格式和内容保持不变。
UB->UB掩码式高维数据搬运(Copy)支持mask操作和DataBlock间隔操作,支持在接口内部和接口外部设置mask。

DataCopy(UB -> UB连续数据搬运)

支持Unified Buffer与Unified Buffer之间的连续数据搬运,数据在传输过程中保持原始格式和内容不变。

具体支持的数据通路为(以逻辑位置TPosition表示):

  • Unified Buffer -> Unified Buffer
    • VECIN -> VECCALC
    • VECCALC -> VECOUT

搬运的数据用于矢量计算,具体的接口请参考:DataCopy(UB -> UB连续数据搬运)

src和dst分别为源操作数和目的操作数;count为连续搬运的元素个数。

C++
template <typename T>
__aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<T>& src, const uint32_t count)

DataCopy(UB -> UB高维切分数据搬运)

支持Unified Buffer与Unified Buffer之间的高维切分数据搬运,数据在传输过程中保持原始格式和内容不变。

高维切分数据搬运可通过配置数据块个数、单个数据块长度、地址偏移等搬运参数,同时支持非连续和连续的数据搬运。

具体支持的数据通路为(以逻辑位置TPosition表示):

  • Unified Buffer -> Unified Buffer
    • VECIN -> VECCALC
    • VECCALC -> VECOUT

搬运的数据用于矢量计算,具体的接口请参考:DataCopy(UB -> UB高维切分数据搬运)

src和dst分别为源操作数和目的操作数;repeatParams为DataCopyParams类型的搬运参数,通过该参数可配置搬运的数据块大小、个数、间隔等信息,同时支持非连续和连续搬运。

C++
template <typename T>
__aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<T>& src, const DataCopyParams& repeatParams)

Copy(UB -> UB连续数据搬运)

支持Unified Buffer和Unified Buffer之间的连续数据搬运,数据搬运时格式和内容保持不变。

具体支持的数据通路为(以逻辑位置TPosition表示):

  • Unified Buffer -> Unified Buffer
    • VECIN -> VECCALC
    • VECIN -> VECOUT
    • VECCALC -> VECIN
    • VECCALC -> VECOUT
    • VECOUT -> VECIN
    • VECOUT -> VECCALC

搬运的数据用于矢量计算,具体的接口请参考:Copy(UB -> UB连续数据搬运)

src和dst分别为源操作数和目的操作数;count为连续搬运的元素个数。

C++
template <typename T, bool isSetMask = true>
__aicore__ inline void Copy(const LocalTensor<T>& dst, const LocalTensor<T>& src, const uint32_t count)

Copy(UB -> UB掩码式高维数据搬运)

支持Unified Buffer和Unified Buffer之间的数据搬运,数据搬运时格式和内容保持不变,支持mask操作和DataBlock间隔操作。

具体支持的数据通路为(以逻辑位置TPosition表示):

  • Unified Buffer -> Unified Buffer
    • VECIN -> VECCALC
    • VECIN -> VECOUT
    • VECCALC -> VECIN
    • VECCALC -> VECOUT
    • VECOUT -> VECIN
    • VECOUT -> VECCALC

搬运的数据用于矢量计算,具体的接口请参考:Copy(UB -> UB掩码式高维数据搬运)

src和dst分别为源操作数和目的操作数;mask用于控制每次迭代内参与计算的元素;repeatTime为重复迭代次数;repeatParams为CopyRepeatParams类型的搬运参数。

  • mask逐bit模式

    C++
    template <typename T, bool isSetMask = true>
    __aicore__ inline void Copy(const LocalTensor<T>& dst, const LocalTensor<T>& src, const uint64_t mask[], const uint8_t repeatTime, const CopyRepeatParams& repeatParams)
    
  • mask连续模式

    C++
    template <typename T, bool isSetMask = true>
    __aicore__ inline void Copy(const LocalTensor<T>& dst, const LocalTensor<T>& src, const uint64_t mask, const uint8_t repeatTime, const CopyRepeatParams& repeatParams)
    

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