Trevor L. McDonell


About Me

  1. My interests include parallel programming (in particular, data parallelism), functional programming languages, and using graphics processors for general-purpose tasks.

  2. I am currently a Postdoctoral Researcher at the School of Informatics and Computing and the Center for Research in Extreme Scale Technologies at Indiana University Bloomington.

  3. I completed my PhD with the Programming Languages and Systems group in the School of Computer Science and Engineering at the University of New South Wales.

  4. I was previously a student at the University of Sydney, where I studied Mechatronics (Space) at the Australian Centre for Field Robotics (ACFR) 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.

  5. After graduating, I held a brief internship at the Andøya Rocket Range before working for Canon Information Systems Research Australia (CiSRA). I also took some time out of my PhD to intern at the National Institute of Informatics (NII) as well as the compilers group at NVIDIA.

  6. I spend most of my time implementing Functional Programming Languages, which I use to program CUDA graphics cards for general purpose computations (GPGPU).

  7. I am a regular at FP-Syd.

  8. I have been spotted at various cycling events.

  9. When not doing the above I practice martial arts.


  1. Type-safe Runtime Code Generation: Accelerate to LLVM
    Haskell Symposium 2015 (to appear)
    with Manuel M. T. Chakravarty, Vinod Grover, and Ryan R. Newton

  2. Converting Data-Parallelism to Task-Parallelism by Rewrites
    FHPC 2015 (to appear)
    with Bo Joel Svensson, Michael Vollmer, Eric Holk, and Ryan R. Newton

  3. Optimising Purely Functional GPU Programs
    PhD Thesis, submitted July 2014

  4. Embedding Foreign Code
    PADL 2014
    with Robert Clifton-Everest, Manuel M. T. Chakravarty, and Gabriele Keller

  5. Optimising Purely Functional GPU Programs (slides)
    ICFP 2013
    with Manuel M. T. Chakravarty, Gabrielle Keller, and Ben Lippmeier

  6. Accelerating Haskell Array Codes with Multicore GPUs
    DAMP 2011
    with Manuel M. T. Chakravarty, Gabriele Keller, Sean Lee, and Vinod Grover

  7. Scalable Computer Vision Applications
    NVIDIA GPU Technology Conference 2010 (poster session)
    with Rami Mukhtar and Ben Lever

  8. Colour correcting foreground colours for visual quality improvement, US Patent US8644602B2
    with Yu-Ling Chen

  9. 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

  10. NH3 on Si(001): Can Gaussian cluster and planewave slab models agree on energetics?
    Surface Science, 601, 14 (2007)
    with Oliver Warschkow and Nigel A. Marks

  11. Molecular Dissociation of group-V hydrides on Si(001)
    Phys. Rev. B 72, 193307 (2005)
    with Nigel A. Marks, Oliver Warschkow, H. F. Wilson, P. V. Smith and M. W. Radny


  1. Accelerate

  2. 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.

  3. Hackage

  4. GitHub repository including issue tracker and wiki

  5. Talk: GPGPU Programming In Accelerate with Haskell (speakerdeck) (video). FP-Syd April 2013, YOW LambdaJam May 2013 with additional workshop.

  6. Talk: The Accelerate EDSL.COMP4181 invited talk September 2012, 2013

  7. Talk: Accelerating Haskell Array Codes with Multicore GPUs. FP-Syd November 2010, Sapling November 2010 (short version), DAMP January 2011 (short version)

  8. CUDA

  9. A low-level FFI bindings package to the CUDA runtime library, which provides control for running general-purpose C-like SPMD (single program multiple data) programs for NVIDIA graphics cards. This package provides the low-level interface upon which the accelerate-cuda package is based.

  10. Hackage

  11. GitHub repository including issue tracker

  12. Accelerated Protein Matching

  13. HFX is an implementation of the SEQUEST algorithm for identifying proteins from their experimental tandem mass spectra. This is written in Haskell and accelerated using CUDA for GPUs.

  14. GitHub

  15. Talk: Accelerated Protein Matching, using GPUs, Sapling October 2009

  16. Blender-MPI

  17. A basic distributed parallel backend for the Blender 3D modelling and rendering application, undertaken as a special project with ViSLAB during my undergraduate years.

  18. Wiki (appears to have been taken offline)

  19. Computer Vision for an Autonomous Urban Vehicle

  20. As my undergraduate thesis I implemented computer vision algorithms using graphics processors for the autonomous vehicle project at the Australian Centre for Field Robotics. This was written in the graphics language OpenGL, before general-purpose languages for GPUs had become available.


  1. 2013: COMP1911: Computing 1A (tutor)

  2. 2012: COMP4181: Language-Based Software Safety (guest lecturer) (slides)

  3. 2012: COMP1917: Computing 1 (tutor)

  4. 2012: COMP1911: Computing 1A (tutor)

  5. 2011: COMP3141: Software System Design and Implementation (course admin)

  6. 2010: COMP4001: Object Oriented Software Development (tutor)

  7. 2010: COMP3141: Software System Design and Implementation (tutor)

  8. 2009: COMP1911: Computing 1A (tutor)

One can look into the future, or one can look at the future. The latter is by far the more instructive.

R. Scott Bakker, The Warrior Prophet


Trevor L. McDonell
School of Computer Science & Engineering
University of New South Wales
UNSW Sydney NSW 2052