CPU计算逻辑性能的优化

尽量不让每帧都更新,用回调代替。

重点关注每帧都更新的函数,频繁调用的函数。

重点关注大型的函数,算法效率复杂的函数,优化算法。

需要注意一些细节的开销。

优化思路:不计算,少计算,并发并行计算,转移计算任务,对计算任务的细节优化。

借鉴epoll的高性能设计方案:  线程池的多线程机制,异步事件回调非阻塞,边缘触发对遍历的集合划分分为活跃和非活跃的遍历更少的集合,mmap内存文件映射机制减少拷贝,事件队列检测用了数组结构查询效率变为O(1)。从IO拷贝, 查询的集合空间, 查询的算法, 多线程池, 异步事件回调机制方面进行了非常精细的优化。


一、用回调或观察者来代替每帧update

对于一些界面信息的更新,尽量用回调的机制来实现,而不是每帧update的方式来实现。

能够设计为回调的,能够设计为观察者模式的,都应该设计为回调为观察者。而不是用蛮力的每帧检查。


二、每帧调用,一定要非常手段进行优化

1.尽量避免计算:

存储常量,避免每次都计算。

事件触发的计算,放置到事件发生时候才计算。

尽量避免查找算法:

    比如勾八边的需要阴影的字体,需要查询8次并渲染,那么存放第一次,后面的就不用查找了;

     能够查找少尽量查找一次存放起来,但是有的对象是必须每次都查找的,比如对象模型。


2.优化计算,写出高效的算法:

优化查找算法:

尽量使用map,set,hash查找算法提高查询效率。

精简算法里面的容器大小,比如迪杰斯特拉算法中,本来是80 x 80的点,却要在构造的8000X8000。


优化排序算法:

如果有排序的,用map存储,重载好<运算符得到的结果就是排序好了的。


优化函数:

使用内联函数。

函数参数尽量使用传递指针引用,结构体或类对象输出也可以用引用参数输出形式,避免过多的构造函数开销。


优化表达式:

速度:移位>乘法>除法。

乘法是加操作,而除法是每步的结果作加法或减法(加减交替法),有的算法还需要恢复上一次的结果(余数恢复法),而且每一步加减后还要进行移位,所以最慢。

因为移位速度快,所以经常被应用。


优化类型转换:

尽量不用dynamic_cast这些,否则也是比较影响性能。

尽量将这些转换提取为常量或者计算一次使用。


三、优化算法复杂的大型函数

这种函数尽管不是每帧调用,但是调用一次都很影响性能。

那么需要尽量避免计算,或者尽量计算一次,如果要计算,也尽量优化计算。

1)减少空间提升效率,空间个数是很影响效率的。

2) 增大空间提升效率,数据结构角度。

3)优化算法,O(n2),O(n),O(log2n),O(1)的角度去不断优化。


也需要从优化查找算法,排序算法,优化函数,优化表达式,优化类型转换角度出发。


四、大量的计算采用多线程

太大量的计算使用多线程,比如解压线程,比如纹理读取解析线程。

一些复杂的图形图像计算,也可以多线程来实现,通过单CPU并发,多CPU并行机制,能够有效的利用CPU性能。


五、分离计算任务,转移到GPU分担计算

利用shader将图形计算转移到GPU。


六、优化细节,减少细节的开销

尽量使用位移,|,&,^这些高效的位操作。

尽量保存更多的常量。

尽量小而频繁调用的函数声明为内联函数。

尽量不要过多的dynamic_cast类型的转换,很影响性能。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值