Archives


- Beowulf
- Beowulf Announce
- Scyld-users
- Beowulf on Debian

[Beowulf] Compiling mpiJava on Amd64.

Many of your questions may have already been answered in earlier discussions or in the FAQ. The search results page will indicate current discussions as well as past list serves, articles, and papers.

Search

Giuseppe Vitillaro giuseppe at vitillaro.org
Thu Jul 20 02:08:55 PDT 2006


Sorry to jump just in the middle of an existing thread,
but I was addressed here from Bernard Lee, that proposed
to me to help on the problem to have mpiJava on the 
x86_64 architecture.

I'm relativily new to this topic, so the solution I got
may look naive to you ... sorry to have bothered the list
if this is the case.

I found a couple of problems trying to compile mpiJava 1.2.5
under RHEL 4.2 on a x86_64 machine.

 (1) unknown architecture to the configure script

      the config/config.guess reports the machine
      as "x86_64-unknown-linuxoldld" that is not recognized
      from the configure script and not handled correctly
      for what I see

      I solved this problem just using the --target=i686-linux
      forcing the configure script to act in the same way
      it works for a i686 machine


 (2) -fPIC Posisition Indipendent Code problem

      for what I understand mpiJava is essentially
      a JNI wrapper to an MPI C library, so, it needs
      to get compiled in the shape of a shared library,
      at least under Linux, i.e. a ".so" library, that
      gets loaded into a running Java Virtual Machine

      so the mpiJava shared library libmpijava.so "must" be
      linked with the -shared option under Linux

      while on the i686 architecture a shared library can
      be linked mixing pic and nonpic objects on the x86_64
      architecture that is not possible, at least for what
      I understand; if you try, you get this error:

        relocation R_X86_64_32 against `a local symbol' can not be used 
            when making a shared object; recompile with -fPIC

      that imply that all the mpiJava objects for the libmpijava.so
      library "must" be compiled using -fPIC option ... otherwise
      ... well it doesn't link ...

      so I actually met two problems: I had to recompile
      the mpi library I was using (the RH default lam-7.0.6 was not pic)
      with the -fPIC flag to get a pic mpi library and be sure
      that libmpijava.so objects get compiled with -fPIC too;

      to achieve the first goal I just downloaded and recompiled
      the lam library 7.1.2 using a default ./configure --prefix
      configuration;

      the second one was easily solved with a "minor hack"
      to the mpiJava configure script: I used the DEFPINS
      mpiJava macro (that is used for other purpouses, but
      not used in my framework) to be sure that -fPIC flag
      go to mpiJava makefiles (I do not like to touch source
      code if I can)

      the complete solution looks like calling the mpiJava
      configure script in this way:

           CFLAGS=-fPIC DEFPINS=-fPIC ./configure --with-MPI=lam 
                  --target=i686-linux

     once the -fPIC lam (read your preferred sup[ported MPI 
     implementation) is the first in your path


 (3) Java Virtual Machine implementation
    
     on my machine I have two versions of the Java SUN installed
     j2sdk1.4.2_10 (1.4 i686 32 bits) and jdk1.5.0_06 (1.5 x86_64 64 bits)

     the reason is easy to understand: for what I know SUN doesn't have
     an x86_64 1.4 implementation or at least ... it didn't have one
     at the time I installed Java on my machine

     if I try to compile mpiJava with the 1.4-i686 version ... using
     the defailt x86_64 gcc compiler ... what I get is that I'm trying
     to build an x86_64 shared library that a i686 Java Virtual Machine
     cannot load ... the JVM will simply report that it cannot find
     the file when "System.loadLibrary()" method is called

     so,  again there are two posibilities here:
 
        (a) using a i686 JVM and the gcc32 (gcc -m32) C compiler
            and essentially get a 32 bits i686 environment
            running on a x86_64 machine;

        (b) using an x86_64 JVM and the gcc C compiler
            and get a 64 bits x86_64 environment;

     I choosed to go through (a): it was easier and I think
     most of the mpiJava users would have a preference to
     have a complete x86_64 64 bits solution.

     Unfortunately I had not a JDK 1.4 x86_64 java environment
     available ... probably there are a non SUN around or perhaps
     SUN has or will publish one. I'm saying this because ... well
     I used a JDK 1.5 environment with a tools that declare to
     be tested just against a 1.4 JDK.


So my personal solution consists of these steps:

  (1) be sure to have an x86_64 JVM first in my path
      (it was 1.5 for me);

  (2) be sure to have a -fPIC x86_64 MPI implementation
      first in my path (it was LAM 7.1.2 fresh compiled for me);

  (3) use a "minor hack" on the mpiJava configure script
      called as:
 
         CFLAGS=-fPIC DEFPINS=-fPIC ./configure --with-MPI=lam
                     --target=i686-linux

  (4) just following the guidelines in mpiJava README file.


I followed this path with mpiJava 1.2.5 and got it compiled
on RHEL 4.2 x86_64.

Problems are not over tough: the "make check" regression
test doesn't look good. Not all tests are passed correctly:
some test fail (although for what I see it passes the
basic ones).

This may depend from my Java version 1.5 (probably it would
be better to try with 1.4 x86_64 version first) or from others
subtle x86_64 from i686 porting problems that may manifest in this way.

I hope this may be useful to others to solve the problem,
sorry to have bothered the list with a so long message,

   Regards, G. Vitillaro
      
    

           


   
    





More information about the Beowulf mailing list