计算化学公社

 找回密码 Forget password
 注册 Register
Views: 15723|回复 Reply: 22

[xtb] 基于gnu编译器和cmake编译原生Windows版xtb

[复制链接 Copy URL]

1188

帖子

5

威望

2758

eV
积分
4046

Level 6 (一方通行)

发表于 Post on 2021-5-7 15:45:44 | 显示全部楼层 Show all |阅读模式 Reading model
本帖最后由 snljty 于 2022-4-4 09:44 编辑

注:2022-02-16本文做了较大更新。建议用这个版本。

现在的xtb版本(本文发文的时候是6.4.1)编译比之前的版本容易多了,不需要Meson和Ninja了。只要有cmake也完全可以。
下面给出的基于TDM-gcc-64bit 10.3.0和cmake-win64 3.22.1以及Intel MKL 2022.0.0编译Windows版xtb 6.4.1的方法。本文假设操作系统为Windows10 64位,硬件为x86_64架构。
链接:https://pan.baidu.com/s/1qMuo24WRv1VFy3ZlA6C74g
提取码:bdsb

0.如果完全对编译没兴趣只想使用,可以下载本人编译的版本
MKL库有点大,某里网盘又不让分享zip,只能传很辣鸡的某毒网盘了,见谅。下载后解压到C:\xtb-6.4.1。这时候你应该有C:\xtb-6.4.1\bin等目录,然后在本文搜索--GOTO--,直接接着读后面的内容,跳过中间的内容即可。

1. 下载cmake-win64并安装
本文使用的是3.22.1,链接在cmake-3.22.1-windows-64。安装后
假设安装目录在C:\cmake-3.22.1-win64-x64,将C:\cmake-3.22.1-win64-x64\bin添加到环境变量PATH里面
如果不明白上面这句话,可以上网搜一下,比如Windows如何设置环境变量。(推荐放在前面,覆盖掉其他可能的gnu编译器,需要的是一个比较新的版本)。

2.下载TDM-gcc-64bit 10.3.0并安装
TDM-GCC-10.3.0-64bits
这个安装没有难度,不做过多提示,注意gcc,g++,gfortran以及openmp等部分都装上了。默认安装应该就可以。
假设安装目录是C:\TDM-GCC-64,将C:\TDM-GCC-64添加到环境变量PATH里面最前面。(注:临时做这一步只要在cmd里执行C:\TDM-GCC-64\mingwvars.bat即可)
将C:\TDM-GCC-64\bin里的mingw32-make.exe复制一份到同目录下,重命名为make.exe。

3. 下载Intel OneAPI ,安装MKL近年来Intel全家桶已经无需学术账号申请Intel Parallel Studio XE(虽然MPI新版可能有问题),而是被统一整合到了Intel OneAPI。只要用普通账号注册即可。
安装Intel OneAPI前,建议先安装Microsoft Visual Studio 2019,方便一些环境整合。到目前为止虽然已经出了Microsoft Visual Studio 2022,但是不推荐使用,一个重要原因是目前最新版OneAPI并没有与其很好地整合。
Intel OneAPI Toolkits有多个子工具包,科学计算常用的只有Intel oneAPI Base Toolkit和Intel oneAPI HPC Toolkit。其中Intel C/C++编译器以及Intel MKL在前者,Intel Fortran编译器以及Intel MPI在后者。本文只需要前者,因为使用的是GNU编译器。如果对开发感兴趣,建议装完前者后把后者也装上。前者下载地址在Intel OneAPI Base Toolkit for Windows,后者在Intel OneAPI HPC Toolkit for Windows,均点击download下载即可,下载后双击运行,按照提示一步一步走就行。可以选择要装的组件,但是对于本文的目的至少Intel Math Kernel Library必须要装的。如果不装这个用refBLAS和LAPACK虽然也能编译,但是会慢很多而且可能部分功能不能并行。
将C:\Program Files (x86)\Intel\oneAPI\mkl\latest\redist\intel64和C:\Program Files (x86)\Intel\oneAPI\mkl\latest\bin\intel64添加到PATH里面最前面。
设置环境变量MKLROOT,值为C:\Program Files (x86)\Intel\oneAPI\mkl\latest
设置环境变量LIB为C:\Program Files (x86)\Intel\oneAPI\mkl\latest\lib\intel64
注:临时做这三步只要在cmd里执行"C:\Program Files (x86)\Intel\oneAPI\mkl\latest\env\vars.bat" intel64 llp64即可)

4.下载xtb并编译安装。
github库在xtb-git,可以用git clone下载也可以直接下载压缩包。目前版本源码压缩包在xtb-6.4.1-src。如果访问不了,你需要正确的上网姿势。下载后解压。

启动cmd,用
  1. cd /d xtb源码解压后的目录
复制代码

进入解压后的目录。
执行
  1. set CC=gcc
  2. set FC=gfortran
  3. mkdir build
  4. cd build
  5. cmake .. -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=C:\xtb-6.4.1
  6. make -j 8
  7. make install
