ARCHER, the UK's national supercomputing service, offers training in software development and high-performance computing to scientists and researchers across the UK. As part of our training service we will be running a 2 day ‘Single-sided PGAS Communications Libraries’ training session.
In some applications, the overheads associated with the fundamentally two-sided (send and receive) nature of MPI message-passing can adversely affect performance. This is of particular concern for scaling up to extremely large systems. There is a renewed interest in simpler single-sided communications models where data can be written/read directly to/from remote processes.
This two-day course covers two single-sided PGAS libraries: the OpenSHMEM standard http://www.openshmem.org/ on day 1, and the new open-source GASPI library http://www.gaspi.de/ on day 2. Hands-on practical sessions will play a central part in the course, illustrating key issues such as the need for appropriate synchronisation to ensure program correctness. All the exercises can be undertaken using C or Fortran. The OpenSHMEM material will be delivered by the ARCHER CSE team; the GASPI material will be delivered by Christian Simmendinger (T-Systems Solutions for Research). Further details of the GASPI training are available below.
Efficient Parallel Programming with GASPI
The HPC programmers of tomorrow will have to write codes, which are able to deal with systems hundreds of times larger than the top supercomputers of today. In this Tutorial we present an asynchronous dataflow programming model for Partitioned Global Address Spaces (PGAS) as an alternative to the programming model of MPI.
GASPI, which stands for Global Address Space Programming Interface, is a partitioned global address space (PGAS) API. The GASPI API is designed as a C/C++/Fortran library and focused on three key objectives: scalability, flexibility and fault tolerance. In order to achieve its significantly improved scaling behaviour GASPI aims at asynchronous dataflow with remote completion, rather than bulk-synchronous message exchanges. GASPI follows a single/multiple program multiple data (SPMD/MPMD) approach and offers a small, yet powerful API (also see http://www.gaspi.de). GASPI today is used in academic and industrial simulation applications.
The Tutorial gives an overview over the key concepts of elements of GASPI, such as synchronization primitives, synchronous and asynchronous collectives, fine grained control over one-sided read and write communication primitives, global atomics, passive receives, communication groups and communication queues. GASPI aims at multi-threaded execution, offers a thread-safe API and can be used in combination with all current threading models (OpenMP, Pthreads, MCTP, and others). GASPI provides its partitioned global address space in the form of configurable memory segments and features support for heterogeneous memory architectures. All GASPI segments can directly read and write from/to each other. By spawning a GASPI segment across e.g. the main memory of a distributed Xeon Phi system and a segment across the memory of the corresponding x86 host, the GASPI API hence can provide a consistent and cohesive view of this hybrid distributed memory architecture. The flexibility of the configurable GASPI segments also allows developers to both leverage multiple memory models within a single application and/or to globally tightly couple different applications (e.g. multi-physics solvers). GASPI is failure tolerant and allows for a dynamic (shrinking or growing) node set. All non-local procedures feature timeout parameters and provide a well defined exit status.
The Tutorial will provide a hands-on introduction (in C and Fortran) which features examples and use-cases for all its key concepts (segment creation, synchronization primitives, read and write communication primitives, global atomics, passive receives, collectives, communication groups and communication queues). Case studies which demonstrate the various aspects of the GASPI API and application categories that can take advantage of these aspects are identified. This Tutorial also includes a discussion of the current GPI-2 release, the first release which supports the GASPI standard. Benchmark results on different platforms are discussed. Tools for programming with GASPI/GPI such as profiling tools are presented in a "howto" section.