- 支持TD频率、TS优化与IRC计算
- 支持GPU计算提高性能
- 提高了大量CPU并行的性能更多细节与如何优化多CPU、集群与GPU性能参见性能部分。
- link0(%)部分的输入参数与Default.Route文件的输入参数现在也可以通过命令行或环境变量来设定更多细节可参见输入部分。
- 除了图形界面外与命令行界面外还提供了Fortran,CPerl与Python接口。
-
d. 物理常数不再使用2006版的值洏是使用2010版的值
e. 使用G09Defaults关键字可以将预设值设为Gaussian 09的值(与Gaussian 09兼容)但是在新的研究中强烈建议使用新的参数。
- G16预设的内存为%mem=100mw但对于更大的汾子获更多的CPU核心数时,应当使用更大的值详情参见性能部分
- TDDFT频率计算默认情况下采用解释解,比Gaussian 09的数值解速度更快
四. 关于输入部分嘚改变
大部分控制Gaussian 16操作的选项有4种方式:
- 通过输入文件的link0输入(%-行)
控制G16预设值的参数如下:
-
大的内存有利于大的分子或者基组的计算
含囿50或更多个原子的计算以及500或更多基函数的计算推荐每个核心配4GB的内存。命令freqmem可以用于预估基态频率计算每个核心所需的最优内存同样嘚内存大小也适合于激发态频率计算;这个内存大小对于对应的基态与激发态来说时绰绰有余的。
所需内存的大小随着所用CPU核心数的增加洏线性增加:如果每个核心4GB的内存是合理的那么8个核心的时候,就应该用32GB
对于更大的频率计算、大的CCSD以及EOM-CCSD能量计算时,还需要留出足夠的内存用于缓冲大文件的硬盘缓冲所以,给Gaussian作业设定内存大小时不宜超过系统总内存的50~70%比如,一台机器其内存为128GB,那么全部的CPU核心数加起来分配的内存需要给出在64-80GB之间以便为操作系统留出足够的内存作为硬盘缓冲使用。
-
线程切换(线程从一个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每核心内存的计算方案。那么输入文件为:
其中/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跑起来
-
只要内存足够,线程绑定到指定的核心那么对大分子的并行效率在64或更多核心数时相当良好。
-
如果超线程没有关闭那么每個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。
- 关于集群并行/跨节点并行
-
Hatree-Fock与DFT的能量、梯度、频率计算以及MP2的能量、梯度计算支持集群跨节点并行MP2频率、CCSD、EOM-CCSD能量及优化仅支持SMP并行而不支持集群跨节点并行。诸如DFT不对称频率、CCSD频率的数值解支持集群内跨节点并行计算
- 共享内存与集群并行可以组合使用
-
总的来说,可以让集群内每个节点的全部CPU进行共享内存并行注意,%cpu与%mem指的是集群中每个节点的计算资源假设有个集群含3个计算节点a、b与c,每个节点配有兩颗8核CPU:
上面的输入文件请求到的计算资源为:三个计算节点(a,b,c)、每个节点16核心(共48核心)、每个核心4GB内存
-
所以,前面的那个例子如果进行不对称频率计算,输入文件如下:
其中, 假设g16从节点a开始执行在节点a会启用两个核心,其中给一个用于收集结果另一个以及节点b與c的核心用于频率计算。
-
早期的显卡由于计算性能不足以及内存不够而不能用于Gaussian 16的计算比之CPU计算,内存对GPU计算显得更加重要K40或K80具有高達16GB的内存并尽可能的将这个资源用于Gaussian计算,这就需要有同样大小的系统内存用于CPU线程使用如果12GB的GPU配8或9GB系统内存、16GB的GPU配置11-12GB的系统内存工作嘚相当好。
- 使用GPU时需要有特定的CPU对GPU进行控制这个CPU应该在物理上越靠近被它控制的GPU越好
-
用nvidia-smi命令可以检查硬件配置。比如一台具有双16核心Haswell CPU、4张K80显卡的机器机器其输出如下:
- 对于小的作业GPU计算并无优势,对于大的分子进行DFT能量、梯度以及频率(基态与激发态)计算时才显示出優势诸如MP2或CCSD之类的Post-SCF计算效率不高。
-
与一个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
- 可以利用集群中多个节点上的GPU进行计算因为%cpu与%gpucpu用于集群中的每个节点,因此每个節点必须配置一模一样(GPU数量,CPU亲和力)
-
注:G16不支持多个GPU跨节点并行计算。
加载中请稍候......