【问题标题】:Vulkan WaW hazard & memory barrierVulkan WaW 危害和内存屏障
【发布时间】:2019-07-06 21:27:18
【问题描述】:

Vulkan 规范声明:

只需要执行依赖即可解决读后写风险,但写后读和写后写风险需要在它们之间包含适当的内存依赖关系。

我认为 WaW 也可以仅通过执行障碍来解决。 如果我们不打算读取数据,为什么需要内存屏障来解决 WaW 危害?

【问题讨论】:

    标签: vulkan gpu memory-barriers


    【解决方案1】:

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

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

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

    内存依赖迫使数据从缓存中取出,从而确保当第二次写入发生时,缓存中的某处没有写入。

    【讨论】:

    • 除了内存副作用之外,还有什么东西可以构成执行顺序?换句话说,什么时候重要的是要有一个特定的执行顺序而不需要有内存依赖?或者只有内存依赖是不够的?
    • @listerreg:例如,如果你有两个操作,一个读然后写。如果先读取,则两者之间不需要内存依赖;写操作没有什么可以看到的。您需要做的就是确保读取发生在写入之前。问题中规范的引用指定了这一点。
    • @listerreg: "或者只有内存依赖是不够的?" 我不明白你的意思。您不能拥有与执行依赖项分开的内存依赖项。可见性需要排序。
    • 什么是 WaW 操作的具体示例?使用 same 深度缓冲区的图形管道的两个后续绘制调用将 not 归类为 WaW 危险,而是归类为 RaW 危险 w.r.t. 是否正确?深度缓冲区?
    猜你喜欢
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    相关资源
    最近更新 更多