NI-ORCA is a high-performance C++17 library for counting the orbits of non-induced graphlets (up to size 4) in large undirected graphs. It provides multiple parallel implementations using OpenMP with configurable thread scheduling and data structures for benchmarking and research use.
- Supports multiple execution modes:
FHM_VERTEX,UOM_VERTEX,ARR_VERTEX– Vertex-parallel using different backendsFHM_THREAD,UOM_THREAD,ARR_THREAD– Thread-private accumulators with reductionNIORCA– Mixed parallelism optimized for large graphsSEQ- Sequential code
- Configurable OpenMP scheduling (
static,dynamic,guided) at runtime - Thread pinning and binding for NUMA-aware performance tuning
- Input format: DIMACS
.graphformat - Output: 15-dimensional orbit counts per node
git clone https://hpdc-gitlab.eeecs.qub.ac.uk/sitauhidi/niorca.git
cd niorca
make./build/niorca [MODE] [INPUT_FILE] [OUTPUT_FILE]All graphs should be in .graph format:
t N M
v 0 1 2
v 1 2 1
...
e 0 1
e 1 2
...
t N M: number of nodesNand edgesMv ID Label Degree: vertex ID, label (label is required), degree (optional)e u v: edge between vertexuandv
./build/niorca FHM_VERTEX datasets/dblp.graph output.txtexport OMP_NUM_THREADS=8
export OMP_SCHEDULE="dynamic"
export OMP_PROC_BIND=true
export OMP_PLACES=coresA sample benchmarking script is provided:
cd scripts/
./runner.shThis script runs all parallel modes across multiple datasets, thread counts, and OpenMP schedulers, printing results directly to the terminal.