Skip to content

GM与UB数据搬运

总体说明

Global Memory(GM)与Unified Buffer(UB)之间的数据搬运提供了多样化的接口,支持丰富的数据搬运场景(见表1)。为实现高效的向量(Vector)计算,系统支持将数据从GM搬运至UB,供Vector计算单元进行向量计算;计算完成后,再将结果从UB搬回GM,完成数据闭环。开发者能够通过灵活配置结构体参数,精确控制数据块数量、每个地址长度及地址间隔等关键属性,实现连续和非连续数据搬运(高维切分数据搬运),充分释放硬件的数据搬运与计算协同能力,显著提升向量算子的执行效率与整体性能。

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

数据通路功能描述
GM->UB连续数据搬运(DataCopy)提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续数据搬运。
UB->GM连续数据搬运(DataCopy)提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续数据搬运。
GM->UB高维切分数据搬运(DataCopy)提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续和非连续的数据搬运。
UB->GM高维切分数据搬运(DataCopy)提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续和非连续的数据搬运。
GM->UB切片数据搬运(DataCopy)该接口为软仿接口,支持数据的切片搬运,提取多维Tensor数据的子集进行搬运。
UB->GM切片数据搬运(DataCopy)该接口为软仿接口,支持数据的切片搬运,提取多维Tensor数据的子集进行搬运。
GM->UB随路转换ND2NZ搬运(DataCopy)该接口为软仿接口,支持在从Global Memory到Unified Buffer的数据搬运过程中进行ND到NZ格式的转换。
UB->GM随路转换NZ2ND搬运(DataCopy)该接口为软仿接口,支持在从Unified Buffer到Global Memory的数据搬运过程中进行NZ到ND格式的转换。
GM->UB多维数据搬运NDDMA(DataCopy)多维数据搬运接口,相比于基础数据搬运接口,可更加自由配置搬入的维度信息以及对应的Stride。
GM->UB非对齐数据搬运(DataCopyPad)支持数据的非对齐搬运,搬运到UB时可以自行填充数据。
UB->GM非对齐数据搬运(DataCopyPad)支持数据的非对齐搬运。

DataCopy(GM与UB连续数据搬运)

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

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

  • Global Memory -> Unified Buffer
    • GM -> VECIN
  • Unified Buffer -> Global Memory
    • VECOUT -> GM
    • CO2 -> GM(仅Atlas 推理系列产品AI Core支持)

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

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

  • Global Memory -> Unified Buffer

    C++
    template <typename T>
    __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const uint32_t count)
    
  • Unified Buffer -> Global Memory

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

DataCopy(GM与UB高维切分数据搬运)

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

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

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

  • Global Memory -> Unified Buffer
    • GM -> VECIN
  • Unified Buffer -> Global Memory
    • VECOUT -> GM
    • CO2 -> GM(仅Atlas 推理系列产品AI Core支持)

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

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

  • Global Memory -> Unified Buffer

    C++
    template <typename T>
    __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const DataCopyParams& repeatParams)
    
  • Unified Buffer -> Global Memory

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

DataCopy(GM与UB切片数据搬运)

该接口为软仿接口,从易用性角度出发进行设计,支持数据的切片搬运,提取多维Tensor数据的子集进行搬运。

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

  • Global Memory -> Unified Buffer
    • GM -> VECIN
  • Unified Buffer -> Global Memory
    • VECOUT -> GM
    • CO2 -> GM(仅Atlas 推理系列产品AI Core支持)

搬运的数据用于矢量计算,具体的接口请参考:DataCopy(GM与UB切片数据搬运)

src和dst分别为源操作数和目的操作数;dstSliceInfo和srcSliceInfo分别为目的和源操作数的切片信息,类型为SliceInfo;dimValue为操作数维度信息。

  • Global Memory -> Unified Buffer

    C++
    template <typename T>
    __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const SliceInfo dstSliceInfo[], const SliceInfo srcSliceInfo[], const uint32_t dimValue = 1)
    
  • Unified Buffer -> Global Memory

    C++
    template <typename T>
    __aicore__ inline void DataCopy(const GlobalTensor<T> &dst, const LocalTensor<T> &src, const SliceInfo dstSliceInfo[], const SliceInfo srcSliceInfo[], const uint32_t dimValue = 1)
    

DataCopy(GM -> UB随路转换ND2NZ搬运)

该接口为软仿接口,从易用性角度出发进行设计,支持在从Global Memory到Unified Buffer的数据搬运过程中进行ND到NZ格式的转换。

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

  • Global Memory -> Unified Buffer
    • GM -> VECIN

搬运的数据用于矢量计算,具体的接口请参考:DataCopy(GM -> UB随路转换ND2NZ搬运)

