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 line2. 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@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@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