PTO-ISA TEXPANDS 指令详解:将标量广播填充至 Tile 的标量扩展算子

发布时间:2026/9/19 13:14:15

PTO-ISA TEXPANDS 指令详解:将标量广播填充至 Tile 的标量扩展算子 PTO-ISA TEXPANDS 指令详解将标量广播填充至 Tile 的标量扩展算子【免费下载链接】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-isaTEXPANDS 是 CANN pto-isa 指令集中用于将单个标量广播填充到目标 Tile 全区域的标量扩展Scalar Expand指令常用于 Tile 的初始化、置零或常量填充等场景。本文以 TEXPANDS_zh.md 为主体结合仓库内 CPU/NPU 的指令实现源码与 ST 测试用例完整梳理该指令的数学语义、三种汇编形式、C 内建接口、平台约束与底层实现原理帮助开发者在自动Auto与手动Manual两种编程模式下正确使用 TEXPANDS。指令概览名称与定位TEXPANDS 是Tile Expand Scalar的缩写语义为将标量广播到目标 Tile 中把单个标量值写入目标 Tile 有效区域的每一个元素属于典型的单源、广播写型指令。它不读取任何 Tile 数据源只依赖一个标量立即数或寄存器值因此天然适合Tile 的零初始化如TEXPANDS(dst, 0.0f)常量填充如 padding 区域的固定值填充在手动模式下与 TASSIGN 配合先绑定 Tile 资源再写入初值。数学语义对有效区域内的每个元素(i, j)指令执行如下赋值$$ \mathrm{dst}_{i,j} \mathrm{scalar} $$其中scalar为与目标 Tile 数据类型DType一致的标量值。与需要同时读取两个操作数的二元指令如 TADD、TMUL不同TEXPANDS 的源只有一个标量因此指令发射不依赖任何 Tile 数据依赖仅需保证目标 Tile 的资源已就绪。与其他指令的关系从仓库中的使用示例如 texpands_kernel.cpp可以看到 TEXPANDS 的典型调用链TASSIGN(dst, 0x400)为 Tile 绑定片上资源手动模式TEXPANDS(dstTile, scalar)将标量广播写入 Tileset_flag/wait_flag或Event建立流水级同步TSTORE(dstGlobal, dstTile)将结果写回 Global Memory。汇编语法TEXPANDS 在汇编层面有三种表达形式覆盖同步形式、SSA 中间表示AS Level 1与 DPSData Parallel Semantics形式AS Level 2。同步形式%dst texpands %scalar : f32, !pto.tile...%scalar为标量值: f32指明标量类型!pto.tile...为目标 Tile 类型%dst为广播填充后的结果 Tile。AS Level 1SSA%dst pto.texpands %scalar : dtype - !pto.tile...SSA 形式中每个值只被定义一次%scalar作为唯一输入%dst作为输出值类型由dtype与!pto.tile...联合描述。AS Level 2DPSpto.texpands ins(%scalar : dtype) outs(%dst : !pto.tile_buf...)DPS 形式显式区分ins输入标量与outs输出 Tile 缓冲目标以!pto.tile_buf...表示实际承载数据的缓冲区。C 内建接口声明位置与公共头文件TEXPANDS 的 C 内建接口声明于 include/pto/common/pto_instr.hpp公共包含头为pto/pto-inst.hpp即 include/pto/pto-inst.hpp。接口定义如下template typename TileData, typename... WaitEvents PTO_INST RecordEvent TEXPANDS(TileData dst, typename TileData::DType scalar, WaitEvents ... events);接口语义解析参数含义TileData目标 Tile 类型TileTileType::Vec|Mat, T, Rows, Cols, ...或 ConvTile编译期确定位置、形状与数据类型dst目标 Tile 引用指令将标量广播写入其有效区域scalar标量值类型为TileData::DType与 Tile 元素类型一致WaitEvents... events可选事件列表指令发射前通过detail::PtoWaitEvents(events...)等待这些事件完成实现异步流水同步接口实际实现中pto_instr.hpp通过MAP_INSTR_IMPL(TEXPANDS, dst, scalar)将调用映射到各平台的TEXPANDS_IMPL实现返回RecordEvent供后续指令如 TSTORE作为依赖事件使用。例如在 texpands_mat_kernel.cpp 中EventOp::TEXPANDS_MAT, Op::TSTORE_MAT evtExpands_Store; evtExpands_Store TEXPANDSTileData(MatTile, value); TSTORE(dstGlobal, MatTile, evtExpands_Store);TEXPANDS返回的evtExpands_Store作为事件参数传给TSTORE保证写回在广播填充完成后才发起。约束与适用条件TEXPANDS 在编译期static_assert/PTO_ASSERT执行一系列实现检查不同平台约束存在差异。Atlas A2/A3 训练系列产品 / Atlas A2/A3 推理系列产品Tile 位置为向量TileData::Loc TileType::VecTileData::DType必须是以下类型之一int8_t、uint8_t、int16_t、uint16_t、int32_t、uint32_t、half、bfloat16_t、float静态有效边界TileData::ValidRow TileData::Rows且TileData::ValidCol TileData::Cols。Tile 位置为矩阵TileData::Loc TileType::Mat数据类型约束与 Vec 相同有效边界TileData::Rows * TileData::Cols * sizeof(TileData::DType) / 32必须位于[1, 32767]范围内。Ascend 950PR / Ascend 950DTA5 系列Vec 位置静态有效边界TileData::ValidRow TileData::Rows且TileData::ValidCol TileData::Cols数据类型扩展为uint8_t、int8_t、uint16_t、int16_t、uint32_t、int32_t、int64_t、uint64_t、half、bfloat16_t、float新增 64 位整型支持。Mat 位置数据类型约束同 Vec含 64 位整型对Layout::NC1HWC0或Layout::FRACTAL_Zshape0 * shape1 * shape2 * shape3必须在[1, 32767]范围内对Layout::NDC1HWC0或Layout::FRACTAL_Z_3Dshape0 * shape1 * shape2 * shape3 * shape4必须在[1, 32767]范围内。上述范围限制源于硬件重复repeat计数的位宽从源码 a2a3/TExpandS.hpp 与 a5/TExpandS.hpp 可见EXPANDS_MAX_SUPPORT_REPEAT_TIMES 32767对应 repeat 配置位域[14:0]。有效区域Valid Region语义TEXPANDS 的填充范围取决于 Tile 位置相关概念可参考 conventions_zh.mdVec 位置在dst.GetValidRow()/dst.GetValidCol()指定的有效区域内填充dst。有效区域是运行时计算域Rows/Cols描述物理存储形状有效形状改变不影响物理步长Mat 位置Tile在TileData::Rows/TileData::Cols上填充dst按整个物理形状填充Mat 位置ConvTile在ConvTileData的shape内填充dst。源码级实现解析CPU 实现CPU 模拟实现位于 include/pto/cpu/TExpands.hpp核心逻辑TExpands_Impl按布局分三种路径RowMajor 非分形布局按行并行dst[base c] src外层循环使用cpu::parallel_for_rows并行、内层循环使用PTO_CPU_VECTORIZE_LOOP向量化ColMajor 非分形布局交换行列循环顺序base c * Rows分形S Fractal布局通过GetTileElementOffsettile_shape(r, c)计算分形存储下的元素偏移保证在 5HD 等分形排布下仍能正确写入。CPU 实现同样遵循有效区域语义TEXPANDS_IMPL在入口处读取dst.GetValidRow()与dst.GetValidCol()作为实际填充范围。NPU A2/A3 实现A2/A3 实现位于 include/pto/npu/a2a3/TExpandS.hppVec 与 Mat 分属不同底层路径Vec 路径核心是vector_dup向量复制指令。实现先按连续/非连续两种情况优化连续场景行主序且单行或整列有效直接用TExpandsVec1D一次性复制validRow * validCol个元素非连续场景用TExpandsVec2Dstride按行循环复制stride 取RowStride/ColStride每条复制前通过SetVectorCount(nElem)设置向量长度结束后SetFullVecMaskByDTypeT()恢复全量掩码。Mat 路径TExpandsMatTile/TExpandsMat5HD将 Tile 总字节数除以 32B 块大小得到 repeat 次数构造 repeat 配置位域后调用pto_create_cbuf_matrix整片填充。repeat 配置的位域含义源码注释明确标注[46:32] 相邻两次 repeat 之间的 repeat gap [30:16] 每次 repeat 的 block 数此处为 1 [14:0] repeat 次数即填充的 32B 块数上限 32767ConvTile 路径TExpandsMat5HD依据GetShape(0..4)计算总字节数对应NC1HWC0/C1HWNC0等 5 维布局。NPU A5 实现A5 实现位于 include/pto/npu/a5/TExpandS.hppVec 路径基于BinaryInstrExpandSOpT, ...框架ExpandSOp::BinSInstr通过vdup(reg_dst, scalar, preg, MODE_ZEROING)在寄存器级完成标量广播复制并按行主序/列主序自动交换行列。与 A2/A3 不同A5 对 64 位整型有专门优化当DType为int64_t/uint64_t时走Int64Fill路径利用vbr将 64 位标量拆成高低 32 位寄存器、vintlv交织、vsts分段存储该路径要求行主序布局static_assert(TileData::isRowMajor, TEXPANDS B64 currently requires row-major layout.)Mat 路径同样使用pto_create_cbuf_matrix与 repeat 配置位域并针对 1/2/4 字节类型做不同的值扩展如 1 字节值扩展为 32 位重复模式。编程示例自动模式Auto自动模式下编译器/运行时负责 Tile 的资源放置与调度无需手动绑定#include pto/pto-inst.hpp using namespace pto; void example_auto() { using TileT TileTileType::Vec, float, 16, 16; TileT dst; TEXPANDS(dst, 0.0f); }手动模式Manual手动模式需先用 TASSIGN 显式绑定 Tile 的片上资源再发射指令#include pto/pto-inst.hpp using namespace pto; void example_manual() { using TileT TileTileType::Vec, float, 16, 16; TileT dst; TASSIGN(dst, 0x1000); TEXPANDS(dst, 0.0f); }完整 Kernel 示例来自 ST 测试仓库 tests/cpu/st/testcase/texpands/texpands_kernel.cpp 给出了包含加载、广播填充、同步与写回的完整用例骨架TileData dstTile(kVRows_, kVCols_); TASSIGN(dstTile, 0x0 0x400); // 绑定片上资源 TEXPANDS(dstTile, scalar); // 标量广播填充 set_flag(PIPE_V, PIPE_MTE3, EVENT_ID0); // 向量核→搬移核同步 wait_flag(PIPE_V, PIPE_MTE3, EVENT_ID0); TSTORE(dstGlobal, dstTile); // 写回 Global Memory该测试覆盖了float、int32_t、int64_t、uint64_t、half、int16_t、bfloat16_t等类型以及整 Tile64×64与部分有效区域60×60、1×3600、16×200 等场景并针对不同PadValueNull/Max验证了边界填充行为。汇编形式示例# 自动模式由编译器/运行时负责资源放置与调度。 %dst pto.texpands %scalar : dtype - !pto.tile...# 手动模式先显式绑定资源再发射指令。 # 可选绑定示例 # pto.tassign %arg0, tile(0x1000) # pto.tassign %arg1, tile(0x2000) %dst pto.texpands %scalar : dtype - !pto.tile...%dst texpands %scalar : f32, !pto.tile... # AS Level 2 (DPS) pto.texpands ins(%scalar : dtype) outs(%dst : !pto.tile_buf...)测试与验证仓库为 TEXPANDS 提供了跨平台、跨位置类型的完整 ST 测试矩阵CPU 模拟tests/cpu/st/testcase/texpands/Vec 位置含多种数据类型与有效区域组合NPU A2/A3tests/npu/a2a3/src/st/testcase/texpands/ 与 texpands_mat/后者覆盖 Mat 位置与 ConvTile 5 维布局texpands_mat_kernel.cpp 中通过TEXPANDSTileData(MatTile, value)与TSTORE事件串联验证写入正确性NPU A5tests/npu/a5/src/st/testcase/texpands/ 与 texpands_mat/验证 64 位整型广播等 A5 新增能力衍生使用TEXPANDS 还被用于其他算子的 kernel 实现中如 hashfind、tscatter 等测试用例作为常量填充辅助手段。每个测试目录下均配有gen_data.py期望数据生成与main.cpp校验入口可通过仓库的 run_cpu.py / run_st.sh 等脚本按既有流程运行验证。总结TEXPANDS 是 pto-isa 指令集中最基础也最常用的广播写指令之一数学语义简单dst[i,j] scalar但正确使用需要同时理解三件事——汇编层面三种形式同步/SSA/DPS的表达差异C 内建接口TEXPANDS(dst, scalar, events...)的类型约束与事件同步机制以及各平台A2/A3 与 Ascend 950PR/950DT在数据类型、布局和 repeat 范围上的实现检查差异。结合本文给出的 CPU/NPU 实现原理与 ST 测试用例开发者可以据此在自动与手动两种模式下安全高效地完成 Tile 初始化、置零与常量填充并为深入理解 PTO 向量/矩阵指令家族如 TASSIGN、TSTORE、TADD 等建立坚实基础。【免费下载链接】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),仅供参考
延伸阅读

