Gaussian运行时该用多少CPU核心?

文章来源:Gaussian的安装方法及运行时的相关问题 - 量子化学 (Quantum Chemistry) - 计算化学公社 (keinsci.com)

  • 如果你的机子打算只跑一个Gaussian任务,那么一般建议CPU有多少物理核心就用多少核数来并行,这样通常最快。若有额外CPU核心闲着也是白白浪费。注意,对于采用了超线程(HT)技术的CPU而且管理机子的人没有把超线程关闭的话,逻辑核心数会是物理核心数的两倍。如果你搞不懂这一点,务必看《正确看待超线程(HT)技术对计算化学运算的影响》(http://sobereva.com/392)。比如,如果你的机子是双路2696v3 CPU,一共有36个物理核心,对应72个逻辑核心,而且你平时只跑一个Gaussian任务,那么Default.Route里的-P-或者输入文件里的%nprocs后面应该写36。

  • 有一个特例是当你跑的任务特别小,比如就是10个原子左右的很小分子在很廉价的B3LYP/6-31G*下做柔性扫描,亦有可能分配诸如96核时反倒比分配16核时更慢。情况实测便知。

  • 计算速度和使用的核数绝对不是理想的线性的正比关系。并行的核数越多,继续增加核数使速度提升的幅度就越低,对越是便宜的计算任务这点越明显。对于Gaussian 16,并行核数用到50核左右就接近速度的极限了,继续提升的余量看具体计算任务。即曰,虽然并行核数越多总耗时越低(不排除极个别例外),但并行效率越低。所以,如果CPU的核数很多,比如你用的是一个2*48=96个物理核心的双路服务器,同时用跑两个48核并行的任务远比跑一个96核的任务更能充分发挥CPU的性能。注意同时跑两个任务时建议把两个任务用%cpu分别绑定在两个不同CPU上以减少资源争抢拖慢速度,详见《淘宝上购买的双路EPYC 7R32 96核服务器的使用感受和杂谈》(http://sobereva.com/653)第6节关于跑Gaussian部分的文字。如果机子核数特别多,比如是128核服务器,有大量任务要跑,那么还可以同时跑4个乃至8个任务,CPU利用程度会更充分。注意所有Gaussian任务调用的核数的总和不要超过机子的物理核心数,且分配给各个任务的可用内存量的总和不能超过空余物理内存量。还要注意有些任务,比如后高阶的HF,不仅特别耗内存,而且读写硬盘量往往非常大,这样的任务别一次跑好几个,要不然可能内存不够直接崩溃,或者在硬盘读写上严重争抢,导致哪个任务都巨慢。

  • 当设定的并行核数超过64时,对于Gaussian 16 B.01及之前的版本来说,Gaussian可能一上来就会报错。解决办法是在~/.bashrc里添加比如export OMP_THREAD_LIMIT=256,这样就把并行核数上限提升到256了,因此就可以使用超过64核并行了。