• Publications
  • Influence
GPUVerify: a verifier for GPU kernels
An efficient encoding for data race detection and a method for automatically inferring loop invariants required for verification are described and implemented as a practical verification tool, GPUVerify, which can be applied directly to OpenCL and CUDA source code.
Software Verification Using k-Induction
A new k-induction rule is presented that takes an unstructured, reducible control flow graph, a natural loop occurring in the CFG, and a positive integer k, and constructs a single CFG in which the given loop is eliminated via an unwinding proportional to k.
GPU Concurrency: Weak Behaviours and Programming Assumptions
A model of Nvidia GPU hardware is proposed, which correctly models every behaviour witnessed in the authors' experiments, and is a variant of SPARC Relaxed Memory Order (RMO), structured following the GPU concurrency hierarchy.
Concurrency testing using schedule bounding: an empirical study
It is found that a naive random scheduler is at least as effective as schedule bounding for finding bugs, and delay bounding is more effective at finding bugs than unbounded depth-first search.
Many-core compiler fuzzing
This study provides independent validation of claims in prior work related to the effectiveness of random differential testing and EMI testing, proposes novel methods for lifting these techniques to the many-core setting and reveals a significant number of OpenCL compiler bugs in commercial implementations.
Software Model Checking
  • A. Donaldson
  • Computer Science
    Computing Handbook, 3rd ed.
  • 7 May 2014
The algorithm described above computes the set of reachable inputs for each procedure in a top-down manner, that is, using the callsites to aggressively compute the most general behavior forEach procedure, by seeding the worklist with all the possible input states for each procedures.
Certified Roundoff Error Bounds Using Semidefinite Programming
This work presents a framework to provide upper bounds on absolute roundoff errors of floating-point nonlinear programs, based on optimization techniques employing semidefinite programming and sums of squares certificates, which can be checked inside the Coq theorem prover to provide formal roundoff error bounds for polynomial programs.
PENCIL: A Platform-Neutral Compute Intermediate Language for Accelerator Programming
PENCIL, a rigorously-defined subset of GNU C99-enriched with additional language constructs-that enables compilers to exploit parallelism and produce highly optimized code when targeting accelerators, is presented.
The Design and Implementation of a Verification Technique for GPU Kernels
This work describes an efficient encoding of data race detection and proposes a method for automatically inferring the loop invariants that are required for verification, and implements these techniques as a practical verification tool, GPUVerify, that can be applied directly to OpenCL and CUDA source code.
Overhauling SC atomics in C11 and OpenCL
An overhaul of SC atomics in C11 is conducted, reducing the associated axioms in both number and complexity, which leads to an exponential improvement in simulation time for C11 litmus tests compared with the original model, making *exhaustive* simulation competitive, time-wise, with the *non-ex exhaustive* CDSChecker tool.