1、2022-7-261课题研究背景及意义本文算法核心实验结果总结与展望2022-7-262课题研究背景及意义本文算法核心实验结果总结与展望2022-7-263n应用领域广n电影特效n3D游戏n仿真系统nn重要意义n经济、国防、人身安全n问题n计算复杂、求解时间长n无法充分利用当前CPU+GPU平台2022-7-264课题研究背景及意义本文算法核心实验结果总结与展望2022-7-265N-S方程简介方程简介Helmhotz-Hodge定理投影算子外力项平流项扩散项投影项2022-7-266算法流程算法流程2022-7-267宿主机宿主机端功能实现端功能实现根据网格大小分配空间依据需求对物理场初始化
2、借助OpenGL实现窗口侦听任务接收外源信息传输到GPU端2022-7-268外源项添加外源项添加外源外力密度特点不存在数值依赖适用数据并行2022-7-269难点一:如何保证所有网格都可以并行更新?工作组划分工作组划分索引空间的利用工作组计算单元工作项处理单元划分算法 工作组并发 线程数较多 工作项并发 线程数较少2022-7-2610平流项求解平流项求解并行策略工作组划分,全局空间存储物理场量2022-7-2611扩散项扩散项&投影投影项项求解求解扩散项速度的Possion方程投影项压力的Possion方程2022-7-2612Possion方程方程求解求解1/2Possion 方程迭代方
3、式Jacobi迭代针对速度和压力两种Possion方程2022-7-2613难点二:如何在并发过程中保证线程之间的通信?Possion方程方程求解求解2/2并行策略使用组内局部内存加速主机端保证工作组间同步全局内存工作组局部共享内存工作项工作项读取读取写回2022-7-2614并行体绘制算法并行体绘制算法体绘制符合数据并行并行策略工作项分组低分辨率下采 用共享内存2022-7-2615烟雾模拟烟雾模拟烟雾颜色只考虑密度信息最终颜色2022-7-2616火焰模拟火焰模拟轮廓Level set形态热浮力温度衰减颜色黑体辐射2022-7-2617课题研究背景及意义本文算法核心实验结果总结与展望202
4、2-7-2618实验结果实验结果烟雾模拟效率对比烟雾模拟效率对比1/2网格分辨率网格分辨率文献文献15(毫秒毫秒/帧帧)本文本文算法算法(毫秒毫秒/帧帧)算法加速比算法加速比32*327.319.6700.7664*6413.229.5401.39128*12831.459.2603.40256*256124.039.51013.04512*512647.3910.04064.481024*10244181.8630.690136.2632*32*322830.4534.04083.1564*64*643326.1834.29097.00128*128*12811667.33107.70010
5、8.33256*256*256228469.33834.130273.90烟雾模拟效率对比烟雾模拟效率对比2022-7-2619实验结果实验结果烟雾模拟效率烟雾模拟效率对比对比2/2abc d2022-7-2620实验实验结果结果火焰模拟火焰模拟效率效率对比对比网格分辨率网格分辨率文献文献14(毫秒毫秒/帧帧)本文本文算法算法(毫秒毫秒/帧帧)算法加速比算法加速比3232*3232*32323800.9654.3369.966464*6464*64646968.1381.0286.01128128*128128*12812815022.85135.42110.94256256*256256*2
6、56256561752.441897.21296.09火焰模拟效率对比火焰模拟效率对比2022-7-2621实验结果实验结果烟雾效率对比烟雾效率对比 CPU GPU2022-7-2622实验结果实验结果不同颜色烟雾不同颜色烟雾2022-7-2623实验结果实验结果添加外力添加外力2022-7-2624实验实验结果结果展示展示2022-7-2625总结与展望总结与展望总结实现了基于OpenCL的并行流体模拟算法 使用索引空间保证线程的并发粒度 使用局部共享内存减少访问延迟,实现线程间通信 加速比相对CPU算法增加了一到两个数量级以烟雾和火焰为载体进行效果展示有效利用CPU+GPU异构平台展望采用
7、GPU集群2022-7-2626请各位专家指正批评!请各位专家指正批评!谢谢谢谢2022-7-2627实验结果实验结果烟雾模拟效率对比烟雾模拟效率对比网格分辨率网格分辨率文献文献15(毫秒毫秒/帧帧)OpenMP(毫秒毫秒/帧帧)算法加速比算法加速比32*327.3112.480.5964*6413.2224.490.54128*12831.4560.680.51256*256124.03172.540.72512*512647.39922.430.701024*10244181.865705.560.7332*32*322830.4511978.620.2464*64*643326.1813
8、527.880.25128*128*12811667.3321713.620.54256*256*256228469.33236317.070.97烟雾模拟效率对比烟雾模拟效率对比2022-7-2628实验结果实验结果烟雾模拟效率对比烟雾模拟效率对比网格分辨率网格分辨率文献文献15(毫秒毫秒/帧帧)GPU(毫秒毫秒/帧帧)本文算法本文算法(毫秒毫秒/帧帧)32*327.3110.1009.67064*6413.229.7109.540128*12831.4510.2009.260256*256124.0310.2409.510512*512647.3910.42010.0401024*1024
9、4181.8614.94030.69032*32*322830.4576.9234.04064*64*643326.1890.9134.290128*128*12811667.33-107.700256*256*256228469.33-834.130烟雾模拟效率对比烟雾模拟效率对比2022-7-2629算符离散化算符离散化2022-7-2630实验结果实验结果烟雾与障碍物交互烟雾与障碍物交互2022-7-2631实验结果实验结果火焰与火焰与障碍物交互障碍物交互2022-7-2632X(0,0)X(1,0)X(0,1)X(1,1)Step 1:t=0;i=0,j=0;update X(i,j)
10、;Step 2:t=1;i=0,j=1;update X(i,j);Step 3:t=2;i=1,j=0;update X(i,j);Step 4:t=3;i=1,j=1;update X(i,j);X(0,0)X(1,0)X(0,1)X(1,1)jiEnd thread_0create thread_0外源项添加外源项添加串行示意串行示意2022-7-2633icreate thread_0 X(0,0)X(1,0)X(0,1)X(1,1)X(0,0)X(1,0)X(0,1)X(1,1)jigetI(i),getJ(j);update X(i,j);End thread_0;create t
11、hread_1 getI(i),getJ(j);update X(i,j);End thread_1;create thread_2 getI(i),getJ(j);update X(i,j);End thread_2;create thread_3 getI(i),getJ(j);update X(i,j);End thread_3;外源项添加外源项添加并行示意并行示意2022-7-2634基于基于OpenCL的的Navier-Stokes 方程并方程并行求解行求解-OpenCL简介简介OpenCL:开源、跨平台、异构的编程框架平台模型:硬件平台设计 宿主机&执行设备&计算单元&处理单元执行
12、模型:硬件级别的并发保证 索引空间&工作组&工作项内存模型:权限不同,读取延迟不同 全局内存&共享内存&私有内存编程模型:算法级别的并发保证 数据并行 vs 任务并行2022-7-2635基于基于OpenCL的的Navier-Stokes 方程并方程并行求解行求解边界处理边界处理 网格左边网格左边界界网格右边界网格右边界网格上边界网格上边界网格下边界网格下边界水水平速平速度度Ini,0=-Ini,1Ini,n=-Ini,n-1In0,j=In1,jInn,j=Inn,j垂垂直速直速度度Ini,0=Ini,1Ini,n=Ini,n-1In0,j=-In1,jInn,j=-Inn-1,j速度速度值的边界处理值的边界处理2022-7-2636基于基于OpenCL的的Navier-Stokes 方程并方程并行求解行求解CL与与GL交互交互目的减少CPU与GPU的数据传输、加速GPU渲染shared memoryCPU:memory objectGPU:VBO37