William W. Pugh

dblp:p/WilliamPugh · also Bill Pugh · DBLP profile ↗
← Back
35ranked-venue papers
16as first author
0since 2021 · last 2010
—ORCID · none

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

Software engineering, systems software and programming languages · 23 · 9 first-authorSystems, architecture and hardware · 8 · 5 first-authorTheory of computation · 3 · 2 first-authorDatabases, data management, data science and information retrieval · 2 · 1 first-authorHuman-computer interaction and ubiquitous computing · 1Applied, interdisciplinary, general and emerging computing · 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
16 papers
Compilers and program optimization · 29% Program analysis · 18% Software testing · 16%
Theoretical computer science
2 papers
Automated reasoning and model checking · 96% Logic in computer science · 4%
Computer architecture, parallel and distributed computing, and storage systems
4 papers
Embedded and real-time systems · 77% Performance modeling and evaluation · 23%

Topics — the 30 heaviest of 37, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program analysis › static analysis
bug detection
0.112010
The Google FindBugs fixit · ISSTA 2010
Empirical software engineering
mining software repositories
0.112010
The Google FindBugs fixit · ISSTA 2010
Compilers and program optimization › memory optimization › data layout optimization
object layout
0.112008
Two-dimensional bidirectional object layout · ACM Trans. Program. Lang. Syst. 2008
Software testing
concurrency testing
0.112007
Unit testing concurrent software · ASE 2007
Software testing
unit testing
0.112007
Unit testing concurrent software · ASE 2007
Concurrent programming › memory models
java memory model
0.112005
The Java memory model · POPL 2005
Programming languages and type systems
language semantics
0.112005
The Java memory model · POPL 2005
Concurrent programming
memory models
0.112005
The Java memory model · POPL 2005
Automated reasoning and model checking › model checking
infinite-state model checking
0.021999
Model-checking concurrent systems with unbounded integer variables: symbolic representations, approximations, and experimental results · ACM Trans. Program. Lang. Syst. 1999
Symbolic Model Checking of Infinite State Systems Using Presburger Arithmetic · CAV 1997
Automated reasoning and model checking
model checking
0.021999
Model-checking concurrent systems with unbounded integer variables: symbolic representations, approximations, and experimental results · ACM Trans. Program. Lang. Syst. 1999
Symbolic Model Checking of Infinite State Systems Using Presburger Arithmetic · CAV 1997
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
Software maintenance and evolution
code review
0.012010
The Google FindBugs fixit · ISSTA 2010
Compilers and program optimization › code size reduction
code compression
0.011999
Compressing Java Class Files · PLDI 1999
Automated reasoning and model checking › temporal logic verification
safety and liveness verification
0.011999
Model-checking concurrent systems with unbounded integer variables: symbolic representations, approximations, and experimental results · ACM Trans. Program. Lang. Syst. 1999
Automated reasoning and model checking › model checking
symbolic model checking
0.011999
Model-checking concurrent systems with unbounded integer variables: symbolic representations, approximations, and experimental results · ACM Trans. Program. Lang. Syst. 1999
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.021994
Static Analysis of Upper and Lower Bounds on Dependences and Parallelism · ACM Trans. Program. Lang. Syst. 1994
The Omega test: a fast and practical integer programming algorithm for dependence analysis · SC 1991
Compilers and program optimization
partial evaluation
0.021992
Partial Evaluation of High-Level Imperative Programming Languages, with Applications in Hard Real-Time Systems · POPL 1992
A partial evaluator for the Maruti hard real-time system · RTSS 1991
Compilers and program optimization › program transformation
compiler transformations
0.012005
The Java memory model · POPL 2005
Runtime systems and virtual machines › virtual machine implementation
java virtual machine
0.012005
The Java memory model · POPL 2005
Embedded and real-time systems › real-time scheduling
hard real-time scheduling
0.011995
Parametric Dispatching of Hard Real-Time Tasks · IEEE Trans. Computers 1995
Embedded and real-time systems
real-time scheduling
0.011995
Parametric Dispatching of Hard Real-Time Tasks · IEEE Trans. Computers 1995
Performance modeling and evaluation
workload characterization
0.011994
Counting Solutions to Presburger Formulas: How and Why · PLDI 1994
Programming languages and type systems › programming paradigms
imperative languages
0.011992
Partial Evaluation of High-Level Imperative Programming Languages, with Applications in Hard Real-Time Systems · POPL 1992
Compilers and program optimization
loop optimization
0.011991
The Omega test: a fast and practical integer programming algorithm for dependence analysis · SC 1991
Embedded and real-time systems
worst-case execution time analysis
0.011991
A partial evaluator for the Maruti hard real-time system · RTSS 1991
Concurrent programming
concurrency bugs
0.011999
Model-checking concurrent systems with unbounded integer variables: symbolic representations, approximations, and experimental results · ACM Trans. Program. Lang. Syst. 1999
Programming languages and type systems › object-oriented programming
multiple inheritance
0.011990
Two-Directional Record Layout for Multiple Inheritance · PLDI 1990

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

