Skip to content
版 本

Tensor

产 品 支 持 情 况

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

功 能 说 明

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

Tensor用 于 将 内 存 访 问 引 擎Engine与 布 局Layout绑 定 起 来。Engine描 述 物 理 存 储 位 置 和 访 问 方 式,Layout描 述 数 据 的 形 状 和 布 局。Tensor分 为GlobalTensor和LocalTensor两 种,其 中GlobalTensor用 来 存 放Global Memory(外 部 存 储)的 全 局 数 据,LocalTensor用 于 存 放AI Core中Local Memory(内 部 存 储)的 数 据。二 者 的 公 共 接 口 由BaseTensor<TensorAttribute<EngineType, LayoutType>>提 供。

原 型 定 义

C++
template <typename EngineType, typename LayoutType>
struct TensorAttribute {};

template <typename T>
struct BaseTensor {};

template <typename EngineType, typename LayoutType>
struct BaseTensor<TensorAttribute<EngineType, LayoutType>> {
    using iterator = typename EngineType::iterator;
    using valueType = typename EngineType::valueType;
    using elementType = typename EngineType::elementType;
    using reference = typename EngineType::reference;

    using engineType  = EngineType;
    using layoutType  = LayoutType;

    static constexpr int rank = LayoutType::rank;

    __aicore__ inline BaseTensor();
    __aicore__ inline BaseTensor(const EngineType& engine, const LayoutType& layout);

    __aicore__ inline constexpr decltype(auto) Tensor() const;
    __aicore__ inline constexpr decltype(auto) Engine() const;
    __aicore__ inline constexpr decltype(auto) Engine();
    __aicore__ inline constexpr decltype(auto) Layout() const;
    __aicore__ inline constexpr decltype(auto) Data() const;
    __aicore__ inline constexpr decltype(auto) Data();
    __aicore__ inline constexpr decltype(auto) Shape() const;
    __aicore__ inline constexpr decltype(auto) Stride() const;
    __aicore__ inline constexpr auto Size() const;
    __aicore__ inline constexpr auto Capacity() const;

    template <typename Coord>
    __aicore__ inline constexpr decltype(auto) operator[](const Coord& coord);

    template <typename Coord>
    __aicore__ inline constexpr decltype(auto) operator[](const Coord& coord) const;

    template <typename Coord>
    __aicore__ inline constexpr decltype(auto) operator()(const Coord& coord);

    template <typename Coord>
    __aicore__ inline constexpr decltype(auto) operator()(const Coord& coord) const;

    template <typename Coord0, typename Coord1, typename... Coords>
    __aicore__ inline constexpr decltype(auto) operator()(const Coord0& c0, const Coord1& c1, const Coords&... cs);

    template <typename Coord0, typename Coord1, typename... Coords>
    __aicore__ inline constexpr decltype(auto) operator()(const Coord0& c0, const Coord1& c1, const Coords&... cs) const;

    template <typename Coord, typename Info>
    __aicore__ inline constexpr decltype(auto) Slice(const Coord& coord, const Info& info);

    template <typename Coord, typename Info>
    __aicore__ inline constexpr decltype(auto) Slice(const Coord& coord, const Info& info) const;
};

template <typename EngineType, typename LayoutType>
struct GlobalTensor<TensorAttribute<EngineType, LayoutType>>
    : public BaseTensor<TensorAttribute<EngineType, LayoutType>> {
    __aicore__ inline GlobalTensor() = default;
    __aicore__ inline constexpr void SetL2CacheHint(Te::CacheMode mode);
};

template <typename EngineType, typename LayoutType>
struct LocalTensor<TensorAttribute<EngineType, LayoutType>>
    : public BaseTensor<TensorAttribute<EngineType, LayoutType>> {
    __aicore__ inline LocalTensor() = default;
};

参 数 说 明

模 板 参 数 说 明

参 数 名类 型描 述
EngineType输 入张 量 的 内 存 访 问 引 擎 类 型。
LayoutType输 入张 量 的 布 局 类 型,用 于 描 述Shape和Stride。
T输 入泛 型 模 板 参 数,用 于 基 础 模 板 或 特 化 匹 配。

