layout: post title: GROMACS程序编译 categories:
本手册已过时, 不再更新. 如果需要最新手册, 请加入下方QQ群.
根据自己的机器和系统直接下载相应的二进制包进行安装即可.
Linux管理员权限下最简单的默认安装方法: sudo apt-get install gromacs
如果你不愿使用商业化工具, 可使用免费的工具:
cmake
, gcc
, fftw
, MPI
, CUDA
wget http://ftp.gromacs.org/pub/gromacs/gromacs-2016.4.tar.gz
tar xvf gromacs-2016.4.tar.gz
cd gromacs-2016.4
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/安装/路径/GMX2016.4 -DGMX_FFT_LIBRARY=fftw3 -DFFTWF_INCLUDE_DIR="/fftw/路径/include/" -DFFTWF_LIBRARY="/fftw/路径/lib/libfftw3f.so" -DCMAKE_C_COMPILER=/gcc/路径/bin/gcc -DCMAKE_CXX_COMPILER=/gcc/路径/bin/g++ -DGMX_MPI=on -DGMX_DOUBLE=on -DGMX_GPU=on
make -j
make install
如果你可以使用Intel Parallel Studio, 那么编译更简单些, 因为里面自带了编译器, mkl(fftw), impi(mpi), 无须另外安装, 直接使用即可. 对于mkl的链接选项, 可使用Intel提供的在线工具获知.
下面是我使用的编译脚本
<table class="highlighttable"><th colspan="2" style="text-align:left">gmx.bsh</th><tr><td><div class="linenodiv" style="background-color: #f0f0f0; padding-right: 10px"><pre style="line-height: 125%"> 1 2 3 4 5 6 7 8 9 10 11 12</pre></div></td><td class="code"><div class="highlight"><pre style="line-height:125%"><span></span><span style="color: #AA22FF">export</span> <span style="color: #B8860B">MKLROOT</span><span style="color: #666666">=</span><span style="color: #BB4444">"/share/apps/intel/parallel_studio_xe_2017_update4/mkl"</span> <span style="color: #BB6622; font-weight: bold">\</span> <span style="color: #B8860B">CC</span><span style="color: #666666">=</span><span style="color: #BB4444">"/share/apps/intel/impi/5.1.2.150/intel64/bin/mpicc"</span> <span style="color: #BB6622; font-weight: bold">\</span> <span style="color: #B8860B">CXX</span><span style="color: #666666">=</span><span style="color: #BB4444">"</span><span style="color: #B8860B">$CC</span><span style="color: #BB4444">"</span> <span style="color: #BB6622; font-weight: bold">\</span> <span style="color: #B8860B">CMAKE_C_FLAGS</span><span style="color: #666666">=</span><span style="color: #BB4444">"-xSSE2 -I</span><span style="color: #BB6688; font-weight: bold">${</span><span style="color: #B8860B">MKLROOT</span><span style="color: #BB6688; font-weight: bold">}</span><span style="color: #BB4444">/include"</span> <span style="color: #BB6622; font-weight: bold">\</span> <span style="color: #B8860B">CMAKE_CXX_FLAGS</span><span style="color: #666666">=</span><span style="color: #BB4444">"-xSSE2 -I</span><span style="color: #BB6688; font-weight: bold">${</span><span style="color: #B8860B">MKLROOT</span><span style="color: #BB6688; font-weight: bold">}</span><span style="color: #BB4444">/include"</span> <span style="color: #BB6622; font-weight: bold">\</span> <span style="color: #B8860B">CMAKE_EXE_LINKER_FLAGS</span><span style="color: #666666">=</span><span style="color: #BB4444">"-L</span><span style="color: #BB6688; font-weight: bold">${</span><span style="color: #B8860B">MKLROOT</span><span style="color: #BB6688; font-weight: bold">}</span><span style="color: #BB4444">/lib/intel64 -lmkl_intel_lp64 -lmkl_intel_sequential -lmkl_core -lm"</span> cmake .. -DGMX_DOUBLE<span style="color: #666666">=</span>ON <span style="color: #BB6622; font-weight: bold">\</span> -DGMX_MPI<span style="color: #666666">=</span>ON -DGMX_OPENMP<span style="color: #666666">=</span>ON -DGMX_GPU<span style="color: #666666">=</span>OFF <span style="color: #BB6622; font-weight: bold">\</span> -DGMX_FFT_LIBRARY<span style="color: #666666">=</span>mkl -DGMX_BUILD_OWN_FFTW<span style="color: #666666">=</span>OFF -DGMX_EXTERNAL_BLAS<span style="color: #666666">=</span>OFF <span style="color: #BB6622; font-weight: bold">\</span> -DGMX_PREFER_STATIC_LIBS<span style="color: #666666">=</span>ON <span style="color: #BB6622; font-weight: bold">\</span> -DCMAKE_INSTALL_PREFIX<span style="color: #666666">=</span><span style="color: #BB4444">"/home/jicun/GMX2016.4/"</span> </pre></div> </td></tr></table>更详细的说明可参考
总的来说, Windows下的GROMACS程序用于模拟意义不大, 对于长时间的模拟, 我都是放在Linux服务器上进行的. 但将Windows下的GROMACS程序作为一个辅助工具来使用还是有意义的. 因为大多数时候, 我都是在Windows下准备输入文件的, 然后测试一下准备好的输入文件是否能正确生成.tpr文件, 简单测试一下生成的.tpr文件能不能正常运行, 或是测试一下分析命令的用法. 如果为此而装一个Linux的虚拟机, 感觉太麻烦了, 使用起来也不顺手, 因为我毕竟是个Windows的深度用户.
相对而言, Linux系统下GROMACS的编译安装还算简单, 也有很多资料, 但Windows系统下有关的编译安装资料却不多. 网上也流传有一个编译好的4.6.2的单精度版本, 其他的我还没看到过. 最近, 我需要测试GROMACS 5.x版本的一些新功能, 所以就试着在64位Windows 7下用Intel的C编译器编译了一下GROMACS 5.1.1, 这里简记下编译过程, 供需要者参考.
提示: 如果你对编译过程不熟悉, 建议不要使用Intel C编译器, 直接使用VC编译器即可, 这样可省却很多麻烦. 我在这里使用Intel C编译器, 只是出于学习的目的, 并没有测试使用Intel C编译出来的GROMACS是不是比使用VC编译出来的更快. 如果你有测试, 烦请告知.
虽然VS有更新的版本, 但我使用的2015版Intel C编译器目前只支持VS2013, 所以我就安装了VS2013, 就不去测试其他版本的VS了.
这是Intel整合好的一套工具, 包括了编译器, MKL库, IMPI以及一些性能测试工具等, 只要装好就全部可以用了, 省得一个一个地装.
【刘胜堂 注】经测试, Intel Composer XE 2015只支持VS2013, 不支持更新的VS2015, 所以必须使用VS2013, 否则cmake时会出现找不到编译器环境变量的错误.
GROMACS 5.x版本使用cmake构建, 所以需要安装cmake. 直接到官方网站下载即可. 我下载的是Windows ZIP cmake-3.4.1-win32-x86.zip. 不需要安装, 解压后能直接使用. 解压后得目录cmake-3.4.1-win32-x86
, 其中的../cmake-3.4.1-win32-x86/bin/cmake-gui.exe
即可运行.
到官方网站下载GROMACS源代码. 我下载的是gromacs-5.1.1.tar.gz. 下载后解压, 得目录gromacs-5.1.1
.
打开..\cmake-3.4.1-win32-x86\bin\cmake-gui.exe
, 设定源代码路径, 编译路径, 点击Configure
, 选择Visual Studio 12 2013 Win64
-> Finish
.
运行后出现错误, 因为有些编译选项没有指定, 设置必须的选项, 重新Configure
. 如此重复, 直至没有错误提示, 提示Configuring done
. 具体选项设置如下图, 有关说明请参考GROMACS手册.
其中
MKL_INCLUDE_DIR
设置为
C:/Program Files (x86)/Intel/Composer XE 2015/mkl/include
MKL_LIBRARIES
设置为
C:/Program Files (x86)/Intel/Composer XE 2015/mkl/lib/intel64/mkl_core.lib;C:/Program Files (x86)/Intel/Composer XE 2015/mkl/lib/intel64/mkl_sequential.lib;C:/Program Files (x86)/Intel/Composer XE 2015/mkl/lib/intel64/mkl_intel_lp64.lib;
如果使用多线程, 可改为
C:/Program Files (x86)/Intel/Composer XE/mkl/lib/intel64/mkl_core.lib;C:/Program Files (x86)/Intel/Composer XE/mkl/lib/intel64/mkl_intel_lp64.lib;C:/Program Files (x86)/Intel/Composer XE/mkl/lib/intel64/mkl_intel_thread.lib;C:/Program Files (x86)/Intel/Composer XE/compiler/lib/intel64/libiomp5md.lib;
值得注意的是, 在这一步中, 我们没有办法指定只使用Intel编译器, 虽然网上有些解决方案1, 2, 但根据我的测试最终都不能编译成功. 此外, GMX_SIMD
选项也无法使用, 否则Configure
不能通过. 不过这些选项, 我们都可以在后面解决.
Configure
完成后, 点击Generate
生成解决方案.
生成解决方案后, 打开../GMX-5.1.1/Gromacs.sln
, 选择Release x64
配置, 并选择使用Intel编译器
然后修改编译选项. 选中某一方案, 右键属性
打开属性页, 然后展开配置属性
, 选择相应的项目进行修改
首先是C/C++
编译选项
对应的命令行选项为
/GS /TP /W3 /Qdiag-disable:"4800" /Qdiag-disable:"4355" /Qdiag-disable:"4996" /Qdiag-disable:"4305" /Qdiag-disable:"4244" /Qdiag-disable:"4101" /Qdiag-disable:"4267" /Qdiag-disable:"4090" /Zc:wchar_t /I"C:\Users\Jicun\Downloads\gromacs-5.1.1\src\external\boost" /I"C:\Users\Jicun\Downloads\GMX-5.1.1\src" /I"C:\Users\Jicun\Downloads\gromacs-5.1.1\src\external\thread_mpi\include" /I"C:\Users\Jicun\Downloads\gromacs-5.1.1\src" /I"C:\Program Files (x86)\Intel\Composer XE 2015\mkl\include" /O2 /Ob2 /Fd"gmx.dir\RelWithAssert\vc120.pdb" /D "WIN32" /D "_WINDOWS" /D "GMX_DOUBLE" /D "GMX_HAVE_WINSOCK" /D "NOMINMAX" /D "HAVE_CONFIG_H" /D "BOOST_NO_TYPEID" /D "CMAKE_INTDIR=\"RelWithAssert\"" /D "_MBCS" /Zc:forScope /GR /MD /Fa"RelWithAssert/" /EHsc /nologo /Fo"gmx.dir\RelWithAssert\" /Qprof-dir "gmx.dir\RelWithAssert\" /Fp"gmx.dir\RelWithAssert\gmx_d.pch"
然后是Linker
连接器选项
对应的命令行选项为
/OUT:"C:\Users\Jicun\Downloads\GMX-5.1.1\bin\RelWithAssert\gmx_d.exe" /MANIFEST /NXCOMPAT /PDB:"C:/Users/Jicun/Downloads/GMX-5.1.1/bin/RelWithAssert/gmx_d.pdb" /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "comdlg32.lib" "advapi32.lib" "..\..\lib\RelWithAssert\gromacs_d.lib" "wsock32.lib" "C:\Program Files (x86)\Intel\Composer XE 2015\mkl\lib\intel64\mkl_core.lib" "C:\Program Files (x86)\Intel\Composer XE 2015\mkl\lib\intel64\mkl_sequential.lib" "C:\Program Files (x86)\Intel\Composer XE 2015\mkl\lib\intel64\mkl_intel_lp64.lib" /IMPLIB:"C:/Users/Jicun/Downloads/GMX-5.1.1/lib/RelWithAssert/gmx_d.lib" /MACHINE:X64 /INCREMENTAL /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"gmx.dir\RelWithAssert\gmx_d.exe.intermediate.manifest" /NOLOGO /TLBID:1
这些选项至少要同时用于gmx
, libgromacs
, mdrun_objlib
, view_objlib
.
设置好后, 选中gmx
, 右键生成
即可编译得到../GMX-5.1.1/bin/Release/gmx_d.exe
. 编译时间较长, 请保持耐心.
如果选中INSTALL
生成, 则默认将编译好的GROMACS安装在C:/Program Files/Gromacs
.
值得注意的是, 在编译时, 由于我们使用了Intel的编译器, 所以有些VS自带的头文件会因为兼容性问题导致编译失败. 具体说明见这里. 我的解决办法是使用C:\Program Files (x86)\Intel\Composer XE 2015\compiler\include
下的文件, 替换C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include
下的文件, 需要替换的文件有下列几个:
atomic
complex.h
dvec.h
emmintrin.h
fenv.h
fvec.h
immintrin.h
ivec.h
mmintrin.h
nmmintrin.h
omp.h
pmmintrin.h
smmintrin.h
tmmintrin.h
wmmintrin.h
xmmintrin.h
或许还有更简单的解决办法, 但我还不知道.
目前的最新版本GROMACS-2016.4在编译时需要编译器支持C++11标准, 因此对编译器要求较高. Windows下满足要求的最低版本是Visual Studio 2015, 具体编译过程和上面的相差不大, 但建议不要使用Intel编译器, 因为可能会遇到兼容性问题.
在cmake过程中, 可能会遇到库函数版本不兼容的问题, 这可以通过在MKL_LIBRARIES
设置中增加低版本库函数解决. 对于VS2017, 我使用的设置如下
C:/Program Files (x86)/Intel/Composer XE 2015/mkl/lib/intel64/mkl_core.lib;C:/Program Files (x86)/Intel/Composer XE 2015/mkl/lib/intel64/mkl_intel_thread.lib;C:/Program Files (x86)/Intel/Composer XE 2015/mkl/lib/intel64/mkl_intel_ilp64.lib;C:/Program Files (x86)/Intel/Composer XE 2015/compiler/lib/intel64/libiomp5md.lib;C:/MVS2017Professional/VC/Tools/MSVC/14.11.25503/lib/x64/legacy_stdio_definitions.lib
将编译好的GROMACS打包发布时, 注意要顺便将Intel的libiomp5md.dll
文件也一起发布.
另外, 在编译时GROMACS会针对不同的CPU进行优化, 因此在编译机器之外的机器上运行时, 要注意检查CPU优化选项是否支持. CPU支持的优化选项可使用CPU-Z程序来查看.
你可以下载我编译好的GROMACS 5.1.1双精度版. 这个版本只在我的64位Windows 7下测试过, 不能保证在所有机器上都能运行. 解压后, 将其中的bin
目录添加到path
环境变量, 并将GMXLIB
环境变量设为\安装路径\GMX-5.1.1\share\gromacs\top
即可使用了.
2016-04-14 06:31:27 Jerkwin
我更新了说明, 照着做吧.
2016-09-05 12:47:50 朱雪刚
老师,这个win版的怎么运行例子?
Jerkwin
哪个程序?