Peng Liu 0010

dblp:21/6121-10 · DBLP profile ↗
← Back
19ranked-venue papers
9as first author
0since 2021 · last 2020
0000-0001-8646-7266ORCID · conflict

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

Software engineering, systems software and programming languages · 18 · 9 first-authorArtificial intelligence and machine learning · 1Systems, architecture and hardware · 1Databases, data management, data science and information retrieval · 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
15 papers
Concurrent programming · 35% Debugging and program repair · 27% Program analysis · 22%
Computer architecture, parallel and distributed computing, and storage systems
2 papers
Distributed systems · 75% Parallel and multicore computing · 25%

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

TopicWeightPapersLastEvidence papers
Concurrent programming
concurrency bugs
1.382016
ARROW: automated repair of races on client-side web pages · ISSTA 2016
IPA: improving predictive analysis with pointer analysis · ISSTA 2016
Light: replay via tightly bounded recording · PLDI 2015
Debugging and program repair
automated program repair
0.842016
ARROW: automated repair of races on client-side web pages · ISSTA 2016
Grail: context-aware fixing of concurrency bugs · SIGSOFT FSE 2014
Flint: fixing linearizability violations · OOPSLA 2014
Program analysis
dynamic analysis
0.832016
Python predictive analysis for bug detection · SIGSOFT FSE 2016
Apex: automatic programming assignment error explanation · OOPSLA 2016
IPA: improving predictive analysis with pointer analysis · ISSTA 2016
Debugging and program repair
fault localization
0.532016
Python predictive analysis for bug detection · SIGSOFT FSE 2016
Apex: automatic programming assignment error explanation · OOPSLA 2016
LEAP: lightweight deterministic multi-processor replay of concurrent java programs · SIGSOFT FSE 2010
Concurrent programming › concurrency bug detection
data race detection
0.522016
ARROW: automated repair of races on client-side web pages · ISSTA 2016
IPA: improving predictive analysis with pointer analysis · ISSTA 2016
Debugging and program repair › record and replay
deterministic replay
0.432015
Light: replay via tightly bounded recording · PLDI 2015
LEAP: lightweight deterministic multi-processor replay of concurrent java programs · SIGSOFT FSE 2010
LEAP: lightweight deterministic multi-processor replay of concurrent java programs · SIGSOFT FSE 2010
Requirements engineering and software design › software product lines
feature selection
0.412019
Programming support for autonomizing software · PLDI 2019
Concurrent programming
synchronization
0.422014
Grail: context-aware fixing of concurrency bugs · SIGSOFT FSE 2014
Unleashing concurrency for irregular data structures · ICSE 2014
Debugging and program repair › automated program repair
concurrency bug fixing
0.322014
Grail: context-aware fixing of concurrency bugs · SIGSOFT FSE 2014
Axis: Automatically fixing atomicity violations through solving control constraints · ICSE 2012
Program analysis
static analysis
0.322013
Finding incorrect compositions of atomicity · ESEC/SIGSOFT FSE 2013
Pert: The Application-Aware Tailoring of Java Object Persistence · IEEE Trans. Software Eng. 2012
Program analysis › static analysis
bug detection
0.322016
Python predictive analysis for bug detection · SIGSOFT FSE 2016
Finding incorrect compositions of atomicity · ESEC/SIGSOFT FSE 2013
Software testing
mobile application testing
0.312017
Automatic text input generation for mobile testing · ICSE 2017
Software testing
test input generation
0.312017
Automatic text input generation for mobile testing · ICSE 2017
Distributed systems
fault tolerance
0.312017
GaDei: On Scale-Up Training as a Service for Deep Learning · ICDM 2017
Distributed systems › distributed machine learning
parameter server
0.312017
GaDei: On Scale-Up Training as a Service for Deep Learning · ICDM 2017
Debugging and program repair › fault localization
failure explanation
0.212016
Apex: automatic programming assignment error explanation · OOPSLA 2016
Program analysis › static analysis
pointer analysis
0.212016
IPA: improving predictive analysis with pointer analysis · ISSTA 2016
Program analysis
symbolic execution
0.212016
Python predictive analysis for bug detection · SIGSOFT FSE 2016
Program analysis › dynamic analysis
trace analysis
0.212016
Python predictive analysis for bug detection · SIGSOFT FSE 2016
Concurrent programming › concurrency bugs
concurrency bug reproduction
0.212015
Light: replay via tightly bounded recording · PLDI 2015
Debugging and program repair
record and replay
0.212015
Light: replay via tightly bounded recording · PLDI 2015
Concurrent programming › concurrency bugs
atomicity violation
0.222014
Axis: Automatically fixing atomicity violations through solving control constraints · ICSE 2012
Grail: context-aware fixing of concurrency bugs · SIGSOFT FSE 2014
Concurrent programming
concurrent data structures
0.212014
Flint: fixing linearizability violations · OOPSLA 2014
Concurrent programming › synchronization
fine-grained locking
0.212014
Unleashing concurrency for irregular data structures · ICSE 2014
Concurrent programming › concurrency bugs
linearizability violations
0.212014
Flint: fixing linearizability violations · OOPSLA 2014
Parallel and multicore computing
parallel programming models
0.212014
Unleashing concurrency for irregular data structures · ICSE 2014
Concurrent programming
atomicity
0.212013
Finding incorrect compositions of atomicity · ESEC/SIGSOFT FSE 2013
Operating systems › persistence
object persistence
0.112012
Pert: The Application-Aware Tailoring of Java Object Persistence · IEEE Trans. Software Eng. 2012
Machine learning › Efficient and distributed learning
distributed training
0.112017
GaDei: On Scale-Up Training as a Service for Deep Learning · ICDM 2017
Computing education › programming education
programming assignment feedback
0.112016
Apex: automatic programming assignment error explanation · OOPSLA 2016

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

