Restoration of Legacy Parallelism: Transforming Pthreads into Farm and Pipeline Patterns

Vladimir Janjic, Christopher Brown (Lead / Corresponding author), Adam D. Barwell

Research output: Contribution to journalArticlepeer-review

67 Downloads (Pure)


Parallel patterns are a high-level programming paradigm that enables non-experts in parallelism to develop structured parallel programs that are maintainable, adaptive, and portable whilst achieving good performance on a variety of parallel systems. However, there still exists a large base of legacy-parallel code developed using ad-hoc methods and incorporating low-level parallel/concurrency libraries such as pthreads without any parallel patterns in the fundamental design. This code would benefit from being restructured and rewritten into pattern-based code. However, the process of rewriting the code is laborious and error-prone, due to typical concurrency and pthreading code being closely intertwined throughout the business logic of the program. In this paper, we present a new software restoration methodology, to transform legacy-parallel programs implemented using pthreads into structured farm and pipeline patterned equivalents. We demonstrate our restoration technique on a number of benchmarks, allowing the introduction of patterned farm and pipeline parallelism in the resulting code; we record improvements in cyclomatic complexity and speedups on a number of representative benchmarks.

Original languageEnglish
Pages (from-to)886-910
Number of pages25
JournalInternational Journal of Parallel Programming
Early online date10 Jun 2021
Publication statusPublished - Dec 2021


  • Code analysis
  • Farm
  • Parallel patterns
  • Pipeline
  • Program transformation
  • Pthreads
  • Refactoring
  • Restoration
  • TBB

ASJC Scopus subject areas

  • Software
  • Theoretical Computer Science
  • Information Systems


Dive into the research topics of 'Restoration of Legacy Parallelism: Transforming Pthreads into Farm and Pipeline Patterns'. Together they form a unique fingerprint.

Cite this