UNIT 71 / 78 · W11-3
旧值、活跃区间与 buffer 复用
本单元预计 4 核心小时。可以分成多个学习时段,按完整小节推进;停下来时留下输入、命令、结果和下一步。
时间包含阅读、编码与检查,是学习预算而非期限。打开此页只保存阅读位置,不代表通过验收。
先知道自己在观察什么
Tensor lowering 与内存规划:值什么时候可以共用一块空间 →
先算旧tensor值仍被读取的反例,再画A/B/C半开区间与异步延长寿命。
Tensor lowering 与内存规划:值什么时候可以共用一块空间 →
在公开bufferization文档找到读写冲突与复制决策,记录其条件,不声称本机运行MLIR pass。
先备不清楚时,沿章节入口补读;不要依赖翻过页数判断进度。
本单元另列的补授
以下时间加在原单元预算之外;完成对应读法后再进入依赖它的任务。
- MLIR tensor值语义 → · 25min
先留下自己的预测或独立尝试
画A[0,2)、B[2,4)、C[1,3),先决定最少槽数,再运行模型确认2。
三个活跃区间使用两个槽 →源码下载与编译入口
下载到自己的练习目录。按本节给出的完整命令编译;多文件与driver要求见原任务。需要时查阅文件保存与编译操作 →
47-b.cpp先保存预测,再核对正文标明的预期或诊断。完整构建、多文件与设备实验按原任务命令执行。
通过一个变动看清原因
原例只有区间重叠判断,没有槽位分配器。在副本把A结束延长到3,旧布尔检查相应改为!reuse&&separate;新增三项槽位编号与逐对验证:编号相同且区间重叠就拒绝。旧方案[0,0,1]必须拒绝,[0,1,2]必须通过;从实际编号计算槽数3,不只改写死的slots=2输出。
修改后应观察到什么
[2,3)三份同时活跃,需要3槽;不能只改expected让非法复用通过。
换一组条件,独立解决
独立给x=[2,5]、y只将第0项更新为9的程序画值与存储两层图,随后读取旧x[0];标出哪些条件允许或禁止原地写。
用这些条件检查自己的实现
- 旧x[0]必须为2,y[0]为9;直接覆盖会错误地把旧值改9。
- 若异步消费者延长最后一次使用,复用条件同步延长;shape相同不够。
用证据决定是否进入下一单元
- 为什么bufferization不是把tensor类型名字换成memref?
- 少一次分配为什么可能换来更多同步或复制?
本单元的验收依据
活跃区间和旧值反例均通过,说明真实MLIR诊断仍需对应工具环境;不把小槽位模型叫优化pass结果。
留下自己的代码或推演、测试输入、真实输出和仍不确定的问题。未达到要求时,下一次继续本单元。