知识卡片

内存分配策略没有放之四海而皆准的答案

专业/工作 · 110.a

内容

高级图形API的设备内存分配通常由驱动代劳,但不同应用的资源使用模式差异极大——有的程序需要大量小资源,有的只需要少量大资源;有的在运行期间频繁创建销毁资源,有的一次性分配好、直到程序结束才释放。驱动无法预测具体应用的行为,只能用一套折中策略应对所有场景,对某些用例必然是次优的。Vulkan把设备内存分配的责任交还给应用程序,让开发者按资源生命周期(长期/短期)分组,用少数大块内存分配代替大量小块分配。这体现了一个更通用的原则:动态分配本身有系统开销,凡是能提前预知的使用模式,都值得用批量/池化分配替代逐次申请——这个思路不止适用于GPU内存,也适用于任何频繁分配销毁对象的系统。

参考来源

《Vulkan 应用开发指南》第1章《Vulkan概述》