[mpich-discuss] building 32 bit shmem on 64 bit linux system

Daniel Fetchinson fetchinson at googlemail.com
Thu Jun 26 18:55:42 CDT 2008


No.

I was actually never recompiling it, always was using the same 32-bit
archive and it was always working on a number of platforms (intel core
2 duo, intel xeon (8 cores), etc) which made me believe I don't have
to recompile it.

Only on this new intel core 2 quad it doesn't seem to work.

Do you think it's possible that just because the platform on which it
was compiled is slightly different from the current one (I'm not even
sure intel core 2 duo is a different platform from intel core 2 quad)
the linker would complain about undefined references? I thought it
would find the references in any case, at worst the program would
segfault.

Daniel


> Did you also recompile the parallel arpack library with the newly installed
> mpicc/mpif77?
>
> Rajeev

>>
>> I started the whole thing from scratch and deleted all build
>> directories, unpacked mpich and now I'm pretty certain I've got a
>> ch_shmem configured, built, installed.
>>
>> But there is another problem: I use the parallel arpack library in my
>> program and while linking the whole thing together mpicc complains
>> about undefined references:
>>
>> libs/libparpack.a(pznaupd.o): In function `pznaupd_':
>> pznaupd.f:(.text+0x3db): undefined reference to `mpi_comm_rank__'
>> libs/libparpack.a(pznaupd.o):(.data+0x0): undefined reference
>> to `mpi_dup_fn__'
>> libs/libparpack.a(pznaupd.o):(.data+0x4): undefined reference to
>> `mpi_null_delete_fn__'
>> libs/libparpack.a(pznaupd.o):(.data+0x8): undefined reference to
>> `mpi_null_copy_fn__'
>> libs/libparpack.a(pivout.o): In function `pivout_':
>> pivout.f:(.text+0x16): undefined reference to `mpi_comm_rank__'
>> libs/libparpack.a(pivout.o):(.data+0x0): undefined reference
>> to `mpi_dup_fn__'
>> libs/libparpack.a(pivout.o):(.data+0x4): undefined reference to
>> `mpi_null_delete_fn__'
>> libs/libparpack.a(pivout.o):(.data+0x8): undefined reference to
>> `mpi_null_copy_fn__'
>>
>> etc. etc..............
>>
>> Although /home/fetchinson/mpich32shmem/lib/libmpich.a is given to
>> mpicc for linking along with all other object files where
>> /home/fetchinson/mpich32shmem is the installation directory of mpich
>> (the one given to ./configure via --prefix). So it seems I have some
>> linking problems still.
>>
>> By the way, the only file that is needed to be given to mpicc for
>> static linking is libmpich.a, right? What is strange is that on
>> another machine the same Makefile works with the same installation
>> directory for mpich.
>>
>> Cheers,
>> Daniel
>>
>>
>>
>>
>> > In the outputs of the configure and make steps, does it
>> look like it is
>> > building ch_p4 or ch_shmem?
>> >
>> > Rajeev
>> >>
>> >> Out of desperation I looked at the output of
>> >>
>> >> strings my_test_program
>> >>
>> >> where my_test_program was compiled using mpicc (using
>> absolute paths)
>> >> from the 32-bit shmem mpi library. Strangely, ch_p4 appears in the
>> >> output several times while ch_shmem doesn't. On another
>> machine where
>> >> I'm successfully compiling 32-bit shmem executables the output of
>> >> 'strings my_test_program' only contains ch_shmem and not ch_p4.
>> >>
>> >> So there must be something wrong with my mpicc, although I can't
>> >> imagine what, I never compiled to ch_p4.
>> >>
>> >> Thanks for the advice guys, there seems to be progress :)
>> >> Daniel
>> >>
>> >>
>> >> > Did you do a "make install" after "make" ?  If not, the
>> >> install directory
>> >> > may still have an older installation of mpich-1 which
>> could be ch_p4
>> >> > and not ch_shmem that you need.
>> >> >
>> >> > A.Chan
>> >> >
>> >> > ----- "Daniel Fetchinson" <fetchinson at googlemail.com> wrote:
>> >> >
>> >> >> > It must be the mpirun then. Make sure you use the
>> mpirun from the
>> >> >> same
>> >> >> > build. Give the full path if necessary.
>> >> >> >
>> >> >> > Rajeev
>> >> >>
>> >> >> Thanks, but there is only one installation of mpi on the
>> >> machine and
>> >> >> that installation is the one I keep compiling. So even
>> if it wanted
>> >> >> to
>> >> >> execute the wrong mpicc/mpirun/etc it couldn't because
>> >> there is only
>> >> >> 1
>> >> >> copy at any given time.
>> >> >>
>> >> >> Nevertheless I recompiled now mpi as well as my program
>> and still I
>> >> >> get the same error:
>> >> >>
>> >> >> 0 - MPI_INIT : MPIRUN chose the wrong device ch_shmem;
>> >> program needs
>> >> >> device ch_p4
>> >> >> /home/fetchinson/mpich32shmem/bin/mpirun.ch_shmem: line
>> 91: 21976
>> >> >> Segmentation fault      /home/fetchinson/test "testinput"
>> >> >>
>> >> >> Any ideas?
>> >> >> Daniel
>> >> >>
>> >> >>
>> >> >>
>> >> >> >> > Did you recompile the program? Make sure you use the mpicc
>> >> >> >> from this
>> >> >> >> > build and not some other mpicc from another directory. Give
>> >> >> >> the full
>> >> >> >> > path if necessary.
>> >> >> >> >
>> >> >> >> > Rajeev
>> >> >> >>
>> >> >> >> Yes, I did recompile the program using mpicc from the newly
>> >> >> >> built mpi library. Actually, there is only one mpicc on the
>> >> >> >> whole machine.
>> >> >> >>
>> >> >> >> Cheers,
>> >> >> >> Daniel
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> >> Actually, I spoke a bit too soon. Configure, make, make
>> >> >> >> install all
>> >> >> >> >> work but the code still doesn't run, saying:
>> >> >> >> >>
>> >> >> >> >> 0 - MPI_INIT : MPIRUN chose the wrong device ch_shmem;
>> >> >> >> program needs
>> >> >> >> >> device ch_p4
>> >> >> >> >> /home/fetchinson/mpi32shmem/bin/mpirun.ch_shmem:
>> >> line 91: 17761
>> >> >> >> >> Segmentation fault      /home/fetchinson/test "testinput"
>> >> >> >> >>
>> >> >> >> >> The exact same code runs on another machine where
>> >> someone else
>> >> >> >> >> installed a 32-bit shmem mpich1 library, I'm trying to do
>> >> >> >> the same on
>> >> >> >> >> a different machine now. It's an intel quad core
>> so I suppose
>> >> >> the
>> >> >> >> >> shmem device should work. The configure options I used for
>> >> >> >> compiling
>> >> >> >> >> are
>> >> >> >> >>
>> >> >> >> >> export CC='gcc -m32'
>> >> >> >> >> export F77='g77 -m32'
>> >> >> >> >> ./configure  --with-device=ch_shmem
>> >> >> >> >>
>> >> >> >> >> Do I need to specify the --with-arch option? Going through
>> >> >> >> the list
>> >> >> >> >> of available --with-arch options I'm not sure
>> what I need for
>> >> >> an
>> >> >> >> >> Intel(R)
>> >> >> >> >> Core(TM)2 Quad CPU Q6600 @ 2.40GHz.
>> >> >> >> >>
>> >> >> >> >> What am I doing wrong?
>> >> >> >> >>
>> >> >> >> >> Cheers,
>> >> >> >> >> Daniel
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >> > Thanks Anthony, that worked!
>> >> >> >> >> >
>> >> >> >> >> > Concerning MPICH2: I'm not in a position to change the
>> >> >> >> >> communication
>> >> >> >> >> > routines in the code  I use so this would only
>> be an option
>> >> >> >> >> if MPICH2
>> >> >> >> >> > is fully backward compatible with MPICH1. Is
>> this the case?
>> >> >> >> >> Can I just
>> >> >> >> >> > start using MPICH2 without changing anything in
>> the code if
>> >> >> >> >> it works
>> >> >> >> >> > with MPICH1?
>> >> >> >> >> >
>> >> >> >> >> > Cheers,
>> >> >> >> >> > Daniel
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >> Since you are using MPICH-1, you can try setting
>> >> CC, F77 and
>> >> >> F90
>> >> >> >> >> >>
>> >> >> >> >> >> CC="gcc -m32"
>> >> >> >> >> >> F77="g77 -m32"
>> >> >> >> >> >> ....
>> >> >> >> >> >>
>> >> >> >> >> >> BTW, can you use MPICH2 instead ?  We have
>> shifted all our
>> >> >> >> >> >> development effort to MPICH2 which is more robust than
>> >> >> >> >> MPICH-1.  If
>> >> >> >> >> >> you are using MPICH2, setting CFLAGS and FFLAGS should
>> >> >> >> >> work, and you
>> >> >> >> >> >> can use nemesis which shared memory for intranode
>> >> >> communication.
>> >> >> >> >> >>
>> >> >> >> >> >> A.Chan
>> >> >> >> >> >>
>> >> >> >> >> >> ----- "Daniel Fetchinson"
>> >> <fetchinson at googlemail.com> wrote:
>> >> >> >> >> >>
>> >> >> >> >> >>> Hi folks,
>> >> >> >> >> >>>
>> >> >> >> >> >>> I'd like to build the 32-bit shmem mpi library because
>> >> >> >> >> the code I'll
>> >> >> >> >> >>> use with mpi only works in 32-bit because of some
>> >> >> >> 32-bit specific
>> >> >> >> >> >>> assembly code. The machine is a 64-bit machine with a
>> >> >> >> >> 64-bit linux
>> >> >> >> >> >>> distribution (suse).
>> >> >> >> >> >>>
>> >> >> >> >> >>> I tried configuring mpich-1.2.7p1 in a number of ways:
>> >> >> >> >> >>>
>> >> >> >> >> >>> ./configure --with-device=ch_shmem ./configure
>> >> >> >> --with-arch=LINUX
>> >> >> >> >> >>> --with-device=ch_shmem ./configure
>> >> >> >> >> >>> --with-arch=LINUX32 --with-device=ch_shmem ./configure
>> >> >> >> >> >>> --with-arch=i386 --with-device=ch_shmem
>> >> >> >> >> >>>
>> >> >> >> >> >>> with and without setting the following environment
>> >> >> >> variables (in
>> >> >> >> >> >>> bash):
>> >> >> >> >> >>>
>> >> >> >> >> >>> export CFLAGS=-m32
>> >> >> >> >> >>> export FFLAGS=-m32
>> >> >> >> >> >>>
>> >> >> >> >> >>> Configuring went all right but none of the above
>> >> >> >> >> combinations worked
>> >> >> >> >> >>> with 'make' unfortunately :( The error in 'make' is
>> >> >> >> the following:
>> >> >> >> >> >>>
>> >> >> >> >> >>> /home/fetchinson/mpich-1.2.7p1/bin/mpicc  -o overtake
>> >> >> >> overtake.o
>> >> >> >> >> >>> test.o
>> >> >> >> >> >>>
>> >> >> >> >>
>> >> /usr/lib64/gcc/x86_64-suse-linux/4.2.1/../../../../x86_64-suse
>> >> >> >> >> -linux/bin/ld:
>> >> >> >> >> >>> skipping incompatible
>> >> >> >> >> /home/fetchinson/mpich-1.2.7p1/lib/libmpich.a
>> >> >> >> >> >>> when searching for -lmpich
>> >> >> >> >> >>>
>> >> >> >> >>
>> >> /usr/lib64/gcc/x86_64-suse-linux/4.2.1/../../../../x86_64-suse
>> >> >> >> >> -linux/bin/ld:
>> >> >> >> >> >>> cannot find -lmpich
>> >> >> >> >> >>> collect2: ld returned 1 exit status
>> >> >> >> >> >>> make[4]: *** [overtake] Error 1
>> >> >> >> >> >>> make[3]: [linktest1] Error 2 (ignored) Could not link
>> >> >> >> a C program
>> >> >> >> >> >>> with MPI libraries
>> >> >> >> >> >>> make[3]: *** [linktest1] Error 1
>> >> >> >> >> >>> make[2]: *** [linktest] Error 2
>> >> >> >> >> >>> make[1]: *** [mpi-lib-test] Error 2
>> >> >> >> >> >>> make: *** [mpi] Error 2
>> >> >> >> >> >>>
>> >> >> >> >> >>> Which makes me believe that I was not able to
>> >> convince the
>> >> >> >> >> >>> compiler/linker/etc that I really want everything in
>> >> >> 32-bit.
>> >> >> >> >> >>>
>> >> >> >> >> >>> What would be the correct way of compiling
>> the whole mpi
>> >> >> >> >> library to
>> >> >> >> >> >>> 32-bit?
>> >> >> >> >> >>>
>> >> >> >> >> >>> Cheers,
>> >> >> >> >> >>> Daniel
>> >> >> >> >> >>
>> >> >> >> >> >>
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> > --
>> >> >> >> >> > Psss, psss, put it down! -
>> >> http://www.cafepress.com/putitdown
>> >> >> >> >> >
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >> --
>> >> >> >> >> Psss, psss, put it down! -
>> http://www.cafepress.com/putitdown
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >
>> >> >> >> >
>> >> >> >>
>> >> >> >>
>> >> >> >> --
>> >> >> >> Psss, psss, put it down! - http://www.cafepress.com/putitdown
>> >> >> >>
>> >> >> >>
>> >> >> >
>> >> >> >
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Psss, psss, put it down! - http://www.cafepress.com/putitdown
>> >> >
>> >> >
>> >>
>> >>
>> >> --
>> >> Psss, psss, put it down! - http://www.cafepress.com/putitdown
>> >>
>> >>
>> >
>> >
>>
>>
>> --
>> Psss, psss, put it down! - http://www.cafepress.com/putitdown
>>
>>
>
>


-- 
Psss, psss, put it down! - http://www.cafepress.com/putitdown




More information about the mpich-discuss mailing list