Skip to content


UPC++ is a C++ library that supports Partitioned Global Address Space (PGAS) programming, and is designed to interoperate smoothly and efficiently with MPI, OpenMP, CUDA and AMTs. It leverages GASNet-EX to deliver low-overhead, fine-grained communication, including Remote Memory Access (RMA) and Remote Procedure Call (RPC).

Using UPC++ at NERSC

On Perlmutter, you first must load the contrib module, which will then make the upcxx module available to load:

perlmutter$ module load contrib upcxx

One can see the available UPC++ versions using the following command:

nersc$ module avail upcxx

The default version is the latest stable release of UPC++, which is usually the best choice for most purposes. There are also variants named upcxx-cuda that include UPC++ library support for communication involving CUDA device memory, accelerated using GPUDirect RDMA hardware support.

Also see UPC++ documentation for Perlmutter for site-specific details and recommendations regarding use of UPC++ at NERSC.