Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,12 @@ check:
python3 test/test_tpack_element_assembly_api.py
python3 test/test_pr_gate_cache_order.py
python3 test/test_version_header.py
python3 test/test_layout_header_link.py
python3 test/test_element_tile_api.py
python3 test/test_tile_array_participant_mask.py
python3 test/test_i64_element_tile_api.py
python3 test/test_i64_element_tile_runtime.py
python3 test/test_integer_element_storage.py
python3 test/test_dense_f16_element_tile_api.py
python3 test/test_hierarchical_element_storage_api.py
python3 test/test_runtime_adapter_contract.py
$(CXX) -std=c++20 -D__linx -include test/linx_host_type_shim.hpp \
-fsyntax-only -Iinclude test/ptoas_linx_type_compat.cpp
$(CXX) -std=c++20 -D__linx -include test/linx_host_type_shim.hpp \
Expand Down Expand Up @@ -65,9 +62,6 @@ install:
echo '#define PTO_TILEOP_API_HAS_ELEMENT_TILE 1'; \
echo '#define PTO_TILEOP_API_HAS_ELEMENT_VIEW_METADATA 1'; \
echo '#define PTO_TILEOP_API_HAS_TYPED_ELEMENT_VIEWS 1'; \
echo '#define PTO_TILEOP_API_HAS_SYNC_CORE 1'; \
echo '#define PTO_TILEOP_API_HAS_GROUP_RUNTIME_ABI 1'; \
echo '#define PTO_TILEOP_API_HAS_TILE_ARRAY_PARTICIPANT_MASK 1'; \
echo '#define PTO_TILEOP_API_HAS_512_INTEGER_ELEMENT_TILE 1'; \
echo '#define PTO_TILEOP_API_HAS_I64_ELEMENT_TILE_LEAF32 1'; \
echo '#define PTO_TILEOP_API_HAS_DENSE_F16_U16_ELEMENT_TILE 1'; \
Expand Down
2 changes: 0 additions & 2 deletions docs/tileop-usage/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@ kernel;其中的旧版本数量、旧 engine inventory 和旧 encoding identit
- `PTO_TILEOP_API_REVISION`:`make install` 时实际 checkout 的 Git commit;
- `PTO_TILEOP_API_REVISION_IS_EXACT`:revision 是否来自干净 checkout;
- `PTO_TILEOP_API_HAS_LOCAL_B_KN_FIX`:local Right B 使用逻辑 `[K,N]` 契约。
- `PTO_TILEOP_API_HAS_TILE_ARRAY_PARTICIPANT_MASK`:`TileArray` raw `TMOV`
assembly 支持显式参与 PE mask。

当前 wrapper 与 PTO 0.58.7 catalog 的覆盖边界见
[统一支持状态表](support-status.md)。该表区分“已实现”“仅部分 layout 支持”“尚无
Expand Down
48 changes: 8 additions & 40 deletions docs/tileop-usage/b-subview-b-assemble.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,28 +41,6 @@ source、兼容代码和编码回归测试;`*_at_reg` 接口只出现在固定
的 TileOP 会自动发出对应 `INIT → MIDDLE* → LAST` 生命周期的
`B.ASSEMBLE`;`TASSEMBLY` 本身不发独立指令,只返回组装好的 parent。

`TileArray<Fragment, Rows, Cols, ParticipantMask>` 的第四个模板参数指定
raw `TMOV` assembly writer 的参与 PE 集合,默认值为 `15`。合法的非零原生
mask 是 `1, 2, 4, 8, 12, 14, 15`;位序为 `bit = 3 - PE`,所以 PE0-only
写作 `8`(`1000`)。同一次 INIT/MIDDLE/LAST assembly 生命周期中的所有
`B.IOT` 都携带相同 mask。

显式非默认 mask 的 writer 应放在 `PTO_PE_DOMAIN(mask)` 标记的函数中。该宏
要求编译器提供 `__LINX_PTO_PE_DOMAIN__`;旧编译器会把调用诊断为 unavailable,
不会静默忽略域信息。当前非默认 mask 只开放给 raw `TMOV` writer,其他仍按
默认 mask 定义的 TileArray destination overload 会在类型检查时拒绝该 slot。

```cpp
PTO_PE_DOMAIN(8)
void assemble_pe0(ElementTile<uint32_t, 32> (&parts)[4]) {
TileArray<ElementTile<uint32_t, 32>, 1, 4, 8> outputs;
for (int i = 0; i < 4; ++i)
TMOV(outputs[0][i], parts[i]);
auto parent = TASSEMBLY<ElementTile<uint32_t, 128>>(std::move(outputs));
// 在本函数域内继续消费或写回 parent。
}
```

