CANN/asc-devkit TensorAPI Layout结构

📅 2026/7/16 20:19:18
CANN/asc-devkit TensorAPI Layout结构
Layout【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkitLayoutShape, Stride数据结构是描述多维张量内存布局的基础模板类通过编译时的形状Shape和步长Stride信息实现逻辑坐标空间到一维内存地址空间的映射。借助模板元编程技术该类在编译时完成计算和代码生成从而降低运行时开销。Layout包含两个核心组成部分Shape定义数据的逻辑形状例如二维矩阵的行数和列数或多维张量的各维度大小。Stride定义各维度在内存中的步长即同维度相邻元素在内存中的间隔单位为元素并与Shape的维度信息一一对应。例如一个二维矩阵的Shape为(4, 2)Stride为(4, 1)表示矩阵有4行2列。列方向步长为1即每行中相邻元素间隔1个元素行方向步长为4即相邻行的起始地址间隔4个元素。表1线性地址视图地址01245689101213元素a00a01-a10a11-a20a21-a30a31表2矩阵逻辑视图索引列0列1行0a00地址0a01地址1行1a10地址4a11地址5行2a20地址8a21地址9行3a30地址12a31地址13需要包含的头文件#include tensor_api/tensor.h原型定义template typename T, typename U, typename Info Std::ignore_t struct Layout : private Std::tupleT, U { static constexpr auto depth NestingDepthVT; static constexpr auto rank Std::tuple_size_vT; __aicore__ inline constexpr Layout(const T shape {}, const U stride {}) : Std::tupleT, U(shape, stride) template size_t... I __aicore__ inline constexpr decltype(auto) Capacity() const __aicore__ inline constexpr decltype(auto) layout() __aicore__ inline constexpr decltype(auto) layout() const template size_t... I __aicore__ inline constexpr decltype(auto) Shape() template size_t... I __aicore__ inline constexpr decltype(auto) Shape() const template size_t... I __aicore__ inline constexpr decltype(auto) Stride() template size_t... I __aicore__ inline constexpr decltype(auto) Stride() const template typename S __aicore__ inline constexpr auto operator()(const S coord) const template size_t... I __aicore__ inline constexpr decltype(auto) Rank() const template size_t... I __aicore__ inline constexpr decltype(auto) Size() const template size_t... I __aicore__ inline constexpr decltype(auto) Get() template size_t... I __aicore__ inline constexpr decltype(auto) Get() const };模板参数参数名描述TStd::tuple结构类型用于定义数据的逻辑形状。UStd::tuple结构类型用于定义各维度在内存中的步长并与Shape的维度信息一一对应。Info可选模板参数默认为Std::ignore_t。当Layout由MakeFrameLayout或相关接口构造时该参数可携带布局模式和布局特征等附加信息。成员函数Layout()功能说明构造Layout对象使用给定的Shape和Stride初始化布局信息。函数原型__aicore__ inline constexpr Layout(const T shape {}, const U stride {})参数说明参数名输入/输出描述shape输入张量的形状信息必须为Std::tuple类型。stride输入张量的步长信息必须为Std::tuple类型。返回值说明构造函数无返回值。Capacity()功能说明获取当前Layout布局所需的实际内存容量。传入模板参数I...时会先选取指定子维度再计算对应子布局的容量。函数原型template size_t... I __aicore__ inline constexpr decltype(auto) Capacity() const返回值说明返回当前Layout或指定子维度对应布局的实际容量。layout()功能说明获取Layout对象自身用于统一接口中返回Layout布局实例。函数原型__aicore__ inline constexpr decltype(auto) layout() __aicore__ inline constexpr decltype(auto) layout() const返回值说明返回当前Layout对象的常量引用。Shape()功能说明获取Layout中的Shape信息。不指定模板参数I...时返回完整Shape传入I...时返回指定子维度对应的子结构。函数原型template size_t... I __aicore__ inline constexpr decltype(auto) Shape() template size_t... I __aicore__ inline constexpr decltype(auto) Shape() const返回值说明返回Shape对象或其子结构的常量引用。Stride()功能说明获取Layout中的Stride信息。不指定模板参数I...时返回完整Stride传入I...时返回指定子维度对应的子结构。函数原型template size_t... I __aicore__ inline constexpr decltype(auto) Stride() template size_t... I __aicore__ inline constexpr decltype(auto) Stride() const返回值说明返回Stride对象或其子结构的常量引用。operator()功能说明将多维逻辑坐标映射为一维线性索引。该接口内部调用Crd2Idx根据当前Layout的Shape和Stride计算坐标在内存中的线性位置。函数原型template typename S __aicore__ inline constexpr auto operator()(const S coord) const参数说明参数名输入/输出描述coord输入多维逻辑坐标。返回值说明返回坐标coord对应的一维线性索引。Rank()功能说明获取Layout的秩即维度数。不指定模板参数I...时返回完整Layout的秩传入I...时返回指定子维度的秩。函数原型template size_t... I __aicore__ inline constexpr decltype(auto) Rank() const返回值说明返回当前Layout或指定子维度的秩。Size()功能说明获取Layout覆盖的元素总数。不指定模板参数I...时返回完整Shape对应的元素总数传入I...时返回指定子维度下的元素总数。函数原型template size_t... I __aicore__ inline constexpr decltype(auto) Size() const返回值说明返回当前Layout或指定子维度覆盖的元素总数。Get()功能说明从Layout中提取指定位置的元素或子结构。位置0对应Shape位置1对应Stride配合模板参数I...可进一步提取子tuple中的元素。函数原型template size_t... I __aicore__ inline constexpr decltype(auto) Get() template size_t... I __aicore__ inline constexpr decltype(auto) Get() const返回值说明返回指定位置元素或子结构的常量引用。depth功能说明编译期常量表示Shape类型的嵌套深度用于判断当前Layout是否为嵌套布局结构。rank功能说明编译期常量表示完整Layout的秩。Layout及成员函数示例下面通过一个二维Layout示例说明Layout对象本身以及各成员函数的使用方式和返回结果。using namespace AscendC::Te; auto layout Layout(MakeShape(4, 2), MakeStride(4, 1)); auto self layout.layout(); // self Layout(MakeShape(4, 2), MakeStride(4, 1)) auto shape layout.Shape(); // shape (4, 2) auto shape0 layout.Shape0(); // shape0 4 auto stride layout.Stride(); // stride (4, 1) auto stride1 layout.Stride1(); // stride1 1 auto rank layout.Rank(); // rank 2 auto size layout.Size(); // size 8 auto capacity layout.Capacity(); // capacity 16 auto index layout(MakeCoord(1, 1)); // index 5 auto shapeInfo layout.Get0(); // shapeInfo (4, 2) auto strideInfo layout.Get1(); // strideInfo (4, 1) constexpr auto depth decltype(layout)::depth; // depth 1 constexpr auto fullRank decltype(layout)::rank; // fullRank 2【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考