Skip to content
版 本

MakeTensor

产 品 支 持 情 况

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

功 能 说 明

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

MakeTensor负 责 将 内 存 指 针(由MakeMemPtr生 成)与 布 局 对 象(由MakeFrameLayout/MakeLayout生 成)绑 定,生 成 带 有 完 整 类 型 信 息 的Tensor对 象。

MakeTensor会 根 据 内 存 指 针 的 物 理 位 置 标 记,自 动 推 导 返 回GlobalTensor或LocalTensor,当 指 针 物 理 位 置 位 于Global Memory(外 部 存 储)时,返 回GlobalTensor;当 指 针 位 置 位 于AI Core上 的Local Memory(内 部 存 储)时,返 回LocalTensor。

生 成 的Tensor对 象 可 直 接 传 入Copy(数 据 搬 运)和Mmad(矩 阵 计 算)等 接 口,编 译 器 会 根 据 其Engine中 的 物 理 位 置 标 记 和Layout中 的 布 局 模 式,自 动 选 择 底 层 硬 件 指 令。

函 数 原 型

C++
template <typename Iterator, typename... Args>
__aicore__ inline constexpr auto MakeTensor(const Iterator& iter, const Args&... args)

参 数 说 明

参 数 名输 入/输 出描 述
iter输 入迭 代 器,要 求 传 入ViewEngine对 象,用 于 创 建Tensor。返 回 类 型 由 该 迭 代 器 绑 定 的 内 存 位 置 决 定。
args输 入可 变 参 数,当 前 支 持 传 入 一 个 或 两 个 参 数。
• 当 传 入 一 个 入 参 时:根 据 传 入 的Layout对 象 创 建Tensor。
• 当 传 入 两 个 入 参 时:根 据 传 入 的 参 数 构 建Layout对 象,并 基 于 该Layout创 建Tensor。

返 回 值 说 明

  • 返 回GlobalTensor<TensorAttribute<Engine, Layout>>或LocalTensor<TensorAttribute<Engine, Layout>>类 型 的 张 量 对 象,具 体 由Engine绑 定 的 内 存 位 置 决 定。

调 用 示 例

C++
// 示 例1:使 用GM指 针 和Layout创 建GlobalTensor
auto gmPtr = MakeMemPtr<Location::GM, half>(gmAddr);
auto gmLayout = MakeLayout(MakeShape(32, 32), MakeStride(32, 1));
auto gmTensor = MakeTensor(gmPtr, gmLayout);

// 示 例2:使 用Local Memory指 针 和Layout创 建LocalTensor
constexpr int tileNum = 4;
__cbuf__ half dataPtr[tileNum]; // 初 始 化
auto ptr = MakeMemPtr(dataPtr);
auto layout = MakeFrameLayout<NZLayoutPtn, half>(32, 32);
auto tensor = MakeTensor(ptr, layout);

// 示 例3:使 用 指 针 和 形 状 创 建 张 量(自 动 计 算 步 幅)
auto tensor2 = MakeTensor(ptr, MakeShape(32, 32), MakeStride(32, 32));

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