更多相关文章

2026/9/19 13:14:15

卡尔曼滤波原理与Python实战:从状态建模到工程调参

简介:本资源是一份面向自动化、控制工程及信号处理方向初学者与进阶学习者的卡尔曼滤波入门教学课件,聚焦状态估计核心原理与工程落地逻辑。课件系统讲解状态估计的统计基础(如无偏性、最小方差准则)、卡尔曼滤波的递推机制&#…

2026/9/19 13:09:14

MSI文件双击没反应?从关联到服务,一文搞定Windows Installer故障排查

1. 双击没反应这件事,到底卡在哪一环MSI 文件双击之后没反应、弹不出安装向导、甚至直接跳出一个“打开方式”的对话框让你选程序,这类问题在 Windows 上出现的频率远比想象中高。我自己经手的机器里,十台有问题的至少有六台是同一个根因。先…

2026/9/19 14:19:18

AI编程狂飙背后:Devin估值480亿,Agent如何重塑软件开发?

最近AI编程圈的刷屏基本被一条融资新闻包圆了:Devin母公司Cognition再融一笔巨资,按外界口径估值一度冲到480亿美元,单轮融资规模在20亿美元量级。我第一次看到这个数字也愣了一下——一家做AI编程工具的公司,凭什么值这么多&…

