SOA MPI Programming

download SOA MPI Programming

of 20

Transcript of SOA MPI Programming

  • 8/13/2019 SOA MPI Programming

    1/20

    Communicating Process Architectures 2013P.H. Welch et al. (Eds.)Open Channel Publishing Ltd., 2013 2013 The authors and Open Channel Publishing Ltd. All rights reserved.

    93

    Service-Oriented Programming in MPI

    Sarwar ALAM 1 , Humaira KAMAL and Alan WAGNER

    Department of Computer Science, University of British Columbia, Canada

    Abstract. In this paper we introduce a service-oriented approach to the design of distributed data structures for MPI. Using this approach we present the design of anordered linked-list structure. The implementation relies on Fine-Grain MPI (FG-MPI)and its support for exposing ne-grain concurrency. We describe the implementationof the service and show how to compose and map it onto a cluster. We experimentwith the service to show how its behaviour can be adjusted to match the applicationand the underlying characteristics of the machine.

    The advantage of a service-oriented approach is that it enforces low coupling be-tween components with higher cohesion inside components. As a service, the orderedlinked-list structure can be easily composed with application code and more generallyit is an illustration of how complex data structures can be added to message-passinglibraries and languages.

    Keywords. service-oriented programming, function-level parallelism, distributed datastructures, linked list, MPI-aware scheduler, MPI runtime, FG-MPI, MPICH2

    Introduction

    Process-oriented languages in general, and communication libraries like MPI in particular,do not have the rich collections of data structures present in todays object-oriented program-ming languages. The lack of data structure libraries for MPI makes it necessary for program-mers to create their own and adds to the overall programming complexity of using message-passing languages. The difculty in having to explicitly manage the distribution of the datais often pointed to as a major impediment to the use of message passing [1]. One approachthat is at the heart of process-oriented systems [2,3] and many distributed systems [4,5] is toimplement the data structure using its own collection of processes and provide the distributeddata structure as a service. We call this service-oriented programming. A service-orientedapproach enforces low coupling, because components interact only through message-passingand cannot directly access one anothers data, and leads to higher cohesion inside compo-

    nents, because application and data structure management code no longer needs to be com-bined together. We investigate the use of a process-oriented design methodology togetherwith a service-oriented programming approach (design pattern) to provide highly scalable,easy to use libraries for complex data structures.

    Our interest in a service-oriented approach to programming arose in the context of ourwork on Fine-Grain MPI (FG-MPI) [6,7]. FG-MPI extends MPICH2 by adding an extra levelof concurrency (interleaved concurrency) whereby every OS process comprises of severalMPI processes, rather than just one. FG-MPI uses a coroutine-based non-preemptive thread-ing model together with a user-level scheduler integrated into the middleware to make it pos-sible to support thousands of processes inside an OS process to expose ner-grain concur-rency with no change to the programming model. The support for having many light-weight

    1Corresponding Author: Sarwar Alam, Department of Computer Science, University of British Columbia,Vancouver, B.C. V6T 1Z4, Canada ; E-mail: [email protected] .

  • 8/13/2019 SOA MPI Programming

    2/20

    94 S. Alam et al. / Service-Oriented Programming in MPI

    MPI processes and the exibility to map processes to functions 1 to execute concurrently in-side an OS process, as well as in parallel across the cores and machines in a cluster makesit possible to consider a service-oriented approach to providing a distributed data structure.In this paper we use FG-MPI and our service-oriented approach to implement an orderedlinked-list service.

    We chose an ordered linked list because it is a common data structure, its linear structuremakes it challenging to parallelise in an efcient way, and it highlights how FG-MPI makesit possible to design new types of MPI programs. Since most MPI implementations bind anMPI process to an OS process, one could implement a linked list as a collection of separateOS processes. Previous work by Iancu et al. [8] has shown that over-subscription of MPIprocesses to cores often leads to poor performance and because of this the usual practice isto execute one MPI process per core. This directly binds the number of MPI processes to thenumber of cores which results in the design of processes to match the machine rather than theavailable concurrency present in the algorithms. This leads to more coupled, less cohesiveprograms.

    A second drawback to the previous approach is that when executing with one MPI pro-

    cess per core it is difcult to keep the application and service processes constantly busy. Onecommon approach to avoid this problem is to use MPI in combination with Pthreads, or someother runtime, to combine the MPI application process with a thread implementing the con-current data structure. This provides a ne-grain implementation, but at the expense of porta-bility and predictability because the multiple models and runtimes interact in unpredictableways. Other than MPI, there are concurrent data structures and APIs designed for multicore,like OpenMP, that can be used, but they do not scale to execute on clusters or efcientlyscale to the hundreds and thousands of processor cores which is the intent of our design.Our approach to the design of an ordered linked-list service relies on FG-MPI and avoids thepreviously mentioned problems to provide a scalable data structure service to applications.

    In this paper we give the design, implementation and evaluation of an ordered linked listdata structure in FG-MPI. We make the following contributions:

    A demonstration of how the FG-MPI extensions to MPI makes it possible to follow,within MPI, a process-oriented design methodology where the resulting process struc-ture reects the problem rather than the machine. This makes it possible to add complexdata structures to MPI by using a service-oriented approach.

    We provide a novel design of a pure message-passing implementation of an or-dered linked list targeted to the type of multicore clusters that are common to high-performance and cloud computing environments.

    We introduce a variety of performance-tuning parameters and investigate the effect of these parameters with regards to tuning the service to the underlying characteristics of the machine and network to achieve good performance across varied machine sizes andcommunication fabrics.

    Unlike many MPI programs, our mapping of processes to OS processes on a multi-core machine, makes it possible to expose a large amount of concurrency that can bepredictably scheduled. We also introduce a free process sub-service to allocate anddeallocate processes to dynamically adjust to varying loads and demands.

    We introduce shortcuts, a novel technique related to service discovery and relate thisto trade-offs between data consistency and performance.

    In Section 1 we briey describe related work and how our approach differs from existingwork in the area. A discussion of service-oriented programming and the support for it withinthe FG-MPI runtime is given in Section 2. In Section 3 we describe the design of the ordered

    1C functions, named procedures

  • 8/13/2019 SOA MPI Programming

    3/20

    S. Alam et al. / Service-Oriented Programming in MPI 95

    linked-list service, describing the implementation of the operations, trade-offs with respectto different consistency properties, and the introduction of parameters related to boundedasynchrony, trade-offs between parallelism and interleaved concurrency, adjustments to thegranularity, and the mapping of the service onto the system. Shortcuts are discussed in Sec-tion 3.6. In Section 4 we describe how the service is mapped and composed with the applica-tion. In Section 5 we experimentally show how these parameters affect the behaviour of theservice. Conclusions are given in Section 6.

    1. Related Work

    The focus of MPI is on performance and as a result it supports a wide variety of communica-tion routines to match modern network protocols, interfaces and fabrics. In contrast to syn-chronous message-passing languages like occam- [9], MPI programs make frequent use of non-blocking asynchronous communication to overlap computation and communication. Themessage latency between machines in a cluster is relatively high in comparison to on-chip

    memory-based messaging and this send and forget model of messaging makes it possibleto off-load message delivery to the network interfaces and devices. The intent is to increasethe network load to better utilise the network hardware and have more messages in ightto provide more work for each machine, thereby improving performance by mitigating theoverhead of communication. As shown by Valiant [10], the amount of work needed per ma-chine to overlap with communication depends on the latency and bandwidth characteristicsof the network. This suggests that, for scalability, the messaging needs to be able to adjustto the characteristics of the network in much the same way that programs need to take intoaccount the memory hierarchy. The tuning parameters introduced in our design come froma two-level view of the network and the need to adjust the messaging to the fast local andslower non-local communication mechanisms in a cluster of multicore machines. We viewthis as essential to the design of programs to scale to hundreds and thousands of processorsand differentiates our work from languages and systems that execute on a single multicoremachine.

    A linked list is a simple well-known data structure that has been frequently implementedas a concurrent data structure [11,12,13]. We make use of some of the ideas in [13] (Chapter9) for the design and correctness of our linked list. In particular the notion of atomic actions,hand-over-hand 2 and forward-only traversal of the list have their counterparts in our design,however, the design is signicantly different in that the list elements are active processeswhere the data structure has control over the operations, not the application processes as inthe case of concurrent data structures.

    In cloud computing environments hash-based storage structures like Cassandra [14] (andkey-values stores) are commonly used to allow for distributed access to the data. Althoughthese systems are based on message passing they are optimised for coarse-grain access tolarge data. Our distributed ordered linked list provides similar types of access to data as Cas-sandra but with more of a focus on scalability and low-latency where we are consideringner-grain in-memory access to data rather than large blocks of data residing on disk. Aswell, as expected, distributed storage systems are designed for availability and reliability,which we do not consider. A notable advantage of our ordered linked-list structure is thatbecause keys remain sorted it would be relatively easy to extend our operations to supportrange queries, which is inefcient on simple hash-based structures. More generally in Peer-to-Peer computing Distributed Hash Tables (DHT) provide a pure message-based implemen-

    tation of a look-up service designed for Internet applications [15]. The primary focus of these

    2The lock for the next item in the list is acquired before releasing the lock for the current list item.

  • 8/13/2019 SOA MPI Programming

    4/20

    96 S. Alam et al. / Service-Oriented Programming in MPI

    systems is on scalability and availability, particularly in the case where processes in the DHTfrequently leave and join (i.e., churn), which is substantially different from our use case.

    2. Service-Oriented Programming

    Our objective is to take advantage of FG-MPIs support for ne-grain processes to implementan ordered linked-list service. The service consists of a collection of processes with, in itsnest granularity, one list node per process along with a message interface for applicationsto communicate with the service. In the following we give a brief description of FG-MPI anddiscuss the advantages of providing distributed data structures as a service.

    An FG-MPI execution, [P, O, M ], can be described in terms of P the number of MPIprocesses per OS process 3 , O, the number of OS processes per machine and M , the number of machines. A typical MPI execution is of the form [1, O, M ] where N , the total number of MPIprocesses as given by the -n ag of MPIs mpiexec command, equals O M . In FG-MPIwe added an -nfg ag to mpiexec enabling one to specify P > 1, where N = P O M .4Figure 1 shows a [4, 2, 2] mapping started with the command:

    mpiexec -nfg 4 -n 4 .

    Processor A

    Core 0

    Core 1

    Processor B

    Core 0

    Core 1

    4 OS-processes

    16 MPI-processes

    manager

    list

    list

    app

    0

    1

    2

    3

    manager

    list

    list

    app

    4

    5

    6

    7

    manager

    list

    list

    app

    8

    9

    10

    11

    manager

    list

    list

    app

    12

    13

    14

    15

    Figure 1. A cluster consisting of 2 machines each with 2 cores and a [4, 2, 2] mapping with one manager, twolist nodes, and an application process per OS process and 16 MPI processes in total. For the linked-list service,more list node processes will be added per core by increasing the nfg count (currently 4) in the mpiexeccommand.

    The P co-located processes are full-edged MPI processes that share the middlewareinside the single address space of an OS process. FG-MPI uses coroutines to implement MPI

    3We refer to these P MPI processes as co-located processes sharing a single address space. The terms process , ne-grain process and MPI process are used interchangeably. The term OS process is used to refer to anoperating-system process.

    4Both -n and -nfg can be used with mpiexec colon notation to create mappings with differing P s, Osand M s for each executable.

  • 8/13/2019 SOA MPI Programming

    5/20

    S. Alam et al. / Service-Oriented Programming in MPI 97

    processes as non-preemptive threads with an MPI-aware user-level scheduler. The schedulerworks in conjunction with the MPI progress engine to interleave the execution of the MPIprocesses [6]. Each MPI call provides a potential descheduling point for one co-located pro-cess to cooperatively yield control to another process. Each process, upon making an MPIcall, will try and progress its own request 5 , as far as possible, as well as any outstandingrequests posted by other co-located processes. If it is unable to complete its call then it yieldscontrol to the scheduler, which selects another process to run. FG-MPI enables expressionof function-level parallelism due to its fast context-switching time, low communication andsynchronisation overhead and the ability to support thousands of MPI processes inside a sin-gle OS process [7]. This allows us to map MPI processes to functions instead of main pro-grams (see Section 4). In summary, FG-MPI is integrated into the MPICH2 middleware andextends its execution model to support interleaved concurrency of ner-grain MPI processesinside an OS process.

    In MPI programmers can, and frequently do, use non-blocking communication to switchbetween code segments to introduce slackness to overlap computation with communicationor ensure a better computation to communication ratio. In essence, programmers are doing

    their own scheduling inside their program which adds to the complexity of the program andall but destroys program cohesion [6]. In FG-MPI programmers can take advantage of the in-tegrated runtime scheduler to decompose their program into smaller processes that better re-ect the program rather than code for optimising the messaging. In particular, for distributeddata structures FG-MPI makes it possible to separate the data structure code from that of theapplication using that data structure.

    As previously stated, we implement our distributed ordered-list structure as a distributedsystem service. We distinguish this type of library from the usual type of MPI library wherethe library computation is done by the same set of processes calling the library. For example,an MPI library for matrix operations rst distributes the matrix and then all of the processescall the library routines to collectively perform the computation on their part of the matrix.Implementing more complex data structures on the same set of processes is difcult becauseof the need to intertwine the application code with the code for managing the data structure.As a result, implementations either use threads, as in implementations of tuple spaces [16]in MPI [17], or simply map the data structure onto its own set of resources as in C-MPIsimplementation of a DHT for MPI [18]. FG-MPI provides an alternative way to map theapplication and data structure processes inside the same OS process.

    This approach enhances portability, exibility, predictability and controllability of thesystem. With regards to portability it relies on pure message passing in MPI and avoids theresource contention issues that arise in mixing MPI with threads [19]. FG-MPI enables one toexpose more ne-grain concurrency and hence more parallelism to be potentially exploited.Each MPI process represents a unit of execution that can independently be replicated toscale up the program. As we describe in Section 4, we can exibly map processes taking inaccount the size of the machine and to decide, relative to each other, which processes executein parallel and which interleave their execution within a single core. The added predictabilitycomes from the ability to use one core per OS process mapping to reduce the effect of OSnoise [20] and the fact that an MPI-aware scheduler can provide more predictable interleav-ings. In addition, as described in Section 3, we can introduce a variety of parameters affect-ing the behaviour to give control over the granularity, number of outstanding messages andload-balancing.

    These advantages could also be achieved by careful programming or re-factoring, but

    5MPI denes MPI Request objects that are used for a number of purposes. Requests here refer to send orreceive request handles that are created internally as a result of MPI calls and are used to manage completionof MPI operations.

  • 8/13/2019 SOA MPI Programming

    6/20

    98 S. Alam et al. / Service-Oriented Programming in MPI

    FG-MPI makes it easier to encapsulate program behaviour and externalise the parametersmost affecting performance to match the application and machine. Although in FG-MPI thereare some additional programming restrictions with regards to global and static variables 6 andoverheads from the extra messaging costs, for many applications this is a reasonable trade-off for the increased programmability, portability and exibility in exposing more ne-grainconcurrency.

    3. Ordered Linked-List Service

    As a rst step in the design of our ordered linked-list data structure service, we take a ne-grain approach where we represent each list node as an MPI process and store a single dataitem in that list node. Later in Section 3.5 we discuss a performance optimisation of thedesign to allow for multiple data items per list node, which lets the user relax granularity.By using FG-MPI we can develop and test this initial implementation with thousands of listitems on one machine and even with millions of processes on a small cluster.

    43 3

    27

    An MPI process inordered list

    Minimum key valueof items stored innext MPI process

    Stores one or morekey values

    Rank of MPI processwith next larger key

    valuesPrevious MPI

    process inordered list

    Next MPI process inordered list

    Data associated withkey

    Figure 2. A node process (part of an ordered list)

    As shown in Figure 2 each process (i.e., list node) in the list stores the following values:

    a) the MPI process rank (i.e. identier) of the next process in the list,b) the key (or ordered list of keys in the multi-key case),c) the data associated with the key, andd) the minimum key ( min-key ) associated with the next process in the list.

    The data stored inside each process is almost identical to that of the standard implementation

    of a linked list in a procedural language. The MPI process rank plays the role of a pointer tomemory where a process can only communicate with the next process in the list. The onlydifference is item (d), the minimum key of the next process. This value is kept for correctnessand performance of our list operations, which will be discussed in Section 3.1.

    Our intent was to design a list potentially supporting millions of nodes with thousandsof operations simultaneously accessing, adding and deleting from the list. In order to reasonabout the implementation and in particular to ensure freedom from deadlock we imposed thefollowing two conditions:

    a) processes initiate communication only in the forward direction, andb) operations on the list process are atomic.

    6The privatisation of global variables is commonly used in systems that allows multiple user-level threads toshare the same address space and a number of tools are available to facilitate their privatisation [21,22].

  • 8/13/2019 SOA MPI Programming

    7/20

    S. Alam et al. / Service-Oriented Programming in MPI 99

    Given a list of N processes, one can view the list as being comprised of a collection of nestedservers where the i-th process is the client of the service provided by processes i + 1 to N .According to our two conditions client i can only make requests to the service provided byprocess i + 1. As well, the operation is atomic, implying that once a request has been madeit completes and neither client i or the server at i + 1 will accept new requests. In order toperform the request the client and server may engage in a series of communications as partof the request but this is assumed to terminate and all communications are local between asmall xed set of processes.

    We claim that any request made to the head of the list eventually completes and thus theservice is deadlock-free. The base case for server N is true because it depends only a series of local communications which are assumed to complete. 7 More generally, since list operationsare atomic, we have that all requests by client N i to server N i + 1 complete and byinduction it follows that requests by client i = N 1 (the rst list process) complete. It alsofollows from the two conditions that requests to the list cannot jump over another request.

    We take advantage of MPI message-passing semantics to enforce these two conditions.Every list process blocks on an MPI Recv() with MPI ANY SOURCE (i.e., ready to receive a

    message from any source). Since a processs predecessor is the only process that knows itsMPI rank, the predecessor is the only process that can initiate communication. Once this ini-tial communication is made, the process learns the identity of its predecessor and the twocan communicate back and forth to perform all local changes needed to complete the op-eration. Once both processes have completed the local operation they both block again ontheir respective MPI Recv() routine. In addition MPI guarantees FIFO delivery of messagesbetween two processes, which ensures that one message (operation) cannot overtake anotherinside the message queues; however special handling is necessary for operations where theprocesss predecessor changes (Sections 3.1.2, 3.1.3). In this case we need to ensure that alloutstanding messages to a list process are received before switching that list nodes prede-cessor.

    3.1. List Operations

    There are three types of requests that can be sent to our ordered linked-list service: FIND,INSERT and DELETE. Other operations such as UPDATE can be added but these threeoperations are sufcient to illustrate the basic properties of the service. Requests are of theform: operation type, source process rank, key-value, sequence number, and data (in the caseof an insert operation). Application processes initiate requests and the process in the listperforming the operation is the process that replies to the application process making therequest.

    In the following discussion we assume process A is one of the processes in the linked-list service and it is initiating contact with process B, the next process in the list. A thirdprocess, named C, with different roles for different operations is also present. We describethe implementation of the list operations in Sections 3.1.1, 3.1.2, and 3.1.3 together withFigure 3.

    3.1.1. FIND Operation

    As shown in step 1 of Figure 3(a), suppose that B has just received a FIND operation messagefrom A. The message from A contains the operation, the key, the rank of the applicationnode which made the request along with the applications sequence number. After receivingthe message, B searches locally for the key in the message. Success is relayed back to the

    7Server N acts as a sentinel and is congured with the NULL service, and any request generated by N signalsfailure which is relayed back to the application process.

  • 8/13/2019 SOA MPI Programming

    8/20

    100 S. Alam et al. / Service-Oriented Programming in MPI

    C

    A

    (b) INSERT

    B

    Step 1: A requests for a new node , C replies

    C

    A B

    Step 2: A sends C information about BC then connects to B

    C

    AB

    Step 3: A sends terminate to B before connecting to C

    - List Node

    - Free Node

    C

    AB

    Step 4: C is linked in andinforms application

    - Application Node

    (c) DELETE

    AC

    Step 1: A passes delete to B and waits

    B

    Step 2: B sends terminate to C beforeacknowledging to A

    A C

    B

    A C

    Step 3: A accepts C from Bthen B informs success to application

    A C

    Step 4: B converts to a free node

    (a) FIND

    Step 2: If match found or match not possibleB informs application

    (else request passed to C )

    A C

    B

    A C

    Step 1: A passes find to B

    B

    - Manager Node

    LEGEND

    - Existing Link

    - New Connection

    - Message Sent

    - Reply Sent

    - Free Node Service Route

    Connection Arrows:

    Messaging Arrows:

    Node Types:

    B B

    Figure 3. Implementation of the ordered linked-list operations FIND, INSERT, and DELETE. The arrowsdenote the different communications among processes A, B and C; three consecutive processes that participatein the operations.

  • 8/13/2019 SOA MPI Programming

    9/20

    S. Alam et al. / Service-Oriented Programming in MPI 101

    application process, while failure makes B compare the key in the message with the min-keyvalue. Recall that the min-key is the minimum key (or just the key, in the single key case weare describing) stored at Bs successor C. If the key is less than min-key and the key is notthe key stored at B, then the key does not exist in the list and B sends a message to signalfailure back to the application process. If the key is the key stored at B, then B replies to theapplication process with a message containing the data associated with the key. Finally, if thekey is greater than min-key , then B simply forwards the original message onto C.

    3.1.2. INSERT Operation

    As in the case of FIND, the INSERT message passes from list process to process until itreaches the location to be inserted. Assume we are currently at A where the key to be insertedis greater than the key inside A and is less than min-key of successor B. We need to inserta new process for this key between A and its successor B. Notice that min-key allows Ato detect that a process has to be inserted after A, whereas without min-key it is process Bthat would need to insert a new process before itself, and need to communicate with A. Forthis to occur, while at same time satisfying the forward-only and atomicity conditions, everyforwarded request would need a reply. Storing min-key makes it possible to asynchronouslyforward requests without having to wait for a reply. This ensures that the common case,forwarding requests, is done as quickly as possible.

    As shown in step 1 of Figure 3(b), A sends a free-node request to a manager process (seeFigure 1) for the free-node service (see Section 3.3). The free-node service, if successful,replies back to A with the MPI rank of an available free list process (process C). If there areno free processes, then the free-node service reports failure to process A, and in turn processA reports failure back to the application process making the INSERT request.

    In step 2, after A receives the rank of C, A sends the INSERT operation, the min-keyand rank information it has about B to C. In step 3 A synchronously sends 8 a terminate

    connection message to B which signals that there are no outstanding messages from A, andB can now accept a message from some process other than A. A updates its own informationwith C as its successor. Finally, in step 4, once C has received the message from A it canstore the data and signal success back to the application process. A no longer has informationabout B and can only forward requests to C. As well, C is the only process that knows aboutB and thus the only one that can forward requests to B.

    It is possible to overlap steps 1 with steps 2 and 3 if the free node service is able toreceive the data for C from A and have node C instantiated with all of the needed data. In thiscase A only needs to communicate with the free-node service and with B, after which it cancontinue to process requests.

    3.1.3. DELETE OperationIn the case of DELETE, as long as the key is less than min-key the request is forwarded.When the key equals min-key then A knows that the next process, B, is to be deleted. LikeINSERT, min-key helps to maintain our two conditions since it makes it possible to detectwhen the next process needs to be deleted.

    As shown in step 1 of Figure 3(c), A sends a delete message to B, the node to be deleted,and waits for a reply from B. In step 2, using synchronous send, B sends a disconnect messageto its successor C, which signals to C that there are no outstanding messages from B. Bnoties A that it is nished by replying to A with the information about C. In step 3, Aupdates itself so it now points to C and continues. During steps 3 and 4, B replies back to the

    application and noties the free node service that it is now free, and B now behaves as a free

    8MPI Ssend is a synchronous send, and completes only after a matching receive has been posted.

  • 8/13/2019 SOA MPI Programming

    10/20

    102 S. Alam et al. / Service-Oriented Programming in MPI

    process. In step 2, having A wait for the reply from B ensures that no other request can jumpahead of A (equivalent to hand-over-hand).

    3.2. Application Programming Interface

    An important part of the design is the implementation of the service interface. Applications

    rst need to know how to discover the service. We congure the application processes witha pointer (i.e., MPI rank) to the head of the list, which does not store any list items. Laterin Section 3.6, to improve response time, we augment this with local service discovery, butfor now we only consider the case when application processes send all requests to the headprocess.

    Although the list communication is deadlock-free, the composition of the list with theapplication processes introduces the following deadlock scenario. It is possible for there tobe a communication cycle starting from (a) the application process making the request, to (b)the list nodes traversed, to (c) the nal list process that sends the reply message back to (a).The message interface to the service must enforce the condition that the application be readyto receive all replies whenever they have outstanding requests to the service. This ensures thatfor this deadlock scenario, while all the list processes may be trying to send, the applicationprocess will rst receive before sending; thus avoiding deadlock. There are also importantperformance consequences to receiving replies quickly, since at steady-state the in-ow of requests equals the out-ow of replies; each new request depends on the receipt of a reply.

    As discussed further in Section 3.4, each application process can have a xed number of outstanding requests. The replies to these requests can return out of order because the orderdepends on an items location in the list; replies by processes towards the end of the list arelikely to return after a later request for a list item near the head of the list. As mentioned inSection 3.1 request messages contain sequence numbers. The application service interfaceadds the sequence number. Sequence numbers are carried along as part of the request and

    returned to the process inside the reply message. We use MPIs MPI Irecv to pre-post receivebuffers for the replies for each outstanding request. The pre-posted receive buffers can beused, if necessary, as a hold-back queue [23] which can be managed by the application tore-order and return replies in the order of the requests. When all initial requests are sent tothe head of the list, the list structure has the property that, since all requests are received in-order from the application process and no request can jump ahead of another one as requeststraverse the list, we can maintain sequential consistency.

    Moreover, although not done, if the head process replaced the sequence number of therequest with the message-order timestamp, then all requests are totally ordered. The times-tamp action can be viewed as a linearization point which implies the linearizability of execu-tions, again assuming all requests are sent to the head process. Later in Section 3.6 we relax

    this condition.

    3.3. Free Process Sub-service

    MPI creates a static namespace at the initialisation of the MPI execution environment(MPI Init ), and assigns consecutive integer ranks to MPI processes in the range 0 to N 1.FG-MPI decouples the namespace of the MPI processes from that of the OS processes toallow for multiple MPI processes per OS process. We take advantage of FG-MPIs abilityto expose large-scale concurrency to create a pool of free processes at the beginning of theprogram. This pool of free processes can be used to dynamically allocate and deallocate pro-cesses in response to the application load. As we discuss in this section, a free process is

    reincarnated as a list node process in case of an INSERT operation and released back to thepool on DELETE. This can be viewed as spawning of processes on a xed namespace. Thefree processes are all blocked waiting for an allocate request and do not impose an overhead

  • 8/13/2019 SOA MPI Programming

    11/20

    S. Alam et al. / Service-Oriented Programming in MPI 103

    on the scheduler (see Section 4). The manager processes are able to dynamically load balancethe allocation of free processes by communicating with each other. We discuss the details of the free process sub-service next.

    At the start of a [P, O, M ] execution for our list service, three different types of MPIprocesses are launched per OS process, see Figure 1 and see Section 4 for the details onmapping. One of them is an application process, the second is a manager process and theremaining P 2 processes are ordered-list processes. Under this mapping the maximum sizeof the list is (P 2) O M with (P 2) nodes (i.e. ordered-list processes) per OS process.Initially the ordered list processes are enqueued in a local pool of (P 2) free processes.Other mappings are possible and the only constraint is that whenever an OS process hasan ordered-list process there must also be a manager process. This allows us to dene thesize of the list as well as control the distribution of list nodes to OS processes to balancethe communication and work between co-located processes (interleaved) and non co-locatedprocesses (parallel).

    On start-up each of the manager processes has a list of the list processes local to its OSprocess. It also has information about the ranks of manager processes in other OS processes.

    Managers use a pre-dened load-balancing strategy whose goal is to evenly distribute listprocesses to OS processes while trying to keep communication local between co-locatedprocesses. The trade-off between these two conicting goals depends on the distribution of keys and overall workload and thus should be congurable.

    In our experiments the keys are uniformly random from a 32-bit key space. We testedwith varying workloads but all cases used the following simple load-balancing strategy. Inthe case of a free node request because of an INSERT operation the manager rst attemptsto satisfy the request locally. If there are no local free nodes, then the manager passes theallocation request onto the next manager where all managers have been congured into aring and each knows the next manager in the ring. The manager who succeeds in allocatinga free node replies directly to the list node making the request, allowing the INSERT tocomplete. If no free node is found by any of the managers after one round robin cycle, thenthe local manager signals failure back to the list node who made the request. In turn, the listnode noties the application process that the INSERT operation failed because the list is full.When the list is full or almost full, guaranteeing liveness is up to the application and the listservice does not guarantee fairness. In the ring of manager processes deadlock is avoided byensuring that each manager posts a receive buffer for receiving a message from the previousprocess before attempting to send a message to the next manager in the ring. Because thereceive buffer is always pre-posted, MPI middleware can always deliver a message sent byone manager process to the next manager in the ring.

    In the case of a DELETE, the free node registers itself back on the free node list. Asdescribed further in Section 3.6, locally we maintain a look-up table that processes can postto and consult. DELETE operations are fast, since they only require local operations, whereasINSERT can incur much larger delays when non-local communication is needed to satisfythe request.

    Load-balancing is a good example of a strategy that impacts performance and needs tobe congurable. The cost can depend on the workload, the relative cost of communicationbetween local and non-local processes, the distribution of keys, and also the size of the listand P (the number of local processes per OS process). An advantage of this service-orientedapproach is that load-balancing code is not scattered through the program but in one placeand adding a new strategy only requires extending the manager processes inside the free nodeservice.

  • 8/13/2019 SOA MPI Programming

    12/20

    104 S. Alam et al. / Service-Oriented Programming in MPI

    3.4. Flow Control (W and K)

    We dene a conguration parameter W in the application API to control the ow of requeststo the list. W is the maximum number of outstanding requests to the list service that anapplication process can have at any time. Let cw i denote the current number of outstandingrequests (i.e. number of requests minus number of replies) from process i. As previouslymentioned, to avoid deadlock and improve performance, we require that whenever cwi > 0,the application process must be able to receive a reply. The sum of all cw is at time T is thetotal load on the service. In the experiments in Section 5 we set W to be a constant for allapplication processes and increase the rate of requests together with W to reach steady-statewhere globally the ow of requests to the service matches the ow of replies from the service.This is used to measure the peak performance of the service. W cannot be set arbitrarily high,particularly when all requests go to the head of the list, since the saturation point tends tooccur towards the head of the list and there are overheads in the middleware that increase,which result in decreased throughput. Thus peak throughput is achieved by carefully settingW . This parameter can be extended so as it can be changed at run time per application tomaintain peak throughput.

    In MPICH2, as in most MPI implementations, short messages are sent eagerly andbuffered at the destination until matched by a receive. MPICH2, and as a result FG-MPI, hasa global buffer pool that allocates space for eager messages in addition to other dynamic MPIobjects. There is no ow control on eager sends and MPI simply aborts the execution whenthe buffer pool in the middleware of an OS process is exhausted. There is no simple techniquefor detecting these types of buffer problems in MPI, but it is possible to avoid them withoutresulting to completely synchronous communication [24]. To avoid these errors we imple-mented a bounded asynchronous scheme where for every K standard MPI sends (potentiallyeager sends) we send a synchronous MPI Ssend() to ensure that there are no outstandingmatching messages between the two processes. In the case of K = 0, every send becomes syn-

    chronous. The synchronous case is interesting because it is one technique to test for potentialdeadlock situations that are masked when buffering is available. Because MPI cannot guar-antee the amount of buffering available for asynchronous communication the MPI standarddenes a safe program as one that can execute synchronously. However, as was evident inour experiments, it is important to increase K as large as possible to overlap the computationand communication, while also ensuring there is always sufcient space in the buffer pool.This is all the more important in FG-MPI because there are more MPI processes sharing themiddlewares buffer pool and thus a greater chance of exhausting it.

    3.5. Granularity (G)

    An obvious extension to our ordered list is to allow each list process to store more than oneitem. As previously described each process stores its local set of keys and the minimum key of its successor. It is simple to modify the list process to perform a FIND, INSERT or DELETEto search its local set of items to perform the operation. The only added complication occursfor INSERT since we can either add the item to the current nodes set of items or insert theitem by adding a new process. The INSERT operation was changed so that now the processat the insertion point (process A in Section 3.1.2) can decide to add the item to its own set of items or split the items between itself and a new process. This introduces another opportunityto add a load balancing strategy to attempt to optimise for the number of items to store locally.We used a simple strategy which split the items whenever the number of items exceeds axed threshold. For DELETE operations, if the delete key matches the min-key stored in a

    process, this implies either the next process is to be deleted, or when there are multiple itemsin the process, min-key needs to be updated. Both these cases can be handled by the replyfrom B to A in step 2 of the DELETE operation shown in Figure 3(c).

  • 8/13/2019 SOA MPI Programming

    13/20

    S. Alam et al. / Service-Oriented Programming in MPI 105

    We call the maximum number of list items that a list node process can hold the granular-ity, G, of the list service. This can be adjusted dynamically. It is possible to set G initially tobe small when the list is small and then increase it as the list size increases. Both G and P arehelpful in reducing the idle time. Increasing G reduces the amount of messaging and there-fore the amount of work done in performing requests. However, to maximise the opportunityfor parallelism we need to distribute the list to the O M processing cores.

    3.6. Shortcuts

    As mentioned earlier, the application processes send requests to the head of the linked list.This has an obvious disadvantage of creating congestion at the head of the list. When P isgreater than one there are potentially active list processes co-located in the same addressspace. Rather than always send a request to the head, one optimisation is to have the appli-cation process rst check locally. If the application process can look-up the key-values of thelocal list processes along with the associated rank, then it can send the request to the processwhose key-value is closest to, but not greater than, the requested key-value. When none exist,

    it can always by default send the result to the head. One can view the local list processes asproviding a set of possible shortcuts that the application process can use to reduce responsetime as well as reduce congestion for the head and processes towards the front of the list.

    The disadvantage to the indiscriminate use of shortcuts is that there is no longer anyguarantee on the order of operations since a later operation, on even the same item, could nda new shortcut allowing it to get ahead of an earlier request. However, for every outstandingrequest the application process can store the key-value of any shortcut that was used. Thisallows it to always choose the shortcut less than or equal to the earliest shortcut used by anoutstanding request, thereby guaranteeing requests are performed in order. Likely the appli-cation process only cares about the order of requests to a given data item and gives moreopportunity to use shortcuts since now earliest can be dened with respect to each individualkey.

    Given the existence of these shortcuts one can go further and make them available tothe list processes themselves. There is no longer any guarantee on the order in which con-current requests are done, even requests to the same key-value. Of course, the applicationprocess always has the option to wait for the reply before submitting the next request. Thisuse of shortcuts by the list introduces an interesting type of probabilistic data structure wherethe shortcuts help balance requests and signicantly reduce response time. The number of shortcuts, and hence the likelihood of nding good ones, depends on the size of the list andP . On average, assuming a uniform distribution, one expects a cost of N / P rather than N / 2communications to access N list processes distributed across all of the OS processes. As well,

    shortcuts help distribute the requests across the entire list of processes rather than at the frontof the list. The managers also inuence the quality of shortcuts. If managers only allocatefree processes locally, then the shortcuts will tend to be local as well, whereas allocatingnon-locally results in better shortcuts but higher communication cost. The use of shortcuts,even without ordering, is good for the important use case where inserts and deletes are rareand the common operation is nd.

    Shortcuts are implemented by the manager process and service discovery is done byhaving each application process contact the local manager. We take advantage of the singleaddress space of the OS process and the non-preemptive scheduling (i.e. atomicity) of pro-cesses to implement a shared look-up table. The list processes update the table when theyare inserted or deleted and the application can query the table to nd a suitable shortcut.

    Although this violates pure message-passing semantics, it can be viewed as part of the localexecution environment of the processes similar to the mpiexec environment variables passedto the program at launch time or OS environment variables that can be read during execution.

  • 8/13/2019 SOA MPI Programming

    14/20

    106 S. Alam et al. / Service-Oriented Programming in MPI

    Note that using shortcuts this way can lead to race conditions, where a message may besent to a shortcut but the shortcut may be deleted or changed by the time the message reachesit. We are able to detect when a shortcut no longer exists and we modied the list and freeprocesses to report shortcut failure back to the application when this occurs. We are also ableto turn off the use of shortcuts and the application can re-submit the request with shortcutsoff for that particular request.

    We use the terms total-ordering for the implementation that does not use shortcuts,sequentially-consistent for the one where only application processes use shortcuts, and no-consistency 9 for the version that allows use of shortcuts by both the application and the listprocesses. We extended our service discovery to include both these shortcut semantics.

    4. Mapping Issues

    In this section we describe how the application, manager and list processes are mapped to OSprocesses (as an example see Figure 1). The mpiexec command performs a 1-dimensionalmapping of MPI processes to different cores and machines. FG-MPI provides a second di-mension to the mapping of multiple MPI processes within the same OS process. Just as mpiexec binds OS processes to cores, we dene a function FGmpiexec , called from main ,that binds co-located MPI processes to different functions. The binding of processes to func-tions can be dened in a general way through a user-dened function that takes a pro-cesss MPI COMM WORLD rank as its input parameter and returns a pointer to the function thatMPI process will be executing. Note that each of these functions, which the processes arebound to, are written as regular MPI programs, beginning with MPI Init and ending withMPI Finalize calls. The number of co-located processes is specied by the nfg parameterto mpiexec and as shown in Figure 1, the MPI process ranks are assigned in consecutiveblock ranges of size nfg .

    Listing 1 shows an example of binding MPI processes to three different types of func-tions per OS process: LocalManagerNode function for the manager process, AppNode func-tion for the application process and ListNode function for the list processes. Listing 1 con-tains two user-dened mapping functions; binding and map lookup . The binding function,as previously mentioned, takes the process rank as input and returns the corresponding func-tion pointer. The map lookup mapper function takes a string as its third parameter and mapsthat to a binding function. In this example the str parameter is not being used, however, itspurpose is to allow selection of different binding functions at runtime through the mpiexeccommand line. The FG-MPI runtime system inside each OS process is initialised through acall to the FGmpiexec function, which takes map lookup as a parameter and spawns the MPIprocesses. For the linked-list example this allows us to interleave the application and datastructure node processes within the same OS process.

    Depending on the operations on the list service, the list processes may change state fromfree to active and vice versa. As mentioned in Section 3.3, initially all the P 2 listprocesses add themselves to the local pool of free list processes. Adding to the free list is doneby each of the list processes executing a MPI Recv call. Since this is a receive call for whichno matching messages have arrived, the receive call cannot complete and FG-MPIs schedulerplaces all these list processes in its blocked queue. In the free state, these list processes do nottake up any additional resources other than the small amount of memory used to store state.These list processes move to active state and become part of the list service when they areallocated by the free process service, which unblocks them by sending a message to them.

    9No-consistency means there is no guarantee on the order in which requests are performed. Note, the listitself always properly orders the items.

  • 8/13/2019 SOA MPI Programming

    15/20

    S. Alam et al. / Service-Oriented Programming in MPI 107

    / * * ** * ** F G - MP I B o il e rp l at e b e gi n * * ** * ** * * /# inc lude " fgmpi .h"/ * F o rw a rd d e cl a ra t io n s o f t he t hr e e

    * f un ct io ns t ha t t he M PI p ro ce ss es a re b ou nd t o. * /i nt L i st N od e ( i nt a rg c , c ha r * * a rg v ) ;i nt L o ca l Ma n a ge r No d e ( i nt a rg c , c ha r * * a rg v ) ;

    i nt A p pN o de ( i n t a rg c , c ha r * * a rg v ) ;FG_ProcessPt r_ t b inding( in t a rgc ,char** a rgv, in t rank){

    i f ( rank == s ta r ting_rank_of_co - loca ted_processes )re turn (&Loca lManagerNode) ;

    e l se i f ( rank == las t_ rank_of_co - loca ted_processes )re turn (&AppNode) ;

    elsere turn (&Lis tNode) ;

    }FG_MapPt r_ t map_lookup( in t a rgc ,char** a rgv,char* s t r ){

    re turn (&binding) ;}

    i nt m ai n ( i nt a rg c , c ha r * a rg v [] ){

    FGmpiexec(&argc , &argv, &map_lookup) ;re turn (0);

    }/ * * ** * ** F G - MP I B o il e rp l at e e nd * * ** * ** * * /

    Listing 1. An example of MPMD mapping for the linked list.

    FG-MPI makes it possible to combine those processes implementing the service withthe application processes using the service. As a service this makes it possible to separate the

    data structure code from the application code as well as having the ability to exibility mapapplication and service processes in a variety of ways.

    5. Experiments

    In this section we experiment with different parameters of the ordered linked-list service andshow how varying them affects the performance. Recall that operations on a linked list areinherently non-scalable and our objective here is to demonstrate the working of a service-based approach and the exibility in tuning of its parameters. In all the experiments reportedbelow we report the steady-state throughput (i.e., number of operations per second) of the

    ordered linked list. The INSERT operation was initially used to build the list to capacity andthen two different workloads were used to measure the throughput. One workload consistedof an equal number of INSERT, DELETE and FIND operations and the second consisted of FIND operations only. The two workloads produced similar results with a slight differencein performance, therefore, we report the results for the second workload only.

    For the experiments, the test setup consisted of a cluster with 24 machines connected bya 10GigE Ethernet interconnection network. Each of the machines in the cluster is a quad-core, dual socket (8 cores per machine) Intel Xeon R X5550, 64-bit machine, running at 2.67GHz. All machines have 12 GB of memory and run Linux kernel 2.6.18-308.16.1.el5.

    5.1. Consistency Semantics

    Figure 4 shows the throughput achieved with the three consistency semantics described inSection 3.6, i.e., total-ordering, sequentially-consistent and no-consistency. The size of the

  • 8/13/2019 SOA MPI Programming

    16/20

    108 S. Alam et al. / Service-Oriented Programming in MPI

    Figure 4. Throughput achieved with different consistency semantics for a xed list size, evenly distributed overthe number of cores= (O M ).

    linked list was set to 2 20 in this experiment and the number of list nodes were evenly dis-tributed over the number of cores ( O M ), by setting ListSize (O M ) = P G , with Pset to 10. As expected, the throughput with no-consistency is the highest followed by thatfor sequential-consistency and then total-ordering. In Figure 4, as we move from left to rightalong the x-axis, the list is becoming more distributed and the number of items being storedper list node is decreasing, while keeping the list size constant. The no-consistency semanticsbenets from more distributed nature of the list because the requests are spread over morecores. One could argue that, in the probabilistic sense, selecting the optimal shortcut for theno-consistency semantics takes a maximum of O (O M ) steps. Operations with the other

    two types of semantics i.e., total ordering and sequential consistency have to traverse the listto reach the correct list node and on the average take O (O M P ) steps assuming G issmall enough to neglect its cost. Total ordering also suffers from congestion in the head of the list, which is why its curve is, as expected, the worse of the three.

    5.2. G versus P

    Figure 5 shows how performance changes when interleaved concurrency ( P ) is increasedwhile reducing granularity ( G), keeping the list size and the number of cores xed. Since thenumber of cores is xed, the overall amount of parallelism is xed and the gure shows the

    trade-off between interleaved concurrency versus coarser-grain processes with more list itemsinside a process. Figures 5(a) and (b) show the trade-off between G and P with sequentially-consistent and no-consistency shortcut semantics. In Figure 5(a), as expected, it is better toreduce P and increase the granularity, G.

    Parameters G and P dene the rst two levels in the communication hierarchy of themachine. In terms of traversing the list, from fastest to slowest, there is traversal (a) insidea process, (b) between processes inside the same OS process, (c) between processes on thesame machine, (d) between processes on separate machines. There is a signicant differencein communication costs between these levels (a) tens of nanoseconds, (b) less than a mi-crosecond, (c) a few microseconds, and (d) on the order of 50 microseconds. Making G largeand P small is analogous to keeping all data in the primary cache rather than the secondary

    cache. Figure 5 is a simple illustration of the trade-offs. Since the focus of the paper is onthe design of the library we did not explore the use of different applications or additionalload-sharing strategies for the manager processes to better exploit the hierarchy.

  • 8/13/2019 SOA MPI Programming

    17/20

    S. Alam et al. / Service-Oriented Programming in MPI 109

    (a) Sequentially-consistent.

    (b) No-consistency.

    Figure 5. Effect of changing P , while keeping P G constant. The list size and the number of cores are xed.Semantics used are (a) sequentially-consistent and (b) no-consistency. (ListSize = G P O M =220 andcores= O M =176).

    There are interesting questions that arise with regards to efciently managing commu-nication costs across the communication hierarchy. On a list of size N , assuming uniformlydistributed keys, we have that N = G (P O M ) where the expected number of hops is1

    2 (G + P O M 1). With regards to latency (response time) the optimal distribution is tohave P = 1, G = N / (O M ) and map OS processes consecutively from one machine to thenext to keep communication as local as possible. But for throughput, increasing G limits therate at which requests enter the system, since when viewed as a pipeline the search inside thelist of size G at the FIND location delays all requests behind the current one. Although thisdepends on the location of the FIND, in steady-state it is likely to occur often and have moreof an effect closer to the head of the list where the load is higher. Intuitively, larger G reducesthe capacity of pipeline and speeds up requests while increasing P increases the capacity of the pipeline but slows down requests. We believe the value of G in Figure 5(a) was neverlarge enough to see this effect and provide a rationale for increasing P in the sequentially-consistent case.

    The throughput shown in Figure 5(b), with the use of shortcuts inside the list of pro-cesses, is signicantly larger than that of Figure 5(a). P determines the number of possibleshortcuts inside each OS process. Once there are more than a few shortcuts there is a high

  • 8/13/2019 SOA MPI Programming

    18/20

    110 S. Alam et al. / Service-Oriented Programming in MPI

    probability of the existence of a shortcut to a closer OS process. As a result, the expectednumber of hops begins to depend on the number of OS processes rather than the size of thelist. There is a diminishing return for adding more shortcuts since there is less chance of itbeing of value. As Figure 5(b) shows the rst 100 shortcuts increase performance after whichmore shortcuts is adding more overhead than benet as P increases.

    5.3. W and K

    Parameter W species the number of outstanding requests that each application can submitto the list service. Increasing the value of W increases the load on the system. K is a throttlingparameter that each list node uses to specify how many requests can be forwarded down thelist, before having to wait for a previously forwarded message to complete. In the perfectlybalanced case, when W equals P, each list node receives exactly one application request.When W exceeds P , each list node progresses multiple application requests up to a maximumof K . The smaller the value of K , the higher the throttling effect on the ow of requeststhrough the list service. Figure 6 shows the effect of different values of K on the throughput.

    Figure 6. Throttling effect of K on the throughput while increasing the outstanding requests ( W ) by the appli-cation processes. List size used is 2 20 . P = 100. O M = 192 cores. Sequentially-consistent semantics are usedin this experiment.

    The effect of small K clearly limits the throughput. Increasing K increases uidity in thenetwork for request propagation. There is a limit to the rate at which a process can forwardrequest, and once K exceeds this limit it no longer has any effect (its at full throttle). Thislimit depends on computation and communication characteristics of the machine. K givesus a control over the ow inside the service and it should be tuned to the communicationcharacteristics of the underlying network.

    6. Conclusions

    In this paper we discussed a service-oriented approach to the design of a distributed datastructures and presented an ordered linked-list service as an example. The implementationof a distributed data structure as a service uses its own collection of processes which makesit possible to separate the data structure code from the application code resulting in reducedcoupling and increased cohesion in the components of the system.

    In parallel computing, more so than in other areas, there is the additional challengethat the performance of the library must be portable across a wide range of machines sizesand communication fabrics. Scalability across machines and communication fabrics requires

  • 8/13/2019 SOA MPI Programming

    19/20

    S. Alam et al. / Service-Oriented Programming in MPI 111

    the addition of tunable parameters to control resources based on the characteristics of themachine and networks. In our design we introduced a variety of these parameters to controlcomputation/communication overlap ( K ), interleaving versus parallel ( P ), load on the datastructure ( W ) and process granularity ( G).

    The service-oriented approach to the design of an ordered linked list is substantially dif-ferent from existing work. It borrows ideas from work on concurrent linked lists but is basedon pure message-passing and does not require support for shared memory. There is somecommonality with distributed systems in cloud environments but with a focus on scalabil-ity and latency, and not availability and reliability. Our ordered linked list implementationcan execute on a single multicore but more importantly it can also potentially scale to ma-chines with thousands of cores to support sorting and querying for large datasets that can takeadvantage of the large amounts of available memory.

    The experiments demonstrated the ability to scale to an ordered linked list with over amillion data items with up to 192,000 MPI processes executing on 192 cores. As expected,for a list of size N , the O ( N ) communications per request makes the one item per processimpractical for large lists. However, we showed that better performance is possible and de-

    pends on the level of consistency needed and trade-offs between G , the number of list itemsstored inside a process, and P , the number of processes inside an OS process. The values of P , O, G and N are all runtime or dynamic parameters that do not require re-compilation of the program making it possible to exibly map an application onto varying types of clusterarchitectures without a need to re-design or recompile the library.

    In conclusion, by using a service-oriented approach we are able to create an orderedlinked-list library that can be used within MPI programs. The linked list is a relatively com-plex data structure and our design decouples the code needed to implement the list from theapplication and encapsulated the code related to performance inside the library while ex-posing a simple set of parameters for the application programmer or user to exibly tunethe performance of the system. This supports our view that a service-oriented approach todistributed data structures provides an interesting design space for large scale, high perfor-mance, distributed systems. It lies at the intersection of parallel computation and distributedsystem design, and well-suited for the types of cluster of multicore machines used in highperformance and cloud computing environments.

    Acknowledgements

    The authors wish to thank the anonymous reviewers for their valuable comments. We grate-fully acknowledge NSERC Canada for their support of this research.

    References

    [1] B.L. Chamberlain, D. Callahan, and H.P. Zima. Parallel programmability and the Chapel language. Int. J. High Perform. Comput. Appl. , 21:291312, August 2007.

    [2] Carl G. Ritson and Peter H. Welch. A process-oriented architecture for complex system modelling. Con-currency and Computation: Practice and Experience , 22:965980, March 2010.

    [3] P.H. Welch. Process Oriented Design for Java: Concurrency for All. In H.R.Arabnia, editor, Proceed-ings of the International Conference on Parallel and Distributed Processing Techniques and Applications(PDPTA2000) , volume 1, pages 5157. CSREA, CSREA Press, June 2000.

    [4] Mike Burrows. The chubby lock service for loosely-coupled distributed systems. In Proceedings of the7th symposium on Operating systems design and implementation , OSDI 06, pages 335350, Berkeley,CA, USA, 2006. USENIX Association.

    [5] Daisuke Tsukamoto and Takuo Nakashima. Implementation and evaluation of distributed hash table usingMPI. Broadband, Wireless Computing, Communication and Applications, International Conference on ,0:684688, 2010.

  • 8/13/2019 SOA MPI Programming

    20/20

    112 S. Alam et al. / Service-Oriented Programming in MPI

    [6] Humaira Kamal and Alan Wagner. An integrated ne-grain runtime system for MPI. Computing , pages117, 2013.

    [7] Humaira Kamal and Alan Wagner. Added concurrency to improve MPI performance on multicore. InParallel Processing (ICPP), 2012 41st International Conference on , pages 229 238, Sept. 2012.

    [8] C. Iancu, S. Hofmeyr, F. Blagojevic, and Yili Zheng. Oversubscription on multicore processors. In Parallel Distributed Processing (IPDPS), 2010 IEEE International Symposium on , pages 1 11, april 2010.

    [9] Peter H. Welch and Frederick R. M. Barnes. Communicating mobile processes: Introducing occam-pi. InAli Abdallah, Cliff Jones, and Jeff Sanders, editors, Communicating Sequential Processes. The First 25Years , volume 3525 of Lecture Notes in Computer Science , pages 712713. Springer Berlin / Heidelberg,April 2005.

    [10] Leslie G. Valiant. A bridging model for parallel computation. Commun. ACM , 33(8):103111, August1990.

    [11] Mikhail Fomitchev and Eric Ruppert. Lock-free linked lists and skip lists. In Proceedings of the twenty-third annual ACM symposium on Principles of distributed computing , PODC 04, pages 5059, New York,NY, USA, 2004. ACM.

    [12] Timothy L. Harris. A pragmatic implementation of non-blocking linked-lists. In Proceedings of the 15th International Conference on Distributed Computing , DISC 01, pages 300314, London, UK, UK, 2001.Springer-Verlag.

    [13] Maurice Herlihy and Nir Shavit. The Art of Multiprocessor Programming . Morgan Kaufmann PublishersInc., San Francisco, CA, USA, 2008.

    [14] Avinash Lakshman and Prashant Malik. Cassandra: a decentralized structured storage system. SIGOPS Oper. Syst. Rev. , 44(2):3540, April 2010.

    [15] R Morris IonStoica, David Karger, M Frans Kaashoe, and Hari Balakrishnan. Chord: A scalable peer-topeer lookup service for internet applications. In SIGCOMM01 , pages 2731.

    [16] David Gelernter. Generative communication in Linda. ACM Trans. Program. Lang. Syst. , 7(1):80112,January 1985.

    [17] L. M. Silva, J. G. Silva, and S. Chapple. Implementing distributed shared memory on top of MPI: TheDSMPI library. In Proceedings of the 4th Euromicro Workshop on Parallel and Distributed Processing(PDP 96) , PDP 96, pages 50, Washington, DC, USA, 1996. IEEE Computer Society.

    [18] J. M. Wozniak, B. Jacobs, R. Latham, S. Lang, S. W. Son, and R. Ross. C-MPI: A DHT Implementationfor Grid and HPC Environments. (Preprint ANL/MCS-P1746-0410), April 2010.

    [19] William Gropp. MPI 3 and beyond: Why MPI is successful and what challenges it faces. In Jesper Lars-son Tr aff, Siegfried Benkner, and Jack J. Dongarra, editors, EuroMPI , volume 7490 of Lecture Notes inComputer Science , pages 19. Springer, 2012.

    [20] Kurt B. Ferreira, Patrick Bridges, and Ron Brightwell. Characterizing application sensitivity to OS inter-ference using kernel-level noise injection. In Proceedings of the 2008 ACM/IEEE conference on Super-computing , SC 08, pages 19:119:12, Piscataway, NJ, USA, 2008. IEEE Press.

    [21] Photran. An Integrated Development Environment and Refactoring Tool for Fortran. Available fromhttp://www.eclipse.org/photran .

    [22] Elsa: An elkbound based C++ parser. Available from http://www.cs.berkeley.edu/ ~smcpeak/elkhound .

    [23] G.F. Coulouris, J. Dollimore, T. Kindberg, and G. Blair. Distributed Systems: Concepts and Design .International computer science series. Addison-Wesley, 2011.

    [24] Alex Brodsky, Jan Bkgaard Pedersen, and Alan Wagner. On the complexity of buffer allocation inmessage passing systems. Journal of Parallel and Distributed Computing , 65(6):692 713, 2005.