CANN/pto-isa TAXPY指令文档
2026/7/24 4:57:23 网站建设 项目流程

TAXPY

【免费下载链接】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

简介

对 Tile 执行原位缩放累加(AXPY,$a \cdot x + y$):将src0按标量scalar缩放后累加到dst上。

$$ \mathrm{dst}{i,j} \leftarrow \mathrm{scalar} \cdot \mathrm{src0}{i,j} + \mathrm{dst}_{i,j} $$

dst既是累加输入($y$)也是输出,调用前必须已初始化;src0($x$)只读;scalar($a$)为标量。

数学语义

对于有效区域中的每个元素(i, j)

$$ \mathrm{dst}{i,j}^{\text{new}} = \mathrm{scalar} \cdot \mathrm{src0}{i,j} + \mathrm{dst}_{i,j}^{\text{old}} $$

  • dst:读-修改-写(RMW)。读入旧值作为累加基 $y$,写回 $\mathrm{scalar} \cdot x + y$。
  • src0:只读,逐元素参与运算($x$)。
  • scalar:标量缩放系数($a$),类型为TileDataSrc::DType

除非另有说明,语义在有效区域内定义,目标相关行为标记为实现定义。

C++ 内建接口

声明于include/pto/common/pto_instr.hpp

template <typename TileDataDst, typename TileDataSrc, typename... WaitEvents> PTO_INST RecordEvent TAXPY(TileDataDst &dst, TileDataSrc &src0, typename TileDataSrc::DType scalar, WaitEvents &...events);
参数方向含义
dst输入/输出累加基与结果 Tile($y$),读-修改-写,Vec
src0输入缩放源 Tile($x$),只读,Vec,有效形状与dst相同
scalar输入标量缩放系数($a$),类型为TileDataSrc::DType
events...输入等待事件(WaitEvents),指令前隐式TSYNC

Tile 尺寸与数据类型

对于有效形状 $M \times N$:

Tiledtype有效形状TileType说明
dsthalffloat$M \times N$Vec(UB)累加基 + 结果(RMW)
src0halffloat$M \times N$Vec(UB)缩放源,逐元素

dstsrc0的有效行数、有效列数必须完全相同。

支持的输入 dtype

dstdtypesrc0dtypescalardtype说明
halfhalfhalf同类型路径,直接vaxpy
floatfloatfloat同类型路径,直接vaxpy
floathalfhalf差异路径:src0拓宽为 FP32 后累加

dstsrc0必须 dtype 一致,或dstfloatsrc0half(允许 half→float 的拓宽累加)。dsthalfsrc0float的组合非法(实现内static_assert拦截)。

实现说明

TAXPY 在向量流水线(PIPE_V)上执行,使用vaxpy($a \cdot x + y$)向量内建:

  1. 同类型(dstsrc0同 dtype):逐 repeat 加载src0dst,执行vaxpy(dst, src0, scalar)后写回dst;尾部不足一个 repeat 的列由谓词掩码屏蔽。
  2. 差异类型(dst=floatsrc0=halfsrc0的 half 数据拓宽为 FP32 后参与累加(A5 上经UNPK_B16解包并vcvt转换;A2/A3 由vaxpy原生按 4-block src / 8-block dst 处理)。
  3. A2/A3 上按 repeat-stride 是否溢出、以及列数与行数的关系,在 count 模式与 norm 模式间选择,以覆盖任意有效形状。

约束

约束适用范围原因
dstsrc0必须为TileType::Vec所有目标在 UB(向量流水线)上执行
dstsrc0有效形状相同($M \times N$)所有目标逐元素一一对应
dstdtype ∈ {half,float}所有目标vaxpy支持的浮点字宽
dst/src0dtype 一致,或 (float,half)所有目标仅允许 half→float 拓宽累加
dst调用前必须已初始化所有目标dst作为累加基 $y$ 被读入

示例

// dst 必须先初始化(作为累加基 y);结果:dst = scalar * src0 + dst TAXPY(dstTile, srcTile, scalar);

完整 ST 示例见tests/npu/a5/src/st/testcase/taxpy/(A5)、tests/npu/a2a3/src/st/testcase/taxpy/(A2/A3)、tests/npu/kirin9030/src/st/testcase/taxpy/(Kirin9030)及tests/cpu/st/testcase/taxpy/(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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询