Intel ChinaJoy2021分享会:游戏性能很重要!

2021-07-31 02:59:12 来源:互联网 作者:Intel 编辑:MadaoKing 浏览:loading

在 GPU 上,我们也有一个很好的工具 GPA。虽然说我们现在还是集成显卡,但是未来你懂的。在过去十来年我们和客户合作过程当中,GPA 工具也是广受客户赞誉的,它会对整个游戏总体的情况,具体到每一个 Pass,每一个 Draw call,每一个Shader,每一个参数都可以通过这个能够发现,你可以方便定位这些问题,然后让开发者知道是什么情况。

这个截屏也是一个整体的概况,从这里面可以看到它有很多的性能指标,包括你有多少个 Draw call,你每一帧的情况都能详尽展示。

游民星空

另外当你只有一台机器的时候,你可以像右边这样。左边这个情况是说你可以连到局域网当中的任何一台机器上,互不影响的收集这些信息。右边这个是说你也可以直接切换到程序界面上,用一台机器就可以看到这些性能信息,非常的方便。

游民星空

另外客户还会经常碰到一个问题,我在玩一个游戏的时候突然掉帧,但是我不知道它是在哪掉的,我根本来不及抓取。我们还提供这样的功能,你可以抓一段时间里面的每一帧的 Frame,抓出来之后,它可以把每一帧的时间都显示来,然后你可以点其中最耗时的那一帧然后去播放。它从前面一直播放到这一帧就会停止,然后再把你这一帧的数据打开。比如说播放到这里就停止了,这就是最耗时的那一帧,接着把这一帧打开,你可以明显看到你有多少个 Draw call,比如说这一帧上面有多少个 Draw call都可以看到,每一个 Draw call 的时间花费多少都显示的非常清楚明白。

游民星空

另外它也会对你整个这一帧有一个根据你的 3D Pipeline 来的分析。比如说右边就是在 3D 当中,我渲染一帧要经过哪些步骤之类的。左边对应的我们的 GPA 就会告诉你,你在渲染这一帧的时候,其实是你的 Back-End 这边有最明显的问题。我们和游戏开发者就知道,我们怎么着手去搞定这个问题。

游民星空

另外是说我可以看到每一个 Draw call 里面我用到了哪些模型,这些模型究竟有多少个顶点我都可以看得很清楚。比如说这块石头用了 8000 多个顶点,这样是不是就合适呢?它耗时多长时间都会显示出来。这段Shader代码是什么样的都会显示出来。

游民星空

除了工具之外,人也是非常重要的。我们有一些技术工程师在游戏开发的早期就会进去。另外英特尔在发布一些新的平台的时候,我们会在测试版的机器就会给到这些开发者,让他们提前进行适配。我刚刚也说了,我们是一个全球团队,我们本地有一些问题能够解决的我们就解决,不能解决的还可以把这些问题带回给其他的团队来帮助我们解决。国外和其他的大厂做过什么样的优化,有什么好的优化方法,也可以带回来介绍给国内的开发者。

另外我们还有测试服务,一个游戏过来,我会帮你测试你所关注的好几个平台上的性能。很多开发者本身也许拥有的机器是很少的,但是他想进适配或者是覆盖的玩家设备,这个时候就可以帮到他们对大部分的平台做性能分析或者是测试,然后反馈给他们,当你发现一些问题的时候,他才会有目的性的去准备一些平台进行这种优化。

游民星空

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

第一, 发现和修正代码。

因为代码的数量非常大,也非常复杂,尤其是一个游戏团队当中有程序开发,也有美工。你现在使用游戏引擎开发,美工的工作量会剧增。这两者之间可能互相之间不会相互考虑,美工考虑的是我把这个东西正确的渲染出来,但是我有没有把一些参数设置好,一些 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相关的,有的是集成显卡相关的。可能有一些数字比较夸张,因为本身我们进去的时间是比较早的,那么我们就开始用这些分析工具跟他们一起去斟酌,里面哪些是有问题,是需要去分析的。所以基本上得到这样的结论,开发者对我们英特尔提供的帮助非常赞赏。

游戏开发者就是我们的客户,客户就是我们的上帝,我们会持续跟他们一起合作,不管是对他们未来的产品还是英特尔要发布的新架构的CPU,我们都会持续在这上面进行紧密合作。

以上是我跟大家分享的内容,希望大家能够增长一点点“见识”,谢谢大家!

上一页 1 2 3 4 5 6 下一页
友情提示:支持键盘左右键“← →”翻页
人喜欢
游民星空APP
随时掌握游戏情报
code
休闲娱乐
综合热点资讯
单机游戏下载
好物推荐
游民星空联运游戏
Intel ChinaJoy2021分享会:游戏性能很重要!https://imgs.gamersky.com/upimg/new_preview/2021/07/31/origin_b_202107310258526277.jpg