【问题标题】:How do real-time game engines work on Windows?实时游戏引擎如何在 Windows 上运行?
【发布时间】:2021-08-10 04:03:48
【问题描述】:

我来自嵌入式背景,非常重视硬实时。对我来说(快速)实时在 Linux 上很棘手,在 Windows 上很可笑,喷气式视频游戏似乎做得很好。

显然,由于它只是软实时,并且频率(相对)较低(60+ Hz),因此简单的解决方案是尽可能快地渲染并希望获得最好的结果。但是是否有任何先进的技术可以进一步提高 Windows 的响应能力?

一些具体问题:

  1. 有没有办法在不利的时刻处理 Windows 先发制人?当其中一些内核在做其他事情时,您如何共享多个内核上的工作?
  2. Windows 中的 IO 延迟是否具有确定性?您能否(应该)向调度程序施压以尽快进行上下文切换?
  3. 最早截止日期优先/速率单调调度(或其他)等调度技术有多普遍? (当然是在现有的基础上构建)

欢迎任何见解!

编辑:

我浏览了一些资源并添加了我的结论:

1。 问:当时间紧迫的计算被抢占时会发生什么?

A: The thread should have higher priority so pre-emption is rare, and when it happens, the interruption should be brief (short interrupts or IO-operations).

Windows 具有将线程移动到其他内核的能力,建议您将它们锁定(-> 线程关联)。

2。 问:IO 操作是否应该比渲染循环具有更高的优先级?

A: Yes, Naughty Dog's engine gives IO-operation higher priority.
  1. 问:使用什么样的调度?
A: In the presentation, a job system is used (similar to reactive programming).

它使用三个非抢占的优先级。

【问题讨论】:

    标签: real-time game-engine


    【解决方案1】:

    如果您还没有读过,我建议您阅读 Andrew Tanenbaum 博士的Modern Operating System。他的书也有 Unix 和 Windows 架构。

    最重要的一点:游戏编程不同于嵌入式编程

    我曾使用过 Windows 和 Android(类 Unix)。不仅是 Windows,而且 Android 非常硬渲染也遇到了硬实时。我们减少 CPU、GPU 延迟的技巧之一是使用较低的功能驱动程序来支持视觉效果(这意味着如果硬件不能很好地支持这个新的图形 API,我们将使用旧的 API,这样会使对象的形状和美观度降低)或如果设备不支持该功能并且效果并不重要,只需删除该设备的此效果即可。它将更好地推动 FPS(每秒帧数)。

    游戏引擎也是许多图形 API 之间的区别,使用 Vulkan 或 DX12(Windows)或 Metal(Apple 设备)可以获得更高的 FPS,但需要更新的硬件,因为它们是低级 API。它将为您提供更好的性能,比 OpenGL 或 DX11 更美观,但旧设备支持旧 API。

    还有 3 个你的问题,我会用我的知识回答(也许其他人有更好的答案):

    1. 我还有一个小问题:为什么不使用threadatomicmutex C++ 11 API 来与多核 CPU 共享任务?线程编程更容易,跨平台,无需调度。

      Windows 有经典的 Win32 线程 API SetThreadPriority 用于设置线程的相对优先级。 Windows Runtime 不建议使用此 API(Microsoft 为 Windows 8 及更高版本提供的现代 Windows 概念),建议使用 thread-pool concept 代替(使用现代 API 将自动化多核并行任务,这比手动配置使用经典更好API)。

      在游戏引擎中,有 a presentation of Christian Gyrling from Naughty Dog 谈论概念 Parallel 和来自 Roblox 的 Sergey Makeev 实现了开源 TaskScheduler 基于 Win32 API 和 Pthread API 中的这个概念。 Jeff Preshing from Ubisoft also have a presentation 使用 C++ 11。

    2. 您所说的 IO 延迟是什么意思?键盘、鼠标还是磁盘 IO?如果您更清楚地编辑您的问题,我将编辑答案

    3. 我在 Windows 上找不到文档或任何类似的最早截止日期优先/速率单调调度。这可能是受到 Microsoft 阻止内核模式调度的限制。

    【讨论】:

    • 非常感谢您的回复!我浏览了演示文稿并通过回答补充了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2013-01-25
    • 2021-09-13
    • 2022-01-12
    相关资源
    最近更新 更多