Vulkan WaW 危害和内存屏障

Vulkan WaW hazard & memory barrier

Vulkan 规范声明:

Write-after-read hazards can be solved with just an execution dependency, but read-after-write and write-after-write hazards need appropriate memory dependencies to be included between them.

我以为WaW也可以只用执行障碍来解决。 如果我们不打算读取数据,为什么我们需要内存屏障来解决 WaW 风险?

执行依赖确保操作的顺序。内存依赖性确保了内存操作的可见性。这些不是一回事。

为了使 write-after-write 正常工作,第二次写入必须在第一次写入之后发生,而且您还必须确保第一次写入对进行第二次写入的操作可见。否则,第二次写入可能会被第一次写入覆盖,即使第二次写入发生在第一次写入之后。

如果您想要更多 hardware-based 解释,请考虑如果第一次写入使用一个缓存,而第二次写入使用与第一次不同的缓存(GPU 有很多缓存)会发生什么情况。执行依赖性不影响缓存。因此第二次写入的缓存可能会在第一次写入的缓存之前写入其数据,这意味着第一次写入最终会覆盖第二次。

内存依赖性迫使数据离开缓存,从而确保在发生第二次写入时,缓存中某处没有写入。