HOST_CACHED_BIT 和 HOST_COHERENT_BIT 相互矛盾吗?
Are HOST_CACHED_BIT and HOST_COHERENT_BIT contradicting each other?
Vulkan 中有两种类型的内存让我耳目一新:
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
bit indicates that the host cache
management commands vkFlushMappedMemoryRanges
and
vkInvalidateMappedMemoryRanges
are not needed to flush host writes to
the device or make device writes visible to the host, respectively.
VK_MEMORY_PROPERTY_HOST_CACHED_BIT
bit indicates that memory allocated
with this type is cached on the host. Host memory accesses to uncached
memory are slower than to cached memory, however uncached memory is
always host coherent.
据我了解,主机和设备都会立即看到对 COHERENT 类型内存的修改,主机可能不会立即看到对 CACHED 类型内存的修改 and/or 设备,即 invalidating/flushing 需要内存才能使缓存无效。
我看到一些实现结合了这两个标志,根据文档中的 10.2. Device Memory 部分,它是有效的组合。这不是矛盾的(缓存和连贯)吗?
有一些缓存方案可以监视通过内存总线对 RAM 的写入访问,以便在写入内存时使主机的缓存无效。
这允许两全其美,缓存一致访问,但代价是更复杂的体系结构。
Cached/coherent 内存实际上意味着 GPU 可以看到 CPU 的缓存。这通常发生在 GPU 和 CPU 位于同一芯片上的架构上。 GPU 实际上只是 CPU 芯片上的另一个核心,可以访问 CPU 的核心。
但它也可能发生在其他架构上。 Some standalone GPUs offer cached/coherent memory。事实上,它们中的大多数不提供没有一致性的缓存内存。从架构的角度来看,它代表了 GPU 通过至少部分 CPU 缓存访问数据的某种方式。
关于 cached/coherent 内存,您应该记住的关键是:如果该内存池有替代内存类型,那么替代方案可能 更快 要访问的设备。此外,如果存在替代方案,则设备完全有可能无法将某些 types/formats 的图像或缓冲区存储在此类内存类型中。因此,除非您真的需要从 CPU 访问缓存内存,或者设备没有其他选择,否则最好避免使用它。
Vulkan 中有两种类型的内存让我耳目一新:
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
bit indicates that the host cache management commandsvkFlushMappedMemoryRanges
andvkInvalidateMappedMemoryRanges
are not needed to flush host writes to the device or make device writes visible to the host, respectively.
VK_MEMORY_PROPERTY_HOST_CACHED_BIT
bit indicates that memory allocated with this type is cached on the host. Host memory accesses to uncached memory are slower than to cached memory, however uncached memory is always host coherent.
据我了解,主机和设备都会立即看到对 COHERENT 类型内存的修改,主机可能不会立即看到对 CACHED 类型内存的修改 and/or 设备,即 invalidating/flushing 需要内存才能使缓存无效。
我看到一些实现结合了这两个标志,根据文档中的 10.2. Device Memory 部分,它是有效的组合。这不是矛盾的(缓存和连贯)吗?
有一些缓存方案可以监视通过内存总线对 RAM 的写入访问,以便在写入内存时使主机的缓存无效。
这允许两全其美,缓存一致访问,但代价是更复杂的体系结构。
Cached/coherent 内存实际上意味着 GPU 可以看到 CPU 的缓存。这通常发生在 GPU 和 CPU 位于同一芯片上的架构上。 GPU 实际上只是 CPU 芯片上的另一个核心,可以访问 CPU 的核心。
但它也可能发生在其他架构上。 Some standalone GPUs offer cached/coherent memory。事实上,它们中的大多数不提供没有一致性的缓存内存。从架构的角度来看,它代表了 GPU 通过至少部分 CPU 缓存访问数据的某种方式。
关于 cached/coherent 内存,您应该记住的关键是:如果该内存池有替代内存类型,那么替代方案可能 更快 要访问的设备。此外,如果存在替代方案,则设备完全有可能无法将某些 types/formats 的图像或缓冲区存储在此类内存类型中。因此,除非您真的需要从 CPU 访问缓存内存,或者设备没有其他选择,否则最好避免使用它。