The Pagoda project at Lawrence Berkeley National Lab is proud to announce a public release of UPC++. This release includes two major new features: Team-Aware APIs, and Non-Blocking Collectives. A summary of the changes appears below. As with the previous release, we include a formal specification and a programmer's guide with many examples to get you started.
The software, specification and programmer’s guide are accessible from:
with the following respective filenames and md5 checksums:
upcxx-2018.9.0.tar.gz 55ef759e00082fd5ab657a7390bb144f
upcxx-spec-V1.0-Draft8.pdf 0d8440969d6a56611d8cd4af68521246
upcxx-guide-2018.9.0.tar.gz ec2c02b64e5cc176d604a32fb430d0e8
Please use the issue tracker to report any problems or make feature requests. Alternatively, if you have private feedback or questions not suited to a public venue, you can email: pag...@lbl.gov.
We welcome all feedback, especially with respect to the new features.
Changes since the previous release:
This release supports most of the functionality specified in the UPC++ 1.0 Draft 8 Specification
New features/enhancements:
Subset teams and team-aware APIs are added and implemented
Non-Blocking Collective operations, with team support: barrier, broadcast, reduce
New atomic operations: mul, min, max, bit_{and,or,xor}
future::{wait,result}* return types are now "smarter", allowing more concise syntax
New upcxx compiler wrapper makes it easier to build UPC++ programs
upcxx-run: improved functionality and handling of -shared-heap arguments
New supported platforms:
GNU g++ compiler on macOS (e.g., as installed by Homebrew or Fink)
PrgEnv-intel version 17.0.2 or later on Cray XC x86_64 systems
Intel C++ version 17.0.2 or later on x86_64/Linux
GNU g++ compiler on ppc64le/Linux
rput_{strided,(ir)regular} now provide asynchronous source completion
Performance improvements to futures, promises and LPCs
UPC++ library now contains ident strings that can be used to query version info from a compiled executable, using the UNIX ident tool.
The following features from the specification are not yet implemented:
Non-Blocking collectives currently support only the default future-based completion
atomic_domain<float> and atomic_domain<double> are not yet implemented
team_id::when_here() is unimplemented
User-defined serialization interface
Breaking Changes:
global_ptr<T>(T*) "up-cast" constructor has been replaced with to_global_ptr<T>(T*)
atomic_domain now requires a call to new collective destroy() before destructor
allreduce has been renamed to reduce_all
Notable bug fixes:
issue #49: stability and portability issues caused by C++ thread_local
issue #141: missing promise move assignment operator