Light-touch Data-Parallel Shell Scripting


PaSh aims at the correct and automated parallelization of POSIX shell scripts. Broadly, PaSh includes three components: (1) a compiler that, given as input a POSIX shell script, emits a POSIX shell script that includes explicit data-parallel fragments for which PaSh has deemed such parallelization semantics-preserving, (2) a set of PaSh-related runtime primitives for supporting the execution of the parallel script fragments, available as in the PATH as normal commands, and (3) a crowd-sourced library of annotations characterizing several properties of common Unix/Linux commands relevant to parallelization.

To parallelize, say, ./evaluation/intro/ with a parallelization width of 2, from the top-level directory of the repository run:

./ ./evaluation/intro/

Run ./ --help to get more information about the available commands. See docs/tutorial for a longer tutorial.

Quick Setup

PaSh has been run on Ubuntu, Fedora, Debian, and Arch. Use one of the following ways to set it up:

More installation instructions in the tutorial. Remember to export PASH_TOP in your startup scripts!

More Info

Recent News

Further Reading

Issues That Need Help

  • #174 Add shell at the beginning of parallel script
  • #173 Use full name for runtime primitives
  • #264 Input script setup for benchmarks is not idempotent
  • #276 Create expected canonical structure per target system

Community & More