I am currently a Junior 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, which I use to program both multicore SMP systems as well as CUDA graphics cards for general purpose computations (GPGPU).
I am a regular at FP-Syd.
I have been spotted at various cycling and running events.
When not doing the above I (occasionally) practice martial arts.
Most of my work is available on GitHub.
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 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 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 2014, with Robert Clifton-Everest, Manuel M. T. Chakravarty, and Gabriele Keller
Optimising Purely Functional GPU Programs (pdf, slides). ICFP 2013, with Manuel M. T. Chakravarty, Gabrielle Keller, and Ben Lippmeier
Accelerating Haskell Array Codes with Multicore GPUs (pdf). DAMP 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.