找回密码
 注册
查看: 8292|回复: 16

大家做lbm时有自己编程并行计算的吗,具体怎么实现?

[复制链接]
发表于 2011-11-24 11:07:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
大家做lbm时有自己编程并行计算的吗,具体怎么实现?
发表于 2011-11-25 19:13:27 | 显示全部楼层

回复 1# matrixmess 的帖子

如果没有局部网格优化的话,可以参考这篇文章:
Direct Numerical Simulation of Particulate Flows on 294 912 Processor Cores
发表于 2011-11-25 22:19:10 | 显示全部楼层
整天听LBM并行的优点,从来没尝试并行过,多核并行也没考虑过。算的东西机时还真不少,惭愧啊
发表于 2011-11-30 16:37:18 | 显示全部楼层
我在做LBM的并行,3D多相流的。并行没有LBM吹得那么牛,什么自身的碰撞、stream就自动并行啦!其实跟一般的FVM并行一样的,比较特别的就是数据swap的时候需要考虑沿edge的临近的processors的交换。还有就是stream完后要完成一步数据平衡变量的update,其他的都一般了,没有什么神秘特别的地方。会做FVM并行就能做LBM的并行。
发表于 2011-12-3 22:12:17 | 显示全部楼层
用OpenMP很简单,并行度受CPU核数限制。
用MPI组网或上超算挺好,编程复杂一些,受节点间数据传输的限制。
用CUDA也挺好,编程复杂。
发表于 2011-12-4 19:04:36 | 显示全部楼层
可以先用openMP,现在12核的电脑都出来了,对于一般规模的,足够了
发表于 2011-12-20 08:22:07 | 显示全部楼层
原帖由 particlecfd 于 2011-11-30 16:37 发表
我在做LBM的并行,3D多相流的。并行没有LBM吹得那么牛,什么自身的碰撞、stream就自动并行啦!其实跟一般的FVM并行一样的,比较特别的就是数据swap的时候需要考虑沿edge的临近的processors的交换。还有就是stream完后 ...


如果你是区域分裂,当然LBM和FVM的并行思路是一样的。但标准LB的碰撞在当地,而迁移也涉及相邻有限节点,且不需要求解poison方程啥的,因而采用迁移碰撞的LB的scalability会比FVM好很多。
我做湍流,用基于FVM的LBM(非结构网格)以及标准LBM,都是2048个处理器,后者计算速率是前者的10倍以上,差别就在于网格以及数据交换。同时我也用过FVM做,FVM的scalability更差。
当然,我说的都是非定常问题。
发表于 2011-12-21 16:42:17 | 显示全部楼层
原帖由 ywang 于 2011-12-20 08:22 发表


如果你是区域分裂,当然LBM和FVM的并行思路是一样的。但标准LB的碰撞在当地,而迁移也涉及相邻有限节点,且不需要求解poison方程啥的,因而采用迁移碰撞的LB的scalability会比FVM好很多。
我做湍流,用基于FVM的 ...

FVM的scalability很好,我做的1个亿的非结构化网格,8192个processors一点问题都没有,不知到你为什么会说FVM的scalability有问题。可能是你用的方法有问题。
我并没有说LBM的scalability会差,不过它的MPI并行真的没有比FVM复杂很多,都是一个思路。所以做过FVM的MPI,再做LBM的MPI不是很难,没有什么本质的区别,没有那么神秘啦!
发表于 2011-12-22 07:00:15 | 显示全部楼层
原帖由 particlecfd 于 2011-12-21 16:42 发表

FVM的scalability很好,我做的1个亿的非结构化网格,8192个processors一点问题都没有,不知到你为什么会说FVM的scalability有问题。可能是你用的方法有问题。
我并没有说LBM的scalability会差,不过它的MPI并行真 ...


FVM我是用的OpenFOAM里面基于piso的LES求解器,十来个处理器下并行效率就低了,我也挺奇怪这一点;基于FVM的LBM代码是自己搞的,scalability可以,但计算速率不如标准LBM。
另外,好像这个帖子里没人说LBM的并行多么神秘,呵呵。我前面说过,如果用区域分裂,LB的并行和FV一个思路,但由于LB的特性,那么处理起来会更简单。
我目前,LBM,一千七百万网格,在用16384个处理器跑。因为网格量并不大,所以再往上增多处理器就不太划算了,呵呵。

