Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Peter Pirkelbauer is active.

Publication


Featured researches published by Peter Pirkelbauer.


software language engineering | 2010

Support for the evolution of C++ generic functions

Peter Pirkelbauer; Damian Dechev; Bjarne Stroustrup

The choice of requirements for an argument of a generic type or algorithm is a central design issue in generic programming. In the context of C++, a specification of requirements for a template argument or a set of template arguments is called a concept. n nIn this paper, we present a novel tool, TACE (template analysis and concept extraction), designed to help programmers understand the requirements that their code de facto imposes on arguments and help simplify and generalize those through comparisons with libraries of well-defined and precisely-specified concepts. TACE automatically extracts requirements from the body of function templates. These requirements are expressed using the notation and semantics developed by the ISO C++ standards committee. TACE converts implied requirements into concept definitions and compares them against concepts from a repository. Components of a well-defined library exhibit commonalities that allow us to detect problems by comparing requirements from many components: Design and implementation problems manifest themselves as minor variations in requirements. TACE points to source code that cannot be constrained by concepts and to code where small modifications would allow the use of less constraining concepts. For people who use a version of C++ with concept support, TACE can serve as a core engine for automated source code rejuvenation.


Computer Languages, Systems & Structures | 2017

Refinement of structural heuristics for model checking of concurrent programs through data mining

Reed Milewicz; Peter Pirkelbauer

Detecting concurrency bugs in multi-threaded programs through model-checking is complicated by the combinatorial explosion in the number of ways that different threads can be interleaved to produce different combinations of behaviors. At the same time, concurrency bugs tend to be limited in their scope and scale due to the way in which concurrent programs are designed, and making visible the rules that govern the relationships between threads can help us to better identify which interleavings are worth investigating. In this work, patterns of read-write sequences are mined from a single execution of the target program to produce a quantitative, categorical model of thread behaviors. This model is exploited by a novel structural heuristic. Experiments with a proof-of-concept implementation, built using Java Pathfinder and WEKA, demonstrate that this heuristic locates bugs faster and more reliably than a conventional counterpart. HighlightsThe paper explores how model checking can be hybridized with trace analysis.Traces are mined to produce a categorical model of thread behavior.A heuristic for race detection is retrofitted to exploit the behavior model.With proper parameterization, the novel heuristic finds bugs 8? faster.A novel mutation-based benchmark generation process is introduced for validation.


acm symposium on applied computing | 2015

Runtime checking C programs

Reed Milewicz; Rajeshwar Vanka; James Tuck; Daniel J. Quinlan; Peter Pirkelbauer

The C Programming Language is known for being an efficient language that can be compiled on almost any architecture and operating system. However the absence of dynamic safety checks and a relatively weak type system allows programmer oversights that are hard to spot. In this paper, we present RTC, a runtime monitoring tool that instruments unsafe code and monitors the program execution. RTC is built on top of the ROSE compiler infrastructure. RTC finds memory bugs and arithmetic overflows and underflows, and run-time type violations. Most of the instrumentations are directly added to the source file and only require a minimal runtime system. As a result, the instrumented code remains portable. In tests against known error detection benchmarks, RTC found 98% of all memory related bugs and had zero false positives. In performance tests conducted with well known algorithms, such as binary search and MD5, we determined that the unoptimized overhead rate is between a factor of 1.8 and a factor of 77 respectively.


international conference on software testing verification and validation | 2017

Ariadne: Hybridizing Directed Model Checking and Static Analysis

Reed Milewicz; Peter Pirkelbauer

While directed model checking has proven to be a powerful tool in the fight against concurrency bugs, scalability remains a concern due to the combinatorial explosion in size of the state space. Overcoming that combinatorial explosion requires the selection and/or parameterization of meta*-heuristics, but we are left with a persistent problem of having to provide or compute specialized knowledge of the program under consideration, and this limits the practical value of the technique. To circumvent that, this paper investigates directed model checking as a platform for the synthesis of results from other analyses. We introduce an open-source tool, Ariadne, which translates reports of suspected race conditions of a static analyzer (Petablox) to instrumentation using a source-to-source compiler (ROSE) that can be exploited by a model checker (Java Pathfinder). We detail the algorithm used, present experimental results, and outline directions for future research.


Computer Languages, Systems & Structures | 2016

Lightweight runtime checking of C programs with RTC

Reed Milewicz; Rajeshwar Vanka; James Tuck; Daniel J. Quinlan; Peter Pirkelbauer

The C Programming Language is known for being an efficient language that can be compiled on almost any architecture and operating system. However the absence of dynamic safety checks and a relatively weak type system allows programmer oversights that are hard to spot. In this paper, we present RTC, a runtime monitoring tool that instruments unsafe code and monitors the program execution. RTC is built on top of the ROSE compiler infrastructure. RTC finds memory bugs and arithmetic overflows and underflows, and run-time type violations. Most of the instrumentations are directly added to the source file and only require a minimal runtime system. As a result, the instrumented code remains portable. In tests against known error detection benchmarks, RTC found 98% of all memory related bugs and had zero false positives. In performance tests conducted with well known algorithms, such as binary search and MD5, we determined that our tool has an average run-time overhead rate of 9.7? and memory overhead rate of 3.5?. HighlightsRTC is a tool for instrumenting C programs with run-time safety checks.It handles memory violations, arithmetic underflow/overflows, and type violations.The instrumented code can be compiled by any C99 compliant compiler.The runtime framework is extremely lightweight, useful for in situ analysis.The overhead is very low compared to other, similar tools available today.


