【发布时间】:2019-07-06 21:27:18
【问题描述】:
Vulkan 规范声明:
只需要执行依赖即可解决读后写风险,但写后读和写后写风险需要在它们之间包含适当的内存依赖关系。
我认为 WaW 也可以仅通过执行障碍来解决。 如果我们不打算读取数据,为什么需要内存屏障来解决 WaW 危害?
【问题讨论】:
标签: vulkan gpu memory-barriers
Vulkan 规范声明:
只需要执行依赖即可解决读后写风险,但写后读和写后写风险需要在它们之间包含适当的内存依赖关系。
我认为 WaW 也可以仅通过执行障碍来解决。 如果我们不打算读取数据,为什么需要内存屏障来解决 WaW 危害?
【问题讨论】:
标签: vulkan gpu memory-barriers
执行依赖确保操作的顺序。内存依赖保证了内存操作的可见性。这些不是一回事。
为了使后写操作正常工作,第二次写入必须在第一次写入之后发生,但您还必须确保第一次写入对执行第二次写入的操作可见。否则,第二次写入可能会被第一次覆盖,即使第二次写入发生在第一次之后。
如果您想要更多基于硬件的解释,请考虑如果第一次写入使用一个缓存,而第二次写入使用与第一次不同的缓存(GPU 有很多缓存)会发生什么情况。执行依赖不会影响缓存。所以第二次写入的缓存可能会在第一次写入的缓存之前写入数据,这意味着第一次写入最终会覆盖第二次。
内存依赖迫使数据从缓存中取出,从而确保当第二次写入发生时,缓存中的某处没有写入。
【讨论】: