CANN/asc-devkit L1到BiasTable数据搬运
L1 Buffer到BiasTable Buffer数据搬运【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持Atlas 200I/500 A2 推理产品不支持Atlas 推理系列产品AI Core不支持Atlas 推理系列产品Vector Core不支持Atlas 训练系列产品不支持功能说明头文件路径为tensor_api/tensor.h。Tensor API通过Copy接口统一执行不同通路数据搬运。该接口用于将L1 Buffer中的bias数据搬运到BiasTable Buffer作为Mmad计算中的bias输入。接口支持batch模式。batch模式用于一次完成多块bias数据的搬运。Layout在原Layout最外层增加Batch维度可通过MakeFrameLayoutNDLayoutPtn(batch, 1, n)或MakeFrameLayoutNDExtLayoutPtn(batch, 1, n)构造。函数原型执行L1 Buffer到BiasTable Buffer的数据搬运。template typename AtomType, typename DstTensor, typename SrcTensor __aicore__ inline void Copy(const CopyAtomAtomType atomCopy, const DstTensor dst, const SrcTensor src)构造默认搬运原子对象。template typename CopyOperationType __aicore__ inline constexpr auto MakeCopy(const CopyOperationType copyOperation)构造指定Trait的搬运原子对象。template typename CopyOperationType, typename CopyTraitType __aicore__ inline constexpr auto MakeCopy(const CopyOperationType copyOperation, const CopyTraitType copyTrait)参数说明表1Copy接口参数说明参数名输入/输出描述atomCopy输入搬运原子对象L1 Buffer到BiasTable Buffer通路可通过MakeCopy(CopyL12BT{})或MakeCopy(CopyL12BT{}, CopyL12BTTraitDefault{})构造。dst输出目的张量存储位置为Location::BIAS数据格式为ND。src输入源张量存储位置为Location::L1数据格式为ND。表2MakeCopy接口参数说明参数名输入/输出描述copyOperation输入搬运操作对象L1 Buffer到BiasTable Buffer通路使用CopyL12BT{}。copyTrait输入搬运Trait对象用于指定搬运特性。L1 Buffer到BiasTable Buffer通路默认Trait使用CopyL12BTTraitDefault{}。数据类型支持的目的张量和源张量的数据类型组合如下表3支持的数据类型组合目的张量数据类型源张量数据类型floatbfloat16_tfloathalffloatfloatint32_tint32_t返回值说明Copy无返回值。MakeCopy返回CopyAtom对象。约束说明源张量内存地址和大小需要满足32Byte对齐要求。目的张量内存地址和大小需要满足64Byte对齐要求。由于BiasTable Buffer大小为4KB因此每次搬运最多4KB数据。batch模式要求源张量和目的张量Batch数量一致。batch模式下如果Global Memory上的Shape大小非对齐由于L1 Buffer和BiasTable Buffer上有数据对齐要求源张量和目的张量列方向Shape大小必须按32Byte对齐。调用示例#include tensor_api/tensor.h using namespace AscendC::Te; __aicore__ inline void CopyL1ToBTExample() { using SrcType half; using DstType float; constexpr uint32_t n 16; __cbuf__ SrcType l1Buf[n]; __biasbuf__ DstType btBuf[n]; auto l1Tensor MakeTensor(MakeMemPtr(l1Buf), MakeFrameLayoutNDExtLayoutPtn(1, n)); auto btTensor MakeTensor(MakeMemPtr(btBuf), MakeFrameLayoutNDExtLayoutPtn(1, n)); auto copyAtom MakeCopy(CopyL12BT{}, CopyL12BTTraitDefault{}); Copy(copyAtom, btTensor, l1Tensor); }batch模式调用示例#include tensor_api/tensor.h using namespace AscendC::Te; __aicore__ inline void CopyBatchL1ToBTExample() { using SrcType half; using DstType float; constexpr uint32_t batch 2; constexpr uint32_t n 15; // batch模式下源/目的张量列方向Shape需按C0_SIZE32Byte对齐 // 分别向上对齐到C0_ELEMENTsrcType 和C0_ELEMENTdstType。 constexpr uint32_t srcN Std::ceil_align(n, Std::IntC0_ELEMENTSrcType{}); constexpr uint32_t dstN Std::ceil_align(n, Std::IntC0_ELEMENTDstType{}); __cbuf__ SrcType l1Buf[batch * srcN]; __biasbuf__ DstType btBuf[batch * dstN]; auto l1Tensor MakeTensor(MakeMemPtr(l1Buf), MakeFrameLayoutNDExtLayoutPtn(batch, 1, srcN)); auto btTensor MakeTensor(MakeMemPtr(btBuf), MakeFrameLayoutNDExtLayoutPtn(batch, 1, dstN)); auto copyAtom MakeCopy(CopyL12BT{}, CopyL12BTTraitDefault{}); Copy(copyAtom, btTensor, l1Tensor); }【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考