languages and compilers for parallel computing | 2015

Petal Tool for Analyzing and Transforming Legacy MPI Applications

Hadia Ahmed; Anthony Skjellum; Peter Pirkelbauer

Legacy MPI applications are an important and economically valuable category of parallel software that rely on the MPI-1, MPI-2 and, more recently, MPI-3 standards to achieve performance and portability. Many of these applications have been developed or ported to MPI over the past two decades, with the implicit dual goal of achieving acceptably high performance and scalability, and a high level of portability between diverse parallel architectures. However they were often created implicitly using MPI in ways that exploited how a particular underlying MPI behaved at the time such as those with polling progress and poor implementation of some operations. Thus, they did not necessarily take advantage of the full potential for describing latent concurrency or for loosening the coupling of the application thread from the message scheduling and transfer. n nThis paper presents a first transformation tool, Petal, that identifies calls to legacy MPI primitives. Petal is implemented on top of the ROSE source-to-source infrastructure and automates the analysis and transformation of existing codes to utilize non-blocking MPI and persistent MPI primitives. We use control flow and pointer alias analysis to overlap communication and computation. The transformed code is capable of supporting better application bypass, yielding better overlapping of communication, computation, and I/O. We present the design of the tool and its evaluation on available benchmarks.


Proceedings of the 24th European MPI Users' Group Meeting on | 2017

Transforming blocking MPI collectives to Non-blocking and persistent operations

Hadia Ahmed; Anthony Skjellumh; Purushotham Bangalore; Peter Pirkelbauer

This paper describes Petal, a prototype tool that uses compiler-analysis techniques to automate code transformations to hide communication costs behind computation by replacing blocking MPI functions with corresponding nonblocking and persistent collective operations while maintaining legacy applications correctness. In earlier work, we have already demonstrated Petals ability to transform point-to-point MPI operations in complement to the results shown here. The contributions of this paper include the approach to collective operation transformations, a description of achieved functionality, examples of transformations, and demonstration of performance improvements obtained thus far on representative sample MPI programs. Depending on system scale and problem size, the transformations yield a speedup of up to a factor of two. This tool can be used to transform useful classes of new and legacy MPI programs to use the newest variants of MPI functions to improve performance without manual intervention for forthcoming HPC systems and updated versions of the MPI standard.


Future Generation Computer Systems | 2017

Exploring dynamic load imbalance solutions with the CoMD proxy application

Olga Pearce; Hadia Ahmed; Rasmus Larsen; Peter Pirkelbauer; David F. Richards

Abstract Proxy applications are developed to simplify studying parallel performance of scientific simulations and to test potential solutions for performance problems. However, proxy applications are typically too simple to allow work migration or to represent the load imbalance of their parent applications. To study the ability of load balancing solutions to balance work effectively, we enable work migration in one of the Exascale Co-design Center for Materials in Extreme Environments (ExMatEx) [ [1] ] applications, CoMD. We design a methodology to parameterize three key aspects necessary for studying load imbalance correction: (1)xa0the granularity with which work can be migrated; (2) the initial load imbalance; (3) the dynamic load imbalance (how quickly the load changes over time). We present a study of the impact of flexibility in work migration in CoMD on load balance and the associated rebalancing costs for a wide range of initial and dynamic load imbalance scenarios.


international conference on algorithms and architectures for parallel processing | 2016

A Portable Lock-Free Bounded Queue

Peter Pirkelbauer; Reed Milewicz; Juan Felipe Gonzalez

Attaining efficient and portable lock-free containers is challenging as almost any CPU family implements slightly different memory models and atomic read-modify-write operations. C++11 offers a memory model and operation abstractions that enable portable implementations of non-blocking algorithms. In this paper, we present a first scalable and portable lock-free bounded queue supporting multiple readers and multiple writers. Our design uses unique empty values to decouple writing an element from incrementing the tail during enqueue. Dequeue employs a helping scheme that delays helping in the regular case, thereby reducing contention on shared memory. We evaluate our implementation on architectures featuring weak and strong memory consistency models. Our comparison with known blocking and lock-free designs shows that the presented implementation scales well on architectures that implement a weak memory consistency model.


Computer Science and Information Systems | 2014

SimpleConcepts: a lightweight extension to C++ to support constraints on generic types

Reed Milewicz; Marjan Mernik; Peter Pirkelbauer

Generic programming plays an essential role in C++ software through the use n of templates. However, both the creation and use of template libraries is n hindered by the fact that the language does not allow programmers to specify n constraints on generic types. To date, no proposal to update the language to n provide concepts has survived the committee process. Until that time comes, n as a form of early support, this paper introduces SimpleConcepts, an n extension to C++11 that provides support for concepts, sets of constraints on n generic types. SimpleConcepts features are parsed according to an island n grammar and source-to-source translation is used to lower concepts to pure n C++11 code.

Collaboration


Dive into the Peter Pirkelbauer's collaboration.

Top Co-Authors

Avatar

Reed Milewicz

University of Alabama at Birmingham

View shared research outputs
Top Co-Authors

Avatar

Hadia Ahmed

University of Alabama at Birmingham

View shared research outputs
Top Co-Authors

Avatar

Damian Dechev

University of Central Florida

View shared research outputs
Top Co-Authors

Avatar

Daniel J. Quinlan

Lawrence Livermore National Laboratory

View shared research outputs
Top Co-Authors

Avatar

James Tuck

North Carolina State University

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Researchain Logo
Decentralizing Knowledge