LocalTensor

功能说明

LocalTensor用于存放AI Core中Local Memory(内部存储)的数据,它包含ViewEngine(数据指针)和Layout(布局信息),支持多维数据的存储和访问。

结构体定义

template <typename EngineType, typename LayoutType>
struct LocalTensor<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 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 InfoType>
    __aicore__ inline constexpr decltype(auto) operator()(const Coord& coord, const InfoType& info);
    template <typename Coord, typename InfoType>
    __aicore__ inline constexpr decltype(auto) operator()(const Coord& coord, const InfoType& info) const;
};

成员函数

Tensor()

  • 功能说明

    获取张量对象。

  • 函数原型

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

    返回LocalTensor的常量引用。


Engine()

  • 功能说明

    获取ViewEngine对象。

  • 函数原型

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

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


Layout()

  • 功能说明

    获取Layout对象。

  • 函数原型

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

    返回Layout对象的常量引用。


Data()

  • 功能说明

    获取数据指针。

  • 函数原型

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

    返回数据迭代器的(常量)引用。


Shape()

  • 功能说明

    获取Shape信息。

  • 函数原型

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

    返回Shape元组。


Stride()

  • 功能说明

    获取Stride信息。

  • 函数原型

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

    返回Stride元组。


Size()

  • 功能说明

    获取元素总数。

  • 函数原型

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

    返回LocalTensor的元素总数。


Capacity()

  • 功能说明

    获取总容量。当非连续存储时,容量可能大于实际元素数量。

  • 函数原型

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

    返回LocalTensor的总容量。


operator[]

  • 功能说明

    坐标访问元素。

  • 函数原型

    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 输入 坐标元组。
  • 返回值说明

    返回对应位置的元素引用。


operator()

  • 功能说明

    多参数坐标访问。

  • 函数原型

    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... 输入 多个坐标参数。
  • 返回值说明

    返回由coord(或c0、c1...)指定偏移位置的LocalTensor对象引用。


operator()

  • 功能说明

    分块访问。

  • 函数原型

    template <typename Coord, typename InfoType>
    __aicore__ inline constexpr decltype(auto) operator()(const Coord& coord, const InfoType& info)
    
    template <typename Coord, typename InfoType>
    __aicore__ inline constexpr decltype(auto) operator()(const Coord& coord, const InfoType& info) const
    
  • 参数说明

    参数名 输入/输出 描述
    coord 输入 起始坐标。
    info 输入 分块信息(可以是分块形状或分块张量)。
  • 返回值说明

    返回由coord(或c0、c1...)指定偏移位置的LocalTensor对象引用(带有Layout信息)。

调用示例

// 示例1:基本LocalTensor创建和访问
// 创建L1内存指针
constexpr int tileNum = 32;
__cbuf__ half data[tileNum];
auto l1Ptr = MakeL1memPtr<half>(data);
auto nzLayout = MakeNzLayout<half>(32, 32); // 创建Nz布局
auto tensor = MakeTensor(l1Ptr, nzLayout);  // 创建张量
auto coord = MakeCoord(5, 10);              // 访问元素 
auto value = tensor[coord];
tensor[coord] = 2.0f;
// 获取张量信息
auto size = tensor.Size();          // 1024
auto capacity = tensor.Capacity();  // 1024
auto shape = tensor.Shape();        // (32, 32)

// 示例2:分块操作
// 创建张量1
auto bigTensor = MakeTensor(
    MakeL1memPtr<half>(data),
    MakeNzLayout<half>(64, 64));
// 创建张量2
auto smallTensor = MakeTensor(
    MakeL1memPtr<half>(data),
    MakeNzLayout<half>(32, 32));
// 从张量1中提取分块
auto coord = MakeCoord(16, 16);
auto tileTensor = bigTensor(coord, smallTensor);
// 访问分块元素
auto tileValue = tileTensor(MakeCoord(0, 0));

// 示例3:多维张量操作
// 创建多维张量
auto multiDimTensor = MakeTensor(
    MakeL1memPtr<half>(data),
    MakeLayout(MakeShape(8, 8, 8)));
// 访问多维元素
auto value = multiDimTensor(2, 3, 4);
// 使用坐标元组
auto coord = MakeCoord(2, 3, 4);
auto value2 = multiDimTensor(coord);

// 示例4:GM内存张量
auto gmTensor = MakeTensor(         // 创建GM内存张量
    MakeGMmemPtr<half>(gmAddr),     // 省略gmAddr初始化
    MakeDNLayout<half>(128, 128));
auto gmValue = gmTensor(10, 20);    // 访问GM数据

// 示例5:张量视图组合
// 创建原始张量
auto originalTensor = MakeTensor(
    MakeL1memPtr<half>(data),
    MakeNzLayout<half>(64, 64));
// 创建组合视图
auto composedTensor = originalTensor.Compose(
    MakeShape(16, 16),
    MakeShape(4, 4));
// 组合视图仍然访问原始数据
auto composedValue = composedTensor(1, 1);