gpu - 为什么 Vulkan 有内存分配限制?
问题描述
是否有任何技术原因来限制内存分配的最大数量?
查看vkAllocateMemory 手册页。它说:
VkDevice 中可以同时存在的有效内存分配的最大数量可能受到实现或平台相关限制的限制。如果调用 vkAllocateMemory 会导致分配的总数超过这些限制,那么这样的调用将失败并且必须返回 VK_ERROR_TOO_MANY_OBJECTS。
OpenGL 不限制分配,DirectX 11/12 也不限制。那么为什么 Vulkan 应该这样做呢?
解决方案
正如这里所解释的,这主要是一个操作系统限制。
OpenGL 不限制分配,DirectX 11/12 也不
哦,他们有。他们只是不告诉你。
OpenGL 和 DX11 驱动程序倾向于在内部进行大型 GPU(虚拟)分配,并在分配内存时执行子分配。因此,它们会造成您可以执行更多硬件分配的错觉。但限制仍然存在。
至于 DX12,我相当肯定,如果您尝试分配超过 4096 个堆,您会发现CreateHeap
返回错误。
Vulkan 只是预先确定存在限制的 API。
使用 Vulkan,这只是一个永远不会出现的问题。如果您正在执行超过一千个单独的内存分配,那么您的内存分配方案是错误的。您应该分配一些大块内存,然后将它们的子部分用于纹理和缓冲区。
推荐阅读
- laravel - 更新订阅计划时如何添加试用期?
- mongodb - 如何查询 MongoDB 的每个文档,哪个日期等于并在开始日期和结束日期之内?
- laravel - Laravel 8 删除引导程序/缓存/配置文件
- python - 优化前景对象的边缘
- c# - 如何在 DataGridView.Sort 事件完成后立即运行特定代码
- c - C 语法生成无效表达式
- python - Certbot 在 Linux 中返回“No module named 'six'”错误
- c# - TimerTriggered Azure Webjob 在不同的部署槽
- apache-nifi - Apache NiFi rethinkdb 连接
- spring - 将 Spring Boot 应用程序导入为 jar