同一规则可以逐级组成更大的闭合 parent。每一级先完成自己的
`INIT -> MIDDLE* -> LAST`,`TASSEMBLY` 返回的完整 `ElementTile` 才能作为下一
级 raw `TMOV` writer 的 source。例如 F32 使用 `32 -> 128 -> 2048 -> 16384`
Expand Down Expand Up @@ -398,31 +376,21 @@ void session(GM &gm_lo, GM &gm_hi, Src &a, Src &b) {
### 完整会话示例(多 fragment 拼装一个 parent)

```cpp
using Parent = Tile<Location::Vec, float, 32, 16, BLayout::RowMajor>;
using GM = global_tensor<float, RowMajor<32, 4>>;
using Dst = Tile<Location::Vec, float, 4, 8, BLayout::RowMajor>;
using GM = global_tensor<float, RowMajor<4, 8>>;

void load_four(GM &gm0, GM &gm1, GM &gm2, GM &gm3, Parent &out) {
Parent tile; // 2 KiB parent,四个 512 B writer 覆盖不同范围
auto first = range::assemble<4, 0>(tile);
void load_three(GM &gm0, GM &gm1, GM &gm2, Dst &tile) {
auto first = range::assemble(tile); // INIT
TLOAD(first, gm0);

auto middle0 = range::assemble_middle<4, 4>(tile);
TLOAD_ASS(middle0, gm1);
auto middle1 = range::assemble_middle<4, 8>(tile);
TLOAD_ASS(middle1, gm2);
auto middle = range::assemble_middle(tile); // MIDDLE
TLOAD_ASS(middle, gm1); // 非 INIT slot 用 _ASS

auto last = range::assemble_last<4, 12>(tile);
TLOAD_ASS(last, gm3);
out = tile; // LAST 后才发布完整 parent
auto last = range::assemble_last(tile); // LAST
TLOAD_ASS(last, gm2);
}
```

LAST 之前的 parent 处于 OPEN 状态,只能由后续 assembly slot 消费。不能
提前 `TSTORE`、普通 `TMOV` 或通过输出引用把它写回内存;函数只发出 INIT
后返回也不合法。使用局部 parent 完成整个 session,再向外发布。
`AssemblyLifetime.cpp` 验证完整 session 可生成对象,并要求两种提前发布路径
被编译器拒绝。`RangeAssemble.cpp` 中的孤立 slot 仅用于语法与 IR 检查。

## `*_ASS`:TEPL 计算直接写入 assembled destination

TEPL 逐元素、归约、广播、比较接口提供 `_ASS` 后缀版本:destination 是
Expand Down
50 changes: 2 additions & 48 deletions docs/tileop-usage/options.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,55 +272,9 @@ PRelu prelu;
TMATMUL(d, a, b, fixp::f16().prelu(prelu));
```

## 6.1 动态有效区域与物理列数
## 6.1 Reduction result prefix views

动态 shape 的 CUBE Tile 可以保留较大的静态容量,同时让一次操作使用较小的运行时
descriptor。`Tile<..., Rows, Cols, ..., DYNAMIC, DYNAMIC>` 中的 `Rows` 和 `Cols`
仍决定 Tile 的容量上限和 SizeCode;它们不要求每次操作都把 `Cols` 作为 `LB2`。

以下接口在原有 `UserValidCol`、`UserValidRow` 参数之后接受可选的
`UserPhysicalCol`:

- 二元逐元素操作,如 `TADD`、`TSUB`、`TMUL`、`TDIV`、位运算和 min/max;
- `TEXPANDS`;
- 二元 `TROWEXPAND*` 操作。

三个参数都为零时,接口保留原有行为。进入运行时 geometry 重载后,省略的
valid 维度从对应 Tile 实例读取(静态 Tile 返回类型常量),省略的物理列数使用
`Tile::Cols`。调用时建议同时给出三个值。API 在发出 inline asm
之前检查 `0 < ValidCol <= PhysicalCol <= Tile::Cols` 和
`0 < ValidRow <= Tile::Rows`;非法范围直接失败。对 CUBE layout,`PhysicalCol`
是逻辑物理列数,实际存储列数继续由 layout 和 dtype 的 CELL geometry 对齐,因此
奇数列(例如 FP32 CUBE_M32 的 5 列)本身是合法输入。

下面的 Tile 仍保留 32 KiB 的 FP32 容量,但本次计算使用
`ValidRow=2, ValidCol=6, PhysicalCol=6`:

```cpp
using Wide = Tile<Location::Vec, float, 32, 256,
BLayout::CubeM32, DYNAMIC, DYNAMIC>;
using Row = Tile<Location::Vec, float, 32, 1,
BLayout::CubeM32, DYNAMIC, 1>;

Wide ga(2, 6), ba(2, 6), bf(2, 6), tmp(2, 6);
Row mean(2);

TEXPANDS(ga, 0.0f, 6, 2, 6);
TADD(ba, ba, bf, 6, 2, 6);
TSUB(tmp, ga, bf, 6, 2, 6);
TROWEXPANDMUL(tmp, bf, mean, 6, 2, 6);
```

这个重载不会缩小 Tile 的分配容量,也不会把有效区拆成多个幂次宽度片段。它只让
当前 bundle 的 `LB0/LB1/LB2` 与实际 producer descriptor 一致。CUBE `TLOAD`
和 CUBE `TCVT` 按 valid shape 派生持久 descriptor,CUBE `TSTORE` 使用绑定源的
descriptor;后续逐元素操作必须传递与该来源一致的运行时物理列数。完整的 6 列、
奇数 5 列和非法范围编译 fixture 见
`test/tileop_api/src/RuntimePhysicalCols.cpp`。

## 6.2 Reduction result prefix views

## 6.3 TCMPS predicate GPR carriers
## 6.2 TCMPS predicate GPR carriers

`TCMPS` 的 CUBE GPR 输出重载使用 source-only `B.IOT` 和带 destination GPR
的 `B.IOR`,不会分配 PredicateCell。非 `U8` 类型使用低半 predicate carrier;
Expand Down
2 changes: 1 addition & 1 deletion include/common/layout.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ enum PadValueEnum : uint64_t {
Null = 3
};

inline const char *layout_type_to_str(LayoutEnum type) {
const char *layout_type_to_str(LayoutEnum type) {
switch (type) {
case LayoutEnum::kRowMajor:
return "RowMajor";
Expand Down
113 changes: 0 additions & 113 deletions include/common/pto_pe_runtime.hpp

This file was deleted.

Loading
Loading