Hi Brian and list
On my code I have
include 'mpif.h'
with single quotes around the file name.
I use single quotes, but double quotes are also possible according to
the F90 standard.
If you start at column 7 and end at column 72,
you avoid any problems with free vs. fixed Fortran form (which may
happen if one decides
to mess the compiler options on Makefiles, for instance).
This is PDP, paranoid defensive programming.
I type the Fortran commands in lowercase (include) but this may not
really make any difference
(although there are compiler options to transliterate upper to lower,
be/not be case sensitive, etc)
However, since you asked, I changed the "include 'mpif.h'" location to
column 1, column 6,
etc, and I could compile the code with OpenMPI mpif90 without any problems.
Hence, I presume mpif90 uses the free form as default.
So, I wonder if you still have some residual mix of gfortran and ifort
there,
or if there is some funny configuration on your ifort.cfg file choosing
the fixed form as a default.
In any case, going out of scope probably has nothing to do with fixed vs
free form.
I only have one "use mpi" statement, no other modules "used" in the
little hello_f90.
It may well be that if you try other "use" statements, particularly if
the respective modules
involve other MPI modules or MPI function interfaces, things may break
and be out of scope.
I presume you are not talking of hello_f90 anymore, but of a larger code.
The large code examples I have here use other F90 modules (not mpi.mod),
but they don't rely on MPI interfaces.
Glad to know that the main problem is gone (I read the more recent
messages).
I was reluctant to tell you to do a "make distclean", and start fresh,
configure again, make again,
because you said you had built the OpenMPI library more than once.
Now I think that was exactly what I should have told you to do.
Everybody builds these things many times to get them right.
Then a few more times to make it efficient, to optimize, etc.
Can you imagine how many times Rutherford set up that gold foil
experiment until he got it right? :)
After it is done, the past errors become trivial, and all the rest is
reduced just to stamp collecting. :)
Configure is always complex, and dumping its output to a log file is
worth the effort, to check out for sticky problems like this, which
often happen.
(Likewise for make and make install.)
I hope this helps,
Gus Correa
--
---------------------------------------------------------------------
Gustavo J. Ponce Correa, PhD - Email: g...@ldeo.columbia.edu
Lamont-Doherty Earth Observatory - Columbia University
P.O. Box 1000 [61 Route 9W] - Palisades, NY, 10964-8000 - USA
---------------------------------------------------------------------
Brian Harker wrote:
Hi Gus-
Thanks for the idea. One question: how do you position INCLUDE
statements in a fortran program, because if I just straight substitute
' INCLUDE "mpif.h" ' for ' USE mpi ', I get a lot of crap telling me
my other USE statements are not positioned correctly within the scope
and nothing compiles. I have tried various positions, but I seem to
be suffering from a lot of BS. Am I overlooking something very
obvious?
On Mon, Sep 22, 2008 at 5:42 PM, Gus Correa <g...@ldeo.columbia.edu> wrote:
Hi Brian and list
I seldom used the "use mpi" syntax before.
I have a lot of code here written in Fortran 90,
but and mpif.h is included instead "use mpi".
The MPI function calls are the same in Fortran 77 and Fortran 90 syntax,
hence there is just one line of code to change, if one wants to go fully
F90.
All works well, though.
This style is a legacy from the times when the Fortran90 interface of MPI
was not fully developed,
and the mpi.mod was broken most of the time.
That is no longer the case, though.
This mixed mode may be one way around your problem, although not ideal.
The main drawback of using the "include mpif.h" syntax
is that there is no parameter checking of the MPI function calls,
whereas the "use mpi" syntax provide some level of parameter checking
through the mpi.mod module.
If you are careful when you write your MPI calls,
and check if all parameters match the syntax requirements strictly,
this shouldn't be a problem, though.
(Nevertheless, a few days ago somebody was suffering here on the list with a
problem that was just
a missing "ierr" parameter in an MPI_Send call. Jeff found it out, after
several emails back and forth.)
If not for anything else, just for the fun of it, to see how far the
compilation goes,
I would comment out "use mpi" and replace it by "include mpif.h".
As for architecture and compiler, I have used with no problem OpenMPI (and
MPICH2 and MPICH-1) on various
x86 and x86_64 machines, both AMD and Intel, under different Linux flavors
(Fedora, CentOS, Red Hat),
in standalone machines (using SMP and shared memory),
and on a small cluster using Ethernet 100T , then using Gigabit Ethernet,
compiling it with gcc and ifort and with gcc and pgf90.
Note that I don't have icc, I use gcc and g++.
Are the icc and ifort versions that you have the same?
I don't know if different versions may not mix well, but it is a
possibility.
I tried to reproduce your problem by writing a simple hello_f90.f90 program,
with the "use mpi" syntax,
and compiling it with the OpenMPI mpif90.
However, the program compiled without any problem,
and I didn't need to point to the mpi.mod directory using the "-module" flag
either,
despite my having a "gfortran-openmpi" version of mpi.mod in
/usr/lib/openmpi/.
The program runs fine too, with 2 processes, 4 processes, etc.
On your first message on this thread, your configure command declares
environment
variables for CC, CXX, F77, and FC without full paths.
I wonder if there is any chance that there are multiple versions of Intel
compilers on your
system, that somehow may be the cause for the confusion (perhaps as early as
the build time).
Also, note that mpi.mod is not an include file.
It is located in the lib directory of openmpi.
There was some confusion about this before, with a discussion about "-I"
directories, etc,
but hopefully this was clarified already.
Another thing to check is if there is any funny compiler configuration (say
in /opt/intel/fc/bla/bla/ifort.cfg).
Yet another thing I would look at are the logs for OpenMPI configure, make,
and make install,
if you saved them, to see if the Fortran90 interface was built to
completion.
Also, a suggestion is to compile with the verbose "-v" option, to see if it
spits out some
clue to what is going on.
I hope this helps.
Gus Correa
(from the stamp-collecting side of science :) )
--
---------------------------------------------------------------------
Gustavo J. Ponce Correa, PhD - Email: g...@ldeo.columbia.edu
Lamont-Doherty Earth Observatory - Columbia University
P.O. Box 1000 [61 Route 9W] - Palisades, NY, 10964-8000 - USA
---------------------------------------------------------------------
Brian Harker wrote:
Hi guys-
Still no dice. The only mpi.mod files I have are the ones generated
from my compile and build from source (and they are where they should
be), so there's definitely no confusion amongst the modules. And
specifying the fulls path to the correct mpi.mod module (like Gus
suggested with the -module option) gives no change. I am running out
of ideas and patience, as I'm sure you all are too! Perhaps openMPI
just doesn't play nice with my compiler suite and hardware
architecture...? Thanks for all the input!
On Mon, Sep 22, 2008 at 11:27 AM, Gus Correa <g...@ldeo.columbia.edu>
wrote:
Hi Brian and list
I read your original posting and Jeff's answers.
Here on CentOS from Rocks Cluster I have a "native" OpenMPI, with a
mpi.mod,
compiled with gfortran.
Note that I don't even have gfortran installed!
This is besides the MPI versions (MPICH2 and OpenMPI)
I installed from scratch using combinations of ifort and pgi with gcc.
It may be that mpif90 is not picking the right mpi.mod, as Jeff
suggested.
Something like this may be part of your problem.
A "locate mpi.mod" should show what your system has.
Have you tried to force the directory where mpi.mod is searched for?
Something like this:
/full/path/to/openmpi/bin/mpif90 -module
/full/path/to/openmpi_mpi.mod_directory/ hello_f90.f90
The ifort man pages has the "-module" syntax details.
I hope this helps.
Gus Correa
--
---------------------------------------------------------------------
Gustavo J. Ponce Correa, PhD - Email: g...@ldeo.columbia.edu
Lamont-Doherty Earth Observatory - Columbia University
P.O. Box 1000 [61 Route 9W] - Palisades, NY, 10964-8000 - USA
---------------------------------------------------------------------
Brian Harker wrote:
Hi Gus-
Thanks for the input. I have been using full path names to both the
wrapper compilers and mpiexec from the first day I had two MPI
implementations on my machine, depending on if I want to use MPICH or
openMPI, but still the problem remains. ARGGGGGG!
On Mon, Sep 22, 2008 at 9:40 AM, Gus Correa <g...@ldeo.columbia.edu>
wrote:
Hello Brian and list
My confusing experiences with multiple MPI implementations
were fixed the day I decided to use full path names to the MPI compiler
wrappers (mpicc, mpif77, etc) at compile time,
and to the MPI job launcher (mpirun, mpiexec, and so on) at run time,
and to do this in a consistent fashion (using the tools from the same
install to compile and to run the programs).
Most Linux distributions come with built in MPI implementations (often
times
more than one),
and so do commercial compilers and other tools.
You end up with a mess of different MPI versions on your "native" PATH,
as well as variety of bin, lib, and include directories containing
different
MPI stuff.
The easy way around is to use full path names, particularly if you
install
yet another MPI implementation
from scratch.
Another way is to fix your PATH on your initialization files (.cshrc,
etc)
to point to your preferred implementation (put the appropriate bin
directory
ahead of everything else).
Yet another is to install the "environment modules" package on your
system
and use it consistently.
My two cents.
Gus Correa
--
---------------------------------------------------------------------
Gustavo J. Ponce Correa, PhD - Email: g...@ldeo.columbia.edu
Lamont-Doherty Earth Observatory - Columbia University
P.O. Box 1000 [61 Route 9W] - Palisades, NY, 10964-8000 - USA
---------------------------------------------------------------------
Brian Harker wrote:
I built and installed both MPICH2 and openMPI from source, so no
distribution packages or anything. MPICH2 has the modules located in
/usr/local/include, which I assume would be found (since its in my
path), were it not for specifying -I$OPENMPI_HOME/lib at compile time,
right? I can't imagine that if you tell it where to look for the
correct modules, it would search through your path first before going
to where you tell it to go. Or am I too optimistic? Thanks again for
the input!
On Mon, Sep 22, 2008 at 8:58 AM, Jeff Squyres <jsquy...@cisco.com>
wrote:
On Sep 22, 2008, at 10:10 AM, Brian Harker wrote:
Thanks for the reply...crap, $HOME/openmpi/lib does contains all the
various lilbmpi* files as well as mpi.mod,
That should be correct.
but still get the same
error at compile-time. Yes, I made sure to specifically build
openMPI
with ifort 10.1.012, and did run the --showme command right after
installation to make sure the wrapper compiler was using ifort as
well.
Ok, good.
Before posting to this mailing list, I did uninstall and re-install
openMPI several times to make sure I had a clean install. Still no
luck. :(
Ok. Have you checked around your machine to ensure that there is no
other
mpi.mod that the compiler is finding first? E.g., in your MPICH2
installation? Or is Open MPI installed by your distro, perchance?
You
might want to try a "rpm -qa | grep openmpi" (or whatever your
distro's
equivalent is to check already-installed packages).
--
Jeff Squyres
Cisco Systems
_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users
_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users
_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users
_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users