MakeLayout

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT 支持

功能说明

需要包含的头文件为:#include "tensor_api/tensor.h"。

MakeLayout用于根据Shape和Stride构造Layout对象,描述数据张量在逻辑维度上的形状以及各维对应的步长信息。

MakeLayout支持以下两种构造方式:

  • 传入shape和stride,直接按用户指定的布局信息构造Layout。
  • 仅传入shape,接口会根据shape自动推导stride并构造紧凑布局。当shape为一维或多维普通元组时,按连续行优先存储方式推导步长。

函数原型

template <typename T, typename U>
__aicore__ inline constexpr auto MakeLayout(const T& shape, const U& stride)

template <typename ShapeType>
__aicore__ inline constexpr auto MakeLayout(const ShapeType& shape)

参数说明

表1 模板参数说明

参数名称 类型 描述
T 输入 shape的类型,要求为元组(tuple)类型。
U 输入 stride的类型,要求为元组(tuple)类型。
ShapeType 输入 单参数重载中shape的类型,要求为元组(tuple)类型。

表2 参数说明

参数名称 输入/输出 描述
shape 输入 描述逻辑形状的元组对象,可由MakeShape构造。
stride 输入 描述各维步长的元组对象,可由MakeStride构造。

返回值说明

  • 返回Layout<Shape, Stride>类型对象。

约束说明

构造的Layout类型不含有LayoutPattern和LayoutTrait信息,需要通过MakePatternLayout造带有完整类型信息的Layout对象。

调用示例

using namespace AscendC::Te;

// 示例1:显式指定Shape和Stride
auto layout1 = MakeLayout(MakeShape(8, 16), MakeStride(16, 1));

// 示例2:仅指定Shape,自动推导连续布局的Stride
auto layout2 = MakeLayout(MakeShape(8, 16, 32));
// 推导得到 stride = (16 * 32, 32, 1) = (512, 32, 1)

// 示例3:嵌套Shape自动推导嵌套Stride
auto layout3 = MakeLayout(MakeShape(MakeShape(2, 4), MakeShape(8, 16)));
// 推导得到stride为嵌套结构,用于描述FrameLayout