【问题标题】:Vulkan: Why does the 1080 Ti have a maxMemoryAllocationCount of 4294967296 on arch but only 4096 on Windows?Vulkan:为什么 1080 Ti 在 Arch 上的 maxMemoryAllocationCount 为 4294967296 而在 Windows 上只有 4096?
【发布时间】:2018-04-29 00:38:55
【问题描述】:

我目前正在用 C++ 构建一个使用 vulkan 进行渲染的游戏引擎。在实现地形渲染器时,我达到了硬件限制,maxMemoryAllocationCount 限制了分配的内存块的数量。我检查了https://vulkan.gpuinfo.org/ 以了解不同 GPU 上的该值有多高。查看“GeForce GTX 1080 Ti”时,windows 的值为 4096,而 arch/manjaro 的值为 4294967296。为什么这些操作系统之间存在差异,而这确实应该是硬件限制?

【问题讨论】:

  • 4294967296 是 2^32。 maxMemoryAllocationCountuint32_t,它可以保存 04294967295/2^32-1 之间的值。所以这个值很可能只是垃圾。
  • @SimonKraemer:这不是垃圾。它的意思是“尽可能多”。
  • 4096 个内存分配是一个相当大的数字。如果你达到了这个限制,这意味着你应该分配更少数量的更大的内存对象。

标签: c++ gpu vulkan


【解决方案1】:

为什么“应该”是硬件限制?

除了 4 个例外,每个 Windows 实现都限制为 4096 个分配。这些例外情况要么是开源 RADV 被黑客入侵以在 Windows 上运行,要么是返回虚假值的早期驱动程序。

很明显,Windows 作为一种操作系统正在施加这种限制。毕竟,操作系统拥有 GPU,并且必须参与任何内存分配。

操作系统有权阻止进程进行异常行为。 Windows 似乎认为进行大量 GPU 分配是病态的(他们并没有错),因此 WDDM 模型对 GPU 分配施加了一个低但合理的限制。

【讨论】:

  • “应该”部分是因为 maxMemoryAllocationCount 是物理设备限制的一部分。 “物理设备限制”在这里似乎没有那么严格。
  • @Brotcrunsher:是VkPhysicalDeviceLimits。如VkPhysicalDevices 的限制。 “物理设备”一词在 Vulkan 中具有特定含义,与特定的硅片无关。
  • @Brotcrunsher 图形硬件(物理设备)只能在操作系统定义的区域内运行。因此,即使硅片本身能够分配更多的内存对象,如果操作系统不允许这样做,它也无法做到。因此,在这种情况下,它是“真正的”硬件限制还是操作系统约束都无关紧要 - 这种硬件/驱动程序/操作系统组合禁止您分配超过 4096 个内存对象。
猜你喜欢
  • 2017-09-14
  • 2023-03-30
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
相关资源
最近更新 更多