计算化学公社

标题: 用 OMP_NUM_THREADS 环境变量控制 Multiwfn(for Linux) 并行线程数的补丁 [打印本页]

作者
Author:
stecue    时间: 2017-4-25 02:54
标题: 用 OMP_NUM_THREADS 环境变量控制 Multiwfn(for Linux) 并行线程数的补丁
本帖最后由 stecue 于 2017-4-25 02:55 编辑

OMP_NUM_THREADS是控制OpenMP并行线程数的标准环境变量。Multiwfn的内置控制方法虽然便于理解,但是写成脚本使用时就不太方便。如果支持OMP_NUM_THREADS环境变量,可以直接用OMP_NUM_THREADS=n Multiwfn 来指定并行线程数为n(如果不指定则使用最大可用线程数),用到脚本里或者在.bashrc里写成alias就很方便,尤其适合手头上有多台计算机、多种并行环境的情况。为此,我稍微修改了一下3.3.9的源文件,包括补丁在内的源码在附件中。另外,为了减小附件体积,我直接在make文件里要求静态链接mkl库,一般安装有ifort的机器都附带mkl核心库(即使没有单独安装MKL),应该不会出现找不到库文件的情况。

(, 下载次数 Times of downloads: 12)

用法:下载解压后在bash中直接运行./Multiwfn_noGUI.sh 即可,请确保安装了intel fortran compiler,如果有intel MKL更好。如果一切正常,你应该可以在Multiwfn_3.3.9_src_Linux/noGUI中找到编译好的支持OMP_NUM_THREADS的Multiwfn。你仍然可以用菜单设置并行线程数。逻辑是:如果交互菜单设置的并行线程数不为0,则由菜单设置的并行线程数决定实际线程数。如果菜单设置的并行线程数为0(这是默认情况),则由环境变量OMP_NUM_THREADS决定。如果没有OMP_NUM_THREADS环境变量,则使用OpenMP的最大默认线程数。对于使用单个8核16线程CPU的机器,就是16。
作者
Author:
wuy069    时间: 2017-4-25 08:14
嗯,在Linux上提交Multiwfn作业,特别是在集群上多用户同时使用multiwfn,每次都要用sed来替换nthread核数,然后把settings.ini重定向到用户提交作业的当前目录下,尽管是用脚本改。非常感谢!!!
作者
Author:
wuy069    时间: 2017-4-25 10:22
把修改后define.f90里的这两行去掉
PRINT *, 'OMP_NUM_THREADS = ', currNThreads
PRINT *, 'Number of threads = ', rtNThreads

没必要加上这两行,Multiwfn在最开始就会判断并行的核数;加上这两行,输出文件每进行下一步时都会输出OMP_NUM_THREADS = 和 Number of threads =,觉得没多大必要,原谅我有小小的强迫症。自己编译时已改

不过还是希望Sob大神在以后的linux版本中增加OMP_NUM_THREADS环境变量控制并行核数。
作者
Author:
stecue    时间: 2017-4-25 10:38
wuy069 发表于 2017-4-25 08:14
嗯,在Linux上提交Multiwfn作业,特别是在集群上多用户同时使用multiwfn,每次都要用sed来替换nthread核数 ...

嗯,我没设过settings.ini,那个看代码似乎是等价于交互式菜单设定,好像优先级比OMP_NUM_THREADS高吧?如果有旧的settings.ini可能还要把nthreads改成0哈。
作者
Author:
stecue    时间: 2017-4-25 10:45
wuy069 发表于 2017-4-25 10:22
把修改后define.f90里的这两行去掉
PRINT *, 'OMP_NUM_THREADS = ', currNThreads
PRINT *, 'Number of t ...

所以如果 sob 大神直接把代码放到 github 上,大家提交补丁就方便多了啊哈。




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3