一、分析性能瓶颈

通过Profiler分析工具 在代码块中用               

Profiler.BeginSample("SolveFluidsToCpu");//SolveFluidsToCpu为分析的模块名

Profiler.EndSample();

来二分查找代码中延迟比较高的代码块

然后通过unity的Profiler查看实例unity项目中的性能优化过程记录

可知延迟最高的为 SolveFluidsToCpu 以及sort模块

 排序用了将近22ms,计算流体压强密度等用了24ms 。

二、针对优化

1.排序优化

首先用系统的快排效率太低,针对本项目的粒子 设计 归并排序的算法,并解决其中的装箱拆箱的消耗

实例unity项目中的性能优化过程记录实例unity项目中的性能优化过程记录

然后在分析优化后的延迟

实例unity项目中的性能优化过程记录

发现排序延迟由22ms  优化到4.3ms。

2.针对流体压强,密集计算优化

由于粒子仿真由GPU并列实现计算,其底层核心算法已不可改,故尝试用c#并列多核计算方式去优化,比如:

实例unity项目中的性能优化过程记录

然后在分析优化后的延迟:

实例unity项目中的性能优化过程记录

可见计算压强密度等延迟12ms 优化到 4.25ms 

然后将所有的计算都改为并列计算可见:

实例unity项目中的性能优化过程记录

可知在同样的情况下 一套优化后由原来的50ms优化到如今的16延迟,  取的图都是平均值。

三、其他细节优化

去掉无用的大量数据,优化内存空间。

去掉仿真边界的优化,通过坐标去限制空间

以及一些代码上的扩展性优化

相关文章:

  • 2021-12-26
  • 2021-12-23
  • 2021-04-04
  • 2022-12-23
猜你喜欢
  • 2022-01-28
  • 2022-12-23
  • 2021-12-09
  • 2021-07-09
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案