请选择 进入手机版 | 继续访问电脑版

计算化学公社

 找回密码
 现在注册!
查看: 2226|回复: 21

[GROMACS] GROMACS的原生Windows版的编译和安装方法(支持GPU加速)

[复制链接]

1万

帖子

25

威望

2万

eV
积分
44694

管理员

公社社长

发表于 2019-1-4 21:09:35 | 显示全部楼层 |阅读模式
GROMACS的原生Windows版的编译和安装方法(支持GPU加速)

文/Sobereva@北京科音
First release: 2019-Jun-4  Last update: 2019-Jul-5

注1:本文的纯CPU版的编译方法经测试对于GROMACS 2018.4、2019.1、2019.3版本都适用,其它版本只要不是太老的应当都可以用,但未经实际测试。本文的编译CUDA版的方法经测试对GROMACS 2019.1及以后版本适用,不适用于2019.1之前的版本。本文的编译方法对于未来的GROMACS版本以及其它Visual Studio版本是否适用笔者不保证,请自行尝试,如果发现不行,请举一反三试图解决。

注2:如果大家对编译过程不感兴趣,只想立刻直接用笔者编译好的Windows版的GROMACS,请直接看本文第5节,里面有下载地址和安装方法。


1 前言:关于在Windows下使用GROMACS

