Global Address Space Programming Interface


Global Address Space Programming Interface is an application programming interface for the development of scalable, asynchronous and fault tolerant parallel applications. It is an implementation of the partitioned global address space programming model.

History

GPI is developed by the Fraunhofer Institute for Industrial Mathematics since 2005 and was initially known as FVM.
In 2009 the name changed to Global Address Programming Interface or GPI.
In 2011, Fraunhofer ITWM and its partners such as Fraunhofer SCAI, TUD, T-Systems SfR, DLR, KIT, FZJ, DWD and Scapos have initiated and launched the GASPI project to define a novel specification for an API and to make this novel specification a reliable, scalable and universal tool for the HPC community. GPI-2 is the first open source implementation of this standard.
The software is freely available to application developers and researchers, licenses for commercial use are available through Scapos AG.
GPI has completely replaced MPI at Fraunhofer ITWM, where all products and research are based on the new GPI-2.

Concepts

Segments

Modern hardware typically involves a hierarchy of memory with respect to the bandwidth and latency of read and write accesses. Within that hierarchy are non-uniform memory access partitions, solid state devices, graphical processing unit memory or many integrated cores memory. The memory segments are supposed to map this variety of hardware layers to the software layer. In the spirit of the PGAS approach, these GPI segments may be globally accessible from every thread of every GPI process. GPI segments can also be used to leverage different memory models within a single application or to even run different applications.

Groups

A group is a subset of all ranks. The group members have common collective operations. A collective operation on a group is then restricted to the ranks forming that group. There is an initial group from which all ranks are members.
Forming a group involves 3 steps: creation, addition and a commit. These operations must be performed by all ranks forming the group. The creation is performed using gaspi_group_create. If this operation is successful, ranks can be added to the created group using gaspi_group_add.
To be able to use the created group, all ranks added to it must commit to the group. This is performed using gaspi_group_commit, a collective operation between the ranks in the group.

One-sided communication

One-sided asynchronous communication is the basic communication mechanism provided by GPI-2. The one-sided communication comes in two flavors. There are read and write operations from and into allocated segments. Moreover, the write operations are extended with notifications to enable remote completion events which a remote rank can react on. One-sided operations are non-blocking and asynchronous, allowing the program to continue its execution along with the data transfer.
The mechanisms for communication in GPI-2 are the following:

gaspi_write

gaspi_write_list

gaspi_read

gaspi_read_list

gaspi_wait

gaspi_notify

gaspi_write_notify

gaspi_write_list_notify

gaspi_notify_waitsome

gaspi_notify_reset

Queues

There is the possibility to use different queues for communication requests where each request can be submitted to one of the queues. These queues allow more scalability and can be used as channels for different types of requests where similar types of requests are queued and then get synchronised together but independently from the other ones.

Global atomics

GPI-2 provides atomic operations such that variables can be manipulated atomically. There are two basic atomic operations: fetch_and_add and compare_and_swap. The values can be used as global shared variables and to synchronise processes or events.

Timeouts

Failure tolerant parallel programs require non-blocking communication calls. GPI-2 provides a timeout mechanism for all potentially blocking procedures. Timeouts for procedures are specified in milliseconds. For instance, GASPI_BLOCK is a pre-defined timeout value which blocks the procedure call until completion. GASPI_TEST is another predefined timeout value which blocks the procedure for the shortest time possible, i. e. the time in which the procedure call processes an atomic portion of its work.

Products using GPI