gpt4 book ai didi

c++ - 线程数和每秒帧数有什么关系?

转载 作者:行者123 更新时间:2023-11-30 01:35:38 28 4
gpt4 key购买 nike

我目前正在开发一款游戏。我有一个渲染线程、主线程和一堆在旁边进行计算的其他线程。

典型的框架设置如下:

  1. 在主线程上做一些事情。添加要在工作线程上完成的工作。
  2. 在渲染线程上做事。
  3. 等待渲染线程完成。
  4. 回到 1。

在整个框架中,在工作线程上进行各种计算。

当我运行游戏时,有些地方我没有获得理想的 60 FPS。通过一些调试和分析,我得出的结论是主线程和渲染线程加起来只贡献了大约 8 毫秒,这应该给我大约 120 FPS。

我还注意到,当工作线程执行更多工作时,我往往会看到 FPS 下降。

注意:FPS 是根据主线程上每帧之间的时间差计算的。

我本以为FPS应该只取决于主线程和渲染线程的性能。

另请注意,主线程和渲染线程等待工作线程所花费的时间可以忽略不计。

那我错过了什么?为什么当工作线程做更多工作时 FPS 下降,尽管 FPS 不依赖于这些线程?

编辑 :主线程和 websocket 线程提交要在工作线程上完成的工作。

经过更多分析后,似乎 CPU 只是在渲染线程完成其工作后等待(不确定为什么)一段时间,直到它再次从主线程开始。请注意,我使用的是 Unity3D,但我在 C++ 插件中做了很多自定义的事情。

最佳答案

典型的现代计算机系统中存在大量共享资源,这使得内核不独立。

首先,CPU 是具有温度的单个物理对象。如果 CPU 变得太热或耗电过多,各种技术将以牺牲性能为代价来最小化功耗。时钟速度提升技术考虑了这些因素。有些直接根据事件内核的数量进行限制。

CPU 还具有共享资源,例如 L2 和 L3 缓存以及内存带宽。事件核心可以消耗这些资源,为其他核心留下更少的资源。

最后,糟糕的软件设计会在不应该存在的地方产生依赖关系。例如,错误共享会导致一个内核上的软件降低另一个内核上的软件运行效率。设计不当的同步原语(例如朴素的自制自旋锁)会使内核间总线饱和,从而导致性能不佳。

关于c++ - 线程数和每秒帧数有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53787295/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com