Juliacon 2024

Hands-on with Julia for HPC on GPUs and CPUs
07-09, 13:30–16:30 (Europe/Amsterdam), TU-Eindhoven -1.350

Julia offers the flexibility of a high-productivity language while providing control, performance, and compatibility with high-performance computing (HPC) hardware. This workshop demonstrates how Julia makes modern HPC accessible. It covers resource configuration, distributed computing, code optimization for CPUs and GPUs, and versatile workflows. Participants will have the opportunity to experience it firsthand with a hands-on session on a GPU-powered supercomputer.


URGENT: You have a workshop ticket and plan to attend the workshop in person? Then please apply for a NERSC account as soon as possible! Check out the instructions here.

Why to wait hours for computations to complete, when it could take only a few seconds? Tired of prototyping code in an interactive, high-level language and rewriting it in a lower-level language to get high-performance code? By its design, Julia offers the flexibility of a high-productivity language, without sacrificing the control, the performance, and the idiosyncrasies that are often demanded by high-performance computing (HPC) hardware.

This workshop demonstrates how modern HPC is made accessible to a broad range of users using Julia. We will cover technical backgrounds and hands-on examples in contemporary uses of HPC systems: resource configuration and management; distributed computing; optimising code of CPUs and GPUs; sophisticated workflows that can run (almost) anywhere! If you’re using HPC systems right now, or if you’re just curious about HPC, this workshop is right for you.

Program
The workshop consists of 2 parts:

  1. You will learn the basics of how to develop applications and workflows for HPC systems. Topics covered in the first part are:
    - Managing your software environment on HPC systems
    - Multithreading
    - Distributed computing (structured and unstructured communication using MPI.jl, Distributed.jl, and Dagger.jl).
    - Developing code for GPUs.
    Each of the topics above will be presented in the form of technical background, and accessible hands-on examples. Since performance is key, we will also cover the relevant performance optimization tools for each area.

  2. Once you’re armed with the necessary knowledge, we will spend the second part developing an HPC application on a supercomputer: NERSC’s Perlmutter system. The application you will implement will be driven entirely from NERSC’s Jupyter Hub, and it will make use of multiple nodes and GPUs. Packages you will learn about/use: MPI.jl, Dagger.jl, HDF5.jl, IJulia.jl.

We will provide access to training accounts on NERSC’s “Perlmutter” system. Please apply to get our training account no later than a week before the workshop. Details will be posted here: https://juliaparallel.org/tutorials/.

Goals
By the end of this workshop, you will have acquired or refreshed the basics of how to develop applications and workflows for HPC systems using Julia. In the first part, you will learn about basic tools using simple examples. Then, in a second part, you will develop a parallelized version of a serial code and run it on NERSC’s GPU-accelerated supercomputer Perlmutter.

We look forward to having you on board and will make sure to foster exchange of ideas and knowledge to provide an as inclusive as possible event.

Prerequisite Knowledge
This workshop assumes a basic knowledge of the Julia language (language structure such as functions and modules, control flow, and data types including arrays), and coding best practices (such as git, ssh, and limited usage of the Bash command line interface).

We will cover the fundamentals of multi-threading, distributed, and GPU computing; as well as how these relate to modern HPC systems. Now prerequisite knowledge in these areas is needed.

Carsten is a postdoctoral theoretical physicist from Cologne, Germany, and a Senior HPC Scientist within the German National High-Performance Computing Alliance (NHR) at the Paderborn Center for Parallel Computing (PC2).

I am an application performance specialist, engaging with scientists to help them optimize their software for large-scale high-performance computing (HPC) environments. I am passionate about helping science teams tackle the problem of deploying their existing algorithms on emergent, highly heterogeneous hardware. I lead the NERSC Science Acceleration Program (NESAP), which works with users to develop workflows for the next generation of HPC systems.

My interests include new high-productivity HPC programming models for distributed programs and hardware accelerators; developing cross-facility workflows; and applying novel simulation techniques to broad range of complex systems, as well as inverse problems.