最近在CAMx的编译运行工作中,遇到了几个小问题,在此记录一下。
问题1:CAMx2IOAPI编译报错
报错如下:
CAMx2IOAPI依赖于IOAPI和NetCDF库,在Makefile文件中加以配置即可,但出现此错的原因其实是默认的Makefile有一个bug,LIB里面缺少了Fortran版的NetCDF引入,加上重新编译即可,这个坑也是在报错后仔细查找才发现的,所以默认的设置也需要检查一下。
问题2:CAMx运行速度慢
跑了一个业务上的三层嵌套预报,发现速度慢的离谱,仅预报24小时第一层就要花40分钟左右,而之前的CAMx用更少的核心却只需要不到2分钟即可跑完,痛苦几小时(检查脚本、重新编译支持OpenMPI的camx.exe、翻UG查参数等等)后,只能请教了师兄,最终才解决了这个问题。
以前的CAMx:
原因:
我开启了多线程,OMP个数设为4,使用了4个满核心节点(每节点64核),导致实际上每个计算节点就有了4*64=256个线程,造成计算资源抢占,从而减缓了计算速度。在开启4线程的情况下,将PPN设为16,即可解决。
改进后的结果:
这里附带了一个经验,即改进后耗时5分半,与原来的也出入较大,除了超算服务器本身的硬件性能差异外,发现了积分步长有所差别,原来的是420s,这里的是400s:
想着能不能修改一下这个步长,经过查找官方FAQ后发现这个步长是CAMx为了保证各个环节计算稳定而自动计算的:
但是,从前辈那里得知,可以修改CAMx.in中的最大时间步长(Maximum_Timestep)。我理解修改这个参数的效果是,如果计算出来的时间步长比Maximum_Timestep大,那理论上增加最大时间步长可以提高速度,反之则无变化。
问题3:vi界面ctrl+s卡死
在问题2出现后检查脚本时,使用vi编辑脚本,保存时脑子一抽风按了组合键ctrl+s,之后任何操作都没了反应,还以为又是Xshell断开连接了,但是他又不断,一波未平一波又起,又不能叉掉界面。于是无奈谷歌了一下,发现这是处于假死的状态,其实ctrl+s是linux系统命令行模式下的锁屏快捷键,只是输入的命令没有在输出终端(显示器)显示出来而已。所以,不止vim,只要在命令行模式下,都会如此。要退出此种锁屏界面,需按ctrl+q,此时会发现先前在锁屏时输入的字符都显示出来了,并且可正常使用了。因此,当不注意或者不小心按下ctrl+s时,还真不能乱敲键盘,以免不小心输入破坏性命令,否则麻烦大了!(如果是在vi/vim下,解锁后按下esc键,再多按几次u键回退到锁屏前的版本即可)
该问题解决方法参考博客:
https://blog.csdn.net/weixin_45590473/article/details/123289547
本人独自运营了微信公众号,用于分享个人学习及工作生活趣事,大家可以关注一波。(微信搜索“微思研”)