代码之家  ›  专栏  ›  技术社区  ›  Peter Lillevold Rene

周期性GPU性能问题

  •  2
  • Peter Lillevold Rene  · 技术社区  · 14 年前

    我有一个WinForms应用程序,它使用XNA为控件中的3D模型制作动画。这个应用程序几个月来一直运行良好,但最近我开始在动画中经历周期性的停顿。为了调查正在发生的事情,我确定了以下事实:

    1. 它只在我的机器上发生,其他机器工作正常
    2. 从渲染循环中删除所有内容并不能改善问题。

    2。实际上我没有移除 一切 ,我将循环限制为在我的graphicsdevice上设置视区,然后执行graphicsdevice.present。

    为了进一步挖掘,我启动了pix来获取一些统计数据。可以查看两个pix运行的屏幕截图 here (Run6) here (Run14) . run6使用的是我原来的渲染循环,run14使用的是bare bones present循环。

    PIX告诉我GPU正在定期执行 某物 我想这是导致停顿的原因。这可能是什么原因?或者我该如何去了解GPU到底在做什么呢?

    更新: 因为我通常相信我的代码是完美的(谁在笑?)我从头开始了一个新的XNA项目,看看它是否表现出相同的行为。所以开始一个新的XNA 3.1 Windows游戏项目并运行pix this timeline . 同样的周期性停顿。所以问题必须在堆栈中更低,在XNA或Direct3D中。

    所以pix显示GPU正在处理一些事情,我可以看到每个帧中进行的dx调用的列表,计时计算显示暂停发生在 IDirect3DDevice9::Present 打电话。

    更新2: 我以前在有问题的机器上安装和卸载过XNA 4.0 CTP。我不能确定这是否相关,但我认为重新安装XNA Game Studio 3.1位可能会有所不同。结果证明是的。

    潜在的问题仍然是相同的(赏金仍然存在):什么会影响XNA 3.1(或DirectX)使其行为像这样,有没有为DirectX和/或GPU级别的日志记录/跟踪电源工具,可以为正在发生的事情提供一些线索?

    注: 我在Windows7x64双核机上使用XNA3.1,内存为8GB。

    注2: 在XNA创建者论坛上也发布了这个问题 here .

    4 回复  |  直到 14 年前
        1
  •  1
  •   Tamara Wijsman    14 年前

    你可以试试看你是否能找到 Xperf 这接近于您的周期性问题,不要运行您的应用程序,而是保持程序打开,正常运行除了您的应用程序。您也可以尝试在应用程序运行时再次执行此操作,但它可能会给出一个混乱的视图。

    1. 启动跟踪,在提升的提示中执行此操作。

      xperf-基本+延迟-stackwalk配置文件

    2. 等待相当长的时间以确保跟踪问题。

    3. 停止跟踪并像这样打开它。

      xperf-d跟踪.etl
      xperfview跟踪.etl

    4. 通过查看特定时间间隔的图表和咨询表进行分析,并查看您是否可以找到与问题相关的内容,找到该问题的最大机会是在DPC和中断部分。但在CPU或I/O部分它也可能是一些奇怪的东西。祝你好运!

    有关的更多信息 Xperf and how to obtain it 希望这能带来成果。


    如果没有,你也可以尝试 GPUView 用于改进DWM,
    它也包含在带有Windows性能工具包的xperf旁边,因此您可以轻松地尝试两者!

    原木V

    …等待相当长的时间以确保问题得到跟踪…

    日志

    gpuview合并.etl

    如果gpuview内存不足,可以尝试添加“/limit 3”或删除v。

    如果您被卡在某个地方,请阅读工具的文档。

        2
  •  1
  •   Joel Martinez    14 年前

    隐马尔可夫模型。。。这似乎发生在GPU上,但听起来像是CPU垃圾收集问题。你能跑吗? CLR profiler 看看你是否能在GC活动中看到任何与慢行相关的峰值?

    我同意这听起来不太可能,因为你可以在pix中清楚地看到它,但它可能提供了一个线索,关于原因。

        3
  •  0
  •   YellPika    14 年前

    如果它只发生在你自己的机器上,那它会是司机吗?原谅我的怀疑,但这毕竟是一台64位的机器:d

        4
  •  0
  •   Andrew Khosravian    14 年前

    这看起来像是一个垂直同步问题或是GPU在其最后的阵痛。因为回到另一个版本修复了它,“瓶颈”就在 IDirect3DDevice9::Present 让我们选择前一个选项。

    我不熟悉XNA,所以我不知道D3D有多少工作是公开的,但是你知道你的表示参数设置为什么吗?

    具体来说,尝试将交换效果设置为“放弃”。