CFD并行计算大揭秘!算法玩的不好,照样香菇、蓝瘦!

2017-02-24  by:CAE仿真在线  来源:互联网



相关背景

单核计算原来越不能满足大规模CFD计算的需求。大量的学术机构和工程院所通过并行的方法来进行上亿网格的计算模拟。理所当然的,并行计算(Parallel computing)需要配备多核CPU的计算机,也即并行计算机(Parallel computers)。


并行计算机和普通计算机相同,也是使用常规芯片,因此并行计算机比矢量计算机(Vector computers)要便宜的多。商用并行计算机通常具有上千个处理器,上T的内存。因此计算能力是惊人的。


CFD工程师经常会问,并行计算是仅仅调用多个CPU就可以实现加速计算了么?


Too simple, sometimes naive!

CFD并行计算大揭秘!算法玩的不好,照样香菇、蓝瘦!cfd流体分析图片1

并行计算远非那样简单


多CPU串行计算


基于单核计算设计的算法,可能在并行计算机上不能够有效的运行。我们用循环语句为例,如果使用自动并行编译器对代码进行编译,并行只是在循环语句里面执行。依据Amdahl法则,计算效率由最低效的部分决定。因此整个代码中,不能并行计算的代码要尽可能的小。


目前CFD中采用的并行算大体思路为把计算域分为子计算域,并且分别使用不同的CPU核心来对子计算域进行计算。在这种并行分块策略下,不同的CPU核心运算相同的代码,只不过他们处理的数据不同(分别处理自己的数据),在并行计算后再对数据进行重组。


由于每个CPU核心需要处理自己的数据,且某些数据需要和其他CPU核心中的数据中获取,因此,CPU核心之间存在着数据交换。每个CPU处理的计算域的边界也称之为CPU边界(Processor Boundary)。


显性格式相对来说还是比较容易并行的,因为操作的数据都是上一个时间步的已知数据。其离散后的矩阵为对角阵。数据交换只存在于在每个时间步计算完成后子计算域彼此的交界处。显性格式并行计算最困难的部分就是椭圆形的压力泊松方程。


隐性格式相对来讲并行起来比较麻烦,矩阵的系数计算只是稍微麻烦一点(隐形格式离散后非对角阵),更头疼的是求解这个非对角阵的迭代矩阵求解器不是很容易并行起来。比如:高斯消去法在计算的时候需要调用之前的迭代值,这导致其很难并行计算。


举例,我们来看使用常规的矩阵求解方法(如采用ILU类型的矩阵求解器)在并行中的计算特点:

CFD并行计算大揭秘!算法玩的不好,照样香菇、蓝瘦!cfd流体分析图片2

在上图中,黑格子为我们的2D网格单元,整个网格域被分为4个垂直的子区域并分别由4个不同的CPU求解。在每个网格单元上,存储在着我们的矩阵系数。在常规的方式中,矩阵系数的计算需要相邻网格单元的值。


  • 假若某种矩阵求解器的矩阵系数构造需要其西侧南侧矩阵系数的值。那么CPU1上节点1、2上的矩阵系数可以顺序求出,在这个时候,CPU2、3、4闲置,因为他们需要西侧和南侧的矩阵系数值才能进行计算。


  • 在CPU1上节点1、2上的矩阵系数求出之后,CPU2开始求解节点3、4的矩阵系数。在这个时候,CPU1可以计算节点10、11的矩阵系数。


  • 在CPU2求解之后,CPU3开始求解节点5、6的值。于此同时,CPU1已经完成节点10、11的矩阵系数计算,并可以开始进行节点19、20的计算。


  • 在CPU3计算节点5、6的值之后,CPU4开始计算节点7、8、9的值,同时CPU1、2、3也在分别进行着计算...


可以看出,CPU1总是比CPU2快一步,CPU2总是比CPU3快一步,以此类推。图中天蓝色阴影部分即表示的为这种CPU负载的不均衡


在上图中,CPU1只是领先了CPU4四行,如果分配了400个核,那么这意味着CPU1领先了CPU400共400行数据!这导致大量的闲置时间(idle time)。


CFD并行计算大揭秘!算法玩的不好,照样香菇、蓝瘦!cfd流体分析图片3
图中,CPU1已经跑完了,还需要继续等待CPU2、3、4、...15,并且CPU15才跑到一半!

CFD并行计算大揭秘!算法玩的不好,照样香菇、蓝瘦!cfd学习资料图片4


要真正的并行计算,算法改进迫不及待。


并行计算


目前,CFD计算中的并行算法均采用分解(decompose)的方式,附加矩阵求解器的重构。分解的方式主要有两种:空间分解和时间分解。


如前文所述,在空间分解中,计算域被分解为几个小的计算域。空间分解的首要任务就是效率最大化:使得每个处理器获得相同的工作量。


举例:我们把计算域空间分解为9个子计算域,并编号为1-9。通常的并行做法为:同时把矩阵系数分解为9*9阶块矩阵。其中矩阵的对角块对应子计算域的矩阵系数。非对角块中包含子计算域边界处的交互关系。


CFD并行计算大揭秘!算法玩的不好,照样香菇、蓝瘦!cfd学习资料图片5

上图中,A矩阵的对角块分别对应子计算域的矩阵系数块,非对角块中,如A矩阵中的12块对应子计算域1和2之间的交互。


求解上述矩阵系统,可以分别求出每个子计算域中的T。


CFD并行计算大揭秘!算法玩的不好,照样香菇、蓝瘦!cfd学习资料图片6


拓展阅读:


再比拼:CFD并行分解算法(Graph-Partitioning Algorithms)|炸了!150万核超级计算机!|CFD中的壁面函数如何处理?|旋转机械大法:多重参考系(MRF) VS 滑移网格(Sliding-Mesh)!|湍流神秘y+之旅|CFD逆天黑科技:“多重网格法”|源项的线性化处理|牛顿流体玩多了,不要忘记“非牛顿流体”|“我用100个核模拟,就可以模拟时间将为原来的1/100了!”|CFD后处理中的“体渲染”


原文整理与:Computational Methods for Fluid Dynamics, J.H. Ferziger and M. Peric, 3rd Edition, Page 356


开放分享:优质有限元技术文章,助你自学成才

相关标签搜索:CFD并行计算大揭秘!算法玩的不好,照样香菇、蓝瘦! CFD培训 CFD流体分析培训 cfd视频 fluent cfx pumplinx软件培训 Fluent、CFX流体分析 HFSS电磁分析 Ansys培训 Abaqus培训 Autoform培训 有限元培训 

编辑
在线报名:
  • 客服在线请直接联系我们的客服,您也可以通过下面的方式进行在线报名,我们会及时给您回复电话,谢谢!
验证码

全国服务热线

1358-032-9919

广州公司:
广州市环市中路306号金鹰大厦3800
电话:13580329919
          135-8032-9919
培训QQ咨询:点击咨询 点击咨询
项目QQ咨询:点击咨询
email:kf@1cae.com