Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Adam Betts

dblp:57/4187 · DBLP profile ↗
← Back
14ranked-venue papers
8as first author
0since 2021 · last 2018
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 6 · 4 first-authorSystems, architecture and hardware · 4 · 1 first-authorTheory of computation · 1Applied, interdisciplinary, general and emerging computing · 1 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
5 papers
Program verification · 57% Concurrent programming · 18% Program analysis · 10%
Computer architecture, parallel and distributed computing, and storage systems
4 papers
High-performance computing · 39% Parallel and multicore computing · 26% Embedded and real-time systems · 23%

Topics — the 18 heaviest of 20, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program verification › code-level verification
GPU kernel verification
0.942018
Implementing and Evaluating Candidate-Based Invariant Generation · IEEE Trans. Software Eng. 2018
The Design and Implementation of a Verification Technique for GPU Kernels · ACM Trans. Program. Lang. Syst. 2015
Engineering a Static Verification Tool for GPU Kernels · CAV 2014
Program verification
invariant generation
0.312018
Implementing and Evaluating Candidate-Based Invariant Generation · IEEE Trans. Software Eng. 2018
Program analysis
static analysis
0.312018
Implementing and Evaluating Candidate-Based Invariant Generation · IEEE Trans. Software Eng. 2018
Program verification
underapproximation
0.312018
Implementing and Evaluating Candidate-Based Invariant Generation · IEEE Trans. Software Eng. 2018
High-performance computing › scientific computing systems
computational fluid dynamics
0.212016
Acceleration of a Full-Scale Industrial CFD Application with OP2 · IEEE Trans. Parallel Distributed Syst. 2016
Parallel and multicore computing
parallel programming models
0.212016
Acceleration of a Full-Scale Industrial CFD Application with OP2 · IEEE Trans. Parallel Distributed Syst. 2016
High-performance computing
unstructured mesh computation
0.212016
Acceleration of a Full-Scale Industrial CFD Application with OP2 · IEEE Trans. Parallel Distributed Syst. 2016
Concurrent programming › concurrency bug detection
data race detection
0.212015
The Design and Implementation of a Verification Technique for GPU Kernels · ACM Trans. Program. Lang. Syst. 2015
Programming languages and type systems › language semantics › formal semantics
operational semantics
0.212015
The Design and Implementation of a Verification Technique for GPU Kernels · ACM Trans. Program. Lang. Syst. 2015
Concurrent programming
concurrency bugs
0.212014
Concurrency testing using schedule bounding: an empirical study · PPoPP 2014
Concurrent programming
concurrency bug detection
0.212014
Concurrency testing using schedule bounding: an empirical study · PPoPP 2014
Program verification
static verification
0.212014
Engineering a Static Verification Tool for GPU Kernels · CAV 2014
Software testing › concurrency testing
systematic concurrency testing
0.212014
Concurrency testing using schedule bounding: an empirical study · PPoPP 2014
Embedded and real-time systems › worst-case execution time analysis
implicit path enumeration
0.112012
Reducing the Size of the Constraint Model in Implicit Path Enumeration Using Super Blocks · RTSS 2012
Embedded and real-time systems
worst-case execution time analysis
0.112012
Reducing the Size of the Constraint Model in Implicit Path Enumeration Using Super Blocks · RTSS 2012
Parallel and multicore computing
many-core systems
0.112016
Acceleration of a Full-Scale Industrial CFD Application with OP2 · IEEE Trans. Parallel Distributed Syst. 2016
Empirical software engineering › software engineering research methodology
empirical study
0.112014
Concurrency testing using schedule bounding: an empirical study · PPoPP 2014
GPUs and heterogeneous computing
GPU programming
0.112014
Engineering a Static Verification Tool for GPU Kernels · CAV 2014

Methods — techniques the papers use, named apart from their topics

