前面谈到的是如何找问题,找问题是非常重要的一步。找到问题之后你如何优化呢?这里有几个办法:

文章图片
第一,发现和修正代码。因为代码的数量非常大,也非常复杂,尤其是一个游戏团队当中有程序开发,也有美工。你现在使用游戏引擎开发,美工的工作量会剧增。这两者之间可能互相之间不会相互考虑,美工考虑的是我把这个东西正确的渲染出来,但是我有没有把一些参数设置好,一些 LOD、遮挡,以及关系到性能的参数,我有没有设计到最好?
第二,并行优化。并行优化谈了很久,它包括两个层面,一个是多线程并行,也就是说四个车道跑总是比一个车道跑得快,并行优化可能是优化得到回报最高的。这当中英特尔的 TBB 可以帮助你前后线程池的调度。CPU 的多线程优化,尤其是针对游戏相对 GPU 是非常难的。因为 GPU 就是处理几百万个三角形,几百万个顶点,它是天然的顶点和顶点之间,三角形和三角形之间是没有依赖的,所以天然的我用几百个或者是几千个显卡单元去计算,都可以得到非常线性的性能提升。但是 CPU 里面,其实它有很多逻辑,有很多模块和模块之间的依赖,所以就非常难。幸运的是英特尔也在和行业当中最重要的合作伙伴合作,帮助游戏开发者解决这些问题。比如说我们和 Unity 合作,做了 ECS和Job system,现在 Unity 对多核心的支持是非常好的。另外我们还和 Unreal做了Unreal Task system,用线程池的方式,把很多的任务可以提交到 Unreal 的任务系统当中,去充分应用多线程。第二个层面的并行是指令级并行,大家知道 SIMD 指令集,在一条指令里,我可以处理 8 个顶点或者是 8 个核点数。这个到开发者手中去做也是非常难的。因为你要么手工去写一些汇编或者是写一些 Intrinsic,你需要把 C++ 的这些算法改成 Intrinsic 这种指令集还是相对来说比较复杂的。这里面英特尔也在想办法给大家提供一个简单的解决方案,我们称之为 ISPC,这是一个编辑器,它可以把你的 C 和 C++ 代码编译成能够使用上,加速计算的binary,其实在 Unreal4 和 Unreal 5 当中的 ISPC 也是我们的工程师帮助他们做的。前面大家看到的 Chaos 物理破坏引擎就是使用的英特尔 ISPC 的编译器。其实在 Unity 也有类似于 ISPC 的编译器叫 Burst,这也是属于在大范围应用的。所以你是使用 Unreal 或者是 Unity 的游戏开发者,就可以非常简单的进行一些设置和调用,就可以用上这些性能,这是我们英特尔和行业合作伙伴一起在向前推动的事情。
第三,算法优化。这是针对具体游戏具体分析,游戏场景,游戏玩法上,哪一部分是非常突出的瓶颈,应该如何优化它,是采用更好的数据算法还是调整我的数据结构,还是说开发者去调整场景布置之类的。这是需要游戏开发者跟我们一起来进行讨论,进行头脑风暴的一种优化方式。
第四,底层架构优化。英特尔也在针对每一个工作负载去分析,它在我的CPU流水线上的表现。一个游戏开发者把前面的都做好了,还是觉得性能不好,他也有余力、有时间,可以进行一些底层架构的优化,我们英特尔的工程师也会提供建议给他们,让他们去评估一下这个对我CPU代码架构改变有多大,会不会影响我的可维护性之类的东西,让他们去斟酌。
接下来分享的是英特尔在过去两三年里,在国内的一些游戏优化,其中有一些是CPU相关的,有的是集成显卡相关的。可能有一些数字比较夸张,因为本身我们进去的时间是比较早的,那么我们就开始用这些分析工具跟他们一起去斟酌,里面哪些是有问题,是需要去分析的。所以基本上得到这样的结论,开发者对我们英特尔提供的帮助非常赞赏。
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
