Research
Research Outline
I am interested in automated techniques for helping developers to write reliable software that runs efficiently on modern hardware.
Formal verification techniques for multicore software. I am especially interested in lightweight, automatic formal verification techniques, capable of operating directly on source code, that can be implemented as efficient tools to be used in day-to-day software development.
My current research in this area is on finding bugs, or proving correctness, of graphics processing unit (GPU) kernels. The techniques I and my research group are working on, in collaboration with Shaz Qadeer, have led to the design and implementation of GPUVerify, a practical tool for analysis of GPU kernels. This work uses automated theorem provers and invariant inference techniques, and is implemented using the LLVM/CLANG and Boogie frameworks.
More generally, I am interested in formal analysis techinques for concurrent software. With colleagues formerly at the Univeristy of Oxford in the group of Prof Daniel Kroening (and now scattered across the world!) I have designed various analysis techniques related to concurrency; see the papers below.
Software performance optimization for multicore processors. To take advantage of modern multicore processors, we need suitable abstractions to allow programmers to write high-level, portable programs, from which efficient parallel code can be generated. I got interested in this area while working as a Research Engineer at Codeplay Software Ltd. This is a key focus for the CARP project, which I am coordinating.
Selected Papers
- GPUVerify: a Verifier for GPU Kernels (OOPSLA'11)
- Counterexample-Guided Abstraction Refinement for Symmetric Concurrent Programs (Formal Methods in System Design, 2012)
This is an extended version of a paper at CAV'11 - Safe Asynchronous Memory Operations (ASE'11)
- href="papers/DonaldsonHKR_SAS2011.php">Software Verification Using k-Induction (SAS'11)
- Automatic Analysis of DMA Races Using Model Checking and k-Induction (Formal Methods in System Design, 2011)
This is an extended version of a paper at TACAS'11 - Offload - Automating Code Migration to Heterogeneous Multicore Systems (HiPEAC'10)
- Automatic Symmetry Detection for
Promela (Journal of Automated Reasoning)
This is an extended version of a paper at FM'05 - Compile-time and Run-time Issues in an Auto-parallelisation System for the Cell BE Processor (HPPC'08)
- Symmetry in Temporal Logic Model Checking (ACM Computing Surveys)
Tools
- GPUVerify - verification and analysis of GPU kernels
- SCRATCH - automatic DMA race analysis for the Cell BE processor
- Offload C++ - a framework for offloading portions of C++ applications to run across the SPE cores of the Cell BE processor. Designed and developed by Codeplay Software Ltd. (my former employer)
- TopSPIN - an automatic symmetry reduction package for the SPIN model checker
- Etch - an enhanced type checker for Promela. Etch can statically detect type errors in Promela specifications that are missed by the SPIN tool
- GRIP - a symmetry reduction tool for the PRISM model checker