Skip to content

L1或L0C与UB数据搬运

总体说明

L1 Buffer/L0C Buffer与Unified Buffer之间的数据搬运提供了灵活的接口支持,能够充分适配多样化的计算场景(见表1)。其中,Unified Buffer->L1 Buffer的数据搬运用于矩阵计算(参考矩阵计算的搬入),L0C Buffer->Unified Buffer、L1 Buffer->Unified Buffer用于将矩阵计算结果搬出,完成矩阵计算的输出流程(参考矩阵计算的搬出)。

表 1 L1 Buffer/L0C Buffer与Unified Buffer数据搬运接口概述

数据通路功能描述
Unified Buffer->L1 Buffer连续数据搬运(DataCopy)提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续数据搬运。
Unified Buffer->L1 Buffer高维切分数据搬运(DataCopy)提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续和非连续的数据搬运。
Unified Buffer->L1 Buffer随路转换-ND2NZ搬运(DataCopy)支持在数据搬运时进行NDNZ格式的转换。
Unified Buffer->L1 Buffer非对齐数据搬运(DataCopyPad)支持数据非对齐搬运,可以根据开发者的需要自行填充数据。
L0C Buffer->Unified Buffer随路转换与量化(DataCopy)支持多种随路能力的组合,DataCopy接口内包含了设置寄存器与数据搬运能力。
L0C Buffer->Unified Buffer随路量化激活搬运(FixPipe)支持多种随路能力的组合,FixPipe接口内包含了设置寄存器与数据搬运能力。
L1 Buffer->Unified Buffer连续数据搬运(DataCopyL1ToUB)提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续数据搬运。
L1 Buffer->Unified Buffer高维切分数据搬运(DataCopyL1ToUB)提供基础的数据搬运能力,数据在传输过程中保持原始格式和内容不变,支持连续和非连续的数据搬运。

DataCopy(UBToL1连续数据搬运)

DataCopy能够实现Unified Buffer到L1 Buffer的连续数据搬运,数据搬运时格式和内容保持不变。

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

  • Unified Buffer -> L1 Buffer
    • UB -> C1

搬运的数据用于矩阵计算,接口具体介绍请参考:DataCopy(UBToL1连续数据搬运)

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

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

DataCopy(UBToL1高维切分数据搬运)

DataCopy能够实现Unified Buffer到L1 Buffer的连续数据搬运和非连续数据搬运,数据搬运时格式和内容保持不变。

高维切分是指能够通过配置数据块个数、单个数据块长度、地址偏移等搬运参数实现非连续搬运。

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

  • Unified Buffer -> L1 Buffer
    • UB -> C1

搬运的数据用于矩阵计算,接口具体介绍请参考:DataCopy(UBToL1高维切分数据搬运)

src和dst分别为源操作数和目的操作数;repeatParams为搬运参数。

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

DataCopy(UBToL1随路转换-ND2NZ搬运)

该接口主要实现将数据从Unified Buffer搬运至L1 Buffer,并支持在数据搬运时进行NDNZ格式的转换。

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

  • Unified Buffer -> L1 Buffer
    • UB -> C1

搬运的数据用于矩阵计算,接口具体介绍请参考:DataCopy(UBToL1随路转换-ND2NZ搬运)

src和dst分别为源操作数和目的操作数;intriParams为ND2NZ搬运配置参数。

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

DataCopyPad(UBToL1非对齐数据搬运)

该接口主要实现将数据从Unified Buffer搬运至L1 Buffer,并支持在数据搬运时提供非对齐数据搬运功能,可以根据开发者的需要自行填充数据。

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

  • Unified Buffer -> L1 Buffer
    • UB -> C1

搬运的数据用于矩阵计算,接口具体介绍请参考:DataCopyPad(UBToL1非对齐数据搬运)

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

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

DataCopy(L0CToUB随路量化激活搬运)

该接口主要实现将数据从L0C Buffer搬运至Unified Buffer,并支持多种随路能力的组合,接口内包含了设置寄存器与数据搬运能力。

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

  • L0C Buffer -> Unified Buffer
    • CO1 -> UB

搬运的数据为矩阵计算的结果,接口具体介绍请参考:DataCopy(L0C到UB数据搬运)

该接口仅Atlas 推理系列产品AI Core支持。

src和dst分别为源操作数和目的操作数;intriParams和enhancedParams为搬运参数。

  • 源操作数和目的操作数类型一致

    C++
    template <typename T>
    __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const LocalTensor<T>& src, const DataCopyParams& intriParams, const DataCopyEnhancedParams& enhancedParams)
    
  • 源操作数和目的操作数类型不一致

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

Fixpipe(L0CToUB随路量化激活搬运)

该接口主要实现将数据从L0C Buffer搬运至Unified Buffer,并支持多种随路能力的组合,接口内包含了设置寄存器与数据搬运能力。

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

  • L0C Buffer -> Unified Buffer
    • CO1 -> UB

搬运的数据为矩阵计算的结果,以Ascend 950PR/Ascend 950DT为例,接口示例如下:

注意,不同产品型号的接口原型可能不同,具体介绍请参考:Fixpipe(L0C到UB数据搬运)

src和dst分别为源操作数和目的操作数;intriParams为搬运参数,cbufWorkspace为开启tensor量化时所需的量化参数。

  • 不开启随路tensor量化功能:

    C++
    template <typename T, typename U, const FixpipeConfig& config = CFG_ROW_MAJOR>
    __aicore__ inline void Fixpipe(const LocalTensor<T>& dst, const LocalTensor<U>& src, const FixpipeParamsArch3510<config.format>& intriParams)
    
  • 开启随路tensor量化功能:

    C++
    template <typename T, typename U, const FixpipeConfig& config = CFG_ROW_MAJOR>
    __aicore__ inline void Fixpipe(const LocalTensor<T>& dst, const LocalTensor<U>& src, const LocalTensor<uint64_t>& cbufWorkspace, const FixpipeParamsArch3510<config.format>& intriParams)
    

DataCopyL1ToUB(L1ToUB连续数据搬运)

DataCopyL1ToUB能够实现L1 Buffer到Unified Buffer的连续数据搬运,数据搬运时格式和内容保持不变。

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

  • L1 Buffer -> Unified Buffer
    • C1 -> UB

搬运的数据用于矩阵计算,接口具体介绍请参考:DataCopyL1ToUB(L1到UB数据搬运)

该接口仅Ascend 950PR/Ascend 950DT支持。

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

C++
template <typename T, uint8_t subBlockId = 0>
__aicore__ inline void DataCopyL1ToUB(const LocalTensor<T>& dst, const LocalTensor<T>& src, const uint32_t count)

DataCopyL1ToUB(L1ToUB高维切分数据搬运)

DataCopyL1ToUB能够实现L1 Buffer到Unified Buffer的连续数据搬运和非连续数据搬运,数据搬运时格式和内容保持不变。

高维切分是指能够通过配置数据块个数、单个数据块长度、地址偏移等搬运参数实现非连续搬运。

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

  • L1 Buffer -> Unified Buffer
    • C1 -> UB

搬运的数据用于矩阵计算,接口具体介绍请参考:DataCopyL1ToUB(L1到UB数据搬运)

该接口仅Ascend 950PR/Ascend 950DT支持。

src和dst分别为源操作数和目的操作数;repeatParams为搬运参数。

C++
template <typename T, uint8_t subBlockId = 0>
__aicore__ inline void DataCopyL1ToUB(const LocalTensor<T>& dst, const LocalTensor<T>& src, const DataCopyParams& repeatParams)

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