同步原语:栅栏、信号量与事件
同步原语:栅栏、信号量与事件:用execution dependency与memory dependency修复真实资源hazard,以章专属交互与可重放证据独立重写。
学习目标
- 能说明“同步原语:栅栏、信号量与事件”中的用execution dependency与memory dependency修复真实资源hazard,并给出对应对象、状态或概率边界
- 能用正常基线与“只使用TOP/BOTTOM泛化stage,或等待semaphore却遗漏图像layout与访问屏障”反例定位资源、生产者stage/access、消费者stage/access、layout、队列和信号值中的首个差异
- 能操作三个章专属实验,让synchronization2、pipeline barrier、memory dependency、timeline semaphore、binary semaphore、fence具备解释、视觉和练习证据
- 能修改最小实现、固定输入重放,并判断“同步原语:栅栏、信号量与事件的输入、状态、输出与恢复结果可用同一证据包重放”是否恢复
从一个可推翻的运行假设开始
“同步原语:栅栏、信号量与事件”先固定一个问题:如何证明用execution dependency与memory dependency修复真实资源hazard?先写下预期对象、状态或像素,再运行正常基线;若资源、生产者stage/access、消费者stage/access、layout、队列和信号值不能指出第一个分叉,最终画面看起来正确也不能通过。
本页不变量是:同步原语:栅栏、信号量与事件的输入、状态、输出与恢复结果可用同一证据包重放。故障模式“只使用TOP/BOTTOM泛化stage,或等待semaphore却遗漏图像layout与访问屏障”每次只改变一个条件,正常、故障、恢复三次运行必须共享输入与版本。
来源、版本与课程边界
“同步原语:栅栏、信号量与事件”以Khronos Vulkan Guide latest这套持续更新的官方完整指南为主,并由Vulkan规范和官方Samples核对VUID、对象合同与可运行路径。课程的16页是教学聚合,不宣称它们是官方固定章节。
六个检查词
在“同步原语:栅栏、信号量与事件”的六词核对中,↡synchronization2在“同步原语:栅栏、信号量与事件”的“Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences”检查中用于用execution dependency与memory dependency修复真实资源hazard;应由资源、生产者stage/access、消费者stage/access、layout、队列和信号值确认。、↡pipeline barrier在“同步原语:栅栏、信号量与事件”的“Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences”检查中用于用execution dependency与memory dependency修复真实资源hazard;应由资源、生产者stage/access、消费者stage/access、layout、队列和信号值确认。、↡memory dependency在“同步原语:栅栏、信号量与事件”的“Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences”检查中用于用execution dependency与memory dependency修复真实资源hazard;应由资源、生产者stage/access、消费者stage/access、layout、队列和信号值确认。、↡timeline semaphore在“同步原语:栅栏、信号量与事件”的“Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences”检查中用于用execution dependency与memory dependency修复真实资源hazard;应由资源、生产者stage/access、消费者stage/access、layout、队列和信号值确认。、↡binary semaphore在“同步原语:栅栏、信号量与事件”的“Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences”检查中用于用execution dependency与memory dependency修复真实资源hazard;应由资源、生产者stage/access、消费者stage/access、layout、队列和信号值确认。、↡fence在“同步原语:栅栏、信号量与事件”的“Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences”检查中用于用execution dependency与memory dependency修复真实资源hazard;应由资源、生产者stage/access、消费者stage/access、layout、队列和信号值确认。。术语只有进入公式、交互状态、代码和可重放输出,才算真正覆盖。
正式单元与机制解释
Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences
在“同步原语:栅栏、信号量与事件”的“Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences”检查中,barrier同时描述源/目标stage与源/目标access,只有覆盖生产者写入和消费者访问才建立正确可见性。在“同步原语:栅栏、信号量与事件”的“Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences”检查中,binary/timeline semaphore协调提交,fence让host观察完成;它们不能替代资源layout和access范围。
在“同步原语:栅栏、信号量与事件”本页,正式坐标是synchronization2、pipeline barrier、memory dependency、timeline semaphore、binary semaphore、fence。在“同步原语:栅栏、信号量与事件”的反例核对中,反事实为“只使用TOP/BOTTOM泛化stage,或等待semaphore却遗漏图像layout与访问屏障”;应从资源、生产者stage/access、消费者stage/access、layout、队列和信号值找到第一个分叉。
先预测,再操作三个章专属实验
1. 对象与执行路径
选择任一正式坐标,沿真实对象、状态、队列或像素路径查看因果关系。
Vulkan 提交与执行时间线
同步原语:栅栏、信号量与事件
把“用execution dependency与memory dependency修复真实资源hazard”放到host、command buffer、queue与resource时间线上。
正式坐标
Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences
barrier同时描述源/目标stage与源/目标access,只有覆盖生产者写入和消费者访问才建立正确可见性。binary/timeline semaphore协调提交,fence让host观察完成;它们不能替代资源layout和access范围。
提交合同
Write\xrightarrow[access]{stage}Barrier\xrightarrow[access]{stage}Read探针:资源、生产者stage/access、消费者stage/access、layout、队列和信号值
最小可重现实验
VkImageMemoryBarrier2 barrier = imageBarrier(
COLOR_ATTACHMENT_OUTPUT, COLOR_ATTACHMENT_WRITE,
FRAGMENT_SHADER, SHADER_SAMPLED_READ,
COLOR_ATTACHMENT_OPTIMAL, SHADER_READ_ONLY_OPTIMAL);
vkCmdPipelineBarrier2(cmd, &dependencyInfo(barrier));运行“同步原语:栅栏、信号量与事件”时记录API/规范版本、设备或浏览器能力、固定输入、关键中间状态与输出摘要。不得用一次漂亮截图替代对象合同、验证消息、时间戳或像素差异。
练习与答案
练习
问题 1:公式边界。 在“同步原语:栅栏、信号量与事件”中,如何用一个可手算样本验证 ,并标明每个量属于哪一对象、stage、空间或时间点?
问题 2:正式坐标。 在“同步原语:栅栏、信号量与事件”中,synchronization2、pipeline barrier、memory dependency、timeline semaphore、binary semaphore、fence如何进入可操作验证?
问题 3:恢复证据。 怎样证明“只使用TOP/BOTTOM泛化stage,或等待semaphore却遗漏图像layout与访问屏障”已真正修复?
本章回顾
掌握“同步原语:栅栏、信号量与事件”意味着能把“用execution dependency与memory dependency修复真实资源hazard”落到具体对象、状态与输出,能制造“只使用TOP/BOTTOM泛化stage,或等待semaphore却遗漏图像layout与访问屏障”,还能凭资源、生产者stage/access、消费者stage/access、layout、队列和信号值恢复同输入结果。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- synchronization2
synchronization2在“同步原语:栅栏、信号量与事件”的“Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences”检查中用于用execution dependency与memory dependency修复真实资源hazard;应由资源、生产者stage/access、消费者stage/access、layout、队列和信号值确认。
- pipeline barrier
pipeline barrier在“同步原语:栅栏、信号量与事件”的“Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences”检查中用于用execution dependency与memory dependency修复真实资源hazard;应由资源、生产者stage/access、消费者stage/access、layout、队列和信号值确认。
- memory dependency
memory dependency在“同步原语:栅栏、信号量与事件”的“Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences”检查中用于用execution dependency与memory dependency修复真实资源hazard;应由资源、生产者stage/access、消费者stage/access、layout、队列和信号值确认。
- timeline semaphore
timeline semaphore在“同步原语:栅栏、信号量与事件”的“Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences”检查中用于用execution dependency与memory dependency修复真实资源hazard;应由资源、生产者stage/access、消费者stage/access、layout、队列和信号值确认。
- binary semaphore
binary semaphore在“同步原语:栅栏、信号量与事件”的“Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences”检查中用于用execution dependency与memory dependency修复真实资源hazard;应由资源、生产者stage/access、消费者stage/access、layout、队列和信号值确认。
- fence
fence在“同步原语:栅栏、信号量与事件”的“Synchronization2, Barriers, Binary and Timeline Semaphores, and Fences”检查中用于用execution dependency与memory dependency修复真实资源hazard;应由资源、生产者stage/access、消费者stage/access、layout、队列和信号值确认。