|
|
Intel Fortran Complier + MPICH 1.2.6 (Beginner Question)
This might be not a MPI question.
I upgraded my F77 compiler to Intel Fortran Compiler(IFC) for some F90
features.
So.. I rebuilt the MPICH to set the default compiler to be IFC by
"./configure -fc=ifort -f90=ifort".
It seemed worked but I am getting this message when I run the
executable file (mpirun -np 4 a.out).
"
/home/david/pi/a.out: error while loading shared libraries: libimf.so:
cannot open shared object file: No such file or directory
p0_19849: p4_error: Child process exited while making connection to
remote process on david.me.ps.edu: 0
/usr/local/bin/mpirun: line 1: 19849 broken pipe /home/david/pi/a.out
-p4pg /home/david/pi/PI19723 -p4wd /home/david/pi
"
This problem does not occur if I use only one process.
I actually used one physical processor to test this the sample pi3d.f
program by threading and It worked when I used f77 compiler. It looks
to me that the remote processes can not find the path the IFC library.
I defined the path in .bash_profile file, but remote processes don't
know the path to the library.
Does anyone know how to define paths to the remote processes? or solve
this problem? I temporary avoid this problem by compiling statically.
Please Help!!
|
|
0
|
|
|
|
Reply
|
syraero
|
2/24/2005 9:02:36 PM |
|
Hi,
as you can guess, there is more than one solution.
1. My personal taste is, to include Intel specific libs statically,
and only the common Linux ones dynamically. I simply renamed the *.so
files in the Intel dirs with "rename .so .so.disbaled *.so" and don't
have to worry about it any longer.
2. With PATH to the libs you mean LD_LIBRARY_PATH? With some Linux
distributions, also .bashrc is sourced. If you have root access, you
could also try to change /etc/profile.local in some Linux
distributions.
3. You can advice the linker, to include the full path to the libs, and
not only the name. But this will only work on identically configured
machines then. In ifc.cfg in the bin dir of the compiler:
-Xlinker -rpath -Xlinker /opt/intel/compiler70/ia32/lib
-I/opt/intel/compiler70/ia32/include
In 7.1 this was the default, no longer since 8.0. So just adjust this
line to your locations in 8.1.
To check what's in the executable:
readelf -d <mypgm>
Cheers - Reuti
In article <422cb3de.0502241302.490bf878@posting.google.com>, Jin
<syraero@gmail.com> wrote:
> This might be not a MPI question.
>
> I upgraded my F77 compiler to Intel Fortran Compiler(IFC) for some F90
> features.
> So.. I rebuilt the MPICH to set the default compiler to be IFC by
> "./configure -fc=ifort -f90=ifort".
> It seemed worked but I am getting this message when I run the
> executable file (mpirun -np 4 a.out).
>
> "
> /home/david/pi/a.out: error while loading shared libraries: libimf.so:
> cannot open shared object file: No such file or directory
> p0_19849: p4_error: Child process exited while making connection to
> remote process on david.me.ps.edu: 0
> /usr/local/bin/mpirun: line 1: 19849 broken pipe /home/david/pi/a.out
> -p4pg /home/david/pi/PI19723 -p4wd /home/david/pi
>
> "
>
> This problem does not occur if I use only one process.
>
> I actually used one physical processor to test this the sample pi3d.f
> program by threading and It worked when I used f77 compiler. It looks
> to me that the remote processes can not find the path the IFC library.
> I defined the path in .bash_profile file, but remote processes don't
> know the path to the library.
>
> Does anyone know how to define paths to the remote processes? or solve
> this problem? I temporary avoid this problem by compiling statically.
>
> Please Help!!
|
|
0
|
|
|
|
Reply
|
Reuti
|
2/24/2005 11:15:19 PM
|
|
Thank you so much. Reuti.
I used the third option to take care of the problem.
Again. Thank you very much!!!
Reuti <reuti@mymac.hu> wrote in message news:<250220050015199617%reuti@mymac.hu>...
> Hi,
>
> as you can guess, there is more than one solution.
>
> 1. My personal taste is, to include Intel specific libs statically,
> and only the common Linux ones dynamically. I simply renamed the *.so
> files in the Intel dirs with "rename .so .so.disbaled *.so" and don't
> have to worry about it any longer.
>
> 2. With PATH to the libs you mean LD_LIBRARY_PATH? With some Linux
> distributions, also .bashrc is sourced. If you have root access, you
> could also try to change /etc/profile.local in some Linux
> distributions.
>
> 3. You can advice the linker, to include the full path to the libs, and
> not only the name. But this will only work on identically configured
> machines then. In ifc.cfg in the bin dir of the compiler:
>
> -Xlinker -rpath -Xlinker /opt/intel/compiler70/ia32/lib
> -I/opt/intel/compiler70/ia32/include
>
> In 7.1 this was the default, no longer since 8.0. So just adjust this
> line to your locations in 8.1.
>
>
> To check what's in the executable:
>
> readelf -d <mypgm>
>
> Cheers - Reuti
>
>
> In article <422cb3de.0502241302.490bf878@posting.google.com>, Jin
> <syraero@gmail.com> wrote:
>
> > This might be not a MPI question.
> >
> > I upgraded my F77 compiler to Intel Fortran Compiler(IFC) for some F90
> > features.
> > So.. I rebuilt the MPICH to set the default compiler to be IFC by
> > "./configure -fc=ifort -f90=ifort".
> > It seemed worked but I am getting this message when I run the
> > executable file (mpirun -np 4 a.out).
> >
> > "
> > /home/david/pi/a.out: error while loading shared libraries: libimf.so:
> > cannot open shared object file: No such file or directory
> > p0_19849: p4_error: Child process exited while making connection to
> > remote process on david.me.ps.edu: 0
> > /usr/local/bin/mpirun: line 1: 19849 broken pipe /home/david/pi/a.out
> > -p4pg /home/david/pi/PI19723 -p4wd /home/david/pi
> >
> > "
> >
> > This problem does not occur if I use only one process.
> >
> > I actually used one physical processor to test this the sample pi3d.f
> > program by threading and It worked when I used f77 compiler. It looks
> > to me that the remote processes can not find the path the IFC library.
> > I defined the path in .bash_profile file, but remote processes don't
> > know the path to the library.
> >
> > Does anyone know how to define paths to the remote processes? or solve
> > this problem? I temporary avoid this problem by compiling statically.
> >
> > Please Help!!
|
|
0
|
|
|
|
Reply
|
syraero
|
3/7/2005 6:10:05 PM
|
|
syraero@gmail.com (Jin) writes:
> This might be not a MPI question.
>
> I upgraded my F77 compiler to Intel Fortran Compiler(IFC) for some F90
> features.
> So.. I rebuilt the MPICH to set the default compiler to be IFC by
> "./configure -fc=ifort -f90=ifort".
> It seemed worked but I am getting this message when I run the
> executable file (mpirun -np 4 a.out).
>
> "
> /home/david/pi/a.out: error while loading shared libraries: libimf.so:
> cannot open shared object file: No such file or directory
Your problem is that MPICH does not pass environment variables so in
particular LD_LIBRARY_PATH which the standard Intel compiler install
relies on to communicate the shared library directory to executables.
There are several ways around this
1) Put the "setenv LD_LIBRARY_PATH /opt/intel_fc_80/lib" into the
.cshrc file on the target machines (or the bash equivalent) so
that this is set on process startup.
2) Link statically with the support libs - use the link-time flags
"-i-static -static-libcxa". You will need to do this if your
"run" processor system does not share the ifc install path with
the machine you compile on.
3) Add the library directory to /etc/ld.so.conf and run "ldconfig".
This makes LD_LIBRARY_PATH unnecessary.
4) Compile the actual path into your executable, eg by
-Wl,--rpath=/opt/intel_fc_80/lib
Keith Refson
--
Dr Keith Refson,
Building R3
Rutherford Appleton Laboratory
Chilton
Didcot
Oxfordshire OX11 0QX
T: 01235 778023 K.Refson@
F: 01235 445720 @rl.ac.uk
|
|
0
|
|
|
|
Reply
|
nobody
|
3/7/2005 7:37:18 PM
|
|
|
3 Replies
482 Views
(page loaded in 0.049 seconds)
|
|
|
|
|
|
|
|
|