复制代码
其中make -j 8是8核并行编译,建议改成物理核心数。这会将xtb安装在C:\xtb-6.4.1里面。
注意这个过程中会自动联网下载test-drive并编译(也在github上)。请保持网络畅通。
编译完成后
--GOTO--
将C:\xtb-6.4.1\bin添加到环境变量PATH,并新建环境变量XTBPATH,值设为C:\xtb-6.4.1\share\xtb。设置环境变量的方法上面有。
设置环境变量OMP_NUM_THREADS=8,1。这里8是你想要的并行核数,建议等于物理核心数。
设置环境变量MKL_NUM_THREADS=8。这里8同理。
设置环境变量OMP_STACKSIZE=4G代表用4GB内存。(这里有风险,这个环境变量可能导致Gaussian等软件不能正常使用。如果不设这个运行不报错,就不用考虑)。
由于本文提供的压缩包已经将必要的动态库放进xtb的bin目录下,因此如果只想用本文链接预编译好的版本,--GOTO--前面的所有设置环境变量的操作都可以跳过。不使用静态库的主要原因是Intel编译器编译的MKL静态库和GNU编译器肯定是没法兼容的。Intel编译器的Windows版只提供Fortran编译器,不提供C/C++的,还要和MSVC一起整,太麻烦就不考虑了。
设置XTBPATH是由于gfn0要从里面读参数。
这样编译出的版本,链接的gcc,gfortran和openmp等库都是动态链接,所以如果把gnu编译器的bin目录从PATH里面除掉,运行xtb的时候就会因为找不到这些库报错。因此已经将需要的gnu编译器的运行库添加到上面预编译版本的压缩包里了,使用预编译版本不需要考虑这些问题。
运行的时候在输入文件的目录启动cmd,如果不知道怎么做,看在指定目录下启动cmd的方法一。然后输入chcp 65001回车,接着输入xtb后面接参数即可。

欢迎反馈。

做了几个简单的测试,和之前版本结果一致。
下面的内容不用看,过时了。就是打半天字不想删了。

这是本文之前版本提到的在Windows下编译blas、lapack、cblas以及lapacke静态库的方法,这有助于自己在Windows下开发一些依赖这些数学库的小程序。目前来看已经没什么意义了,MKL和OpenBLAS比这个香多了。这段现在不用看了。
下载lapack并编译安装。
本文使用3.9.1版本。
地址lapack-3.9.1
下载后解压到某个目录,启动cmd,用
  1. cd /d 解压后的目录
复制代码

进入解压后的目录。
  1. set CC=gcc
  2. set FC=gfortran
  3. set CXX=g++
  4. mkdir build
  5. cd build
  6. cmake .. -G "MinGW Makefiles" -DLAPACKE=ON -DCBLAS=ON -DCMAKE_INSTALL_LIBDIR=C:\lapack-3.9.1\lib -DCMAKE_INSTALL_INCLUDEDIR=C:\lapack-3.9.1\include
  7. cmake --build . -j8 --target install
复制代码

就会安装到C:\lapack-3.9.1。其中-j8是8核并行编译,建议改成CU物理核心数。
将C:\lapack-3.9.1\lib加入环境变量PATH。即可






评分 Rate

参与人数
Participants 5
eV +15 收起 理由
Reason
lonicera + 1 谢谢
ZZZ2556540 + 4 谢谢分享
嘤嘤嘤 + 4 谢谢分享
zsu007 + 5 好物!
sobereva + 1

查看全部评分 View all ratings

220

帖子

1

威望

1765

eV
积分
2005

Level 5 (御坂)

发表于 Post on 2021-5-8 13:22:51 | 显示全部楼层 Show all
本帖最后由 lyj714 于 2021-5-8 13:25 编辑

其实也是可以纯静态编译的,那样就只需要一个xtb.exe了。当然win上用gcc编译出来的会比纯intel编译的慢一倍多,你可以测试我用intel编译器编译的这个版本。http://bbs.keinsci.com/thread-22807-1-1.html

1188

帖子

5

威望

2758

eV
积分
4046

Level 6 (一方通行)

 楼主 Author| 发表于 Post on 2021-5-8 13:34:28 | 显示全部楼层 Show all
lyj714 发表于 2021-5-8 13:22
其实也是可以纯静态编译的,那样就只需要一个xtb.exe了。当然win上用gcc编译出来的会比纯intel编译的慢一倍 ...

谢谢您!这个贴子我之前看到过~应该在Makefiles里面加几个-static就行了吧,不过嫌麻烦就没搞。请问慢一倍多是差在数学库上了,还是其他部分?谢谢

220

帖子

1

威望

1765

eV
积分
2005

Level 5 (御坂)

