代码之家  ›  专栏  ›  技术社区  ›  feal87

资源争用

  •  8
  • feal87  · 技术社区  · 16 年前

    请注意:

    1) 应用程序是GPU有限的(CPU基本上是空闲的(在最繁忙的场景中CPU使用率的20%)

    我的问题是:

    1) 我该如何解释这些结果?在Pix中,GPU侧的每一帧我都会看到2-3个小的红色条(据我所知,这意味着资源不可用),在它们之后是一个中/大的灰色条(这意味着GPU空闲)。另一边的CPU有一些操作,一个大的空条,然后还有一些其他操作(正在等待什么?)

    另一个注意事项是,当GPU空闲时,CPU通常在工作(相反的说法显然无效)

    带有DISCARD的MAP被认为是阻塞调用?
    获取对象描述的查询?
    共享着色器效果被认为是一种争用?
    还有什么?

    我的总体框架是:



    9更改像素着色器/顶点着色器
    1个setrendertarget

    谢谢!

    P.S.pix截图

    http://img191.imageshack.us/img191/6800/42594100.jpg

    如果我使用一个单一的绘制调用(使用相同的gpu负载(例如一个带有x个粒子的粒子引擎或一个实例对象))而不是整个游戏,我会得到一个完整的蓝色条和gpu在CPU后面2-3帧的正确位置。。。

    编辑:我越来越关注效果框架,这可能是这个问题的原因。我在多个对象之间共享一个效果,以节省内存和创建它们的时间。这可以毫无争议地假设吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Coincoin    16 年前

    提供的信息会让你想到什么:

    • 你使用双缓冲和vsync吗?也许他们都在等待backbuffer的出现。尝试三重缓冲或立即呈现。
    • 你试过用NOOVERWITE循环策略锁定顶点缓冲区而不是8次丢弃吗?可能有太多的内存压力,为GPU重新分配一个新的缓冲区,你放弃。另外,有些硬件不允许在同一个顶点缓冲区渲染其内容之前丢弃超过X次。
    • 既然您共享相同的效果,那么参数是否也共享?