This lesson is being piloted (Beta version)

Python for High Performance Computing

In this lesson, you will learn how to make your software written in Python go faster, both on your own desktop and on high-performance supercompters.

Prior knowledge

This lesson assumes some familiarity with programming Python, and with using high-performance computers. If you haven’t used these before, we would recommend working through the Programming in Python and Supercomputing Wales tutorials.

Schedule

Setup Download files required for the lesson
09:00 1. Getting started with Python on Supercomputing Wales How do I run Python on Supercomputing Wales?
How do I install packages and other Python software on Supercomputing Wales?
09:40 2. Hardware and software design What aspects of Python’s design prevent it running as fast as we might want?
What aspects of computer and supercomputer design allow us to work around this?
10:05 3. Coffee break Break
10:25 4. GNU Parallel for quick gains How and when do I use GNU Parallel with Python programs?
10:55 5. Profiling to identify bottlenecks Why is it important to know which parts of my software run slowly?
How do I find out where to target optimisation effort?
11:30 6. Numpy (and Scipy) How can I use Numpy to go faster on a single core?
To what extent can Numpy exploit multiple cores?
What can Scipy do to help in all this?
12:45 7. Lunch break Break
13:45 8. Multiprocessing with Pathos How can I distribute subtasks across multiple cores or nodes?
14:45 9. Coffee break Break
15:05 10. Numba for automatic optimisation How can I get performance close to that of machine-code from my hand-written Python code?
How can I target GPUs from Python?
16:20 11. Dask for parallel data operations How can I parallelise common library operations across multiple cores and nodes?
17:35 12. Summary Which techniques should I use for which types of problem?
What should I do next?
17:45 Finish

The actual schedule may vary slightly depending on the topics and exercises chosen by the instructor.