转载自: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

GNU+Openmpi 并行编译CPMD3.15.3 (gcc/gfortran 4.4 + openmpi + atlas/fftw3)相关推荐

  1. OPENMPI并行库安装

    在安装OPENMPI并行库时,我们可能会遇到下面的问题; 这可能是因为C和C++的编译器没有安装好,在安装的过程中,会丢失依赖包.你可以尝试去测试编译器是否可用.有一些回答是将用命令,例如:gcc - ...

  2. 【MySQL】源码编译MySQL8.x+升级gcc+升级cmake(亲测完整版)

    大家好,我是冰河~~ 今天给大家分享一篇通过源码编译安装MySQL8的文章,期间涉及到gcc和cmake等编译环境的升级.好了, 不多说了,开始今天的正题. 一.概述 最近,在CentOS 6.8服务 ...

  3. Qt 静态编译(5.15.2 MinGW 32-bit)

    Qt 静态编译(5.15.2 MinGW 32-bit) 文章目录 Qt 静态编译(5.15.2 MinGW 32-bit) 摘要 1 编译前准备 1.1 编译环境准备 系统环境 Qt 版本 gcc ...

  4. Keil5.15使用GCC编译器链接.a库文件

    我们知道,当使用第三方的代码时,人家有可能会扔个Lib文件给你.这时候,别人仅仅要提供header文件给你,则你就能够通过Lib文件及header的函数声明,对Lib中的函数进行调用.在Keil中假设 ...

  5. Kotlin1.6.20好用的新特性:多receiver扩展函数,绝不可空类型,并行编译kotlin减少编译时间

    前言 最近kotlin1.6.20新版本出来了,并带来了几个很好用的特性,来尝尝鲜 正文 1.多receiver扩展函数 kt的扩展函数大家应该都懂,但什么是receiver呢?比如下面的代码,是给V ...

  6. Linux 命令之 make -- GNU的工程化编译工具

    文章目录 一.命令介绍 二.常用选项 三.命令示例 (一)指定命令 make 的工作目录 一.命令介绍 make 命令是 GNU 的工程化编译工具,用于编译众多相互关联的源代码文件,还可以编辑内核或模 ...

  7. 并行编译和运行非结构化网格SWAN

    并行编译和运行非结构化网格SWAN 为了使用非结构化网格版本的SWAN有效地执行高分辨率仿真,使用消息传递范例构建并行代码并在商用计算机集群上进行测试.在并行化SWAN的非结构化网格版本时,我们采用了 ...

  8. ubuntu18.04编译4.15内核过程

    内核下载地址:Linux kernel 1.将下载好的内核源码压缩包置于ubuntu18.04虚拟机中(在windows上解压会导致部分文件损坏) 2.解压下载的压缩包,在/usr/src中 tar ...

  9. 怎样用gcc编译c语言,使用GCC编译C语言程序

    使用Eclipse CDT开发C语言程序,虽然使用很方便,效率也很高,但是它向我们隐藏了很多细节.虽然大多数时候这并不影响我们的开发,但是当我们需要对程序的编译链接过程进行更加特殊的控制,以获得可以满 ...

最新文章

  1. unitoy机器人怎么联网_机器人操作说明
  2. 比特币这么火热,看看这篇比特币初学者指南
  3. java基础 第九章(设计模式 单例模式)
  4. Martix工作室考核题 —— 打印一个菱形
  5. spring mvc后端校验validator
  6. python bar图_python使用matplotlib绘图 — barChart | 学步园
  7. java filedialog 打开文件_java 用文件对话框打开文件
  8. web前端基础(13js语法基础)
  9. Leetcode每日一题:169.majority-element(多数元素)
  10. springmvc获取配置文件的值使用$这个符号
  11. ubuntu下成功配置LAMP 并安装PHPMyadmin
  12. Atitit. 委托的本质 c#.net java php的比较
  13. 【python】蔡勒公式计算日期
  14. python绘制国际象棋规则口诀_学好国际象棋必须知道的小口诀技巧
  15. Nerv-京东高性能前端框架
  16. Photoshop脚本 镜头光晕滤镜的使用
  17. IoU优化——在Anchor-Free中提升目标检测精度(附源码)
  18. informatica添加MySQL表,Informatica 简单使用
  19. obs媒体源没有声音_实现OBS视频连播,只需要安装这样一个小软件
  20. VMware下u盘识别不出来怎么办

热门文章

  1. python计算信息熵_Python计算信息熵实例
  2. mtk平台usb序列号与手机序列号
  3. meshgrid函数说明
  4. 第5次递交招股书,见知教育“逆风”上市能否如愿?
  5. 线上讲座 “硅基文明时代的技术视角” 笔记
  6. ExcelVba基本操作,执行重复的复制粘贴
  7. 《机器学习实战》学习笔记(三)
  8. 【Spring】Bean生命周期源码分析 总结
  9. 基于 HTML5 WebGL 智能城市的模拟运行
  10. vba数组如何精确筛选_VBA数组与字典解决方案第10讲:数组及数组公式的制约性和集合性二...