发表于 Post on 2021-5-8 13:35:44 | 显示全部楼层 Show all
本帖最后由 lyj714 于 2021-5-8 13:37 编辑
snljty 发表于 2021-5-8 13:34
谢谢您!这个贴子我之前看到过~应该在Makefiles里面加几个-static就行了吧,不过嫌麻烦就没搞。请问慢一 ...

对,我认为MKL很关键,intel的mkl真的很快。我以前测试后发现,基本上MKL并行和openmp并行各占一半

2

帖子

0

威望

147

eV
积分
149

Level 2 能力者

发表于 Post on 2021-9-27 20:26:20 | 显示全部楼层 Show all
本帖最后由 高斯小闯哥 于 2021-9-28 10:58 编辑

您好,使用您编译的版本,为什么双击xtb.exe应用程序,直接闪退呢?Windows版本的该如何使用呢?windows版本的Gaussian能联用这个版本的xtb吗?小白求教老师解答,谢谢!

1188

帖子

5

威望

2758

eV
积分
4046

Level 6 (一方通行)

 楼主 Author| 发表于 Post on 2021-9-28 17:58:07 | 显示全部楼层 Show all
高斯小闯哥 发表于 2021-9-27 20:26
您好,使用您编译的版本,为什么双击xtb.exe应用程序,直接闪退呢?Windows版本的该如何使用呢?windows版 ...

在cmd里运行。有点类似你在Linux Shell下运行那种感觉(虽然底层实现差很多)。如果不了解这句话,请自行google。

2

帖子

0

威望

151

eV
积分
153

Level 3 能力者

发表于 Post on 2021-11-5 19:34:09 | 显示全部楼层 Show all
你好,我想请问一下这样编译的XTB可以和sob老师的gau-xtb联用搜索过渡态吗

1188

帖子

5

威望

2758

eV
积分
4046

Level 6 (一方通行)

 楼主 Author| 发表于 Post on 2021-11-5 19:55:02 | 显示全部楼层 Show all
wangxxs 发表于 2021-11-5 19:34
你好,我想请问一下这样编译的XTB可以和sob老师的gau-xtb联用搜索过渡态吗

那个里面有个shell脚本,显然就是Linux下用的。而且本文只是为了编译着玩。

2

帖子

0

威望

151

eV
积分
153

Level 3 能力者

发表于 Post on 2021-11-6 16:58:46 | 显示全部楼层 Show all
snljty 发表于 2021-11-5 19:55
那个里面有个shell脚本,显然就是Linux下用的。而且本文只是为了编译着玩。

谢谢啦

46

帖子

0

威望

1165

eV
积分
1211

Level 4 (黑子)

发表于 Post on 2021-11-10 11:38:32 | 显示全部楼层 Show all
楼主你好,我用cmder运行会出现Program received signal SIGSEGV: Segmentation fault - invalid memory reference. Backtrace for this error:   报错,而用自带的powershell运行则不会出现这个问题,这是怎么回事

1

帖子

0

威望

77

eV
积分
78

Level 2 能力者

发表于 Post on 2022-2-10 21:35:02 | 显示全部楼层 Show all
请问用gfn0会报错是为什么?用gfn1就不会

1188

帖子

5

威望

2758

eV
积分
4046

Level 6 (一方通行)

 楼主 Author| 发表于 Post on 2022-2-10 22:26:13 | 显示全部楼层 Show all
yet 发表于 2022-2-10 21:35
请问用gfn0会报错是为什么?用gfn1就不会

看最后一段红字。

1188

帖子

5

威望

2758

eV
积分
4046

Level 6 (一方通行)

 楼主 Author| 发表于 Post on 2022-2-18 10:11:00 | 显示全部楼层 Show all
阿瞳 发表于 2021-11-10 11:38
楼主你好,我用cmder运行会出现Program received signal SIGSEGV: Segmentation fault - invalid memory re ...

最好用cmd.exe运行。

24

帖子

0

威望

79

eV
积分
103

Level 2 能力者

发表于 Post on 2022-6-1 18:04:35 | 显示全部楼层 Show all
大佬请问设置环境变量OMP_NUM_THREADS=8,1意思是新建变量名是OMP_NUM_THREADS变量值是8,1吗?

142

帖子

0

威望

602

eV
积分
744

Level 4 (黑子)

发表于 Post on 2022-6-1 18:26:15 | 显示全部楼层 Show all
本帖最后由 snljty2 于 2022-6-1 18:27 编辑
无敌菠萝派 发表于 2022-6-1 18:04
大佬请问设置环境变量OMP_NUM_THREADS=8,1意思是新建变量名是OMP_NUM_THREADS变量值是8,1吗?

是,或者临时使用在cmd里set OMP_NUM_THREADS=8,1现在这个版本已经没用了,官网上已经有了最新版的官方Windows版(6.5.0),下载设置好PATH和XTBPATH以及OMP_NUM_THREADS就能用。

本版积分规则 Credits rule

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

GMT+8, 2023-2-2 23:16 , Processed in 0.260518 second(s), 29 queries .

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