【IT168应用】2月14日(GTC Asia)大会,CUDA学生研讨会,现场评委:中国科学院副教授刘莹,长安大学副教授柳有权,华南理工大副教授陈虎,北京大学计算机系副系主任、博士生导师陈一峯,上海交通大学计算机系讲师林新华,NVIDIA亚太区技术市场经理邓培智。
CUDA学生研讨会 CUDA Students Workshop是第一次在GTC上举办,旨在给学校的学生提供一个交流的平台,让那些在高校的CUDA应用实践者给大家介绍自己的成果同时有经验丰富的高校老师进行点评。本文主要分享了复杂流场,格子Boltzmann方法(LBM);基于CUDA的LBM方法,复杂流场LBM的CUDA实现,算法优化;程序性能分析:存储消耗,运行时间,加速比。
复杂流场中存在大量固体节点,通常计算规模较大,求解时间极长。
▲华中科技大学数学与统计学院复杂系统仿真中心黄昌盛
复杂流场流动问题数值求解方法主要有以下几种方法:
传统CFD方法: 有限体积、有限差分、有限元等
缺点:流体与固壁之间的相互作用难以描述、并行效 率低
其他方法:格子Boltzmann方法(LBM)
优点: 流体与固壁之间的相互作用易于描述、程序实现简单、并行效率高
格子Boltzmann方法(LBM)
• 简化的分子动力学模型;
• 容易处理流体内部的相互作用,适合处理复杂几何构形的流动;
• 计算具有局部性,实现简单,适合大规模并行计算;
• 格式简单﹑易于编程和应用.
LBM应用:
自问世以来,被广泛应用于多种多样流体问题。以下为本中心部分应用问题:
LBM的演化方程
▲LBGK模型
基本思想:将计算区域划分为网格,每个格点有Q个方向,每个方向的流体微粒分布用分布函数 Fi描述。
LBM边界处理方法
反弹格式(bounce back)
从流体射向边界的粒子,被边界反射,以相同的速率沿原路返回。算法简单,适用于多孔介质中的复杂几何边界
碰撞在先 VS 流动在先
每一个时间步,访问全局内存两次:
读取上一时刻分布函数,存储更新后分布函数
碰撞在先:
读取满足合并访问,存储不满足。
存储时各方向都要判断是否流出网格区域从而越界,判断复杂。
流动在先:
读取不满足合并访问,存储满足。
可通过只对内点处理,或判断当前节点是否为边界点防止越界。
已有文献*证明,非合并的读取速度快于非合并的存储。
因此流动在先优于碰撞在先。
总结:
1、基于CUDA实现的格子Boltzmann方法取得了较理想的加速效果,GPU与LBM具有良好的匹配关系。
2、经过优化后的算法在流场结构复杂时消耗空间及程序性能均优于基本算法,取得了较好的优化效果。
3、相比CPU,GPU具有强大的并行处理能力,适宜于大规模并行计算。