src和dst分别为源操作数和目的操作数;intriParams为Nd2NzParams类型的搬运参数,配置ND到NZ格式转换信息。

  • 不支持enableSmallC0模式

    C++
    template <typename T>
    __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const Nd2NzParams& intriParams)
    
  • 支持enableSmallC0模式(仅Ascend 950PR/Ascend 950DT支持)

    C++
    template <typename T, bool enableSmallC0 = false>
    __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const Nd2NzParams& intriParams)
    

DataCopy(UB -> GM随路转换NZ2ND搬运)

该接口为软仿接口,从易用性角度出发进行设计,支持在从Unified Buffer到Global Memory的数据搬运过程中进行NZ到ND格式的转换。

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

  • Unified Buffer -> Global Memory
    • VECOUT -> GM
    • CO2 -> GM(仅Atlas 推理系列产品AI Core支持)

搬运的数据用于矢量计算,具体的接口请参考:DataCopy(UB->GM随路转换NZ2ND搬运)

src和dst分别为源操作数和目的操作数;intriParams为Nz2NdParamsFull类型的搬运参数,配置NZ到ND格式转换信息。

C++
template <typename T>
__aicore__ inline void DataCopy(const GlobalTensor<T>& dst, const LocalTensor<T>& src, const Nz2NdParamsFull& intriParams)

DataCopy(GM -> UB多维数据搬运NDDMA)

多维数据搬运接口,相比于基础数据搬运接口,可更加自由配置搬入的维度信息以及对应的Stride。

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

  • Global Memory -> Unified Buffer
    • GM -> VECIN

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

src和dst分别为源操作数和目的操作数;params为NdDmaParams类型的搬运参数,配置多维度搬运信息。

  • Global Memory -> Unified Buffer,支持多维度搬运

    C++
    template <typename T, uint8_t dim, const NdDmaConfig& config = kDefaultNdDmaConfig>
    __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const NdDmaParams<T, dim>& params)
    
  • NDDMA Cache刷新

    C++
    __aicore__ inline void NdDmaDci()
    

DataCopyPad(GM -> UB非对齐数据搬运)

该接口提供将数据从Global Memory非对齐搬运至Unified Buffer的功能,可以根据开发者的需要自行填充数据。当每个搬运的数据块长度(blockLen)非32字节对齐时,每一个数据块都需要填充数据至32字节对齐。

特别地,针对Ascend 950PR/Ascend 950DT,支持Compact模式,该模式支持单个数据块非32字节对齐,将所有数据块合并成一个连续数据块,在该数据块右侧填充数据至32字节对齐。

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

  • Global Memory -> Unified Buffer
    • GM -> VECIN
    • GM -> VECOUT
    • GM -> VECCALC(仅Ascend 950PR/Ascend 950DT支持)

搬运的数据用于矢量计算,具体的接口请参考:DataCopyPad(GM -> UB非对齐数据搬运)

src和dst分别为源操作数和目的操作数;dataCopyParams为DataCopyExtParams类型的搬运参数;padParams为DataCopyPadExtParams类型的填充控制参数。

  • 不支持配置设置数据搬运模式mode

    C++
    template <typename T>
    __aicore__ inline void DataCopyPad(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const DataCopyExtParams& dataCopyParams, const DataCopyPadExtParams<T>& padParams)
    
  • 支持配置设置数据搬运模式mode(仅Ascend 950PR/Ascend 950DT支持)

    C++
    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)
    

DataCopyPad(UB -> GM非对齐数据搬运)

该接口提供将数据从Unified Buffer非对齐搬运至Global Memory的功能。

对于非32字节对齐的场景,在读取Unified Buffer数据时会填入dummy假数据对齐到32B,搬入Global Memory时会将dummy空数据丢弃,从而实现Unified Buffer到Global Memory的非对齐搬运。

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

  • Unified Buffer -> Global Memory
    • VECIN -> GM
    • VECOUT -> GM

搬运的数据用于矢量计算,具体的接口请参考:DataCopyPad(UB -> GM非对齐数据搬运)

src和dst分别为源操作数和目的操作数;dataCopyParams为DataCopyExtParams类型的搬运参数。

  • 不支持配置设置数据搬运模式mode

    C++
    template <typename T>
    __aicore__ inline void DataCopyPad(const GlobalTensor<T>& dst, const LocalTensor<T>& src, const DataCopyExtParams& dataCopyParams)
    
  • 支持配置设置数据搬运模式mode(仅Ascend 950PR/Ascend 950DT支持)

    C++
    template <typename T, PaddingMode mode = PaddingMode::Normal>
    __aicore__ inline void DataCopyPad(const GlobalTensor<T>& dst, const LocalTensor<T>& src, const DataCopyExtParams& dataCopyParams)
    

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