Finding parallel patterns through static analysis in C++ applications

Since the ‘free lunch’ of processor performance is over, parallelism has become the new trend in hardware and architecture design. However, parallel resources deployed in data centers are underused in many cases, given that sequential programming is still deeply rooted in current software development. To address this problem, new methodologies and techniques for parallel programming have been progressively developed. For instance, parallel frameworks, offering programming patterns, allow expressing concurrency in applications to better exploit parallel hardware. Nevertheless, a large portion of production software, from a broad range of scientific and industrial areas, is still developed sequentially. Considering that these software modules contain thousands, or even millions, of lines of code, an extremely large amount of effort is needed to identify parallel regions. To pave the way in this area, this paper presents Parallel Pattern Analyzer Tool, a software component that aids the discovery and annotation of parallel patterns in source codes. This tool simplifies the transformation of sequential source code to parallel. Specifically, we provide support for identifying Map, Farm, and Pipeline parallel patterns and evaluate the quality of the detection for a set of different C++ applications.

[1]  Arch D. Robison,et al.  Structured Parallel Programming: Patterns for Efficient Computation , 2012 .

[2]  Timothy G. Mattson,et al.  Patterns for parallel programming , 2004 .

[3]  Kevin Skadron,et al.  Rodinia: A benchmark suite for heterogeneous computing , 2009, 2009 IEEE International Symposium on Workload Characterization (IISWC).

[4]  J. J. Collins,et al.  Challenges of evolving sequential to parallel code: an exploratory review , 2011, IWPSE-EVOL '11.

[5]  Chao Yang,et al.  FreshBreeze: A Data Flow Approach for Meeting DDDAS Challenges , 2015, ICCS.

[6]  Björn Franke,et al.  Semi-automatic extraction and exploitation of hierarchical pipeline parallelism using profiling information , 2010, 2010 19th International Conference on Parallel Architectures and Compilation Techniques (PACT).

[7]  Zoltán Horváth,et al.  Discovering parallel pattern candidates in Erlang , 2014, Erlang Workshop.

[8]  Peter Kilpatrick,et al.  Paraphrasing: Generating Parallel Programs Using Refactoring , 2011, FMCO.

[9]  Uday Bondhugula,et al.  Hybrid Iterative and Model-Driven Optimization in the Polyhedral Model , 2008 .

[10]  Koen De Bosschere,et al.  A profile-based tool for finding pipeline parallelism in sequential programs , 2010, Parallel Comput..

[11]  Ali Jannesari,et al.  DiscoPoP: A Profiling Tool to Identify Parallelization Opportunities , 2015 .

[12]  Marco Danelutto,et al.  Structured Parallel Programming with "core" FastFlow , 2013, CEFP.

[13]  Walter F. Tichy,et al.  Patty: a pattern-based parallelization tool for the multicore age , 2015, PMAM '15.

[14]  Luis Miguel Sánchez,et al.  Discovering Pipeline Parallel Patterns in Sequential Legacy C++ Codes , 2016, PMAM@PPoPP.

[15]  James Reinders,et al.  Intel threading building blocks - outfitting C++ for multi-core processor parallelism , 2007 .

[16]  David H. Bailey,et al.  The Nas Parallel Benchmarks , 1991, Int. J. High Perform. Comput. Appl..

[17]  Soledad Escolar,et al.  A Comparative Study and Evaluation of Parallel Programming Models for Shared-Memory Parallel Architectures , 2013, New Generation Computing.