← 完整学习路线

UNIT 59 / 78 · W09-2

用 event 表达具体生产位置

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

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

01 / READ

先知道自己在观察什么

Streams 与 events:用依赖组织异步工作 →

画S0与S1两条工作序列,逐个定位producer之后的event与consumer之前的wait。

Streams 与 events:用依赖组织异步工作 →

核对公开异步API对host memory与event的限制,不仅记录函数名字。

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

02 / PREDICT & RUN

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

先算上传2、生产3、消费1的逻辑完成时间5与6,再运行;教学单位不当设备周期。

消费者等待生产者 →
源码下载与编译入口

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

34-a.cpp

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

03 / CHANGE ONE THING

通过一个变动看清原因

在副本把producer逻辑耗时改为2,保持依赖边与consumer耗时1,更新模型检查。

修改后应观察到什么

producer结束4、consumer结束5;consumer不能因S1空闲就提前读取。

04 / DO IT YOURSELF

换一组条件,独立解决

独立给两批输入画buffer状态表:第二次写入必须等第一批对应消费者结束;再画一次event放在producer前面的错误版本。

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

  • 正确图中生产先于消费、消费结束先于复用;每条跨stream依赖可定位到工作。
  • 错误图明确指出等到的event不包含所需生产工作;不使用sleep修复。
05 / EXPLAIN & CHECK

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

  1. 两个stream为什么未必重叠或加速?
  2. event计时和CPU围住launch的计时范围有什么不同?

本单元的验收依据

完成正确/错误依赖图与模型检查,保留未执行设备标签;没有虚构profile时间。

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