MakeFrameLayout
产 品 支 持 情 况
| 产 品 | 是 否 支 持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
功 能 说 明
需 要 包 含 的 头 文 件 为:#include "tensor_api/tensor.h"。
MakeFrameLayout用 于 根 据 标 准 分 形 排 布 模 式 构 造 带 类 型 信 息 的Layout对 象。该 接 口 接 收 矩 阵 的 行 数、列 数,结 合 指 定 的LayoutPattern(排 布 模 式)和LayoutTrait(布 局 特 征 参 数)计 算Shape和Stride,构 造Layout对 象。
LayoutPattern决 定 数 据 在 内 存 中 的 分 形 排 列 方 式,不 同 存 储 位 置 间 的 搬 运 和 计 算 操 作 要 求 源/目 的 张 量 满 足 特 定 的LayoutPattern组 合。
函 数 原 型
template <typename LayoutPattern, typename TraitType, typename... Args>
__aicore__ inline constexpr decltype(auto) MakeFrameLayout(const Args&... args)
LayoutTrait的 指 定 方 式
LayoutTrait用 于 指 定 数 据 类 型 和C0维 度 基 数。MakeFrameLayout支 持 以 下 四 种 传 递 方 式:
LayoutTraitDefault
:指 定 数 据 类 型T,C0自 动 计 算。 C++MakeFrameLayout<NZLayoutPtn, LayoutTraitDefault<float>>(m, n)_C0:直 接 指 定C0维 度 的 元 素 个 数,数 据 类 型 为Int。_C0是Std::Int
的 简 写 形 式。 C++MakeFrameLayout<NZLayoutPtn, _16>(m, n)不 传 入Trait:在 分 形 构 造 和Trait无 关,或Trait值 固 定 的 场 景 下,不 传 入Trait,内 部 根 据LayoutPattern查 找 对 应 的 默 认Trait。这 样 的 分 形 有NDLayoutPtn、DNLayoutPtn、DNExtLayoutPtn、NDExtLayoutPtn、ScaleANDLayoutPtn、ScaleADNLayoutPtn、ScaleBNDLayoutPtn、ScaleBDNLayoutPtn。
C++MakeFrameLayout<NDLayoutPtn>(m, n)自 定 义Trait传 入:传 入 一 个 自 定 义 的Trait类 型。适 用 于 需 要 显 式 描 述 数 据 类 型、C0大 小 或 其 他 布 局 特 征,且 现 有 默 认Trait、_C0或 固 定 默 认Trait都 无 法 满 足 需 求 的 场 景。自 定 义Trait需 要 满 足 底 层 布 局 推 导 所 要 求 的 类 型 约 定。
C++struct MyLayoutTrait { using DataType = float; static constexpr auto C0_SIZE = Std::Int<16>{}; }; MakeFrameLayout<NZLayoutPtn, MyLayoutTrait>(m, n)
参 数 说 明
| 参 数 名 | 输 入/输 出 | 描 述 |
|---|---|---|
| LayoutPattern | 输 入 | 布 局 模 式 模 板 参 数。支 持 的LayoutPattern及 数 据 排 布 格 式 见Layout和 层 次 化 表 述 法。 |
| TraitType | 输 入 | 布 局 特 征 类 型,默 认 内 部 根 据LayoutPattern自 动 推 导。支 持 上 述 四 种 传 递 方 式。 |
| Args | 输 入 | 构 造 参 数。常 见 为 矩 阵 的 行 数m和 列 数n。各LayoutPattern的 构 造 参 数 数 量 可 能 不 同。 |
返 回 值 说 明
返 回Layout<ShapeType, StrideType, Std::tuple<LayoutPattern, TraitType>>类 型 的 对 象,其 中ShapeType和StrideType由LayoutPattern和 构 造 参 数 在 编 译 期 推 导。
约 束 说 明
- LayoutPattern必 须 是 已 支 持 的 排 布 模 式 之 一,不 支 持 的 模 式 会 触 发 编 译 期 报 错。
- 构 造 参 数 的 个 数 和 含 义 由LayoutPattern决 定。常 见 二 维 场 景 传 入(m, n)即 可。
- TraitType必 须 为 整 型 常 量、TraitType类 型 或 具 体 数 据 类 型,不 支 持 的 类 型 会 触 发 编 译 期 报 错。
调 用 示 例
using namespace AscendC::Te;
// 构 造GM端ND布 局 张 量
auto layoutGM = MakeFrameLayout<NDExtLayoutPtn, LayoutTraitDefault<float>>(m, n);
auto gmTensor = MakeTensor(MakeMemPtr<Location::GM>(gmAddr), layoutGM);
// 构 造L1端NZ布 局 张 量(L0A/L0B搬 运 的 标 准 格 式)
auto layoutL1 = MakeFrameLayout<NZLayoutPtn, float>(m, n);
auto l1Tensor = MakeTensor(MakeMemPtr<Location::L1>(l1Addr), layoutL1);
// 使 用 默 认Trait构 造NZ布 局
auto layoutNZ = MakeFrameLayout<NZLayoutPtn>(m, n);
auto l1TensorNZ = MakeTensor(MakeMemPtr<Location::L1>(l1Addr), layoutNZ);
// 指 定C0元 素 数 构 造
auto layoutC0 = MakeFrameLayout<NZLayoutPtn, _16>(m, n);
auto l1TensorC0 = MakeTensor(MakeMemPtr<Location::L1>(l1Addr), layoutC0);
// 自 定 义Trait构 造
struct MyLayoutTrait {
using DataType = float;
static constexpr auto C0_SIZE = Std::Int<16>{};
};
auto layoutCustom = MakeFrameLayout<NZLayoutPtn, MyLayoutTrait>(m, n);