CESM2.x 和 CLM5.0 多线程模拟

8 篇文章 7 订阅


动机

刚开始使用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

解决方案

  1. 运行这行代码(不知道啥意思,反正问题解决了)
    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运行状态结果
在这里插入图片描述

结语

笔记就写到这里了,愿大家不要再想我这样子再走弯路。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值