mpich2下用ifort10编译nwchem5.1老是在最后link时出现某些“未定义”错误,试了下openmpi(版本1.2.6),似乎是成功了,没有严重的错误提示。一切先用默认模式安装openmpi。
<1>Open-mpi的安装:
即 tar -xvzf openmpi-xxxx.gz
cd openmpi-xxxx
./configure --prefix=/usr/local/openmpi | tee cfg.log &
make all | tee make.log &
make install | tee makeinstall.log &
末尾出现些subscripts too complex的警告, 但似乎正常结素了。
结果出现 Unfortunately, this installation of Open MPI was not compiled with Fortran 90 support. As such, the mpif90 compiler is non-functional.
结果错误在于没有指定F77=IFORT FC=IFORT ,改正后重新编译成功
可以到EXAMPLES里面测试,MAKE-----MPIRUN -N 4 hello_f90
Hello, world, I am 0 of 4
Hello, world, I am 2 of 4
Hello, world, I am 3 of 4
Hello, world, I am 1 of 4
表明编译正确
-----------------------------------(以下与nwchem的编译无关,与编译好调用mpi有关)
然后把openmpi及其它的bin路径添到.bashrc里。
注意使用它还用设置共享库的位置 ,用.bashrc里添加:
export LD_LIBRARY_PATH=$MPIDIR/lib:$LD_LIBRARY_PATH
或者每次运行mpirun时用 --prefix=/usr/local/openmpi 听说也可以
---------------------------------------------
初步适用了下,openmpi 和 mpich2的区别:
(1)openmpi继承了初代mpi没有系统守护模块(如mpd)的特点,由作业自己随时调用mpirun;感觉上比较方便。
(2)hostfile的写法略有不同,比如mpich里习惯都是 :
而openmpi的对多路或多核心cpu的写法是me> slots=
(3)其它,似乎不怎么明白openmpi用-mca btl(注意是字母L的小写,不是数字1),最郁闷的是没有user manual, 只是在tar包里原来的INSTALL里说明(或许是README,记不清了),btl其实适用面更广,可以在同node里用sharememory,可以在不同nodes间用sockets,但不知为什么默认的通讯模块不是它,好象是什么什么cm的选项,要试试加btl可否加速mpirun作业。
<2> ifort的安装,
到intel主页登记邮件地址注册马上可以收到evaluation的一个授权文件,一样是tar开,cd进去,运行它的安装脚本,一切ok。
需要注意的是,gcc的库在目前的linux中早就舍弃什么什么libc.so.5,如果提示这个出错,不用安装老版本的gcc,自己上google搜下,有i386和x86-64版本的rpm包,专门补充这个换代的旧库文件。注意自己的机器适合什么版本的就ok了,下来rpm -ivh 安装之。
然后是ifort的环境变量设置,可以自己弄,也可以用它现成提供的,一样放入.bashrc或需要的时候自己运行之,即/opt/intel/fc/10.xxx/bin/ifortvars.sh
否则要在/etc/ ld.so.conf里设置好库的位置,否则nwchem运行会出现找不到共享库文件。