CN103778098A - 基于格子Boltzmann理论实现协同计算大涡模拟系统及方法 - Google Patents

基于格子Boltzmann理论实现协同计算大涡模拟系统及方法 Download PDF

Info

Publication number
CN103778098A
CN103778098A CN201410053493.5A CN201410053493A CN103778098A CN 103778098 A CN103778098 A CN 103778098A CN 201410053493 A CN201410053493 A CN 201410053493A CN 103778098 A CN103778098 A CN 103778098A
Authority
CN
China
Prior art keywords
cpu
node
microprocessor
thread
process module
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201410053493.5A
Other languages
English (en)
Inventor
卢晓伟
张清
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Beijing Electronic Information Industry Co Ltd
Original Assignee
Inspur Beijing Electronic Information Industry Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Inspur Beijing Electronic Information Industry Co Ltd filed Critical Inspur Beijing Electronic Information Industry Co Ltd
Priority to CN201410053493.5A priority Critical patent/CN103778098A/zh
Publication of CN103778098A publication Critical patent/CN103778098A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明披露了基于格子Boltzmann理论实现协同计算大涡模拟系统及方法,其中系统包括:主进程模块将输入的数据广播给系统中的其它进程模块,待全部MIC进程模块和CPU进程模块完成所有计算任务后,将所有节点的计算结果输出;MIC进程模块将输入的数据卸载给相应的MIC进行计算,同时与相邻节点的MIC进程模块或CPU进程模块进行数据通信,然后进入下一迭代;CPU进程模块控制本节点的协同计算,根据CPU的核数为每一CPU核启用相应的线程对分配的部分数据进行计算;同时与相邻节点的MIC进程模块或CPU进程模块进行数据通信,然后进入下一迭代。本发明在多节点下利用CPU以及MIC降低功耗的优势进行协同计算,实现简单,成本低。

Description

