Refactoring GrPPI: generic refactoring for generic parallelism in C++

Christopher Mark Brown, Vladimir Janjic, Adam David Barwell, Jose Daniel Garcia, K. MacKenzie

Research output: Contribution to journalArticlepeer-review

1 Citation (Scopus)
2 Downloads (Pure)


The Generic Reusable Parallel Pattern Interface (GrPPI) is a very useful abstraction over different parallel pattern libraries, allowing the programmer to write generic patterned parallel code that can easily be compiled to different backends such as FastFlow, OpenMP, Intel TBB and C++ threads. However, rewriting legacy code to use GrPPI still involves code transformations that can be highly non-trivial, especially for programmers who are not experts in parallelism. This paper describes software refactorings to semi-automatically introduce instances of GrPPI patterns into sequential C++ code, as well as safety checking static analysis mechanisms which verify that introducing patterns into the code does not introduce concurrency-related bugs such as race conditions. We demonstrate the refactorings and safety-checking mechanisms on four simple benchmark applications, showing that we are able to obtain, with little effort, GrPPI-based parallel versions that accomplish good speedups (comparable to those of manually-produced parallel versions) using different pattern backends.
Original languageEnglish
Number of pages23
JournalInternational Journal of Parallel Programming
VolumeFirst Online
Early online date10 Jul 2020
Publication statusE-pub ahead of print - 10 Jul 2020


  • Refactoring
  • Parallelism
  • Parallel patterns
  • TBB
  • C++
  • GrPI
  • C++ threads


Dive into the research topics of 'Refactoring GrPPI: generic refactoring for generic parallelism in C++'. Together they form a unique fingerprint.

Cite this