返 回 值 说 明

Tensor相 关 类 型 本 身 为 类 型 定 义,不 直 接 返 回 值。

通 过MakeTensor(...)构 造 张 量 时:若 存 放Global Memory(外 部 存 储)的 全 局 数 据,则 返 回GlobalTensor,存 放AI Core中Local Memory(内 部 存 储)的 数 据 返 回LocalTensor。

成 员 函 数

Tensor()

  • 功 能 说 明

    获 取 张 量 对 象 自 身。

  • 函 数 原 型

    C++
    __aicore__ inline constexpr decltype(auto) Tensor() const
    
  • 返 回 值 说 明

    返 回 当 前Tensor对 象 的 常 量 引 用。


Engine()

  • 功 能 说 明

    获 取 张 量 绑 定 的Engine对 象。

  • 函 数 原 型

    C++
    __aicore__ inline constexpr decltype(auto) Engine() const
    __aicore__ inline constexpr decltype(auto) Engine()
    
  • 返 回 值 说 明

    返 回Engine对 象 的(常 量)引 用。


Layout()

  • 功 能 说 明

    获 取 张 量 绑 定 的Layout对 象。

  • 函 数 原 型

    C++
    __aicore__ inline constexpr decltype(auto) Layout() const
    
  • 返 回 值 说 明

    返 回Layout对 象 的 常 量 引 用。


Data()

  • 功 能 说 明

    获 取 底 层 数 据 起 始 迭 代 器。

  • 函 数 原 型

    C++
    __aicore__ inline constexpr decltype(auto) Data() const
    __aicore__ inline constexpr decltype(auto) Data()
    
  • 返 回 值 说 明

    返 回Engine().Begin()的 结 果,即 数 据 起 始 迭 代 器 的(常 量)引 用 或 值。


Shape()

  • 功 能 说 明

    获 取 张 量 对 应 的Shape信 息。

  • 函 数 原 型

    C++
    __aicore__ inline constexpr decltype(auto) Shape() const
    
  • 返 回 值 说 明

    返 回Layout中 的Shape对 象。


Stride()

  • 功 能 说 明

    获 取 张 量 对 应 的Stride信 息。

  • 函 数 原 型

    C++
    __aicore__ inline constexpr decltype(auto) Stride() const
    
  • 返 回 值 说 明

    返 回Layout中 的Stride对 象。


Size()

  • 功 能 说 明

    获 取 张 量 覆 盖 的 逻 辑 元 素 总 数。

  • 函 数 原 型

    C++
    __aicore__ inline constexpr auto Size() const
    
  • 返 回 值 说 明

    返 回Layout().Size()的 计 算 结 果。


Capacity()

  • 功 能 说 明

    获 取 张 量 在 当 前 布 局 下 占 用 的 实 际 容 量。

  • 函 数 原 型

    C++
    __aicore__ inline constexpr auto Capacity() const
    
  • 返 回 值 说 明

    返 回Layout().Capacity()的 计 算 结 果。


operator[]

  • 功 能 说 明

    按 多 维 坐 标 访 问 单 个 元 素。

  • 函 数 原 型

    C++
    template <typename Coord>
    __aicore__ inline constexpr decltype(auto) operator[](const Coord& coord)
    
    template <typename Coord>
    __aicore__ inline constexpr decltype(auto) operator[](const Coord& coord) const
    
  • 参 数 说 明

    参 数 名输 入/输 出描 述
    coord输 入多 维 逻 辑 坐 标。
  • 约 束 说 明 仅__gm__, __ubuf__地 址 空 间 支 持 使 用 该 接 口,AICore上 的 地 址 空 间(cacbcccbuf)不 具 备 标 量 直 接 访 问 能 力。

  • 返 回 值 说 明

    返 回Data()[Layout()(coord)]对 应 的 元 素 引 用。


