TTRI¶
指令示意图¶
简介¶
生成三角(下/上)掩码Tile。
数学语义¶
设 R = dst.GetValidRow(),C = dst.GetValidCol(),d = diagonal。
下三角(isUpperOrLower=0)概念上产生:
\[
\mathrm{dst}_{i,j} = \begin{cases}1 & j \le i + d \\\\ 0 & \text{否则}\end{cases}
\]
上三角(isUpperOrLower=1)概念上产生:
\[
\mathrm{dst}_{i,j} = \begin{cases}0 & j < i + d \\\\ 1 & \text{否则}\end{cases}
\]
汇编语法¶
AS Level 1(SSA)¶
%dst = pto.ttri %diag : i32 -> !pto.tile<...>
AS Level 2(DPS)¶
pto.ttri ins(%diag : i32) outs(%dst : !pto.tile_buf<...>)
C++内建接口¶
声明于 include/pto/common/pto_instr.hpp:
公共包含头为
<pto/pto-inst.hpp>,内部声明位于pto/common/pto_instr.hpp。
template <typename TileData, int isUpperOrLower, typename... WaitEvents>
PTO_INST RecordEvent TTRI(TileData &dst, int diagonal, WaitEvents &... events);
约束¶
isUpperOrLower必须是0(下三角)或1(上三角)。- 实现检查 (Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品):
- 目标Tile必须是行主序(
isRowMajor),由static_assert强制执行。 - 支持的元素类型:
int32_t、int、int16_t、uint32_t、uint16_t、half、float16_t、float、float32_t。
- 目标Tile必须是行主序(
- 实现检查 (Ascend 950PR/Ascend 950DT):
- 支持的元素类型:
int32_t、int16_t、int8_t、uint32_t、uint16_t、uint8_t、half、float16_t、float32_t、bfloat16_t。 - 下三角(
upperOrLower == 0)和上三角(upperOrLower == 1)由if constexpr分支区分。
- 支持的元素类型:
- 有效区域通过
dst.GetValidRow()/dst.GetValidCol()获取。
示例¶
#include <pto/pto-inst.hpp>
using namespace pto;
void example_lower() {
using TileT = Tile<TileType::Vec, float, 16, 16>;
TileT dst;
TASSIGN(dst, 0x1000);
TTRI<0>(dst, /*diagonal=*/0); // 下三角
}
void example_upper() {
using TileT = Tile<TileType::Vec, float, 16, 16>;
TileT dst;
TASSIGN(dst, 0x1000);
TTRI<1>(dst, /*diagonal=*/-1); // 上三角
}
汇编示例(ASM)¶
自动模式¶
# 自动模式:由编译器/运行时负责资源放置与调度。
%dst = pto.ttri {isUpperOrLower = 0} : i32 -> !pto.tile<...>
手动模式¶
# 手动模式:先显式绑定资源,再发射指令。
# pto.tassign %arg0, @tile(0x1000)
%dst = pto.ttri %diag : i32 -> !pto.tile<...>
PTO汇编形式¶
%dst = pto.ttri %diag : i32 -> !pto.tile<...>
# AS Level 2 (DPS)
pto.ttri ins(%diag : i32) outs(%dst : !pto.tile_buf<...>)