# Tile 交接：2026-09-09 晚

> **当前接续请先读本段（2026-09-10 本地历史恢复）。** 下文保留昨晚及今早的历史
> checkpoint，不能把其中的“尚未接通”或“今晚暂停”当作当前工作状态。

## 9 月 10 日恢复后的定位

下午接续：计时与整合修复已提交 `4cb312287`、`01e482839`。随后完成共享静态
snapshot 分析、后端 candidate-dependent 预算，以及 cost 之前的资源筛选；
root 分块校验也改为共享、可恢复的错误。全构建与 8 项选定回归通过，
详见 [资源准入 checkpoint](../../scripts/benchmark/tile_torch/results/m1-max-20260910-xir-resource-admission/README.md)。
旧完整 XIR 测试仍有 recipe-depth/SSA-expansion fatal 负例，不称全绿。
收尾又安全快进 `next` 到 `6291071ee`；没有覆盖原有 WIP。
本轮不是性能测量：下一步是按 [RoPE 机器码证据](ROOT_MAPPING_COST_NOTES.zh.md#9-rope-生成代码的有界证据先组织共享-dag再调-root-枚举)
验证现有 pointwise fusion，然后推进 mapping × materialization × chunk/unroll 的联合候选。

已重新核对本任务 9 月 2–10 日的本地对话、Git 提交、文档和原始测量文件。
设计主线没有重启：execution-first、资源/执行解耦、可修改 TileIR、后端可替换
target-info/cost policy、公共 solver，以及默认 unordered-tree 的 reduction。
scan 优先是 reindex/gather 与 elementwise 的库组合，不新增 execution primitive。
研究结论与尚未完成的形式化义务仍由 [中文 related work](RELATED_WORK.md)、
[calculus](../../docs/source/internals/tile/calculus.md) 和
[decision ledger](../../docs/source/internals/tile/decisions.md) 维护，不复制成第二套规范。

- `99fad8c49` 已推送：公共 XIR bridge 的 16-lane 上限已去除，后端拥有执行能力、
  候选与成本信息；XIR → LLVM/AIR → Metal4 Runtime 已接通。本机实际验证 W32，
  W64 仅有 IR/target-info 合约验证。GPU 成本仍未校准。
- 恢复时本地 `next` 为 `99fad8c49`，本地缓存的 `origin/next` 又领先 7 个提交，
  到 `811022021`。后续整合的准确版本应以 Git 和验证记录为准，不能沿用旧二进制成绩。
- 新的独立 Metal4 timing 工作区实现通过过 8 项选定回归；该次专用测试为
  5 用例 / 8,279 断言，是 **首条 indirect dispatch 边界修正之前** 的验证。
  计时区分 precise 插桩 dispatch、无 counter 的 CB 控制组与 host E2E，
  不称作零扰动“纯 kernel 时间”。默认等待方式与反馈队列未改。
- 固定 batch 的 pilot 为 18/18 OK；扩展 rows 的 144 项预注册矩阵在恢复时是
  **35 OK、2 Error、107 NotRun**，进程已结束且清单无完成戳，不能称全部测完。
  两个 Error 是 1024×4097 的 LayerNorm/softmax 单-lane snapshot 预算拒绝；
  同尺寸 W32/auto 通过。原始中断清单保留，不把缺失行填成性能数据。
- 当前证据与后续验证统一进入
  [Metal4 timing checkpoint](../../scripts/benchmark/tile_torch/results/m1-max-20260910-metal4-timing/README.md)。
  计时边界修正与版本整合回归已完成，下一步是候选级资源约束/实际 realization 成本。
  144 项未完成矩阵不作为成本拟合或性能排名。

**整体性能目标仍未完成。** SIMD norm/GELU 的受限 native-entry 优势、Metal/TIRx
行算子的 eager-Torch 优势都有各自口径；不能推广成默认 planner、GEMM、attention、
低精度或跨设备全面领先。原 4096³ SIMD GEMM 矩阵 Error 仍未彻底修好。
用户原有 TIRx、文档、skill 与子模块 WIP 必须继续独立保留。

恢复后已安全快进主工作区到 `811022021`。本地 TIRx `compiler.cpp` 与
`cooperative.cpp` 的两处候选重试冲突按三方内容恢复：保留上游 Diagnostic
传播，每个可选候选使用独立诊断与临时 plans，成功才发布，失败回到原表示。
这些仍是未提交的原有 WIP，不归入 Metal4 timing 提交或其隔离验证。
原始改动另存于 stash `9a9ab9fa2ce5453e9b1a406e38bcc2800af0298d`，没有删除；
恢复结果逐文件匹配预检索引。后续构建验证状态以 timing checkpoint 的追加记录为准。

恢复后的接续结果：首条 indirect dispatch 的采样错误标记已修复，专用回归为
6 用例 / 8,515 断言。`811022021` 隔离整合后完整构建通过，首轮选定 CTest
19/20 通过；唯一失败是上游 STL 测试入口的 Boost.UT 重载 `&&` 失去短路语义。
改为独立参数 guard 后，STL 正常测试及两个拒绝子进程 3/3 通过。
TIRx 的非空 `Module` 错误返回和 `IRModule` 默认构造链接问题也已修复，新增
严格 reduction 缺少 precise-math contract 的可恢复错误回归。
这些兼容性修复已提交为 `4cb312287`；不把它们或 timing 设施描述为 planner 加速。

---

用户安排：今晚 Maxwell 接手 CUDA lowering，SIMD/Metal 性能工作明天继续。
本文件所在提交是收尾 checkpoint；不再继续运行调优实验。

## 已提交的成果

- 分支是 `next`；`b6b10e603` 已推送通用 XIR map/index fusion、纯入口重放工具、
  完整证据和 docs 整理。Fusion 默认关闭；对齐 CPU scan 的 18–21× 是同新版
  off/on、单线程完整 native-launch 的观察，不是新/老 Tile 或 Torch 比较。
- 随本交接提交 `root_axis_tiles`：显式、整除、双射的 root execution traversal。
  公共 Tile DSL/TileIR 不变；只改 XIR bridge 和 SIMD Runtime 的固定约束通路。
- Root 内部 serial/pipeline/fold/MMA 的顺序不变；恒等分解保持原 XIR/LLVM。
  Planner 使用真实 fastest digit 和跨 digit gather prior，没有自动 root 搜索，
  没有校准后的 cache/TLB 成本。`root_temporal_cache_cost=unmodeled` 是刻意保留的边界。
- 完整配置构建、3/3 XIR/Runtime/LLM CTest、5 个改动 C++ 文件语法检查通过。
  新增双射/全序列、非法约束、恒等代码、非交换递推、局部分布和 ragged reduction 测试。

## SIMD GEMM：有诊断和候选，但 Error 还未彻底修好

- 原矩阵新版 4096³ FP32 SIMD 的 Error 是整个进程超过 60 s，不是错误数值。
  延长的诊断中，编译约 34 ms，完整结果正确；单次 kernel/Runtime 执行约 13 s，
  固定四次 warmup 约 53 s。采样确认热点在 JIT kernel，未获得 cache/TLB counter。
- 保持原 2×2×4 源 kernel，root 32×32 probe 约 8.75 s；诊断进程仍用 70.38 s。
  默认配置没有变化，原矩阵 Error 保留。
- 手工 staged 8×1×4 + 既有 full-packet 开关，W8 probe 约 2.57 s。
  这是改变微块的定位实验，不是 compiler 自动 retile/solver 成果，也不是 MPS/BLAS parity。
- 七组完整诊断在
  [GEMM/root archive](../../scripts/benchmark/tile_torch/results/m1-max-20260909-simd-root-traversal/README.md)。
  它们均为单样本同步 Runtime host wall；没有 ABBA、纯入口重放、事前完整二进制冻结。
- 后续方案见 [资源访问与 cost 笔记](ROOT_MAPPING_COST_NOTES.zh.md)。
  最值得分开的变量是 lane 连续访问、register blocking、root 重用、K blocking/packing、
  TLB/set 冲突和 full-packet mask；不能只按总 cache 容量解释全部性能。

## CUDA 接手边界

- 今晚的 root 约束不是 CUDA 的默认硬件映射；不要把 CPU W8/cache 参数直接套到 CUDA。
  可以共享 execution contract 与 policy/solver 分离方式，具体 legality/cost/lowering 要按目标验证。
- 本轮未修改 TIRx/CUDA lowering，也没有运行 NVIDIA kernel。
  先前 pinned TVMx 的 CUDA artifact 测试缺少 `tirx.intrinsics.cuda.header_generator`
  / `tirx.intrinsics.cuda.get_codegen` 注册；那是已有诊断，不是本轮通过项。
- 工作区另有用户原有未提交的 TIRx planner/compiler/cooperative/execution/matrix/views、
  TIRx matrix test、内部 matrix 文档、iOS 文档、CMake skill 和子模块改动。
  这些没有混入本次提交，均保留原样；不要用 reset/checkout 清理它们。
- 构建验证使用隔离源 `/tmp/luisa-next-integration.roZbN8/source` 和同级 `build`，
  不含上述用户 WIP。复现时以提交和归档的 overlay 为准，不把工作区 WIP 当作已验证源码。

正式报告保持在现有 [docs 性能结构](../../docs/source/performance/tile/migration.md)。
所有常见 LLM kernels 超过 Torch/MPS/BLAS 的总体目标仍未达成；今晚暂停，不标记完成。

## 推送时到达的并发上游更新

收尾提交 `ee88a8834` 推送时，远端已新增 `1a2c3ea92`（coroutine/XIR）和
`f8dc5f308`（CUDA/TIRx 及 allocator 修正）。它们在干净的临时工作树中无冲突
合并到本次交接，不强推、不改写对方历史。上述构建、3 CTest、5 语法检查和文档
验证均对应 **ee88a8834 的源码状态，发生在这次合并之前**；不能作为合并后全部
变更已通过测试的证明。遵照今晚停止实验的安排，合并版本的完整复验留给后续接手。

原工作区 `/Users/mike/CLionProjects/luisa` 仍在本地 `next` 的 `ee88a8834`，
保留所有用户 WIP，未强行同步涉及同一 TIRx 文件的上游改动。远端 `next` 已包含
双方提交及这次合并。明天继续前，先备份并审查这些 WIP，再同步本地分支；
不要通过 reset 或覆盖文件把原有改动丢掉。

交接后追加 allocator 修正：`f8dc5f308` 在
`Operation::add_result/add_region`、`Block::add_argument`（`src/tile/ir.cpp`）
和 `AnalysisManager::get` 的 holder（`include/luisa/tile/analysis.h`）中，用
`allocate_with_allocator` + placement-new 构造对象，再交给默认 `luisa::unique_ptr`。
在 `LUISA_USE_SYSTEM_STL` 配置中它是 `std::unique_ptr`，默认 `delete` 与项目
allocator 的 malloc/aligned allocation 路径不配对；Windows 的 `_aligned_malloc`
尤其需要匹配释放。本次四处均保留默认 `luisa::unique_ptr` deleter，并按
`LUISA_USE_SYSTEM_STL` 分支匹配分配：SYSTEM_STL 使用普通 `new`；EASTL 使用
项目 allocator（IR 私有构造仍在原友元作用域 placement-new；analysis holder
使用 `new_with_allocator`）。不新增自定义 deleter，不改变公共 allocator 约定。
补充了 IR 创建/提前删除/销毁及 analysis cache 失效、重绑定、普通/128-byte
对齐结果的析构次数回归用例。**用户随后要求不再验证、直接推送，因此这些用例
未运行，本次修正未编译，也没有 Windows 运行验证或 ASan 复现结论。**
已启动的隔离 sanitizer 配置不算构建/测试通过；后续接手再验证两种 STL 配置。

同一快速审查未发现 Alloca 构造 API 与本轮 Tile lowering 的直接源兼容冲突，
但 Alloca 对象布局已改变，必须完整重建依赖，不要复用旧 XIR 动态库。

## 9 月 10 日接续：本地已同步

上面的「原工作区仍在 ee88a8834」是当晚交接状态，不是当前状态。
9 月 10 日已把主工作区 `next` 快进到 `7670fbd5769910a0c8c19ab5f60cdf9bc04f35a4`。
同步前对 11 个用户修改文件做三方应用预检，并用显式路径 stash 保存；同步后完整恢复，
未覆盖子模块或未跟踪数据。备份 stash 为 `bf3901c8bdd991ab94998ec175bc74697cfe3c2d`，
没有删除。原 TIRx compiler 补丁标识仍为 `47e5c91569cc420ffd68de2f704d2f457b65a92a`。

后续 XIR target-info / Metal4 的当前设计与限制更新在现有
[XIR 内部文档](../../docs/source/internals/tile/xir.md)，不要把这份当晚 checkpoint
的旧性能数据或旧构建状态当作新路径的测量证据。

同日上午又合入远端 `f6334b385` 的无异常测试/benchmark 检查，合并提交为 `5045809d9`。
唯一文本冲突位于 LLM benchmark helper，保留上游全部检查和本轮 Metal4 路径标识。
再次对 13 个当时修改文件做三方预检和显式路径保存，恢复结果与预检逐文件一致；
其中两个 skill 的内容已由上游提交，因此不再显示为本地差异。
第二份备份 stash 为 `5f12f8c2c5c9a47ec12488fa3a1a221065c1f69b`，也保留未删。
