linux64 gaussian 16,Gaussian 16 运行与硬件配置参考
一. Gaussian 16的主要更新
Gaussian系列軟件最新的版本為Gaussian
16(G16,?高斯16) Revision A.03, 簡稱G16 A.03。G16的主要更新包括:
支持TD頻率、TS優化與IRC計算
非簡諧振動光譜
電子振動光譜等
EOMCC優化
支持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的預設參數/值:
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兼容),但是在新的研究中強烈建議使用新的參數。
G16預設的內存為%mem=100mw。但對于更大的分子獲更多的CPU核心數時,應當使用更大的值,詳情參見性能部分
注:對32BIT機器而言1mw=3.81mb;對64BIT機器而言1mw=7.63mb。
TDDFT頻率計算默認情況下采用解釋解,比Gaussian 09的數值解速度更快。
四. 關于輸入部分的改變
大部分控制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之間,以便為操作系統留出足夠的內存作為硬盤緩沖使用。
線程切換與開銷
線程切換(線程從一個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跑起來。
只要內存足夠,線程綁定到指定的核心,那么對大分子的并行效率在64或更多核心數時相當良好。
超線程對Gaussian沒有用處
如果超線程沒有關閉,那么每個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)并行/跨節點并行
關于集群并行/跨節點并行
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內存。
在數值微分的計算里(Freq=Anharm, CCSD Freq等),需要設定一個額外的CPU核心去搜集結果
所以,前面的那個例子,如果進行不對稱頻率計算,輸入文件如下:
%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顯卡計算
早期的顯卡由于計算性能不足以及內存不夠而不能用于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顯卡的機器機器其輸出如下:
重點是其中的CPU親和力(CPU affinity)。上述輸出說明GPU 0與1(在第一個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
+ 8 GPU, 等于24 + 5 x 8 = 64 CPU, 加速比為64/32或2x。
可以利用集群中多個節點上的GPU進行計算。因為%cpu與%gpucpu用于集群中的每個節點,因此,每個節點必須配置一模一樣(GPU數量,CPU親和力)。
注: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
(1mw =3.81gb)。這不取決于所用的計算核心數。
總結
以上是生活随笔為你收集整理的linux64 gaussian 16,Gaussian 16 运行与硬件配置参考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java gc时自动收dump_Full
- 下一篇: idea tomcat启动成功但是访问方