流场可视化工程dlb-dynamicdr部署日志:阶段五:实验室服务器程序运行

2022-03-03

当前环境:

运行(阶段一:Init部分)

先对Init部分进行测试,该部分主要是对nc文件进行读取以及初始化MPI参数。可以对照之前的读代码日志进行分析推进。

整理好数据,配置文件如下:

<config repartition="1" trace_depth="2"
  num_blocks_per_proc="16" num_total_blocks="32768"
  num_time_blocks="1">
</config>

<dataset name="nek" file_format="NC_RECTILINEAR">
  <run run_id="0" directory="/home/tianrui.cui/data" pattern="nek5000.nc" />
  <dimension name="x" storage_order="1" size="512" blt_size="16"/>
  <dimension name="y" storage_order="2" size="512" blt_size="16"/>
  <dimension name="z" storage_order="3" size="512" blt_size="16"/>
  <variable name="U" data_type="FLOAT32" />
  <variable name="V" data_type="FLOAT32" />
  <variable name="W" data_type="FLOAT32" />
</dataset>

运行,可以正确输出打印信息:

================ INIT ============== 
data: nek
n_procs=4.
repartition, trace_depth=2
using per process blocks 16.
dims=3, dim_size=[512, 512, 512, 1], blt_size=[128, 128, 128, 1], divisions=[4, 4, 4, 1]
num_cells=64, num_cells3d=64, time_groups=1
====================================  

初始报错信息如下:

[array:25421] *** An error occurred in MPI_Info_dup
[array:25421] *** reported by process [2403205121,3]
[array:25421] *** on communicator MPI_COMM_WORLD
[array:25421] *** MPI_ERR_INFO: invalid info object
[array:25421] *** MPI_ERRORS_ARE_FATAL (processes in this communicator will now abort,
[array:25421] ***    and potentially your MPI job) 

步步推进打印调试信息发现出错的位置是load_time_interval()函数中条件分支语句错误,文件名是nek而错写为nek5000,修改判断语句的字符串后继续run,报错如下:

[PNetCDF Error] Specified netCDF file does not exist., in file '/home/tianrui.cui/dlb-dynamicdr-local-compiled/bil/bil_pio.c', line 191.

说明没有读取到NetCDF文件,出现错误的位点应该在:

    std::vector<std::string> filenames;
    filenames.push_back("/projects/SDAV/jiangz/nek5000/U.nc");
    filenames.push_back("/projects/SDAV/jiangz/nek5000/V.nc");
    filenames.push_back("/projects/SDAV/jiangz/nek5000/W.nc");

推测这里的位点找不到数据文件,所以导致读取失败,从超算服务器上导入文件。。。。。。
将地址修改为如下位置读取:

    std::vector<std::string> filenames;
    filenames.push_back("/home/tianrui.cui/data/nek5000/U.nc");
    filenames.push_back("/home/tianrui.cui/data/nek5000/V.nc");
    filenames.push_back("/home/tianrui.cui/data/nek5000/W.nc");

2022-03-04

阶段一(总)

重新运行如下:

[array:04367] *** An error occurred in MPI_Info_dup
[array:04367] *** reported by process [4252041217,2]
[array:05202] *** MPI_ERR_INFO: invalid info object
[array:05202] *** MPI_ERRORS_ARE_FATAL (processes in this communicator will now abort,
[array:05202] ***    and potentially your MPI job) 

又开始报这个错误,说明文件读取是成功的?继续尝试打印寻找错误位点:发现问题还是在读取函数中:blocking_read_nek5000()函数,进入进行查看。定位BIL_Add_block_nc()函数执行正常,那么出错的函数一定是BIL_Read()函数。如果还是这个出错,那么就有理由怀疑还是没有读取到数据文件,或者数据文件出错“invalid info object”。

这里想到一个问题,是否是因为没有安装正确版本的MPI导致这些报错?尝试安装指定版本的MPICH3.1.3

MPICH重新部署

步骤如下:

$ cd /home/tianrui.cui/dlb-lib/MPI/MPICH
$ mkdir server_installed
$ tar -zxvf mpich-3.1.3.tar.gz
$ cd mpich-3.1.3
$ mkdir build 
$ cd build
$  ../configure --prefix=/home/tianrui.cui/dlb-lib/MPI/MPICH/server_installed/
# 等待一分钟
$ make 
# 等待几分钟
$ make install
# 等待几秒钟

成功编译安装

在.bashrc中添加环境变量:

# NetCDF

export NETCDF_ROOT=$CTR_CPP_LIB_ROOT/NetCDF/server_installed

# pure C

export PATH=$PATH:$NETCDF_ROOT/C/bin 
export C_PATH=$C_PATH:$NETCDF_ROOT/C/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$NETCDF_ROOT/C/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:$NETCDF_ROOT/C/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NETCDF_ROOT/C/lib 
export LIBRARY_PATH=$LIBRARY_PATH:$NETCDF_ROOT/C/lib 

source使其生效

对MPI完成编译之后还要对使用MPI编译的库进行重新生成:

Parallel_NetCDF 重新生成

仅给出目标根目录如下,不再进行详细过程阐述,记得修改.bashrc:

$ cd /home/tianrui.cui/dlb-lib/Parallel_NetCDF/MPICH_installed

ParMETIS 重新生成

仅给出目标根目录如下,不再进行详细过程阐述,记得修改.bashrc,记得要安装静态库和动态库共两次!:

$ cd /home/tianrui.cui/dlb-lib/ParMETIS/MPICH_installed

make

问题记录:

目前重装MPICH之后发现CMake的gcc被重新定向到了gcc 4.1.2 的老版本?!导致C++11 标准不可用,重新编译失败。具体为何不清楚,目前解决方案是可否重新安装一次CMake。

实际不用,发现问题如下:

上一次在指定GCC的时候添加了环境变量CC与CXX,但这次重新开机后CC和CXX变量不知为何消失了,只需在环境变量中加入如下即可:

export CC=/opt/gcc-4.8.5/bin/gcc
export CXX=/opt/gcc-4.8.5/bin/g++

重新编译发现监测到的GNU版本恢复正常:

-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5

使用MPICH版本仍然报错,如下:

../libbil.a(bil.c.o): In function `BIL_Set_io_hints':
bil.c:(.text+0x33a): undefined reference to `ompi_mpi_info_null'
bil.c:(.text+0x357): undefined reference to `ompi_mpi_info_null'
../libbil.a(bil.c.o): In function `BIL_Init':
bil.c:(.text+0x468): undefined reference to `ompi_mpi_byte'
bil.c:(.text+0x4a7): undefined reference to `ompi_mpi_info_null'
../libbil.a(bil_pio.c.o): In function `BIL_Pio_nc_to_mpi_type':
bil_pio.c:(.text+0x22b): undefined reference to `ompi_mpi_byte'

很多关于ompi的参数找不到,看来只能使用OpenMPI进行编译,但这个与之前在绵阳超算上部署的版本不符(之前使用的是MPICH)

阶段二(总)

接以上,定位到问题点BIL_Read()函数。

进一步定位到BIL_Pio_read_raw_blocks(),在bil_pio.c文件中。

进一步定位到MPI_File_open(),在bil_pio.c文件中。

发现没有进入BIL_Pio_read_raw_blocks()函数,而应该进入了BIL_Pio_read_nc_blocks()函数,重新定位错误到此。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值