make_layout

产品支持情况

  • 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

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

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

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

函数原型

template <typename Shape, typename Stride>
__aicore__ inline constexpr auto make_layout(const Shape& shape, const Stride& stride)

template <typename Shape>
__aicore__ inline constexpr auto make_layout(const Shape& shape)

参数说明

表1 模板参数说明

参数名称 类型 描述
Shape 输入 shape的类型,要求为元组(tuple)类型。
Stride 输入 stride的类型,要求为元组(tuple)类型。仅双参数重载包含该模板参数。

表2 参数说明

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

返回值说明

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

约束说明

make_layout构造的layout类型不显式携带LayoutPattern和layout_trait信息。对于shape和stride类型结构可识别的标准布局,可通过get_layout_pattern自动推导LayoutPattern;无法推导或需要显式指定完整类型信息时,请使用make_pattern_layout

调用示例

#include "tensor_api/tensor.h"

using namespace asc::te;

// 示例1:显式指定shape和stride
auto layout1 = make_layout(make_shape(8, 16), make_stride(16, 1));

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

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