24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2155  |  回复: 1

souledge

专家顾问 (著名写手)

[求助] 用MPIF90编译后的Siesta并行出错,串行没事……

近来做CEM计算,发现VASP和PWscf的效率在大团簇时很纠结,所以考虑用速度更快的Siesta来跑~没想到……
下载的是3.1版的Siesta,系统为CentOS 6.2 x86_64,Fortran和C的编译器分别是:
CODE:
ifort (IFORT) 12.1.2 20111128
icc (ICC) 12.1.2 20111128
Copyright (C) 1985-2011 Intel Corporation.  All rights reserved.

并且使用MPICH2的最新稳定版mpich2 1.4.1p1,使用ifort和icc编译的。
编译的arch.make文件如下:
CODE:
.SUFFIXES:
.SUFFIXES: .f .F .o .a .f90 .F90

SIESTA_ARCH=x86_64-unknown-linux-gnu--Intel

FPP=
FPP_OUTPUT=
FC=mpif90
RANLIB=ranlib

SYS=nag

SP_KIND=4
DP_KIND=8
KINDS=$(SP_KIND) $(DP_KIND)

FFLAGS=-O2  
FPPFLAGS= -DMPI -DFC_HAVE_FLUSH -DFC_HAVE_ABORT
LDFLAGS=-static

ARFLAGS_EXTRA=

FCFLAGS_fixed_f=
FCFLAGS_free_f90=
FPPFLAGS_fixed_F=
FPPFLAGS_free_F90=

BLAS_LIBS=-L/opt/intel/mkl/lib/intel64/ -lmkl_intel_lp64 -lmkl_core -lmkl_sequential -lmkl_blas95_lp64
LAPACK_LIBS=-lmkl_lapack95_lp64
BLACS_LIBS=-lmkl_blacs_lp64
SCALAPACK_LIBS=-lmkl_scalapack_lp64

COMP_LIBS=

NETCDF_LIBS=
NETCDF_INTERFACE=

LIBS=$(SCALAPACK_LIBS) $(BLACS_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS) $(NETCDF_LIBS)

#SIESTA needs an F90 interface to MPI
#This will give you SIESTA's own implementation
#If your compiler vendor offers an alternative, you may change
#to it here.
MPI_INTERFACE=libmpi_f90.a
MPI_INCLUDE=/home/dorm/ProgramFiles/MPICH/include

#Dependency rules are created by autoconf according to whether
#discrete preprocessing is necessary or not.
.F.o:
        $(FC) -c $(FFLAGS) $(INCFLAGS) $(FPPFLAGS) $(FPPFLAGS_fixed_F)  $<
.F90.o:
        $(FC) -c $(FFLAGS) $(INCFLAGS) $(FPPFLAGS) $(FPPFLAGS_free_F90) $<
.f.o:
        $(FC) -c $(FFLAGS) $(INCFLAGS) $(FCFLAGS_fixed_f)  $<
.f90.o:
        $(FC) -c $(FFLAGS) $(INCFLAGS) $(FCFLAGS_free_f90)  $<

编译顺利通过。但是计算自带的例子MgO时,会在初始化计算时出错,出错内容是:
CODE:
* Maximum dynamic memory allocated =    13 MB
Fatal error in PMPI_Comm_size: Invalid communicator, error stack:
PMPI_Comm_size(111): MPI_Comm_size(comm=0x5b, size=0xc20c2c) failed
PMPI_Comm_size(69).: Invalid communicator
Fatal error in PMPI_Comm_size: Invalid communicator, error stack:
PMPI_Comm_size(111): MPI_Comm_size(comm=0x5b, size=0xc20c2c) failed
PMPI_Comm_size(69).: Invalid communicator

看起来是MPI的几个进程之间通信有问题。
由于电脑有8GB内存,并且只测试了双核并行,而且同时并行测试PWscf,VASP,Abinit都运行良好,说明MPICH2本身使用没有问题。
那么只能是编译Siesta时,并行并没有处理好。
看到2年前在Siesta的Mail list里有人有相同的问题,但是最后也没人给出个很明确的答复来……
测试了一下用自带的BLAS和LAPACK库,还是同样错误。说明问题很可能出现在Blacs和ScaLapack这两个库上……而Siesta比较郁闷人的是必须要用这俩库……
当不使用mpirun,直接用siesta < input的方式串行运行时,就不会有任何问题……
这个问题有什么好的解决方法么……
回复此楼
思想重于技巧,内涵重于表象
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

souledge

专家顾问 (著名写手)

已经解决问题~出在blacs库上,提示到此~嘿嘿~
思想重于技巧,内涵重于表象
2楼2012-07-09 01:09:54
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 souledge 的主题更新
信息提示
请填处理意见