一、分析性能瓶颈
通过Profiler分析工具 在代码块中用
Profiler.BeginSample("SolveFluidsToCpu");//SolveFluidsToCpu为分析的模块名
Profiler.EndSample();
来二分查找代码中延迟比较高的代码块
然后通过unity的Profiler查看
可知延迟最高的为 SolveFluidsToCpu 以及sort模块
排序用了将近22ms,计算流体压强密度等用了24ms 。
二、针对优化
1.排序优化
首先用系统的快排效率太低,针对本项目的粒子 设计 归并排序的算法,并解决其中的装箱拆箱的消耗
然后在分析优化后的延迟
发现排序延迟由22ms 优化到4.3ms。
2.针对流体压强,密集计算优化
由于粒子仿真由GPU并列实现计算,其底层核心算法已不可改,故尝试用c#并列多核计算方式去优化,比如:
然后在分析优化后的延迟:
可见计算压强密度等延迟12ms 优化到 4.25ms
然后将所有的计算都改为并列计算可见:
可知在同样的情况下 一套优化后由原来的50ms优化到如今的16延迟, 取的图都是平均值。
三、其他细节优化
去掉无用的大量数据,优化内存空间。
去掉仿真边界的优化,通过坐标去限制空间
以及一些代码上的扩展性优化