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