其实也不算我的原创,通过网上的资料整理而来,发现大家都麻烦的设置各个版本软件的环境变量,如果出现莫名其妙的问题很难知道问题到底出在哪,或者source了一个脚本发现自己需要的软件path根本不是对应的版本,有了modulefile,这样狗血的情况基本不会发生了,当然,免费软件偶尔也会有的小bug的。下面是软件英文介绍翻译过来的
软件介绍
Modules environment描述这是一个系统允许你很容易的在各个编译器好软件版本中转换,无论你使用什么shell,每次不需要手动设置环境变量,以下是作者感言: module 模块是数据库和一系列脚本的集合,简化shell的初始化,允许用户在工作过程中很容易的修改环境变量,module模块减少unix环境变量的维护难度,提供了一种机制通过一个方式动态修改应用环境。 适应对象 suse 工作站和所有其他server除了Chimaera and Athens,插一句,旁白:在rhel6环境工作ok 源代码http://modules.sourceforge.net/,旁白:网上可以搜到很多需要自己编译的软件版本,软件洒家也编译过,但是这个东西不是编译不了,是编译完死活也运行不起来,提示tcl无法初始化,试过各种tcl的版本,就在几乎绝望的时候为了安装方便为RHEL配置了centos的源,然后狗血的发现里面竟然有tcl,后来又在sourceforge发现了编译好的module filels,终于在一堆默认的路径下把module filels run 起来了,如果有大侠知道如何设置tcl环境那是极大的感谢。
Licence detailsGPL 用户手册
基本信息
机器可能有不同版本的fortran编译器,库,和其他安装的软件,其中的一部分又有很多版本,会越来越难为用户设置环境变量,特别是需要测试代码,不停的在各个版本间切换,module模块的目的是为终端用户减化该过程。
在很多机器上,module模块是统一的,有的机器上module是在用户login是加载的。旁白:.cshrc,.bashrc登场了
module filels使用以下方式工作,列出可以加载的模块
cen1001@sword:~$ module list
Currently Loaded Modulefiles:
1) modules 3) ifort/8.0 5) nag/5.0
2) ifc 4) pgi/4.0-3(default)
你可以看到它加载了自己,modules,其他的基本都是编译器,旁白:洒家这里是大量的eda工具,好几好几屏。但是可能你不知道这个ifc是干啥的
cen1001@sword:~$ module whatis ifc
ifc : Loads version 7 of the Intel Fortran compiler
cen1001@sword:~$ module help ifc
----------- Module Specific Help for 'ifc' ------------------------
ifc - loads version 7 of the Intel Fortran compiler
Thisadds /usr/local/intel/compiler70/ia32/bin to the PATH and
sets the LM_LICENSE_FILE variable amongst others.
ifc is a highly optimizing Fortran compiler for Intel chips.
It relies on a licence server for compiling, but binaries may
be run without a licence being available. There is a manpage,
and both HTML and PDF documentation in
/usr/local/intel/compiler70/doc .
其中一些modules可能有不同版本,你可以看每个module的版本cen1001@sword:~$ module avail
------------------------- /usr/local/Modules/versions --------------------------
3.1.6
--------------------- /usr/local/Modules/3.1.6/modulefiles ---------------------
fftw/2.1.5/ifc module-cvs null
fftw/3.0.1 module-info pgi/4.0-3(default)
ifc modules pgi/5.0-2
ifort/8.0 mpi/mpich/1.2.5/ifc pgi/5.1-6
mkl/6.0(default) mpi/mpich/1.2.5/pgi pgi/5.2-4
mkl/6.1 nag/5.0 use.own
如果你想看一个模块加载了什么东西cen1001@sword:~$ module display ifort
-------------------------------------------------------------------
/usr/local/Modules/3.1.6/modulefiles/ifort/8.0:
module-whatis Loads version 8.0 of the Intel Fortran compiler
setenv LM_LICENSE_FILE 28518@por.ch.private.cam.ac.uk
append-path PATH /usr/local/intel_fc_80/bin
prepend-path LD_LIBRARY_PATH /usr/local/intel_fc_80/lib
append-path MANPATH /usr/local/intel_fc_80/man
------------------------------------------------------------------
有一些module和其他的软件冲突,比如你可以有一个pgi模块load环境变量,如果我在pgi load 5.2-4之前load了4.0-3,我获得了一个编译错误的信息,这时我需要卸载
4.0-3
cen1001@sword:~$ module unload pgi
cen1001@sword:~$ module load pgi/5.2-或者更省事:cen1001@sword:~$ module swap pgi pgi/5.2-4
今天翻译不完了,明天继续
有些机器有特殊的module,这些module通过一个命令加载了一系列的模块,当进行并行运算,这些运算一般需要load一系列的兼容module,
这种方法能够保证依赖关系正确有效,此时该方法很有用。这些module称为环境或者编译器,这些特殊的module类似于位于你shell中的快捷方式
,除了load module不做其他的处理。
下面删除了一段,使你的环境更加严谨,管理员注意事项dd
加载模块
module load ifort/32/9.0/032
proc ModulesHelp { } {
puts "This is a dummy module; to see what it does type \"module disp [module-info name ]\"\n"
}
module-whatis "This is a dummy module; type \"module disp [module-info name ]\" to see what it does\n"ok,该模块已经加载到你的环境里了。
下面结合ic eda说一下:
首先,你要安装好module file,在安装modulefile之前,要先安装tcl,当然推荐使用sourceforge编译好的modules,有依赖包就去下载,原版的module不是通常情况加载到PATH路径下的,所以which module可能找不到,这时试用一下moduleava,如果安装了会有显示。modules会使用一组文件夹表明所list的软件版本,比如
<lion@hal:/home/lion> cd env/module_files/
. .. codelink ius project specman verdi vipcat
在环境变量里使用module use ~/env/module_files,该module file下面的软件版本就会出现在module list里面,然后选择大家最喜欢的verdi看看里面有些什么,这里面就是实际的软件版本了
. 2006.07 2008.04 2009.01 2009.10 2010.04 2010.10 2011.10
.. 2007.07 2008.10 2009.07 2010.01 2010.07 2011.01 2012.04 2012.10
打开一个看看
#%Module1.0
# verdi and siloti 2012.10 version
######################################################################
# Set Verdi Path
######################################################################
set verdi_home /tools/novas/verdi-201210
setenv VERDI_HOME $verdi_home
setenv SILOTI_HOME $verdi_home
#set the SPS_BATCH_KILL environment variable to 1 when using the esa
#utility in LSF environments
setenv SPS_BATCH_KILL 1
# FSDB set up
# Enable glitch and event sequence dumping
setenv NOVAS_FSDB_ENV_MAX_GLTICH_NUM 0
setenv NOVAS_FSDB_ENV_DUMP_SEQ_NUM on
prepend-path PATH $verdi_home/bin
# Add FsdbDump
##--- for NC simulator -------#
prepend-path LD_LIBRARY_PATH $verdi_home/share/PLI/IUS/LINUX64
##--- for VCS simulator ----#
prepend-path LD_LIBRARY_PATH $verdi_home/share/PLI/VCS/LINUX
#dump fsdb on mult-core workstations
setenv NOVAS_FSDB_PARALLEL 1
#internal optimization
setenv FSDB_NCSIM_OPTIM 1
prepend-path NOVAS_LICENSE_FILE 28001@c0217
大概讲一下,#%Module1.0是表明该文件是module file使用的,不添加该文件版本不会出现在module list里面,下面是软件的说明,在下面就是大家熟悉的部分了,需要注意的是它有自己的语法结构,setenv的变量不能作为内部变量使用,像prepend-path是把该变量加在变量前面,当然它还有很多复杂的语法,大家需要自己研究,我也不会。
好了,写好module file之后重新module ava xx,它就会出现在list里面,然后module load,新的环境就已经加载了,但是实际上老的变量还在,最好把老的module unload。核心东西就这么多,还有很多东西大家可以探索。
|