转载自:http://hi.baidu.com/xijunw/item/1db8690fb3dfb7dd72e67686
【摘要】首先把Ubuntu12.04默认的gcc4.6降到gcc4.4; 安装atlas/fftw数学库; 安装openmpi; 用“LINUX-x86_64-FEDORA-MPI” 配置Makefile文件,然后编译即可;可以用dev-test-suite来测试可靠度和效率。
一般来说intel 编译器生成的可执行文件效率要高,为什么不用intel ifort编译呢?一是因为在Ubuntu下安装intel compiler+openmpi比较费劲,容易出错;另外一个原因是官方CPMD maillist已经明确说了,测试表明cpmd的执行效率与编译器关系不大,与数学库的关系最大。而atlas库是最佳选择之一。
来源:http://www.cpmd.org:81/pipermail/cpmd-list/2012-January/005343.html
1. 把Ubuntu12.04默认的gcc4.6降到gcc4.4。为什么要降版本?请看下面的mailist帖子:
ref: http://www.cnblogs.com/tnxk/archive/2012/07/07/2580731.html
大意是gcc4.6的语法check太严格,造成编译不通过。而gcc4.4则没问题。
sudo apt-get install build-essential gfortran
//install gcc/gfortran, but v4.6 is the default as installed.
// then install v4.4
sudo apt-get install gcc-4.4 g++-4.4 g++-4.4-multilib gcc-4.4-multilib gfortran-4.4 gfortran-4.4-multilib
and set v4.4 as default (改优先级)
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 50
sudo update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.4 100
sudo update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.6 50
sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-4.4 100
sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-4.6 50
如果gcc -v 和gfortran -v显示4.4.x即可。
2. 安装atlas/fftw数学库
sudo apt-get install libatlas-base-dev libatlas3gf-base fftw2 fftw-dev
看看是不是安装在了/usr/lib/atlas-base/atlas下,ls一下看看。
$ ls/usr/lib/atlas-base/atlas
libblas.a libblas.so.3gf liblapack.a liblapack.so.3gf
libblas.so libblas.so.3gf.0 liblapack.so liblapack.so.3gf.0
如果是就好;如果不在这里,看看是否在 /usr/lib64/atlas下,或者其它地方。
记住这个库的位置,待会修改Makefile,你懂的。
3. 安装openmpi
sudo apt-get install openmpi-common openmpi-bin openmpi-default-dev openmpi-default-bin
4. 开始编译CPMD
首先到src目录下,然后:
./mkconfig.sh LINUX-x86_64-FEDORA-MPI > Makefile
然后修改Makefile,把atlas库的位置添加到其中的LFLAGS中。最后的文件配置部分如下:
DEST = .
BIN = .
FFLAGS = -c -O2 -fcray-pointer
LFLAGS = -L/usr/lib/atlas-base/atlas -llapack -lblas -lfftw
CFLAGS = -c -O2 -Wall
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -D__GNU -DFFT_FFTW -DPARALLEL -DMYRINET -DPOINTER8
NOOPT_FLAG =
CC = mpicc
FC = mpif77
LD = mpif77
AR = ar
其中CPPFLAGS中,-DPARALLEL说明要并行,-DPOINTER8表64位,-D__GNU表要用gcc/gfortran,-DFFT_FFTW表要用FFTW优化的快速傅立叶变换库。
然后开始make。多次不同机型测试表明上述过程work perfectly.
5. 测试
去官网下载 dev-test-suite.tar.gz
然后解压到任一目录,会生成
个Test_Suite文件夹,然后你在Test_Suite同级目录新建两个文件夹:
mkdir COMPILE
mkdir SOURCE
然后把编译好的cpmd.x复制到SOURCE文件夹里
然后cd Test_Suite
bash CPMD_Test_Suite.sh -WFO -mpicmd "mpirun -np 8"
做并行测试
WFO是Test_Suite下的一个文件夹
你还可以测试GO, BO, CP, VIB, PI
如果bash CPMD_Test_Suite.sh -ALL -mpicmd "mpirun -np 8"就是全部测试
测试会有3种情况: PASSED, FAILED, CRASHED
FAILED的话看看 Test_Suite/TS.OUT/Errors.log下,是怎么回事,它一般比较Compare the total energy, final electronic gradients and energy componentsfor a wavefunction optimization using ODIIS with vanderbilt PPS for BLYP functional。比如,总能量的偏差:
mean difference (stddev) : 1.1900e-06 ( 1.1900e-06)
mean relative difference (stddev): 1.5064e-07 ( 1.5064e-07)
因为 1au (Ryd) = 13.6 eV = 313.76 kcal/mol
而1e-6 au ~ 0.0003kcal/mol,所以这种偏差可以忽略不计,这种FAILED也不用太在意。
如果是CRASH的,说明编译的可执行文件不支持某种计算,比如QMMM计算,或者matadynamics,或者编译失败。
ChemiAndy@百度空间:一花一世界 2012 Montreal.
PS1: On Linuxmint 13, fftw3 is installed by default, but is unfortunately incompatible with CPMD. So, remove fftw3 and reinstall fftw2, i.e.,
$> sudo apt-get install fftw2 fftw-dev
PS2: 在使用gcc4.6(Ubuntu/Linuxmint 13以上版本),如果遇到与下述两文件相关的编译错误
> forcematch_kfit
> forcematch_qfit
请在FFLAGS后面加:-fno-whole-file