Felac并行程序架构
目录 并行环境 Felac并行程序架构 Felac并行计算后处理分析 Felac并行程序架构与Pfepg对比 Felac并行计算超大规模问题 硬件环境 软件环境 Felac并行程序架构 主进程程序架构 从进程程序架构 Felac并行计算后处理分析 Felac并行程序架构与Pfepg对比 Felac并行计算超大规模问题
并行环境 硬件环境 并行计算机体系结构 对称多处理机(SMP) 每个处理器可等同地访问共享存储器、I/O设备和操作系统服务; 优点:可开拓较高的并行度,使用简单,维护方便; 缺点:因为共享存储,所以限制了系统中处理器的数目(一般少于64个),同时总线和交叉开关一旦作成也难于扩展; 并行编程方式:通常采用OpenMP,也可使用消息传递(MPI/PVM)及HPF 代表机型:SGI Power Challenge、DEC Alpha 服务器 8400、曙光1号等;
大规模并行处理机(MPP) 对称多处理机(SMP) MPP一般是指超大型计算机系统,处理节点采用商品微处理器;系统中有物理上的分布存储器;采用高通信带宽和低延迟的互联网络;能扩放至成百上千乃至上万个处理器;是一种异步的MIMD机器,程序由多个进程组成,每个都有其私有的地址空间,进程间采用消息传递相互作用。 MPP主要用于科学计算、工程模拟和信号处理等以计算为主的领域。 代表机型:Intel Paragon IBM SP2、Intel TFLOPS、曙光-1000。 P/C ... 总线或交叉开关 SM
并行环境 分布共性存储多处理机(DSM) MB P/C ... LM NIC 定制网络 DSM在物理上有分布在各个节点中的局存,从而形成了一个共享的存储器。系统硬件和软件提供了一个单地址的编程空间。DSM比MPP来编程更加容易。 代表机型:Standford DASH、Cray T3D和SGI/Cray Origin 2000;
并行环境 软件环境 MB P/C ... LM DIR NIC 定制网络 Linux系统:RedHat, Debian, SuSE, Mandrake,… 编译系统:gcc/gfortran,icc,ifort… MPI系统:MPICH, LAM-MPI,MVAPICH,IMPI… 数学库:BLAS, LAPACH。。。。
Felac并行程序架构 包含文件有:并行 程序C代码、mat材 料参数文件、time0 时间控制文件、 Felac并行计算操作流程 Makefile和前处理数据 项目名.gid文件夹, 其包含文件为 项目名.dat ,partition.dat Felac并行计算操作流程 PC机生成串行程序 启动GId前处理 生成并行代码到目录下文件夹“项目名.mpi” 把生成的文件夹“项目名.mpi”上传到并行机 make编译链接 运行mpirun命令提交计算任务 把结果文件下载到PC机 打开GID后处理合并计算结果查看
Felac并行程序架构 主程序 主进程 从进程 gidpre spart mpartition spre sgetpart mgetpart mpi_m2s spre sgetpart 从进程 starta etesta ssolv utesta gidres 程序结束 Felac并行程序流程, 并行固有程序, 并行不同于串行程序, 与串行程序一致程序
Felac并行程序架构 主进程程序架构 void masterp(void) { gidpre(); mpartition(coor0,elema); mgetpart(coor0,dofa,ida,ubfa,elema,unoda,maplga,imaplga,inita); mpi_m2s(); } gidpre:与串行程序一致,读入前处理数据,包括:网格信息、单元信息、初值信息、边值信息等; 注意,与串行不同的是,在gidpre中的体单元类型数nbdetype,将会在mpartition分区程序中用到,所以在gidpre中生成该常数,并保证其正确性。当遇到问题是要查看是否生成的体单元类型数,与实际一致。
Felac并行程序架构 主进程程序架构 Mpartition:并行固有程序,主要功能是网格节点分区,并在此基础上构建逻辑单元区域、体单元分区及相邻进程信息; Mpartition程序分区过程 mgetpart:并行固有程序,主要功能是场信息分区,与场相关的信息按照mpartition分区的节点构建每个分区的边界单元、边值、初值信息和方程号信息,并发送到每个子进程;
Felac并行程序架构 主进程程序架构 mpi_m2s程序是协调并行求解器的程序,因为求解器时一个整个通信域的SIMD程序,所以主进程需要在从进程计算求解调用求解器程序时,相应的调用求解器接口程序以达到整个程序的同步性。
Felac并行程序架构 从进程程序架构 void slavep(int iblk) { spart(&coor0); spre(); sgetpart(coor0,dofa,&ida,&ubfa,&elema,unoda,&maplga,&imaplga,inita); starta(coor0,dofa,ida,elema,&matrixa,&fa); etesta(coor0,dofa,ida,ubfa,elema,matrixa,fa,1); mpi_sendms(1); ssolv(matrixa,fa,maplga,imaplga); utesta(coor0,dofa,ida,ubfa,fa); etestb(coor0,dofb,elema); gidres(coor0); mpi_sendms(-1); }
Felac并行程序架构 从进程程序架构 亮色部分为并行程序在串行程序的基础上添加的程序,各程序功能如下所述: spart:接收主进程Mpartition程序发送的坐标信息和相邻进程信息; spre:改程序是生成各场初值个数、自由度数; sgetpart:接收主进程Mgetpart发送的场信息,包括单元信息、初值信息、边值信息和方程号等; mpi_sendms:第一处在solv之前是发送求解器调用标志到主进程;第二处发送-1到主进程是发送程序结束标志到主进程; starta、etesta、utesta、etestb程序沿用串行程序; ssolv:求解器程序调用并行求解器,与串行程序不同; gidres:程序由于要输出整体节点编号对应的网格信息及结果信息,与串行程序有微小的差别;
Felac并行计算后处理分析 Felac并行程序后处理输出结果为各个分区结果:比如项目名为test,分3个分区计算,则生成的后处理结果为: test1.post.msh、test2.post.msh、test3.post.msh test1.post.res、test2.post.res、test3.post.res 通过GID软件的merge功能将三个分区结果合并到一起查看后处理结果,具体算例请查看文档“Felac并行计算流程说明文档.doc”。
Felac并行程序架构与Pfepg对比 Felac并行程序相当对于Pfepg来说,主要有一下几点: C语言的稳定性和可维护性比Fortran版本更好; 主程序的固定模式比Pfepg对于不同问题需要自动生成主程序流程更加简单; Felac版本加入小函数来控制非线性问题,比起pfepg的发送接收,更加简单通用; Felac版本基于点点通信比起Pfepg的主从通信来效率会更高; Felac版本省去了从进程到主进程发送结果信息的流程,时间上更少; Felac版本输出结果是各个分区结果,不再汇总到主进程; 并行计算流程更加简单,不再需要数据转换,前处理转换,后处理转换等一些列操作,源代码上传到服务器后,只需要编译运行即可;
Felac并行计算超大规模问题 未经超大规模测试 当进行大规模测试时,需要注意问题如下: 头文件中宏定义常数需要根据问题规模设置其大小maxt; maxt在并行中的分区程序中用到,开辟的是节点拓扑单元节点总数的规模,这个数的不好推算,尤其是在划分非结构化网格的时候会随着一个节点的共用单元数的增大而增大,所以需要用户去试探推算。 在inimpi程序中需要将数组msid的大小根据需要适当增大,当前仅适用于2048个进程的并行计算,当进程数达到更大时需要将此数组增大,同时修改messagetag的统计大小,避免出现messagetag重复的现象; 此外,当进行超大规模计算时,经常会出现通信死锁的现象,用户需要根据需要去修改通信模式为非阻碍通信,具体代码可参考交大大规模测试程序。对于大数据发送可以通过分块发送的模式,避免缓存拥堵现象的发生。