Skip to content

Commit eed7ade

Browse files
committed
WIP: Course structure
1 parent 4cdaae5 commit eed7ade

File tree

6 files changed

+187
-2
lines changed

6 files changed

+187
-2
lines changed

src/SUMMARY.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
11
# Summary
22

3-
- [Chapter 1](./chapter_1.md)
3+
[Introduction](./intro.md)
4+
5+
[Schedule](schedule.md)
6+
7+
[Presentations on Programming Models](programming_models_talks.md)
8+
9+
[Setting up your environment](environment.md)

src/chapter_1.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/environment.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Setting up your environment
2+
3+
A good development environment on your computer is crucial to effective working as a computational researcher.
4+
In this section we discuss basic preliminaries to setup your machine for software development, code editing tools,
5+
external services, and other useful resources to get you started.
6+
7+
## Configuring your computer
8+
9+
These days it does not really matter any more, whether you use Windows, Linux, or Mac OS for software development.
10+
All three of them are fine and support almost anything you need. There is a small caveat with Windows on ARM architectures (
11+
e.g. recent Microsoft Surface devices ) Almost everything should work fine. But it is a relatively recent platform and
12+
there still maybe smaller support gaps.
13+
14+
### Windows setup
15+
16+
The best way to get started with development on Windows is to use [WSL - Windows Subsystem for Linux](https://learn.microsoft.com/en-us/windows/wsl/install).
17+
This gives you a complete Ubuntu Linux environment under Windows, allowing any Linux software and development libraries to run natively
18+
within Windows. It is fully Microsoft supported and the preferred way to do scientific software development under Windows.
19+
20+
To access WSL you can use the Windows Terminal app. For software development within WSL you can use [VS Code](https://code.visualstudio.com/) or a text based editor such as Neovim or Helix.
21+
22+
You should familiarize yourself with command line tools to install software under Ubuntu, the default Linux distribution in WSL. See also below for more
23+
information on this.
24+
25+
### Linux setup
26+
27+
If you are already running Linux there is not much more you need to do apart from installing your preferred development tools. We are assuming that
28+
people use Ubuntu and typically show commands for Ubuntu. But any Linux setup works fine.
29+
30+
### MacOS
31+
32+
If you are running Mac it is recommended to install [Homebrew](https://brew.sh/). This is a command line package manager that gives you access
33+
to a vast ecosystem of software tools and libraries for almost anything.
34+
35+
36+
### Coding tools
37+
38+
The most convenient graphical code editor is [VS Code](https://code.visualstudio.com). It supports a huge range of plugins with support
39+
for almost any programming language. If you like working on the command line you might also consider [Neovim](https://neovim.io/) or
40+
[Helix](https://helix-editor.com/). While these have faster editing speed than VS Code they are much harder to learn though. For Neovim
41+
a preconfigured setup such as [LazyVim](https://www.lazyvim.org/) is recommendable.
42+
43+
Many of you will do significant work in Python. One of the most frequently used Python distributions is Anaconda.
44+
Here, a personal recommendation is to install [Conda-Forge](https://conda-forge.org/download/). It is a minimalist version of Anaconda with
45+
just the interpreter and the conda-forge repository preconfigured, which has the largest selection of packages.
46+
47+
### Working on the command line
48+
49+
Whatever system you have, you will do a lot of work on the command line. Very often, when using remote machines the command line is
50+
the only way to interact with a computer. On Ubuntu and WSL your command line will typically by [Bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell)). On Mac OS it will be [Zsh](https://en.wikipedia.org/wiki/Z_shell). Both are fairly similar for most day to day use.
51+
A good tutorial to get started on these and similar so-called Unix like shells is available [here](https://cerfacs.fr/coop/unix-terminal).
52+
53+
### Version Management
54+
55+
Almost everybody uses [Git](https://git-scm.com/book/ms/v2/Getting-Started-About-Version-Control) for version management of code. You should
56+
use `git` together with a [Github](https://github.com) account. Github also has a [simple tutorial](https://github.com/git-guides) for git.
57+
58+
59+
60+

src/intro.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Introduction
2+
3+
In this training workshop you will explore programming models for scientific computing. Topics include
4+
5+
- Fundamentals of Scientific Computing
6+
- Programming languages for HPC
7+
- Multithreading and multiprocessing
8+
- GPU programming models
9+
- Widely used HPC libraries
10+
11+
The training will consist of guided sessions, student presentations, and programming exercises.
12+
13+

src/programming_models_talks.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Presentations on Programming Models
2+
3+
The morning session on Tuesday consists of talks introducing
4+
HPC Programming Models. You are asked to prepare slides
5+
demonstrating the topic together with some simple example live
6+
example codes.
7+
8+
## Distributed programming with MPI
9+
10+
MPI is a distributed programming model going back to
11+
1991. Even more than 30 years later it is still the dominant
12+
model for parallelisation on large-scale HPC clusters.
13+
14+
## Shared memory paralellisation with OpenMP
15+
16+
OpenMP goes back to 1997 and is a leading model for
17+
shared memory parallelisation on CPUs. In recent versions it
18+
even supports some offloading to GPUs.
19+
20+
## CUDA for software development on NVIDIA GPUs
21+
22+
CUDA is the dominant programming model for NVIDIA GPUs. It is
23+
a large ecosystem consisting of CUDA compiler , development
24+
environments and scientific libraries.
25+
26+
## AMD HIP
27+
28+
HIP is AMD's programming model for AMD GPUs. It is fairly similar
29+
to CUDA and allows for easy portability between CUDA and HIP code.
30+
31+
## OpenCL - Vendor independent GPU programming
32+
33+
OpenCL was originally developed as an open standard to compute
34+
with the vendor dependent CUDA ecosystem. While it is less
35+
used directly in scientific computing it is still very important
36+
for development on embedded devices. And even for Scientific
37+
Computing applications it still provides a powerful way to
38+
write device independent GPU kernels.
39+
40+
## SYCL - A growing heterogeneous computing standard
41+
42+
SYCL has evolved from OpenCL to provide a modern heterogeneous
43+
computing environment in C++. It is the programming standard
44+
underlying modern Intel GPU accelerators but also supports AMD
45+
and NVIDIA.
46+
47+
## Metal - Apple's take on GPU computing
48+
49+
Apple Metal is rarely used for scientific computing. But it is
50+
a powerful model and the only way to access GPU cores on Apple
51+
Silicon.
52+
53+
## SIMD - Low-level vector registers
54+
55+
SIMD is not really a programming model. It describes the set
56+
of instructions found on most modern CPUs to efficiently execute operations on vector registers. Any CPU code targeted for
57+
performance is optimised to make use of SIMD instructions as much
58+
as possible.
59+
60+
## Parallel Programming with Jax
61+
62+
Jax is a library for efficient parallel array computations.
63+
It is mostly used for Machine Learning but can also be used
64+
to efficiently implement many other algorithms in scientific
65+
computing.
66+

src/schedule.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Schedule
2+
3+
Each day consists of a morning session from 10am to 12:30 and an afternoon
4+
session from 2pm to 4pm.
5+
6+
## Monday
7+
- Morning Session
8+
- Setting up your software environment
9+
- Fundamentals of HPC: hardware, programming languages, parallelisation, performance models.
10+
- Afternoon Session
11+
- Discussion of expectations for the week
12+
- Preparation time for Tuesday presentations
13+
14+
## Tuesday
15+
- Morning Session
16+
- Talks on HPC programming languages and environments
17+
- Afternoon Session
18+
- CDT Group session on living safely in London
19+
20+
## Wednesday
21+
- Morning Session
22+
- Introduction to dense and sparse linear algebra software
23+
- Afternoon Session
24+
- The UCL HPC Facilities
25+
26+
## Thursday
27+
- Morning Session
28+
- Presentations on mathematical software libraries
29+
- Afternoon session
30+
- Open-source Hackathon
31+
32+
## Friday
33+
- Morning Session
34+
- Talk on [FEniCS](https://fenicsproject.org/), a major open-source computational simulation platform.
35+
(Tentative Speaker: Dr Chris Richardson, Cambridge)
36+
- Afternoon Session
37+
- Summary and discussion of potential follow-up projects
38+
39+
40+
41+

0 commit comments

Comments
 (0)