190 likes | 322 Views
MPJ Express: An Implementation of MPI in Java Version: 0.35 (Beta Release). Aamir Shafi , Bryan Carpenter, Mark Baker aamir.shafi@seecs.edu.pk, bryan.carpenter@port.ac.uk, mark.baker@computer.org. Introduction.
E N D
MPJ Express: An Implementation of MPI in JavaVersion: 0.35 (Beta Release) AamirShafi, Bryan Carpenter, Mark Baker aamir.shafi@seecs.edu.pk, bryan.carpenter@port.ac.uk, mark.baker@computer.org
Introduction • MPJ Express is a message passing library that be can be used by the application developers to develop and execute parallel Java applications on compute clusters or network of computers. • MPJ Express is originally designed for distributed memory machines like clusters but also supports efficient execution of parallel applications on desktops or laptops that contain shared memory or multicore processors • MPJ Express is a reference implementation of mpiJava 1.2 API, which is an MPI-like API for Java defined by the Java Grande Forum • The current release contains: • The core library • The runtime infrastructure • The test-suite
MPJ Express Configurations • MPJ Express can be configured in two ways: • Multicore Configuration: This configuration is used by developers who want to execute their parallel Java applications on multicore or shared memory machines (laptops and desktops). • Cluster Configuration: This configuration is used by developers who want to execute their parallel Java applications on distributed memory platforms including clusters and network of computers.
Multicore Configuration • The users can use multicore device driver (also known as shared memory device driver) in the multicore configuration Proc 0 Proc 1 Proc 2 Proc 3 CPU 0 Main Memory CPU 3 CPU 1 CPU 2 Fig1: MPJ Express executing in the multicore configuration with four threads on a quad core processor
Advantages of Multicore Configuration • Incremental Development: • Users can first develop parallel applications on desktops/laptops using multicore configuration and then take the same code to distributed memory platforms including clusters • Teaching Purposes: • This configuration is preferred for teaching purposes since students can execute message passing code on their personal computers • Debugging and Profiling: • IDEs like Eclipse can be used for easier debugging and profiling
Cluster Configuration • Cluster Configuration • Application developers can opt to use either of the two communication drivers in the cluster configuration • Java NIO Device Driver (niodev) It can be used to execute MPJ Express programs on Ethernet-based interconnects. • Myrinet Device Driver (mxdev): Many clusters today are equipped with high performance low latency networks like Myrinet. • Lets consider a cluster comprising of 8 compute nodes. • Every process is started on different node while running code with Cluster Configuration, depending upon the machines file 2 1 3 4 0 5 7 6 Fig2: MPJ Express executing in the cluster configuration with 8 processes on a cluster with 8 compute nodes
MPJ Express Installation (UNIX/Linux/Mac) • Pre-requisites • Java 1.5 (stable) or higher • Apache ant 1.6.2 or higher (Optional) • Perl (Optional) • Running MPJ Express Programs in the Multicore Configuration • Download MPJ Express and unpack it. • Set MPJ_HOME and PATH environmental variables: • export MPJ_HOME=/path/to/mpj/ • export PATH=$PATH:$MPJ_HOME/bin (These above two lines can be added to ~/.bashrc) • Write your MPJ Express program (HelloWorld.java) and save it. • Compile: javac -cp.:$MPJ_HOME/lib/mpj.jar HelloWorld.java • Execute: mpjrun.sh -np 4 HelloWorld.java
MPJ Express Installation (UNIX/Linux/Mac) Cont’d • Running MPJ Express Programs in the Cluster Configuration • Download MPJ Express and unpack it. • Set MPJ_HOME and PATH environmental variables: • export MPJ_HOME=/path/to/mpj/ • export PATH=$PATH:$MPJ_HOME/bin (These above two lines can be added to ~/.bashrc) • Write a machines file (name it “machines”) stating hostnames or IP addresses of all the machines involved in the parallel execution • Write your MPJ Express program (HelloWorld.java) and save it. • Start Daemons: mpjboot machines • Compile: javac -cp.:$MPJ_HOME/lib/mpj.jar HelloWorld.java • Execute: mpjrun.sh -np 4 HelloWorld.java • Stop daemons:mpjhalt machines
MPJ Express Installation (Windows) • Pre-requisites • Java 1.5 (stable) or higher • Apache ant 1.6.2 or higher (Optional) • Perl (Optional) • Running MPJ Express Programs in the Multicore Configuration • 1. Download MPJ Express and unpack it. • 2. Set MPJ_HOME and PATH environmental variables. Right-click My Computer->Properties->Advanced tab->Environment Variables and export the following system variables (User variables are not enough) • Set the value of MPJ_HOME = c:\mpj (assuming mpj is in c:\ • Append the c:\mpj\bin directory to the PATH variable • Cygwin on Windows: (assuming mpj is 'c:\mpj‘): The recommended way to is to set variables as in Windows. If you want to set variables in cygwin shell • export MPJ_HOME="c:\\mpj“ • export PATH=$PATH:"$MPJ_HOME\\bin"
MPJ Express Installation (Windows) Cont’d • Write your MPJ Express program (HelloWorld.java) and save it. • Compile: javac -cp.:$MPJ_HOME/lib/mpj.jar HelloWorld.java • Execute: mpjrun.bat -np 4 HelloWorld.java • For running MPJ Express programs in the cluster configuration, refer to the $MPJ_HOME/README-win.txt and $MPJ_HOME/doc/windowsguide.pdf
Writing Programs with MPJ Express • A sample Program with MPJ Express is • Save this Program as HelloWorld.java import mpi.*; public class HelloWorld { public static void main(String args[]) throws Exception { MPI.Init(args); int me = MPI.COMM_WORLD.Rank(); int size = MPI.COMM_WORLD.Size(); System.out.println("Hi from <"+me+">"); MPI.Finalize(); } }
Executing MPJ Express Programs • Compiling • UNIX/Linux/Mac: javac –cp .:$MPJ_HOME/lib/mpj.jar HelloWorld.java • Windows:javac –cp .:%MPJ_HOME%/lib/mpj.jar HelloWorld.java • Running with Multicore Configuration • UNIX/Linux/Mac: mpjrun.sh –np <no. of processors> HelloWorld.java • Windows: mpjrun.bat –np <no. of processors> HelloWorld.java • Running with Cluster Configuration • Start the daemons • UNIX/Linux/Mac: mpjrun.sh –np <no. of processors> -dev niodevHelloWorld • Windows: mpjrun.bat –np <no. of processors> -dev niodevHelloWorld
Executing Programs with MPJ Express on UNIX/Linux/Mac • Multicore Configuration • Cluster Configuration
Executing Programs with MPJ Express on Windows • Multicore Configuration • Cluster Configuration
Additional Runtime Arguments • The mpjrun.[sh/bat] script accepts some additional arguments which can be passed according to the user preferences. Some of them are • np switch: If a value is specified, then MPJ Express starts those many processes for the user application. It can be specified like mpjrun.[sh/bat] –np 2 ProgramName. • dev switch: This switch can be given at runtime to change to the appropriate device driver. It can be used as mpjrun.[sh/bat] –dev multicore/niodev/mxdevProgramName. • machinesfile switch: While running programs, MPJ Express runtime expects a file with name “machines” in the current directory. User can also specify a machines file with different name using machinesfile switch as mpjrun.[sh/bat] machinesfilemyFileProgramName • wdir switch: If your programs reads some file, then it may be a good idea to separate this file from your application classes, or copy it to a tmp directory and specify this tmp directory as working directory using -wdir switch.
Manuals and Help Resources • Visit MPJ Express (http://mpj-express.org) for more details.
Contact and Support • MPJ Express Users Mailing List (http://www.lists.rdg.ac.uk/mailman/listinfo/mpj-user) • Alternatively, the users can contact us directly by email. • Aamir Shafi (aamir.shafi@seecs.edu.pk) • Bryan Carpenter (bryan.carpenter@port.ac.uk) • Mark Baker (mark.baker@computer.org)
Contributors AamirShafi JawadManzoor KamranHamid MohsanJameel Bryan Carpenter Hong Ong Mark Baker Guillermo Taboada Sabela Ramos
Acknowledgements • The project partners received a generous grant from the British Council under the PMI2 Connect program (http://www.britishcouncil.org/learning-pmi2-connect.htm) • Project Title: CollAborative Multicore Programming Using Scientific Java Messaging • Project Start Date: September 2008 • Duration: 2 Years