Generatively Programming Galerkin Projections on General Purpose Graphics Processing Units. MSc Project report, Imperial College, July 2009. Fluidity (developed by the Applied Modelling & Computation Group in the Department of Earth Science & Engineering) is a general purpose computational fluid dynamics code that uses the finite element method to solve the Navier-Stokes equations on adapting unstructured meshes. My MSc project was a pilot study into accelerating the assembly of large, sparse systems of equations using multicore architectures. CUDA versions of the assembly phase of two test problems were produced, resulting in almost an order of magnitude speedup over a multicore CPU. Since rewriting code for each multicore architecture is a labour intensive process, a compiler is produced that generates CUDA code from a high-level specification of the method written in the Unified Form Language. Targeting a new architecture only requires writing a new backend for the UFL compiler, and recompiling existing code.
Epistemic Verification of Quantum Protocols. ISO Report, Imperial College, April 2009. I surveyed and evaluated some approaches to using epistemic logic to verify the behaviour of multi-agent systems where agents perform quantum computations.
An Investigation Into Value Profiling and its Applications. Undergraduate Project Report, Manchester Metropolitan University, May 2008. I collected value profile data for the execution of a subset of the MiBench suite of benchmarks executing inside the LLVM interpreter and on the x86 architecture. The inputs and outputs of instructions and the values transferred across the data bus were recorded. These profiles were used to guide the design of a cache that stores the outputs of computations, and an encoding scheme to reduce switching activity on the data bus.