【发布时间】:2020-05-19 17:31:43
【问题描述】:
Vulkan 能够使用VkImportMemoryHostPointerInfoEXT 导入主机内存。我查询了VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT 支持的内存类型,但唯一可用的内存是连贯的,这不适用于我的用例。出于性能原因,内存需要使用显式失效/刷新。所以真的,我不希望 API 分配任何主机端内存,我只想告诉它缓冲区应该上传/下载到的基地址。否则我必须使用中间副本。将 vkMapMemory 返回的地址用于主机端工作对于我的用例来说是不可取的。
【问题讨论】:
-
“主机缓存”是指“主机支持”,还是 Vulkan 中的
CACHED类型? -
@krOoze 我想我对 Vulkan 很陌生,所以也许我使用的术语有误,但基本上我想在 CPU 和 GPU 之间镜像内存,这样我就可以在没有隐式 PCI-e 总线传输。我正在使用它的项目模拟具有统一内存的系统,如果每次读/写都会导致总线传输,那么性能很快就会消失。因此,当客户 CPU/GPU 访问重叠区域时,我只需要向主机 GPU 发送数据或从主机 GPU 发送数据。
-
@MarshallMohror:“我想在 CPU 和 GPU 之间镜像内存,这样我就可以在没有隐式 PCI-e 总线传输的情况下访问它。”但是在独立 GPU,任何内存都存在于来自至少 一个 设备的 PCI-e 总线上。如果两个设备共享一些内存地址,并且一个设备跨过来自该内存的总线,那么 其中一个设备 访问该内存的速度将变慢。 Vulkan 允许您选择哪一个,但如果 GPU 是离散的,则不能让它“两者都不是”。
标签: vulkan memory-mapping