PTO ISA 参考
本目录是 PTO Tile Lib ISA 的指令参考(每条指令一页)。
- 权威来源:
docs/reference/pto-intrinsics-header.md(C++ intrinsics,声明于include/pto/common/pto_instr.hpp) - 通用约定(操作数、事件、修饰符):
docs/isa/conventions.md
逐元素(Tile × Tile)
TADD— 两个 tile 的逐元素相加。TABS— tile 的逐元素绝对值。TSUB— 两个 tile 的逐元素相减。TMUL— 两个 tile 的逐元素相乘。TDIV— 两个 tile 的逐元素相除。TREM— 两个 tile 的逐元素取余。TSHL— 两个 tile 的逐元素左移。TSHR— 两个 tile 的逐元素右移。TAND— 两个 tile 的逐元素按位与。TOR— 两个 tile 的逐元素按位或。TXOR— 两个 tile 的逐元素按位异或。TMIN— 两个 tile 的逐元素最小值。TMAX— 两个 tile 的逐元素最大值。TEXP— 逐元素指数。TLOG— tile 的逐元素自然对数。TSQRT— 逐元素平方根。TRSQRT— 逐元素倒平方根。TRECIP— 逐元素倒数。TNEG— 逐元素取负。TNOT— 逐元素按位取反。TRELU— 逐元素 ReLU。TPRELU— 逐元素 PReLU(带每元素 slope tile 的参数化 ReLU)。TADDC— 逐元素三元加法:src0 + src1 + src2。TSUBC— 逐元素三元运算:src0 - src1 + src2。TSEL— 通过 mask tile 在两张 tile 之间逐元素选择。TCMP— 比较两张 tile 并写入压缩的谓词 mask。TCVT— 带指定舍入模式的逐元素类型转换。
Tile × 标量 / 立即数
TADDS— tile 逐元素加一个标量。TSUBS— tile 逐元素减一个标量。TDIVS— 与标量的逐元素除法(tile/scalar 或 scalar/tile)。TMULS— tile 逐元素乘一个标量。TREMS— 与标量的逐元素取余:fmod(src, scalar)(或整数的%)。TMAXS— tile 与标量逐元素取 max:max(src, scalar)。TMINS— tile 与标量逐元素取 min。TANDS— tile 与标量逐元素按位与。TORS— tile 与标量逐元素按位或。TXORS— tile 与标量逐元素按位异或。TCMPS— tile 与标量比较,并写入逐元素的比较结果。TEXPANDS— 将标量广播到目标 tile。TSELS— 使用标量selectMode在两张 tile 之间选择(全局选择)。TLRELU— 带标量 slope 的 Leaky ReLU。TADDSC— 逐元素融合加法:src0 + scalar + src1。TSUBSC— 逐元素融合运算:src0 - scalar + src1。TSHLS— tile 逐元素左移标量对应位数。TSHRS— tile 逐元素右移标量对应位数。
轴向归约 / 展开
TROWSUM— 对每行按列求和。TROWMAX— 对每行按列取最大值。TROWMIN— 对每行按列取最小值。TROWEXPAND— 将源 tile 每行的第一个元素广播到目标行。TROWEXPANDDIV— 行级广播除法:对src0的每一行除以每行标量向量src1。TROWEXPANDMUL— 行级广播乘法:对src0的每一行乘以每行标量向量src1。TROWEXPANDSUB— 行级广播减法:对src0的每一行减去每行标量向量src1。TCOLSUM— 对每列按行求和。TCOLMAX— 对每列按行取最大值。TCOLMIN— 对每列按行取最小值。TCOLEXPAND— 将源 tile 每列的第一个元素广播到目标列。
Padding
TFILLPAD— 将源 tile 拷贝到目标 tile,并用TileDataDst::PadVal选择的编译期 pad 值填充剩余(padding)元素(例如PadValue::Min/PadValue::Max)。
内存(GM <-> Tile)
TLOAD— 从 GlobalTensor(GM)加载到 Tile。TSTORE— 将 Tile 存回 GlobalTensor(GM),可选原子写或量化参数。TSTORE_FP— 将 accumulator tile 存回 GM,并使用缩放(fp)tile 作为向量量化参数。MGATHER— 使用逐元素索引从 GM gather-load 到 tile。MSCATTER— 使用逐元素索引从 tile scatter-store 到 GM。
矩阵乘
TMATMUL— 矩阵乘(GEMM),产生 accumulator / 输出 tile。TMATMUL_MX— 带额外缩放 tiles 的矩阵乘(用于支持目标上的混合精度/量化 matmul)。TMATMUL_ACC— 带 accumulator 输入的矩阵乘(融合 accumulate)。TMATMUL_BIAS— 带 bias add 的矩阵乘。
数据搬运 / 布局
TMOV— tile 间搬运/拷贝,可选实现定义的转换模式。TMOV_FP— 从 accumulator tile 搬运/转换到目标 tile,并使用缩放(fp)tile 作为向量量化参数。TTRANS— 转置(需要实现定义的临时 tile)。TEXTRACT— 从源 tile 提取 sub-tile。TRESHAPE— 在保持底层字节不变的前提下,将 tile 解释为另一种 tile 类型/形状。TASSIGN— 将 Tile 对象绑定到实现定义的片上地址(手动 placement)。
复杂指令
TCI— 在目标 tile 中生成连续的整数序列。TGATHER— 使用索引 tile 或编译期 mask 模式进行 gather/select。TGATHERB— 使用字节偏移进行 gather。TSCATTER— 使用逐元素行索引将源 tile 的行 scatter 到目标 tile。TSORT32— 对固定大小 32 元素块排序并产生索引映射。TMRGSORT— 多个已排序列表的归并排序(元素格式与布局为实现定义)。TPARTADD— 部分逐元素 add(有效区域不一致时的处理为实现定义)。TPARTMAX— 部分逐元素 max(有效区域不一致时的处理为实现定义)。TPARTMIN— 部分逐元素 min(有效区域不一致时的处理为实现定义)。
同步
TSYNC— PTO 执行同步(等待事件或插入 per-op 的 pipeline barrier)。