CANN PTO ConvTile编程模型
ConvTile 编程模型
【免费下载链接】pto-isaParallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations across Ascend platforms.项目地址: https://gitcode.com/cann/pto-isa
PTO Lib 程序可基于ConvTile编写卷积相关算子。ConvTile是固定容量的 2D 到 6D 缓冲对象,也是 PTO 卷积类操作中的主要计算单元和数据搬运单元。
从概念上说,ConvTile驻留在片上 Tile 存储中(类似寄存器文件或片上 SRAM),并通过TLOAD/TSTORE与全局内存(GM)之间搬运数据。
本文档说明include/pto/common/pto_tile.hpp中的 C++ConvTile类型及其布局和形状约束。
ConvTile 表示什么
一个ConvTile主要由以下几类属性定义:
- 位置(Location):该 Tile 所属的逻辑存储类别(如矩阵/立方寄存器等)。
- 元素类型(Element type):标量元素类型(如
float、half、int8_t等)。 - 缓冲区大小(Buffer size):
ConvTile的静态缓冲容量。 - 布局(Layout):如
NCHW、NHWC、NC1HWC0等,用于指导 lowering 和目标相关优化路径。 - 形状(Shape):
pto::ConvTileShape<...>,支持最多 6 个维度。
pto::ConvTile类型
ConvTile通过 C++ 模板类型声明:
pto::ConvTile< pto::TileType Loc_, Element_, BufferSize_, pto::Layout_ layout, pto::ConvTileShape Shape_ >;位置(TileType)
TileType表示 Tile 的逻辑/物理存储类别,同时参与重载选择和编译期检查。
常见位置包括:
TileType::Vec:向量 Tile 存储(UB / 向量流水线)。TileType::Mat:通用矩阵 Tile 存储(矩阵 L1)。
每条指令允许使用哪些位置,应以docs/isa/下对应指令文档为准。
容量(BufferSize_)
BufferSize_定义了 Tile 对象的静态容量。多数指令要求 Tile 具备静态形状,以便在编译期进行特化和优化。
布局(pto::Layout)
ConvTile包含一个布局枚举,如:
NCHWNHWCNC1HWC0FRACTAL_ZFRACTAL_Z_S16S8
布局信息会影响后端实现、lowering 路径以及特定目标上的快速路径选择。
形状(pto::ConvTileShape)
pto::ConvTileShape<...Shapes>支持 1 到 6 个整型模板参数。每个维度既可以是编译期常量,也可以是pto::DYNAMIC(即-1)。
- 静态维度保存在类型信息中,可通过
ConvTileShape::staticShape[dim]获取。 - 动态维度保存在运行时对象
ConvTileShape::shape[dim]中,并由ConvTileShape(...)构造函数赋值。
构造函数会通过static_assert检查“运行时传入参数个数是否与动态维度数量一致”,因此若构造参数不匹配,会在编译期报错。
地址绑定(TASSIGN)
在手动放置流程中,TASSIGN(tile, addr)用于把一个ConvTile对象绑定到实现定义的地址。
在自动模式中,TASSIGN(tile, addr)可能根据构建配置被处理为 no-op。
具体约束请参考docs/isa/TASSIGN.md。
最小示例
#include <pto/pto-inst.hpp> using namespace pto; void example(__gm__ half* in, __gm__ half* out) { using TileT = ConvTile<TileType::Mat, half, 4096, Layout::NC1HWC0, pto::ConvTileShape<1, 1, 16, 16, 16>>; using GShape = Shape<1, 1, 16, 16, 16>; using GStride = Stride<1 * 16* 16* 16, 16* 16* 16, 16 * 16, 16, 1>; using GT = GlobalTensor<half, GShape, GStride, Layout::NC1HWC0>; GT gin(in); TileT tile5d; TASSIGN(tile5d, 0x0); TLOAD(tile5d, gin); }【免费下载链接】pto-isaParallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations across Ascend platforms.项目地址: https://gitcode.com/cann/pto-isa
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
