asc.language.basic.data_copy_pad

asc.language.basic.data_copy_pad(dst: LocalTensor, src: GlobalTensor, data_copy_params: DataCopyExtParams, pad_params: DataCopyPadExtParams) None
asc.language.basic.data_copy_pad(dst: GlobalTensor, src: LocalTensor, data_copy_params: DataCopyExtParams) None
asc.language.basic.data_copy_pad(dst: LocalTensor, src: LocalTensor, data_copy_params: DataCopyExtParams, nd2nz_params: Nd2NzParams) None
asc.language.basic.data_copy_pad(dst: LocalTensor, src: GlobalTensor, data_copy_params: DataCopyParams, pad_params: DataCopyPadParams) None
asc.language.basic.data_copy_pad(dst: GlobalTensor, src: LocalTensor, data_copy_params: DataCopyParams) None
asc.language.basic.data_copy_pad(dst: LocalTensor, src: LocalTensor, data_copy_params: DataCopyParams, nd2nz_params: Nd2NzParams) None

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

对应的Ascend C函数原型

通路:Global Memory->Local Memory

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

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

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

通路:Global Memory->Local Memory (DataCopyParams版本)

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 (DataCopyParams版本)

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 (DataCopyParams版本)

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

参数说明

  • dst: 目的操作数,类型为LocalTensor或GlobalTensor。 LocalTensor的起始地址需要保证32字节对齐。 GlobalTensor的起始地址无地址对齐约束。

  • src: 源操作数,类型为LocalTensor或GlobalTensor。 LocalTensor的起始地址需要保证32字节对齐。 GlobalTensor的起始地址无地址对齐约束。

  • dataCopyParams: 搬运参数。 DataCopyExtParams类型:支持更大的操作数步长等参数取值范围 DataCopyParams类型:标准搬运参数

  • padParams: 从Global Memory搬运数据至Local Memory时,用于控制数据填充过程的参数。 DataCopyPadExtParams<T>类型:支持泛型填充值 DataCopyPadParams类型:仅支持uint64_t数据类型且填充值只能为0

  • nd2nzParams: 从VECIN/VECOUT->TSCM进行数据搬运时,用于控制数据格式转换的参数。 Nd2NzParams类型,ndNum仅支持设置为1。

约束说明

  • leftPadding、rightPadding的字节数均不能超过32Bytes。

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

  • 不同产品型号对函数原型的支持存在差异,请参考官方文档选择产品型号支持的函数原型进行开发。

调用示例

GM->VECIN搬运数据并填充:

# 从GM->VECIN搬运,使用DataCopyParams和DataCopyPadParams
src_local = in_queue_src.alloc_tensor(asc.half)
copy_params = asc.DataCopyParams(1, 20 * asc.half.sizeof(), 0, 0)
pad_params = asc.DataCopyPadParams(True, 0, 2, 0)
asc.data_copy_pad(src_local, src_global, copy_params, pad_params)