David G. Wonnacott

dblp:96/4387 · also David Wonnacott · DBLP profile ↗
← Back
12ranked-venue papers
1as first author
1since 2021 · last 2023
0000-0002-7595-2458ORCID · verified

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

Systems, architecture and hardware · 5 · 1 first-authorSoftware engineering, systems software and programming languages · 5Human-computer interaction and ubiquitous computing · 2 · 1 since 2021Security and privacy · 1

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
6 papers
Software testing · 56% Compilers and program optimization · 27% Program analysis · 17%

Topics — the 11 heaviest of 13, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Software testing › test coverage
coverage-based testing
0.122005
Robustness Testing of Java Server Applications · IEEE Trans. Software Eng. 2005
Testing of java web services for robustness · ISSTA 2004
Software testing
exception handler testing
0.122005
Robustness Testing of Java Server Applications · IEEE Trans. Software Eng. 2005
Testing of java web services for robustness · ISSTA 2004
Compilers and program optimization
compiler analysis
0.122005
Robustness Testing of Java Server Applications · IEEE Trans. Software Eng. 2005
Testing of java web services for robustness · ISSTA 2004
Software testing › mutation testing
fault injection
0.122005
Testing of java web services for robustness · ISSTA 2004
Robustness Testing of Java Server Applications · IEEE Trans. Software Eng. 2005
Program analysis
static analysis
0.112005
Robustness Testing of Java Server Applications · IEEE Trans. Software Eng. 2005
Software testing
structural testing
0.012004
Testing of java web services for robustness · ISSTA 2004
Compilers and program optimization › parallelization
automatic parallelization
0.031998
Constraint-Based Array Dependence Analysis · ACM Trans. Program. Lang. Syst. 1998
Static Analysis of Upper and Lower Bounds on Dependences and Parallelism · ACM Trans. Program. Lang. Syst. 1994
Going Beyond Integer Programming with the Omega Test to Eliminate False Data Dependences · IEEE Trans. Parallel Distributed Syst. 1995
Program analysis
data dependence analysis
0.021995
Going Beyond Integer Programming with the Omega Test to Eliminate False Data Dependences · IEEE Trans. Parallel Distributed Syst. 1995
Eliminating False Data Dependences using the Omega Test · PLDI 1992
Compilers and program optimization
loop transformation
0.021994
Static Analysis of Upper and Lower Bounds on Dependences and Parallelism · ACM Trans. Program. Lang. Syst. 1994
Eliminating False Data Dependences using the Omega Test · PLDI 1992
Program analysis › static analysis
constraint-based analysis
0.011998
Constraint-Based Array Dependence Analysis · ACM Trans. Program. Lang. Syst. 1998
Compilers and program optimization
dependence analysis
0.011994
Static Analysis of Upper and Lower Bounds on Dependences and Parallelism · ACM Trans. Program. Lang. Syst. 1994

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

