关于VkInvalidateMappedMemoryRanges的使用及缓存相关疑问
关于VkInvalidateMappedMemoryRanges的疑问解答
1. 读取GPU更新的映射内存时的调用时机
你的理解存在偏差:不管是CPU第一次还是第二次读取GPU更新过的HOST_CACHED映射内存,都需要在读取前调用VkInvalidateMappedMemoryRanges。
- 即使是首次读取,主机缓存也可能残留该内存区域之前的旧数据(比如内存被复用、硬件预取机制提前加载了缓存行),并非一定是空的。
- 该函数的作用是让主机缓存丢弃对应区域的*stale(过期)*数据,确保CPU读取到的是GPU写入主内存的最新值。如果不调用,CPU可能读到缓存里的旧数据,而非GPU更新后的内容。
2. HOST_VISIBLE但非HOST_CACHED内存的函数行为
当内存仅标记为HOST_VISIBLE但未设置HOST_CACHED时(通常对应HOST_COHERENT或HOST_UNCACHED属性),调用VkInvalidateMappedMemoryRanges或vkFlushMappedMemoryRange是无实际操作(no-op):
- 这类内存没有主机缓存层,主机直接访问主内存,不存在需要失效的缓存行;
HOST_COHERENT属性还会自动同步主机与设备的内存访问,无需手动调用同步函数。
内容的提问来源于stack exchange,提问作者yigitEmre
相关产品推荐
相关产品推荐