presburger arithmetic · 0.1static analysis · 0.1whole-program analysis · 0.1type hierarchy analysis · 0.1test framework design · 0.1sequential consistency · 0.1causality requirement · 0.1fixpoint approximation · 0.0wire-code format · 0.0integer programming · 0.0symbolic model checking · 0.0partial evaluation · 0.0online start-time assignment · 0.0offline feasibility analysis · 0.0
YearPublicationVenuePosition
2010 The Google FindBugs fixit
abstract
In May 2009, Google conducted a company wide FindBugs "fixit". Hundreds of engineers reviewed thousands of FindBugs warnings, and fixed or filed reports against many of them. In this paper, we discuss the lessons learned from this exercise, and analyze the resulting dataset, which contains data about how warnings in each bug pattern were classified. Significantly, we observed that even though most issues were flagged for fixing, few appeared to be causing any serious problems in production. This suggests that most interesting software quality problems were eventually found and fixed without FindBugs, but FindBugs could have found these problems early, when they are cheap to remediate. We compared this observation to bug trends observed in code snapshots from student projects.
Nathaniel Ayewah, William W. Pugh
ISSTA2
2010 Null dereference analysis in practice
abstract
Many analysis techniques have been proposed to determine when a potentially null value may be dereferenced. But we have observed in practice that not every potential null dereference is a "bug" that developers want to fix. In this paper we discuss some of the challenges of using a null dereference analysis in practice, and reasons why developers may not feel it necessary to change code to prevent ever possible null dereference. We revisit previous work on XYLEM, an interprocedural null dereference analysis for Java, and discuss the challenge of comparing the results of different static analysis tools. We also report experimental results for XYLEM, Coverity Prevent, Fortify SCA, Eclipse and FindBugs, and observe that the different tools tradeoff the need to flag all potential null dereferences with the need to minimize the number of cases that are implausible in practice. We conclude by discussing whether it would be useful to extend the Java type system to distinguish between nullable and nonnull types, and prohibit unchecked dereferences of nullable types.
Nathaniel Ayewah, William W. Pugh
PASTE2
2009 Learning from defect removals
abstract
Recent research has tried to identify changes in source code repositories that fix bugs by linking these changes to reports in issue tracking systems. These changes have been traced back to the point in time when they were previously modified as a way of identifying bug introducing changes. But we observe that not all changes linked to bug tracking systems are fixing bugs; some are enhancing the code. Furthermore, not all fixes are applied at the point in the code where the bug was originally introduced. We flesh out these observations with a manual review of several software projects, and use this opportunity to see how many defects are in the scope of static analysis tools.
Nathaniel Ayewah, William W. Pugh
MSR2
2008 Two-dimensional bidirectional object layout
abstract
Object layout schemes used in C++ and other languages rely on (sometimes numerous) compiler generated fields. We describe a language-independent object layout scheme, which is space optimal, that is, objects are contiguous, and contain no compiler generated fields other than a single type identifier. As in C++ and other multiple inheritance languages such as CECIL and DYLAN, the new scheme sometimes requires extra levels of indirection to access some of the fields. Using a data set of 28 hierarchies, totaling almost 50,000 types, we show that this scheme improves field access efficiency over standard implementations, and competes favorably with (the non-space-optimal) highly optimized C++ specific implementations. The benchmark includes an analytical model for computing the frequency of indirections in a sequence of field access operations. Our layout scheme relies on whole-program analysis, which requires about 10 microseconds per type on a contemporary architecture (Pentium III, 900Mhz, 256MB machine), even in very large hierarchies. We also present a layout scheme for separate compilation using the user-annotation of virtual inheritance edge that is used in C++.
Joseph Gil, William W. Pugh, Grant E. Weddell, Yoav Zibin
ACM Trans. Program. Lang. Syst.2
2007 Unit testing concurrent software
abstract
There are many difficulties associated with developing correct multithreaded software, and many of the activities that are simple for single threaded software are exceptionally hard for multithreaded software. One such example is constructing unit tests involving multiple threads. Given, for example, a blocking queue implementation, writing a test case to show that it blocks and unblocks appropriately using existing testing frameworks is exceptionally hard. In this paper, we describe the MultithreadedTC framework which allows the construction of deterministic and repeatable unit tests for concurrent abstractions. This framework is not designed to test for synchronization errors that lead to rare probabilistic faults under concurrent stress. Rather, this framework allows us to demonstrate that code does provide specific concurrent functionality (e.g., a thread attempting to acquire a lock is blocked if another thread has the lock). We describe the framework and provide empirical comparisons against hand-coded tests designed for Sun’s Java concurrency utilities library and against previous frameworks that addressed this same issue. The source code for this framework is available under an open source license.
William W. Pugh, Nathaniel Ayewah
ASE1
2007 Evaluating static analysis defect warnings on production software
abstract
Static analysis tools for software defect detection are becoming widely used in practice. However, there is little public information regarding the experimental evaluation of the accuracy and value of the warnings these tools report. In this paper, we discuss the warnings found by FindBugs, a static analysis tool that finds defects in Java programs. We discuss the kinds of warnings generated and the classification of warnings into false positives, trivial bugs and serious bugs. We also provide some insight into why static analysis tools often detect true but trivial bugs, and some information about defect warnings across the development lifetime of software release. We report data on the defect warnings in Sun's Java 6 JRE, in Sun's Glassfish JEE server, and in portions of Google's Java codebase. Finally, we report on some experiences from incorporating static analysis into the software development process at Google.
Nathaniel Ayewah, William W. Pugh, J. David Morgenthaler, John Penix, YuQian Zhou
PASTE2
2007 Improving software quality with static analysis
abstract
At the University of Maryland, we have been working to improve the reliability and security of software by developing new, effective static analysis tools. These tools scan software for bug patterns or show that the software is free from a particular class of defects. There are two themes common to our different projects: 1. Our ultimate focus is on utility: can a programmer actually improve the quality of his or her software using an analysis tool? The important first step toward answering this question is to engineer tools so that they can analyze existing, nontrivial programs, and to carefully report the results of such analyses experimentally. The desire to better understand a more human-centered notion of utility underlies much of our future work. 2. We release all of our tools open source. This allows other researchers to verify our results, and to reuse some or all of our implementations, which often required significant effort to engineer. We believe that releasing source code is important for accelerating the pace of research results software quality, and just as importantly allows feedback from the wider community. In this research group presentation, we summarize some recent work and sketch future directions.
Jeffrey S. Foster, Michael Hicks 0001, William W. Pugh
PASTE3
2007 Finding more null pointer bugs, but not too many
abstract
In the summer of 2006, the FindBugs project was challenged to improve the null pointer analysis in FindBugs so that we could find more null pointer bugs. In particular, we were challenged to try to do as well as a publicly available analysis by Reasoning, Inc on version 4.1.24 of Apache Tomcat. Reasoning's report is a result of running their own static analysis tool and using manual auditing to remove false positives. Reasoning reported a total of 9 null pointer warnings in Tomcat 4.1.24, of which only 2 were reported by FindBugs 1.0. While we wanted to improve the analysis in FindBugs, we wanted to retain our current low level of false positives.
David Hovemeyer, William W. Pugh
PASTE2
2006 Experiences with marmoset: designing and using an advanced submission and testing system for programming courses
abstract
We developed Marmoset, an automated submission and testing system, to explore techniques to provide improved feedback to both students and instructors as students work on programming assignments, and to collect data to perform detailed research on the development processes of students. To address the issue of feedback, Marmoset provides students with limited access to the results of the instructor's private test cases using a novel token-based incentive system. This both encourages students to start their work early and to think critically about their work. Because students submit early, instructors can monitor all students' progress on test cases, helping identify challenging or ambiguous test cases early in order to update the project specification or devote additional time in lecture or lab sessions to the difficult test cases.To study and better understand the development process of students, Marmoset can be configured to transparently capture snapshots to a central repository everytime students save their files. These detailed development histories offer a unique, detailed perspective of each student's progress on a programming assignment, from the first line of code written and saved all the way through the final edit before the final submission. This type of data has proven extremely valuable many uses, such as mining new bug patterns and evaluating existing bug-finding tools.In this paper, we describe our initial experiences using Marmoset in several introductory computer science courses, from the perspectives of both instructors and students. We also describe some initial research results from analyzing the student snapshot database.
Jaime Spacco, David Hovemeyer, William W. Pugh, Fawzi Emad, Jeffrey K. Hollingsworth, Nelson Padua-Perez
ITiCSE3
2005 Evaluating and tuning a static analysis to find null pointer bugs
abstract
Using static analysis to detect memory access errors, such as null pointer dereferences, is not a new problem. However, much of the previous work has used rather sophisticated analysis techniques in order to detect such errors.In this paper we show that simple analysis techniques can be used to identify many such software defects, both in production code and in student code. In order to make our analysis both simple and effective, we use a non-standard analysis which is neither complete nor sound. However, we find that it is effective at finding an interesting class of software defects.We describe the basic analysis we perform, as well as the additional errors we can detect using techniques such as annotations and inter-procedural analysis.In studies of both production software and student projects, we find false positive rates of around 20% or less. In the student code base, we find that our static analysis techniques are able to pinpoint 50% to 80% of the defects leading to a null pointer exception at runtime.
David Hovemeyer, Jaime Spacco, William W. Pugh
PASTE3
2005 The Java memory model
abstract
This paper describes the new Java memory model, which has been revised as part of Java 5.0. The model specifies the legal behaviors for a multithreaded program; it defines the semantics of multithreaded Java programs and partially determines legal implementations of Java virtual machines and compilers.The new Java model provides a simple interface for correctly synchronized programs -- it guarantees sequential consistency to data-race-free programs. Its novel contribution is requiring that the behavior of incorrectly synchronized programs be bounded by a well defined notion of causality. The causality requirement is strong enough to respect the safety and security properties of Java and weak enough to allow standard compiler and hardware optimizations. To our knowledge, other models are either too weak because they do not provide for sufficient safety/security, or are too strong because they rely on a strong notion of data and control dependences that precludes some standard compiler transformations.Although the majority of what is currently done in compilers is legal, the new model introduces significant differences, and clearly defines the boundaries of legal transformations. For example, the commonly accepted definition for control dependence is incorrect for Java, and transformations based on it may be invalid.In addition to providing the official memory model for Java, we believe the model described here could prove to be a useful basis for other programming languages that currently lack well-defined models, such as C++ and C#.
Jeremy Manson, William W. Pugh, Sarita V. Adve
POPL2
2002 Atomic Instructions in Java
David Hovemeyer, William W. Pugh, Jaime Spacco
ECOOP2
2000 The Java memory model is fatally flawed
abstract
The Java memory model described in Chapter 17 of the Java Language Specification gives constraints on how threads interact through memory. This chapter is hard to interpret and poorly understood; it imposes constraints that prohibit common compiler optimizations and are expensive to implement on existing hardware. Most JVMs violate the constraints of the existing Java memory model; conforming to the existing specification would impose significant performance penalties. In addition, programming idioms used by some programmers and used within Sun's Java Development Kit is not guaranteed to be valid according to the existing Java memory model.Furthermore, implementing Java on a shared-memory multiprocessor that implements a weakmemory model poses some implementation challenges not previously considered. Copyright © 2000 John Wiley & Sons, Ltd.
William W. Pugh
Concurr. Pract. Exp.1
1999 Compressing Java Class Files
abstract
Java class files are often distributed as jar files, which are collections of individually compressed class files (and possibility other files). Jar files are typically about 1/2 the size of the original class files due to compression. I have developed a wire-code format for collections of Java class files. This format is typically 1/2 to 1/5 of the size of the corresponding compressed jar file (1/4 to 1/10 the size of the original class files).
William W. Pugh
PLDI1
1999 Model-checking concurrent systems with unbounded integer variables: symbolic representations, approximations, and experimental results
abstract
Model checking is a powerful technique for analyzing large, finite-state systems. In an infinite state system, however, many basic properties are undecidable. In this article, we present a new symbolic model checker which conservatively evaluates safety and liveness properties on programs with unbounded integer variables. We use Presburger formulas to symbolically encode a program's transition system, as well as its model-checking computations. All fixpoint calculations are executed symbolically, and their convergence is guaranteed by using approximation techniques. We demonstrate the promise of this technology on some well-known infinite-state concurrency problems.
Tevfik Bultan, Richard Gerber 0001, William W. Pugh
ACM Trans. Program. Lang. Syst.3
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.1
1997 Symbolic Model Checking of Infinite State Systems Using Presburger Arithmetic
Tevfik Bultan, Richard Gerber 0001, William W. Pugh
CAV3
1997 Iteration Space Slicing and Its Application to Communication Optimization
abstract
Program slicing is an analysis that answers questions such as "Which statements might affect the computation of variable v at statement s?" or "Which statements depend on the value of v computed in statement s?". The answers computed by program slicing are generally a set of statements. We introduce the idea of iteration spacing slicing: we refine program slicing to ask questions such as "Which iterations of which statements might effect the computation in iterations I of statement s?" or "Which iterations of which statements depend on the value computed by iterations I of statement s?". One application of this general-purpose technique is optimization of interprocessor communication in data-parallel compilers. For example, we can separate a code fragment into 1) those iterations that must be done before a send, 2) those iterations that don't need to be done before a send and don't depend on non-local data and 3), those iterations that depend on non-local data. We examine application...
William W. Pugh, Evan Rosser
International Conference on Supercomputing1
1996 Minimizing Communication While Preserving Parallelism
abstract
All existing methods for automated data/computation decomposition share a common failing: they are very sensitive
Wayne Kelly, William W. Pugh
International Conference on Supercomputing2
1995 Parametric Dispatching of Hard Real-Time Tasks
abstract
In many real-time systems relative timing constraints are imposed on a set of tasks. Generating a correct ordering for the tasks and deriving their proper start-time assignments is an NP-hard problem; it subsumes the non-preemptive scheduling problem. Even when the application imposes a total order on the tasks, generating proper start-times is still nontrivial if execution times may range between upper and lower bounds. We present the technique of parametric dispatching to enforce such timing constraints. During an off-line component, we check if the constraints can be guaranteed. If so, a calendar is produced that allows our on-line algorithm to generate upper and lower bounds on the start time of each task, based on the start times and execution times of previous tasks. A suitable start time for the task may then be selected taking into account the presence of other non-critical tasks in the system.>
Richard Gerber 0001, William W. Pugh, Manas Saksena
IEEE Trans. Computers2
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.1
1994 Counting Solutions to Presburger Formulas: How and Why
abstract
We describe methods that are able to count the number of integer solutions to selected free variables of a Presburger formula, or sum a polynomial over all integer solutions of selected free variables of a Presburger formula. This answer is given symbolically, in terms of symbolic constants (the remaining free variables in the Presburger formula).For example, we can create a Presburger formula who's solutions correspond to the iterations of a loop. By counting these, we obtain an estimate of the execution time of the loop.In more complicated applications, we can create Presburger formulas who's solutions correspond to the distinct memory locations or cache lines touched by a loop, the flops executed by a loop, or the array elements that need to be communicated at a particular point in a distributed computation. By counting the number of solutions, we can evaluate the computation/memory balance of a computation, determine if a loop is load balanced and evaluate message traffic and allocate message buffers.
William W. Pugh
PLDI1
1994 Parallel finite automata for modeling concurrent software systems
P. David Stotts, William W. Pugh
J. Syst. Softw.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.1
1993 A Partial Evaluator for the Maruti Hard Real-Time System
Vivek Nirkhe, William W. Pugh
Real Time 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
PLDI1
1992 Partial Evaluation of High-Level Imperative Programming Languages, with Applications in Hard Real-Time Systems
abstract
Article Free Access Share on Partial evaluation of high-level imperative programming languages with applications in hard real-time systems Authors: Vivek Nirkhe View Profile , William Pugh View Profile Authors Info & Claims POPL '92: Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languagesFebruary 1992 Pages 269–280https://doi.org/10.1145/143165.143223Published:01 February 1992Publication History 25citation374DownloadsMetricsTotal Citations25Total Downloads374Last 12 Months15Last 6 weeks1 Get Citation AlertsNew Citation Alert added!This alert has been successfully added and will be sent to:You will be notified whenever a record that you have chosen has been cited.To manage your alert preferences, click on the button below.Manage my AlertsNew Citation Alert!Please log in to your account Save to BinderSave to BinderCreate a New BinderNameCancelCreateExport CitationPublisher SiteeReaderPDF
Vivek Nirkhe, William W. Pugh
POPL2
1991 Uniform techniques for loop optimization
abstract
Many differentkinds of loop transformations have been described, such as loop interchange, loop skewing and loop fusion.Each transformation requires its own particular set of dependence analysis tests and paraltelizing a section of code may require perforfig a series of transformations.
William W. Pugh
ICS1
1991 Advice to Authors of Extended Abstracts
William W. Pugh
PLDI1
1991 A partial evaluator for the Maruti hard real-time system
abstract
The use of high-level programming constructs makes it difficult to estimate at compile-time the execution time and resource requirements of a program. The authors contend that partial evaluation provides a solution to this problem. They describe the application of partial evaluation to programming languages for hard-real-time systems and give examples of programs handled by the techniques. They discuss how the system appears from a user's perspective, provide a brief overview of the partial evaluation techniques used, and describe some limitations of the techniques and possible solutions. >
Vivek Nirkhe, William W. Pugh
RTSS2
1991 The Omega test: a fast and practical integer programming algorithm for dependence analysis
abstract
The Omega test is an integer programming algorithm that can determine whether a dependence exists between two array references, and if so, under what conditions. Conventional wisdom holds that integer programming techniques are far too expensive to be used for dependence analysis, except as a method of last resort for situations that cannot be decided by simpler methods. We present evidence that suggests this wisdom is wrong, and that the Omega test is competitive with approximate algorithms used in practice and suitable for use in production compilers. Experiments suggest that, for almost all programs, the average time required by the Omega test to determine the direction vectors for an array pair is less than 500 ¯secs on a 12 MIPS workstation. The Omega test is based on an extension of Fourier-Motzkin variable elimination (a linear programming method) to integer programming, and has worst-case exponential time complexity. However, we show that for many situations in which other (po...
William W. Pugh
SC1
1990 Two-Directional Record Layout for Multiple Inheritance
abstract
Much recent work in polymorphic programming languages allows subtyping and multiple inheritance for records. In such systems, we would like to extract a field from a record with the same efficiency as if we were not making use of subtyping and multiple inheritance. Methods currently used make field extraction 3-5 times slower, which can produce a significant overall performance slowdown.
William W. Pugh, Grant E. Weddell
PLDI1
1990 Slow Optimally Balanced Search Strategies VS. Cached Fast Uniformly Balanced Search Strategies
William W. Pugh
Inf. Process. Lett.1
1989 Incremental Computation via Function Caching
abstract
Article Free Access Share on Incremental computation via function caching Authors: W. Pugh Dept. of Computer Science, Cornell University, Ithaca, NY and Dept. of Comp. Sci., Univ. of Maryland, College Park, Md. Dept. of Computer Science, Cornell University, Ithaca, NY and Dept. of Comp. Sci., Univ. of Maryland, College Park, Md.View Profile , T. Teitelbaum Dept. of Computer Science, Cornell University, Ithaca, NY Dept. of Computer Science, Cornell University, Ithaca, NYView Profile Authors Info & Claims POPL '89: Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languagesJanuary 1989 Pages 315–328https://doi.org/10.1145/75277.75305Published:03 January 1989Publication History 138citation969DownloadsMetricsTotal Citations138Total Downloads969Last 12 Months130Last 6 weeks25 Get Citation AlertsNew Citation Alert added!This alert has been successfully added and will be sent to:You will be notified whenever a record that you have chosen has been cited.To manage your alert preferences, click on the button below.Manage my AlertsNew Citation Alert!Please log in to your account Save to BinderSave to BinderCreate a New BinderNameCancelCreateExport CitationPublisher SiteeReaderPDF
William W. Pugh, Tim Teitelbaum
POPL1
1989 Skip Lists: A Probabilistic Alternative to Balanced Trees
William W. Pugh
WADS1