Peng Wu 0001

dblp:w/PengWu1 · DBLP profile ↗
← Back
20ranked-venue papers
6as first author
1since 2021 · last 2024
—ORCID · unresolved

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

Systems, architecture and hardware · 13 · 5 first-author · 1 since 2021Software engineering, systems software and programming languages · 13 · 2 first-author · 1 since 2021

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
11 papers
Runtime systems and virtual machines · 62% Compilers and program optimization · 28% Concurrent programming · 9%
Computer architecture, parallel and distributed computing, and storage systems
5 papers
Cloud and datacenter computing · 45% Processor architecture and microarchitecture · 39% High-performance computing · 16%
Artificial intelligence
1 paper
Deep learning architectures and training · 100%

Topics — the 21 heaviest of 24, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Runtime systems and virtual machines › dynamic compilation
just-in-time compilation
1.252024
PyTorch 2: Faster Machine Learning Through Dynamic Python Bytecode Transformation and Graph Compilation · ASPLOS (2) 2024
Adaptive multi-level compilation in a trace-based Java JIT compiler · OOPSLA 2012
On the benefits and pitfalls of extending a statically typed language JIT compiler for dynamic scripting languages · OOPSLA 2012
Runtime systems and virtual machines › dynamic compilation › just-in-time compilation
trace-based compilation
0.432012
Adaptive multi-level compilation in a trace-based Java JIT compiler · OOPSLA 2012
Reducing trace selection footprint for large-scale Java applications without performance loss · OOPSLA 2011
Improving the performance of trace-based systems by false loop filtering · ASPLOS 2011
Runtime systems and virtual machines
managed runtime
0.412019
Replayable Execution Optimized for Page Sharing for a Managed Runtime Environment · EuroSys 2019
Compilers and program optimization
vectorization
0.322015
Vectorization of apply to reduce interpretation overhead of R · OOPSLA 2015
Vectorization for SIMD architectures with alignment constraints · PLDI 2004
Runtime systems and virtual machines › dynamic compilation › just-in-time compilation
trace selection
0.222011
Reducing trace selection footprint for large-scale Java applications without performance loss · OOPSLA 2011
Improving the performance of trace-based systems by false loop filtering · ASPLOS 2011
Machine learning › Deep learning architectures and training › deep learning systems
deep learning framework
0.212024
PyTorch 2: Faster Machine Learning Through Dynamic Python Bytecode Transformation and Graph Compilation · ASPLOS (2) 2024
Concurrent programming › transactional memory
hardware transactional memory
0.212015
Software Support and Evaluation of Hardware Transactional Memory on Blue Gene/Q · IEEE Trans. Computers 2015
Runtime systems and virtual machines › interpreter
interpreter optimization
0.212015
Vectorization of apply to reduce interpretation overhead of R · OOPSLA 2015
Concurrent programming
transactional memory
0.212015
Software Support and Evaluation of Hardware Transactional Memory on Blue Gene/Q · IEEE Trans. Computers 2015
Runtime systems and virtual machines › parallel runtime systems
transactional memory runtime
0.212015
Software Support and Evaluation of Hardware Transactional Memory on Blue Gene/Q · IEEE Trans. Computers 2015
Compilers and program optimization › dynamic optimization
adaptive compilation
0.112012
Adaptive multi-level compilation in a trace-based Java JIT compiler · OOPSLA 2012
Runtime systems and virtual machines › dynamic compilation
dynamic language compilation
0.112012
On the benefits and pitfalls of extending a statically typed language JIT compiler for dynamic scripting languages · OOPSLA 2012
Runtime systems and virtual machines › virtual machine implementation
java virtual machine
0.112012
Adaptive multi-level compilation in a trace-based Java JIT compiler · OOPSLA 2012
Cloud and datacenter computing
serverless computing
0.112019
Replayable Execution Optimized for Page Sharing for a Managed Runtime Environment · EuroSys 2019
Compilers and program optimization › vectorization
SIMD vectorization
0.122006
Optimizing data permutations for SIMD devices · PLDI 2006
Vectorization for SIMD architectures with alignment constraints · PLDI 2004
Programming languages and type systems
dynamic languages
0.112015
Vectorization of apply to reduce interpretation overhead of R · OOPSLA 2015
Processor architecture and microarchitecture › transactional execution
hardware transactional memory support
0.112015
Software Support and Evaluation of Hardware Transactional Memory on Blue Gene/Q · IEEE Trans. Computers 2015
Compilers and program optimization
code generation
0.012004
Vectorization for SIMD architectures with alignment constraints · PLDI 2004
Runtime systems and virtual machines › dynamic language implementation
dynamic language runtime
0.012012
On the benefits and pitfalls of extending a statically typed language JIT compiler for dynamic scripting languages · OOPSLA 2012
High-performance computing
numerical linear algebra
0.012003
A comparison of empirical and model-driven optimization · PLDI 2003
Processor architecture and microarchitecture
SIMD
0.022006
Optimizing data permutations for SIMD devices · PLDI 2006
Vectorization for SIMD architectures with alignment constraints · PLDI 2004

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

