COMPX553, 99.05%
GPU and parallel performance engineering
CUDA C++, OpenCL, Java (ForkJoinPool, CompletableFuture), Hadoop MapReduce, Spark
A nine-assignment progression from sequential Java tuning through OpenCL and CUDA to Hadoop and Spark, applying one methodology throughout: measure, optimise, and attribute every gain to a specific cause.
- Hand-optimised a CUDA parallel reduction through a 7-step kernel series (divergence elimination, shared-memory bank-conflict fixes, coalescing, thread coarsening), reaching ~92% of theoretical bandwidth at n=20M - matching NVIDIA’s CUB library on an RTX 3070.
- Measured pinned-memory host transfers at 1.55x faster with about 9.4x lower variance, and correctly traced an impossible-looking benchmark reading to an L2-cache artifact rather than reporting it at face value.
- Reported the honest end-to-end result: once host-device transfer time was counted, a parallel CPU baseline beat every GPU method tested - the GPU is not always the right tool.
- Ported a 4-stage image pipeline to OpenCL for roughly 107-110x cumulative speedup over an already-optimised CPU baseline.
- Hadoop inverted index: 6.2x end-to-end speedup at 1.2GB input, the biggest single win a byte-level comparator that avoided object construction on the sort hot path.