Public release of UPC++, v2019.3.0

Skip to first unread message

Scott Baden

Mar 15, 2019, 9:02:24 PM3/15/19
The Pagoda project at Lawrence Berkeley National Lab is proud to announce a public release of UPC++, v2019.3.0.  
This release includes a major new feature: unified abstractions for Host and GPU data transfer.  
A summary of the changes appears below.  As with the previous release, we include a formal specification and a programmer's guide 
with examples to get you started.

The software, specification and programmer’s guide are accessible from:

with the following respective filenames and md5 checksums:

   upcxx-2019.3.0.tar.gz       74677feb23b466578ed83824bd3d3cdb

   upcxx-spec-V1.0-Draft10.pdf c8fb6c8c55cb818ad8cec125a9e8affd

   upcxx-guide-2019.3.0.tar.gz 1053977a9f483676f1c7ae8abbbc3216

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:

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 10 Specification, dated March 15, 2019.

New features/enhancements: (see specification and programmer's guide for full details)

  • Prototype Memory Kinds support for CUDA-based NVIDIA GPUs, see

Note the CUDA support in this UPC++ release is a proof-of-concept reference implementation which has not been tuned for performance. 

In particular, the current implementation of upcxx::copy does not utilize hardware offload and is expected to underperform relative to solutions

using RDMA, GPUDirect and similar technologies. Performance will improve in an upcoming release.

  • Support for interoperability with Berkeley UPC, see

  • There is now an offline installer package for UPC++, for systems lacking connectivity

  • Barrier synchronization performance has been improved

  • Installer now defaults to more build parallelism, improving efficiency (see UPCXX_MAKE)

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

Notable bug fixes:

  • issue #100: Fix shared heap setting propagation on loosely-coupled clusters

  • issue #118: Enforce GEX version interlock at compile time

  • issue #177: Completion broken for non-fetching binary AMOs

  • issue #183: bench/{put_flood,nebr_exchange} were failing to compile

  • issue #185: Fix argument order for dist_object constructor to match spec

  • issue #187: Improve Python detection logic for the install script

  • issue #190: Teach upcxx-run to honor UPCXX_PYTHON

  • issue #202: Make global_ptr::operator bool conversion explicit

  • issue #205: incorrect metadata handling in ~persona_scope()

Breaking changes:

  • envvar UPCXX_SEGMENT_MB has been renamed to UPCXX_SHARED_HEAP_SIZE

    For backwards compat, the former is still accepted when the latter is unset.

  • The minimum-supported version of GNU g++ is now 6.4.0

    • This also applies to the stdlibc++ used by Clang or Intel compilers

  • The minimum-supported version of llvm/clang for Linux is now 4.0

Reply all
Reply to author
0 new messages