基于格子Boltzmann理论实现协同计算大涡模拟系统及方法
技术领域
本发明涉及基于格子Boltzmann理论的大涡模拟方法,尤其涉及基于格子Boltzmann理论使用CPU和MIC协同计算模式进行大涡模拟的方法及系统。 
背景技术
格子Boltzmann方法(LBM,Lattice-BoltzmannMethod)从它诞生至今已有20年。在此期间,其在理论和应用研究等方面都取得了迅速发展,并逐渐成为在相关领域研究的国际热点之一,受到国内外众多学者的关注。与传统模拟方法不同,格子Boltzmann方法基于分子动理论,具有清晰的物理背景。该方法是Boltzmann方程的一个特殊的离散格式。在宏观上它是离散方法,微观上是连续方法,因而被称为介观模拟方法。在许多传统模拟方法难以胜任的领域,如微尺度流动与换热、多孔介质、生物流体、磁流体、晶体生长等,运用格子Boltzmann方法都可以对对象进行有效的模拟,因此它被用于多种复杂现象的机理研究,推动了相关学科的发展。可以说,格子Boltzmann方法不仅仅是一种数值模拟方法,而且是一项重要的科学研究手段。此外,格子Boltzmann方法还具有天生的并行特性,以及边界条件处理简单、程序易于实施等优点。可以预计,随着计算机技术的进一步发展,以及计算方法的逐渐丰富,格子Boltzmann方法将会取得更多成果,并为科技发展发挥更重要的作用。作为一门多学科的交叉产物,格子Boltzmann方法涉及统计力学、流体力学、热力学、传热学以及计算数学等诸多学科。 
新的Intel?Xeon Phi?协处理器(MIC Many Integrated Core)构建在至强处理器的并行编程原则之上,基于X86架构,通过集成诸多(至少50个)低功耗处理器内核,每一个处理器内核具备一个512位的单指令多数据流(SIMD,Single-Instruction Multiple-Data stream)处理单元和很多新的向量 运算指令。Intel?Xeon Phi?处理器优化了每瓦性能。超过每秒一万亿次的计算能力,Intel?Xeon Phi?创造了实现在一个芯片上的超级计算机之奇迹。这个崭新的微架构具备突破性的每瓦性能,但也依赖于那些能够充分并行扩展到诸多内核、线程和向量的应用程序。英特尔采取了一种崭新的方法来帮助释放这种并行能力。英特尔尽最大可能沿用了人们易于理解的标准编程语言(包括C,C++和Fortran)以及现存的并行编程标准。程序员不再被迫采用非标准的或是硬件依赖的编程模式;而且,这种基于标准的方法保证了最大的代码重用,通过编写可移植、标准化以及面向当前和未来的兼容并行代码将会获得最大的回报。 
MIC拥有极其灵活的编程方式。MIC可以作为一个协处理器存在,也可以被看作是一个独立的节点。基本的MIC编程模型是将MIC看作一个协处理器,CPU根据程序的指令,将一部分代码运行在MIC端。此时存在两类设备,即CPU端和MIC多核协处理器端。 
大涡模拟(LES,Large Eddy Simulation),是近几十年才发展起来的一个流体力学中重要的数值模拟研究方法。它区别于直接数值模拟(DNS,Direct numerical simulation)和雷诺平均(RANS,Reynolds-AveragedNavier-Stokes)方法。其基本思想是对大涡进行计算,对小涡进行模拟。通过滤波函数将湍流的瞬时运动信号分解成大尺度涡运动和小尺度涡运动两部分;其中的大尺度涡拥有较大比例的湍流动能,对雷诺应力产生及湍流扩散起主要作用,且大涡的运动较强依赖于边界条件,即依赖于个别的流动情况,不存在通用模型,须通过控制方程直接进行数值求解;而小尺度涡主要起耗散作用,在高雷诺数下小涡运动趋向各向同性,受边界条件影响较小,故使用通用模型进行模拟。通过精确求解某个尺度以上所有湍流尺度的运动,从而能够捕捉到RANS方法所无能为力的许多非稳态、非平衡过程中出现的大尺度效应和拟序结构,同时又克服了直接数值模拟需要求解所有湍流尺度而带来的巨大计算开销的问题,因而被认为是最具有潜力的湍流数值模拟发展方向。由于其计算耗费依然很大,目前大涡模拟还无法在工程上广泛应用。但是大涡模拟技术对于研究许多流动机理问题提供了更为可靠的手段,可为流动控制提供理论基础,并可为工程上广泛应用的RANS方法改进 提供指导。 
格子Boltzmann方法(LBM)是计算流体力学领域内一种不同于传统数值方法的建模和计算方法,是对Boltzmann方程的一种特殊的离散格式的求解。求解过程是时间推进式的,并且求解过程具有良好的区域性,所以特别适合并行求解。 
一般对格子Boltzmann方程求解,可以分解为两部分: 
1)碰撞项,它与粒子离散速度的不同方向、离散节点的位置、粒子碰撞更新后的平衡分布函数以及松弛时间相关;而松弛时间又与特征速度、特征长度及雷诺数Re相关; 
2)迁移项,它与离散速度方向上的粒子分布函数、时间步长以及离散方向上粒子的速度相关。 
如图1所示的LBM的D2Q9模型中,每个格点中都有9个不同方向的平衡分布函数。格点上的宏观变量如密度、压强以及速度等都可以由粒子分布函数得到平衡分布函数。 
使用MIC协处理器在单节点内的CPU+MIC协同计算的快速大涡模拟方法是一种效率极高的方法,但是对于超大规模的数据来说,单节点的处理仍然不能满足要求,所以采用基于LBM方法在多节点上CPU/MIC协同计算大涡模拟势在必行,它能够极大地满足很多科学家在流体力学方面处理大规模数据的需求。 
发明内容
本发明所要解决的技术问题是提供一种基于格子Boltzmann实现协同计算大涡模拟方法及系统,能够在多MIC节点上采用CPU和MIC协同计算大涡模拟方法。 
为了解决上述技术问题,本发明提供了一种基于格子Boltzmann实现协同计算大涡模拟系统,除了包括N个节点设备外,还包括每个节点设备含有一个CPU及其相应的CPU进程模块以及m个微处理器及其相应的m个微处理器进程模块,在所有进程模块中选定一个为主进程模块,N和m为正整 数;其中: 
主进程模块,用于将输入的数据广播给系统中的其它进程模块,待全部微处理器进程模块和CPU进程模块完成所有计算任务后,将从所有节点接收的计算结果输出; 
微处理器进程模块,用于将输入的数据卸载给相应的微处理器进行计算,同时与相邻节点的微处理器进程模块或CPU进程模块进行数据通信,然后进入下一迭代的计算; 
CPU进程模块,用于控制本节点的协同计算,根据CPU的核数为每一CPU核启用相应的线程对分配的部分数据进行计算;同时与相邻节点的微处理器进程模块或CPU进程模块进行数据通信,然后进入下一迭代的计算。 
进一步地, 
主进程模块通过消息传递接口方式将数据广播给其它进程模块;通过消息传递接口方式将接收的计算结果输出; 
微处理器进程模块或CPU进程模块与相邻节点的微处理器进程模块或CPU进程模块通过消息传递接口方式进行数据通信。 
进一步地,在进行数据广播之前根据系统内的节点数N对流场计算域进行网格划分,根据网格总高为每个节点均分总高,得到行高,以及均分行高得到每一微处理器和CPU分行的高。 
进一步地, 
微处理器进程模块根据微处理器内核数n设总线程数为T,则T=t*n,其中,该t是为微处理器设的线程数;节点内所有的微处理器线程并行进行本节点分配的网格数据中的每一分行网格点的计算,且利用微处理器上的向量化处理加速每一分行网格点的计算; 
CPU进程模块中的所有线程参与相应分行网格点的计算;其中,CPU线程控制进行该分行网格点的初始化密度、速度及平衡分布函数,并对分布函数赋值,控制微处理器线程和CPU线程协同对分行网格点通过碰撞过程求出离散方程f*,通过迁移过程求出下一时刻的分布函数,由分行网格点上 的分布函数统计密度和速度,利用统计出的密度值和速度值计算平衡分布函数;对网格点的边界进行计算。 
进一步地,微处理器线程和CPU线程通过各自的内核函数并行计算本分行网格点的迁移过程和碰撞过程,并在微处理器上利用向量化处理单元对该过程的主体计算部分进行向量化处理;同时采用反弹法、非平衡外推法中的任意一种对网格点的边界进行计算。 
为了解决上述技术问题,本发明提供了一种适用于如前所述系统的基于格子Boltzmann实现协同计算大涡模拟的方法,包括: 
确定该系统内的节点及其进程,将计算区域进行网格划分;由选定的主进程将输入的计算数据广播给各节点; 
由每一节点的CPU进程进行计算初始化,确定本节点的宏观参量及分布函数,并控制本节点的微处理器进程和CPU线程协同在同一时层采用迁移碰撞求解离散方程,并进行边界处理,完成本节点上宏观参量的计算;微处理器进程和CPU线程同时与相邻节点的微处理器进程或CPU进程进行数据通信。 
由主进程输出所有节点的计算结果。 
进一步地,在该方法执行前还包括:进行物理建模,确定计算区域、初始条件以及边界条件。 
进一步地,确定该系统内的节点及其进程,将计算区域进行网格划分,具体包括: 
根据该系统内的计算设备确定节点,为每一节点配置微处理器进程和CPU进程,选定其中一个进程为主进程; 
根据该系统内的节点数N对流场计算域进行网格划分,根据网格总高为每个节点均分总高,得到行高,以及均分行高得到每一微处理器和CPU分行的高。 
进一步地,由每一节点的CPU进程进行计算初始化,确定本节点的宏观参量及分布函数,并控制本节点的MIC进程和CPU线程协同在同一时层 采用迁移碰撞求解离散方程,并进行边界处理,完成本节点上宏观参量的计算,具体包括: 
微处理器进程模块根据微处理器内核数n设总线程数为T,则T=t*n,其中,该t为微处理器可设的线程数;CPU进程根据CPU的核数为每一CPU核启用相应的线程; 
CPU线程对分配的相应分行网格点进行初始化密度、速度及平衡分布函数,并对分布函数赋值,控制所述微处理器线程和CPU线程协同对分行网格点通过碰撞过程求出离散方程f*,通过迁移过程求出下一时刻的分布函数,由分行网格点上的分布函数统计密度和速度,利用统计出的密度值和速度值计算平衡分布函数,利用微处理器上的向量化处理加速分行网格点的计算;同时采用反弹法、非平衡外推法中的任意一种对分行网格点的边界进行计算。 
进一步地,主进程通过消息传递接口方式将数据广播给其它进程模块;通过消息传递接口方式将接收的计算结果输出;微处理器进程和CPU进程与相邻节点的微处理器进程或CPU进程通过消息传递接口方式进行数据通信。 
本发明不仅提高了格子Boltzmann方法的处理性能,满足了流体模拟的需求,而且能够在多MIC节点下充分利用CPU以及MIC协处理器可降低功耗的优势,并且这种方法实现简单,且需要的开发成本低,大大减少机房构建成本和管理、运行以及维护费用。 
附图说明
图1为LBM二维D2Q9模型示意图; 
图2为本发明的基于格子Boltzmann实现协同计算大涡模拟系统实施例的框架; 
图3为图2所示的系统实施例进行CPU-MIC协同计算的数据流图; 
图4为图2所示的系统实施例中对数据进行网格划分的方式; 
图5为图2所示的系统实施例中数据传递边界部分迁移过程示意图 
图6为图2所示的系统实施例中节点间的数据传递示意图; 
图7为图2所示的系统实施例中同一节点上设备间的数据传递示意图; 
图8为本发明的基于格子Boltzmann实现协同计算大涡模拟方法实施例的流程图。 
具体实施方式
以下结合附图和优选实施例对本发明的技术方案进行详细地阐述。以下列举的实施例仅用于说明和解释本发明,而不构成对本发明技术方案的限制。 
在实现本发明的方法之前,先在单节点上使用专业工具分析用格子Boltzmann进行大涡模拟方法的性能瓶颈测试,分析移植到多MIC节点相应平台的可行性,找到实现大涡模拟耗时的热点代码,测试这些热点代码在大涡模拟的整个过程中所占的时间比例,分析提高整个方法性能的难度,再通过测试结果表明在采用格子Boltzmann理论实现大涡模拟方法时,大部分的时间消耗在求解离散方程和边界处理过程,求解离散方程是通过迁移和碰撞的过程实现的,因此,求解离散方程和边界处理的迭代过程是基于格子Boltzmann理论大涡模拟方法中的性能瓶颈,同时随着大涡模拟过程数据量的增大,表现出单节点已经无法满足性能需求,需要增加计算节点来组织大规模计算。 
本发明的基于格子Boltzmann实现协同计算大涡模拟系统实施例的框架结构如图2所示,该系统的集群包括多个节点(N个)设备(图2中简称节点),每个节点设备里含有一个CPU和相应配给的一个CPU进程模块(图2中简称C进程)以及m个MIC及相应配给的m个MIC进程模块(图2中简称M进程),在所有进程模块中选定一个为主进程模块;其中各CPU和各MIC协同计算的数据流图请参见图3所示: 
主进程模块,用于将输入的数据广播给集群中的其它进程模块,待全部MIC进程模块和CPU进程模块完成所有计算任务后,将所有节点的计算结 果输出; 
CPU进程模块,用于控制本节点的协同计算,根据CPU的核数为每一CPU核启用相应的线程对分配的部分数据进行计算;同时与相邻节点的MIC进程模块或CPU进程模块进行数据通信,然后进入下一迭代的计算; 
MIC进程模块,用于将输入的数据卸载给相应的MIC进行计算,同时与相邻节点的MIC进程模块或CPU进程模块进行数据通信,然后进入下一迭代的计算。 
在上述系统实施例中, 
主进程模块通过消息传递接口(MPI,Message Passing Interface)方式将数据广播给系统中的其它进程模块;通过MPI方式将接收的计算结果输出; 
MIC进程模块或CPU进程模块与相邻节点的MIC进程模块或CPU进程模块通过MPI方式进行数据通信。 
在上述系统实施例中, 
主进程模块在进行数据广播之前根据系统内的节点数对流场计算域进行网格划分,如图4所示,假设网格总大小为(nx,ny),对于每个节点的网格平均划分每行的高分别为: 
H[0]=H[1]=…=H[N-2]=┌ny/N┐, 
H[N-1]=ny-H[0]*(N-1)=ny-ny/N*(N-1); 
其中,ny代表网格总高,H代表由总高为每个节点平均划分每行的高,N代表集群的节点数;┌…┐代表取整运算符号; 
每个节点对应MIC和CPU的进一步平均划分的分行高分别为: 
对于节点0(如图4所示): 
h[0]=h[1]=…=h[m-1]=┌(int)((float)(H[0])/(1+mic_cpu*M)*mic_cpu)┐; 
h[m]=H[0]-h[0]*m; 
对于节点1: 
h[m+1]=h[m+1+1]=…=h[m+1+m-1] 
=┌(int)((float)(H[1])/(1+mic_cpu*M)*mic_cpu)┐; 
h[m+1+m]=H[1]-h[m+1]*m; 
…… 
对于节点N-1: 
h[(m+1)*(N-1)]=h[(m+1)*(N-1)+1]=…=h[(m+1)*(N-1)+m-1] 
=┌(int)((float)(H[N-1])/(1+mic_cpu*m)*mic_cpu)┐; 
h[(m+1)*(N-1)+m]=H[N-1]-h[(m+1)*(N-1)]*m; 
其中,h代表一节点对每个MIC或CPU网格划分每分行的高,m代表每一节点中MIC数目,mic_cpu表示一个MIC与一CPU核网格划分的比例。 
在上述系统实施例中, 
MIC进程模块根据MIC内核数n设卡总线程数为T,则T=t*n,其中,t为MIC可设的线程数,最多可设为4;MIC的所有线程并行进行本节点分配的网格数据中的每一分行网格点的计算,且利用MIC上的向量化处理加速每一分行网格点的计算;同时CPU进程模块中的所有线程也参与该分行网格点的计算;其中,CPU线程控制进行该分行网格点的初始化密度、速度及平衡分布函数,并对分布函数赋值,MIC线程和CPU线程协同对该分行网格点通过碰撞过程求出离散方程f*,通过迁移过程求出下一时刻的分布函数,由分行网格点上的分布函数统计密度和速度,利用统计出的密度值和速度值计算平衡分布函数。 
在上述系统实施例中, 
MIC线程和CPU线程通过内核函数并行计算每一分行网格点的迁移和碰撞的过程,并在MIC上利用协处理器的向量化处理单元对该过程的主体计算部分进行向量化处理;并同样通过多线程采用反弹法、非平衡外推法中的任意一种对网格点的边界进行计算(如图5所示的最高节点的边界和最低节点的边界)。 
在此,将内核函数的伪代码展示如下: 
#pragma omp parallel for private(i,j,k,…)num_threads(T)//T为线程数 
for(i=1;i<NY-1;i++) 
#pragma ivdep//向量化 
for(j=1;j<NX-1;j++) 
k=i*NX+j;//k表示网格的标号 
fr=fr0[k];//0代表上一时层的分布函数 
fe=fe0[k-1]; 
fn=fn0[k-NX]; 
fw=fw0[k+1]; 
fs=fs0[k+NX]; 
fne=fne0[k-NX-1]; 
fnw=fnw0[k-NX+1]; 
fsw=fsw0[k+NX+1]; 
fse=fse0[k+NX-1]; 
/*碰撞过程*/ 
根据迁移后的分布函数fr-fse求宏观量 
根据宏观量求各个方向的平衡分布函数f1,f2,f3,f4,f5,f6,f7,f8; 
根据f1,f2,f3,f4,f5,f6,f7,f8以及迁移后的分布函数fr,fe,fn,fw,fs,fne,fnw,fsw,fsw,fse求碰撞后的分布函数fr1[k],fe1[k],fn1[k],fw1[k],fs1[k],fne1[k],fnw1[k],fsw1[k],fse1[k]。 
由于MIC协处理器有512-bit向量化处理单元,对于for循环的核心计算,循环间没有依赖,并且数据访问连续,满足编译器自动向量化的条件。 
在上述系统实施例中, 
通过按列划分节点间的数据实现节点间的负载均衡,如图4中左部分所 示,即每个节点负责大小为nx*(ny/N)网格的计算; 
通过一块MIC与CPU核计算网格的比例mic_cpu的值实现节点内CPU与MIC设备间的负载均衡,即让CPU和MIC分别先做同样网格大小的一次迭代计算,并统计出各自的计算时间,然后用CPU计算时间除以MIC计算时间,得到mic_cpu的值;根据mic_cpu的值对同一节点内的网格进行数据划分,如图4右部分所示; 
通过采用多线程(OpenMP)的并行方式且线程间采用静态负载均衡以及每个网格点的计算量均衡,实现CPU或MIC设备内的负载均衡。 
由于LES算法中针对的是一个网格的计算,无法采取动态负载均衡的方式,因此,本发明的上述三个层次的负载均衡采用静态负载均衡的设计方案。 
在上述系统实施例中, 
在两个邻近节点P(i+1,j)、P(i,j)中,节点P(i+1,j)的计算域中数据高位H的分布函数传递给节点P(i,j),同时接收从节点P(i,j)的计算域中传递过来的数据低位L的分布函数。 
LES算法根据网格点所在数据区域将网格点数据划分到不同的节点,因此当每个网格点更新本网格点的分布函数并迁移时,各个划分区域中边界网格点的分布函数要传递给邻近的节点。如图6所示;图6中位于两个节点间的数据高位H、数据低位L虚线之间的黑实线将计算域一分为二,而为了在计算中方便该实线迁移的计算,需要邻近节点M(i+1,j)的计算域增加该实线下边的数据低位L,同时需要节点M(i,j)的计算域增加该实线上边的数据高位H;。 
LES算法中,根据网格数据的划分,在对划分的数据边界要做一些特殊的处理,在迁移过程中,每个点的计算需要其周围9个方向的分布函数值,请参见图5,因此,需要在分布函数中多存储1或2行用于下一步时层的计算,并且在每次迭代之后在节点与节点之间、MIC之间进行边界数据的交换。 
由于LES算法中,直接从硬盘上的IO操作很少,只有几个变量,因 此,在此主要针对CPU与MIC之间的IO进行优化。 
在上述系统实施例中, 
在同一个节点上MIC设备之间、MIC与CPU设备之间两个相邻设备E(i,j+1)、E(i,j)中,设备E(i,j+1)的计算域中数据高位H的分布函数传递给设备E(i,j),同时接收从设备E(i,j)的计算域中传递过来的数据低位L的分布函数。 
同一个节点上的设备同样需要数据的传递,如图7所示,传递的方式与节点间的数据传递方式相同。 
在上述系统实施例中, 
在相邻的节点i、节点i+1中,对于节点i只接收节点i+1的数据高位H中的三个方向分布函数fsw、fs、fse的值;对于节点i+1,只接收节点i数据低位L中的三个方向分布函数fnw、fn、fne的值,如图5所示。 
在每次迭代计算之后,相邻节点之间以及相邻的MIC之间要进行边界数据的传递,而每个网格有9个方向的分布函数,然而在内核函数的计算中,并不需要边界上的全部9个方向上的值,只需要3个方向的值即可,如图5所示。 
在上述系统实施例中, 
采用双buffer并采用MIC的异步操作隐藏CPU与MIC之间的数据传输操作。 
在此,双buffer实质上指的是两条流,一条流负责计算,一条流负责数据传输;采用MIC的异步操作对两条流一边进行计算一边进行I/O传输,这样就隐藏了I/O所带来的性能开销。 
本发明每一节点上CPU与MIC协同计算的伪代码如下: 
Step1进行初始化; 
Step2MPI初始化,创建MPI多线程,分配各个节点上的数组; 
Step3在一个多次迭代的循环体内进行MIC和CPU主机的计算,通过processID%(M+1)==M的值来判断。如果是在MIC端,需要进行数据以及变 量的offload传输;同时,相邻节点间进行数据传递(MPI通信); 
Step4将CPU端和MIC端计算的结果返回,最终传给主节点进行汇总,伪代码如下: 
Figure BDA0000466630700000131
主体计算部分 
Figure BDA0000466630700000132
相邻节点间进行数据传递(MPI通信); 
Figure BDA0000466630700000133
//OpenMP多线程 
Figure BDA0000466630700000134
Figure BDA0000466630700000141
MPI:把结果传递给主进程模块(0号进程); 
Figure BDA0000466630700000142
本发明针对上述系统实施例,相应地还提供了基于格子Boltzmann实现协同计算大涡模拟方法实施例,其流程如图8所示,是在进行物理建模,确定计算区域、初始条件以及边界条件后执行的,包括如下步骤: 
110:确定系统内的节点及其进程,将计算区域进行网格划分; 
根据系统内的计算设备确定节点,为每一节点配置MIC进程和CPU进程,选定其中一个进程为主进程; 
根据网格总高和系统内的节点数为每一节点平均划分行高,并根据行高为MIC和CPU划分分行高。 
每个节点的平均划分行高,以及对应节点MIC和CPU的进一步平均划分的分行高如图4所示。 
120:主进程将输入的计算数据广播给各节点; 
130:每一节点的CPU进程进行计算初始化,确定本节点的宏观参量及分布函数; 
140:各节点的MIC进程和CPU进程协同在同一时层采用迁移碰撞求解离散方程,并进行边界处理,完成本节点上宏观参量的计算;同时MIC进程和CPU线程同时与相邻节点的MIC进程或CPU进程进行数据通信; 
在CPU进程的控制下进行MIC进程和CPU进程的协同计算。 
150:由各进程判断计算结果是否收敛,是则执行下一步骤,否则返回步骤140执行; 
160:由主进程将所有节点的计算结果输出。 
主进程将从其它节点接收的计算结果和本节点的计算结果一起输出。 
采用本发明的基于格子Boltzmann实现协同计算大涡模拟系统实施例LES应用案例测试用的软硬件环境如表1所示。 
LES性能采用格子点更新速率(LUPS,Lattice Unit Per Second)统计,常为MLUPS(每秒更新的百万网格数),计算方法采用如下公式: 
P=NX*NY*S/T 
其中NX、NY为网格宽和高,S为流场迭代次数,T为计算时间,P为格子点更新速率。 
表1 
平台 Inspur NF5280M3,2节点
CPU IntelXeonCPU E5-26802.7GHz,双路8核
Memory DDR31333MHz128GB
MIC KNC,61核,1.1GHz,GDDR58GB memory,5.5GT/s
OS Red Hat Enterprise Linux Server release6.1,64bit
驱动 KNCbetaoem-2.1.3653-8-rhel-6.1__
编译器 l_ccompxe_intel64_2013.0.079
测试用例 雷诺数:10000;迭代次数:10000
测试结果如下: 
本发明基于多节点CPU+MIC协同计算LES并行算法,在2个节点、每个节点配置双路CPU和2个MIC的CPU+MIC协同计算平台上,LES并行算法的性能达到1333.43MLUPS(网格大小为8192*8192时)。 
由本发明给出的上述测试结果可以看出,在多节点MIC众核架构平台上,基于格子-Boltzmann算法和CPU+MIC异构并行架构的基础上,可以在较短周期内,较容易地大幅度加速大规模大涡模拟的运算。 
以上说明仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。 

