Coursework repository for the High Performance Computing course. This course contains a number of C++ based assignments, all oriented towards speeding up the execution of computational code using CPU and GPU (OpenCL) based multi-threading.
Coursework 1: Julia Set Rendering
- Introduction to tbb::parallel_for
- Using tbb::parallel_for to parallelise a DFT
- Using tbb::task_group to parallelise an FFT
- Introduction to OpenCL programming
- Introduction to GPU specific performance optimisations (reducing memory accesses, read/writes, etc)
- Demonstration of non-trivial parallelisation
- Problem reformulation in order to expose parallelism
-
Project consisted of 6 small algorithms
- Gaussian Blur: Compute a gaussian blur over an arbitrarily large input image.
- Mining (e.g. hashing): Search for m such that hash(m) satisfies a target condition.
- Edit Distance: Compute the edit distance betwen two string of bits.
- Vector projection: Compute the projection of a vector onto a randomly generated space.
- Finite Difference algorithm seen in Coursework 3.
- Hold time: Given a set of gates and flipflops, compute the minimum hold time.
-
Objective was to get them to run as fast as possible using software or hardware acceleration
-
Very large speedups over most of the puzzles, combination of:
- Algorithmic Improvements (Reduced complexity)
- Porting the algorithm to OpenCL
Coursework 6: Group project - Optimise TestU01
- Real-world application of the knowledge gained from the course
- Unknown and complicated codebase (C with a C++ wrapper)
- Objective was to optimise three benchmarks