MakeMemPtr【免费下载链接】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 训练系列产品不支持功能说明需要包含的头文件为#include tensor_api/tensor.h。MakeMemPtr用于构造带物理存储位置标记和数据类型信息的内存指针适配器HardwareMemPtr支持的物理位置如下表所示。MakeMemPtr提供三种调用形式指定物理位置和数据类型根据原始地址构造指针。指定物理位置从已有迭代器或指针适配器构造新指针。从已有迭代器或指针适配器中自动推导物理位置。函数原型指定物理位置和数据类型根据原始地址构造template typename Hardware, typename DataType, typename Addr, EnableMakePtrByTraitHardware, Addr Enable __aicore__ inline constexpr auto MakeMemPtr(Addr addr)指定物理位置从已有迭代器构造template typename Hardware, typename Iterator, EnableMakeHardwarePtrHardware, Iterator Enable __aicore__ inline constexpr auto MakeMemPtr(Iterator iterator)从已有迭代器中自动推导物理位置template typename Iterator, EnableMakePtrByIterIterator Enable __aicore__ inline constexpr auto MakeMemPtr(Iterator iterator)参数说明表1支持的物理位置Location说明用途Location::GMGlobal Memory全局内存张量输入输出的主要存储区域Location::L1L1 Buffer一级缓存矩阵搬运和计算前的数据暂存区Location::L0AL0A Buffer矩阵计算左输入缓存Location::L0BL0B Buffer矩阵计算右输入缓存Location::L0ScaleAL0 ScaleA BufferMX矩阵计算ScaleA缓存Location::L0ScaleBL0 ScaleB BufferMX矩阵计算ScaleB缓存Location::L0CL0C Buffer矩阵计算结果缓存Location::UBUnified Buffer统一缓存矢量计算的数据存储区Location::BIASBiasTable Buffer偏置表缓存带偏置矩阵计算的偏置存放区Location::FIXBUFFixpipe BufferFixpipe输出缓存L0C到GM/UB的中转区表2模板参数说明参数名类型描述Hardware输入物理存储位置类型。DataType输入数据类型。Addr输入偏移量数值的类型。Iterator输入迭代器类型或已有指针适配器类型。表3参数说明参数名类型描述addr输入地址偏移量即相对于基地址的偏移大小。iterator输入已有的硬件地址迭代器或指针适配器对象。返回值说明返回HardwareMemPtrPtrPattern, Pointer类型的指针适配器对象其中PtrPattern表示指定或推导得到的物理位置Pointer表示对应地址空间下的指针类型例如__gm__ float*、__cbuf__ half*等。约束说明指定Hardware时必须是受支持的物理位置类型。Iterator需要满足对应构造路径的模板约束。自动推导形式要求输入对象本身已经带有可识别的硬件位置信息。调用示例using namespace AscendC::Te; constexpr uint64_t gmOffset 128; constexpr uint64_t l1Offset 128; constexpr uint64_t l0aOffset 128; constexpr uint64_t ubOffset 128; // 1. 从原始地址构造指定物理位置和数据类型 auto gmPtr MakeMemPtrLocation::GM, float(gmOffset); auto l1Ptr MakeMemPtrLocation::L1, float(l1Offset); auto l0aPtr MakeMemPtrLocation::L0A, half(l0aOffset); auto ubPtr MakeMemPtrLocation::UB, bfloat16_t(ubOffset); // 2. 配合MakeTensor构造张量 auto gmA MakeTensor(gmPtr, MakeFrameLayoutNDExtLayoutPtn, LayoutTraitDefaultfloat(m, n)); auto l1A MakeTensor(l1Ptr, MakeFrameLayoutNZLayoutPtn, LayoutTraitDefaultfloat(m, n)); // 3. 从已有指针适配器继承位置自动推导 auto anotherPtr MakeMemPtr(gmPtr); // 4. 从已有迭代器指定新位置 auto l1FromIter MakeMemPtrLocation::L1(someIterator);【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考