【问题标题】:What can cause a reduction in frame rate when upgrading a graphics card?升级显卡时会导致帧率降低的原因是什么?
【发布时间】:2010-09-08 13:22:50
【问题描述】:

我们有一个两屏 DirectX 应用程序,之前使用 NVIDIA 8400GS (256MB) 以一致的 60 FPS(显示器同步速率)运行。但是,当我们将显卡换成 512 MB RAM 时,帧速率很难达到 40 FPS 以上。 (它之所以这么高,是因为我们使用了三重缓冲。)这两张卡来自同一制造商 (PNY)。所有其他条件都相同,这是一个 Windows XP Embedded 应用程序,我们从每张卡的新图像开始。驱动版本号为169.21。

应用程序都是 2D 的。 IE。只是一堆纹理四边形和一大堆预渲染图形(因此需要升级卡的内存)。我们还拥有 CPU 动态解码的压缩动画 - 这涉及纹理锁定。锁定需要永远,但我也尝试使用单独的系统内存纹理供 CPU 更新,然后使用设备的 UpdateTexture 方法更新渲染的纹理。性能上没有总体差异。

尽管我已经阅读了 Internet 上所有关于 DirectX 性能的常见问题解答,但这仍然是我第一次从事 DirectX 项目,因此您所掌握的任何晦涩的知识都会很有用。 :)

在我谈到这个主题时还有一件事;在交换链上调用 Present 时,无论我在当前参数 (PresentationInterval) 和调用本身的标志中都使用 D3DPRESENT_DONOTWAIT 的事实,DirectX 似乎都在等待当前完成。因为这是一个双屏应用程序,所以这是一个问题,因为两个监视器似乎没有同步锁定,我正在通过线程池运行 Present 调用来解决它。造成这种情况的根本原因可能是什么?

【问题讨论】:

  • 你可能被骗买了只有 8 个着色器单元而不是 16 个的 65nm "rev. 2" 版本。也就是说,如果您可以拥有 4x 的 GT610,为什么还要使用 8400GS内存和 DDR3 而不是 DDR2,以及相同价格的 4 倍着色器单元数量? (另外,它的 TDP 仅为 29W vs 40W)

标签: c++ hardware directx


【解决方案1】:

显卡是否完全相同(都是 GeForce 8400GS),只是内存大小不同?不同的内存大小通常会带来略微不同的时钟频率(即,您的卡拥有更多内存可能会使用更慢的内存!)。

所以首先要检查的是 GPU 核心和内存时钟频率,使用类似 GPU-Z 的东西。

【讨论】:

    【解决方案2】:

    看看是不是表面锁定问题很简单,只要注释掉贴图更新,看看帧率是否回到60hz。不幸的是,写入锁定的表面并更新资源会杀死性能,总是如此。你在使用纹理贴图吗?我知道 DX9 添加了 mipmap 的自动生成,可能会占用大量时间来生成这些。如果您每帧不断锁定相同的资源,您还可以尝试创建一个纹理池,有点像三重缓冲,除了纹理。您将让渲染器使用一个纹理,并在下一次更新时选择池中未用于渲染的下一个可用纹理。当然,除非您的内存受限或您仅对动画纹理进行了比较。

    【讨论】:

    • Mipmap 被禁用。我将尝试对动态纹理进行双重缓冲,看看会发生什么。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    相关资源
    最近更新 更多