在使用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使用discard锁定顶点缓冲区
9更改像素着色器/顶点着色器
1 setrendertarget
谢谢!
PS截图pix
http://img191.imageshack.us/img191/6800/42594100.jpg
如果我使用单个绘制调用(具有相同的gpu负载(例如具有x粒子或实例化对象的粒子引擎))而不是完整的游戏,我得到一个完整的蓝色条和GPU正确2-3帧后面的CPU ...
编辑:我越来越关注效果框架可能是这个问题的原因.我在更多对象之间共享一种效果,以节省内存和创建它们的时间.在没有争用的情况下可以安全地假设吗?
根据所提供的信息想到什么:
| 归档时间: |
|
| 查看次数: |
526 次 |
| 最近记录: |