[ 本帖最后由 ywang 于 2011-12-22 07:02 编辑 ]
发表于 2011-12-23 13:38:05 | 显示全部楼层
原帖由 ywang 于 2011-12-22 07:00 发表


FVM我是用的OpenFOAM里面基于piso的LES求解器,十来个处理器下并行效率就低了,我也挺奇怪这一点;基于FVM的LBM代码是自己搞的,scalability可以,但计算速率不如标准LBM。
另外,好像这个帖子里没人说LBM的并行 ...

OpenFOAM提供了好几种并行方法,如果用那个simple的方法(就是简单沿xyz方向给定要分配的CPU个数),对于complex geometry很难有好的scalability。
LBM的并行的神秘性不是从你哪里听到的,是我以前的一个同事说的,尽管他实现不了LBM的并行,还是在那里吹嘘什么LBM自身是就并行了的啥啥的,把LBM说的神的不得了。反正当时是唬了不少人,包括我以前的老板。
多相流LBM因为要考虑很多偏导数项,不用FVM很难实现比如表面张力,两相之间的相互作用力等的计算。如果不用FVM,LBM的并行思路还是跟一般的FVM一样,只是不要数据交换做导数计算,只要平衡态变量的数据传递即可,所以会比FVM要快。不过这种LBM只是应付单相流还可以。我们开发的这种单相流并行LBM在1个亿左右的网格,8192个processors上的并行效率达到90%以上。
FVM、LBM还有FDM、FEM等的MPI并行都是一个思路,只要做过其中的一个,其他的只要照猫画虎就可以搞定,哪个都不神秘。
发表于 2011-12-23 22:46:18 | 显示全部楼层
lbm和fvm我都做过一点。 两者并行的思想是一样的, 不管你是粒子碰撞还是用求解散度、梯度和拉普拉斯。 个人感觉,lbm之所以scalability好,并不是由于粒子碰撞,而是不用求解代数方程组。他是一种显式的时间推进,各个节点彼此影响较小,每个时间步骤粒子的对流只需要做一次,因此只需要交换一次。而代数方程组的求解需要全场的统一求解,每次迭代步都需要交换信息。交换信息量肯定要比lbm多。如果你用显式的时间推进算法求解fvm离散后的方程,每个时间步骤交换一次,仍然可以实现scalability很好。 并行性和你选择的代数方程求解器也有关系的。如果采用代数多重网格做预条件,而采用共轭梯度求解方法,并行性估计也应该很好的,因为他求解代数方程迭代步比较少,因此信息交换少。
对于不可压缩问题fvm方法分离求解而言,由于simple/piso算法的关系,压力泊松问题通常是不可避免的,因此代数方程仍然需要求解的,因此并行性的scalability不如显示推进的lbm好。 而对于可压缩问题,显式时间推进fvm仍然可以做到很好的并行。
ps 木头:我做的那个fvmlbm之所以比标准的lbm效率低,和fvm方法无关,是因为我写非平衡外推边界条件的时候,为了方便将梯度计算搞成全场的了,而且每个时间步长只更新一次,边界自然延迟了,求解过程应该每次用到边界都根据当前情况更新的。改成局部的梯度计算自然效率就可以上来。 而且,fvm中耗时部分最大的是代数方程求解,梯度求解时占第二位的。fvmlbm也是一种显式推进,scalablity当然也可以啊。不需要交换过多信息嘛。
lbm方法不管是标准的还是基于fvm的,他都采用时间推进方法来做流动。 由于粒子碰撞是局部的,所以在求解椭圆型问题上,比如:不可压缩问题或者稳态问题时,fvm的效率应该比lbm高一些,因为lbm的影响并不能马上传到全场。 可以找个顶盖或者管流算算。个人感觉。

[ 本帖最后由 su_junwei 于 2011-12-23 22:50 编辑 ]
发表于 2011-12-24 05:56:08 | 显示全部楼层