just-in-time compilation · 1.5graph compilation · 1.5page sharing · 0.8checkpointing · 0.8software transactional memory · 0.4best-effort HTM · 0.4profiling · 0.3function vectorization · 0.2data transformation · 0.2specialization · 0.1temporal reuse · 0.0alignment analysis · 0.0model-driven optimization · 0.0empirical optimization · 0.0
YearPublicationVenuePosition
2024 PyTorch 2: Faster Machine Learning Through Dynamic Python Bytecode Transformation and Graph Compilation
abstract
This paper introduces two extensions to the popular PyTorch machine learning framework, TorchDynamo and TorchInductor, which implement the torch.compile feature released in PyTorch 2. TorchDynamo is a Python-level just-in-time (JIT) compiler that enables graph compilation in PyTorch programs without sacrificing the flexibility of Python. It achieves this by dynamically modifying Python bytecode before execution and extracting sequences of PyTorch operations into an FX graph, which is then JIT compiled using one of many extensible backends. TorchInductor is the default compiler backend for TorchDynamo, which translates PyTorch programs into OpenAI's Triton for GPUs and C++ for CPUs. Results show that TorchDynamo is able to capture graphs more robustly than prior approaches while adding minimal overhead, and TorchInductor is able to provide a 2.27× inference and 1.41× training geometric mean speedup on an NVIDIA A100 GPU across 180+ real-world models, which outperforms six other compilers. These extensions provide a new way to apply optimizations through compilers in eager mode frameworks like PyTorch.
Jason Ansel, Edward Z. Yang, Horace He, Natalia Gimelshein, Animesh Jain, Michael Voznesensky, Bin Bao, Peter Bell 0008, David Berard, Evgeni Burovski, Geeta Chauhan, Anjali Chourdia, Will Constable, Alban Desmaison, Zach DeVito, Elias Ellison, Will Feng, Jiong Gong, Michael Gschwind, Brian Hirsh, Sherlock Huang, Kshiteej Kalambarkar, Laurent Kirsch, Michael Lazos, Mario Lezcano Casado, Yanbo Liang, Jason Liang, Yinghai Lu, C. K. Luk, Bert Maher, Yunjie Pan, Christian Puhrsch, Matthias Reso, Mark Saroufim, Marcos Yukio Siraichi, Helen Suk, Shunting Zhang, Michael Suo, Phil Tillet, Xu Zhao 0004, Eikan Wang, Keren Zhou 0001, Richard Zou, Ajit Mathews, Xiaoquan Wen, Gregory Chanan, Peng Wu 0001, Soumith Chintala
ASPLOS (2)48
2019 Replayable Execution Optimized for Page Sharing for a Managed Runtime Environment
abstract
We present Replayable Execution, a system for improving the efficiency of Function-as-a-Service (FaaS) frameworks. It takes advantage of standard kernel features to reduce memory usage and accelerate cold startup speed without changes to the OS kernel, language runtimes, and the surrounding FaaS deployment environment. Replayable Execution exploits the intensive-deflated execution characteristics of the majority of target applications. It uses checkpointing to save an image of an application, allowing this image to be shared across containers and resulting in speedy restoration at service startup. We apply Replayable Execution to a representative FaaS Java framework to create a ReplayableJVM execution, which together with benefits from deterministic execution of a warmed up runtime, offers 2X memory footprint reduction, and over 10X startup time improvement.
Kai-Ting Amy Wang, Rayson Ho, Peng Wu 0001
EuroSys3
2015 Vectorization of apply to reduce interpretation overhead of R
abstract
R is a popular dynamic language designed for statistical computing. Despite R's huge user base, the inefficiency in R's language implementation becomes a major pain-point in everyday use as well as an obstacle to apply R to solve large scale analytics problems. The two most common approaches to improve the performance of dynamic languages are: implementing more efficient interpretation strategies and extending the interpreter with Just-In-Time (JIT) compiler. However, both approaches require significant changes to the interpreter, and complicate the adoption by development teams as a result. This paper presents a new approach to improve execution efficiency of R programs by vectorizing the widely used Apply class of operations. Apply accepts two parameters: a function and a collection of input data elements. The standard implementation of Apply iteratively invokes the input function with each element in the data collection. Our approach combines data transformation and function vectorization to convert the looping-over-data execution of the standard Apply into a single invocation of a vectorized function that contains a sequence of vector operations over the input data. This conversion can significantly speed-up the execution of Apply operations in R by reducing the number of interpretation steps. We implemented the vectorization transformation as an R package. To enable the optimization, all that is needed is to invoke the package, and the user can use a normal R interpreter without any changes. The evaluation shows that the proposed method delivers significant performance improvements for a collection of data analysis algorithm benchmarks. This is achieved without any native code generation and using only a single-thread of execution.
Haichuan Wang, David A. Padua, Peng Wu 0001
OOPSLA3
2015 Software Support and Evaluation of Hardware Transactional Memory on Blue Gene/Q
abstract
This paper describes an end-to-end system implementation of a transactional memory (TM) programming model on top of the hardware transactional memory (HTM) of the Blue Gene/Q machine. The TM programming model supports most C/C++ programming constructs using a best-effort HTM and the help of a complete software stack including the compiler, the kernel, and the TM runtime. An extensive evaluation of the STAMP and the RMS-TM benchmark suites on BG/Q is the first of its kind in understanding characteristics of running TM workloads on real hardware TM. The study reveals several interesting insights on the overhead and the scalability of BG/Q HTM with respect to sequential execution, coarse-grain locking, and software TM.
Amy Wang, Matthew Gaudet, Peng Wu 0001, Martin Ohmacht, José Nelson Amaral, Christopher Barton, Raúl Silvera, Maged M. Michael
IEEE Trans. Computers3
2014 Optimizing R VM: Allocation Removal and Path Length Reduction via Interpreter-level Specialization
Haichuan Wang, Peng Wu 0001, David A. Padua
CGO2
2012 Evaluation of blue Gene/Q hardware support for transactional memories
abstract
This paper describes an end-to-end system implementation of the transactional memory (TM) programming model on top of the hardware transactional memory (HTM) of the Blue Gene/Q (BG/Q) machine. The TM programming model supports most C/C++ programming constructs on top of a best-effort HTM with the help of a complete software stack including the compiler, the kernel, and the TM runtime.
Amy Wang, Matthew Gaudet, Peng Wu 0001, José Nelson Amaral, Martin Ohmacht, Christopher Barton, Raúl Silvera, Maged M. Michael
PACT3
2012 On the benefits and pitfalls of extending a statically typed language JIT compiler for dynamic scripting languages
abstract
Whenever the need to compile a new dynamically typed language arises, an appealing option is to repurpose an existing statically typed language Just-In-Time (JIT) compiler (repurposed JIT compiler). Existing repurposed JIT compilers (RJIT compilers), however, have not yet delivered the hoped-for performance boosts. The performance of JVM languages, for instance, often lags behind standard interpreter implementations. Even more customized solutions that extend the internals of a JIT compiler for the target language compete poorly with those designed specifically for dynamically typed languages. Our own Fiorano JIT compiler is an example of this problem. As a state-of-the-art, RJIT compiler for Python, the Fiorano JIT compiler outperforms two other RJIT compilers (Unladen Swallow and Jython), but still shows a noticeable performance gap compared to PyPy, today's best performing Python JIT compiler. In this paper, we discuss techniques that have proved effective in the Fiorano JIT compiler as well as limitations of our current implementation. More importantly, this work offers the first in-depth look at benefits and limitations of the repurposed JIT compiler approach. We believe the most common pitfall of existing RJIT compilers is not focusing sufficiently on specialization, an abundant optimization opportunity unique to dynamically typed languages. Unfortunately, the lack of specialization cannot be overcome by applying traditional optimizations.
José G. Castaños, David Edelsohn, Kazuaki Ishizaki, Priya Nagpurkar, Toshio Nakatani, Takeshi Ogasawara, Peng Wu 0001
OOPSLA7
2012 Adaptive multi-level compilation in a trace-based Java JIT compiler
abstract
This paper describes our multi-level compilation techniques implemented in a trace-based Java JIT compiler (trace-JIT). Like existing multi-level compilation for method-based compilers, we start JIT compilation with a small compilation scope and a low optimization level so the program can start running quickly. Then we identify hot paths with a timer-based sampling profiler, generate long traces that capture the hot paths, and recompile them with a high optimization level to improve the peak performance. A key to high performance is selecting long traces that effectively capture the entire hot paths for upgrade recompilations. To do this, we introduce a new technique to generate a directed graph representing the control flow, a TTgraph, and use the TTgraph in the trace selection engine to efficiently select long traces. We show that our multi-level compilation improves the peak performance of programs by up to 58.5% and 22.2% on average compared to compiling all of the traces only at a low optimization level. Comparing the performance with our multi-level compilation to the performance when compiling all of the traces at a high optimization level, our technique can reduce the startup times of programs by up to 61.1% and 31.3% on average without significant reduction in the peak performance. Our results show that our adaptive multi-level compilation can balance the peak performance and startup time by taking advantage of different optimization levels.
Hiroshi Inoue, Hiroshige Hayashizaki, Peng Wu 0001, Toshio Nakatani
OOPSLA3
2011 Improving the performance of trace-based systems by false loop filtering
abstract
Trace-based compilation is a promising technique for language compilers and binary translators. It offers the potential to expand the compilation scopes that have traditionally been limited by method boundaries.Detecting repeating cyclic execution paths and capturing the detected repetitions into traces is a key requirement for trace selection algorithms to achieve good optimization and performance with small amounts of code. One important class of repetition detection is cyclic-path-based repetition detection, where a cyclic execution path (a path that starts and ends at the same instruction address) is detected as a repeating cyclic execution path.However, we found many cyclic paths that are not repeating cyclic execution paths, which we call false loops. A common class of false loops occurs when a method is invoked from multiple call-sites. A cycle is formed between two invocations of the method from different call-sites, but which does not represent loops or recursion. False loops can result in shorter traces and smaller compilation scopes, and degrade the performance.We propose false loop filtering, an approach to reject false loops in the repetition detection step of trace selection, and a technique called false loop filtering by call-stack-comparison, which rejects a cyclic path as a false loop if the call stacks at the beginning and the end of the cycle are different.We applied false loop filtering to our trace-based Java™ JIT compiler that is based on IBM's J9 JVM. We found that false loop filtering achieved an average improvement of 16% and 10% for the DaCapo benchmark when applied to two baseline trace selection algorithms, respectively, with up to 37% improvement for individual benchmarks. In the end, with false loop filtering, our trace-based JIT achieves a performance comparable to that of the method-based J9 JVM/JIT using the corresponding optimization level.
Hiroshige Hayashizaki, Peng Wu 0001, Hiroshi Inoue, Mauricio J. Serrano, Toshio Nakatani
ASPLOS2
2011 A trace-based Java JIT compiler retrofitted from a method-based compiler
abstract
This paper describes our trace-based JIT compiler (trace-JIT) for Java developed from a production-quality method-based JIT compiler (method-JIT). We first describe the design and implementation of our trace-JIT with emphasis on how we retrofitted a method-JIT as a trace-based compiler. Then we show that the trace-JIT often produces better quality code than the method-JIT by extending the compilation scope. Forming longer traces that span multiple methods turns out to be more powerful than method inlining in extending the compilation scope. It reduces method-invocation overhead and also offers more compiler optimization opportunities. However, the trace-JIT incurs additional runtime overhead compared to the method-JIT that may be offset by gains from the improved code quality. Overall, our trace-JIT achieved performance roughly comparable to the baseline method-JIT. We also discuss the issues in trace-based compilation from the viewpoint of compiler optimizations. Our results show the potentials of trace-based compilation as an alternative or complementary approach to compiling languages with mature method-based compilers.
Hiroshi Inoue, Hiroshige Hayashizaki, Peng Wu 0001, Toshio Nakatani
CGO3
2011 Reducing trace selection footprint for large-scale Java applications without performance loss
abstract
When optimizing large-scale applications, striking the balance between steady-state performance, start-up time, and code size has always been a grand challenge. While recent advances in trace compilation have significantly improved the steady-state performance of trace JITs for large-scale Java applications, the size control aspect of a trace compilation system remains largely overlooked. For instance, using the DaCapo 9.12 benchmarks, we observe that 40% of traces selected by a state-of-the-art trace selection algorithm are short-lived and, on average, each selected basic block is replicated 13 times in the trace cache.
Peng Wu 0001, Hiroshige Hayashizaki, Hiroshi Inoue, Toshio Nakatani
OOPSLA1
2009 Reducing Memory Ordering Overheads in Software Transactional Memory
abstract
Most research into high-performance software transactional memory (STM) assumes that transactions will run on a processor with a relatively strict memory model, such as Total Store Ordering (TSO). To execute these algorithms correctly on processors with relaxed memory models, explicit fence instructions may be required on every transactional access, and neither the processor nor the compiler may be able to safely reorder transactional reads. The overheads of fence instructions and read serialization are a significant but unstudied source of latency for STM, with impact on the tradeoffs among different STM systems and on the optimizations that may be possible for any given system. Straightforward ports of STM runtimes from strict to relaxed machines may fail to realize the latter's performance potential. We explore the implementation of STM for machines with relaxed memory consistency using two recent high-performance STM systems. We propose compiler optimizations that can safely eliminate many fence instructions. Using these techniques, we obtain a reduction of up to 89% in the number of fences, and 20% in per-transaction latency, for common transactional benchmarks.
Michael F. Spear, Maged M. Michael, Michael L. Scott, Peng Wu 0001
CGO4
2009 Compiler and runtime techniques for software transactional memory optimization
abstract
Abstract Software transactional memory (STM) systems are an attractive environment to evaluate optimistic concurrency. We describe our experience of supporting and optimizing an STM system at both the managed runtime and compiler levels. We describe the design policies of our STM system and the statistics collected by the runtime to identify performance bottlenecks and guide tuning decisions. We present an initial work on supporting automatic instrumentation of the STM primitives for C/C++ and Java programs in the IBM XL compiler and J9 Java virtual machine. We evaluate and discuss the performance of several transactional programs running on our system. Copyright © 2008 John Wiley & Sons, Ltd.
Peng Wu 0001, Maged M. Michael, Christoph von Praun, Takuya Nakaike, Rajesh Bordawekar, Harold W. Cain, Calin Cascaval, Siddhartha Chatterjee, Stefanie Chiras, Mark F. Mergen, Michael F. Spear, Huayong Wang
Concurr. Comput. Pract. Exp.1
2006 Optimizing data permutations for SIMD devices
Gang Ren 0002, Peng Wu 0001, David A. Padua
PLDI2
2005 Efficient SIMD Code Generation for Runtime Alignment and Length Conversion
abstract
When generating codes for today's multimedia extensions, one of the major challenges is to deal with memory alignment issues. While hand programming still yields best performing SIMD codes, it is both time consuming and error prone. Compiler technology has greatly improved, including techniques that simdize loops with misaligned accesses by automatically rearranging misaligned memory streams in registers. Current techniques are applicable to runtime alignments, but they aggressively reduce the alignment overhead only when all alignments are known at compile time. This paper presents two major enhancements to the state of the art, improving both performance and coverage. First, we propose a novel technique to simdize loops with runtime alignment nearly as efficiently as those with compile-time misalignment. Runtime alignment is pervasive in real applications because it is either part of the algorithms, or it is an artifact of the compiler's inability to extract accurate alignment information from complex applications. Second, we incorporate length conversion operations, e.g., conversions between data of different sizes, into the alignment handling framework. Length conversions are pervasive in multimedia applications where mixed integer types are often used. Supporting length conversion can greatly improve the coverage of simdizable loops. Experimental results indicate that our runtime alignment technique achieves a 19% to 32% speedup increase over prior art for a benchmark stressing the impact of misaligned data. We also demonstrate speedup factors of up to 8.11 for real benchmarks over sequential execution.
Peng Wu 0001, Alexandre E. Eichenberger, Amy Wang
CGO1
2005 An integrated simdization framework using virtual vectors
abstract
Automatic simdization for multimedia extensions faces several new challenges that are not present in traditional vectorization. Some of the new issues are due to the more restrictive SIMD architectures designed for multimedia extensions. Among them are alignment constraints, lack of memory gather and scatter support, and the short and fixed-length nature of SIMD vectors. Since these constraints affect some very basic components of a program, a compiler must not only provide solid solutions to individual issues, but also take an integrated approach to address these constraints in combination.In this paper, we propose a simdization framework that addresses several orthogonal aspects of simdization, such as alignment handling, simdization of loops with mixed data lengths, and SIMD parallelism extraction from different program scopes (from basic blocks to inner loops). The novelty of this framework is its ability to facilitate interactions between different techniques based on the simple intermediate representation of virtual vectors. Measurements on a PPC970 with a VMX SIMD unit indicate speedup factors of up to 8.11 for numerical/video/communication kernels and speedup factors of up to 2.16 for benchmarks, when automatic simdization is turned on.
Peng Wu 0001, Alexandre E. Eichenberger, Amy Wang
ICS1
2004 Vectorization for SIMD architectures with alignment constraints
abstract
When vectorizing for SIMD architectures that are commonly employed by today's multimedia extensions, one of the new challenges that arise is the handling of memory alignment. Prior research has focused primarily on vectorizing loops where all memory references are properly aligned. An important aspect of this problem, namely, how to vectorize misaligned memory references, still remains unaddressed.This paper presents a compilation scheme that systematically vectorizes loops in the presence of misaligned memory references. The core of our technique is to automatically reorganize data in registers to satisfy the alignment requirement imposed by the hardware. To reduce the data reorganization overhead, we propose several techniques to minimize the number of data reorganization operations generated. During the code generation, our algorithm also exploits temporal reuse when aligning references that access contiguous memory across loop iterations. Our code generation scheme guarantees to never load the same data associated with a single static access twice. Experimental results indicate near peak speedup factors, e.g., 3.71 for 4 data per vector and 6.06 for 8 data per vector, respectively, for a set of loops where 75% or more of the static memory references are misaligned.
Alexandre E. Eichenberger, Peng Wu 0001, Kevin O'Brien
PLDI2
2003 A comparison of empirical and model-driven optimization
abstract
Empirical program optimizers estimate the values of key optimization parameters by generating different program versions and running them on the actual hardware to determine which values give the best performance. In contrast, conventional compilers use models of programs and machines to choose these parameters. It is widely believed that model-driven optimization does not compete with empirical optimization, but few quantitative comparisons have been done to date. To make such a comparison, we replaced the empirical optimization engine in ATLAS (a system for generating a dense numerical linear algebra library called the BLAS) with a model-driven optimization engine that used detailed models to estimate values for optimization parameters, and then measured the relative performance of the two systems on three different hardware platforms. Our experiments show that model-driven optimization can be surprisingly effective, and can generate code whose performance is comparable to that of code generated by empirical optimizers for the BLAS.
Kamen Yotov, Xiaoming Li 0004, Gang Ren 0002, Michael Cibulskis, Gerald DeJong, María Jesús Garzarán, David A. Padua, Keshav Pingali, Paul Stodghill, Peng Wu 0001
PLDI10
2002 Instance-wise points-to analysis for loop-based dependence testing
abstract
We present a points-to analysis that aims at enabling loop-based dependence analysis in the presence of Java references. The analysis is based on an abstraction called element-wise points-to (ewpt) mapping. An ewpt mapping summarizes, in a compact representation, the relation between a pointer and the heap object it points to, for every instance of the pointer inside a loop and for every array element directly accessible through this pointer. Such instance-wise and element-wise information is especially important for loop-based dependence analyses and for a language where multi-dimensional arrays are implemented as arrays of pointers. We describe an iterative algorithm to compute ewpt mappings. We also present techniques to remove objects from ewpt mappings for destructive updates.The points-to algorithm was implemented and evaluated on a set of benchmark programs. We demonstrate that ewpt information can significantly improve the precision of dependence analysis. In many cases, the dependence analysis reports no false dependences due to array accesses.
Peng Wu 0001, Paul Feautrier, David A. Padua, Zehra Sura
ICS1
2001 Monotonic evolution: an alternative to induction variable substitution for dependence analysis
abstract
We present a new approach to dependence testing in the presence of induction variables. Instead of looking for closed form expressions, our method computes monotonic evolution which captures the direction in which the value of a variable changes. This information is then used in the dependence test to help determine whether array references are dependence-free. Under this scheme, closed form computation and induction variable substitution can be delayed until after the dependence test and be performed on-demand. To improve computative efficiency, we also propose an optimized (non-iterative) data-flow algorithm to compute evolution. Experimental results show that dependence tests based on evolution information matches the accuracy of that based on closed-form computation (implemented in Polaris), and when no closed form expressions can be calculated, our method is more accurate than that of Polaris.
Peng Wu 0001, Albert Cohen 0001, Jay P. Hoeflinger, David A. Padua
ICS1