UNIT 59 / 78 · W09-2
用 event 表达具体生产位置
本单元预计 4 核心小时。可以分成多个学习时段,按完整小节推进;停下来时留下输入、命令、结果和下一步。
时间包含阅读、编码与检查,是学习预算而非期限。打开此页只保存阅读位置,不代表通过验收。
先知道自己在观察什么
Streams 与 events:用依赖组织异步工作 →
画S0与S1两条工作序列,逐个定位producer之后的event与consumer之前的wait。
Streams 与 events:用依赖组织异步工作 →
核对公开异步API对host memory与event的限制,不仅记录函数名字。
先备不清楚时,沿章节入口补读;不要依赖翻过页数判断进度。
先留下自己的预测或独立尝试
先算上传2、生产3、消费1的逻辑完成时间5与6,再运行;教学单位不当设备周期。
消费者等待生产者 →源码下载与编译入口
下载到自己的练习目录。按本节给出的完整命令编译;多文件与driver要求见原任务。需要时查阅文件保存与编译操作 →
34-a.cpp先保存预测,再核对正文标明的预期或诊断。完整构建、多文件与设备实验按原任务命令执行。
通过一个变动看清原因
在副本把producer逻辑耗时改为2,保持依赖边与consumer耗时1,更新模型检查。
修改后应观察到什么
producer结束4、consumer结束5;consumer不能因S1空闲就提前读取。
换一组条件,独立解决
独立给两批输入画buffer状态表:第二次写入必须等第一批对应消费者结束;再画一次event放在producer前面的错误版本。
用这些条件检查自己的实现
- 正确图中生产先于消费、消费结束先于复用;每条跨stream依赖可定位到工作。
- 错误图明确指出等到的event不包含所需生产工作;不使用sleep修复。
用证据决定是否进入下一单元
- 两个stream为什么未必重叠或加速?
- event计时和CPU围住launch的计时范围有什么不同?
本单元的验收依据
完成正确/错误依赖图与模型检查,保留未执行设备标签;没有虚构profile时间。
留下自己的代码或推演、测试输入、真实输出和仍不确定的问题。未达到要求时,下一次继续本单元。