回复 11# su_junwei 的帖子

理论而言,LBM压力场不可能一下子传到全场,这违背弱可压性质。FVM用来求解LBM不可能比标准的LBM框架快,FVM直接求解代数方程组之非常致命的。同时,尽管LBM是简单的显式求解,但它是具有高的精度。对于非稳态问题,LBM的效率比NSE高阶方法的求解器快。用FVM来求解LBM,这就显然会非常慢,梯度操作运算,就是个弱点,即便采用显式。如果再求解代数方程组,就更要命。要提高精度再使用高阶框架,那就更慢。3D就更不用说了。
发表于 2011-12-24 05:58:35 | 显示全部楼层
原帖由 su_junwei 于 2011-12-23 22:46 发表
lbm和fvm我都做过一点。 两者并行的思想是一样的, 不管你是粒子碰撞还是用求解散度、梯度和拉普拉斯。 个人感觉,lbm之所以scalability好,并不是由于粒子碰撞,而是不用求解代数方程组。他是一种显式的时间推进,各 ...


呵呵,如果基于区域分裂,fvm,fdm,lbm等等都一样,这是肯定的。我以前也在一个CFD公司也参与过FVM代码的并行化处理,所以算起来两方面都了解一点,思路当然都没啥差别,呵呵。但如果在向量计算机上,似乎lb的并行就会更好一些,这个我不懂,仅仅有这方面的印象。另外,我测OpenFOAM的LES求解器的时候,是一个很简单的长方体模型,而且多种并行方式都测试过,呵呵。

军伟,lbm是在求解代数方程组的,呵呵。lbm的显式时间推进就是显式求解常系数代数方程组,迁移就来自于空间一阶迎风离散。lb算稳态问题,确实没fvm之类的快,这方面有一些文献可以看看。但对于非稳态问题,且涉及大规模计算的时候,lbm在计算效率方面的优势就凸显出来了。另外,咱们最开始搞的那个版本的fvmlbm慢并不是主要因为边界处理。我对每一部分的效率测试过。在我后来改进的版本里,即使只计算边界梯度信息,提速不到10%;而且有的边界处理不需要梯度信息。最耗时的其实是对流项,按照最初的处理方式,首先离散方向就增加了几倍。改成Succi他们的法子会好一些。我后来还修改了隐式显式的那些格式,加了外力模型。结论是,即使使用最高效的隐式显式格式,最省时的空间离散,计算效率也不太符合我需求,而且数值粘性比我预期的大(OF里面能用的都尝试过,包括不同权系数的混合格式,算湍流,高阶不稳定,低阶又粘性大)。呵呵,所以就没继续搞了。我们还尝试了加LES,呵呵。

[ 本帖最后由 ywang 于 2011-12-25 02:05 编辑 ]
发表于 2011-12-24 10:18:50 | 显示全部楼层
哈哈,受教了。

[ 本帖最后由 su_junwei 于 2011-12-24 10:35 编辑 ]
发表于 2011-12-25 13:13:06 | 显示全部楼层
原帖由 ywang 于 2011-12-24 05:58 发表


呵呵,如果基于区域分裂,fvm,fdm,lbm等等都一样,这是肯定的。我以前也在一个CFD公司也参与过FVM代码的并行化处理,所以算起来两方面都了解一点,思路当然都没啥差别,呵呵。但如果在向量计算机上,似乎lb的并行 ...

是不是在选择不同的方法的时候,那些权系数都取1了。如果OpenFOAM的所有并行方法都不行,那对于研究者来说是亮点,好事呀。这样你可以把自己的方法加进去,如果提高了,除了发文章以外,肯定还会有用户感兴趣,到时候大把的银子入帐
不过最好先仔细研究一下是不是自己选择的方法和运用方式有问题,还有运行OpenFOAM的平台是不是有问题。我们用的OpenFOAM波音737整机的模拟(5千万个非结构化网格)的scalability没有问题,不过湍流模型用的是RANS。

[ 本帖最后由 particlecfd 于 2011-12-25 14:01 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表