Tensor【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持Atlas 200I/500 A2 推理产品不支持Atlas 推理系列产品AI Core不支持Atlas 推理系列产品Vector Core不支持Atlas 训练系列产品不支持功能说明需要包含的头文件为#include tensor_api/tensor.h。Tensor用于将内存访问引擎Engine与布局Layout绑定起来。Engine描述物理存储位置和访问方式Layout描述数据的形状和布局。Tensor分为GlobalTensor和LocalTensor两种其中GlobalTensor用来存放Global Memory外部存储的全局数据LocalTensor用于存放AI Core中Local Memory内部存储的数据。二者的公共接口由BaseTensorTensorAttributeEngineType, LayoutType提供。原型定义template typename EngineType, typename LayoutType struct TensorAttribute {}; template typename T struct BaseTensor {}; template typename EngineType, typename LayoutType struct BaseTensorTensorAttributeEngineType, 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[](https://gitcode.com/cann/asc-devkit/blob/fca368efb52629b09a323752901d0e77214b266d/docs/zh/api/SIMD-API/基础API/数据结构/TensorAPI-BasicStructure/tensor_structure/const Coord coord?utm_sourcegitcode_repo_files); template typename Coord __aicore__ inline constexpr decltype(auto) operator[](https://gitcode.com/cann/asc-devkit/blob/fca368efb52629b09a323752901d0e77214b266d/docs/zh/api/SIMD-API/基础API/数据结构/TensorAPI-BasicStructure/tensor_structure/const Coord coord?utm_sourcegitcode_repo_files) 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 GlobalTensorTensorAttributeEngineType, LayoutType : public BaseTensorTensorAttributeEngineType, LayoutType { __aicore__ inline GlobalTensor() default; __aicore__ inline constexpr void SetL2CacheHint(Te::CacheMode mode); }; template typename EngineType, typename LayoutType struct LocalTensorTensorAttributeEngineType, LayoutType : public BaseTensorTensorAttributeEngineType, LayoutType { __aicore__ inline LocalTensor() default; };参数说明模板参数说明参数名类型描述EngineType输入张量的内存访问引擎类型。LayoutType输入张量的布局类型用于描述Shape和Stride。T输入泛型模板参数用于基础模板或特化匹配。返回值说明Tensor相关类型本身为类型定义不直接返回值。通过MakeTensor构造张量时若存放Global Memory外部存储的全局数据则返回GlobalTensor存放AI Core中Local Memory内部存储的数据则返回LocalTensor。成员函数Tensor()功能说明获取张量对象自身。函数原型__aicore__ inline constexpr decltype(auto) Tensor() const返回值说明返回当前Tensor对象的常量引用。Engine()功能说明获取张量绑定的Engine对象。函数原型__aicore__ inline constexpr decltype(auto) Engine() const __aicore__ inline constexpr decltype(auto) Engine()返回值说明返回Engine对象的常量引用。Layout()功能说明获取张量绑定的Layout对象。函数原型__aicore__ inline constexpr decltype(auto) Layout() const返回值说明返回Layout对象的常量引用。Data()功能说明获取底层数据起始迭代器。函数原型__aicore__ inline constexpr decltype(auto) Data() const __aicore__ inline constexpr decltype(auto) Data()返回值说明返回Engine().Begin()的结果即数据起始迭代器的常量引用或值。Shape()功能说明获取张量对应的Shape信息。函数原型__aicore__ inline constexpr decltype(auto) Shape() const返回值说明返回Layout中的Shape对象。Stride()功能说明获取张量对应的Stride信息。函数原型__aicore__ inline constexpr decltype(auto) Stride() const返回值说明返回Layout中的Stride对象。Size()功能说明获取张量覆盖的逻辑元素总数。函数原型__aicore__ inline constexpr auto Size() const返回值说明返回Layout().Size()的计算结果。Capacity()功能说明获取张量在当前布局下占用的实际容量。函数原型__aicore__ inline constexpr auto Capacity() const返回值说明返回Layout().Capacity()的计算结果。operator[]功能说明按多维坐标访问单个元素。函数原型template typename Coord __aicore__ inline constexpr decltype(auto) operator[](https://gitcode.com/cann/asc-devkit/blob/fca368efb52629b09a323752901d0e77214b266d/docs/zh/api/SIMD-API/基础API/数据结构/TensorAPI-BasicStructure/tensor_structure/const Coord coord?utm_sourcegitcode_repo_files) template typename Coord __aicore__ inline constexpr decltype(auto) operator[](https://gitcode.com/cann/asc-devkit/blob/fca368efb52629b09a323752901d0e77214b266d/docs/zh/api/SIMD-API/基础API/数据结构/TensorAPI-BasicStructure/tensor_structure/const Coord coord?utm_sourcegitcode_repo_files) const参数说明参数名输入/输出描述coord输入多维逻辑坐标。约束说明 仅__gm__、 __ubuf__地址空间支持使用该接口AI Core上的地址空间__ca__、__cb__、__cc__、__cbuf__不具备标量直接访问能力。返回值说明返回Data()[Layout()(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...输入多个坐标参数会被包装为MakeCoord(c0, c1, cs...)。返回值说明返回从指定坐标位置开始的子张量对象。Slice()功能说明从指定坐标处切出一个带新布局信息的子张量。函数原型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。函数原型__aicore__ inline constexpr void SetL2CacheHint(Te::CacheMode mode)参数说明参数名输入/输出描述mode输入L2缓存模式。返回值说明无返回值。约束说明该接口仅存在于GlobalTensor中LocalTensor不提供此接口。调用示例using namespace AscendC::Te; constexpr uint64_t gmAddr 128; // 示例1构造一个GM张量 auto gmLayout MakeLayout(MakeShape(128, 128), MakeStride(128, 1)); auto gmTensor MakeTensor(MakeMemPtrLocation::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 MakeFrameLayoutNZLayoutPtn, LayoutTraitDefaultfloat(32, 32); auto localTensor MakeTensor(MakeMemPtrLocation::L1, float(l1Addr), localLayout); auto localData localTensor.Data();【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考