Virtual Tutorial: Introduction to HPC with Chapel, UPC++ and Coarray Fortran

I’ll teach the Coarray Fortran material in the following tutorial, which is open to the public:

                       Virtual Tutorial: 
 Introduction to High-Performance Parallel Distributed Computing 
             using Chapel, UPC++ and Coarray Fortran

      Wed/Thu July 26-27, 2023   noon - 3:15pm Eastern time

ECP, NERSC, and OLCF are jointly hosting a free two-day virtual hands-on tutorial for alternative programming models on July 26-27, 2023.

This tutorial introduces HPC distributed computing using three alternative parallel programming models: Chapel, UPC++, and Coarray Fortran. The goal is to demonstrate basic concepts of distributed programming, highlight the benefits of each model and provide experience in running examples with each. We show how example computations such as heat diffusion, k-mer counting, file processing, and distributed maps can be written to efficiently leverage distributed computing resources in the Chapel, UPC++, and Fortran parallel programming models. Attendees will be shown how to compile and run these programming examples, and provided opportunities to experiment with different parameters and code alternatives while being able to ask questions and share their own observations. Come join us to learn about some productive and performant parallel programming models!

This tutorial should be accessible to users with little-to-no parallel programming experience, and everyone is welcome. Attendees will be encouraged to try the hands-on exercises on NERSC Perlmutter and OLCF Frontier, and training accounts on Perlmutter will be offered to those who register ahead of time. The examples will also be available to attendees in a Docker container and a cloud-based virtual desktop environment.

Please register now for free at


Just to make any contribution to this overly important topic here:

As we are entering the exascale era it is getting very much obvious that we need an RMA-based dataflow programming model for spatial architectures.

MPI-RMA-based implementations of Coarray Fortran do comprise two general programming models in practice:

  1. The PGAS coarray programming model defined by the Fortran standard, and

  2. a coreRMA programming model that allows direct RMA programming using standard Fortran syntax, which is described here: Modeling and Analysis of Remote Memory Access Programming | SRI Lab

coreRMA is based on flush synchronizations that do execute independently from ‘thread’ execution at distinct parts of the hardware. (on FPGA’s this could become on-chip memories for RMA?)

With my Fortran programming, I am using coreRMA programming embedded into Coarray Fortran programming. This allows for single-image asynchronous code execution (i.e. several light-weight ‘threads’ simultaneously on each image) within a single parallel loop and is the key for virtually unlimited overlaps of computation with one-sided communication. Since kernel codes (tasks) are always executing within parallel loops, this leads naturally into a dataflow programming model, as far as I can see it yet.