CPU性能优化手段汇总

这里尝试将工作中遇到的一些用于CPU计算消耗优化的技术手段汇总到一起,方便需要的时候查询使用。

0. 数据规格

在优化之前,需要明白当前场景中的数据是否是合理的,即drawcall、面数等在目标机型上是否超标等。

对于Drawcall,可以简单基于Nvidia在GDC上的分析给出:

25K batchs/sec 会吃满 1GHz 的 CPU,100%的使用率

按照这个数据,也就是说,1GHz的CPU,如果按照帧率30来算,每帧提交25k/30=830个drawcall就跑满了,基本干不了别的,而我们按照当前Steam的主流硬件配置来看,当前主流的PC为4核,频率在3GHz左右,按照这个配置,全跑满,也就是830x3x4=9960个drawcall,假设两个核用于提交Draw Call,那就是接近5000个Drawcall,虽然这个数字跟实际数字可能并不完全匹配,但是数量级应该是数千这个级别。移动端的数据通过网上的一些文档大致了解,比如参考2020年的一个回答,大概drawcall在数百到一千之间(奇怪的是,这个数据跟当前移动端高端机的CPU配置[8核,2~3GHz]并不十分匹配,不清楚其中有什么样的隐秘),面数在数十万到百万之间。另外,这里也给出PS4的推荐drawcall数为2000,面数约为百万级别。

对于面数,由于每个面的绘制消耗取决于面片的位置(是否存在overwrite)以及面片的尺寸(fillrate)和渲染shader复杂度(PS消耗),因此并没有一个简单的公式可以给出具体的数据,只有一些偏经验的参考数字,具体数字在前面已经给出,实际使用中可以通过demo进行确认,什么级别的面数才是适合自己游戏的。

1. ISPC

ISPC是Implicit SPMD(single program multiple data) Program Compiler的缩写,可以看成是CPU版本的Shader(SIMD特点),相对于传统的手动实现的sse、avx而言,这种技术可以使得代码编写更加具有可读性(通过C语言完成,之后交由编译器翻译成对应的SIMD代码),能够支持目前所需要支持的绝大多数平台(部分平台如arm支持还存在一定的问题),目前在UE的众多离线特性如贴图压缩、lightmass的embree以及运行时计算特性如chaos & animation上都有尝试应用,具体参考文献[1][2]。

2. 移动端大小核架构

移动端CPU设计的两大目标是高性能与低消耗,在这个目标下,ARM提出了大小核的CPU架构,这是一种由两种不同的核组成的异构CPU架构,其中大核具有较强性能,但是也会导致较高消耗,通常用于处理一些重度计算工作,小核性能较弱,同时消耗也较低,通常用于处理一些轻度计算工作,大小核架构中的两种核共享的是同一套指令集架构,详细的信息可以参考[3]。


未完待续

参考文献

[1] [gdc20]ISPC in UnrealEngine4
[2] ISPC In Unreal Engine 4: A Peek Behind The Curtain
[3] big.LITTLE Technology: The Future of Mobile

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 持续更新中。 Memory Access Address Alignment 在内存中存取一个变量最高效的方式是将...
    张攀阅读 8,694评论 2 16
  • 信号量崩溃原因初探 1.SIGSEGV 1.什么是段错误(segmentation fault) wiki上的是这...
    落叶情思阅读 526评论 0 1
  • 4.3 配置文件 bochsrc 官网参考地址[http://bochs.sourceforge.net/doc/...
    扶海狐阅读 4,321评论 0 0
  • 启动时间 启动时间可谓是用户对你的APP的第一印象,启动时间过长很可能会让用户直接把APP打入冷宫。苹果的watc...
    忠橙_g阅读 2,802评论 0 4
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,606评论 28 53