在使用Pix分析我的应用程序时,我注意到GPU正在通过(在DX10模式下)大部分时间处于空闲状态,等待资源不可用。 (并且总是与CPU排在一起(例如,如果CPU正在处理第X帧,GPU也在处理第X帧)这个问题)
有些注意事项:
1)应用程序受GPU限制(CPU基本上处于空闲状态(在最繁重的场景中占CPU使用率的20%))
我的问题是:
1)我如何解释这些结果?在Pix的每一帧中我看到2-3个小红条(据我所知,意味着资源不可用),然后是中/大灰条(这意味着GPU空闲)。另一边的CPU有一些操作,一个大的空条,然后是其他一些操作(等待什么?)
另一个注意事项,当GPU空闲时,CPU通常正在工作。 (相反,显然无效)
2)什么电话可以使资源变得不可用?
带有DISCARD的MAP被认为是阻塞电话吗?
获取对象的DESC的查询?
共享着色器效果被认为是一种争论?
还有什么?
我的一般框架是:
41 DrawPrimitives / DrawIndexedPrimitives(大部分对象都是实例化的)
7/8锁定顶点缓冲区并丢弃
9像素着色器/顶点着色器的更改
1 setrendertarget
谢谢!
P.S。 pix的屏幕截图
http://img191.imageshack.us/img191/6800/42594100.jpg
如果我使用单个绘制调用(具有相同的gpu负载(例如具有x粒子或实例化对象的粒子引擎))而不是完整游戏,我得到一个完整的蓝色条和GPU正确2-3帧在CPU后面......
编辑:我越来越关注效果框架,这可能就是这个问题的原因。我在更多对象之间共享一种效果,以节省内存和创建它们的时间。在没有争用的情况下可以安全地假设吗?答案 0 :(得分:1)
提供的信息会让您想到: