性能优化问题的本质
- 慢与快的问题
- 前提
- 稳定性:不能因优化造成稳定性变差
- 兼容性:不能因优化导致兼容性变差
- 性价比:优化要有度,考虑成本与复杂度
性能优化的流程
- 发现问题(什么平台、什么操作系统、什么情况下出现问题,一般问题还是特例问题等)
- 定位问题(什么地方造成的性能问题,是cpu还是gpu,是带宽还是内存,我们要用什么工具、什么方法确定瓶颈)
- 研究问题(确定用什么方案处理这个问题,要考虑性能优化的前提)
- 解决问题(按问题研究的结论去实际处理,并验证处理结果与预期的一致性,以及是否带来新问题)
影响性能的四大类问题
- CPU
- GPU
- 带宽
- 内存
其中的连线为带宽,比喻道路是否通畅
CPU内部设计(内部工厂)
GPU内部设计(内部工厂)
隐藏的几类小问题
- 功耗比
- 填充率(比如纹理过大时需要两次读取,但第二次读取并没有使用完全所有带宽。又比如4维的通道没用满之类)
- 发热量
性能问题可能的情况
- 瓶颈可能性按由高到低的顺序排列(个人经验总结)
- CPU利用率
- 带宽利用率
- CPU/GPU强制同步
- 片元着色器指令(改变分辨率来快速确认是不是这个瓶颈)
- 几何图形到CPU到GPU的传输
- 纹理CPU到GPU的传输
- 顶点着色器指令
- 几何图形复杂性
经常用的优化思路
不断积累来理解
- 升维与降维(算法是否易于理解与性能权衡即抽象程度)
- 维度转换,如空间(缓存池对象池)与时间(taa,dlss),量纲转换,面相对象设计的aos到面相数据设计的soa转换,积分变换