Vulkan中有两种类型的内存让我感到困惑:
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
位表示主机缓存 管理命令vkFlushMappedMemoryRanges
和 刷新主机写入不需要vkInvalidateMappedMemoryRanges
设备或设备分别对主机可见写入。
VK_MEMORY_PROPERTY_HOST_CACHED_BIT
位表示已分配内存 此类型的缓存在主机上。主机内存访问未缓存 内存比缓存内存慢,但是未缓存的内存 始终保持连贯性。
据我所知,主机和设备都会立即看到对COHERENT类型的内存的修改,主机和/或设备可能无法立即看到对CACHED类型的内存的修改,即无效/需要刷新内存以使缓存无效。
我已经看到一些实现组合了两个标志,并且它是根据文档中的10.2. Device Memory部分的有效组合。是不是存在矛盾(缓存和连贯)?
答案 0 :(得分:1)
缓存/连贯内存有效意味着GPU可以看到CPU的缓存。这通常发生在GPU和CPU位于同一芯片上的架构上。 GPU实际上只是CPU芯片上的另一个核心,可以访问CPU的核心。
但它也可能发生在其他架构上。 Some standalone GPUs offer cached/coherent memory。实际上,他们中的大多数都不提供没有一致性的缓存。从架构的角度来看,它代表了GPU通过至少部分CPU缓存访问数据的一些方式。
你应该记住的关于缓存/连贯内存的关键是:如果该内存池有另一种内存类型,那么备用可能更快供设备访问。而且,如果存在替代方案,则完全有可能该设备可能无法具有存储在这种存储器类型中的某些类型/格式的图像或缓冲器。因此,除非您确实需要从CPU进行缓存内存访问,否则设备无法替代,最好避免使用它。
答案 1 :(得分:0)
存在缓存方案,其监视通过存储器总线对RAM的写访问,以在写入存储器时使主机的高速缓存无效。
这样可以实现两全其美,缓存一致的访问,但代价是更复杂的架构。