Claims (10)

1.一种基于格子Boltzmann实现协同计算大涡模拟系统,包括N个节点设备,其特征在于,每个节点设备含有一个CPU及其相应的CPU进程模块以及m个微处理器及其相应的m个微处理器进程模块,在所有进程模块中选定一个为主进程模块,所述N和所述m为正整数;其中:
主进程模块,用于将输入的数据广播给系统中的其它进程模块,待全部微处理器进程模块和CPU进程模块完成所有计算任务后,将从所有节点接收的计算结果输出;
微处理器进程模块,用于将输入的数据卸载给相应的微处理器进行计算,同时与相邻节点的微处理器进程模块或CPU进程模块进行数据通信,然后进入下一迭代的计算;
CPU进程模块,用于控制本节点的协同计算,根据CPU的核数为每一CPU核启用相应的线程对分配的部分数据进行计算;同时与相邻节点的微处理器进程模块或CPU进程模块进行数据通信,然后进入下一迭代的计算。
2.按照权利要求1所述的系统,其特征在于,
所述主进程模块通过消息传递接口方式将数据广播给所述其它进程模块;通过所述消息传递接口方式将接收的计算结果输出;
所述微处理器进程模块或CPU进程模块与相邻节点的微处理器进程模块或CPU进程模块通过所述消息传递接口方式进行数据通信。
3.按照权利要求1所述的系统,其特征在于,在进行数据广播之前根据所述系统内的节点数N对流场计算域进行网格划分,根据网格总高为每个节点均分所述总高,得到行高,以及均分所述行高得到每一微处理器和CPU分行的高。
4.按照权利要求1所述的系统,其特征在于,
所述微处理器进程模块根据微处理器内核数n设总线程数为T,则T=t*n,其中,该t是为微处理器设的线程数;所述节点内所有的微处理器线程并行进行本节点分配的网格数据中的每一分行网格点的计算,且利用微处理器上的向量化处理加速所述每一分行网格点的计算;
所述CPU进程模块中的所有线程参与相应分行网格点的计算;其中,CPU线程控制进行该分行网格点的初始化密度、速度及平衡分布函数,并对分布函数赋值,控制所述微处理器线程和所述CPU线程协同对所述分行网格点通过碰撞过程求出离散方程f*,通过迁移过程求出下一时刻的分布函数,由所述分行网格点上的分布函数统计密度和速度,利用统计出的密度值和速度值计算平衡分布函数;对网格点的边界进行计算。
5.按照权利要求4所述的系统,其特征在于,
所述微处理器线程和所述CPU线程通过各自的内核函数并行计算本分行网格点的所述迁移过程和所述碰撞过程,并在微处理器上利用向量化处理单元对该过程的主体计算部分进行向量化处理;同时采用反弹法、非平衡外推法中的任意一种对网格点的边界进行计算。
6.一种适用于如权利要求1所述系统的基于格子Boltzmann实现协同计算大涡模拟的方法,包括:
确定所述系统内的节点及其进程,将计算区域进行网格划分;由选定的主进程将输入的计算数据广播给各节点;
由每一节点的CPU进程进行计算初始化,确定本节点的宏观参量及分布函数,并控制本节点的微处理器进程和CPU线程协同在同一时层采用迁移碰撞求解离散方程,并进行边界处理,完成本节点上宏观参量的计算;微处理器进程和CPU线程同时与相邻节点的微处理器进程或CPU进程进行数据通信;
由主进程输出所有节点的计算结果。
7.按照权利里要求6所述的方法,其特征在于,在所述方法执行前还包括:进行物理建模,确定所述计算区域、初始条件以及边界条件。
8.按照权利要求7所述的方法,其特征在于,所述确定所述系统内的节点及其进程,将计算区域进行网格划分,具体包括:
根据所述系统内的计算设备确定节点,为每一节点配置微处理器进程和CPU进程,选定其中一个进程为所述主进程;
根据所述系统内的节点数N对流场计算域进行网格划分,根据网格总高为每个节点均分所述总高,得到行高,以及均分所述行高得到每一微处理器和CPU分行的高。
9.按照权利要求8所述的方法,其特征在于,所述由每一节点的CPU进程进行计算初始化,确定本节点的宏观参量及分布函数,并控制本节点的MIC进程和CPU线程协同在同一时层采用迁移碰撞求解离散方程,并进行边界处理,完成本节点上宏观参量的计算,具体包括:
所述微处理器进程模块根据微处理器内核数n设总线程数为T,则T=t*n,其中,该t为微处理器可设的线程数;所述CPU进程根据CPU的核数为每一CPU核启用相应的线程;
所述CPU线程对分配的相应分行网格点进行初始化密度、速度及平衡分布函数,并对分布函数赋值,控制所述微处理器线程和所述CPU线程协同对所述分行网格点通过碰撞过程求出离散方程f*,通过迁移过程求出下一时刻的分布函数,由所述分行网格点上的分布函数统计密度和速度,利用统计出的密度值和速度值计算平衡分布函数,利用微处理器上的向量化处理加速所述分行网格点的计算;同时采用反弹法、非平衡外推法中的任意一种对所述分行网格点的边界进行计算。
10.按照权利要求6至9任一项所述的方法,其特征在于,
所述主进程通过消息传递接口方式将数据广播给所述其它进程模块;通过所述消息传递接口方式将接收的计算结果输出;
所述微处理器进程和所述CPU进程与相邻节点的微处理器进程或CPU进程通过所述消息传递接口方式进行数据通信。
CN201410053493.5A 2014-02-17 2014-02-17 基于格子Boltzmann理论实现协同计算大涡模拟系统及方法 Pending CN103778098A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410053493.5A CN103778098A (zh) 2014-02-17 2014-02-17 基于格子Boltzmann理论实现协同计算大涡模拟系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410053493.5A CN103778098A (zh) 2014-02-17 2014-02-17 基于格子Boltzmann理论实现协同计算大涡模拟系统及方法

