Mpjdev the low level mpj device
Download
1 / 36

mpjdev, the low-level MPJ device - PowerPoint PPT Presentation


  • 66 Views
  • Uploaded on

mpjdev, the low-level MPJ device. Aamir Shafi [email protected] Distributed Systems Group 12 th March, 2004. Trinity: Neo... No one has ever done anything like this. Neo: That's why it's going to work. Sequence. Introduction History of MPJ Overview of java.nio package

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' mpjdev, the low-level MPJ device' - marvin


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Mpjdev the low level mpj device

mpjdev,the low-level MPJ device

Aamir Shafi

[email protected]

Distributed Systems Group

12th March, 2004


Sequence

Trinity: Neo... No one has ever done anything like this.Neo: That's why it's going to work.

Sequence

  • Introduction

    • History of MPJ

  • Overview of java.nio package

  • ‘mpjdev’ implementation

    • Introduction

    • Packing/Unpacking at the device level

    • Communication Protocols

      • Eager Send

      • Rendezvous Protocol

  • Quick Start Guide to mpjdev

  • What’s next


Introduction
Introduction

  • Parallel Programming

    • Shared Memory

    • Message Passing

  • Message Passing

    • MPI

    • PVM

  • Has Java got what it takes to be a parallel programming language ?


Message passing in java mpj
Message Passing in Java (MPJ)

  • Specification Document

  • mpiJava 1.2.5

    • Uses native MPI


