Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: Re: [OMPI users] MPI Java Bindings on Mac OSX
From: Ralph Castain (rhc_at_[hidden])
Date: 2013-01-03 12:49:18


Hi Doug

What modules software do you use on the Mac? Would be nice to know :-)

On Jan 3, 2013, at 8:34 AM, Doug Reeder <dlr1_at_[hidden]> wrote:

> Chuck,
>
> In step 4 you might want to consider the following
>
> --prefix=/usr/local/openmpi-1.7rc5
>
> and use the modules software to select which version of openmpi to use. I have to have multiple versions of openmpi available on my macs and this approach has worked well for me.
>
> Doug Reeder
> On Jan 3, 2013, at 9:22 AM, Chuck Mosher wrote:
>
>> Hi,
>>
>> I've been trying to get a working version of the MPI java bindings on Mac OSX (10.6.8 with Java 1.6.0_37).
>>
>> I ran into a number of issues along the way that I thought I would record here for others who might be foolish enough to try the same ;-)
>>
>> The issues I had to spend time with were:
>>
>> 1. Installing a C compiler that can run from the command line
>> 2. Finding and installing an appropriate Java JDK for my OS version
>> 3. Building and installing OpenMPI for the first time on a Mac
>> 4. Conflicts with the existing OpenMPI version 1.2.8 that was installed already on my Mac
>> 5. Figuring out syntax for using the mpirun command line to run java
>> 6. Odd behavior when trying to use "localhost" or the output from `hostname` on the command line or in a hostfile
>>
>> Resolution for each of these in order:
>>
>> 1. Installing a C compiler for the command line
>> Found a good resource here:
>> http://www.macobserver.com/tmo/article/install_the_command_line_c_compilers_in_os_x_lion
>> The solution is to install XCode, then enable command line compilers from the XCode console.
>>
>> 2. Finding and installing an appropriate Java JDK for my OS version
>> Used this resource to eventually figure out what to do:
>> http://www.wikihow.com/Install-the-JDK-(Java-Development-Kit)-on-Mac-OS-X
>> It didn't exactly match my setup, but had enough clues.
>> The solution is to first find your java version (java -version, 1.6.0_37 in my case) and then match that version number to the Apple Java update version (11 in my case).
>> The key document is:
>> http://developer.apple.com/library/mac/#technotes/tn2002/tn2110.html
>> Which is a table relating java version numbers to the appropriate "Java for Mac OS X xx.x Update xx".
>> Once you know the update number, you can download the JDK installer from
>> https://developer.apple.com/downloads/index.action
>> where you of course have to have an Apple developer ID to access.
>> Enter "java" in the search bar on the left and find the matching java update, and you're good to go.
>>
>> 3. Building and installing OpenMPI for the first time on a Mac
>> After the usual false starts with a new installation on a new OS, I managed to get a working build of openmpi-1.7rc5 with Java bindings.
>> I could only find the java bindings in the 1.7 pre-release.
>> I used the defaults as much as possible.
>>
>> After downloading from:
>> http://www.open-mpi.org/software/ompi/v1.7/
>> and unarchiving to Downloads, open a Terminal window.
>>
>> cd Downloads/openmpi-1.7rc5
>> ./configure --enable-java --prefix=/usr/local
>> make all
>> sudo make install
>>
>> Verify that you can run the commands and examples:
>>
>> chuck-> /usr/local/bin/mpirun -version
>> mpirun (Open MPI) 1.7rc5
>>
>> chuck-> cd examples
>> chuck-> make
>> chuck-> /usr/local/bin/mpirun -np 2 hello_c
>> Hello, world, I am 0 of 2, (Open MPI v1.7rc5, package: Open MPI chuck_at_chucks-iMac.local Distribution, ident: 1.7rc5, Oct 30, 2012, 111)
>> Hello, world, I am 1 of 2, (Open MPI v1.7rc5, package: Open MPI chuck_at_chucks-iMac.local Distribution, ident: 1.7rc5, Oct 30, 2012, 111)
>>
>> 4. Conflicts with the existing OpenMPI version 1.2.8 that was installed already on my Mac
>> OpenMPI Version 1.2.8 was already installed for my OS in /usr/bin
>> So, if you accidentally type:
>>
>> chuck-> mpirun -np 2 hello_c
>> --------------------------------------------------------------------------
>> A requested component was not found, or was unable to be opened
>> ...
>>
>> you picked up the wrong "mpirun" and you will get a bunch of error output complaining about sockets or mis-matched shared library versions.
>>
>> I dealt with this moving the existing OpenMPI related commands to a subdirectory, and then created symbolic links from /usr/local/bin to /usr/bin for the commands I needed.
>>
>> 5. Figuring out syntax for using the mpirun command line to run java
>> First be sure you can run Java
>>
>> chuck-> /usr/bin/java -version
>> java version "1.6.0_37"
>> Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-10M3909)
>> Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)
>>
>> Then be sure you can run your java class from the command line as well. To figure this out I created a couple of simple java files in a temp directory:
>>
>> chuck-> cd ~/tmp
>> chuck-> mkdir classes
>> chuck -> cat HelloWorld.java
>>
>> public class HelloWorld {
>> public static void main(String[] args) {
>> System.out.println("Hello World, from Java !");
>> }
>> }
>>
>> chuck-> javac -d classes HelloWorld.java
>> chuck-> java -cp ./classes HelloWorld
>>
>> Hello World, from Java !
>>
>> No sense going further until you can get the code above to run.
>> If you have that working, then you can try the MPI version of HelloWorld:
>>
>> chuck-> cat HelloWorldMPI.java
>>
>> import mpi.*;
>> class HelloWorldMPI {
>> public static void main(String[] args) throws MPIException {
>> MPI.Init(args);
>> System.out.println("Hello world from rank " +
>> MPI.COMM_WORLD.Rank() + " of " +
>> MPI.COMM_WORLD.Size() );
>> MPI.Finalize();
>> }
>> }
>>
>> chuck-> /usr/local/bin/mpijavac -d classes HelloWorldMPI.java
>> /usr/local/bin/mpirun -np 2 /usr/bin/java -cp ./classes HelloWorldMPI
>>
>> Hello world from rank 0 of 2
>> Hello world from rank 1 of 2
>>
>> And you're ready to go !
>> Except for one last thing ...
>>
>> 6. Odd behavior when trying to use "localhost" or the output from `hostname` on the command line or in a hostfile
>> You will note in the examples above no host names, hostifle, or appfile was used.
>> I found that trying to use "-host localhost" or "-hostfile hostfile" which contained "localhost" would not work:
>>
>> mpirun -host localhost -np 2 ...
>>
>> in the examples above would not work, returning:
>>
>> chuck$ /usr/local/bin/mpirun -host localhost -np 2 /usr/bin/java -cp ./classes HelloWorldMPI
>> --------------------------------------------------------------------------
>> All nodes which are allocated for this job are already filled.
>> --------------------------------------------------------------------------
>>
>> I posted this in a previous e-mail to this list, and it looks like a bug.
>> You can get around it by using the output from `hostname -s` which provides a trimmed name:
>>
>> chuck-> /usr/local/bin/mpirun -host `hostname -s` -np 2 /usr/bin/java -cp ./classes HelloWorldMPI
>> Hello world from rank 0 of 2
>> Hello world from rank 1 of 2
>>
>> You will also need to use this name in any hostfiles or appfiles as well until the bug is fixed.
>>
>> Thanks to all for this great product !
>>
>> Chuck Mosher for JavaSeis.org
>>
>>
>> _______________________________________________
>> users mailing list
>> users_at_[hidden]
>> http://www.open-mpi.org/mailman/listinfo.cgi/users
>
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users