【问题标题】:Why Vulkan has a limit of memory allocations?为什么 Vulkan 有内存分配限制?
【发布时间】:2019-04-01 04:16:06
【问题描述】:

是否有任何技术原因来限制内存分配的最大数量?

查看vkAllocateMemory manual page。它说:

在一个 VkDevice 中可以同时存在的有效内存分配的最大数量可能受到实现或平台相关限制的限制。如果调用 vkAllocateMemory 会导致分配的总数超过这些限制,那么这样的调用将会失败并且必须返回 VK_ERROR_TOO_MANY_OBJECTS。

OpenGL 不限制分配,DirectX 11/12 也不限制。那么 Vulkan 为什么要这样做呢?

【问题讨论】:

    标签: gpu vulkan


    【解决方案1】:

    作为explained here,这主要是操作系统限制。

    OpenGL 不限制分配,DirectX 11/12 也不限制

    哦,确实如此。他们只是没有告诉你

    OpenGL 和 DX11 驱动程序倾向于在内部进行大型 GPU(虚拟)分配,并在您分配内存时执行子分配。因此,他们可以创建您可以执行更多硬件分配的错觉。但限制仍然存在。

    至于 DX12,我相当肯定,如果您尝试分配超过 4096 个,您会发现CreateHeap 返回错误。

    Vulkan 只是预先说明存在限制的 API。

    对于 Vulkan,这只是一个永远不会出现的问题。如果您正在执行超过一千个单独的内存分配,那么您的内存分配方案是错误的。 应该分配一些大块内存,然后将它们的子部分用于纹理和缓冲区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2021-08-18
      • 2010-12-26
      • 1970-01-01
      • 2021-09-24
      • 2018-05-03
      • 2023-03-07
      相关资源
      最近更新 更多