GROMACS一般都是在Linux下运行,其Linux下的安装方法我在《GROMACS的安装方法》(http://sobereva.com/457)中已经详细交代了,还特意录了视频演示编译过程。在Windows下使用GROMACS有多种方式:

• 使用VMware装Linux虚拟机,并照常以Linux方式编译。装Linux虚拟机十分简单,过程见《在VMware 15中安装CentOS 7.6的完整过程视频演示》(http://sobereva.com/454)。Linux下的所有程序都可以以这种方式使用,而且直接有图形环境。但局限性是VMware客户机支持的CPU核数有限,比如VMware15最多支持16个核。总的来说笔者极度青睐VMware。

• 在Cygwin下编译。Cygwin提供了类似Linux系统的命令行环境,也提供了程序包管理器和源,相对于使用VMware更轻量级,而且编译出的程序只要提供一些Cygwin的dll文件就可以直接挪到其它Windows机子下用。对于大多数程序Cygwin下编译方式和Linux下一样(gcc、make、cmake等都有),但也有很多情况需要额外折腾,有时编译过程特别迟钝,而且有时候有一些特殊情况,比如笔者在Cygwin下编译GROMACS时必须要求不利用AVX指令集,否则编译会失败。

• Win10的Linux子系统。笔者个人不怎么喜欢这东西,用着别扭,这里不多提,和Cygwin在形式上有很大相似之处,鉴于是Windows自带的,以后必然会吞掉Cygwin很大的生存空间。

以上三种方法在原理上都会使得计算性能打一些折扣,但一般也就10%左右,这不是重点,共同的严重缺点是不能支持GPU加速。在Windows下最完美的运行GROMACS的方法莫过于直接编译原生的Windows版GROMACS,编译出的程序可以拿到任何其它Windows机子上直接用,不需要装额外运行环境,不会像上述三种方法那样会对CPU性能打折扣,而且还能像Linux下一样在跑GROMACS的时候使用GPU加速。

本文目的是详细介绍一下怎么编译原生的Windows版GROMACS,其实过程一点也不复杂(网上有些教别人编译Windows版GROMACS的文章写得很不好,过程十分繁琐,写得不明不白,而且对较新版本还不适用)。

首先提一下,GROMACS需要利用FFT(快速傅立叶变换)库,有三种选择
(1)FFTW库:这是最佳选择,一般都用这个,效率高。在Linux下编译GROMACS可以自动下载FFTW库并安装,但是在Windows下没法实现这点
(2)MKL库:效率和FFTW差不多,需要额外安装,较麻烦,而且占不少硬盘
(3)fftpack库:这是GROMACS自带的,图省事用这个就行了,但是经实测效率比基于FFTW库低百分之十几

下面按照编译过程由简到繁,分为三部分依次说:
(1)编译基于fftpack的纯CPU版
(2)编译基于fftw的纯CPU版
(3)编译基于fftw且支持CUDA加速的版本
本文只涉及编译最常用的单精度版、只能单节点并行的情况。本文编译的都是64bit版本。


2 编译基于fftpack的纯CPU版

如果你对计算效率没什么要求,只需要以尽量简单的方式编译出一个能在Windows下跑的GROMACS,那么只看这一节就够了。下面我们来编译基于fftpack库的GROMACS。

首先安装Visual Studio,这里用的是Visual Studio 2017。VS2017最低级的是community(社区)版,是完全免费的。大家在https://visualstudio.microsoft.com/zh-hans/downloads/就可以下载到最新版。下载到的是一个非常小的安装器,启动它就可以在线安装(VS2017是没有镜像文件的。虽然也有办法把VS2017的组件全部下载后再离线安装,但是会占几十GB硬盘,因此不要考虑离线方式安装)。虽然看起来在线安装好像很耗时,但其实以现在的网速来说总耗时也不算很高。安装VS2017的时候应选择“使用C++的桌面开发”,确认“安装详细信息”中“用于CMake的Visual C++工具”是已选中的状态。

将gromacs-2019.1.tar.gz源代码包解压到比如C:\gromacs-2019.1。

在开始菜单里选Visual Studio 2017 - Visual Studio Tools - VS2017的开发人员命令行提示符,由此进入编译环境都配置好的命令行窗口。然后依次输入
cd C:\gromacs-2019.1
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=C:\gmx2019.1 -DGMX_FFT_LIBRARY=fftpack -G "Visual Studio 15 2017 Win64"
cmake --build . --target INSTALL --config Release

耐心地等待编译好后,会看到出现了C:\gmx2019.1目录,里面就是编译好的可执行文件以及相关文件了,内容和Linux版一样。按照本文第5节的做法将C:\gmx2019.1\bin添加到Path环境变量后,程序就可以用了,用法和Linux版没有任何区别。

当前机子的CPU最高支持什么指令集,默认情况下编译出的GROMACS就是基于什么指令集的。如果比如你的机子的CPU支持AVX2指令集,那么编译出的GROMACS拿到只支持到AVX指令集的CPU上就没法跑,比如mdrun运行时会崩溃。

有几点值得额外说明,有兴趣可以了解一下:

cmake的-G选项代表设置Generator,相当于指定编译环境,可以运行cmake -G查看有哪些Generator可选。"Visual Studio 15 2017 Win64"代表产生出对应于VS2017的64bit平台的解决方案,之后进而编译出的程序就是适合Windows 64bit的版本了。

Visual Studio自带了cmake(因为我们安装VS时选上了),实际上也可以直接去cmake官网上下载独立的cmake程序,里面还带有cmake-gui.exe,提供了cmake的图形界面。网上某些编译Windows版GROMACS的文章用了这个东西,实际上完全多此一举,直接按照上面的做法用命令行输入省事得多。

如果读者打开build目录下的Gromacs.sln解决方案文件,会看到里面有很多不同的工程,其中名为ALL_BUILD的工程对应于编译出最终的可执行文件,而INSTALL的工程对应于不仅编译可执行文件(因为其引用了ALL_BUILD),还将程序安装到CMAKE_INSTALL_PREFIX设的目录,因此上文的语句里用了--target INSTALL。

上面的--config后面跟的是编译时用的配置。名为Release的配置是适合用于发布的,会对代码充分进行优化。

在cmake --build ...的那一步后面再接上比如-j 4代表使用4核并行编译,但是实测发现对编译耗时没有可查觉的影响,和Linux下的情况完全不同。


3 编译基于fftw的纯CPU版

先在此下载FFTW 3.3.8库:http://www.fftw.org/fftw-3.3.8.tar.gz。将之随便解压到某个地方,然后开启“VS2017的开发人员命令行提示符”,进入FFTW库解压的目录(此目录下会看到CMakeLists.txt),运行以下命令
cmake . -DCMAKE_INSTALL_PREFIX=C:\fftw338 -DENABLE_SSE2=ON -DENABLE_AVX=ON -DENABLE_FLOAT=ON -DBUILD_SHARED_LIBS=ON -G "Visual Studio 15 2017 Win64"
cmake --build . --target INSTALL --config Release

这样,FFTW库就被装到C:\fftw338目录下了,里面有库文件、头文件等。如果你的CPU支持AVX2指令集,建议把上面命令里-DENABLE_AVX=ON改为-DENABLE_AVX2=ON以获得更好的性能。

接下来的编译过程类似上一节,区别是指定的FFT库不同:
cd C:\gromacs-2019.1
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=C:\gmx2019.1 -DGMX_FFT_LIBRARY=fftw3 -DCMAKE_PREFIX_PATH=C:\fftw338 -G "Visual Studio 15 2017 Win64"
cmake --build . --target INSTALL --config Release

编译完成后,手动将C:\fftw338\bin里的fftw3f.dll拷到C:\gmx2019.1\bin目录下,之后将这个目录加入Path环境变量后就可以用了。


4 编译基于fftw且支持CUDA加速的版本

https://developer.nvidia.com/cuda-toolkit下载CUDA toolkit,里面提供了编译CUDA加速程序所需要的库、头文件、编译器等等。为了节约硬盘空间,装CUDA toolkit时只需要选择安装CUDA分类里的Development、Runtime和Visual Studio Integration即可。这里假定装到了自定义的D:\CUDA_toolkit目录下。值得一提的是,编译CUDA版GROMACS的机子并不需要非得有可以实现CUDA加速的GPU,只要装了CUDA toolkit,在什么机子上都可以编译。

按照上一节的做法把FFTW库编译好,然后输入
cd C:\gromacs-2019.1
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=C:\gmx2019.1_GPU -DGMX_FFT_LIBRARY=fftw3 -DCMAKE_PREFIX_PATH=C:\fftw338 -G "Visual Studio 15 2017 Win64" -DGMX_GPU=ON -DCUDA_TOOLKIT_ROOT_DIR=D:/CUDA_toolkit
cmake --build . --target INSTALL --config Release

然后和上一节一样把fftw3f.dll拷到新产生的C:\gmx2019.1_GPU\bin目录下,之后将这个目录加入Path环境变量后就可以用了。

如果你编译出的GROMACS要拿到其它没有装CUDA toolkit的机子上用,或者那台机子装的CUDA toolkit是老版本,那么你应当先把D:\CUDA_toolkit\bin\cufft64_10.dll(_后面的数字视CUDA toolkit版本而定)也拷到C:\gmx2019.1_GPU\bin目录下,然后再把这个gmx2019.1_GPU目录拷到其它机子上用。

如果当前机子里有支持CUDA加速的GPU,而且GPU驱动的版本号足够新,满足当前CUDA toolkit版本的要求,那么运行CUDA版GROMACS的时候就会自动识别出兼容的GPU,并提示利用GPU进行运算。如果你的GPU不满足要求或者驱动版本太老,那么CUDA版GROMACS也能运行,只不过是纯粹用CPU来跑。在https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html页面里可以查到各个CUDA toolkit所需要的GPU驱动最低版本号,如果你的GPU能装上满足要求版本的驱动(较新版本的驱动不支持很老的GPU),那么你的GPU就能加速GROMACS运算。

PS:对于用GPU加速的情况,用fftpack还是fftw对计算耗时影响很小,图省事的话基于fftpack编译GPU版也可以。


5 笔者预编译的原生Windows版的安装方法

这里提供笔者编译好的GROMACS 2019.3 Windows 64bit版,在Win7、Win10都可以用,都可以单机并行,是基于AVX指令集编译的,FFT库都是用的FFTW。注意,使用者不需要在机子里安装CUDA toolkit,使用者只要确保显卡驱动足够新就可以使用我编译的版本。
纯CPU版(16MB):http://sobereva.com/soft/gmx2019.3_win64.rar
CUDA加速版(93.3MB):http://sobereva.com/soft/gmx2019.3_win64_GPU.rar
笔者也编译了AVX2版,经测试发现和AVX的速度没有明显差别,所以AVX2版的我就不提供了。

假设预编译版GROMACS压缩包解压到了C:\gmx2019.3,使用前应当进入“控制面板”-“系统”,选择“高级系统设置”,在“高级”标签页里选择“环境变量”,在“xxx的用户变量”下面选择Path变量,点击“编辑”,在“变量值”文本框最后加上一个分号,然后再写上GROMACS目录的bin子目录的路径,比如;C:\gmx2019.3\bin\。之后进入Windows的命令行窗口,输入gmx命令的时候就应该出现相关提示信息了,此时就可以像Linux版一样照常使用了。
注:如果你的计算机水平十分糟糕,难以正确按照上面的文字正确设置环境变量,一定要参考演示视频:https://www.bilibili.com/video/av39914815/

如果你的机子里没有装Visual Studio,或者装了但是版本比2017老,应先去https://www.microsoft.com/zh-cn/download/details.aspx?id=48145下载并安装Visual C++ Redistributable,这提供了必备的运行环境,否则启动时会提示缺少dll。

笔者编译CUDA加速版时用的CUDA toolkit是10.1.105,这个版本要求nVidia的显卡驱动应不低于418.96。因此如果你要实现GPU加速,而且你的驱动太老,应当先去nVidia官网https://www.nvidia.com/Download/index.aspx下载最新版本驱动,以确保能够在使用此程序时实现GPU加速。2013年左右推出的nVidia显卡(指Kepler架构,大部分的Geforce GT 6xx系列都是),以及之后的显卡都能装上满足此要求的驱动。

经笔者在2*E5 2696v3(36核)机子上对一个三万多原子的蛋白质+水盒子的测试发现,Windows下纯CPU版的计算速度只有按照《GROMACS的安装方法》(http://sobereva.com/457)方法编译出来的Linux版的60%,估计是微软的编译器没有gcc那么给力所致。GPU版我没有对比测试,但应该速度相差不会这么显著。所以,如果你只用CPU来跑计算,建议还是用Linux系统。

评分

参与人数 1eV +5 收起 理由
Jasminer + 5 谢谢

查看全部评分

北京科音自然科学研究中心:http://www.keinsci.com  致力于计算化学的发展和传播,不定期开办各层次量子化学、分子动力学、波函数分析与Multiwfn程序等主题的培训。欢迎加入“北京科音”微信公众号获取培训最新消息和计算化学资讯
思想家公社QQ群,1号:18616395,2号:466017436。达5000人,专门交流理论、计算化学。两个群讨论范畴相同,可加入任意其一但不可都加入,申请信息必须注明具体研究方向,否则一概不批。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(最流行的量子化学波函数分析程序)

此账号为诸Sobereva共用
Money and papers are rubbish, get a real life!

8

帖子

0

威望

178

eV
积分
186

Level 3 能力者

发表于 2019-1-4 22:23:54 | 显示全部楼层
进入“控制面板”-“系统”,选择“高级系统设置”,在“高级”标签页里选择“环境变量”,在“xxx的用户变量”下面选择Path变量,点击“编辑”,在“变量值”文本框最后加上一个分号,.....。。。。。。。。。。。很详细!

1万

帖子

25

威望

2万

eV
积分
44694

管理员

公社社长

 楼主| 发表于 2019-1-5 09:26:29 | 显示全部楼层
comboy2008 发表于 2019-1-4 22:23
进入“控制面板”-“系统”,选择“高级系统设置”,在“高级”标签页里选择“环境变量”,在“xxx的用户变 ...

我每次写帖子都是考虑到初学者理解能力的底限来写的,甚至还担心有人不懂都录了视频。但仍然经常有人不能正确领会...
北京科音自然科学研究中心:http://www.keinsci.com  致力于计算化学的发展和传播,不定期开办各层次量子化学、分子动力学、波函数分析与Multiwfn程序等主题的培训。欢迎加入“北京科音”微信公众号获取培训最新消息和计算化学资讯
思想家公社QQ群,1号:18616395,2号:466017436。达5000人,专门交流理论、计算化学。两个群讨论范畴相同,可加入任意其一但不可都加入,申请信息必须注明具体研究方向,否则一概不批。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(最流行的量子化学波函数分析程序)

此账号为诸Sobereva共用
Money and papers are rubbish, get a real life!

593

帖子

12

威望

4294

eV
积分
5127

Level 6 (一方通行)

密度泛函·小卒

发表于 2019-1-5 09:35:35 | 显示全部楼层
comboy2008 发表于 2019-1-4 22:23
进入“控制面板”-“系统”,选择“高级系统设置”,在“高级”标签页里选择“环境变量”,在“xxx的用户变 ...

然后就有人困惑:“控制面板是啥?”
一出生响亮登场,十几岁快乐成长,
二十岁天天向上,三十岁基本定向,
四十岁拼命打创,五十岁回首一望,
六十岁告老还乡,七十岁搓搓麻将,
八十岁晒晒太阳,九十岁躺在床上,
一百岁挂在墙上,生得伟大,走得凄凉!
生活像罐五味瓶,酸甜苦辣难消停!
该吃吃,该喝喝,遇事别往心里搁,
想哭哭,想笑笑,烦恼通通云外抛,
记住甜,忘掉苦,亲人朋友好相处,
心情好,最重要,自我麻痹乐逍遥!

9

帖子

0

威望

296

eV
积分
305

Level 3 能力者

发表于 2019-1-5 12:08:49 | 显示全部楼层
感谢大神,大神辛苦了

302

帖子

2

威望

3103

eV
积分
3445

Level 5 (御坂)

发表于 2019-1-6 13:15:16 | 显示全部楼层
很棒,cmake的gui工具也很好,如此,可以可视化的来选择编译条件。

103

帖子

0

威望

576

eV
积分
679

Level 4 (黑子)

发表于 2019-1-6 13:15:57 | 显示全部楼层
感谢sob老师!太赞了!

159

帖子

1

威望

3197

eV
积分
3376

Level 5 (御坂)

发表于 2019-1-7 21:39:58 | 显示全部楼层
谢谢,可以一试!

1万

帖子

25

威望

2万

eV
积分
44694

管理员

公社社长

 楼主| 发表于 2019-3-29 08:36:37 | 显示全部楼层
彻底重写了本文,将Windows下编译GROMACS的过程终极完美化,增加了基于FFTW库的编译介绍,增加了支持CUDA版本的编译介绍,而且还直接提供了预编译好的直接就能用的CUDA加速版windows 64bit GROMACS 2019.1。
北京科音自然科学研究中心:http://www.keinsci.com  致力于计算化学的发展和传播,不定期开办各层次量子化学、分子动力学、波函数分析与Multiwfn程序等主题的培训。欢迎加入“北京科音”微信公众号获取培训最新消息和计算化学资讯
思想家公社QQ群,1号:18616395,2号:466017436。达5000人,专门交流理论、计算化学。两个群讨论范畴相同,可加入任意其一但不可都加入,申请信息必须注明具体研究方向,否则一概不批。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(最流行的量子化学波函数分析程序)

此账号为诸Sobereva共用
Money and papers are rubbish, get a real life!

15

帖子

0

威望

470

eV
积分
485

Level 3 能力者

发表于 2019-4-21 02:42:33 | 显示全部楼层
本帖最后由 neocc 于 2019-4-21 15:51 编辑

下载社长的CUDA加速版(93.3MB)

D:\CUDA_toolkit目录下装CUDA toolkit时,选择安装CUDA分类里的Development、Runtime和Visual Studio Integration。
把D:\CUDA_toolkit\bin\cufft64_10.dll拷到C:\gmx2019.1_GPU\bin
然后cmd里面输入gmx -version

最后一行依然显示CUDA runtime:       N/A

请问社长这个要如何修改?

注:神船k680e i5 7400  1050ti 4g gddr5

1万

帖子

25

威望

2万

eV
积分
44694

管理员

公社社长

 楼主| 发表于 2019-4-21 06:44:28 | 显示全部楼层
neocc 发表于 2019-4-21 02:42
下载社长的CUDA加速版(93.3MB)

D:\CUDA_toolkit目录下装CUDA toolkit时,选择安装CUDA分类里的Develop ...

dll已经直接提供在我的文件包里了,有这个直接就能跑我编译好的,不需要你额外安装CUDA toolkit从里面提取这个文件。你需要做的是把你的显卡驱动更新到最新,显卡驱动版本和CUDA toolkit版本完全是两码事
北京科音自然科学研究中心:http://www.keinsci.com  致力于计算化学的发展和传播,不定期开办各层次量子化学、分子动力学、波函数分析与Multiwfn程序等主题的培训。欢迎加入“北京科音”微信公众号获取培训最新消息和计算化学资讯
思想家公社QQ群,1号:18616395,2号:466017436。达5000人,专门交流理论、计算化学。两个群讨论范畴相同,可加入任意其一但不可都加入,申请信息必须注明具体研究方向,否则一概不批。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(最流行的量子化学波函数分析程序)

此账号为诸Sobereva共用
Money and papers are rubbish, get a real life!

15

帖子

0

威望

470

eV
积分
485

Level 3 能力者

发表于 2019-4-21 15:51:04 | 显示全部楼层
sobereva 发表于 2019-4-21 06:44
dll已经直接提供在我的文件包里了,有这个直接就能跑我编译好的,不需要你额外安装CUDA toolkit从里面提 ...

好的,谢谢社长

15

帖子

0

威望

470

eV
积分
485

Level 3 能力者

发表于 2019-4-24 12:43:19 | 显示全部楼层
请问社长,驱动已经更新到最新,gpu可以跑起来,但是在cmd里面想看NVIDIA-smi,提示failed to initialize NVML:unknown error😂

1万

帖子

25

威望

2万

eV
积分
44694

管理员

公社社长

 楼主| 发表于 2019-7-6 17:09:52 | 显示全部楼层
本贴里编译好的gromacs 2019.1版下载链接已更新为了gromacs 2019.3版
北京科音自然科学研究中心:http://www.keinsci.com  致力于计算化学的发展和传播,不定期开办各层次量子化学、分子动力学、波函数分析与Multiwfn程序等主题的培训。欢迎加入“北京科音”微信公众号获取培训最新消息和计算化学资讯
思想家公社QQ群,1号:18616395,2号:466017436。达5000人,专门交流理论、计算化学。两个群讨论范畴相同,可加入任意其一但不可都加入,申请信息必须注明具体研究方向,否则一概不批。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(最流行的量子化学波函数分析程序)

此账号为诸Sobereva共用
Money and papers are rubbish, get a real life!

12

帖子

0

威望

111

eV
积分
123

Level 2 能力者

发表于 2019-7-8 19:30:29 | 显示全部楼层
老师好,请问为什么我用VS2019编译的fftw-3.3.8和gromacs-2019.3都没有bin文件夹?是过程出问题了吗?
您需要登录后才可以回帖 登录 | 现在注册!

本版积分规则

手机版|北京科音自然科学研究中心|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949-1号 )

GMT+8, 2019-8-21 09:48 , Processed in 0.162516 second(s), 25 queries .

快速回复 返回顶部 返回列表