next up previous contents
Next: Language Issues Up: AUTOPACK User Manual 1 Previous: Contents   Contents

Introduction

AUTOPACK is a library that provides several useful features for programs using the Message Passing Interface (MPI) [2]:

Taking advantage of the message packing, a program may send large numbers of small messages without incurring large overhead. The small messages are automatically assembled into larger packages. These packages are sent to the destination where they are automatically burst and the individual messages delivered. This allows user code to be written in a natural style while still achieving high efficiency. It avoids the need for the user to write code to pack messages. Without modifying code, experimentation with package size and other parameters is easily conducted to obtain optimal performance for a given MPP architecture.

The library automatically manages message-passing send and receive requests. In general, the user code need not be concerned with pending send requests other than to query the library to determine if they have completed or to determine the number pending. Internal space related to requests is automatically released when requests have cleared. Receive requests are managed without direct interaction from the user code.

This library incorporates a mechanism for dynamically allocating message buffer memory for both outgoing and incoming messages. This design allows for increased efficiency by avoiding memory-to-memory copy operations. In particular it makes possible the construction of message packages without copying.

Dynamic and irregular computation often results in an unpredictable number of messages communicated among the processors. It is difficult to determine how many of these messages have a given processor as their destination without synchronized global communication. Yet this information is essential since a processor must know how many messages to wait for before proceeding to the next step of an algorithm. AUTOPACK provides a way to determine the number of incoming messages that does not require barrier synchronization. This permits the code to obtain better performance through asynchronous behaviour.

While developing parallel code, it is often desirable to have messages delivered in a deterministic order. For example, this may aid in debugging or benchmarking. However, MPI guarantees message ordering only on a point-to-point basis. The AUTOPACK library provides a convenient way to guarantee message ordering globally. For a given set of message sends among the processors, a given destination processor will always receive the same sequence of messages. This feature has attendant memory and performance costs, but code that employs it can be easily switched to normal message delivery (point-to-point ordering) when the global ordering is no longer desired.

AUTOPACK is built on top of MPI and has similar syntax and semantics for sending and receiving. The complete API consists of just 18 functions; most applications will have need for less than half of these. It is easy to learn how to use and adapting existing MPI code to use AUTOPACK is minimally invasive.

Comments and suggestions are welcome.


next up previous contents
Next: Language Issues Up: AUTOPACK User Manual 1 Previous: Contents   Contents
Raymond Loy 2000-05-12