CANN/Ascend C L1到L0B数据搬运
L1 Buffer到L0B 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中的右矩阵数据搬运到L0B Buffer。该通路以512Byte数据分形为基本搬运单位。不同数据类型对应的分形矩阵形态如下数据位宽分形矩阵形态b464 * 16b832 * 16b1616 * 16b328 * 16接口支持非转置搬运和转置搬运。源张量和目的张量的Layout需要匹配当前通路支持的格式组合。接口支持Batch模式。Batch模式下源张量和目的张量的Layout需要在原有分形Layout最前面增加Batch维Shape形态为(B, 单矩阵Shape)其中B表示Batch数量。用户可使用MakeFrameLayoutZNLayoutPtn, DataType(B, k, n)或MakeFrameLayoutNZLayoutPtn, DataType(B, k, n)构造带Batch维的Layout。函数原型执行L1 Buffer到L0B 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到L0B Buffer通路可通过MakeCopy(CopyL12L0B{})或MakeCopy(CopyL12L0B{}, CopyL12L0BTraitDefault{})构造。dst输出目的张量存储位置必须为Location::L0B。src输入源张量存储位置必须为Location::L1。表2MakeCopy接口参数说明参数名输入/输出描述copyOperation输入搬运操作对象。L1 Buffer到L0B Buffer通路使用CopyL12L0B{}。copyTrait输入搬运Trait对象用于指定搬运特性。L1 Buffer到L0B Buffer默认Trait使用CopyL12L0BTraitDefault{}。数据类型支持的数据类型包括fp4x2_e2m1_t、fp4x2_e1m2_t、int8_t、uint8_t、hifloat8_t、fp8_e5m2_t、fp8_e4m3fn_t、half、bfloat16_t、int16_t、uint16_t、int32_t、uint32_t、float。源张量和目的张量的数据类型需要保持一致。返回值说明Copy无返回值。MakeCopy返回CopyAtom对象。约束说明目的地址位于L0B Buffer时起始地址需要满足512Byte对齐要求。源地址位于L1 Buffer时起始地址需要满足32Byte对齐要求。特殊数据类型约束L1 Buffer到L0B Buffer通路使能转置时即NZ2ZN支持的数据类型约束如下b32数据类型要求源矩阵Shape在K轴方向16对齐。b8数据类型要求源矩阵Shape在M轴方向32对齐。b4数据类型要求源矩阵Shape在M轴方向64对齐。Batch模式要求源张量和目的张量的Batch数量一致且在L1 Buffer和L0B Buffer上张量数据连续排布。关键特性说明非转置搬运当源张量和目的张量数据格式均为ZN时接口按非转置方式从L1 Buffer搬运到L0B Buffer。图1非转置搬运示意图转置搬运当源张量数据格式为NZ、目的张量数据格式为ZN时接口按转置方式搬运。转置搬运会对源张量每个分形矩阵执行转置。不同数据位宽的转置搬运示意如下。b4转置搬运图2b4转置搬运示意图b8转置搬运图3b8转置搬运示意图b16转置搬运图4b16转置搬运示意图b32转置搬运图5b32转置搬运示意图Batch搬运当源张量和目的张量均使用带Batch维的Layout时Copy接口会按照Batch维描述的数据范围完成L1 Buffer到L0B Buffer的数据搬运。非转置搬运时源张量、目的张量均为ZN格式转置搬运时源张量为NZ格式目的张量为ZN格式。调用示例#include tensor_api/tensor.h using namespace AscendC::Te; __aicore__ inline void CopyL1ToL0BExample() { using BType half; constexpr uint32_t k 16; constexpr uint32_t n 16; __cbuf__ BType l1Buf[k * n]; __cb__ BType l0bBuf[k * n]; auto l1Tensor MakeTensor(MakeMemPtr(l1Buf), MakeFrameLayoutZNLayoutPtn, BType(k, n)); auto l0bTensor MakeTensor(MakeMemPtr(l0bBuf), MakeFrameLayoutZNLayoutPtn, BType(k, n)); auto copyAtom MakeCopy(CopyL12L0B{}, CopyL12L0BTraitDefault{}); Copy(copyAtom, l0bTensor, l1Tensor); }Batch模式示例如下。#include tensor_api/tensor.h using namespace AscendC::Te; __aicore__ inline void CopyL1ToL0BBatchExample() { using BType half; constexpr uint32_t batch 2; constexpr uint32_t k 16; constexpr uint32_t n 16; __cbuf__ BType l1Buf[batch * k * n]; __cb__ BType l0bBuf[batch * k * n]; auto layout MakeFrameLayoutZNLayoutPtn, BType(batch, k, n); auto l1Tensor MakeTensor(MakeMemPtr(l1Buf), layout); auto l0bTensor MakeTensor(MakeMemPtr(l0bBuf), layout); auto copyAtom MakeCopy(CopyL12L0B{}, CopyL12L0BTraitDefault{}); Copy(copyAtom, l0bTensor, l1Tensor); }【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考