under-approximation · 0.7static analysis · 0.7static verification · 0.4loop invariant inference · 0.4parallel implementation · 0.2active library · 0.2OP2 framework · 0.2theorem proving · 0.2random scheduling · 0.2preemption bounding · 0.2delay bounding · 0.2operational semantics · 0.1integer linear programming · 0.1data race encoding · 0.1constraint system reduction · 0.1
YearPublicationVenuePosition
2018 Implementing and Evaluating Candidate-Based Invariant Generation
abstract
The discovery of inductive invariants lies at the heart of static program verification. Presently, many automatic solutions to inductive invariant generation are inflexible, only applicable to certain classes of programs, or unpredictable. An automatic technique that circumvents these deficiencies to some extent is candidate-based invariant generation, whereby a large number of candidate invariants are guessed and then proven to be inductive or rejected using a sound program analyzer. This paper describes our efforts to apply candidate-based invariant generation in GPUVerify, a static checker for programs that run on GPUs. We study a set of 383 GPU programs that contain loops, drawn from a number of open source suites and vendor SDKs. Among this set, 253 benchmarks require provision of loop invariants for verification to succeed. We describe the methodology we used to incrementally improve the invariant generation capabilities of GPUVerify to handle these benchmarks, through candidate-based invariant generation, using cheap static analysis to speculate potential program invariants. We also describe a set of experiments that we used to examine the effectiveness of our rules for candidate generation, assessing rules based on their generality (the extent to which they generate candidate invariants), hit rate (the extent to which the generated candidates hold), worth (the extent to which provable candidates actually help in allowing verification to succeed), and influence (the extent to which the success of one generation rule depends on candidates generated by another rule). We believe that our methodology may serve as a useful framework for other researchers interested in candidate-based invariant generation. The candidates produced by GPUVerify help to verify 231 of the 253 programs. This increase in precision, however, makes GPUVerify sluggish: the more candidates that are generated, the more time is spent determining which are inductive invariants. To speed up this process, we have investigated four under-approximating program analyses that aim to reject false candidates quickly and a framework whereby these analyses can run in sequence or in parallel. Across two platforms, running Windows and Linux, our results show that the best combination of these techniques running sequentially-speeds up invariant generation across our benchmarks by 1.17× (Windows) and 1.01× (Linux), with per-benchmark best speedups of 93.58× (Windows) and 48.34× (Linux), and worst slowdowns of 10.24× (Windows) and 43.31× (Linux). We find that parallelizing the strategies marginally improves overall invariant generation speedups to 1.27× (Windows) and 1.11× (Linux), maintains good best-case speedups of 91.18× (Windows) and 44.60× (Linux), and, importantly, dramatically reduces worst-case slowdowns to 3.15× (Windows) and 3.17× (Linux).
Adam Betts, Nathan Chong, Pantazis Deligiannis, Alastair F. Donaldson, Jeroen Ketema
IEEE Trans. Software Eng.1
2016 Acceleration of a Full-Scale Industrial CFD Application with OP2
abstract
Hydra is a full-scale industrial CFD application used for the design of turbomachinery at Rolls Royce plc., capable of performing complex simulations over highly detailed unstructured mesh geometries. Hydra presents major challenges in data organization and movement that need to be overcome for continued high performance on emerging platforms. We present research in achieving this goal through the OP2 domain-specific high-level framework, demonstrating the viability of such a high-level programming approach. OP2 targets the domain of unstructured mesh problems and enables execution on a range of back-end hardware platforms. We chart the conversion of Hydra to OP2, and map out the key difficulties encountered in the process. Specifically we show how different parallel implementations can be achieved with an active library framework, even for a highly complicated industrial application and how different optimizations targeting contrasting parallel architectures can be applied to the whole application, seamlessly, reducing developer effort and increasing code longevity. Performance results demonstrate that not only the same runtime performance as that of the hand-tuned original code could be achieved, but it can be significantly improved on conventional processor systems, and many-core systems. Our results provide evidence of how high-level frameworks such as OP2 enable portability across a wide range of contrasting platforms and their significant utility in achieving high performance without the intervention of the application programmer.
István Z. Reguly, Gihan R. Mudalige, Carlo Bertolli, Michael B. Giles, Adam Betts, Paul H. J. Kelly, David Radford
IEEE Trans. Parallel Distributed Syst.5
2015 PENCIL: A Platform-Neutral Compute Intermediate Language for Accelerator Programming
abstract
Programming accelerators such as GPUs with low-level APIs and languages such as OpenCL and CUDA is difficult, error-prone, and not performance-portable. Automatic parallelization and domain specific languages (DSLs) have been proposed to hide complexity and regain performance portability. We present 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. PENCIL aims to serve both as a portable implementation language for libraries, and as a target language for DSL compilers. We implemented a PENCIL-to-OpenCL backend using a state-of-the-art polyhedral compiler. The polyhedral compiler, extended to handle data-dependent control flow and non-affine array accesses, generates optimized OpenCL code. To demonstrate the potential and performance portability of PENCIL and the PENCIL-to-OpenCL compiler, we consider a number of image processing kernels, a set of benchmarks from the Rodinia and SHOC suites, and DSL embedding scenarios for linear algebra (BLAS) and signal processing radar applications (SpearDE), and present experimental results for four GPU platforms: AMD Radeon HD 5670 and R9 285, NVIDIA GTX 470, and ARM Mali-T604.
Riyadh Baghdadi, Ulysse Beaugnon, Albert Cohen 0001, Tobias Grosser, Michael Kruse, Chandan Reddy 0001, Sven Verdoolaege, Adam Betts, Alastair F. Donaldson, Jeroen Ketema, Javed Absar, Sven van Haastregt, Alexey Kravets, Anton Lokhmotov, Elnar Hajiyev
PACT8
2015 The Design and Implementation of a Verification Technique for GPU Kernels
abstract
We present a technique for the formal verification of GPU kernels, addressing two classes of correctness properties: data races and barrier divergence. Our approach is founded on a novel formal operational semantics for GPU kernels termed synchronous, delayed visibility (SDV) semantics, which captures the execution of a GPU kernel by multiple groups of threads. The SDV semantics provides operational definitions for barrier divergence and for both inter- and intra-group data races. We build on the semantics to develop a method for reducing the task of verifying a massively parallel GPU kernel to that of verifying a sequential program. This completely avoids the need to reason about thread interleavings, and allows existing techniques for sequential program verification to be leveraged. We describe an efficient encoding of data race detection and propose a method for automatically inferring the loop invariants that are required for verification. We have implemented these techniques as a practical verification tool, GPUVerify, that can be applied directly to OpenCL and CUDA source code. We evaluate GPUVerify with respect to a set of 162 kernels drawn from public and commercial sources. Our evaluation demonstrates that GPUVerify is capable of efficient, automatic verification of a large number of real-world kernels.
Adam Betts, Nathan Chong, Alastair F. Donaldson, Jeroen Ketema, Shaz Qadeer, Paul Thomson, John Wickerson
ACM Trans. Program. Lang. Syst.1
2014 Engineering a Static Verification Tool for GPU Kernels
Ethel Bardsley, Adam Betts, Nathan Chong, Peter Collingbourne, Pantazis Deligiannis, Alastair F. Donaldson, Jeroen Ketema, Daniel Liew, Shaz Qadeer
CAV2
2014 Concurrency testing using schedule bounding: an empirical study
abstract
We present the first independent empirical study on schedule bounding techniques for systematic concurrency testing (SCT). We have gathered 52 buggy concurrent software benchmarks, drawn from public code bases, which we call SCTBench. We applied a modified version of an existing concurrency testing tool to SCTBench to attempt to answer several research questions, including: How effective are the two main schedule bounding techniques, preemption bounding and delay bounding, at bug finding? What challenges are associated with applying SCT to existing code? How effective is schedule bounding compared to a naive random scheduler at finding bugs? Our findings confirm that delay bounding is superior to preemption bounding and that schedule bounding is more effective at finding bugs than unbounded depth-first search. The majority of bugs in SCTBench can be exposed using a small bound (1-3), supporting previous claims, but there is at least one benchmark that requires 5 preemptions. Surprisingly, we found that a naive random scheduler is at least as effective as schedule bounding for finding bugs. We have made SCTBench and our tools publicly available for reproducibility and use in future work.
Paul Thomson, Alastair F. Donaldson, Adam Betts
PPoPP3
2013 Estimating the WCET of GPU-Accelerated Applications Using Hybrid Analysis
abstract
The massive parallelism offered by Graphics Processing Units (GPUs) is now routinely exploited to accelerate computationally intensive tasks in a wide variety of application domains. Efficient GPU programming in languages such as CUDA and OpenCL requires careful application of hand optimisations to exploit parallelism and locality while minimising synchronisation. The effectiveness of such optimisations can be highly dependent on workload and the structure of input data, making it difficult to assess performance in general by testing alone. To address this, we study the problem of estimating the Worst-Case Execution Time (WCET) of GPU-accelerated applications. We propose the use of hybrid WCET analysis whereby execution times of small program segments are deduced from traces of execution and a calculation backend derived from the Control Flow Graph (CFG) produces a WCET estimate. Standard techniques which construct a CFG from a binary cannot be applied directly to GPU code because they miss implicit execution paths that arise due the way branches are implemented in hardware - we present a solution using standard compiler analysis. We further describe how to extend the basic hybrid WCET analysis of sequential code so that concurrent timing effects in the GPU execution model are incorporated. We have implemented our analysis as a tool built on top of the GPGPU-sim open source simulator. We evaluate our tool using a set of benchmarks drawn from the CUDA SDK: results show that effective modelling of concurrency is key to reducing pessimism in the WCET calculation.
Adam Betts, Alastair F. Donaldson
ECRTS1
2012 GPUVerify: a verifier for GPU kernels
abstract
We present a technique for verifying race- and divergence-freedom of GPU kernels that are written in mainstream kernel programming languages such as OpenCL and CUDA. Our approach is founded on a novel formal operational semantics for GPU programming termed synchronous, delayed visibility (SDV) semantics. The SDV semantics provides a precise definition of barrier divergence in GPU kernels and allows kernel verification to be reduced to analysis of a sequential program, thereby completely avoiding the need to reason about thread interleavings, and allowing existing modular techniques for program verification to be leveraged. We describe an efficient encoding for data race detection and propose a method for automatically inferring loop invariants required for verification. We have implemented these techniques as a practical verification tool, GPUVerify, which can be applied directly to OpenCL and CUDA source code. We evaluate GPUVerify with respect to a set of 163 kernels drawn from public and commercial sources. Our evaluation demonstrates that GPUVerify is capable of efficient, automatic verification of a large number of real-world kernels.
Adam Betts, Nathan Chong, Alastair F. Donaldson, Shaz Qadeer, Paul Thomson
OOPSLA1
2012 Reducing the Size of the Constraint Model in Implicit Path Enumeration Using Super Blocks
abstract
Implicit Path Enumeration (IPE) is the most popular calculation technique used in WCET analysis as it generally provides the most precision. It utilises the Control Flow Graph (CFG) to build a constraint system consisting of, amongst others, structural constraints (derived from the CFG) and relative capacity constraints (loop bounds relative to the innermost enclosing loop). However, solving the constraint system is an NP-hard problem and reducing the size of the model is therefore desirable. This paper shows that, when the CFG loops are free of break-like constructs, the constraint system produced by IPE consists of many superfluous structural constraints in that their elimination does not detract from the precision of the WCET estimate. We demonstrate this fact by building an alternative constraint system from a new intermediate data structure called the Super Block Control Flow Graph (SB-CFG). Furthermore, we illustrate how the SB-CFG allows us to deduce when relative capacity constraints are actually needed -- until now they have been considered mandatory to avoid overestimations with loops. Comparing the two constraint systems across a large number of automatically generated control flow graphs, our results show there is: a 50% reduction in the number of variables, a 55% reduction in the number of constraints, and a 69% reduction in solving time.
Adam Betts
RTSS1
2011 WCET Analysis of Component-Based Systems Using Timing Traces
abstract
Construction of a Real-Time System (RTS) out of a number of pre-fabricated pieces of software, otherwise known as components, is a pervasive area of interest. Typically, only relocatable object code of the component is shipped to the customer, so that it can later be linked into the overall application. Source code is therefore withheld, and disassembling of the object code is normally disallowed to protect intellectual property. Both of these restrictions complicate, or even prevent, state-of-the-art Worst-Case Execution Time (WCET) analysis of the RTS since most techniques are grounded on their availability in order to generate a complete program model. The alternative solution - widespread in industrial circles - is to record the largest end-to-end execution time of the RTS under functional testing, but this underestimates the actual WCET, in the general case. This paper shows how to obtain a safer WCET estimate of a RTS composed of components using time-stamped traces of program execution. In effect, the data needed in the WCET computation (program model, execution times, execution bounds) are derived exclusively from parsing of the traces. Experiments indicate that, once simple coverage metrics have been obtained, the calculated WCET estimate bounds the actual WCET. Moreover, where instrumentation (which produces the time-stamped traces) is placed with respect to program structure has a significant bearing on the accuracy of the computed WCET estimate.
Adam Betts, Amine Marref
ICECCS1
2011 Memory Positioning of Real-Time Code for Smaller Worst-Case Execution Times
abstract
The process of determining the worst-case execution time (WCET) is challenged in the presence of caches due to their unpredictable effect on the speed of memory references. In particular, when cache conflicts between program lines are common, thrashing occurs and this inadvertently increases the WCET, sometimes significantly so. One way to minimise the cache impact on the WCET, therefore, is to judiciously lay out code and data in memory to avoid cache conflicts. In this paper, we show how to formulate the WCET-aware code placement problem as a Constraint-Optimization Problem (COP), which can then be efficiently solved by off-the-shelf COP solvers. Experimental evaluation of our proposed analysis shows that the proposed analysis successfully identified code positioning that yields the minimum WCET for over half of the problems within manageable time.
Amine Marref, Adam Betts
ICECCS2
2011 Accurate Measurement-Based WCET Analysis in the Absence of Source and Binary Code
abstract
Estimating the worst-case execution time (WCET) of real-time embedded systems is compulsory for the verification of their correct functioning. Traditionally, the WCET of a program is estimated assuming availability of the program's binary which is disassembled to reconstruct the program, and in some cases its source code to derive useful high-level execution information. However, in certain scenarios the program's owner requires that the binary of the program not be reverse-engineered to protect intellectual property, and in extreme situations, the program's binary is not available for the analysis, in which case it is substituted by program-execution traces. In this paper we show that we can obtain WCET estimates for programs based on runtime-generated or owner-provided time-stamped execution traces and without the need to access the source code or reverse-engineer the binaries of the programs. We show that we can provide very accurate WCET estimations using both integer linear programming (ILP) and constraint logic programming (CLP). Our method generates safe and tight WCET estimations for all the benchmarks used in the evaluation.
Amine Marref, Adam Betts
ISORC2
2011 Identifying irreducible loops in the Instrumentation Point Graph
Adam Betts, Guillem Bernat
J. Syst. Archit.1
2006 Tree-Based WCET Analysis on Instrumentation Point Graphs
abstract
This paper presents a framework for combining low-level measurement data through high-level static analysis techniques on instrumented programs in order to generate WCET estimates, for which we introduce the instrumentation point graph (IPG). We present the notion of iteration edges, which are the most important property of the IPG from a timing analysis perspective since they allow more path-based information to be integrated into tree-based calculations on loops. The main focus of this paper, however, is an algorithm that performs a hierarchical decomposition of an IPG into an Itree to permit tree-based WCET calculations. The Itree representation supports a novel high-level structure, the meta-loop, which enables iteration edges to be merged in the calculation stage. The timing schema required for the Itree is also presented. Finally, we outline some conclusions and future areas of interest
Adam Betts, Guillem Bernat
ISORC1