UNIT 54 / 78 · W08-2
异步提交延长了谁的寿命
本单元预计 4 核心小时。可以分成多个学习时段,按完整小节推进;停下来时留下输入、命令、结果和下一步。
时间包含阅读、编码与检查,是学习预算而非期限。打开此页只保存阅读位置,不代表通过验收。
先知道自己在观察什么
Host/device、传输与异步生命周期 →
画host准备、上传、计算、回读、可复用五个状态,再读双缓冲完成依赖。
先备不清楚时,沿章节入口补读;不要依赖翻过页数判断进度。
先留下自己的预测或独立尝试
手算三批完成于9、14、19教学单位,运行验证串行27与流水19;不把单位叫毫秒。
双缓冲流水线的依赖模型 →源码下载与编译入口
下载到自己的练习目录。按本节给出的完整命令编译;多文件与driver要求见原任务。需要时查阅文件保存与编译操作 →
29-b.cpp先保存预测,再核对正文标明的预期或诊断。完整构建、多文件与设备实验按原任务命令执行。
通过一个变动看清原因
在副本把buffer_free改为array<int,1>并用{0}初始化,slot改为chunk%buffer_free.size();保留上传2、计算5、回读2,把finished期望更新为{9,18,27},不留下%2造成越界。
修改后应观察到什么
三批在9、18、27完成,模型失去跨批buffer重叠。
换一组条件,独立解决
为本人Reduction Lab画异步迁移设计表:每块输入从可写到消费结束,列出允许复用的最早事件。
用这些条件检查自己的实现
- 消费者未结束前不能复用输出;上传未读完前不能改host输入。
- 表中每条依赖有生产者和消费者;注明尚未运行真实设备。
用证据决定是否进入下一单元
- 提交完成和计算完成怎样区分?
- 双缓冲为什么不仅是多分配一份数组?
本单元的验收依据
一个buffer与两个buffer模型差异可手算,生命周期表没有靠sleep保证的边。
留下自己的代码或推演、测试输入、真实输出和仍不确定的问题。未达到要求时,下一次继续本单元。