In high-performance computing (HPC), interactive access to HPC systems and the ability to perform experiments in rapid-prototyping environments are getting more important. Jupyter notebooks have become a popular tool to create and share documents that contain narrative text, visualizations and live code, and the xeus-cling kernel provides support for native C/C++ code via the Cling interpreter. In this talk, we will present how we extended these technologies to support parallel programming with MPI and OpenMP, the de-facto standards in HPC.
In the context of parallel programming, the resulting environment supports rapid prototyping and e-learning equally well. We will present an overview about its capabilities, demonstrate selected use cases and resources that we developed. In addition, we incorporated support for runtime correctness checking of MPI and OpenMP parallel programs. We will explain how we added support to write out binary programs from Jupyter notebooks and how to run code under the control of existing open source correctness tools.
In the technical part of this talk, we will focus on two contributions to xeus-cling that are most important for our use cases: support for printf and the ability to launch MPI programs. The implementation of the printf family relies on wrapper functions that are injected into LLVM's just-in-time (JIT) compilation. To launch MPI programs, we extended xeus-cling to write out binary programs based on the incremental abstract syntax tree (AST) that Cling builds internally. We will also discuss why we chose this path over teaching the interpreter to start multiple processes.