Publications (1)

Publication Number Publication Date
CN103778098A true CN103778098A (zh) 2014-05-07

Family

ID=50570347

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410053493.5A Pending CN103778098A (zh) 2014-02-17 2014-02-17 基于格子Boltzmann理论实现协同计算大涡模拟系统及方法

Country Status (1)

Country Link
CN (1) CN103778098A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105241911A (zh) * 2015-09-23 2016-01-13 中国石油大学(北京) 基于lbm模拟低场核磁共振分析流体的方法及装置
CN106383961A (zh) * 2016-09-29 2017-02-08 中国南方电网有限责任公司电网技术研究中心 Cpu+mic异构平台下的大涡模拟算法优化处理方法
CN109492235A (zh) * 2017-09-11 2019-03-19 中国石油化工股份有限公司 一种复杂边界微流动的仿真方法及系统
CN110187975A (zh) * 2019-06-04 2019-08-30 成都申威科技有限责任公司 一种基于lbm的处理器节点分配计算方法、存储介质及终端设备
CN110287139A (zh) * 2019-06-13 2019-09-27 深圳大学 Cpu和mic协同计算方法、装置及存储介质
CN112100099A (zh) * 2020-09-28 2020-12-18 湖南长城银河科技有限公司 一种面向多核向量处理器的格子玻尔兹曼优化方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102945295A (zh) * 2012-10-15 2013-02-27 浪潮(北京)电子信息产业有限公司 一种格子玻尔兹曼方法的并行加速方法及系统
CN103324531A (zh) * 2013-06-09 2013-09-25 浪潮电子信息产业股份有限公司 一种基于格子Boltzmann理论CPU/MIC协同计算的大涡模拟方法
US20130317794A1 (en) * 2006-07-14 2013-11-28 Exa Corporation Cascaded Eddy Simulation

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130317794A1 (en) * 2006-07-14 2013-11-28 Exa Corporation Cascaded Eddy Simulation
CN102945295A (zh) * 2012-10-15 2013-02-27 浪潮(北京)电子信息产业有限公司 一种格子玻尔兹曼方法的并行加速方法及系统
CN103324531A (zh) * 2013-06-09 2013-09-25 浪潮电子信息产业股份有限公司 一种基于格子Boltzmann理论CPU/MIC协同计算的大涡模拟方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
吴宏 等: "基于格子Boltzmann方法的方通道湍流的大涡模拟", 《航空动力学报》 *
王恩东 等: "《MIC高性能计算编程指南》", 30 November 2012, 中国水利水电出版社 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105241911A (zh) * 2015-09-23 2016-01-13 中国石油大学(北京) 基于lbm模拟低场核磁共振分析流体的方法及装置
CN105241911B (zh) * 2015-09-23 2017-07-21 中国石油大学(北京) 基于lbm模拟低场核磁共振分析流体的方法及装置
CN106383961A (zh) * 2016-09-29 2017-02-08 中国南方电网有限责任公司电网技术研究中心 Cpu+mic异构平台下的大涡模拟算法优化处理方法
CN106383961B (zh) * 2016-09-29 2019-07-19 中国南方电网有限责任公司电网技术研究中心 Cpu+mic异构平台下的大涡模拟算法优化处理方法
CN109492235A (zh) * 2017-09-11 2019-03-19 中国石油化工股份有限公司 一种复杂边界微流动的仿真方法及系统
CN110187975A (zh) * 2019-06-04 2019-08-30 成都申威科技有限责任公司 一种基于lbm的处理器节点分配计算方法、存储介质及终端设备
CN110287139A (zh) * 2019-06-13 2019-09-27 深圳大学 Cpu和mic协同计算方法、装置及存储介质
CN112100099A (zh) * 2020-09-28 2020-12-18 湖南长城银河科技有限公司 一种面向多核向量处理器的格子玻尔兹曼优化方法

