NERSCPowering Scientific Discovery Since 1974

Programming Models

A wide variety of programming models are used on NERSC systems. With the introduction of the Cori systems, NERSC has recommendations for Cori programming model choices and general philosophy for application developers. Additional non-machine-specific information on selected programming models is given below, including some links to standards committees and developmental websites. We also give additional content and links to using these models on NERSC machines.

Message Passing (MPI)

MPI is a library specification for message-passing, proposed as a standard by a broadly based committee of vendors, implementors, and users. The official version of the MPI documents are available from the MPI Forum webpage. NERSC participates as a voting member of the MPI forum. The latest version, MPI-3.1, was approved by the MPI Forum on June 4, 2015.  … Read More »


OpenMP is an Application Program Interface (API), jointly defined by a group of major computer hardware and software vendors. OpenMP provides a portable, scalable model for developers of shared memory parallel applications. The API supports C/C++ and Fortran on a wide variety of architectures. NERSC, as part of the Berkeley Lab, joined the OpenMP Architecture Review Board (ARB) in February 2015. The ARB is a group of leading hardware and software vendors and research organizations creating… Read More »


 Unified Parallel C (UPC) is an extension of the C programming language designed for high performance computing on large-scale parallel machines. The language provides a uniform programming model for both shared and distributed memory hardware. The programmer is presented with a single shared, partitioned address space, where variables may be directly read and written by any processor, but each variable is physically associated with a single processor. UPC uses a Single Program Multiple… Read More »