Vulkan规范说明:
只需要执行依赖性即可解决写后读危险,但读后写和写后写危险需要在它们之间包括适当的内存依赖关系。
我认为只需要执行障碍就可以解决写后写危险。
如果我们不打算读取数据,为什么需要内存屏障来解决写后写危险?
Vulkan规范说明:
只需要执行依赖性即可解决写后读危险,但读后写和写后写危险需要在它们之间包括适当的内存依赖关系。
我认为只需要执行障碍就可以解决写后写危险。
如果我们不打算读取数据,为什么需要内存屏障来解决写后写危险?
执行依赖关系确保操作的顺序。内存依赖关系确保内存操作的可见性。这两者并不相同。
为了使写后写操作能够正确运行,第二次写入必须在第一次写入之后发生,但您还必须确保第一次写入对执行第二次写入的操作可见。否则,即使第二次写入发生在第一次之后,第二次写入也可能被第一次覆盖。
如果您想要更基于硬件的解释,请考虑以下情况:如果第一次写入使用一个缓存,而第二次写入使用与第一次不同的缓存(GPU有很多缓存),则执行依赖关系不会影响缓存。因此,第二个写入的缓存可以在第一个写入的缓存之前写入其数据,这意味着第一个写入最终会覆盖第二个写入。
内存依赖关系强制将数据从缓存中清除,从而确保第二次写入时没有数据停留在某个缓存中。