在甲骨文 ARM 实例上编译安装 GAMESS

发布于 / 所有文章 / 0 条评论

前段时间,甲骨文云(Oracle Cloud Infrastructure)推出了 Ampere A1 计算实例,它采用由甲骨文投资的 Ampere 公司研发的 Ampere Altra 处理器。本文将介绍如何在甲骨文 ARM 实例上编译安装计算化学软件包 GAMESS。

甲骨文新推出的 Ampere A1 计算实例使用了 Ampere Altra 处理器,该处理器基于台积电 7nm 工艺制造,可提供 80 个以 3.0GHz 运行的 ARMv8.2+ 核心。每个核心配有独立的 128KB L1 Cache 与 1MB L2 Cache。甲骨文宣称,该平台相比传统的 x86-64 平台的主要优势在于较高的性价比、灵活的计算资源搭配以及线性的可预测性能。甲骨文还将 Ampere A1 计算实例纳入到了甲骨文云的 Always Free 服务中,为所有甲骨文云用户提供每个月总计 3K OCPU-hrs 以及 18K GB-hrs 的免费计算资源,换算过来便是每个月 4 核心 24GB 内存的总计算资源。

在常规类型的任务例如编译中,Ampere A1 计算实例表现出了很高的单核性能水平,因此我便想尝试使用该实例运行计算化学软件包。目前市面上支持在 ARM 平台上运行的计算化学软件包只有 GAMESS,全称 General Atomic and Molecular Electronic Structure System,由 Iowa State University 的 Gordon Research Group 维护。本次编译所使用的 GAMESS 源码版本为 2020 R2 Release,操作系统为 Debian 10,Fortran 编译器为 Gfortran,BLAS 数学库为 OpenBLAS。其他平台与环境下的编译安装方式也可以参考本文内容,操作基本大同小异。

由于在创建 Ampere A1 实例时,甲骨文仅提供了修改过的系统镜像,所以最好先自己重装一个全新的系统。

执行如下指令将实例重装为 Debian 10:

bash <(wget --no-check-certificate -qO- https://raw.githubusercontent.com/bohanyang/debi/master/debi.sh) --cdn --bbr --timezone Asia/Shanghai --user root --password <password>

请将 <password> 修改为你自己的 root 用户登录密码。关于该脚本的更多附加选项,可访问脚本项目仓库查看。等待脚本运行完成且没有报错后,接着执行:

shutdown -r now

等待一段时间后重新连接服务器,并开始编译安装 GAMESS。在此之前,需要先在 GAMESS 官网上填写程序源码下载申请。由于我们需要的是用于在 ARM 平台上编译 GAMESS 的源码,所以请在申请表上勾选 “GAMESS version September 30, 2020 R2 for 64 bit ARM under Linux using GNU compilers” 选项。提交之后等待回复邮件,邮件中会给出访问下载页面所需的用户名和密码。用户名均为 source,而密码则会每周变动。以编写本文的时间点(2021/6/20)为例,密码为 KDxkHntb。接下来开始正式编译安装 GAMESS。

更新软件列表并安装必要软件包:

apt update

apt install wget curl screen csh build-essential gfortran libopenblas-base libopenblas-dev

下载 GAMESS 源码。请将密码修改为当前时间点的访问密码,当然也可以直接前往邮件中给出的地址下载后手动上传到服务器上:

curl -k -O --user source:KDxkHntb https://www.msg.chem.iastate.edu/GAMESS/download/source/gamess-current.tar.gz

解压并进入目录:

tar -xvf gamess-current.tar.gz

cd gamess

进行编译文件配置:

./config

这一步会出现很多选项让你选择,按照屏幕上的提示输入即可,也可以参考以下回答:

please enter your target machine name: linux64

GAMESS directory? /root/gamess

GAMESS build directory? /root/gamess

Version? 00

Please enter your choice of FORTRAN: gfortran

Please enter only the first decimal place, such as 4.9: 8.3

Enter your choice of 'mkl' or 'atlas' or 'acml' or 'libflame' or 'openblas' or 'pgiblas' or 'armpl' or 'none': openblas

enter this full pathname: /usr/lib/aarch64-linux-gnu

communication library ('serial','sockets' or 'mpi' or 'mixed')? sockets

Optional: Build LibXC interface? no

Optional: Build Michigan State University CCT3 & CCSD3A methods? no

Do you want to try LIBCCHEM? no

进入 ddi 目录准备编译 ddi:

cd ddi

修改 compddi 文件,将文件的第 702 行修改为:

set ARCH='-mcpu=native'

开始编译 ddi:

./compddi

等待编译完成后,将编译出来的 ddikick.x 移动到 GAMESS 主目录:

cp ddikick.x ../ddikick.x

进入 GAMESS 主目录并开始编译本体:

cd ..

./compall

这一步会需要一些时间,等待编译完成后将所有编译好的文件链接起来:

./lked gamess 00

到目前为止,GAMESS 的本体已经编译完成,但想要运行 GAMESS 还需要配置运行环境。

创建临时目录:

mkdir /root/gamess/scr

修改 GAMESS 程序变量,将 rungms 文件的第 64-66 行修改为:

set SCR=/root/gamess/scr

set USERSCR=/root/gamess/scr

set GMSPATH=/root/gamess

现在便可以运行自带的示例来检查 GAMESS 是否正常运行了:

./runall 00

指令默认使用单线程运行 GAMESS 自带的示例,输出文件位于 GAMESS 主目录下。等待所有示例运行完成后,检查结果是否正确:

./tests/standard/checktst

如果所有示例的检查结果都显示 Passed,则表明 GAMESS 已经可以正常运行。此时便可以删除目录中多余的文件,只需要留下 runall、rungms、gms-files.csh、ddikick.x、gamess.00.x 这五个文件以及 auxdata、tools、scr 这三个文件夹即可。

到此为止,GAMESS 编译安装完成。

在使用 GAMESS 进行计算的时候,不得不说速度很慢,主要还是由于 OpenBLAS 数学库并没有针对 ARM 平台进行很好的优化,跟 Intel MKL 数学库相比还是有很大的差距。再加上 GAMESS 本身已经算是昔日黄花了,比功能比不过 Gaussian,比计算速度比不上 ORCA。曾经 GAMESS 作为计算化学领域内小有名气的软件包,到现在除了一些特殊的任务以外基本没人使用,也算得上是时代的眼泪了。

对于常规任务,甲骨文这次推出的 Ampere A1 计算实例的性能表现真的很抢眼,用过都说好。这段时间以来,不管是日本的 Fugaku 超级计算机还是苹果的 M1 芯片,都在向世人展现 ARM 架构的实力。虽然很多人依然觉得 ARM 架构在性能上永远落后于 x86-64 架构,但我个人对于 ARM 架构的发展还是充满了信心。目前 ARM 平台最大的缺点是生态圈落后于 x86-64 平台,许多大型软件仍然等待开发者进行适配优化,ARM 平台还需要很长的时间来发展。

转载原创文章请注明,转载自: Eric's Blog » 在甲骨文 ARM 实例上编译安装 GAMESS

Not Comment Found