L1 Buffer到L0ScaleB 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中的右矩阵缩放数据搬运到L0ScaleB Buffer。右矩阵缩放数据在L0ScaleB Buffer上的首地址由右矩阵在L0B Buffer的首地址的1/16推导出来。该通路的数据类型固定为fp8_e8m0_t。左矩阵和右矩阵的缩放数据的分形排布和缩放计算关系可参考下图其中右矩阵缩放数据是NN的数据格式图1左矩阵和右矩阵缩放数据缩放示意图函数原型执行L1 Buffer到L0ScaleB 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到L0ScaleB Buffer通路可通过MakeCopy(CopyL12L0ScaleB{})或MakeCopy(CopyL12L0ScaleB{}, CopyL12L0ScaleBTraitDefault{})构造。dst输出目的张量存储位置为Location::L0ScaleB数据格式为NN。src输入源张量存储位置为Location::L1数据格式为NN。表2MakeCopy接口参数说明参数名输入/输出描述copyOperation输入搬运操作对象。L1 Buffer到L0ScaleB Buffer通路使用CopyL12L0ScaleB{}。copyTrait输入搬运Trait对象用于指定搬运特性。L1 Buffer到L0ScaleB Buffer默认Trait使用CopyL12L0ScaleBTraitDefault{}。数据类型数据类型仅支持fp8_e8m0_t。源张量和目的张量的基础数据类型需要保持一致。返回值说明Copy无返回值。MakeCopy返回CopyAtom对象。约束说明源张量和目的张量数据格式为NN使用MakeFrameLayoutNNLayoutPtn, _2(...)构造。源地址和目的地址需要满足32Byte对齐要求。调用示例#include tensor_api/tensor.h using namespace AscendC::Te; __aicore__ inline void CopyL1ToL0ScaleBExample() { constexpr uint32_t k 32; constexpr uint32_t n 16; constexpr uint32_t scaleK k / 16; __cbuf__ fp8_e8m0_t l1Buf[scaleK * n]; __cb__ fp8_e5m2_t l0BBuf[k * n]; auto l1Tensor MakeTensor(MakeMemPtr(l1Buf), MakeFrameLayoutNNLayoutPtn, _2(scaleK, n)); // ScaleB地址由右矩阵的L0B Buffer地址按1/16地址编码换算得到。 auto l0ScaleBPtr MakeMemPtrLocation::L0ScaleB, fp8_e8m0_t(reinterpret_castuint64_t(l0BBuf) / 16); auto l0ScaleBTensor MakeTensor(l0ScaleBPtr, MakeFrameLayoutNNLayoutPtn, _2(scaleK, n)); auto copyAtom MakeCopy(CopyL12L0ScaleB{}, CopyL12L0ScaleBTraitDefault{}); Copy(copyAtom, l0ScaleBTensor, l1Tensor); }【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考