#【访存类、reduction、elementwise算子】Duplicate of # PTO ISA 与当前编译器 TileOP API 表达完备性对比
目的:以 SuperNPUBench/benchmark-ptoisa/kernels/ 下全部 24 个 PTO 一层编程算子用到的 29 条 PTO ISA 指令为基准,逐条检查当前编译器(Linx-TileOP-API tileop_api.hpp)的 C++ 接口能否完整表达 PTO ISA 文档定义的语义。只关注 API 签名层面的表达力差异(参数、名称、行为语义),不涉及后端实现方式。
排序规则:完全缺失 → 需要修改 → 名称和核心参数一致。
汇总列表
| # |
类别 |
PTO ISA 指令 |
使用算子 |
当前编译器 |
差异要点 |
| 1 |
完全缺失 |
TREMS |
broadcast_pto |
无 |
无标量取余 API;TREM 仅 tile-tile 且不支持 uint32 |
| 2 |
|
TINSERT |
vec_019, vec_039 |
无 |
无 tile 子区域写入 API;仅有反向操作 TEXTRACT |
| 3 |
|
TCOLMAX |
reducemax_colvec×2 |
无 |
列向 max 归约完全缺失(有行向 TROWMAX) |
| 4 |
|
TCOLPROD |
reduceprod_colvec |
无 |
列向 prod 归约完全缺失(无 TROWPROD 亦无 TCOLPROD) |
| 5 |
|
TCOLSUM |
reducesum_colvec×3 |
无 |
列向 sum 归约完全缺失(有行向 TROWSUM) |
| 6 |
|
TROWPROD |
reduceprod_rowvec |
无 |
行向 prod 归约完全缺失(有 TROWSUM/TROWMAX 但无 TROWPROD) |
| 7 |
|
TMOV |
concat×2, transpose, reducesum_rowvec_single, reducemax_rowvec_single |
无 |
通用 tile 拷贝/转换缺失;仅有专用布局转换 TMOV_DN2NZ 等 |
| 8 |
需要修改 |
MGATHER |
broadcast_pto, concat_gather, gather, transpose |
template_asm.h (部分) |
缺 Coalesce/GatherOOB 模板参数;索引语义不同(字节偏移 vs 元素索引) |
| 9 |
|
MSCATTER |
concat_scatter |
template_asm.h (部分) |
缺 Coalesce/ScatterAtomicOp/ScatterOOB/ScatterConflict |
| 10 |
|
TCVT |
gelu_pto |
TCVT (缺参数) |
缺 RoundMode/SaturationMode/tmp 参数 |
| 11 |
|
TDIVS |
broadcast_pto, concat×2, transpose |
TDIVS (缺参数) |
缺 PrecisionType;缺反向重载 scalar÷tile |
| 12 |
|
TEXP |
gelu_pto |
TEXP (缺参数) |
缺 PrecisionType(DEFAULT/HIGH_PRECISION) |
| 13 |
|
TRECIP |
gelu_pto |
TRECIP (缺参数) |
缺 PrecisionType(DEFAULT/HIGH_PRECISION) |
| 14 |
|
TROWMAX |
reducemax_rowvec×2 |
TROWMAX (缺 tmp) |
PTO ISA 有 tmp 参数,当前编译器无 |
| 15 |
|
TROWSUM |
reducesum_rowvec×2 |
TROWSUM (缺 tmp) |
PTO ISA 有 tmp 参数,当前编译器无 |
| 16 |
|
TTRANS |
transpose, transpose_vector_007 |
TTRANS (缺 tmp) |
PTO ISA 有 tmp 参数,当前编译器无 |
| 17 |
|
TLOAD |
全部算子 |
TCOPYIN (名不同) |
名称不同;核心参数和行为一致 |
| 18 |
|
TSTORE |
全部算子 |
TCOPYOUT (名不同) |
名称不同;缺 AtomicType/preQuantScalar |
| 19 |
|
TEXPANDS |
全部算子 |
TEXPANDSCALAR (名不同) |
名称不同;核心参数和行为一致 |
| 20 |
|
TROWEXPAND |
vec_07 |
TEXPANDROW (名不同) |
名称不同;核心参数和行为一致 |
| 21 |
一致 |
TCI |
broadcast_pto, concat×2, transpose |
TCI |
无差异 |
| 22 |
|
TADD |
broadcast_pto, concat×2, transpose, reduction×4, gelu_pto |
TADD |
无差异 |
| 23 |
|
TADDS |
gelu_pto |
TADDS |
无差异 |
| 24 |
|
TMAX |
reducemax_rowvec×2, reducemax_colvec×2 |
TMAX |
无差异 |
| 25 |
|
TMAXS |
gelu_pto |
TMAXS |
无差异 |
| 26 |
|
TMINS |
gelu_pto |
TMINS |
无差异 |
| 27 |
|
TMUL |
gelu_pto, reduceprod×2 |
TMUL |
无差异 |
| 28 |
|
TMULS |
broadcast_pto, concat×2, gelu_pto, transpose |
TMULS |
无差异 |
| 29 |
|
TSUB |
concat×2, transpose |
TSUB |
无差异 |
统计:完全缺失 7 条 · 需要修改 13 条 · 一致 9 条。
§1 完全缺失(当前编译器无对应 API)
1.1 TREMS — 标量取余
使用算子:broadcast_pto.hpp
PTO ISA 签名:
template <auto PrecisionType = RemSAlgorithm::DEFAULT,
typename TileDataDst, typename TileDataSrc,
typename TileDataTmp, typename... WaitEvents>
PTO_INST RecordEvent TREMS(TileDataDst &dst, TileDataSrc &src,
typename TileDataSrc::DType scalar,
TileDataTmp &tmp, WaitEvents &... events);
当前编译器:无 TREMS。最接近的是 TREM(dst, src0, src1)(tile-tile),但:
| 维度 |
PTO ISA TREMS |
当前编译器 TREM |
| 操作形式 |
tile ÷ 标量 |
tile ÷ tile |
tmp 参数 |
有 |
无 |
PrecisionType |
有(DEFAULT / HIGH_PRECISION) |
无 |
| 支持类型 |
A5: float, int32, uint32, half, int16, uint16 |
仅 int32, int16(不支持 uint32) |
需补充:新增 TREMS API,包含 tmp/PrecisionType 参数,支持 uint32_t。
1.2 TINSERT — tile 子区域写入
使用算子:broadcast_vec_019_pto.hpp, broadcast_vec_039_pto.hpp
PTO ISA 签名:
template <typename DstTileData, typename SrcTileData, typename... WaitEvents>
PTO_INST RecordEvent TINSERT(DstTileData &dst, SrcTileData &src,
uint16_t indexRow, uint16_t indexCol,
WaitEvents &... events);
行为:dst[indexRow+i, indexCol+j] = src[i,j]
当前编译器:无 TINSERT。仅有反向操作 TEXTRACT(dst, src, offset_i, offset_j)(从大 tile 中读取子区域),无写入子区域的操作。
需补充:新增 TINSERT API,与 TEXTRACT 对称。
1.3 TCOLMAX — 列向最大值归约
使用算子:reducemax_colvec.hpp, reducemax_colvec_unalign_120_8.hpp
PTO ISA 签名:
template <typename TileDataOut, typename TileDataIn, typename... WaitEvents>
PTO_INST RecordEvent TCOLMAX(TileDataOut &dst, TileDataIn &src,
WaitEvents &... events);
行为:dst[0, j] = max(src[i, j]) for all i(沿列方向取 max)
当前编译器:无 TCOLMAX。有行向 TROWMAX 但无列向对应。template_asm.h 有 TCOLMAX_TEPL 内联汇编但不在标准 API 中。
需补充:新增 TCOLMAX API。
1.4 TCOLPROD — 列向乘积归约
使用算子:reduceprod_colvec.hpp
PTO ISA 签名:
template <typename TileDataOut, typename TileDataIn, typename... WaitEvents>
PTO_INST RecordEvent TCOLPROD(TileDataOut &dst, TileDataIn &src,
WaitEvents &... events);
行为:dst[0, j] = prod(src[i, j]) for all i(沿列方向取乘积)
当前编译器:无 TCOLPROD。也无 TROWPROD。归约类只有 TROWSUM/TROWMAX。
需补充:新增 TCOLPROD API。
1.5 TCOLSUM — 列向求和归约
使用算子:reducesum_colvec.hpp, reducesum_colvec_unalign_120_8.hpp, reducesum_colvec_single_tree.hpp
PTO ISA 签名(两个重载):
// 简单形式
template <typename TileDataOut, typename TileDataIn, typename... WaitEvents>
PTO_INST RecordEvent TCOLSUM(TileDataOut &dst, TileDataIn &src,
WaitEvents &... events);
// 带 tmp + isBinary 的重载
template <typename TileDataOut, typename TileDataIn, typename TileDataTmp, typename... WaitEvents>
PTO_INST RecordEvent TCOLSUM(TileDataOut &dst, TileDataIn &src,
TileDataTmp &tmp, bool isBinary,
WaitEvents &... events);
行为:dst[0, j] = sum(src[i, j]) for all i(沿列方向求和)
当前编译器:无 TCOLSUM。有行向 TROWSUM 但无列向对应。template_asm.h 有 TCOLSUM_TEPL 内联汇编但不在标准 API 中。
需补充:新增 TCOLSUM API(含 tmp+isBinary 重载)。
1.6 TROWPROD — 行向乘积归约
使用算子:reduceprod_rowvec.hpp
PTO ISA 签名:
template <typename TileDataOut, typename TileDataIn, typename TileDataTmp, typename... WaitEvents>
PTO_INST RecordEvent TROWPROD(TileDataOut &dst, TileDataIn &src,
TileDataTmp &tmp, WaitEvents &... events);
行为:dst[i, 0] = prod(src[i, j]) for all j(沿行方向取乘积)
当前编译器:无 TROWPROD。有 TROWSUM/TROWMAX 但无 TROWPROD。
需补充:新增 TROWPROD API(含 tmp 参数)。
1.7 TMOV — 通用 tile 拷贝/转换
使用算子:concat_gather.hpp, concat_scatter.hpp, transpose.hpp, reducesum_rowvec_single_tree.hpp, reducemax_rowvec_single_tree.hpp
PTO ISA 签名(6 个变体,核心形式):
// Variant 1: Standard Move (纯拷贝)
template <typename DstTileData, typename SrcTileData, typename... WaitEvents>
PTO_INST RecordEvent TMOV(DstTileData &dst, SrcTileData &src,
WaitEvents &... events);
// Variant 2: ReLU Move
TMOV<..., reluMode>(dst, src, events...);
// Variant 3: Accumulator-to-Vector
TMOV<..., mode, reluMode>(dst, src, events...);
// Variant 4: Vector-Quant Move (通过 fix-pipe 量化)
TMOV<..., FpTileData, mode, reluMode>(dst, src, fp, events...);
// Variant 5: Scalar-Quant Move
TMOV<..., reluMode>(dst, src, preQuantScalar, events...);
// Variant 6: Fix-Pipe Move (TMOV_FP)
TMOV_FP(dst, src, fp, events...);
行为:通用 tile 间数据拷贝/转换,支持 ReLU、量化、Acc→Vec 转换等多种模式。
当前编译器:无通用 TMOV。jcore/template_asm.hpp 仅有专用布局转换变体(TMOV_DN2NZ, TMOV_DN2ZN, TMOV_NZ2DN 等),不支持通用 tile 间拷贝。TCOPY(dst, src) 仅支持同类型同布局拷贝。
需补充:新增通用 TMOV API,支持不同 tile 类型间拷贝和转换。
§2 需要修改(API 存在但名称或参数不完整)
2.1 MGATHER — 按索引从 global memory 取数
使用算子:broadcast_pto, concat_gather, gather_pto, transpose
| 维度 |
PTO ISA |
当前编译器 (template_asm.h) |
| 模板参数 |
<Coalesce Mode, GatherOOB Oob, ...> |
无模式参数 |
Coalesce 模式 |
Row(按行 gather)/ Elem(逐元素 gather) |
无选择 |
GatherOOB |
Undefined / Clamp / Wrap / Zero |
无 |
| 索引语义 |
Coalesce::Elem:按元素索引 dst[i,j]=src[idx[i,j]];Coalesce::Row:按行索引 dst[r,:]=table[idx[r],:] |
按字节偏移取数 |
需修改:增加 Coalesce/GatherOOB 模板参数;增加 Coalesce::Row 和 Coalesce::Elem 模式;统一索引语义(元素索引)。
2.2 MSCATTER — 按索引写回 global memory
使用算子:concat_scatter.hpp
| 维度 |
PTO ISA |
当前编译器 (template_asm.h) |
| 模板参数 |
<Coalesce, ScatterAtomicOp, ScatterOOB, [ScatterConflict], ...> |
无 |
Coalesce |
Row / Elem |
无 |
ScatterAtomicOp |
None / 原子操作模式 |
无 |
ScatterOOB |
Undefined / Clamp / Wrap / Zero |
无 |
ScatterConflict |
Last 等(仅 A5) |
无(A2A3 无此参数) |
| 索引语义 |
行索引或元素索引 |
字节偏移 |
需修改:增加 Coalesce/ScatterAtomicOp/ScatterOOB/ScatterConflict 模板参数;统一索引语义。
2.3 TCVT — 类型转换
使用算子:gelu_pto.hpp
| 维度 |
PTO ISA |
当前编译器 |
| 签名 |
4 个重载(带/不带 tmp × 带/不带 SaturationMode) |
TCVT(dst, src) 仅一种形式 |
RoundMode |
CAST_RINT / CAST_ROUND / CAST_FLOOR / CAST_CEIL / CAST_TRUNC |
无 |
SaturationMode |
ON / OFF(可选) |
无 |
tmp 参数 |
有(可选重载) |
无 |
需修改:增加 RoundMode(必选)、SaturationMode(可选)、tmp(可选重载)参数。
2.4 TDIVS — 标量整除
使用算子:broadcast_pto, concat_gather, concat_scatter, transpose
| 维度 |
PTO ISA |
当前编译器 |
PrecisionType |
DivAlgorithm::DEFAULT / HIGH_PRECISION |
无 |
| 反向重载 |
有:TDIVS(dst, scalar, src0)(scalar ÷ tile) |
无 |
需修改:增加 PrecisionType 模板参数;增加反向重载。
2.5 TEXP — 指数运算
使用算子:gelu_pto.hpp
| 维度 |
PTO ISA |
当前编译器 |
PrecisionType |
ExpAlgorithm::DEFAULT / HIGH_PRECISION |
无 |
需修改:增加 PrecisionType 模板参数。
2.6 TRECIP — 倒数
使用算子:gelu_pto.hpp
| 维度 |
PTO ISA |
当前编译器 |
PrecisionType |
RecipAlgorithm::DEFAULT / HIGH_PRECISION |
无 |
需修改:增加 PrecisionType 模板参数。
2.7 TROWMAX — 行向最大值归约
使用算子:reducemax_rowvec.hpp, reducemax_rowvec_single_tree.hpp
| 维度 |
PTO ISA |
当前编译器 |
| 签名 |
TROWMAX(dst, src, tmp, events...) |
TROWMAX(tile_shape_out &dst, tile_shape_in &src) |
tmp 参数 |
有:TileDataTmp &tmp |
无 |
需修改:增加 tmp 参数。
2.8 TROWSUM — 行向求和归约
使用算子:reducesum_rowvec.hpp, reducesum_rowvec_single_tree.hpp
| 维度 |
PTO ISA |
当前编译器 |
| 签名 |
TROWSUM(dst, src, tmp, events...) |
TROWSUM(tile_shape_out &dst, tile_shape_in &src) |
tmp 参数 |
有:TileDataTmp &tmp |
无 |
需修改:增加 tmp 参数。
2.9 TTRANS — 转置
使用算子:transpose.hpp, transpose_vector_007.hpp
| 维度 |
PTO ISA |
当前编译器 |
| 签名 |
TTRANS(dst, src, tmp, events...) |
TTRANS(tile_shape_out &dst, tile_shape_in &src) |
tmp 参数 |
有:TileDataTmp &tmp |
无 |
需修改:增加 tmp 参数。
2.10 TLOAD — 从 global memory 加载到 tile
使用算子:全部 24 个算子
| 维度 |
PTO ISA |
当前编译器 |
| 函数名 |
TLOAD |
TCOPYIN |
| 核心参数 |
(dst, src) |
(dst, src) — 一致 |
| 行为 |
GM → UB |
GM → UB — 一致 |
需修改:重命名为 TLOAD(保留 TCOPYIN 为 deprecated 别名)。
2.11 TSTORE — tile 写回 global memory
使用算子:全部 24 个算子
| 维度 |
PTO ISA |
当前编译器 |
| 函数名 |
TSTORE |
TCOPYOUT |
AtomicType |
AtomicNone(默认)/ 原子写模式 |
无 |
preQuantScalar 重载 |
有:TSTORE(dst, src, preQuantScalar, events...) |
无 |
| 核心参数 |
(dst, src) |
(dst, src) — 一致 |
需修改:重命名为 TSTORE;增加 AtomicType 模板参数;增加 preQuantScalar 重载。
2.12 TEXPANDS — 标量广播填充 tile
使用算子:全部 24 个算子
| 维度 |
PTO ISA |
当前编译器 |
| 函数名 |
TEXPANDS |
TEXPANDSCALAR |
| 核心参数 |
(dst, scalar) |
(dst, s) — 一致 |
| 行为 |
dst[i,j] = scalar |
同 — 一致 |
需修改:重命名为 TEXPANDS(保留旧名别名)。
2.13 TROWEXPAND — 行广播
使用算子:broadcast_vec_07_pto.hpp
| 维度 |
PTO ISA |
当前编译器 |
| 函数名 |
TROWEXPAND |
TEXPANDROW |
| 核心参数 |
(dst, src) |
(dst, src) — 一致 |
| 行为 |
dst[i,j] = src[i,0] |
同 — 一致 |
| shape 约束 |
src.ValidRow == dst.ValidRow;src.ValidCol 可 < dst.ValidCol |
同(已有独立模板参数 tile_shape_out/tile_shape_in,支持不同 ValidCol) |
需修改:重命名为 TROWEXPAND(保留旧名别名)。
§3 名称和核心参数一致
以下 9 条指令的函数名、核心参数列表、行为语义与 PTO ISA 文档一致,不需要修改:
| # |
指令 |
PTO ISA 签名 |
当前编译器签名 |
行为 |
| 1 |
TCI |
TCI(dst, start) <int descending> |
TCI(dst, s) <int descending> |
dst[i] = start + i(升序) |
| 2 |
TADD |
TADD(dst, src0, src1) |
TADD(dst, src0, src1) |
dst[i] = src0[i] + src1[i] |
| 3 |
TADDS |
TADDS(dst, src0, scalar) |
TADDS(dst, src, s) |
dst[i] = src[i] + scalar |
| 4 |
TMAX |
TMAX(dst, src0, src1) |
TMAX(dst, src0, src1) |
dst[i] = max(src0[i], src1[i]) |
| 5 |
TMAXS |
TMAXS(dst, src, scalar) |
TMAXS(dst, src, s) |
dst[i] = max(src[i], scalar) |
| 6 |
TMINS |
TMINS(dst, src, scalar) |
TMINS(dst, src, s) |
dst[i] = min(src[i], scalar) |
| 7 |
TMUL |
TMUL(dst, src0, src1) |
TMUL(dst, src0, src1) |
dst[i] = src0[i] * src1[i] |
| 8 |
TMULS |
TMULS(dst, src0, scalar) |
TMULS(dst, src, s) |
dst[i] = src[i] * scalar |
| 9 |
TSUB |
TSUB(dst, src0, src1) |
TSUB(dst, src0, src1) |
dst[i] = src0[i] - src1[i] |
§4 修改优先级
P0 — 阻塞算子表达(无法写出 PTO 代码)
| 指令 |
问题 |
阻塞的算子 |
TREMS |
完全缺失 |
broadcast_pto |
TINSERT |
完全缺失 |
broadcast_vec_019, broadcast_vec_039 |
TCOLMAX |
完全缺失 |
reducemax_colvec×2 |
TCOLSUM |
完全缺失 |
reducesum_colvec×3 |
TCOLPROD |
完全缺失 |
reduceprod_colvec |
TROWPROD |
完全缺失 |
reduceprod_rowvec |
TMOV |
完全缺失 |
concat×2, transpose, reducesum_rowvec_single, reducemax_rowvec_single |
TCVT |
缺 RoundMode |
gelu_pto |
MGATHER |
缺 Coalesce 模式 + 索引语义不同 |
broadcast_pto, concat_gather, gather, transpose |
MSCATTER |
缺 Coalesce 模式 + 索引语义不同 |
concat_scatter |
P1 — 语义不完整(可写但表达力受限)
| 指令 |
问题 |
TLOAD/TSTORE/TEXPANDS/TROWEXPAND |
名称不同,PTO 代码无法直接编译 |
TDIVS/TEXP/TRECIP |
缺 PrecisionType |
TROWMAX/TROWSUM/TTRANS |
缺 tmp 参数 |
TSTORE |
缺 AtomicType/preQuantScalar |
§5 统计总结
| 统计项 |
数量 |
| PTO 算子使用指令总数 |
29 |
| 完全缺失(需新增 API) |
7 |
| 需要修改(名称或参数不完整) |
13 |
| 名称和核心参数一致 |
9 |
| 涉及的算子文件总数 |
24 |
#【访存类、reduction、elementwise算子】Duplicate of # PTO ISA 与当前编译器 TileOP API 表达完备性对比
汇总列表
TREMSTREM仅 tile-tile 且不支持 uint32TINSERTTEXTRACTTCOLMAXTROWMAX)TCOLPRODTROWPROD亦无TCOLPROD)TCOLSUMTROWSUM)TROWPRODTROWSUM/TROWMAX但无TROWPROD)TMOVTMOV_DN2NZ等MGATHERCoalesce/GatherOOB模板参数;索引语义不同(字节偏移 vs 元素索引)MSCATTERCoalesce/ScatterAtomicOp/ScatterOOB/ScatterConflictTCVTTCVT(缺参数)RoundMode/SaturationMode/tmp参数TDIVSTDIVS(缺参数)PrecisionType;缺反向重载scalar÷tileTEXPTEXP(缺参数)PrecisionType(DEFAULT/HIGH_PRECISION)TRECIPTRECIP(缺参数)PrecisionType(DEFAULT/HIGH_PRECISION)TROWMAXTROWMAX(缺 tmp)tmp参数,当前编译器无TROWSUMTROWSUM(缺 tmp)tmp参数,当前编译器无TTRANSTTRANS(缺 tmp)tmp参数,当前编译器无TLOADTCOPYIN(名不同)TSTORETCOPYOUT(名不同)AtomicType/preQuantScalarTEXPANDSTEXPANDSCALAR(名不同)TROWEXPANDTEXPANDROW(名不同)TCITCITADDTADDTADDSTADDSTMAXTMAXTMAXSTMAXSTMINSTMINSTMULTMULTMULSTMULSTSUBTSUB§1 完全缺失(当前编译器无对应 API)
1.1 TREMS — 标量取余
使用算子:broadcast_pto.hpp
PTO ISA 签名:
当前编译器:无
TREMS。最接近的是TREM(dst, src0, src1)(tile-tile),但:TREMSTREMtmp参数PrecisionTypeDEFAULT/HIGH_PRECISION)需补充:新增
TREMSAPI,包含tmp/PrecisionType参数,支持uint32_t。1.2 TINSERT — tile 子区域写入
使用算子:broadcast_vec_019_pto.hpp, broadcast_vec_039_pto.hpp
PTO ISA 签名:
行为:
dst[indexRow+i, indexCol+j] = src[i,j]当前编译器:无
TINSERT。仅有反向操作TEXTRACT(dst, src, offset_i, offset_j)(从大 tile 中读取子区域),无写入子区域的操作。需补充:新增
TINSERTAPI,与TEXTRACT对称。1.3 TCOLMAX — 列向最大值归约
使用算子:reducemax_colvec.hpp, reducemax_colvec_unalign_120_8.hpp
PTO ISA 签名:
行为:
dst[0, j] = max(src[i, j]) for all i(沿列方向取 max)当前编译器:无
TCOLMAX。有行向TROWMAX但无列向对应。template_asm.h有TCOLMAX_TEPL内联汇编但不在标准 API 中。需补充:新增
TCOLMAXAPI。1.4 TCOLPROD — 列向乘积归约
使用算子:reduceprod_colvec.hpp
PTO ISA 签名:
行为:
dst[0, j] = prod(src[i, j]) for all i(沿列方向取乘积)当前编译器:无
TCOLPROD。也无TROWPROD。归约类只有TROWSUM/TROWMAX。需补充:新增
TCOLPRODAPI。1.5 TCOLSUM — 列向求和归约
使用算子:reducesum_colvec.hpp, reducesum_colvec_unalign_120_8.hpp, reducesum_colvec_single_tree.hpp
PTO ISA 签名(两个重载):
行为:
dst[0, j] = sum(src[i, j]) for all i(沿列方向求和)当前编译器:无
TCOLSUM。有行向TROWSUM但无列向对应。template_asm.h有TCOLSUM_TEPL内联汇编但不在标准 API 中。需补充:新增
TCOLSUMAPI(含tmp+isBinary重载)。1.6 TROWPROD — 行向乘积归约
使用算子:reduceprod_rowvec.hpp
PTO ISA 签名:
行为:
dst[i, 0] = prod(src[i, j]) for all j(沿行方向取乘积)当前编译器:无
TROWPROD。有TROWSUM/TROWMAX但无TROWPROD。需补充:新增
TROWPRODAPI(含tmp参数)。1.7 TMOV — 通用 tile 拷贝/转换
使用算子:concat_gather.hpp, concat_scatter.hpp, transpose.hpp, reducesum_rowvec_single_tree.hpp, reducemax_rowvec_single_tree.hpp
PTO ISA 签名(6 个变体,核心形式):
行为:通用 tile 间数据拷贝/转换,支持 ReLU、量化、Acc→Vec 转换等多种模式。
当前编译器:无通用
TMOV。jcore/template_asm.hpp仅有专用布局转换变体(TMOV_DN2NZ,TMOV_DN2ZN,TMOV_NZ2DN等),不支持通用 tile 间拷贝。TCOPY(dst, src)仅支持同类型同布局拷贝。需补充:新增通用
TMOVAPI,支持不同 tile 类型间拷贝和转换。§2 需要修改(API 存在但名称或参数不完整)
2.1 MGATHER — 按索引从 global memory 取数
使用算子:broadcast_pto, concat_gather, gather_pto, transpose
<Coalesce Mode, GatherOOB Oob, ...>Coalesce模式Row(按行 gather)/Elem(逐元素 gather)GatherOOBUndefined/Clamp/Wrap/ZeroCoalesce::Elem:按元素索引dst[i,j]=src[idx[i,j]];Coalesce::Row:按行索引dst[r,:]=table[idx[r],:]需修改:增加
Coalesce/GatherOOB模板参数;增加Coalesce::Row和Coalesce::Elem模式;统一索引语义(元素索引)。2.2 MSCATTER — 按索引写回 global memory
使用算子:concat_scatter.hpp
<Coalesce, ScatterAtomicOp, ScatterOOB, [ScatterConflict], ...>CoalesceRow/ElemScatterAtomicOpNone/ 原子操作模式ScatterOOBUndefined/Clamp/Wrap/ZeroScatterConflictLast等(仅 A5)需修改:增加
Coalesce/ScatterAtomicOp/ScatterOOB/ScatterConflict模板参数;统一索引语义。2.3 TCVT — 类型转换
使用算子:gelu_pto.hpp
TCVT(dst, src)仅一种形式RoundModeCAST_RINT/CAST_ROUND/CAST_FLOOR/CAST_CEIL/CAST_TRUNCSaturationModeON/OFF(可选)tmp参数需修改:增加
RoundMode(必选)、SaturationMode(可选)、tmp(可选重载)参数。2.4 TDIVS — 标量整除
使用算子:broadcast_pto, concat_gather, concat_scatter, transpose
PrecisionTypeDivAlgorithm::DEFAULT/HIGH_PRECISIONTDIVS(dst, scalar, src0)(scalar ÷ tile)需修改:增加
PrecisionType模板参数;增加反向重载。2.5 TEXP — 指数运算
使用算子:gelu_pto.hpp
PrecisionTypeExpAlgorithm::DEFAULT/HIGH_PRECISION需修改:增加
PrecisionType模板参数。2.6 TRECIP — 倒数
使用算子:gelu_pto.hpp
PrecisionTypeRecipAlgorithm::DEFAULT/HIGH_PRECISION需修改:增加
PrecisionType模板参数。2.7 TROWMAX — 行向最大值归约
使用算子:reducemax_rowvec.hpp, reducemax_rowvec_single_tree.hpp
TROWMAX(dst, src, tmp, events...)TROWMAX(tile_shape_out &dst, tile_shape_in &src)tmp参数TileDataTmp &tmp需修改:增加
tmp参数。2.8 TROWSUM — 行向求和归约
使用算子:reducesum_rowvec.hpp, reducesum_rowvec_single_tree.hpp
TROWSUM(dst, src, tmp, events...)TROWSUM(tile_shape_out &dst, tile_shape_in &src)tmp参数TileDataTmp &tmp需修改:增加
tmp参数。2.9 TTRANS — 转置
使用算子:transpose.hpp, transpose_vector_007.hpp
TTRANS(dst, src, tmp, events...)TTRANS(tile_shape_out &dst, tile_shape_in &src)tmp参数TileDataTmp &tmp需修改:增加
tmp参数。2.10 TLOAD — 从 global memory 加载到 tile
使用算子:全部 24 个算子
TLOADTCOPYIN(dst, src)(dst, src)— 一致需修改:重命名为
TLOAD(保留TCOPYIN为 deprecated 别名)。2.11 TSTORE — tile 写回 global memory
使用算子:全部 24 个算子
TSTORETCOPYOUTAtomicTypeAtomicNone(默认)/ 原子写模式preQuantScalar重载TSTORE(dst, src, preQuantScalar, events...)(dst, src)(dst, src)— 一致需修改:重命名为
TSTORE;增加AtomicType模板参数;增加preQuantScalar重载。2.12 TEXPANDS — 标量广播填充 tile
使用算子:全部 24 个算子
TEXPANDSTEXPANDSCALAR(dst, scalar)(dst, s)— 一致dst[i,j] = scalar需修改:重命名为
TEXPANDS(保留旧名别名)。2.13 TROWEXPAND — 行广播
使用算子:broadcast_vec_07_pto.hpp
TROWEXPANDTEXPANDROW(dst, src)(dst, src)— 一致dst[i,j] = src[i,0]src.ValidRow == dst.ValidRow;src.ValidCol可 <dst.ValidColtile_shape_out/tile_shape_in,支持不同 ValidCol)需修改:重命名为
TROWEXPAND(保留旧名别名)。§3 名称和核心参数一致
以下 9 条指令的函数名、核心参数列表、行为语义与 PTO ISA 文档一致,不需要修改:
TCITCI(dst, start)<int descending>TCI(dst, s)<int descending>dst[i] = start + i(升序)TADDTADD(dst, src0, src1)TADD(dst, src0, src1)dst[i] = src0[i] + src1[i]TADDSTADDS(dst, src0, scalar)TADDS(dst, src, s)dst[i] = src[i] + scalarTMAXTMAX(dst, src0, src1)TMAX(dst, src0, src1)dst[i] = max(src0[i], src1[i])TMAXSTMAXS(dst, src, scalar)TMAXS(dst, src, s)dst[i] = max(src[i], scalar)TMINSTMINS(dst, src, scalar)TMINS(dst, src, s)dst[i] = min(src[i], scalar)TMULTMUL(dst, src0, src1)TMUL(dst, src0, src1)dst[i] = src0[i] * src1[i]TMULSTMULS(dst, src0, scalar)TMULS(dst, src, s)dst[i] = src[i] * scalarTSUBTSUB(dst, src0, src1)TSUB(dst, src0, src1)dst[i] = src0[i] - src1[i]§4 修改优先级
P0 — 阻塞算子表达(无法写出 PTO 代码)
TREMSTINSERTTCOLMAXTCOLSUMTCOLPRODTROWPRODTMOVTCVTRoundModeMGATHERCoalesce模式 + 索引语义不同MSCATTERCoalesce模式 + 索引语义不同P1 — 语义不完整(可写但表达力受限)
TLOAD/TSTORE/TEXPANDS/TROWEXPANDTDIVS/TEXP/TRECIPPrecisionTypeTROWMAX/TROWSUM/TTRANStmp参数TSTOREAtomicType/preQuantScalar§5 统计总结