RSE Computing
RSEs with expertise in HPC and other performance-critical computing domains specialize in optimizing code for efficient execution across various platforms, including clusters, cloud, edge, and embedded systems. They understand parallel programming models, hardware-specific optimizations, profiling tools, and platform constraints such as memory, energy, and latency. Their skills enable them to adapt software to diverse infrastructures, manage complex dependencies, and support researchers in accessing and using advanced computing resources effectively and sustainably.
Basic Scientific Computing
Module Overview
This module provides an entry‑level yet rigorous foundation in scientific computing for graduate students and researchers who need to design, implement, and evaluate computational experiments. Learners gain an awareness of the numerical underpinnings of modern simulation and data‑driven research, with an emphasis on writing reproducible, efficient, and trustworthy code.
Intended Learning Outcomes
By the end of the module participants will be able to
- Benchmark small programs and interpret performance metrics in a research context.
- Explain how approximation theory and floating‑point arithmetic affect numerical accuracy and stability.
- Identify when to use established simulation libraries (e.g. BLAS/LAPACK, PETSc, Trilinos) instead of custom code.
- Write simple GPU kernels and describe the core principles of accelerator programming.
- Submit and monitor batch & array jobs on a mid‑size compute cluster.
- Describe common HPC challenges—such as I/O bottlenecks, threading, and NUMA—and propose mitigation strategies.
- Maintain research software through continuous benchmarking.
Syllabus (Indicative Content)
Week | Theme | Topics |
---|---|---|
1 | Benchmarking & Profiling | Timing strategies · micro vs. macro benchmarks · tooling overview |
2 | Precision & Approximation | IEEE‑754 recap · conditioning & stability · error propagation |
3 | Scientific Libraries | BLAS/LAPACK anatomy · hierarchical I/O libraries · overview of PETSc/Trilinos/Hypre |
4 | GPU Primer | Kernel model · memory hierarchy · CUDA/OpenCL/PyTorch lightning intro |
5 | Working on a Cluster | Slurm basics · job arrays · job dependencies · simple Bash launchers |
6 | HPC Pitfalls | I/O throughput · thread oversubscription · NUMA awareness |
7 | Software Maintenance | Regression + performance tests · continuous benchmarking pipelines |
Teaching & Learning Methods
Short lectures (30%) are coupled with hands‑on labs (70%). Students complete weekly notebooks and a mini‑project that reproduces and optimises a published computational result.
Assessment
Component | Weight | Details |
---|---|---|
Continuous labs | 40% | Weekly graded notebooks |
Final mini‑project | 60% | Report, code, and benchmark suite |
Prerequisites
- Basic programming in Python, C/C++, or Julia
- Undergraduate calculus & linear algebra
Key Resources
ChatGPT fantasy
Lecture: Scientific Computing Basics
SWS: 2 ECTS: 3
Exercise: Scientific Computing Basics Exercise
SWS: 2 ECTS: 3
Lecture: High Performance Computing
SWS: 2 ECTS: 3
Exercise: High Performance Computing Exercise
SWS: 2 ECTS: 3
Module Competences
ID | Description | Disciplines | Prerequisites | Evidence | Author | Source |
---|---|---|---|---|---|---|
comp_module_1 | Benchmark and profile computational code to evaluate performance and bottlenecks | Scientific Computing | rse_tooling_2 | Submit benchmark reports comparing implementations and justifying trade-offs | RSE Curriculum Draft | Link |
comp_module_2 | Explain and apply principles of approximation theory and numerical precision in scientific computing | Scientific Computing | Answer conceptual questions and implement small examples highlighting precision trade-offs | RSE Curriculum Draft | Link | |
comp_module_3 | Explain floating-point arithmetic and its implications for scientific accuracy and performance | Scientific Computing | comp_module_2 | Provide examples showing effects of precision loss and propose mitigations | RSE Curriculum Draft | Link |
comp_module_4 | Describe common simulation libraries and numerical frameworks (e.g., BLAS, LAPACK, PETSc, Trilinos) | Scientific Computing | List relevant libraries for a task and justify choice or avoidance of custom implementations | RSE Curriculum Draft | Link | |
comp_module_5 | Compare interpreted and compiled languages in terms of performance and suitability for computing tasks | Scientific Computing | Write code samples in both types of language and explain their performance characteristics | RSE Curriculum Draft | Link | |
hpc_module_1 | Run batch and array jobs on a cluster, including job dependencies | High-Performance Computing | rse_tooling_3 | Submit job scripts using SLURM or similar systems demonstrating correct use of job arrays and dependencies | RSE Curriculum Draft | Link |
hpc_module_2 | Identify and manage common challenges in HPC systems (e.g., I/O bottlenecks, threading, NUMA memory) | High-Performance Computing | hpc_module_1 | Provide performance logs and interpret bottlenecks in a real or simulated HPC task | RSE Curriculum Draft | Link |
hpc_module_3 | Use shell scripting (e.g., Bash) to automate HPC job submission | High-Performance Computing | rse_tooling_3 | Submit scripts that automate the execution of HPC jobs and handle job logic | RSE Curriculum Draft | Link |
hpc_module_4 | Understand and use the principles of accelerator programming (e.g., GPU kernels and frameworks) | High-Performance Computing | Submit a small CUDA or OpenCL program with documentation of the principles used | RSE Curriculum Draft | Link | |
hpc_module_5 | Maintain scientific computing software including use of continuous benchmarking | High-Performance Computing | comp_module_1 | Provide benchmark and performance history for evolving versions of software | RSE Curriculum Draft | Link |