动机
刚开始使用CESM,使用多核 即 ntasks的时候,报错了,就一直没管,因为单核能运行,并且我是刚使用这个模型,还有更重要的事情需要解决。现在其他问题解决的差不多了,就重新来看这个问题,百度、bing、google了一大通,算是解决了。今天写此博文来记录笔记。 提示:以下是本篇文章正文内容,案例可供参考正文
出现的问题
Fatal error in PMPI_Scatterv: Other MPI error, error stack:
PMPI_Scatterv(655)..............: MPI_Scatterv(sbuf=0x150932a13a80, scnts=0x7fffb0493860, displs=0x7fffb0493850, MPI_DOUBLE_PRECISION, rbuf=0x150932971380, rcount=18480, MPI_DOUBLE_PRECISION, root=0, comm=0xc4000000) failed
MPIR_Scatterv_impl(205).........: fail failed
I_MPIR_Scatterv_intra(265)......: Failure during collective
I_MPIR_Scatterv_intra(259)......: fail failed
MPIR_Scatterv(141)..............: fail failed
MPIC_Recv(419)..................: fail failed
MPIC_Wait(270)..................: fail failed
PMPIDI_CH3I_Progress(623).......: fail failed
pkt_RTS_handler(317)............: fail failed
do_cts(662).....................: fail failed
MPID_nem_lmt_dcp_start_recv(302): fail failed
dcp_recv(165)...................: Internal MPI error! Cannot read from remote process
解决方案
- 运行这行代码(不知道啥意思,反正问题解决了)
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
2) 添加环境变量
I_MPI_SHM_LMT=shm
(如果直接加入到 ~/.bashrc 的话,每次打开 terminal 直接就可以使其产生作用;如果自定义了一个环境变量,如~/.bash_pr,则添加后需要 source ~/.bash_pr)
3) $ sudo vim /etc/sysctl.d/10-ptrace.conf
将最后一行 kernel.yama.ptrace_scope = 1 改成 kernel.yama.ptrace_scope = 0
三种方法,都试一试吧,一般可以解决
分配 内核
看到别 ”一株草的世界“的博文,然后又对照 CESM1.1.2的user guide 文档,对物理核心及任务进行了分配。
由于 LND ATM OCN 需要的任务量大,所以对分配的核心更多;其他的模块有些没有使用,有些需要的任务量小,所以少分配一些内核(线程)。我的电脑共64核,所以尽量合理分配,以下是我的分配方案。
# 设置多核并行 共调用 2*1*2(ESP IAC) + 4*2*2 + 2*3(cpl) + 4*3 *3(atm lnd ocn) = 62 核
./xmlchange NTASKS=2
./xmlchange NTASKS_PER_INST=2
./xmlchange NTASKS_PER_INST_CPL=3 # cpl 2*3=6
./xmlchange NTASKS_ATM=4
./xmlchange NTASKS_PER_INST_ATM=3 # atm 4*3=12
./xmlchange NTASKS_LND=4
./xmlchange NTASKS_PER_INST_LND=3 # lnd 4*3=12
./xmlchange NTASKS_OCN=4
./xmlchange NTASKS_PER_INST_OCN=3 # ocn 4*3=12
./xmlchange NTASKS_ESP=1
./xmlchange NTASKS_IAC=1
#修改 laylout 避免使用的cpu核心重叠
./xmlchange ROOTPE_ATM=0
./xmlchange ROOTPE_CPL=12
./xmlchange ROOTPE_OCN=18
./xmlchange ROOTPE_WAV=30
./xmlchange ROOTPE_GLC=34
./xmlchange ROOTPE_ICE=38
./xmlchange ROOTPE_ROF=42
./xmlchange ROOTPE_LND=46
./xmlchange ROOTPE_ESP=58
./xmlchange ROOTPE_IAC=60
注意
设置 ROOTPE 是非常重要的,否则会 默认的 0 会出现 cpu核心重叠,最终调用的 tasks 不足 61个。大家可以对比设置 和 不设置 ROOTPE 的差别。
./preview_run 查看 cpu核心 结果
./case.submit 后查看 cpu运行状态结果
结语
笔记就写到这里了,愿大家不要再想我这样子再走弯路。