【发布时间】:2010-02-25 15:17:23
【问题描述】:
在使用 Pix 分析我的应用程序时,我注意到 GPU 大部分时间都在闲置(在 DX10 模式下)等待资源不可用。 (并且始终与 CPU 对齐(例如,如果 CPU 正在处理帧 X,GPU 也在处理帧 X)对于这个问题)
一些注意事项:
1) 应用受 GPU 限制(CPU 基本处于空闲状态(在最繁重的场景中占 CPU 使用率的 20%))
我的问题是:
1) 我必须如何解释这些结果?在 GPU 端的 Pix 中,我看到 2-3 个小红条(据我所知意味着资源不可用),在它们之后是一个中/大灰条(这意味着 GPU 空闲)。另一边的 CPU 有一些操作,一个大的空条,然后是一些其他操作(在等待什么?)
另外注意,当 GPU 空闲时,通常 CPU 正在工作。 (相反显然无效)
2) 哪些调用会使资源变得不可用?
带有 DISCARD 的 MAP 是否被视为阻塞调用?
获取对象 DESC 的查询?
共享着色器效果被视为争用?
还有什么?
我的总体框架是:
41 DrawPrimitives/DrawIndexedPrimitives(大多数对象被实例化)
7/8 使用丢弃锁定顶点缓冲区
9 像素着色器/顶点着色器的变化
1 组渲染目标
谢谢!
附: pix截图
http://img191.imageshack.us/img191/6800/42594100.jpg
如果我使用单个绘图调用(具有相同的 gpu 负载(例如具有 x 个粒子或实例化对象的粒子引擎))而不是完整的游戏,我会得到一个完整的蓝色条和 GPU 正确 2-3 帧在 CPU 后面...
编辑:我越来越关注效果框架,这可能是这个问题的原因。我在更多对象之间共享一种效果,以节省内存和创建它们的时间。毫无争议地假设这是安全的吗?
【问题讨论】:
-
哼,运行 pix,你能不隔离哪个调用在强制刷新吗?