|
|
1
1
因为Vulkan规范允许这样做。REST是实现细节,只有实现者\供应商可以肯定地知道,并且可能取决于他睡眠的好坏。
在中回答
Why does vkGetPhysicalDeviceMemoryProperties return multiple identical memory types?
. 一个用于
原因可能与1类似。我推测一个是为了
它不一定意味着RAM/2。这并不是完全不可能的,但如果是这样,那么实现者应该再次公开单独的堆。
大致是堆大小。由于碎片化,您可能会明显减少。以及由于其他过程共享相同。您的IMPL还可以为其内部需求分配一些本身。
当你发现极限时
单个分配的大小有限制(不建议分配4 GB),分配的计数也有限制(
Afaik Vulkan没有报告空闲内存。这个
|
|
|
2
3
我不知道你所说的“4x公羊”是什么意思;我怀疑你说的是你的机器里有多少物理记忆棒。内存类型(或堆)并不关心这些事情。 至于其他的,记住记忆在瓦肯语中是如何工作的总是很重要的。堆在某种程度上表示实际的物理RAM。内存类型表示分配内存的方式。但是 使用 内存有自己的内存类型限制。 例如,如果一个图像具有color attachment usage参数,则该实现可以强制您为支持该图像的内存使用特定的内存类型。没有彩色附件的图像可以限制为使用其他内存类型,但不能 那个 一个。等等。 显然地, NVIDIA does this for certain combinations of usage and formats . 仅仅查询可用的内存类型还不足以知道如何分配内存。您必须弄清楚要使用的缓冲区和图像(包括格式和使用参数)。然后您必须查询实现对它们施加了什么限制。 您的应用程序必须适应这些限制。
有这样的事情是没有道理的。 Memory types define how memory is allocated , not how much storage is available. 后者是内存堆的工作。
Vulkan没有报告可用内存的API,只有 全部的 记忆。要求有足够的空闲内存是愚蠢的。内存(或者至少是应用程序中的虚拟页)由应用程序中的所有线程共享。尤其是GPU内存在机器上的所有进程之间共享。当你得到一个答案时,记忆的数量可能已经改变了。所以,当你根据别人告诉你的可用信息来分配内存时,它可能不再可用了。 最好是先分配,如果发生分配失败,就处理它。 您可以请求总内存,以便决定如何分配内存块。但这就是如何确定什么是可用的和不可用的,而不是通过查询大小。 |
|
|
3
2
在你问司机之前,你对Vulkan的记忆类型一无所知。 我认为你最大的误解是记忆类型是物理上分离的。如图所示,您有两个内存堆,假设0是CPU内存,1是GPU。在这些堆中,您有不同的内存类型。每个内存类型在其自己的堆中占用空间,并可以使用所有堆空间或与其他类型共享。对于每种类型,您都有不同的内部分配方法,具有不同的对齐要求和不同的允许使用。有多个与内存类型相关的查询,包括vkgetBufferMemoryRequirements、vkgetImageMemoryRequirements和其他。这完全取决于你用内存做什么。 此外,这些内存类型取决于驱动程序,并且会因供应商而异(看起来像当前的Nvidia布局)。 |
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
|
user2138149 · 双栈网络服务器无法按预期处理ipv4请求 1 年前 |
|
|
Marco · PyCharm Linux系统文件上os.stat异常 1 年前 |