GenELPA是使用ELPA作为计算核心求解广义本征值的工具。该程序接口简单,易于使用。
ELPA是一种高性能的、尤其在大规模并行时效率特别高的本征值求解器,在多种第一性原理计算软件中都有应用。该程序是马普研究所开发,核心程序由FORTRAN编写,并提供了C的接口。
从2011年第一版发布以来,ELPA先后使用了两种API,一种是2016.05.004以及之前的版本使用的直接调用计算函数的传统接口;另一种是2016.11.001以及之后版本使用的采用handle来传递计算配置参数的新接口。采用新接口以后,ELPA增加了直接求解广义本征值的函数和对GPU的支持。
我们之前曾经针对ELPA做过一个求解广义本征值的扩展程序GenELPA,它提供了直接求解广义本征值的函数以及分步求解的功能,并增强了在求解各种矩阵时的健壮性。该程序在我校超算中心的曙光TC4600超级计算系统上测试结果表明有效并行规模可达4000 CPU核心以上。随后,我们将该程序应用在ABACUS中,实践表明能够稳定工作。
新接口的ELPA已经支持广义本征值的直接求解,但我们在使用过程中发现存在以下问题:
- 在求解某些矩阵时计算不太稳定;
- 某些情况下会有不必要的屏幕输出(2021.05.002版);
- 只提供了FORTRAN和C的接口,使用C++的程序调用时需要特别设置。
因此,我们在原有GenELPA的基础上,重新编写了符合C++标准,能够支持广义本征值求解的新版GenELPA,解决了这些问题。同时,考虑到旧版API的ELPA仍然有广泛的应用,我们在新的程序中也支持了旧版API的ELPA。为了兼容性和易于使用,我们保持了新旧版本的调用方式一致,这样使用ELPA的程序无需更改源代码,只需在编译时链接不同的库文件,即可使用新旧不同API的ELPA。
ELPA本身提供了很多可选的解算内核(kernel),使用不同的kernel对性能有显著的影响。在GenELPA中,我们还增加了根据运行服务器的CPU类型自动选择kernel的功能,用户在默认配置下即可获得很好的计算效率。
GenELPA发布于: https://github.com/pplab/GenELPA,欢迎大家使用。如果有问题或者希望超算中心协助优化相关程序,请和超算中心(0551-63602248, sccadmin@ustc.edu.cn)联系。