Intel oneAPI 编译 OpenFOAM 性能提升几何?

英特尔Intel不但卖CPU,还提供一整套的开发工具,比如常用的 Intel C/C++ Compiler 编译器,Intel MPI 并行计算库,这些开发工具被整合到oneAPI这个统一的工具箱中,可通过包管理器和图形界面安装程序方便地安装在不同操作系统平台。使用Intel工具箱编译OpenFOAM源代码,相比直接安装二进制包或使用gcc和openmpi等开源组合编译,可获得不同程度的性能提升,建议发烧级用户尝试。

Intel 开发工具箱的使用方法其实非常简单,不过已有的很多教程是基于老的icc和intel mpi撰写的,我这里根据最新的oneAPI介绍安装方法,可以少走很多弯路。

Intel开发工具的安装方法参考https://www.intel.com/content/www/us/en/develop/documentation/installation-guide-for-intel-oneapi-toolkits-linux/top/installation/install-using-package-managers/apt.html#apt,Ubuntu用户使用apt安装是最方便的,下文的介绍也基于这种安装方式。默认安装目录是/opt/intel/oneapi。主要安装步骤如下

配置密钥和软件源

# download the key to system key ring
wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null

# add signed entry to apt sources and configure the APT client to use Intel repository:
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.listCode language: PHP (php)

更新软件源

sudo apt update

安装基础和高性能计算两个工具箱,包含开发工具和性能测试优化工具

sudo apt install intel-basekit intel-hpckit

这样oneAPI就安装好了,使用时加载环境变量,方式很多,Intel的文档非常详细,https://www.intel.com/content/www/us/en/develop/documentation/get-started-with-intel-oneapi-base-linux/top.htmlhttps://www.intel.com/content/www/us/en/develop/documentation/get-started-with-intel-oneapi-base-linux/top/before-you-begin.html。我推荐的方式是每个终端会话加载一次环境变量

. /opt/intel/oneapi/setvars.sh

可以把这个语句写到OpenFOAM安装目录下的etc/bashrc,这样每次加载OpenFOAM的环境变量都可加载Intel oneAPI的环境变量。

之后修改OpenFOAM安装目录下的etc/bashrc文件,将WM_COMPILER的值改成Icx,注意这里不建议使用Icc,Icc正在被Icx取代;将WM_MPLIB的值改为INTELMPI。

这样就完成了所有修改,之后的编译过程和使用默认参数编译一样,直接在OpenFOAM安装目录运行

./Allwmake -j

有些教程会手动配置Intel工具箱的环境变量,其实大可不必,Intel oneAPI早已准备好一键配置脚本,另外还有module工具的配置文件,方便复杂环境多版本管理,特别适合多用户共用的集群。

编译好之后我运行了李东岳老师发布在CFD中国的基准测试,https://www.cfd-china.com/topic/3988/200%E4%B8%87%E7%BD%91%E6%A0%BC%E5%B9%B6%E8%A1%8C%E7%AE%97%E5%8A%9B%E6%B5%8B%E8%AF%95-openfoam%E7%89%88%E6%9C%AC/133。我的软硬件环境是AMD Ryzen 5600G CPU,2x16GB 3200MHz内存,Windows 11 WSL2 with Ubuntu 20.04,OpenFOAM2112。通过apt包管理器安装的预编译版本,和按照上述步骤使用Intel oneAPI编译的版本,运行时间(Clock Time,sec)对比如下:

Cores
6
4
2
1

Pre-compiled
484
447
484
1062

Intel compiled
640
551
604
1041

可见,预编译版本的效率已经很高,Intel 编译器几乎没有提升。

就这?!都说自己编译软件多么牛,Intel Compiler是世界上最好的编译器,怎么连预编译的二进制程序都不如?一定是小编的打开方式不对,小编偷懒没有编译第三方库,难道原因在这里!编译好完整的第三方库,再进行一次测试,结果如下:

Cores

6
4
2
1

Pre-compiled

484
447
484
1062

Intel compiled(with ThirdParty libraries)
629
552
615
1114

淦啊!丝毫没有变快,难道是Intel Compiler对AMD CPU支持不好?下次试下AMD的编译器AOCC。

常恭

作者: 常恭

略懂 OpenFOAM

发表评论