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:
- 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
- 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
Benchmarks: Alignment, Health, SparseLU
- 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