
THISTOGRAM【免费下载链接】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实现状态THISTOGRAM 已在 A5、Kirin9030 后端及 CPU 仿真__CPU_SIM上提供 C 内建实现并已登记到虚拟 ISA 索引PTOISA、isa/README、manifest.yaml、指令族矩阵appendix-d及 mkdocs 导航。仅 A5 / Kirin9030 / CPU 仿真可用A2/A3 不支持尚无公开字节码编码。简介按源 Tile 元素的某个字节统计直方图每个字节取值 0–255 的出现次数并可按“已处理的高位字节等于给定索引”做级联过滤。它是基数排序radix sort的字节桶计数原语第一趟对最高有效字节MSB计数后续各趟对更低字节计数但仅统计高位字节与上一趟桶索引匹配的元素从而得到当前基数位在前缀桶内的分布。一次调用对源 Tile 的每个有效行独立产出一组 256 个uint32计数bin。数学语义设源src有效形状为 $R \times C$元素为uint16_t或uint32_t。记 $B_k(x)$ 为元素 $x$ 的第 $k$ 字节$$ B_0 \text{bits } 7\text{–}0\ (\text{LSB}),\quad B_1 \text{bits } 15\text{–}8,\quad B_2 \text{bits } 23\text{–}16,\quad B_3 \text{bits } 31\text{–}24\ (\text{MSB}) $$模板参数byte选择被统计的字节 $k\in{0,1,2,3}$。对每一源行 $r\in[0,R)$ 与每一桶值 $b\in[0,256)$$$ \mathrm{dst}{r,b} \bigl|{,j\in[0,C)\ \big|\ B_k(\mathrm{src}{r,j})b\ \wedge\ F_{k}(r,j)\ }\bigr| $$其中级联过滤 $F_k$ 按高位优先先处理 $k3$再 $k2,1,0$定义源 dtypebyte$k$过滤 $F_k(r,j)$idx含义uint16BYTE_1(MSB)恒真首趟不过滤未使用uint16BYTE_0(LSB)$B_1(\mathrm{src}{r,j})\mathrm{idx}{r}$每行 1 个匹配字节高位uint32BYTE_3(MSB)恒真首趟不过滤未使用uint32BYTE_2$B_3\mathrm{idx}_{r,0}$1 行过滤字节uint32BYTE_1$B_3\mathrm{idx}{r,0}\ \wedge\ B_2\mathrm{idx}{r,1}$2 行过滤字节uint32BYTE_0(LSB)$B_3\mathrm{idx}{r,0}\wedge B_2\mathrm{idx}{r,1}\wedge B_1\mathrm{idx}_{r,2}$3 行过滤字节dst每行恒为 256 个uint32桶对应字节取值 0–255。uint16源仅支持BYTE_0/BYTE_1只有两个字节可被提取。除非另有说明语义在有效区域内定义桶计数的具体内存交错布局N0/N1 双库、奇偶拆分为实现定义逻辑结果为每行 256 个计数。src、idx均为 ISA 可见的 Tile 操作数非编译器 scratch。C 内建接口声明于include/pto/common/pto_instr.hpp在 A5 / Kirin9030 / CPU 仿真下可用PTO_NPU_ARCH_A5 || PTO_NPU_ARCH_KIRIN9030 || __CPU_SIM。HistByte枚举定义于include/pto/common/type.hpp。enum class HistByte : uint8_t { BYTE_0 0, // LSB (bits 7-0) BYTE_1 1, // bits 15-8 BYTE_2 2, // bits 23-16 BYTE_3 3 // MSB (bits 31-24) }; template HistByte byte, typename TileDataDst, typename TileDataSrc, typename TileDataIdx, typename... WaitEvents PTO_INST RecordEvent THISTOGRAM(TileDataDst dst, TileDataSrc src, TileDataIdx idx, WaitEvents ...events);参数方向含义byte模板被统计的字节HistByte::BYTE_0…BYTE_3dst输出直方图结果 Tileuint32_t行主序每行 256 桶src输入源数据 Tileuint16_t或uint32_t行主序idx输入级联过滤索引 Tileuint8_t形状随byte与源 dtype 变化见下events...输入等待事件WaitEvents指令前隐式TSYNCTile 尺寸与数据类型设源有效形状 $R \times C$Tiledtype有效形状布局说明dstuint32_t$R \times 256$RowMajor每行 256 个桶计数srcuint16_t或uint32_t$R \times C$RowMajor被统计的数据idxuint16源uint8_t$R \times 1$ColMajorDN每行 1 个匹配字节高位idxuint32源uint8_t$(3-k) \times C$RowMajor每行广播 1 个过滤字节$k3$ 时为 0 行不使用idx的物理行数须按 32 字节块对齐PTO_CEIL(rows · sizeof(uint8_t), 32)uint16模式要求idx为 DN 布局BLayout::ColMajorSLayout::NoneBox且恰好 1 列。支持的输入 dtype源 dtype目的 dtypeidx dtype允许的byte说明U16(uint16_t)U32U8BYTE_0,BYTE_1仅有低/高字节可提取U32(uint32_t)U32U8BYTE_0…BYTE_3四字节均可配合 0–3 行 idxdst必须为uint32_tidx必须为uint8_tsrc限定uint16_t/uint32_t其它组合由实现内static_assert拦截。实现说明THISTOGRAM 在向量流水线PIPE_V上执行字节提取将源元素解交错为按字节向量——uint16走DINTLV_B8拆出 MSB/LSBuint32走DINTLV_B16vdintlv拆出 4 个字节。级联过滤用vcmp_eq生成“已处理高位字节 idx”的谓词逐字节级联相与首趟 MSB 无过滤。字节直方图以硬件chistv2在过滤谓词下对选中字节计数内部以 N0/N1 双库、奇偶拆分累加最终每行写回 256 个uint32桶INTLV_B32交错存储。双库与奇偶拆分属实现细节逻辑结果为每行 256 个计数。约束约束适用范围原因dst为uint32_t且行主序所有目标256 桶计数宽度与存储布局src∈ {uint16_t,uint32_t} 且行主序所有目标字节提取路径idx为uint8_t所有目标过滤字节字宽uint16源idx为 DNColMajor NoneBox且 1 列A5 / Kirin9030 / CPU单字节/行广播匹配uint32源idx行主序行数 $3-k$列数 $$ 源列数A5 / Kirin9030 / CPU级联过滤所需索引行uint16源仅允许BYTE_0/BYTE_1所有目标uint16仅 2 字节dst每行 256 桶所有目标字节取值空间 0–255示例// uint16 源对每个元素的高字节MSB做直方图基数排序第一趟。 THISTOGRAMHistByte::BYTE_1(dstTile, srcTile, idxTile); // uint16 源对低字节LSB做直方图仅统计高字节 idx 的元素第二趟。 THISTOGRAMHistByte::BYTE_0(dstTile, srcTile, idxTile);典型 Tile 声明uint16模式源有效形状 $R\times C$using TileDataSrc TileTileType::Vec, uint16_t, R, alignedC, BLayout::RowMajor; using TileDataDst TileTileType::Vec, uint32_t, R, 256, BLayout::RowMajor; using TileDataIdx TileTileType::Vec, uint8_t, alignedIdxBytes, 1, BLayout::ColMajor;完整 ST 示例见tests/npu/a5/src/st/testcase/thistogram/A5、tests/npu/kirin9030/src/st/testcase/thistogram/Kirin9030、tests/npu/kirinX90/src/st/testcase/thistogram/KirinX90及tests/cpu/st/testcase/thistogram/CPU 参考实现。【免费下载链接】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),仅供参考