Similar Documents

Publication Publication Date Title
CN103778098A (zh) 基于格子Boltzmann理论实现协同计算大涡模拟系统及方法
Shimokawabe et al. An 80-fold speedup, 15.0 TFlops full GPU acceleration of non-hydrostatic weather model ASUCA production code
Rahimian et al. Petascale direct numerical simulation of blood flow on 200k cores and heterogeneous architectures
Rinaldi et al. A Lattice-Boltzmann solver for 3D fluid simulation on GPU
Pugmire et al. Scalable computation of streamlines on very large datasets
Pohl et al. Performance evaluation of parallel large-scale lattice Boltzmann applications on three supercomputing architectures
CN103324531A (zh) 一种基于格子Boltzmann理论CPU/MIC协同计算的大涡模拟方法
CN102681972A (zh) 一种利用GPU加速格子-Boltzmann的方法
CN103064819A (zh) 一种利用MIC快速实现格子Boltzmann并行加速的方法
Vanka 2012 Freeman scholar lecture: computational fluid dynamics on graphics processing units
Obrecht et al. The TheLMA project: Multi-GPU implementation of the lattice Boltzmann method
Verma et al. AMulti-GPU PCISPH Implementation with Efficient Memory Transfers
Biferale et al. Optimization of multi-phase compressible lattice Boltzmann codes on massively parallel multi-core systems
Lo et al. Development of parallel direct simulation Monte Carlo method using a cut-cell Cartesian grid on a single graphics processor
Al-Hashimi et al. Evaluating power and energy efficiency of bitonic mergesort on graphics processing unit
Hoekstra et al. New computational techniques to simulate Light Scattering from arbitrary particles
Oyarzun et al. Direct numerical simulation of incompressible flows on unstructured meshes using hybrid CPU/GPU supercomputers
Ozog et al. A performance analysis of SIMD algorithms for Monte Carlo simulations of nuclear reactor cores
Feichtinger et al. WaLBerla: Exploiting massively parallel systems for lattice Boltzmann simulations
CN104679953B (zh) 户内变电站主变室流场温度场数值模拟快速计算方法、系统
Oriato et al. Dataflow computing in extreme performance conditions
Biferale et al. Lattice Boltzmann method simulations on massively parallel multi-core architectures
Li et al. Spectral simulations of wall-bounded flows on massively-parallel computers
Rouson et al. Performance portability of an intermediate-complexity atmospheric research model in coarray Fortran
Carter et al. Performance evaluation of scientific applications on modern parallel vector systems

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20140507