Lambda scientist, physicist at heart. Runner, cyclist, coffee enthusiast. I like dogs.
Find me on GitHub, Google Scholar, and ResearchGate.
I am currently an Assistant Professor with the Software Technology group in the Department of Information and Computing Sciences at Universiteit Utrecht. My interests include parallel programming (in particular, data parallelism), functional programming languages, and using graphics processors and other compute accelerators for high-performance computing.
I was previously an Research Associate with the Programming Languages and Systems group in the School of Computer Science and Engineering at the University of New South Wales, Australia.
I previously held a Postdoctoral Researcher position at the School of Informatics and Computing and the Center for Research in Extreme Scale Technologies at Indiana University Bloomington, USA.
I completed my PhD with the Programming Languages and Systems group at the University of New South Wales, Australia.
I was a student at the University of Sydney, Australia, where I studied Mechatronics (Space) at the Australian Centre for Field Robotics (ACFR) (with honours) together with Physics and Computational Science at the School of Physics. I also had a brief encounter with ViSLAB and the Centre for Quantum Computer Technology (CQCT) during this time.
After graduating, I held a brief internship at the Andøya Rocket Range (Andøya, Norway). Before returning to academia, I worked as a software engineer for Canon Information Systems Research Australia (CiSRA) (Sydney, Australia). I also took some time out of my PhD to intern at the National Institute of Informatics (NII) (Tokyo, Japan) as well as the compilers group of NVIDIA (Seattle, USA).
I spend most of my time implementing Functional Programming Languages, primarily using Haskell and LLVM, which I use to program both multicore SMP systems as well as CUDA graphics cards for general purpose computations (GPGPU).
Before moving to The Netherlands I was a regular at the FP-Syd meetup, but now I can be found at Haskell Utrecht instead.
I have been spotted at various cycling and (ultra) running events.
When not doing the above I (occasionally) practice martial arts.
Most of my work is available on GitHub.
Embedded Pattern Matching (pdf, slides, video, artefact). Haskell Symposium 2022, with Joshua D. Meredith and Gabriele Keller
Annotating Deeply Embedded Languages (slides, video). Haskell Implementers Workshop 2022, with Robbert van der Helm and Gabriele Keller
Reverse Automatic Differentiation for Accelerate (Extended Abstract) (video). FHPNNC: Functional High-Performance and Numerical Computing 2020, with Tom Smeding and Matthijs Vákár
Accelerating Nested Data Parallelism: Preserving Regularity (pdf, video). Euro-Par 2020, with Lars B. van den Haak, Gabriele K. Keller, and Ivo Gabe de Wolff
Keynote: Functional High-Performance Computing (slides) FHPNC: Functional High-Performance and Numerical Computing 2019
Ghostbuster: A tool for simplifying and converting GADTs (pdf). Journal of Functional Programming, 28, 16 (2018), with Timothy A. K. Zakian, Matteo Cimini, and Ryan R. Newton
Streaming Irregular Arrays (pdf). Haskell Symposium 2017, with Robert Clifton-Everest, Manuel M. T. Chakravarty, and Gabriele Keller
Ghostbuster: A Tool for Simplifying and Converting GADTs (pdf, slides, video). ICFP: International Conference on Functional Programming 2016, with Timothy A. K. Zakian, Matteo Cimini, and Ryan R. Newton
Type-safe Runtime Code Generation: Accelerate to LLVM (pdf, slides, video). Haskell Symposium 2015, with Manuel M. T. Chakravarty, Vinod Grover, and Ryan R. Newton
Converting Data-Parallelism to Task-Parallelism by Rewrites (pdf). FHPC: Functional High-Performance Computing 2015, with Bo Joel Svensson, Michael Vollmer, Eric Holk, and Ryan R. Newton
Optimising Purely Functional GPU Programs (pdf). PhD Thesis, submitted July 2014
Embedding Foreign Code (pdf). PADL: Practical Aspects of Declarative Languages 2014, with Robert Clifton-Everest, Manuel M. T. Chakravarty, and Gabriele Keller
Optimising Purely Functional GPU Programs (pdf, slides). ICFP: International Conference on Functional Programming 2013, with Manuel M. T. Chakravarty, Gabrielle Keller, and Ben Lippmeier
Accelerating Haskell Array Codes with Multicore GPUs (pdf). DAMP: Declarative Aspects of Multicore Programming 2011, with Manuel M. T. Chakravarty, Gabriele Keller, Sean Lee, and Vinod Grover
Scalable Computer Vision Applications (pdf). NVIDIA GPU Technology Conference 2010 (poster session), with Rami Mukhtar and Ben Lever
Colour correcting foreground colours for visual quality improvement, US Patent US8644602B2 with Yu-Ling Chen
Object extraction in colour compound documents, US Patent US8351691B2 / Refining text extraction in colour compound documents, AU Patent 2008260018 with Yi-Ling Chen and Ping Liu
NH3 on Si(001): Can Gaussian cluster and planewave slab models agree on energetics? (pdf) Surface Science, 601, 14 (2007), with Oliver Warschkow and Nigel A. Marks
Molecular Dissociation of group-V hydrides on Si(001) (pdf). Phys. Rev. B, 72, 193307 (2005), with Nigel A. Marks, Oliver Warschkow, H. F. Wilson, P. V. Smith and M. W. Radny
Data.Array.Accelerate
defines an embedded language of array computations for high performance computing in Haskell. Computations on multi-dimensional, dense, regular arrays are expressed in the form of parameterised collective operations, such as maps, reductions, and permutations. These computations may be online compiled and executed on a range of architectures, such as GPUs.