About

I am a Senior Software Engineer in the RAPIDS team at NVIDIA, where I am focused on improving Numba (a Python JIT compiler that targets CUDA, amongst other architectures) for GPU-accelerated data science workloads.

Past Work

  • Between May 2016 and December 2019, I was a Compiler Engineer at Embecosm, which provides open source toolchain services. Most of my work focused on GNU toolchains (GCC, Binutils, GDB, etc.), and use of simulation (e.g. Verilator) for pre-silicon toolchain development and verification. Projects ranged from bringing up a new port from scratch all the way through to long-term maintenance of toolchains deployed to many users. Embecosm’s customers tend to have unique and interesting requirements, particularly around security, custom language extensions, specialised linking processes, parallel processing, and unusual (micro-)architectural features, so most projects that I worked on involved customisation of all toolchain components, and working closely with hardware developers and system architects to produce high quality software development tools.
  • I was a Software Engineer at Anaconda, in the High Performance Analytics team. I worked on Numba, an open source Python JIT compiler, and used it to accelerate customer’s applications in some of their consulting projects. My favourite contribution to Numba is the CUDA Simulator, that enables CUDA-Python code to be debugged with any Python debugger. I developed Accelerating Scientific Code with Numba, to help data scientists quickly get started with accelerating their code using Numba, and taught a comprehensive week-long “Python for Data Scientists” course for Anaconda’s training clients.
  • Before that, I was a Platform Engineer at OpenGamma, where I worked on OG-Maths, a performance-oriented vector maths library for Java that is implemented in C++. Sometimes hand-optimised high-throughput implementations of specific pricing methods were needed; these typically were parallelised and used SIMD vectorisation and careful tuning to suit the memory hierarchy for maximum performance.
  • I completed a PhD in Computing at Imperial College, where I developed a runtime compilation framework for solving Partial Differential Equations using the Finite Element Method. My research formed the beginnings of the Firedrake Project, which provides mathematicians, scientists, and engineers with a very high productivity way to create sophisticated high performance simulations. I was based in the Software Performance Optimisation Group, supervised by Prof. Paul Kelly and David Ham. My thesis is Multilayered Abstractions for Partial Differential Equations.

Activities

  • I’m a member of the IoT Security Foundation (IoTSF). Since early 2017 I’ve been contributing to the foundation’s IoT Security Compliance Framework, which helps companies make informed security choices by guiding them through a comprehensive requirement checklist and evidence gathering process.
  • I’m a member of the Electech Council, which represents the electronics, electro-technical and embedded software industries.
  • I chaired the Imperial College Linux Users’ Society between 2009 and 2012, inviting and hosting various speakers to talk on topics including ZFS, RAID & LVM, Software Defined Radio, Automating Software Testing, and more.
  • I was a trustee of Ath Welak, a charity which helped to rebuild homes and businesses in Sri Lanka following the 2004 tsunami.