在使用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正确CPU落后2-3帧...
编辑:我重点越来越多地影响框架,可能是这个问题的原因。我在更多的对象之间共享一个效果来节省内存和创建它们的时间。这是安全的假设没有争议?
嗡嗡声,运行pix,你能不能隔离哪个调用强制刷新? – Bahbar 2010-03-09 17:08:10