INNCABS

INNCABS is a cross-platform cross-library benchmark suite consisting of 14 benchmarks with varying task granularities and synchronization requirements. It is designed to test the quality of implementation of C++11 parallelism constructs, in particular of std::async() and the deadlock-free multi-mutex std::lock() call.
It provides a set of 14 benchmarks, some of which are adopted from previous benchmarks suites and some which are new to INNCABS. They fall into three broad categories, as illustrated in the following figure:

These categories can be summarized as follows:

  1. Recursive parallelism features nested async invocations forming a tree pattern. Up to some cutoff point, each async function spawns multiple further asynchronous calls. This is the typical structure traditionally encountered in Cilk programs, and common in functional programming languages. For this type of parallelism, the arity and depth are significant parameters influencing runtime behavior and performance.
    Benchmarks: FFT, Fib, Floorplan, NQueens, Pyramids, QAP, Sort, Strassen, UTS
  2. Loop-like structures simulate loop parallelism using the async primitive within a basic for or while loop running in a root thread. These are comparable to traditional loop parallelism, and present a very different scheduling challenge compared to recursively nested parallel programs. Therefore, a few of these cases are included in INNCABS.
    Benchmarks: Alignment, Health, SparseLU
  3. Co-dependent task parallelism in this case refers to a sea of asynchronously spawned tasks, which depend on a set of mutexes shared by two or more participants. These benchmarks test the performance of the deadlock-free lock acquisition algorithm implemented in the std::lock function.
    Benchmarks: Intersim, Round
  4. GitHub Repository