CANN/asc-devkit:Ascend C Tensor布局构造API
MakeFrameLayout【免费下载链接】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。MakeFrameLayout用于根据标准分形排布模式构造带类型信息的Layout对象。该接口接收矩阵的行数、列数结合指定的LayoutPattern排布模式和LayoutTrait布局特征参数计算Shape和Stride构造Layout对象。该接口也支持在矩阵维度前传入Batch维度用于构造多Batch矩阵的Layout。LayoutPattern决定数据在内存中的分形排列方式不同存储位置间的搬运和计算操作要求源/目的张量满足特定的LayoutPattern组合。函数原型template typename LayoutPattern, typename TraitType, typename... Args __aicore__ inline constexpr decltype(auto) MakeFrameLayout(const Args... args)常用调用形式如下。// 构造单个矩阵Layoutm为行数n为列数。 auto layout MakeFrameLayoutLayoutPattern, TraitType(m, n); // 构造Batch矩阵Layoutbatch为矩阵个数m为单个矩阵的行数n为单个矩阵的列数。 auto batchLayout MakeFrameLayoutLayoutPattern, TraitType(batch, m, n);LayoutTrait的指定方式LayoutTrait用于指定数据类型和C0维度基数。MakeFrameLayout支持以下四种传递方式LayoutTraitDefault指定数据类型TC0自动计算。MakeFrameLayoutNZLayoutPtn, LayoutTraitDefaultfloat(m, n)_C0直接指定C0维度的元素个数数据类型为Std::Int。_C0是Std::IntC0的简写形式。MakeFrameLayoutNZLayoutPtn, _16(m, n)不传入Trait在分形构造和Trait无关或Trait值固定的场景下不传入Trait内部根据LayoutPattern查找对应的默认Trait。这样的分形有NDLayoutPtn、DNLayoutPtn、DNExtLayoutPtn、NDExtLayoutPtn、ScaleANDLayoutPtn、ScaleADNLayoutPtn、ScaleBNDLayoutPtn、ScaleBDNLayoutPtn。MakeFrameLayoutNDLayoutPtn(m, n)自定义Trait传入传入一个自定义的Trait类型。适用于需要显式描述数据类型、C0大小或其他布局特征且现有默认Trait、_C0或固定默认Trait都无法满足需求的场景。自定义Trait需要满足底层布局推导所要求的类型约定。struct MyLayoutTrait { using type float; static constexpr auto C0_ELEMENT Std::Int16{}; }; MakeFrameLayoutNZLayoutPtn, MyLayoutTrait(m, n)参数说明参数名输入/输出描述LayoutPattern输入布局模式模板参数。支持的LayoutPattern及数据排布格式见Layout和层次化表述法。TraitType输入布局特征类型默认内部根据LayoutPattern自动推导。支持上述四种传递方式。Args输入构造参数。常见为矩阵的行数m和列数nBatch模式为batch、m、n。各LayoutPattern的构造参数数量可能不同。返回值说明返回LayoutShapeType, StrideType, Std::tupleLayoutPattern, TraitType类型的对象其中ShapeType和StrideType由LayoutPattern和构造参数在编译期推导。约束说明LayoutPattern必须是已支持的排布模式之一不支持的模式会触发编译期报错。构造参数的个数和含义由LayoutPattern决定。常见二维场景传入(m, n)即可。Batch模式传入(batch, m, n)其中m和n表示单个矩阵的行数和列数batch表示连续排布的矩阵个数。TraitType必须为整型常量、TraitType类型或具体数据类型不支持的类型会触发编译期报错。调用示例using namespace AscendC::Te; // 构造GM端ND布局张量 auto layoutGM MakeFrameLayoutNDExtLayoutPtn, LayoutTraitDefaultfloat(m, n); auto gmTensor MakeTensor(MakeMemPtrLocation::GM(gmAddr), layoutGM); // 构造L1端NZ布局张量L0A/L0B搬运的标准格式 auto layoutL1 MakeFrameLayoutNZLayoutPtn, float(m, n); auto l1Tensor MakeTensor(MakeMemPtrLocation::L1(l1Addr), layoutL1); // 使用默认Trait构造NZ布局 auto layoutNZ MakeFrameLayoutNZLayoutPtn(m, n); auto l1TensorNZ MakeTensor(MakeMemPtrLocation::L1(l1Addr), layoutNZ); // 指定C0元素数构造 auto layoutC0 MakeFrameLayoutNZLayoutPtn, _16(m, n); auto l1TensorC0 MakeTensor(MakeMemPtrLocation::L1(l1Addr), layoutC0); // 自定义Trait构造 struct MyLayoutTrait { using type float; static constexpr auto C0_ELEMENT Std::Int16{}; }; auto layoutCustom MakeFrameLayoutNZLayoutPtn, MyLayoutTrait(m, n); // 构造Batch矩阵布局 auto layoutBatchNZ MakeFrameLayoutNZLayoutPtn, float(batch, m, n); auto l1BatchTensor MakeTensor(MakeMemPtrLocation::L1(l1Addr), layoutBatchNZ); // 构造MX场景的scale Batch布局 auto layoutBatchScaleA MakeFrameLayoutScaleANDLayoutPtn(batch, scaleM, scaleK); auto gmScaleTensor MakeTensor(MakeMemPtrLocation::GM(scaleAddr), layoutBatchScaleA);【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考