Pure java mpi like libraries
Pure java MPI-like libraries

  • mpiJava 1.2.5

    • Uses native MPI

    • Best candidate to be developed to MPJ

    • http://www.hpjava.org/mpiJava.html

    • DSG’s project MPJ (http://dsg.port.ac.uk/projects/mpj/) is tightly coupled to this effort

  • JMPI

    • Drawback, based on RMI

    • http://euler.ecs.umass.edu/jmpi/

  • MPJava

    • Based on java.nio

    • Results encouraging

    • No source-code

  • DOGMA – Dead

  • MPP –

    • Basic library

    • http://www.mi.uib.no/~bjornoh/mtj/mpp/


  • Sequence1

    Oracle: You're cuter than I thought. I can see why she likes you.

    Sequence

    • Introduction

      • History of MPJ

    • Overview of java.nio package

    • ‘mpjdev’ implementation

      • Introduction

      • Packing/Unpacking at the device level

      • Communication Protocols

        • Eager Send

        • Rendezvous Protocol

    • Quick Start Guide to mpjdev

    • What’s next


    New i o overview
    New I/O overview you.

    • Buffer classes,

      • Conversion among basic data types

      • Direct and Indirect Buffer

    • Scalable Applications

      • No more “one thread per client”

      • One thread, many clients

    • Multiplex Synchronous I/O using the selectors

    • SocketChannel – New Abstraction

      • Pipe – One way communication


    Buffer classes in java nio
    Buffer classes in java.nio you.

    • ‘T’Buffer classes, ‘T’ being all the basic data types

    • Any basic data type can be copied onto the ByteBuffer, (the basic primitive)

    • Buffer can be,

      • Direct, allocateDirect(int)

      • Indirect, allocate(int)


    A bytebuffer buffer bytebuffer allocate 8 b buffer putint 4 c buffer flip
    a. ByteBuffer buffer = ByteBuffer.allocate(8); you.b. buffer.putInt(4);c. buffer.flip();


    A bytebuffer buffer bytebuffer allocate 8 b bytebuffer buffer bytebuffer allocatedirect 8
    a. ByteBuffer buffer = ByteBuffer.allocate(8); you.b. ByteBuffer buffer = ByteBuffer.allocateDirect(8);


    Selector
    Selector you.

    • Selector provide, connecting, accepting, reading & writing facilities to the SocketChannel

      • OP_WRITE, OP_READ, OP_ACCEPT, OP_CONNECT

    • Depends on native OS facilities

      • Selection performs differently on Windows and Linux



    Taming the nio circus
    Taming the NIO circus you.

    • Taming the NIO circus thread

      • http://forum.java.sun.com/thread.jsp?forum=4&thread=459338&start=0&range=15&hilite=false&q=

  • OutOfMemory Exception

    • http://forum.java.sun.com/thread.jsp?thread=433702&forum=4&message=2136979

  • Selectors taking cent percent CPU

    • http://forum.java.sun.com/thread.jsp?forum=11&thread=494967

    • http://forum.java.sun.com/thread.jsp?forum=4&thread=494194

  • J2SE 1.5.0 beta solves many problems


  • Sequence2

    Neo: What are you trying to tell me? That I can dodge bullets?Morpheus: No, Neo. I'm trying to tell you that when you're ready, you

    won't have to.

    Sequence

    • Introduction

      • History of MPJ

    • Overview of java.nio package

    • ‘mpjdev’ implementation

      • Introduction

      • Packing/Unpacking at the device level

      • Communication Protocols

        • Eager Send

        • Rendezvous Protocol

    • Quick Start Guide to mpjdev

    • What’s next


    Mpjdev introduction
    mpjdev – Introduction bullets?

    • What is device ?

      • Sockets

    • Similar to ADI in MPICH

    • Meant for library developers (MPJ), not application programmers

      • jGMA can use mpjdev


    Mpjdev introduction1
    mpjdev – Introduction bullets?

    • Single JVM Implementation

      • Processes are threads in the single JVM

    • Native implementation

      • Uses native MPI

    • LAPI Implementation

      • Eager-send

      • Rendezous

    • Buffer packing/unpacking are taken from these implementations


    Mpjev functions
    mpjev functions bullets?

    • Comm methods

      • Void send(Buffer, int dest, int tag)

      • Req isend(Buffer, int dest, int tag)

      • Req irecv(Buffer, int src, int tag)

        • For src, ANY_SRC

        • For tag, ANY_TAG

      • Status recv(Buffer, int dest, int tag)

  • Req methods

    • Status Wait()

    • Status Wait(Req[])



  • Communication protocols eager send
    Communication Protocols – Eager Send bullets?

    Sender

    Receiver

    Huge Memory at Receiver

    1 2 3 4 5 6

    Sel

    Sel


    Rendezvous protocol
    Rendezvous Protocol bullets?

    Receiver 1:

    Checks if step 2 has already posted recv, if yes, initiates step 3, else posts a req in Que

    Receiver 2:

    Checks if step 1 has posted a recv request, if yes, initiates step 3, else posts a request.

    NOTE :- STEP 1 & 2 needs synchronization

    Receiver 3:

    Writes back to sender that recv’r is ready to receive

    Receiver 4:

    Receives the data

    1

    Receiver

    Sender

    1

    Sender 1:

    Sender posts send(), Req stored in Queue

    Sender 2:

    Sender sends the control message asking if matching recv is posted ?

    Sender 3:

    Sender receives response confirming there is a matching recv

    Sender 4:

    Sender sends the actual data

    Sender Queue

    Recv Queue

    1

    1

    Sel

    Sel


    Packing unpacking of buffers
    Packing/Unpacking of Buffers bullets?

    • write(t[] source, int offset,int length)

    • gather(t[] source, int numEls, int offs, int [] indexes)

    • strGather(t[] source, int srcOff, int rank, int exts, int strs, int [] indexes)

    • read(t[] dest, int dstOff, int numEls)

    • scatter(t[] dest, int numEls, int offs, int [] indexes)

    • strScatter(t[] dest, int dstOff, int rank, int exts, int strs, int [] indexes)

    • Java objects, same concepts


    Message format
    Message Format bullets?

    • Primary header (Eight bytes),

      • First four bytes –nothing

      • Last four byte --size of message

  • Primary PayLoad,

    • Each primitive data type is written as a section,

      • SECTION_HEADER (8 bytes)

        • First byte – Type of Message, int, float etc

        • Last four bytes – Number of Elements in this section

      • SECTION_DATA

        • The actual data itself

        • Should be multiple of 8

  • Secondary header (Eight Bytes)

    • First Four bytes –nothing

    • Last Four bytes – Size of Java Object

  • Secondary PayLoad

    • Actual java Object in bytes

  • Can Java object be written as a section in Primary Payload ?


  • Message format single section
    Message Format, Single Section bullets?

    int intArray[] = new int[2];

    int[0] = 1; int[1] = 2;

    WriteBuffer wBuffer = new WriteBuffer(24);

    wBuffer.write(intArray, 0,2); wBuffer.pack();

    8 bytes

    8 bytes

    8 bytes

    X X X X Size (24) int T X X X 2(NoEls) int[0] int[1]

    PRIMARY_HEADER

    SECTION_HEADER

    SECTION_HEADER


    Message format multiple section
    Message Format, Multiple Section bullets?

    int intArray[] = new int[2]; long longArray = new long[2];

    int[0] = 1; int[1] = 2; longArray[0] = 1L; longArray[1] = 2L;

    WriteBuffer wBuffer = new WriteBuffer(48);

    wBuffer.write(intArray, 0,2); wBuffer.write(longArray, 0,2);

    wBuffer.pack();

    8 bytes

    8 bytes

    8 bytes

    8 bytes

    16 bytes

    X X X X Size (24) int X X X 2(NoEls) int[0] int[1] L X X X 2 long[0] long[1]

    PRIMARY_HEADER

    SECTION_HEADER

    SECTION_DATA

    S_HEADER

    S_DATA


    Control messages
    Control Messages bullets?

    • Used in Rendezvous Protocol

    • Format

      • Int – Rank of Destination

      • Int – Rank of Source

      • Int – Message Length

      • Int – Message Tag

    • Should be as small as possible


    Sequence3

    Morpheus: There is a difference between knowing the path and walking the

    path.

    Sequence

    • Introduction

      • History of MPJ

    • Overview of java.nio package

    • ‘mpjdev’ implementation

      • Introduction

      • Packing/Unpacking at the device level

      • Communication Protocols

        • Eager Send

        • Rendezvous Protocol

    • Quick Start Guide to mpjdev

    • What’s next


    Directory structure
    Directory Structure walking the


    Compiling the source files
    Compiling the source files walking the

    • Dependencies,

      • J2SE1.5.0-beta

      • Apache Ant (1.6.1)

        • If you want to compile from the source, otherwise

          • mpjdev.jar is lying in the mpjdev/lib folder

    • You need to add “mpjdev.jar” in your CLASSPATH


    Running examples config
    Running Examples - Config walking the

    • Configuration

      • mpjdev/conf/mpjdev.conf

      • Total Number of Processes

      • For each Process

        • [email protected]@RANK

        • Sorry – IP address won’t work at present

          • I never had to to write an IP 


    Running examples
    Running examples walking the

    • # cd mpjdev/test

    • # javac -classpath ../lib/mpjdev.jar:. BufferTest3.java

    • # java -classpath ../lib/mpjdev.jar:. BufferTest3 0

      • (O is the Rank)

  • Tracking problems

    • java –version, is it 1.5. ?

    • Are you using IP ?

    • Email me


  • Writing your own programs
    Writing your own programs walking the

    • As an example,

      • Two processes

    • Initialize the device

      • CommImpl.init()

  • Get your ID,

    • CommImpl.id()

  • One process packs & sends data,

    • CommImpl.send(Buffer, int dest, int tag)

  • Other process reads data & unpacks

    • CommImpl.recv(Buffer, int src, int tag)

  • Finalize,

    • CommImpl.finish();


  • Sequence4

    Neo: Why do my eyes hurt? walking theMorpheus: You've never used them before.

    Sequence

    • Introduction

      • History of MPJ

    • Overview of java.nio package

    • ‘mpjdev’ implementation

      • Introduction

      • Packing/Unpacking at the device level

      • Communication Protocols

        • Eager Send

        • Rendezvous Protocol

    • Quick Start Guide to mpjdev

    • What’s next


    A few experiments
    A Few experiments walking the

    • No tests, yet 

    • Bottlenecks,

      • Transfer of huge messages seems inefficient

      • Queues, java.util.Vector is not good enough

  • Would like to see how many processes, can selector handle ?

    • Potentially thousands

  • Need bench-marks, keeping in view java issues and bottlenecks, and test them

    • Write our own


  • Future
    Future walking the

    • Badly need a runtime

      • Shell scripts starting jobs using ‘ssh’ or ‘rsh’ ?

  • MPJ,

    • Group communications

  • I thought, I would have completed the whole MPJ, by now

  • Looking for my PhD project, in the same domain

  • Morpheus: Unfortunately, no one can be told what the Matrix is. You have to

    see it for yourself.


    Suggestions

    Suggestions walking the

    ?


    ad