operator()

  • 功 能 说 明

    以 给 定 坐 标 为 起 点,返 回 一 个 从 当 前 位 置 开 始 的 子 张 量。

  • 函 数 原 型

    C++
    template <typename Coord>
    __aicore__ inline constexpr decltype(auto) operator()(const Coord& coord)
    
    template <typename Coord>
    __aicore__ inline constexpr decltype(auto) operator()(const Coord& coord) const
    
    template <typename Coord0, typename Coord1, typename... Coords>
    __aicore__ inline constexpr decltype(auto) operator()(const Coord0& c0, const Coord1& c1, const Coords&... cs)
    
    template <typename Coord0, typename Coord1, typename... Coords>
    __aicore__ inline constexpr decltype(auto) operator()(const Coord0& c0, const Coord1& c1, const Coords&... cs) const
    
  • 参 数 说 明

    参 数 名输 入/输 出描 述
    coord输 入起 始 坐 标 元 组。
    c0, c1, cs...输 入多 个 坐 标 参 数,会 被 包 装 为MakeCoord(c0, c1, cs...)。
  • 返 回 值 说 明

    返 回 从 指 定 坐 标 位 置 开 始 的 子 张 量 对 象。


Slice()

  • 功 能 说 明

    从 指 定 坐 标 处 切 出 一 个 带 新 布 局 信 息 的 子 张 量。

  • 函 数 原 型

    C++
    template <typename Coord, typename Info>
    __aicore__ inline constexpr decltype(auto) Slice(const Coord& coord, const Info& info)
    
    template <typename Coord, typename Info>
    __aicore__ inline constexpr decltype(auto) Slice(const Coord& coord, const Info& info) const
    
  • 参 数 说 明

    参 数 名输 入/输 出描 述
    coord输 入切 片 起 始 坐 标。
    info输 入切 片 描 述 信 息,可 以 为Shape或Layout。
  • 返 回 值 说 明

    返 回 切 片 后 的 子 张 量 对 象。新 张 量 的Engine指 向 切 片 起 始 位 置,Layout由MakeSliceLayout(coord, Layout(), info)生 成。


SetL2CacheHint()

  • 功 能 说 明

    设 置GlobalTensor访 问GM时 的L2 Cache Hint。

  • 函 数 原 型

    C++
    __aicore__ inline constexpr void SetL2CacheHint(Te::CacheMode mode)
    
  • 参 数 说 明

    参 数 名输 入/输 出描 述
    mode输 入L2缓 存 模 式。
  • 返 回 值 说 明

    无 返 回 值。

  • 约 束 说 明

    该 接 口 仅 存 在 于GlobalTensor中,LocalTensor不 提 供 此 接 口。

调 用 示 例

C++
using namespace AscendC::Te;

// 示 例1:构 造 一 个GM张 量
auto gmLayout = MakeLayout(MakeShape(128, 128), MakeStride(128, 1));
auto gmTensor = MakeTensor(MakeMemPtr<Location::GM, float>(gmAddr), gmLayout);

auto gmShape = gmTensor.Shape();        // (128, 128)
auto gmStride = gmTensor.Stride();      // (128, 1)
auto gmSize = gmTensor.Size();          // 16384
auto gmCap = gmTensor.Capacity();       // 16384
gmTensor.SetL2CacheHint(CacheMode::CACHE_MODE_NORMAL);

// 示 例2:按 坐 标 访 问 元 素
auto coord = MakeCoord(5, 10);
auto value = gmTensor[coord];

// 示 例3:获 取 子 张 量
auto subTensor = gmTensor(MakeCoord(16, 16));

// 示 例4:按Shape切 片
auto sliceTensor = gmTensor.Slice(MakeCoord(0, 0), MakeShape(32, 32));

// 示 例5:构 造 一 个LocalTensor
auto localLayout = MakeFrameLayout<NZLayoutPtn, LayoutTraitDefault<float>>(32, 32);
auto localTensor = MakeTensor(MakeMemPtr<Location::L1, float>(l1Addr), localLayout);
auto localData = localTensor.Data();

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