MyNixOS website logo
Description

A generic implementation of dynamic partial-order reduction (DPOR) for testing arbitrary models of concurrency.

We can characterise the state of a concurrent computation by considering the ordering of dependent events. This is a partial order: independent events can be performed in any order without affecting the result. DPOR is a technique for computing these partial orders at run-time, and only testing one total order for each partial order. This cuts down the amount of work to be done significantly. In particular, this package implemented bounded partial-order reduction, which is a further optimisation. Only schedules within some *bound* are considered.

  • DPOR with no schedule bounding is complete, it will find all distinct executions!

  • DPOR with schedule bounding is incomplete, it will only find all distinct executions within the bound!

Caution: The fundamental assumption behind DPOR is that the *only* source of nondeterminism in your program is the scheduler. Or, to put it another way, if you execute the same program with the same schedule twice, you get the same result. If you are using this library in combination with something which performs I/O, be *very* certain that this is the case!

See the README for more details.

For details on the algorithm, albeit presented in a very imperative way, see Bounded partial-order reduction, K. Coons, M. Musuvathi, and K. McKinley (2013), available at http://research.microsoft.com/pubs/202164/bpor-oopsla-2013.pdf

Metadata

Version

0.2.0.0

License

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows