← 完整学习路线

UNIT 63 / 78 · W10-1

Circular buffer 的预留、发布与释放

本单元预计 4 核心小时。可以分成多个学习时段,按完整小节推进;停下来时留下输入、命令、结果和下一步。

时间包含阅读、编码与检查,是学习预算而非期限。打开此页只保存阅读位置,不代表通过验收。

01 / READ

先知道自己在观察什么

Reader、compute、writer:缓冲区里的生产与消费 →

画reader/compute/writer等待条件,分清reserve只等空位、push发布推进、wait/pop消费。

Reader、compute、writer:缓冲区里的生产与消费 →

在官方CB接口页面逐项核对reserve/push指针语义及NoC搬运完成要求,记录所读版本。

先备不清楚时,沿章节入口补读;不要依赖翻过页数判断进度。

02 / PREDICT & RUN

先留下自己的预测或独立尝试

手推容量2的10、20入队,再取10、放30,运行确认10、20、30顺序。

容量二的FIFO回绕 →
源码下载与编译入口

下载到自己的练习目录。按本节给出的完整命令编译;多文件与driver要求见原任务。需要时查阅文件保存与编译操作 →

39-a.cpp

先保存预测,再核对正文标明的预期或诊断。完整构建、多文件与设备实验按原任务命令执行。

03 / CHANGE ONE THING

通过一个变动看清原因

在副本把输入10、20、30替换为-1、0、2,同步更新顺序检查;在满与空时各新增一次预期拒绝的try/catch测试,并检查拒绝前后count不变。

修改后应观察到什么

消费顺序-1、0、2;满时不会覆盖未消费值,空时没有伪造项。

04 / DO IT YOURSELF

换一组条件,独立解决

独立为一块tile列出预留、NoC提交、搬运完成、发布、计算读取、pop的六个事件;再设计reader只产5块而compute等6块的等待图。

用这些条件检查自己的实现

  • 发布在数据完成之后;pop在最后一次读取之后。
  • 等待图指出不存在的第6块,增加buffer容量不能修复生产/消费数量不一致。
05 / EXPLAIN & CHECK

用证据决定是否进入下一单元

  1. cb_reserve_back为什么不是通用多生产者原子抢占?
  2. 拿到get_write_ptr为什么不等于数据已经可读?

本单元的验收依据

FIFO变体与事件表正确,官方语义可查;CPU模型没有被称为NoC或Metalium模拟执行。

留下自己的代码或推演、测试输入、真实输出和仍不确定的问题。未达到要求时,下一次继续本单元。