【问题标题】:Are there ways to overcome graphic APIs CPU bound bottlenecks on PC?有没有办法克服 PC 上图形 API 的 CPU 限制瓶颈?
【发布时间】:2012-01-12 09:55:33
【问题描述】:

最近,我花了很多时间研究 GPU 的主题,并且看到了几篇文章,这些文章谈到了 PC 游戏与主机游戏相比如何由于 GPU 的限制而难以保持领先地位。蜜蜂。例如,在 Xbox 360 上,我的理解是游戏在内核模式下运行,因为硬件总是相同的,所以游戏可以“更接近金属”进行编程,而 Directx api 的抽象程度较低。然而,在 PC 上,由于切换到内核模式和更多抽象层,使用 Direct-X 或 Opengl 进行相同数量的绘图调用可能比在控制台上花费更多的时间 2 倍。我很想听听这个问题的可能解决方案。

我听说过一些解决方案,比如直接在硬件上编程,但是(据我了解)ATI 已经发布了底层 API 的规范,nVidia 保密,所以这行不通太好了,更不用说制作不同配置文件所增加的开发时间了。

在 Opencl 中编写完整的“软件渲染”解决方案并在 GPU 上运行会更好吗?我的理解是,具有大量绘图调用的游戏是 cpu 绑定的,并且调用是单线程的(在 PC 上),那么 Opencl 是一个可行的选择吗?

所以问题是: 有哪些方法可以提高 Opengl 和 Directx 等图形 API 的效率,甚至不再需要这些 API?

【问题讨论】:

    标签: opengl directx gpu


    【解决方案1】:

    一般的解决方案是不要进行尽可能多的绘图调用。通过阵列纹理、实例化和各种其他技术的纹理图集使这成为可能。

    或者仅仅利用现代计算机的 CPU 性能比控制台高得多的事实。或者更好的是,让自己绑定 GPU。毕竟,如果您的 CPU 是您的瓶颈,那么这意味着您可以使用 GPU 功能。使用它。

    OpenCL 不是任何与此相关的“解决方案”。 OpenCL 无法访问实际使用 GPU 进行渲染需要做的许多事情。为了将 OpenCL 用于图形,您不必使用 GPU 的光栅化器/裁剪器,它是用于在舞台之间传输信息的专用缓冲区、后 T&L 缓存或混合/深度比较/模板/等硬件。所有这些都是固定的功能,并且非常快速和专业。并且对 OpenCL 完全不可用。

    即便如此,它实际上并没有使它不再受 CPU 限制。您仍然必须编组您正在渲染的内容等等。而且您可能无法访问图形 FIFO,因此您必须找到另一种方式来为您的着色器提供数据。

    或者,换句话说,这是一个不需要解决的“问题”。

    【讨论】:

    • 想要更好的性能并责备开销的大型 AAA 开发人员应该怎么做?
    • @JAKE6459:他们应该停止抱怨他们无法控制的事情,而应该致力于他们可以控制的事情。 PC 不是游戏机,也永远不会是。在 PC 上将总是涉及一些开销。他们有工具可以在一定程度上将其最小化,但仅此而已。请记住:这些抱怨并不是新的。多年来,我们都知道 D3D 的渲染函数具有显着的 CPU 开销。所以这并不是开发人员最近才发现的。
    【解决方案2】:

    如果您尝试在 OpenCL 中编写渲染器,您最终会得到类似于 OpenGL 和 DirectX 的东西。您也很可能最终得到比许多专家多年来开发的这些 API 慢得多的东西。它们专门用于处理高效的光栅化并使用 OpenCL 不可用的内部挂钩。这可能是一个有趣的项目,但绝对不是一个有用的项目。

    Nicol Bolas 已经为您提供了一些很好的技术来增加 GPU 相对于 CPU 的负载。最终的答案当然是最好的技术将取决于您的特定领域和约束。例如,如果您的渲染需要使用复杂的着色器和大量纹理进行大量像素过度绘制,则 CPU 不会成为瓶颈。然而,现代硬件最重要的一般规则是通过更好的批处理来限制 OpenGL 调用的数量。

    【讨论】:

      【解决方案3】:

      API。例如,在 Xbox 360 上,我的理解是游戏在内核模式下运行,因为硬件总是相同的,所以游戏可以“更接近金属”进行编程,而 Directx api 的抽象程度较低。然而,在 PC 上,由于切换到内核模式和更多抽象层,使用 Direct-X 或 Opengl 进行相同数量的绘图调用可能需要比在控制台上多 2 倍的时间。

      主机上接近金属操作的好处在很大程度上被 PC 上更大的 CPU 性能和可用内存所抵消。此外,游戏机的 HDD 远不及现代 PC 的 HDD(SATA-1 与 SATA-3,甚至只是 PATA),而且许多游戏从更慢的光驱获取内容。

      例如,PS3 360 仅提供 256MiB 内存用于游戏逻辑,另外 256MiB 内存用于图形,还有更多您无法使用的内存。 X-Box 360 提供 512MiB 的统一 RAM,所以你必须把所有东西都挤进去。现在将其与低端 PC 进行比较,后者很容易配备 2GiB 的 RAM 用于单独的程序。即使是最便宜的显卡也提供至少 512MiB 的 RAM。游戏机将拥有几 GiB 的 RAM,而 GPU 将提供 1GiB 到 2GiB 之间的内存。

      这极大地限制了游戏开发者的可能性,许多 PC 游戏玩家都在哀悼这么多游戏是“consoleish”,但他们的 PC 可以做得更多。

      【讨论】:

      • “例如,X-Box 360 仅提供 256MiB 的游戏逻辑内存和另外 256MiB 的 RAM”这就是 PS3。 360提供512MB的统一RAM;您可以随意使用图形。
      猜你喜欢
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 2016-04-17
      • 2021-01-12
      • 2014-10-22
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多