UPC++: a PGAS library for Exascale Computing
UPC++ is a C++ class library that implements the PGAS (Partitioned Global Address Space) parallel programming model. We are revising the library under the auspices of the DOE's Exascale Computing Project, to meet the needs of exascale applications requiring PGAS support. UPC++ is intended for implementing elaborate distributed data structures where communication is irregular or fine-grained. The UPC++ interfaces for moving non-contiguous data and handling memories with different optimal access methods are composable and closely resemble those used in modern C++.UPC++'s combination of low-overhead one-sided communication, remote procedure call, and aggressive asynchrony is the key to delivering high performance with irregular applications and enabling improved programmer productivity. UPC++ futures enable the programmer to capture data readiness state. They may be composed and synchronized in bulk, expressing dependence-driven execution of aggregated operations without the need for explicit busy waiting.The UPC++ programmer can expect communication to run at close to hardware speeds. To this end, UPC++ runs atop the GASNet communication library and takes advantage of GASNet's low-overhead communication as well as access to any special hardware support, e.g. RDMA. I will present examples that demonstrate the elegance of UPC++'s abstractions together with performance results obtained on scalable systems.