我来自一个嵌入式背景,在那里,硬实时被相当严肃地对待。对我来说,实时(快速)在Linux上是很棘手的,在Windows上也很可笑,喷气式电子游戏似乎做得很好。
显然,由于它只是软实时,频率是相对较低的60+赫兹,简单的解决方案是尽快渲染和希望最好。但是,是否有任何先进的技术可以进一步提高Windows上的响应能力?
一些具体问题:
欢迎任何有洞察力的人!
编辑:
我查阅了一些资源,并补充了我的结论:
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具有将线程移动到其他内核的能力,建议将它们保持锁定( ->线程亲和力)。
A: Yes, Naughty Dog's engine gives IO-operation higher priority.A: In the presentation, a job system is used (similar to reactive programming).它使用了三个非先发制人的优先级。
发布于 2021-05-22 04:08:20
如果你还没有读过现代操作系统,我建议你读一下博士安德鲁·塔南鲍姆( Andrew )。他的书还有Unix和Windows体系结构。
最主要的一点是:游戏编程与嵌入式编程不同。
我曾经使用过Windows和Android (类似Unix)。不仅Windows,而且Android也很难渲染,也很难实时实现。我们减少CPU的技巧之一,GPU延迟是使用更低的特性驱动程序支持视觉效果(这意味着如果硬件不支持这个新的图形API,我们将使用旧的API,这将使对象更少的形状和更少的美丽),或者如果设备不支持的功能和效果是不重要的,只需删除该设备的这一效果。它将推动FPS (帧每秒)更好。
游戏引擎也是许多图形API的区别,使用Vulkan或DX12 (视窗)或金属(苹果设备)是制造更多的FPS,但需要更新的硬件,因为它们是低水平的API。它将给您提供更好的性能,比OpenGL或DX11更漂亮,但是旧API在旧设备上是支持的。
3你们的问题,我要用我的知识回答(也许别人有更好的答案):
thread、atomic、mutex C++ 11 API与多核CPU共享任务?它更容易线程编程,跨平台,不需要安排任何事情.
Windows具有经典的Win32线程API SetThreadPriority,用于设置线程的相对优先级。此API不推荐用于Windows运行时 ( Microsoft 8及更高版本的现代Windows概念),后者建议使用线程池概念 (使用现代API将自动化多核并行任务,这比手动配置使用经典API更好)。
在游戏引擎中,有“淘气狗”中的基督教回转 talking概念并行,来自Roblox的Sergey实现了开源TaskScheduler,这个概念基于Win32 API和Win32 API。Ubisoft公司的杰夫·普林也有一个演讲使用C++ 11。https://stackoverflow.com/questions/67628200
复制相似问题