计算化学公社

 找回密码 Forget password
 注册 Register
Views: 19559|回复 Reply: 10
打印 Print 上一主题 Last thread 下一主题 Next thread

[CPMD] CPMD 4.1并行编译(Ubuntu 14.04/GCC4.6/fftw3)

[复制链接 Copy URL]

82

帖子

3

威望

1461

eV
积分
1603

Level 5 (御坂)

本帖最后由 ChemiAndy 于 2018-3-10 18:19 编辑

CPMD发布新版本 V4.1  简介
下述教程介绍在以Ubuntu 14.04/12.04为核心的服务器上的并行编译过程,适用于Linuxmint 17, elementOS等众多版本。在这些发行版中,可通过apt-get安装并行编译器和所需的所有数学库。
注意FFTW有fftw2和fftw3两种版本,此教程使用fftw3。


1. 准备

  1. sudo apt-get install build-essential gcc gfortran subversion   //编译器gcc4.6或者4.8均可通过
  2. sudo apt-get install libopenmpi-dev openmpi-bin  //openmpi V1.6并行编译器
  3. sudo apt-get install libblas-dev liblapack-dev libatlas-base-dev libfftw3-dev libfftw3-3  // 必要的各种数学库
复制代码

2. 编译

下载cpmd-v4.1.tar.gz 解压后进入CPMD目录
  1. tar zxfv cpmd-v4.1.tar.gz
  2. cd CPMD
  3. ./configure.sh PLATFORM
  4. ./configure.sh LINUX-X86_64-FEDORA-MPI-FFTW
复制代码

执行上面命令成功后,会生成一个Makefile文件在当前目录。然后打开修改platform-dependent stuff部分的前5行。这5行控制了cpmd的编译和硬件优化。
  1. #########################################################################
  2. # platform-dependent stuff
  3. # this section is built by the configure.sh script: no manual editing
  4. # should be required.
  5. #########################################################################
  6. FFLAGS = -O2 -I/usr/lib/openmpi/include -I${SRCDIR} -I${OBJDIR}
  7. LFLAGS =  -L/usr/lib -llapack -lblas -lfftw3-L/usr/lib/openmpi/lib -lmpi_f90 -lmpi_f77 -lmpi -ldl -lhwloc -pthread
  8. CFLAGS = -O2 -Wall
  9. CPP =
  10. CPPFLAGS = -D__Linux -D__GNU  -D__PARALLEL -D__HAS_FFT_FFTW3  -DPOINTER8 \
  11.   -D'SVN_REV="r$(shell svnversion -n /home/xijun/temp/CPMD)"'  
复制代码

保存以后输入make即开始编译。
  1. make
复制代码

如无错误,则在CPMD/bin目录下生成cpmd.x。
重新编译前要 make clean,即可把之前编译生成的文件删除掉

运行时需将cpmd.x复制到运行作业所在的当前目录,或者将cpmd.x添加到PATH搜索路径中。后者操作如下:
修改.bashrc,添加如下一行:
  1. export PATH=$PATH:~/CPMD/bin
复制代码

(1) .bashrc文件在用户根目录下,即/home/xxxx,xxxx你的用户名,此目录亦可用~代替
(2) ~/CPMD/bin假定你的cpmd.x在该目录下。如果不是请做相应修改。
(3) 修改保存后重启终端,或者运行如下命令使修改生效:
source ~/.bashrc

运行方式:
  1. (1) 串行: cpmd.x xxx.inp ~/path/PP > xxx.log
  2. (2) 并行: mpirun -n 4 cpmd.x xxx.inp ~/path/PP > xxx.log
复制代码
其中,xxx是你的作业文件名;~/path/PP是赝势文件所在的路径; -n 4表示4核并行。

编译错误:
(1)  /usr/bin/ld: cannot find -lfftw3 则是因为fftw3安装问题,运行 sudo apt-get install libfftw3-dev libfftw3-3解决。

3. 测试
下载测试包cpmd-test.tar.gz解压后进入CPMD-test/properties,将刚编译好的cpmd.x和cpmd2cube.x复制到该目录下,然后运行
  1. ./runme-b2h6.sh
复制代码
测试并行,则修改runme-b2h6.sh,将所有的./cpmd.x前面添加:
  1. mpirun -n 4 ./cpmd.x   //4核并行
复制代码
阅读README和和新生成的LocalErrorN.log文件(N=0,1,2,3).后者会提示PROJECT WAVEFUNCTION AND LOCALIZATION ARE INCOMPATIBLE,表示两种性质不能同时计算。这个错误貌似是早期版本和最新版本的输入文件不兼容造成的,并非编译有错。

