【问题标题】:Are HOST_CACHED_BIT and HOST_COHERENT_BIT contradicting each other?HOST_CACHED_BIT 和 HOST_COHERENT_BIT 是否相互矛盾?
【发布时间】:2017-07-10 16:21:58
【问题描述】:

Vulkan 中有两种类型的内存让我兴奋:

  • VK_MEMORY_PROPERTY_HOST_COHERENT_BIT位表示主机缓存 管理命令vkFlushMappedMemoryRangesvkInvalidateMappedMemoryRanges 不需要刷新主机写入 设备或使设备写入对主机可见。

  • VK_MEMORY_PROPERTY_HOST_CACHED_BIT 位表示分配的内存 使用此类型缓存在主机上。对未缓存的主机内存访问 内存比缓存内存慢,但未缓存的内存是 始终保持连贯性。

据我了解,主机和设备都会立即看到对 COHERENT 类型的内存的修改,而主机和/或设备可能不会立即看到对 CACHED 类型的内存的修改,即无效/需要刷新内存才能使缓存失效。

我已经看到一些实现结合了这两个标志,根据文档中的10.2. Device Memory 部分,它是有效的组合。是不是有矛盾(缓存和连贯)?

【问题讨论】:

    标签: vulkan


    【解决方案1】:

    缓存/连贯内存有效地意味着 GPU 可以看到 CPU 的缓存。这通常发生在 GPU 和 CPU 位于同一芯片上的架构上。 GPU 实际上只是 CPU 芯片上的另一个核心,可以访问 CPU 的核心。

    但它也可能发生在其他架构上。 Some standalone GPUsoffer cached/coherent memory。实际上,它们中的大多数不提供没有一致性的缓存内存。从架构的角度来看,它代表了 GPU 通过至少部分 CPU 缓存访问数据的某种方式。

    您应该记住的关于缓存/一致性内存的关键是:如果该内存池有替代内存类型,那么设备访问的替代方法可能更快。此外,如果存在替代方案,则设备完全有可能无法将某些类型/格式的图像或缓冲区存储在此类存储器类型中。因此,除非您确实需要从 CPU 访问缓存内存,或者设备没有其他选择,否则最好避免使用它。

    【讨论】:

      【解决方案2】:

      有一些缓存方案可以监控内存总线上对 RAM 的写入访问,以在写入内存时使主机的缓存无效。

      这允许两全其美,缓存一致的访问,但以更复杂的架构为代价。

      【讨论】:

        猜你喜欢
        • 2022-12-04
        • 2014-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多