假设有一个队列族,它支持对曲面的表示和图形。创建一个处理表示和图形的命令池更好(由于技术原因),还是创建两个命令池更好:一个命令池只用于图形(尽管它可以用于表示),另一个命令池仅用于表示(即使它可以用于图形)?
本质上,应该尽量减少与特定队列族关联的命令池的数量吗?或者,创建任意数量的命令池可以吗?更一般地(不管命令池与哪个队列家族相关联),应用程序是否应该最小化它创建了多少命令池?
编辑:在这篇文章的初始版本中,我编写了“队列”而不是“命令池”。这个已经修好了。
发布于 2018-07-18 20:05:41
由该线程填充的一组命令缓冲区所使用的存储的main purpose of a command pool is to be a (mostly) single-threaded allocator。创建池就是为了达到这个目的。
因此,如果有三个线程需要为特定队列生成命令,则创建3个池,每个池用于每个线程,并使用它们生成您感兴趣的CBs。
根据CB重置策略,您可能需要多个缓冲池。也就是说,当线程从池A生成命令到CBs时,GPU从池B从CBs读取命令。这样,当GPU完成时,您可以重新设置池,而不是重置单个CBs。
总体来说,您需要创建命令池以服务于应用程序的分配和CB构建策略。池与队列族的关联仅仅是为了帮助实现更有效地为那些CBs生成命令。您不应该假设某个池正在消耗队列中某种有限的资源。
https://stackoverflow.com/questions/51409895
复制相似问题