MakeLayout
产 品 支 持 情 况
| 产 品 | 是 否 支 持 |
|---|---|
| Ascend 950PR/Ascend 950DT | 支 持 |
功 能 说 明
需 要 包 含 的 头 文 件 为:#include "tensor_api/tensor.h"。
MakeLayout用 于 根 据Shape和Stride构 造Layout对 象,描 述 数 据 张 量 在 逻 辑 维 度 上 的 形 状 以 及 各 维 对 应 的 步 长 信 息。
MakeLayout支 持 以 下 两 种 构 造 方 式:
- 传 入shape和stride,直 接 按 用 户 指 定 的 布 局 信 息 构 造Layout。
- 仅 传 入shape,接 口 会 根 据shape自 动 推 导stride并 构 造 紧 凑 布 局。当shape为 一 维 或 多 维 普 通 元 组 时,按 连 续 行 优 先 存 储 方 式 推 导 步 长。
函 数 原 型
C++
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对 象。
调 用 示 例
C++
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