def-use analysis · 0.1compiler-directed fault injection · 0.1context-sensitive analysis · 0.0compiler instrumentation · 0.0presburger arithmetic · 0.0integer programming · 0.0gist operation · 0.0
YearPublicationVenuePosition
2023 The Purpose of Proof
abstract
Mathematics is often considered the foundation of computer science, with rigorous, mathematical reasoning, i.e., proof, at the heart of this foundation. Mathematical proof is the backbone of virtually all introductory mathematics courses within any computer science major. However, the degree to which rigorous reasoning is required of students in subsequent courses is highly variable across institutions. At some institutions, proof is a tool used to deepen material, whereas, at other places, proof is set aside in favor of increased topic coverage. Consequently, many students do not see the purpose of proof in computing. Furthermore, the demands of rigorous mathematical reasoning dissuade many students from continuing in the field.
Bruce W. Char, Peter-Michael Osera, David G. Wonnacott
SIGCSE (2)3
2015 Parameterized Diamond Tiling for Stencil Computations with Chapel parallel iterators
abstract
Stencil computations figure prominently in the core kernels of many scientific computations, such as partial differential equation solvers. Parallel scaling of stencil computations can be significantly improved on multicore processors using advanced tiling techniques that include the time dimension, such as diamond tiling. Such techniques are difficult to include in general purpose optimizing compilers because of the need for inter-procedural pointer and array data-flow analysis, plus the need to tune scheduling strategies and tile size parameters for each pairing of stencil computation and machine.
Ian J. Bertolacci, Catherine Mills Olschanowsky, Ben Harshbarger, Bradford L. Chamberlain, David G. Wonnacott, Michelle Mills Strout
ICS5
2012 Distributed Shared Memory and Compiler-Induced Scalable Locality for Scalable Cluster Performance
abstract
Distributed shared memory software allows a cluster to function as a single collection of many processing cores with a large physical memory, but highly unusual performance parameters: communication latency and bandwidth between nodes may be several orders of magnitude worse than on-chip. Thus, effective use of such systems requires computation/communication ratios many times higher. The loop optimization known as "time skewing" or "time tiling" can, for some codes, produce arbitrarily high compute balance. It should thus allow scalable high performance regardless of memory and network bandwidth limitations. We have been exploring the scalability of time tiling on homogeneous dedicated clusters, considering the effects of scaling both the number of nodes in the cluster and the ratio of computation speed to network bandwidth. Even with simple 1- and 2-d Jacobi stencil computations, there are challenges to practical realization of the prediction of scalability.
Mohamed Abdalkader, Ian Burnette, Tim Douglas, David G. Wonnacott
CCGRID4
2005 Use and assessment of a rigorous approach to CS1
abstract
We have developed and implemented a "rigor-first" approach to CS1 instruction, in which we introduce rigorous techniques for understanding algorithms alongside associated programming skills. This core material is developed through a number of engaging problems from more advanced courses in computer science and other natural sciences. These principles are continued in CS2, and the two courses form our "3-2-1" first-year sequence: three programming paradigms and two models of program execution are explored on a single platform. This article discusses the design of our CS1 course, its role in the computer science curriculum, and our experiences with it. Preliminary assessment suggests this approach has merit in our curriculum.
John P. Dougherty, David G. Wonnacott
SIGCSE2
2005 Robustness Testing of Java Server Applications
abstract
This paper presents a new compile-time analysis that enables a testing methodology for white-box coverage testing of error recovery code (i.e., exception handlers) of server applications written in Java, using compiler-directed fault injection. The analysis allows compiler-generated instrumentation to guide the fault injection and to record the recovery code exercised. (An injected fault is experienced as a Java exception.) The analysis 1) identifies the exception-flow "def-uses" to be tested in this manner, 2) determines the kind of fault to be requested at a program point, and 3) finds appropriate locations for code instrumentation. The analysis incorporates refinements that establish sufficient context sensitivity to ensure relatively precise def-use links and to eliminate some spurious def-uses due to demonstrably infeasible control flow. A runtime test harness calculates test coverage of these links using an exception def-catch metric. Experiments with the methodology demonstrate the utility of the increased precision in obtaining good test coverage on a set of moderately sized server benchmarks.
Ana L. Milanova, Barbara G. Ryder, David G. Wonnacott
IEEE Trans. Software Eng.4
2004 Testing of java web services for robustness
abstract
This paper presents a new compile-time analysis that enables a testing methodology for white-box coverage testing of error recovery code (i.e., exception handlers) in Java web services using compiler-directed fault injection. The analysis allows compiler-generated instrumentation to guide the fault injection and to record the recovery code exercised. (An injected fault is experienced as a Java exception.) The analysis (i) identifies the exception-flow 'def-uses' to be tested in this manner, (ii) determines the kind of fault to be requested at a program point, and (iii) finds appropriate locations for code instrumentation. The analysis incorporates refinements that establish sufficient context sensitivity to ensure relatively precise def-use links and to eliminate some spurious def-uses due to demonstrably infeasible control flow. A runtime test harness calculates test coverage of these links using an exception def-catch metric. Experiments with the methodology demonstrate the utility of the increased precision in obtaining good test coverage on a set of moderately-sized Java web services benchmarks.
Barbara G. Ryder, Ana L. Milanova, David G. Wonnacott
ISSTA4
2003 Compiler-Directed Program-Fault Coverage for Highly Available Java Internet Services
abstract
We present a new approach that uses compiler-directed fault-injection for coverage testing of recovery code in Internet services, to evaluate their robustness to operating system and I/O hardware faults. We define a set of program-fault coverage metrics that enable quantification of Java catch blocks exercised during fault-injection experiments. We use compiler analyses to instrument application code in two ways: to direct fault injection to occur at appropriate points during execution, and to measure the resulting coverage. As a proof of concept for these ideas, we have applied our techniques manually to Muffin, a proxy server; we obtained a high degree of coverage of catch blocks, with on average 85% of the expected faults per catch being experienced as caught exceptions.
Richard P. Martin, Kiran Nagaraja, Thu D. Nguyen, Barbara G. Ryder, David G. Wonnacott
DSN6
2000 Using Time Skewing to Eliminate Idle Time due to Memory Bandwidth and Network Limitations
abstract
Time skewing is a compile-time optimization that can provide arbitrarily high cache hit rates for a class of iterative calculations, given a sufficient number of time steps and sufficient cache memory. Thus, it can eliminate processor idle time caused by inadequate main memory bandwidth. In this article, we give a generalization of time skewing for multiprocessor architectures, and discuss time skewing for multilevel caches. Our generalization for multiprocessors lets us eliminate processor idle time caused by any combination of inadequate main memory bandwidth, limited network bandwidth, and high network latency, given a sufficiently large problem and sufficient cache. As in the uniprocessor case, the cache requirement grows with the machine balance rather than the problem size. Our techniques for using multilevel caches reduce the LI cache requirement, which would otherwise be unacceptably high for some architectures when using arrays of high dimension.
David G. Wonnacott
IPDPS1
1998 Constraint-Based Array Dependence Analysis
abstract
Traditional array dependence analysis, which detects potential memory aliasing of array references is a key analysis technique for automatic parallelization. Recent studies of benchmark codes indicate that limitations of analysis cause many compilers to overlook large amounts of potential parallelism, and that exploiting this parallelism requires algorithms to answer new question about array references, not just get better answers to the old questions of aliasing. We need to ask about the flow of values in arrays, to check the legality of array privatization, and about the conditions under which a dependence exists, to obtain information about conditional parallelism. In some cases, we must answer these questions about code containing nonlinear terms in loop bounds or subscripts. This article describes techniques for phrasing these questions in terms of systems of contstraints. Conditional dependence analysis can be performed with a constraint operation we call the "gist" operation. When subscripts and loop bounds are affine, questions about the flow of values in array variables can be phrased in terms of Presburger Arithmetic. When the constraints describing a dependence are not affine, we introduce uninterpreted function symbols to represent the nonaffine terms. Our constraint language also provides a rich language for communication with the dependence analyzer, by either the programmer or other phases of the compiler. This article also documents our investigations of the praticality of our approach. The worst-case complexity of Presburger Arithmetic indicates that it might be unsuitable for any practical application. However, we have found that analysis of benchmark programs does not cause the exponential growth in the number of constraints that could occur in the worst case. We have studied the constraints produced during our aanalysis, and identified characteristics that keep our algorithms free of exponential behavior in practice.
William W. Pugh, David G. Wonnacott
ACM Trans. Program. Lang. Syst.2
1995 Going Beyond Integer Programming with the Omega Test to Eliminate False Data Dependences
abstract
Array data dependence analysis methods currently in use generate false dependences that can prevent useful program transformations. These false dependences arise because the questions asked are conservative approximations to the questions we really should be asking. Unfortunately, the questions we really should be asking go beyond integer programming and require decision procedures for a subclass of Presburger formulas. In this paper, we describe how to extend the Omega test so that it can answer these queries and allow us to eliminate these false data dependences. We have implemented the techniques described here and believe they are suitable for use in production compilers.>
William W. Pugh, David G. Wonnacott
IEEE Trans. Parallel Distributed Syst.2
1994 Static Analysis of Upper and Lower Bounds on Dependences and Parallelism
abstract
Existing compilers often fail to parallelize sequential code, even when a program can be manually transformed into parallel form by a sequence of well-understood transformations (as in the case for many of the Perfect Club Benchmark programs). These failures can occur for several reasons: the code transformations implemented in the compiler may not be sufficient to produce parallel code, the compiler may not find the proper sequence of transformations, or the compiler may not be able to prove that one of the necessary transformations is legal. When a compiler fails to extract sufficient parallelism from a program, the programmer may try to extract additional parallelism. Unfortunately, the programmer is typically left to search for parallelism without significant assistance. The compiler generally does not give feedback about which parts of the program might contain additional parallelism, or about the types of transformations that might be needed to realize this parallelism. Standard program transformations and dependence abstractions cannot be used to provide this feedback. In this paper, we propose a two-step approach to the search for parallelism in sequential programs. In the first step, we construct several sets of constraints that describe, for each statement, which iterations of that statement can be executed concurrently. By constructing constraints that correspond to different assumptions about which dependences might be eliminated through additional analysis, transformations, and user assertions, we can determine whether we can expose parallelism by eliminating dependences. In the second step of our search for parallelism, we examine these constraint sets to identify the kinds of transformations needed to exploit scalable parallelism. Our tests will identify conditional parallelism and parallelism that can be exposed by combinations of transformations that reorder the iteration space (such as loop interchange and loop peeling). This approach lets us distinguish inherently sequential code from code that contains unexploited parallelism. It also produces information about the kinds of transformations needed to parallelize the code, without worrying about the order of application of the transformations. Furthermore, when our dependence test is inexact we can identify which unresolved dependences inhibit parallelism by comparing the effects of assuming dependence or independence. We are currently exploring the use of this information in programmer-assisted parallelization.
William W. Pugh, David G. Wonnacott
ACM Trans. Program. Lang. Syst.2
1992 Eliminating False Data Dependences using the Omega Test
abstract
Array data dependence analysis methods currently in use generate false dependences that can prevent useful program transformations. These false dependences arise because the questions asked are conservative approximations to the questions we really should be asking. Unfortunately, the questions we really should be asking go beyond integer programming and require decision procedures for a sublcass of Presburger formulas. In this paper, we describe how to extend the Omega test so that it can answer these queries and allow us to eliminate these false data dependences. We have implemented the techniques described here and believe they are suitable for use in production compilers.
William W. Pugh, David G. Wonnacott
PLDI2