HPC intro Autumn, 2017

This is a practical course on effectively using computers to solve scientific-computing problems in engineering and the physical sciences.

The course is suitable for students with little computing background as it starts with an introduction to UNIX environment and to programming. The second half of the course is dedicated to hands-on parallel programming.

Fortran90 is introduced and used to illustrate concepts in parallel computing, and students start writing their own parallel codes (interfaced with Python) after a relatively short instruction time. 


The importance of scientific computing has been rapidly increasing in all areas of science and engineering. It is essential for students to learn how to write efficient programs that take full advantage of the (often substantial) computational power available to them.

Traditionally, teaching in this area has focused on compiled languages (C, Fortran) and easier-to-use tools such as Matlab. However, these days most laptops use multicore processors, and a strong foundation in parallel computing is needed as well. This course blends the traditional and "modern" approach and introduces students to Fortran 90, Python, parallel computing with OpenMP and MPI.

The course consists of 2 lectures and 1 lab session per week (3 hours total). There are also 3 programming assignments, and a programming project. By the end of the course, students will be prepared to tackle research problems using the tools of modern high-performance scientific computing in an informed, effective, and efficient manner.


  • Lecture 1: Course Overview. Getting started - working with UNIX and the command line
  • Lecture 2: Software version control with GIT and Bitbucket
  • Lectures 3-6: Programming and scientific computing with Python
  • Lectures 7-10: Introduction to Fortran 90 - modular programming and using popular libraries; interfacing with Python with F2Py
  • Lecture 11: Introduction to parallel computing: Methods, tools, and performance
  • Lectures 12-14: OpenMP with Fortran90 for parallel programming of shared-memory computers
  • Lectures 15 - 17:  MPI with Fortran90 for programming on distributed-memory machines such as clusters
  • Lecture 18: Makefiles for multi-file codes
  • Lectures 19-20: Overviews of: cloud computing, GPU computing, cluster computing with Python and Apache Spark

Note: Good programming practise - planning, unit testing, debugging, validation - to be integrated with the above topics and the programming assignments.

Lectures and tutorials

Lectures will take place on Mondays, 11-12am and Thursdays 11-12am in Huxley 340. The first lecture will be on Thursday, 5th October. Students should attend one of the tutorials which are on Wednesdays 10-11am in Huxley 340 and 11am-12 in RSM 3.38. The 10am tutorials require students to bring their own laptops.

If you would like to take the class (and your CDT has not already registered you), please send Prasun an email (p.ray@imperial.ac.uk).