Bo Zhang's Homepage
..The universe is unfolding as it should..

2015-2-26

FLASH Code傲娇记之后续篇

归档于: 天文空间科学, 天文软件 @ 6:58 pm

就在上个月,本人在站里中狠狠地吐了一顿FLASH配置过程的槽。随后本人将主要精力投入了代码结构和算法的学习中,其运行环境被暂时放到了一边。本以为就这样放弃了在自己的计算机上折腾这套代码的念头,待学成后直接换用服务器就是。不过经台里的J老师牵线,在天津大学软件学院的X老师的帮助下,前两天将FLASH的配置问题大体解决,遂有傲娇记之后续。

如前文所述,FLASH的抽风表现有二,一是并行运算所需的MPI环境时好时坏状态不稳定,二是驱动脚本setup.py执行时报错。一开始还以为这两点是相关的,其实不然,要一码归一码,逐一解决才是。

第二点相对较容易处理,只是因为本人当时对Python了语言解不足,未能认识到问题的本质。这个问题的表现如下:

FLASH的官方使用手册只说明了需要配备Python 2.2或者更高的版本,但是不知道是因为编写者的疏忽还是什么其他原因,手册中忽略了版本号的上限。根据X老师的说法,Python 3之后发生了较大变动,对脚本语法的要求愈发严格。Python的语句块是通过句首缩进来识别的,早期版本的缩进方式不限,Tab或者空格均可,但Python 3以及后续版本的向下兼容性不佳,缩进方式绝不可以混用。FLASH的驱动脚本主体写成于Python 3问世之前,对不得混用的要求自然无视,在高版本Python环境下运行就难免会面临奇怪的麻烦。

你以为遵照上图中的报错修改缩进就能解决问题了?没有那么简单。修改66行之后脚本还会卡在129行,重新缩进之后还能报称打印语句出错,各种莫名其妙。不管怎么说,擅自变更驱动脚本也不是什么好办法,要从根子上解决问题,还得考察运行环境的版本。

为什么./setup起初的运行并无障碍?这要追溯到本人和Z师弟在MPI配置过程中的病急乱投医了。期间除了MPICH2、OpenMPI以及Intel等若干并行运算包,本人还稀里糊涂地安装了基于Python的科学计算包Anaconda。Anaconda自带高版本Python一套,系统原本的Python环境就这样被排挤了出去:

而原有的Python是2.6.5版,现在还躺在/usr/bin/目录下等待解救……

问题的解决倒也不难,只要修改家目录下.bashrc文件中的环境变量PATH,将Anaconda的优先级降低(相当于将Python 2.6.5的优先级提升)就好:

export PATH=$PATH:/home/bzhang/anaconda3/bin

完事之后,执行which以及python命令后看到以下结果就算大功告成了:

MPI环境的调整相对棘手些,不过对于行家来说也算不得什么难事。让我们先来回顾一下其表现:

鉴于报错涉及gethostbyname_ex,与主机名相关,首先修改的是/etc/文件夹下的IP设置文件hosts,在其中添加如下内容,将主机名与本地IP绑定:

127.0.0.1   Melipal

本人也不能确定这处修改对问题的最终解决有无帮助,不过还是在此记上一笔。接下来要解决的是MPI守护进程MPD的启动。麻烦还是出在各并行运算包之间的冲突上。之前虽然将mpirun等命令与MPICH2绑定,但是工作没有做彻底,MPD到最后还是要调用Intel并行包,难怪出现不匹配。

在本人的计算机上,Intel的并行包安装在/opt/intel/文件夹下。最直接的方法当然是将相关程序删除了事。但考虑作为命根子的Fortran语言编译器ifort也被放在了同一文件夹内,不敢妄动。Intel并行包的路径设置也相对复杂,只能确定与安装目录/opt/intel/composer_xe_2013.0.079/mpirt/bin/ia32/下的mpivars.sh文件有关,但仅仅修改该文件也还是不够的。于是依然简单粗暴,再次打开家目录下的.bashrc文件,在其中加上如下两行:

alias mpd=”/usr/share/mpich2/mpd.py”
source /opt/intel/composer_xe_2013.0.079/bin/compilervars.sh ia32

同时也要修改环境变量,提升MPICH2相应路径的优先级:

export PATH=/usr/bin:usr/share/mpich2:$PATH:/home/bzhang/anaconda3/bin

再echo一下:

到这里问题就基本得到解决了。只有一点,每次执行并行运算之前,都需要手工启动MPD:

mpd

这个MPD进程说来也奇怪,Ctrl+C等通常用于结束进程的方式对它是无效的,只能通过kill命令这个大杀器来终结。而且MPD调用的也是一个Python脚本(/usr/share/mpich2/mpd.py),因此在系统监视器中它是以Python的面目示人的,乍看之下还真不大好认。

另外并行环境的问题解决归解决,但运行FLASH生成的可执行文件期间出现了终端输出数据显示的滞后,原因不明。虽说这并不影响使用,看上去却不是很爽快。好吧,跟之前遇到的麻烦相比,这些都已经不算事了,要求不可以太高……

于是教训也有两点,一是程序版本不可一昧求新,二是不要出现问题就手忙脚乱各种软件包瞎装一气,还是要以官方为参照。既然使用手册推荐MPICH2,那么老老实实地认准它就是了。虽然Intel的并行包环境完善,OpenMPI可能运行速度更快,但天知道这些会不会带来不可预知的麻烦。比如OpenMPI跟FLASH用来求解扩散和辐射转移问题的HYPRE据说就不太兼容,从代码层面上也找不出原因所在。

另外还要做好日后求解复杂问题时的心理准备。X老师称,对于规模较大的三维问题来说,调用200个处理器也还是远远不够的,而且往往是在运算初始化细分网格的时候就不够了,除非你不计分辨率。这样看来,三维模拟所需的资源非同小可,今后真的要探讨合作导师打算研究的问题的话,莫非要去科学院的信息中心租用机时么?(就不吐槽某某超算中心的某某某号主机对FLASH伺候不能了,嗯嗯。)

不过这下子好歹是可以在自己的计算机上跑一跑需要优先求解的激波问题,做一做各种恶趣味实验了。那谁谁和谁谁谁,给我找几组翼型数据来吹吹风洞先!

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

首页 | 天文 | 科学 | 摄影 | 模型 | CV | 版权声明 | 联系站长
京ICP备05002854号-2 Powered by WordPress Version 2.0.6
Licensed under Creative Commons Licenses

porno izle