4. LFLAGS中一些参数的意义


-lmpi
libmpi.so 并行支持

-lhwloc  
libhwloc.so Hardware Locality (hwloc) 硬件检测库文件,有助于编译高性能代码


-ldl
libdl.so libc6包中的一个库,内含动态链接函数dynamic linking


5. 一些反馈(更新中)



(1) 关于mpirun, 如果你原先安装了intel编译器及其mpirun版本,那么就会与本例的gcc的mpirun版本冲突。
解决方法是:在.bashrc中comment掉(行前加#)intel编译器启动行,source ~/.bashrc或者重启,然后运行which mpirun,如果返回/usr/bin/mpirun就对了。
如果还是不行,就卸载掉gcc mpirun然后重装
sudo apt-get remove openmpi-bin libopenmpi-dev
sudo apt-get install openmpi-bin libopenmpi-dev

(2) 补丁问题
目前4.1版本下有三个补丁
patch3808-3812.txt : QM/MM界面模块IPhigenie,以及手册manual.tex的补丁
patch3812-3813.txt : 手册manual.tex
patch3815-3816.txt:QM/MM的补丁
如果用到补丁涉及的功能,就一定要打上补丁。方法是在CPMD目录下依次执行:
patch -p0 < patch3808-3812.txt
patch -p0 < patch3812-3813.txt
patch -p0 < patch3815-3816.txt
注意:要按照补丁号的大小顺序执行

6. 其他版本编译
(1) 3.17版本:
Lofter
打不开试试这个链接:
Sina Blog
(2) 3.15版本:


【CPMD4.1在Ubuntu16.04/Linuxmint 18.2下的并行编译】在Ubuntu16.04/Linuxmint 18.2下按照上述方法编译CPMD4.1,你会发现编译出错提示:
/usr/bin/ld: cannot find -lmpi_f90
/usr/bin/ld: cannot find -lmpi_f77

这是因为openmpi在这个发行版中有变化,编译时不再需要libmpi_f90.a和libmpi_f77.a。直接将Makefile中的LFLAGS行中的-lmpi_f90 -lmpi_f77删除即可。
LFLAGS =  -L/usr/lib -llapack -lblas -lfftw3-L/usr/lib/openmpi/lib -lmpi -ldl -lhwloc -pthread


评分 Rate

参与人数
Participants 9
威望 +2 eV +23 收起 理由
Reason
snljty + 1 谢谢
zn574622667 + 4 赞!
greatzdk + 5 GJ!
一声叹息010 + 3 赞!
nunup5 + 5 赞!
jiewei + 1 + 3
milkxx + 1 谢谢
smutao + 1
sobereva + 1

查看全部评分 View all ratings

157

帖子

0

威望

4344

eV
积分
4501

Level 6 (一方通行)

2#
发表于 Post on 2015-11-16 08:08:02 | 只看该作者 Only view this author
大善!

82

帖子

3

威望

1461

eV
积分
1603

Level 5 (御坂)

3#
 楼主 Author| 发表于 Post on 2015-12-1 05:52:43 | 只看该作者 Only view this author
今天偶然间注意到,Ubuntu12.04和Ubuntu14.04所带的傅立叶变换库FFTW3是不同的,这可能对编译结果产生影响。几乎所有的第一原理平面波计算软件,包括CPMD, cp2k, VASP, Quantum-Espresso,都进行大量的傅里叶变换计算,以计算总能量。(从波的角度理解平面波和K点采样 http://emuch.net/bbs/viewthread.php?tid=6235663)而FFTW是由Matteo Frigo和Steven Johnson用C语言编写的高效傅里叶变换库(http://www.fftw.org)。

Ubuntu12.04和Ubuntu14.04所带的FFTW3的版本差异如下:
Ubuntu 12.04 (Precision)   FFTW3.3-1ubuntu1 Link: http://packages.ubuntu.com/precise/libfftw3-dev
Ubuntu 14.04 (trusty)       FFTW3.3.3-7ubuntu3 Link: http://packages.ubuntu.com/trusty/libfftw3-dev

首先,Ubuntu12.04中的fftw库文件是在/usr/lib下面的,而ubuntu14.04中库文件则转移到了/usr/lib/x86_64-linux-gnu下。(点击文件列表可知)

其次,ubuntu12.04几乎不依赖其它库文件,在Ubuntu14.04中,fftw3还包括和依赖以下多个库文件:

libfftw3-bin (= 3.3.3-7ubuntu3)            Library for computing Fast Fourier Transforms - Tools
libfftw3-double3 (= 3.3.3-7ubuntu3)     Library for computing Fast Fourier Transforms - Double precision
libfftw3-long3 (= 3.3.3-7ubuntu3)        Library for computing Fast Fourier Transforms - Long precision
libfftw3-quad3 (= 3.3.3-7ubuntu3)       Library for computing Fast Fourier Transforms - Quad precision
libfftw3-single3 (= 3.3.3-7ubuntu3)     Library for computing Fast Fourier Transforms - Single precision

也就是说,分成了不同数值精度的几个版本,并进行相应优化。这样在编译源文件的时候,可以在FLAGS中指定你所需要的版本。方法:http://www.fftw.org/doc/Precision.html#Precision

关于精度对编译结果的影响,可参看:【译文】任意精度运算的使用原因及方法

评分 Rate

参与人数
Participants 1
eV +3 收起 理由
Reason
sobereva + 3

查看全部评分 View all ratings

2

帖子

0

威望

13

eV
积分
15

Level 1 能力者

4#
发表于 Post on 2016-7-20 14:16:58 | 只看该作者 Only view this author
您好我在按照您的方法编译cpmd4.1,但是我遇到几个问题,首先我的是ubuntun14.04系统,gfortran,没有ifort。之前自己编译过fftw3,openmpi,blas和lapack。但是我make出来的程序运行不了,我把make出来的错误输出到文件中,发现make的过程中放弃了一些依赖关系。我不清楚是什么原因,是因为我的那些工具是自己编译的嘛?是必须安装dev版本的吗?

82

帖子

3

威望

1461

eV
积分
1603

Level 5 (御坂)

5#
 楼主 Author| 发表于 Post on 2016-7-22 05:13:11 | 只看该作者 Only view this author
应该说自己编译的比安装dev版的更好一些。出现问题可能是库编译的问题,库依赖设置的问题,或者其它问题,不太好说。

3

帖子

0

威望

175

eV
积分
178

Level 3 能力者

6#
发表于 Post on 2016-10-27 21:30:39 | 只看该作者 Only view this author
请问楼主怎样编译cpmd2cube.x这个命令

407

帖子

0

威望

856

eV
积分
1263

Level 4 (黑子)

7#
发表于 Post on 2017-8-10 10:30:31 | 只看该作者 Only view this author
求助楼主及各位老师,安装的时候提示“Catastrophic error: could not set locale "" to allow processing of multibyte characters” 这个错误是什么原因导致的啊?

2

帖子

0

威望

247

eV
积分
249

Level 3 能力者

8#
发表于 Post on 2018-8-16 11:05:20 | 只看该作者 Only view this author
你好,我想在单机上安装串行的CPMD,我想根据自己的单机中编译器和库函数的位置来进行修改,但是得到Makefile以后不是很明白你这里说的platform-dependent stuff部分的前5行的含义,网上查阅了一些资料,还是不太懂,因此想请教你,可以介绍一下相关flag的含义,以及我怎么自己在Linux下找到适合的路径的方法。谢谢啦。

76

帖子

0

威望

470

eV
积分
546

Level 4 (黑子)

9#
发表于 Post on 2019-4-29 15:47:32 | 只看该作者 Only view this author
谢谢楼主的教程!
请问安装好运行后出现这个错误大家知道为什么吗?

$A12WK~BF(0CU%1`KLT4Q@H.png (24.29 KB, 下载次数 Times of downloads: 64)

$A12WK~BF(0CU%1`KLT4Q@H.png

29

帖子

0

威望

323

eV
积分
352

Level 3 能力者

10#
发表于 Post on 2019-10-14 09:17:12 | 只看该作者 Only view this author
您好!我想请问一下platform-dependent stuff部分的前5行是要根据什么进行修改呢

17

帖子

0

威望

119

eV
积分
136

Level 2 能力者

11#
发表于 Post on 2019-10-20 21:01:52 | 只看该作者 Only view this author
您好,我编译好了,运行测试文件,在LocalErrorN.log文件中显示
process id's: 0, 0, 0
process stops in file: /home/miner/software/CPMD/src/fftchk_utils.mod.F90
               at line: 36
               in procedure: FFTCHK
error message: TABLE OF ROOTS NOT AVAILABLE
call stack:
            2  NUMPW
            1  cpmd
请问这是哪里错了,是因为FFTW库的问题?

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-16 17:12 , Processed in 0.948597 second(s), 30 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list