2026/9/19 14:19:18

从报表查数到口径对齐:BI系统全链路实战指南

简介:《BI商业智能系统》是一份系统讲解商业智能体系的PDF资料,适合需要理解企业数据整合与分析逻辑的IT人员、数据分析师及企业管理者学习。内容针对企业积累海量数据却难以有效利用的痛点,依次介绍了数据仓库、查询报表、OLAP在线分析、数据…

2026/9/19 14:14:18

Notepad++基线环境构建:Windows文本处理工作流起点

1. Notepad不是“记事本Plus”,它是一套轻量级文本生产力系统你搜“nodepad下载安装”,大概率是刚接触开发、运维、测试或数据处理工作,手头有个配置文件要改、一段日志要分析、或者老师/同事说“用Notepad打开看看”。但你点开百度或某下载站…

2026/9/18 14:13:01

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/19 0:03:10

验证 OpenSpec 兼容性,Cursor 的 Token 从 TaoToken 出

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 0:03:10

书桌角落的 Mac mini,OpenClaw 通过 TaoToken 跑任务。

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 0:03:10

oh-my-hermes:打造跨工具的命令编排与插件化工作流

1. 项目概述与设计初衷1.1 它到底是什么先说结论:oh-my-hermes 是一个面向开发者日常终端操作的效率工具套件,核心定位是“把分散在各类命令行工具里的高频操作,统一收拢成一套插件化、可编排的工作流”。项目灵感来源很明显——oh-my-zsh 重…

2026/9/18 14:13:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/18 14:13:02

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/18 14:13:02

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码