Skip to content
版 本

MakeFrameLayout

产 品 支 持 情 况

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

功 能 说 明

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

MakeFrameLayout用 于 根 据 标 准 分 形 排 布 模 式 构 造 带 类 型 信 息 的Layout对 象。该 接 口 接 收 矩 阵 的 行 数、列 数,结 合 指 定 的LayoutPattern(排 布 模 式)和LayoutTrait(布 局 特 征 参 数)计 算Shape和Stride,构 造Layout对 象。

LayoutPattern决 定 数 据 在 内 存 中 的 分 形 排 列 方 式,不 同 存 储 位 置 间 的 搬 运 和 计 算 操 作 要 求 源/目 的 张 量 满 足 特 定 的LayoutPattern组 合。

函 数 原 型

C++
template <typename LayoutPattern, typename TraitType, typename... Args>
__aicore__ inline constexpr decltype(auto) MakeFrameLayout(const Args&... args)

LayoutTrait的 指 定 方 式

LayoutTrait用 于 指 定 数 据 类 型 和C0维 度 基 数。MakeFrameLayout支 持 以 下 四 种 传 递 方 式:

  1. LayoutTraitDefault:指 定 数 据 类 型T,C0自 动 计 算。

    C++
    MakeFrameLayout<NZLayoutPtn, LayoutTraitDefault<float>>(m, n)
    
  2. _C0:直 接 指 定C0维 度 的 元 素 个 数,数 据 类 型 为Int。_C0是Std::Int的 简 写 形 式。

    C++
    MakeFrameLayout<NZLayoutPtn, _16>(m, n)
    
  3. 不 传 入Trait:在 分 形 构 造 和Trait无 关,或Trait值 固 定 的 场 景 下,不 传 入Trait,内 部 根 据LayoutPattern查 找 对 应 的 默 认Trait。这 样 的 分 形 有NDLayoutPtn、DNLayoutPtn、DNExtLayoutPtn、NDExtLayoutPtn、ScaleANDLayoutPtn、ScaleADNLayoutPtn、ScaleBNDLayoutPtn、ScaleBDNLayoutPtn。

    C++
    MakeFrameLayout<NDLayoutPtn>(m, n)
    
  4. 自 定 义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类 型 或 具 体 数 据 类 型,不 支 持 的 类 型 会 触 发 编 译 期 报 错。

调 用 示 例

C++
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);

免 责 声 明:本 站 内 容 由 asc-devkit 仓 master 分 支 自 动 编 译 生 成,属 于 持 续 开 发 版 本,可 能 存 在 缺 陷,仅 供 预 览 与 参 考。如 需 稳 定 及 商 用 资 料,请 查 阅 官 方 昇 腾 社 区