2008年10月10日星期五

在Macpro的OpenSUSE10.3下安装mpich-1.2.7p1-globus2的总结

在安装mpich-1.2.7p1-g2的时候遇到一点奇怪的问题:

有三台Macpro的机器,都安装了globus-4.0.7和 pgi-7.1.5。想要在上面配置mpich-g2的时候(使用命令./configure -cc=gcc -c++=g++ -fc=g77 -f90=g77 --with-arch=LINUX --with-device=globus2:-flavor=gcc64dbg --prefix=/home/zhong/mpich-1.2.7p1-g2-gnu 2>&1 | tee configure-g2-gnu.log),发现其中有两台配置出来的bin/mpich-globus2-f77脚本中的“GC=/usr/bin /gfortran”,而其中一台竟然是“GC=pgf77”,都不是上面指定的g77,无论怎样修改都不会改变成别的编译器。即使是彻底删除了pgi的 安装目录和PATH里的路径都不行,到底是哪里出问题了呢?

回忆一下三台机器的区别,在于那台pgf77的机器是先用root安装完了 pgi编译器之后,再安装的globus,而其他两台都是安装完了globus之后再安装的pgi编译器。难道是后安装globus的时候发现了pgi的 编译器(它也知道哪个比较好^_^)所以就给记录到什么配置文件里去了么?

于是全盘查找所有包含pgf77字符的文件,果然在 globus安装目录里出来了几个,其中赫然出现flavor_gcc64dbg.gpt这样的东西。这还了得,这不是上面对mpich-g2进行配置时 的选项么--with-device=globus2:-flavor=gcc64dbg,这样肯定会有问题吧。于是修改了/usr/local /globus-4.0.7/etc/globus_core/flavor_gcc64dbg.gpt这个文件,把pgf77换成了g77,再次配置, 还是和原来一样(因为c的编译器他默认选用gnu的,而fortran的用pgi的,所以Fortran programs can link with needed C functions显示为no),默认还是使用pgf77,而且因为不能和gnu的c进行链接,所以直接把fortran支持给关闭了,make不出来 mpif77。

这下可要发飙了,把所有看着有问题的文件中的pgf77全改成g77,再次configure,这下世界终于恢复正常了。 漂亮的configure和make完成。然后进入example/basic目录make一下,全部例子都可以正常编译,再找个自己的mpi代码编译一 下,也可以。

哇,mpich-g2终于可以安装好了。



这里总结一下目前遇到的大问题:

  1. 不能使用g77升级成gfortran以后的版本(应该指的就是gcc4.0以上,我目前使用的是OpenSUSE10.3网上仓库提供的 g77-3.3.3和10.3DVD中提供的gcc4.2.1)对mpich进行configure,否则mpich-globus2-f77 works with GETARG and IARGC... no,Error configuring the Fortran subsystem!Turning off Fortran support。可是低版本的g77不支持openmp,这样就没法用mpif77编译混合代码了,这是个令人头疼的问题。
  1. intel的icc和ifort配置mpich通不过,pgi的pgcc和pgf77也通不过(6.0版本的虽然发布于mpich- 1.2.7p1之前,但因为是2005年的版本过于陈旧,不支持现在OpenSUSE10.3,只有7.1才开始支持)。不过现在回想一下,好像它们都是 报mpich-globus2-f77 works with GETARG and IARGC... no的错,不过也有上来就报Fortran programs can link with needed C functions... no,Fortran support being turned off的。

    像这种Fortran programs can link with needed C functions... no的错误一看就应该是fortran和c的编译器不能链接的问题,应该查看一下bin下的mpich-globus2-cc,mpich- globus2-cxx,mpich-globus2-f77,看它们都是用的什么编译器,如果是不同厂家的,可以考虑像上面文章中那样,修改文章下面提 到的的几对文件,把要使用的编译器硬性调整过来再试试。

    但是我现在觉得好像mpich-globus2-f77 works with GETARG and IARGC... no这种错误也是上面这个问题引起的,下次遇到的时候再试着解决一下。使用pgi的编译器的时候export LIBS="-L/opt/pgi/linux86-64/7.1-5/lib -L/opt/pgi/linux86-64/7.1-5/lib-gh -L/opt/pgi/linux86-64/7.1-5/libso -L/opt/pgi/linux86-64/7.1-5/libso-gh -lpgftnrtl -lpgc"好像没什么作用,mpich-globus2-f77中的LIBS根本就没加上刚才的内容。但是发现mpich buglist for version 1.2.7p1 中提到,对于pgi的fortran编译器和gun的c混合使用的时候,可以使用configure -cc=gcc -fc=pgf77 -lib="-L/usr/local/pgi/linux86/lib -lpgftnrtl -lpgc" ...这种方式配置,也许前面那种网上查到的export的方法不对,这个以后也要试一下

  2. 机器太新,为了支持硬件只好选用比较新版本的linux,可是新版本的系统上有时就使用不了低版本的编译器。而高版本的编译器又编译不了那些 过去的低版本的支撑环境软件包,而且新版本的编译器有时本身就有bug,编译出来的代码运行出了错,都不知道是源代码的问题,还是系统的问题,还是编译器 的问题!!

/usr/local/globus-4.0.7/bin/libtool
/usr/local/globus-4.0.7/sbin/libtool-gcc64dbgpthr
/usr/local/globus-4.0.7/sbin/libtool-gcc64dbg
/usr/local/globus-4.0.7/libexec/globus-build-env-gcc64dbg.sh
/usr/local/globus-4.0.7/libexec/globus-build-env-gcc64dbgpthr.sh
/usr/local/globus-4.0.7/etc/globus_core/flavor_gcc64dbg.gpt
/usr/local/globus-4.0.7/etc/globus_core/flavor_gcc64dbgpthr.gpt


安装mpich-g2成功案例
gcc-4.2.1&g77-3.3.3(自己)
gcc-3.2.2&gfortran-4.1.0安装(网上)

没有评论: