# qingleicao/task-bench architecture

> Architecture diagram of the GitHub repository qingleicao/task-bench, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/qingleicao/task-bench
- Repository: https://github.com/qingleicao/task-bench

## Overview

Task Bench is a configurable benchmark for comparing task-based parallel and distributed runtimes. The workflow is to choose a runtime implementation and task-graph/kernel configuration, execute dependent tasks through that runtime, and report timing. The shared core supplies task-graph and kernel behavior; adapters express execution in each programming model. The README documents additional implementations and dependence patterns beyond the sampled excerpts, so those are represented as supported branches without inferring their internal wiring.

Main entry points: [`core/core.cc`](https://github.com/qingleicao/task-bench/blob/master/core/core.cc) (Task graph core), [`core/core_c.cc`](https://github.com/qingleicao/task-bench/blob/master/core/core_c.cc) (Core C API), [`legion/main.cc`](https://github.com/qingleicao/task-bench/blob/master/legion/main.cc) (Legion adapter), [`realm/main.cc`](https://github.com/qingleicao/task-bench/blob/master/realm/main.cc) (Realm adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Task and kernel core"]
  node_task_graph["Task graph core<br/>[core.cc]"]
  node_c_api["Core C API<br/>[core_c.cc]"]
  node_kernel["Kernel execution<br/>[core_kernel.cc]"]
end

subgraph group_adapters["Runtime implementations"]
  node_legion["Legion adapter<br/>[main.cc]"]
  node_realm["Realm adapter<br/>[main.cc]"]
  node_realm_sub["Realm subgraph<br/>[main.cc]"]
  node_openmp["OpenMP adapter<br/>[main.cc]"]
  node_ompss["OmpSs adapter<br/>[main.cc]"]
  node_parsec["PaRSEC adapter<br/>[main.cc]"]
  node_starpu["StarPU adapter<br/>[main.cc]"]
  node_charm["Charm++ adapter<br/>[main.C]"]
  node_mpi["MPI adapter"]
  node_dask["Dask adapter<br/>[task_bench.py]"]
  node_spark["Spark adapter<br/>[main.scala]"]
  node_tensorflow["TensorFlow adapter<br/>[task_bench.py]"]
end

subgraph group_special["Benchmark variants"]
  node_kernel_bench["Kernel benchmark<br/>[main.cc]"]
  node_blas_bench["BLAS benchmarks<br/>[mt_dgemm.cc]"]
end

node_user(("Benchmark user"))

node_user -->|"runs"| node_legion
node_user -->|"runs"| node_realm
node_user -->|"runs"| node_realm_sub
node_user -->|"runs"| node_openmp
node_user -->|"runs"| node_ompss
node_user -->|"runs"| node_parsec
node_user -->|"runs"| node_starpu
node_user -->|"runs"| node_charm
node_user -->|"runs"| node_mpi
node_user -->|"runs"| node_dask
node_user -->|"runs"| node_spark
node_user -->|"runs"| node_tensorflow
node_user -->|"runs"| node_kernel_bench
node_user -->|"runs"| node_blas_bench
node_legion -->|"executes points"| node_task_graph
node_realm -->|"executes points"| node_task_graph
node_realm_sub -->|"executes points"| node_task_graph
node_openmp -->|"executes points"| node_task_graph
node_ompss -->|"executes points"| node_task_graph
node_parsec -->|"executes points"| node_task_graph
node_starpu -->|"executes points"| node_task_graph
node_task_graph -->|"executes kernel"| node_kernel
node_kernel_bench -->|"executes graph"| node_task_graph
node_spark -->|"calls"| node_c_api
node_c_api -->|"accesses graph"| node_task_graph

click node_legion "https://github.com/qingleicao/task-bench/blob/master/legion/main.cc"
click node_realm "https://github.com/qingleicao/task-bench/blob/master/realm/main.cc"
click node_realm_sub "https://github.com/qingleicao/task-bench/blob/master/realm_subgraph/main.cc"
click node_openmp "https://github.com/qingleicao/task-bench/blob/master/openmp/main.cc"
click node_ompss "https://github.com/qingleicao/task-bench/blob/master/ompss/main.cc"
click node_parsec "https://github.com/qingleicao/task-bench/blob/master/parsec/main.cc"
click node_starpu "https://github.com/qingleicao/task-bench/blob/master/starpu/main.cc"
click node_charm "https://github.com/qingleicao/task-bench/blob/master/charm%2B%2B/main.C"
click node_mpi "https://github.com/qingleicao/task-bench/blob/master/mpi/bulk_synchronous.cc"
click node_dask "https://github.com/qingleicao/task-bench/blob/master/dask/task_bench.py"
click node_spark "https://github.com/qingleicao/task-bench/blob/master/spark/src/main/scala/main.scala"
click node_tensorflow "https://github.com/qingleicao/task-bench/blob/master/tensorflow/task_bench.py"
click node_task_graph "https://github.com/qingleicao/task-bench/blob/master/core/core.cc"
click node_c_api "https://github.com/qingleicao/task-bench/blob/master/core/core_c.cc"
click node_kernel "https://github.com/qingleicao/task-bench/blob/master/core/core_kernel.cc"
click node_kernel_bench "https://github.com/qingleicao/task-bench/blob/master/kernel_bench/main.cc"
click node_blas_bench "https://github.com/qingleicao/task-bench/blob/master/blas_bench/mt_dgemm.cc"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_task_graph,node_c_api,node_kernel,node_user toneBlue
class node_legion,node_realm,node_realm_sub,node_openmp,node_ompss,node_parsec,node_starpu,node_charm,node_mpi,node_dask,node_spark,node_tensorflow toneAmber
class node_kernel_bench,node_blas_bench toneMint
```

## Components

### Task and kernel core

- [Task graph core](https://github.com/qingleicao/task-bench/blob/master/core/core.cc): `core/core.cc`
- [Core C API](https://github.com/qingleicao/task-bench/blob/master/core/core_c.cc): `core/core_c.cc`
- [Kernel execution](https://github.com/qingleicao/task-bench/blob/master/core/core_kernel.cc): `core/core_kernel.cc`

### Runtime implementations

- [Legion adapter](https://github.com/qingleicao/task-bench/blob/master/legion/main.cc): `legion/main.cc`
- [Realm adapter](https://github.com/qingleicao/task-bench/blob/master/realm/main.cc): `realm/main.cc`
- [Realm subgraph](https://github.com/qingleicao/task-bench/blob/master/realm_subgraph/main.cc): `realm_subgraph/main.cc`
- [OpenMP adapter](https://github.com/qingleicao/task-bench/blob/master/openmp/main.cc): `openmp/main.cc`
- [OmpSs adapter](https://github.com/qingleicao/task-bench/blob/master/ompss/main.cc): `ompss/main.cc`
- [PaRSEC adapter](https://github.com/qingleicao/task-bench/blob/master/parsec/main.cc): `parsec/main.cc`
- [StarPU adapter](https://github.com/qingleicao/task-bench/blob/master/starpu/main.cc): `starpu/main.cc`
- [Charm++ adapter](https://github.com/qingleicao/task-bench/blob/master/charm%2B%2B/main.C): `charm++/main.C`
- [MPI adapter](https://github.com/qingleicao/task-bench/blob/master/mpi/bulk_synchronous.cc): `mpi/bulk_synchronous.cc`
- [Dask adapter](https://github.com/qingleicao/task-bench/blob/master/dask/task_bench.py): `dask/task_bench.py`
- [Spark adapter](https://github.com/qingleicao/task-bench/blob/master/spark/src/main/scala/main.scala): `spark/src/main/scala/main.scala`
- [TensorFlow adapter](https://github.com/qingleicao/task-bench/blob/master/tensorflow/task_bench.py): `tensorflow/task_bench.py`

### Benchmark variants

- [Kernel benchmark](https://github.com/qingleicao/task-bench/blob/master/kernel_bench/main.cc): `kernel_bench/main.cc`
- [BLAS benchmarks](https://github.com/qingleicao/task-bench/blob/master/blas_bench/mt_dgemm.cc): `blas_bench/mt_dgemm.cc`

### Other components

- **Benchmark user**

## Connections

- Benchmark user → Legion adapter: runs
- Benchmark user → Realm adapter: runs
- Benchmark user → Realm subgraph: runs
- Benchmark user → OpenMP adapter: runs
- Benchmark user → OmpSs adapter: runs
- Benchmark user → PaRSEC adapter: runs
- Benchmark user → StarPU adapter: runs
- Benchmark user → Charm++ adapter: runs
- Benchmark user → MPI adapter: runs
- Benchmark user → Dask adapter: runs
- Benchmark user → Spark adapter: runs
- Benchmark user → TensorFlow adapter: runs
- Benchmark user → Kernel benchmark: runs
- Benchmark user → BLAS benchmarks: runs
- Legion adapter → Task graph core: executes points
- Realm adapter → Task graph core: executes points
- Realm subgraph → Task graph core: executes points
- OpenMP adapter → Task graph core: executes points
- OmpSs adapter → Task graph core: executes points
- PaRSEC adapter → Task graph core: executes points
- StarPU adapter → Task graph core: executes points
- Task graph core → Kernel execution: executes kernel
- Kernel benchmark → Task graph core: executes graph
- Spark adapter → Core C API: calls
- Core C API → Task graph core: accesses graph
