# 选题必要性与已有工作的关系

## 使用者与具体问题

使用者是需要将串行缓冲区流水线放入固定内存预算的开发者。模型文件大小不能直接给出激活、scratch 和持久对象的运行占用。TFLM 官方 issue #2513 提供了约 318 KB 模型而 arena 约 1.4 MB 的案例；该案例证明问题存在，不是本项目的性能测量或客户采用。

另一个不同维度是内存可访问性。ST 社区有 DMA 无法访问某些 STM32H7 DTCM 区的案例；具体限制必须按芯片、DMA 控制器与手册确认。本项目不内置通用“STM32H7 内存地图”，由清单明确允许内存区。

## 新项目核心

1. 多 bank 容量与允许集合直接参与规划，固定采集缓冲区可保留 bank/offset。
2. 有序算子图导出输入、保留输出和每算子 scratch 的两端包含生命周期；默认禁止输入/输出在交接步重叠。
3. 独立核验外部或生成的布局，从原始清单重新检查约束；布局不自报可被伪造的大小或存活时段。
4. 严格 JSON schema、峰值说明、机器可读失败与 C 偏移导出，支持 CI 使用。

## 与成熟工具比较

| 已有工作 | 已有能力 | 本项目的定位及需要避免的重叠声明 |
|---|---|---|
| TFLM GreedyMemoryPlanner、离线计划 shim | 单 arena 内的生命周期复用、外部偏移计划接入 | 公开的既有技术；本项目是独立多 bank 清单规划与核验工具，不能把贪心复用描述成首创 |
| TFLM 预分配张量 RFC | 讨论外部采集缓冲区及不同内存区域 | 这是需求与边界参考，不是本工具已可直接替换 TFLM 分配器的证据 |
| MoonBit arena/memory 库 | 动态对象 arena、内存管理或持久记忆等 | 需以各仓库实际内容持续核对；本项目聚焦声明式静态偏移合同 |
| mizchi/webnn-mbt | TFLite/WebNN 推理、输入形状和运行资源管理 | 本项目不重做推理运行时；运行时需导出可信字节数和时序后才能消费本工具 |

## 已有可复现实验

- reuse：同一生命周期清单，对照逐个独立预留 192 字节，本工具高水位 64 字节。基础对照是独立预留策略；另已编译未修改的 TFLM 官方 GreedyMemoryPlanner 算法，得到相同的 64 字节结果。
- dma_banks：128 字节固定采集区只能位于 dma，128 字节特征区可在 dma/fast；规划放到两个不同的 128 字节 bank。把全部容量简单相加不能替代可访问性检查。
- budget_failure：交接步两个 64 字节输入/输出同时存活，96 字节预算明确失败。
- C replay：实际导出头文件驱动 48 字节数组上的四步读写，重叠时段内容保持得到检查。

## 尚缺的证据

尚无真实模型的全量 scratch/持久占用采集、真实板卡部署与第三方用户采用。已实测 TFLM 官方规划算法；未运行完整 TFLM 推理运行时，也未比较推理速度。当前实验证明静态清单合同有效，不能外推到整机 RAM 或部署性能。赛事必要性及差异化仍由组委会判断。

## 成熟算法实测记录

`python scripts/reference.py` 获取 docs/REFERENCE_FILES.json 中固定 Git blob SHA 的三个官方文件，逐字节校验 SHA-1/SHA-256，保留原 Apache-2.0 头部；仅为构建提供最小状态枚举、空日志和兼容宏，不修改规划算法。Windows 在 Visual Studio Developer Terminal 执行，Linux 使用 c++。

TFLM 实测：复用 64 字节，交接 128 字节，同时存活的两个 128 字节对象为单 arena 256 字节。本项目对应结果一致；两个 bank 场景的物理总量仍为 256 字节，价值在于明确并核验不同 bank 的容量和可访问性。这些结果不支持“优于 TFLM”的结论。
