G16特性速览
一. G16的主要更新
Gaussian系列软件是美国Gaussian公司发布的最新的版本为Gaussian 16(G16, 高斯16) Revision A.03, 简称G16 A.03。G16的主要更新包括:
- 支持TD频率、TS优化与IRC计算
- 非简谐振动光谱
- 电子振动光谱等
- EOMCC优化
- 新的密度泛函:M08 family, MN15, MN15L
- 新的双杂化密度泛函:DSDPBEP86, PBE0DH与PBEQIDH
- PM7半经验方法
- 支持GPU计算提高性能
- 支持Fortran、C、Perl与Python的接口
二. 关于应用
- NVIDIA GPU支持Hartree-Fock与DFT计算,性能细节参见性能部分。
- 提高了大量CPU并行的性能,更多细节与如何优化多CPU、集群与GPU性能参见性能部分。
- link0(%)部分的输入参数与Default.Route文件的输入参数现在也可以通过命令行或环境变量来设定,更多细节可参见输入部分。
- 除了图形界面外与命令行界面外,还提供了Fortran,C,Perl与Python接口。
三. 关于预设值的改变(与Gaussian 09比)
- 在Gaussian 16里使用了不同于Gaussian 09的预设参数/值:
- G16预设的内存为%mem=100mw。但对于更大的分子获更多的CPU核心数时,应当使用更大的值,详情参见性能部分
- TDDFT频率计算默认情况下采用解释解,比Gaussian 09的数值解速度更快。
a. 积分精度由10^-10变为10^-12
b. DFT格点(DFT grid)由FineGrid变为UltraFine; CPHF的预设格点由CoarseGrid变为SG1
c. SCRF预设为IEFPCM的对称形式(symmetric form, 在Gaussian 09里没有)而不是原先的非对称版本(non-symmetric)
d. 物理常数不再使用2006版的值而是使用2010版的值
e. 使用G09Defaults关键字可以将预设值设为Gaussian 09的值(与Gaussian 09兼容),但是在新的研究中强烈建议使用新的参数。
注:对32BIT机器而言1mw=3.81mb;对64BIT机器而言1mw=7.63mb。
四. 关于输入部分的改变
大部分控制Gaussian 16操作的选项有4种方式:
- 通过输入文件的link0输入(%-行)
- 通过命令行输入
- 通过环境变量输入
- 通过Default.Route文件输入
在搜索Default.Route文件时候,先搜索默认目录,再搜索Gaussian 16可执行路径的目录(环境变量GAUSS_EXEDIR, 指向$g16root/g16)。
控制G16预设值的参数如下:
输入行 | 命令行 | 环境变量 | Default.Route | 含义 |
---|---|---|---|---|
%cpu=… | -c=”…” | GAUSS_CDEF “…” | -C- … | which CPUs to use |
%gpucpu=… | -g=”…” | GAUSS_GDEF “…” | -G- … | which GPUs to use and bind to which CPUs. |
%usersh | -s=”rsh” | GAUSS_SDEF “rsh” | -S- rsh | Linda should use rsh to start workers |
%usessh | -s=”ssh” | GAUSS_SDEF “ssh” | -S- ssh | Linda should use ssh to start workers |
%lindaworkers=… | -w=”…” | GAUSS_WDEF “…” | -W- … | which nodes to use with Linda |
-r=”…” | GAUSS_RDEF “…” | -R- … | defaults for route | |
-h=”…” | GAUSS_HDEF “…” | -H- … | hostname for archive entry | |
-o=”…” | GAUSS_ODEF “…” | -O- … | organization/site for archive entry | |
GAUSS_FDEF “…” | -F- … | default type for formchk (-c, -3, etc.) | ||
GAUSS_UDEF “…” | -U- … | default memory size for utilities. | ||
# | -x=”…” | GAUSS_XDEF “…” | complete route for job (no route section will be read from the input file). | |
%chk= | -y=”…” | GAUSS_YDEF “…” | checkpoint file for job. | |
%rwf= | -z=”…” | GAUSS_ZDEF “…” | read-write file for job. |
在G16中不再推荐使用%nprocshared与%nprolinda来控制作业。
五. 并行与性能部分
I.共享内存并行(Shared-memory parallelism, SMP)
- 大的内存有利于大的分子或者基组的计算
含有50或更多个原子的计算以及500或更多基函数的计算推荐每个核心配4GB的内存。命令freqmem可以用于预估基态频率计算每个核心所需的最优内存,同样的内存大小也适合于激发态频率计算;这个内存大小对于对应的基态与激发态来说时绰绰有余的。
所需内存的大小随着所用CPU核心数的增加而线性增加:如果每个核心4GB的内存是合理的,那么8个核心的时候,就应该用32GB。
对于更大的频率计算、大的CCSD以及EOM-CCSD能量计算时,还需要留出足够的内存用于缓冲大文件的硬盘缓冲。所以,给Gaussian作业设定内存大小时不宜超过系统总内存的50~70%。比如,一台机器,其内存为128GB,那么全部的CPU核心数加起来分配的内存需要给出在64-80GB之间,以便为操作系统留出足够的内存作为硬盘缓冲使用。
- 线程切换与开销
- 只要内存足够,线程绑定到指定的核心,那么对大分子的并行效率在64或更多核心数时相当良好。
- 超线程对Gaussian没有用处
线程切换(线程从一个CPU切换到另一个CPU)时存在效率损失,从而使得缓冲失效以及引起其它线程开销。在大部分机器上,Gaussian将线程绑定到特定的CPU上,这是推荐的作业模式,尤其是用大量的CPU核心计算的时候。Link0的%CPU行可以指定特定CPU的核心号。因此,在一个8核的机器芯片上用%cpu=0-7而不用%nproc=8,因为前者将第一个线程指派给CPU 0(核心 0),下一个给CPU 1,如此类推。
早期的Intel处理器(Nehalem或更早期的处理器)由于内存带宽不够而没有办法让一个芯片(CPU)上的全部CPU核心处于忙碌状态,通常只利用一半的CPU核心,而内存设定为两倍就像全部CPU核心都被使用了一样。比如一台4路12核(4个CPU,每个CPU含有12个核心)、128GB内存的计算机,该机器具有48个CPU核心:第一个CPU的0-11号CPU核心,第二个CPU的12-23号CPU核心, 第三个CPU的24-35号核心,第四个CPU的36-48核心等等。对于这样的机器,最佳的CPU与内存分配方案是:24核心(每个CPU6个核心)、每核心3GB内存(72/24=3GB内存每核心)而不是48核心与1.5GB每核心内存的计算方案。那么输入文件为:
%mem=72GB
%CPU=0-47/2
其中/2的意思是每隔一个核心使用,比如第一个CPU(0 号CPU)核心号为0、2、4、6、8、10的CPU核心,第二个CPU(1号CPU)核心号为12、14、16、18、20、22的CPU核心等等。
较新的Intel处理器(Haswell或更新的CPU)其内存带宽足够,可以让全部的CPU跑起来。
如果超线程没有关闭,那么每个Gaussian作业在一个物理核心上只能用一个线程。在Linux操作系统里,不同处理器的超线程被组合在一起。假设有一个机器有两颗CPU(CPU 0, CPU 1)、每颗有8个物理核心、共32个“核心”。那么,0-7为CPU 0的8个核心,8-15为CPU 2的8个核心; 16-23为CPU 0的第二个超线程,24-31为CPU 1的的第二个超线程。所以,该机器最佳的CPU使用方式为%CPU=0-15。
II.集群并行(Cluster/Linda)并行/跨节点并行
- 关于集群并行/跨节点并行
- 共享内存与集群并行可以组合使用
- 在数值微分的计算里(Freq=Anharm, CCSD Freq等),需要设定一个额外的CPU核心去搜集结果
Hatree-Fock与DFT的能量、梯度、频率计算以及MP2的能量、梯度计算支持集群跨节点并行。MP2频率、CCSD、EOM-CCSD能量及优化仅支持SMP并行而不支持集群跨节点并行。诸如DFT不对称频率、CCSD频率的数值解支持集群内跨节点并行计算。
总的来说,可以让集群内每个节点的全部CPU进行共享内存并行。注意,%cpu与%mem指的是集群中每个节点的计算资源。假设有个集群含3个计算节点a、b与c,每个节点配有两颗8核CPU:
%mem=64GB
%cpu=0-15
%lindaworkers=a,b,c
#p b31yp/6-31g* freq
上面的输入文件请求到的计算资源为:三个计算节点(a,b,c)、每个节点16核心(共48核心)、每个核心4GB内存。
所以,前面的那个例子,如果进行不对称频率计算,输入文件如下:
%mem=64GB
%cpu=0-15
%lindaworkers=a:2,b,c
#p b31yp/6-31g* freq=anharm
其中, 假设g16从节点a开始执行。在节点a会启用两个核心,其中给一个用于收集结果,另一个以及节点b与c的核心用于频率计算。
III. GPU的使用
- Linux版的Gaussian 16支持NVIDIA K40与K80 GPU显卡计算
- 使用GPU时需要有特定的CPU对GPU进行控制,这个CPU应该在物理上越靠近被它控制的GPU越好
- 对于小的作业GPU计算并无优势,对于大的分子进行DFT能量、梯度以及频率(基态与激发态)计算时才显示出优势。诸如MP2或CCSD之类的Post-SCF计算效率不高。
- 可以利用集群中多个节点上的GPU进行计算。因为%cpu与%gpucpu用于集群中的每个节点,因此,每个节点必须配置一模一样(GPU数量,CPU亲和力)。
早期的显卡由于计算性能不足以及内存不够而不能用于Gaussian 16的计算。比之CPU计算,内存对GPU计算显得更加重要。K40或K80具有高达16GB的内存并尽可能的将这个资源用于Gaussian计算,这就需要有同样大小的系统内存用于CPU线程使用。如果12GB的GPU配8或9GB系统内存、16GB的GPU配置11-12GB的系统内存工作的相当好。
用nvidia-smi命令可以检查硬件配置。比如,一台具有双16核心Haswell CPU、4张K80显卡的机器机器其输出如下:
重点是其中的CPU亲和力(CPU affinity)。上述输出说明GPU 0与1(在第一个K80卡上)。
与一个CPU相比,每个GPU的计算速度是CPU的好几倍。但是,一台机器上的CPU数量通常比GPU多很多,尽可能地利用全部的CPU与GPU进行计算是很重要的事,那么从GPU上获得的加速就会减少,因为多CPU计算自身的效率也是很高的。比如,如果1张GPU比一个CPU速度快5倍, 那么从1个CPU到1个CPU+1个GPU的加速将会是5倍, 但是从32CPU到32CPU+8个GPU的加速为32CPU—>24CPUs + 8 GPU, 等于24 + 5 x 8 = 64 CPU, 加速比为64/32或2x。
注:G16不支持多个GPU跨节点并行计算。
IV. CCSD, CCSD(T)以及EOM-CCSD 计算
这些计算可以使用内存来避免I/O以提高效率。如果有O个活性占据轨道(active occupied orbitals, NOA)与V个虚轨道(virtual orbitals, NVB), 那么所需的内存大约为9 x O^2 x V^2 words。这不取决于所用的计算核心数。
六. 软件报价、采购联系我们
请填写下面表格,索要报价,请在留言里注明操作系统:比如Linux版
[contact-form-7 id=”832″ title=”contact”]