Students who successfully complete the course should be able to:
Use the Linux command-line effectively, for daily tasks such as copying files, making folders, writing and compiling code; automate repetitive shell tasks with shell scripting.
Use a version control system to effectively manage code development and automate code compilation (and other general tasks) using Makefiles.
Use techniques for improving your code: by eliminating errors with debuggers; identifying potential bottlenecks with profilers; and using unit testing techniques to write repeatable tests for small chunks of code.
Be able to submit and manage jobs in a HPC cluster environment.
Describe some of the main scientific libraries used in the HPC and scientific computing community, and how to use those libraries.
Prepare simple documents using the LaTeX typesetting language.
Structure and Content
The course covers techniques and tools for writing and managing scientific code. It focuses on Linux-based clusters but many skills learned also apply outside of the HPC environment. The first semester begins with an introduction to Linux command-line, for gaining experience with working on the shell. It then covers version control automated builds using Makefiles for managing larger codes, followed by debugging tools and techniques for C code. An overview of the queueing systems on the TCHPC clusters will be covered. The second semester begins with bash shell scripting techniques, for gaining more control on how you run code, and how to automate tasks to save time. Profiling tools and techniques will be examined, to gain insights in how to focus efforts to speed up code. We will then cover unit testing in C. The use of scientific libraries in your code will be examined, including BLAS and LAPACK libraries. Finally, an introduction to the LaTeX typesetting language will be given.
100% continuously assessed programming assignments. The course will be examined by assignments. There will be a mixture of theoretical and practical assignments.