static analysis · 0.9constraint solving · 0.6mini-batch size tuning · 0.6hyperparameter tuning · 0.6causal graph modeling · 0.5runtime support · 0.4program analysis · 0.4AI installation · 0.4word2vec · 0.3deep learning · 0.3trace matching · 0.2symbolic execution · 0.2schedule mutation · 0.2hybrid encoding · 0.2multiple granularity locking · 0.2
YearPublicationVenuePosition
2020 Parallelization of Classical Numerical optimization in Quantum Variational Algorithms
abstract
Numerical optimization has been extensively used in many real-world applications related to Scientific Computing, Artificial Intelligence and, more recently, Quantum Computing. However, existing optimizers conduct their internal computations sequentially, which affects their performance. We observed a general pattern that enabled us to parallelize such internal computations and achieve significant speedup. We designed a novel parallelization algorithm for optimizers, which consists of pattern detection, prediction, precomputation, and caching. Importantly, our design does not require any change to the optimizers. Instead, it simply modifies the function to be optimized, thereby leading to several engineering advantages, including simplicity, modularity and portability. We implemented this solution and included it in the Qiskit Aqua open-source project. In this paper, we present an evaluation on both standard benchmarks and real-world quantum-computing applications. The evaluation results confirm that our approach (1) incurs negligible overhead, (2) effectively speeds up optimization, and (3) does not affect the accuracy of the results or the convergence of the optimizers.
Marco Pistoia, Peng Liu 0010, Chun-Fu Chen 0001, Shaohan Hu, Stephen P. Wood
ICST2
2019 White-Box Program Tuning
abstract
Many programs or algorithms are largely parameterized, especially those based on heuristics. The quality of the results depends on the parameter setting. Different inputs often have different optimal settings. Program tuning is hence of great importance. Existing tuning techniques treat the program as a black-box and hence cannot leverage the internal program states to achieve better tuning. We propose a white-box tuning technique that is implemented as a library. The user can compose complex program tuning tasks by adding a small number of library calls to the original program and providing a few callback functions. Our experiments on 13 widely-used real-world programs show that our technique substantially improves data processing results and outperforms OpenTuner, the state-of-the-art black-box tuning technique.
Wen-Chuan Lee, Yingqi Liu, Peng Liu 0010, Shiqing Ma, Hongjun Choi, Xiangyu Zhang 0001, Rajiv Gupta 0001
CGO3
2019 Programming support for autonomizing software
abstract
Most traditional software systems are not built with the artificial intelligence support (AI) in mind. Among them, some may require human interventions to operate, e.g., the manual specification of the parameters in the data processing programs, or otherwise, would behave poorly. We propose a novel framework called Autonomizer to autonomize these systems by installing the AI into the traditional programs. Autonomizeris general so it can be applied to many real-world applications. We provide the primitives and the run-time support, where the primitives abstract common tasks of autonomization and the runtime support realizes them transparently. With the support of Autonomizer, the users can gain the AI support with little engineering efforts. Like many other AI applications, the challenge lies in the feature selection, which we address by proposing multiple automated strategies based on the program analysis. Our experiment results on nine real-world applications show that the autonomization only requires adding a few lines to the source code.Besides, for the data-processing programs, Autonomizer improves the output quality by 161% on average over the default settings. For the interactive programs such as game/driving,Autonomizer achieves higher success rate with lower training time than existing autonomized programs.
Wen-Chuan Lee, Peng Liu 0010, Yingqi Liu, Shiqing Ma, Xiangyu Zhang 0001
PLDI2
2017 GaDei: On Scale-Up Training as a Service for Deep Learning
abstract
Deep learning (DL) training-as-a-service (TaaS) is an important emerging industrial workload. TaaS must satisfy a wide range of customers who have no experience and/or resources to tune DL hyper-parameters (e.g., mini-batch size and learning rate), and meticulous tuning for each user's dataset is prohibitively expensive. Therefore, TaaS hyper-parameters must be fixed with values that are applicable to all users. Unfortunately, few research papers have studied how to design a system for TaaS workloads. By evaluating the IBM Watson Natural Language Classfier (NLC) workloads, the most popular IBM cognitive service used by thousands of enterprise-level clients globally, we provide empirical evidence that only the conservative hyper-parameter setup (e.g., small mini-batch size) can guarantee acceptable model accuracy for a wide range of customers. Unfortunately, smaller mini-batch size requires higher communication bandwidth in a parameter-server based DL training system. In this paper, we characterize the exceedingly high communication bandwidth requirement of TaaS using representative industrial deep learning workloads. We then present GaDei, a highly optimized shared-memory based scale-up parameter server design. We evaluate GaDei using both commercial benchmarks and public benchmarks and demonstrate that GaDei significantly outperforms the state-of-the-art parameter-server based implementation while maintaining the required accuracy. GaDei achieves near-best-possible runtime performance, constrained only by the hardware limitation. Furthermore, to the best of our knowledge, GaDei is the only scale-up DL system that provides fault-tolerance.
Wei Zhang 0057, Minwei Feng, Yunhui Zheng, Yufei Ren, Yandong Wang 0001, Peng Liu 0010, Bing Xiang, Li Zhang 0002, Bowen Zhou 0002, Fei Wang 0001
ICDM7
2017 Automatic text input generation for mobile testing
abstract
Many designs have been proposed to improve the automated mobile testing. Despite these improvements, providing appropriate text inputs remains a prominent obstacle, which hinders the large-scale adoption of automated testing approaches. The key challenge is how to automatically produce the most relevant text in a use case context. For example, a valid website address should be entered in the address bar of a mobile browser app to continue the testing of the app, a singer's name should be entered in the search bar of a music recommendation app. Without the proper text inputs, the testing would get stuck. We propose a novel deep learning based approach to address the challenge, which reduces the problem to a minimization problem. Another challenge is how to make the approach generally applicable to both the trained apps and the untrained apps. We leverage the Word2Vec model to address the challenge. We have built our approaches as a tool and evaluated it with 50 iOS mobile apps including Firefox and Wikipedia. The results show that our approach significantly outperforms existing automatic text input generation methods.
Peng Liu 0010, Xiangyu Zhang 0001, Marco Pistoia, Yunhui Zheng, Manoel Marques, Lingfei Zeng
ICSE1
2017 Using Abstract Interpretation to Correct Synchronization Faults
Pietro Ferrara 0001, Omer Tripp, Peng Liu 0010, Eric Koskinen
VMCAI3
2016 IPA: improving predictive analysis with pointer analysis
abstract
Predictive analysis, recently proposed for race detection, guarantees to report no false positives and achieves good coverage. Predictive analysis starts with the trace of an execution and mutates the schedule order of the trace to ``predict'' the executions that expose the hidden races. Ideally, the predictive analysis should allow the schedule mutation to change the memory location accessed by the field access, which helps meet the ``same memory location'' requirement of the data race. However, existing predictive approaches, including causality-preserving approaches and symbolic approaches, lack this capability. We propose the first predictive analysis that allows changing the accessed locations. The key challenge is that modeling of the field accesses relies on the location, which may however become unknown due to schedule mutation. We solve this challenge through a novel combination of predictive analysis and pointer analysis. Furthermore, unlike previous work, our analysis applies a hybrid encoding scheme to increase practical applicability. We have implemented our approach as a prototype IPA, and compared it against the most recent predictive analysis over a set of popular Java applications. Our experimental evaluation confirms the effectiveness of our approach:IPA is able to find close to 2X as many races as previous approaches.
Peng Liu 0010, Omer Tripp, Xiangyu Zhang 0001
ISSTA1
2016 ARROW: automated repair of races on client-side web pages
abstract
Modern browsers have a highly concurrent page rendering process in order to be more responsive. However, such a concurrent execution model leads to various race issues. In this paper, we present ARROW, a static technique that can automatically, safely, and cost effectively patch certain race issues on client side pages. It works by statically modeling a web page as a causal graph denoting happens-before relations between page elements, according to the rendering process in browsers. Races are detected by identifying inconsistencies between the graph and the dependence relations intended by the developer. Detected races are fixed by leveraging a constraint solver to add a set of edges with the minimum cost to the causal graph so that it is consistent with the intended dependences. The input page is then transformed to respect the repair edges. ARROW has fixed 151 races from 20 real world commercial web sites.
Weihang Wang 0001, Yunhui Zheng, Peng Liu 0010, Lei Xu 0003, Xiangyu Zhang 0001, Patrick Eugster
ISSTA3
2016 Apex: automatic programming assignment error explanation
abstract
This paper presents Apex, a system that can automatically generate explanations for programming assignment bugs, regarding where the bugs are and how the root causes led to the runtime failures. It works by comparing the passing execution of a correct implementation (provided by the instructor) and the failing execution of the buggy implementation (submitted by the student). The technique overcomes a number of technical challenges caused by syntactic and semantic differences of the two implementations. It collects the symbolic traces of the executions and matches assignment statements in the two execution traces by reasoning about symbolic equivalence. It then matches predicates by aligning the control dependences of the matched assignment statements, avoiding direct matching of path conditions which are usually quite different. Our evaluation shows that Apex is every effective for 205 buggy real world student submissions of 4 programming assignments, and a set of 15 programming assignment type of buggy programs collected from stackoverflow.com, precisely pinpointing the root causes and capturing the causality for 94.5% of them. The evaluation on a standard benchmark set with over 700 student bugs shows similar results. A user study in the classroom shows that Apex has substantially improved student productivity.
Dohyeong Kim, Yonghwi Kwon 0001, Peng Liu 0010, I Luk Kim, David Mitchel Perry, Xiangyu Zhang 0001, Gustavo Rodriguez-Rivera
OOPSLA3
2016 Python predictive analysis for bug detection
abstract
Python is a popular dynamic language that allows quick software development. However, Python program analysis engines are largely lacking. In this paper, we present a Python predictive analysis. It first collects the trace of an execution, and then encodes the trace and unexecuted branches to symbolic constraints. Symbolic variables are introduced to denote input values, their dynamic types, and attribute sets, to reason about their variations. Solving the constraints identifies bugs and their triggering inputs. Our evaluation shows that the technique is highly effective in analyzing real-world complex programs with a lot of dynamic features and external library calls, due to its sophisticated encoding design based on traces. It identifies 46 bugs from 11 real-world projects, with 16 new bugs. All reported bugs are true positives.
Zhaogui Xu, Peng Liu 0010, Xiangyu Zhang 0001, Baowen Xu
SIGSOFT FSE2
2015 Light: replay via tightly bounded recording
abstract
Reproducing concurrency bugs is a prominent challenge. Existing techniques either rely on recording very fine grained execution information and hence have high runtime overhead, or strive to log as little information as possible but provide no guarantee in reproducing a bug. We present Light, a technique that features much lower overhead compared to techniques based on fine grained recording, and that guarantees to reproduce concurrent bugs. We leverage and formally prove that recording flow dependences is the necessary and sufficient condition to reproduce a concurrent bug. The flow dependences, together with the thread local orders that can be automatically inferred (and hence not logged), are encoded as scheduling constraints. An SMT solver is used to derive a replay schedule, which is guaranteed to exist even though it may be different from the original schedule. Our experiments show that Light has only 44% logging overhead, almost one order of magnitude lower than the state of the art techniques relying on logging memory accesses. Its space overhead is only 10% of those techniques. Light can also reproduce all the bugs we have collected whereas existing techniques miss some of them.
Peng Liu 0010, Xiangyu Zhang 0001, Omer Tripp, Yunhui Zheng
PLDI1
2014 Unleashing concurrency for irregular data structures
abstract
To implement the atomicity in accessing the irregular data structure, developers often use the coarse-grained locking because the hierarchical nature of the data structure makes the reasoning of fine-grained locking difficult and error-prone for the update of an ancestor field in the data structure may affect its descendants. The coarse-grained locking disallows the concurrent accesses to the entire data structure and leads to a low degree of concurrency. We propose an approach, built upon the Multiple Granularity Lock (MGL), that replaces the coarse-grained locks to unleash more concurrency for irregular data structures. Our approach is widely applicable and does not require the data structures to have special shapes. We produce the MGL locks through reasoning about the hierarchy of the data structure and the accesses to it. According to the evaluation results on widely used applications, our optimization brings the significant speedup, e.g., at least 7%-20% speedup and up to 2X speedup.
Peng Liu 0010, Charles Zhang 0001
ICSE1
2014 Flint: fixing linearizability violations
abstract
Writing concurrent software while achieving both correctness and efficiency is a grand challenge. To facilitate this task, concurrent data structures have been introduced into the standard library of popular languages like Java and C#. Unfortunately, while the operations exposed by concurrent data structures are atomic (or linearizable), compositions of these operations are not necessarily atomic. Recent studies have found many erroneous implementations of composed concurrent operations.
Peng Liu 0010, Omer Tripp, Xiangyu Zhang 0001
OOPSLA1
2014 Grail: context-aware fixing of concurrency bugs
abstract
Writing efficient synchronization for multithreaded programs is notoriously hard. The resulting code often contains subtle concurrency bugs. Even worse, many bug fixes introduce new bugs. A classic example, seen widely in practice, is deadlocks resulting from fixing of an atomicity violation. These complexities have motivated the development of automated fixing techniques. Current techniques generate fixes that are typically conservative, giving up on available parallelism. Moreover, some of the techniques cannot guarantee the correctness of a fix, and may introduce deadlocks similarly to manual fix, whereas techniques that ensure correctness do so at the expense of even greater performance loss. We present Grail, a novel fixing algorithm that departs from previous techniques by simultaneously providing both correctness and optimality guarantees. Grail synthesizes bug-free yet optimal lock-based synchronization. To achieve this, Grail builds an analysis model of the buggy code that is both contextual, distinguishing different aliasing contexts to ensure efficiency, and global, accounting for the entire synchronization behavior of the involved threads to ensure correctness. Evaluation of Grail on 12 bugs from popular codebases confirms its practical advantages, especially compared with existing techniques: Grail patches are, in general, >=40% more efficient than the patches produced by other techniques, and incur only 2% overhead.
Peng Liu 0010, Omer Tripp, Charles Zhang 0001
SIGSOFT FSE1
2013 Finding incorrect compositions of atomicity
abstract
In object-oriented code, atomicity is ideally isolated in a library which encapsulates shared program state and provides atomic APIs for access. The library provides a convenient way for programmers to reason about the needed synchronization. However, as the library exports a limited set of APIs, it cannot satisfy every unplanned atomicity demand; therefore, clients may have to compose invocations of the library APIs to obtain new atomic functionality. This process is error-prone due to the complexity of reasoning required, hence tool support for uncovering incorrect compositions (i.e., atomic compositions that are implemented incorrectly) would be very helpful. A key difficulty is how to determine the intended atomic compositions, which are rarely documented. Existing inference techniques cannot be used to infer the atomic compositions because they cannot recognize the library and the client, which requires understanding the related program state. Even if extended to support the library/client, they lead to many false positives or false negatives because they miss the key program logic which reflects programmers’ coding paradigms for atomic compositions.
Peng Liu 0010, Julian Dolby, Charles Zhang 0001
ESEC/SIGSOFT FSE1
2012 Axis: Automatically fixing atomicity violations through solving control constraints
abstract
Atomicity, a general correctness criterion in concurrency programs, is often violated in real-world applications. The violations are difficult for developers to fix, making automatic bug fixing techniques attractive. The state of the art approach aims at automating the manual fixing process but cannot provide any theoretical reasoning and guarantees. We provide an automatic approach that applies well-studied discrete control theory to guarantee deadlocks are not introduced and maximal preservation of the concurrency of the original code. Under the hood, we reduce the problem of violation fixing to a constraint solving problem using the Petri net model. Our evaluation on 13 subjects shows that the slowdown incurred by our patches is only 40% of that of the state of the art. With the deadlock-free guarantee, our patches incur moderate overhead (around 10%), which is a worthwhile cost for safety.
Peng Liu 0010, Charles Zhang 0001
ICSE1
2012 Pert: The Application-Aware Tailoring of Java Object Persistence
abstract
Persistence is a widely used technique which allows the objects that represent the results of lengthy computations to outlive the process that creates it in order to considerably speed up subsequent program executions. We observe that conventional persistence techniques usually do not consider the application contexts of the persistence operations, where not all of the object states need to be persisted. Leveraging this observation, we have designed and implemented a framework called Pert, which first performs static program analysis to estimate the actual usage of the persisted object, given the context of its usage in the program. The Pert runtime uses the statically computed information to efficiently make tailoring decisions to prune the redundant and unused object states during the persistence operations. Our evaluation result shows that the Pert-based optimization can speed up the conventional persistence operations by 1 to 45 times. The amount of persisted data is also dramatically reduced, as the result of the application-aware tailoring.
Peng Liu 0010, Charles Zhang 0001
IEEE Trans. Software Eng.1
2010 LEAP: lightweight deterministic multi-processor replay of concurrent java programs
abstract
The technique of deterministic record and replay aims at faithfully reenacting an earlier program execution. For concurrent programs, it is one of the most important techniques for program understanding and debugging. The state of the art deterministic replay techniques face challenging efficiency problems in supporting multi-processor executions due to the unoptimized treatment of shared memory accesses. We propose LEAP: a deterministic record and replay technique that uses a new type of local order w.r.t. the shared memory locations and concurrent threads. Compared to the related work, our technique records much less information without losing the replay determinism. The correctness of our technique is underpinned by formal models and a replay theorem that we have developed in this work. Through our evaluation using both benchmarks and real world applications, we show that LEAP is more than 10x faster than conventional global-order based approaches and, in most cases, 2x to 10x faster than other local-order based approaches. Our recording overhead on the two large open source multi-threaded applications Tomcat and Derby is less than 10%. Moreover, as the evidence of the deterministic replay, LEAP is able to deterministically reproduce 7 out of 8 real bugs in Tomcat and Derby, 13 out of 16 benchmark bugs in IBM ConTest benchmark suite, and 100% of the randomly injected concurrency bugs.
Jeff Huang 0001, Peng Liu 0010, Charles Zhang 0001
SIGSOFT FSE2
2010 LEAP: lightweight deterministic multi-processor replay of concurrent java programs
abstract
The technique of deterministic record and replay aims at faithfully reenacting an earlier program execution. For concurrent programs, it is one of the most important techniques for program understanding and debugging. This demo presents LEAP: an efficient technique as well as a tool prototype to deterministically replay concurrent Java programs on multi-processors without any changes to the host's environment. During execution, LEAP records the thread access orders w.r.t. each shared memory location. The same thread access orders are then enforced in the replay execution to drive the program to the same states. The replay determinism of this approach is underpinned by formal models and a replay theorem developed in this work. Compared to the related approaches, LEAP records much less information, and thus much more efficient.
Jeff Huang 0001, Peng Liu 0010, Charles Zhang 0001
SIGSOFT FSE2