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