Vulkan规格说明:
读取后写入危险仅可以通过执行依赖关系来解决,但是写入后读取和写入后写入危险需要在它们之间包括适当的内存依赖关系。
我认为WaW也可以只用执行障碍来解决。 如果我们不打算读取数据,为什么我们需要一个内存屏障来解决WaW危害?
答案 0 :(得分:4)
执行依赖性确保操作的顺序。内存相关性可确保内存操作的可见性。这些不是同一回事。
为了使写后写操作正常进行,第二次写操作必须在第一次写操作之后进行,但是您还必须确保第一次写操作对执行第二次写操作的操作可见。否则,即使第二次写入发生在第一次写入之后,第二次写入也有可能被第一次写入所覆盖。
如果您需要更多基于硬件的说明,请考虑如果第一次写入使用一个缓存,而第二次写入使用与第一次写入不同的缓存(GPU有很多缓存),会发生什么情况。执行依赖性不影响缓存。因此,第二个写入的缓存可能会在第一个写入的缓存之前写入其数据,这意味着第一个写入最终将覆盖第二个写入。
内存相关性将数据强制从缓存中移出,从而确保在第二次写操作发生时,某个地方的缓存中没有写操作。