Table of Contents
Fetching ...

Performance Comparison of Graph Representations Which Support Dynamic Graph Updates

Subhajit Sahu

TL;DR

The paper tackles the performance challenges of dynamic graph processing, where frequent edge and vertex updates demand memory-efficient, scalable representations. It introduces DiGraph, a directed graph implementation powered by the Concurrent Power-of-2 Arena Allocator (CP2AA) and a Struct-of-Arrays layout with contiguous edge storage, enabling fast batched updates and efficient traversal. Through extensive experiments across 12 large, real-world graphs, DiGraph shows substantial speedups over PetGraph, SNAP, GraphBLAS, cuGraph, and Aspen for loading, cloning, deletions, insertions, and k-step reverse walks, while also leveraging lazy copying and snapshotting advantages in competing systems. The findings demonstrate significant potential for scalable dynamic graph workloads and highlight practical trade-offs between in-place updates and graph-versioning approaches, with future work focusing on optimizing small-batch updates.

Abstract

Research in graph-structured data has grown rapidly due to graphs' ability to represent complex real-world information and capture intricate relationships, particularly as many real-world graphs evolve dynamically through edge/vertex insertions and deletions. This has spurred interest in programming frameworks for managing, maintaining, and processing such dynamic graphs. In this report, we evaluate the performance of PetGraph (Rust), Stanford Network Analysis Platform (SNAP), SuiteSparse:GraphBLAS, cuGraph, Aspen, and our custom implementation in tasks including loading graphs from disk to memory, cloning loaded graphs, applying in-place edge deletions/insertions, and performing a simple iterative graph traversal algorithm. Our implementation demonstrates significant performance improvements: it outperforms PetGraph, SNAP, SuiteSparse:GraphBLAS, cuGraph, and Aspen by factors of 177x, 106x, 76x, 17x, and 3.3x in graph loading; 20x, 235x, 0.24x, 1.3x, and 0x in graph cloning; 141x/45x, 44x/25x, 13x/11x, 28x/34x, and 3.5x/2.2x in edge deletions/insertions; and 67x/63x, 86x/86x, 2.5x/2.6x, 0.25x/0.24x, and 1.3x/1.3x in traversal on updated graphs with deletions/insertions.

Performance Comparison of Graph Representations Which Support Dynamic Graph Updates

TL;DR

The paper tackles the performance challenges of dynamic graph processing, where frequent edge and vertex updates demand memory-efficient, scalable representations. It introduces DiGraph, a directed graph implementation powered by the Concurrent Power-of-2 Arena Allocator (CP2AA) and a Struct-of-Arrays layout with contiguous edge storage, enabling fast batched updates and efficient traversal. Through extensive experiments across 12 large, real-world graphs, DiGraph shows substantial speedups over PetGraph, SNAP, GraphBLAS, cuGraph, and Aspen for loading, cloning, deletions, insertions, and k-step reverse walks, while also leveraging lazy copying and snapshotting advantages in competing systems. The findings demonstrate significant potential for scalable dynamic graph workloads and highlight practical trade-offs between in-place updates and graph-versioning approaches, with future work focusing on optimizing small-batch updates.

Abstract

Research in graph-structured data has grown rapidly due to graphs' ability to represent complex real-world information and capture intricate relationships, particularly as many real-world graphs evolve dynamically through edge/vertex insertions and deletions. This has spurred interest in programming frameworks for managing, maintaining, and processing such dynamic graphs. In this report, we evaluate the performance of PetGraph (Rust), Stanford Network Analysis Platform (SNAP), SuiteSparse:GraphBLAS, cuGraph, Aspen, and our custom implementation in tasks including loading graphs from disk to memory, cloning loaded graphs, applying in-place edge deletions/insertions, and performing a simple iterative graph traversal algorithm. Our implementation demonstrates significant performance improvements: it outperforms PetGraph, SNAP, SuiteSparse:GraphBLAS, cuGraph, and Aspen by factors of 177x, 106x, 76x, 17x, and 3.3x in graph loading; 20x, 235x, 0.24x, 1.3x, and 0x in graph cloning; 141x/45x, 44x/25x, 13x/11x, 28x/34x, and 3.5x/2.2x in edge deletions/insertions; and 67x/63x, 86x/86x, 2.5x/2.6x, 0.25x/0.24x, and 1.3x/1.3x in traversal on updated graphs with deletions/insertions.

Paper Structure

This paper contains 28 sections, 11 figures, 1 table, 13 algorithms.

Figures (11)

  • Figure 1: Runtime split, in seconds, for cloning a graph based on a vector2d representation is shown for each graph in Table \ref{['tab:dataset']}. As illustrated, an average of $74\%$ of the total runtime is spent on memory allocation for the edges.
  • Figure 2: Runtime in seconds (logarithmic scale) and speedup (logarithmic scale) for loading a graph from file into memory with PetGraph, SNAP, SuiteSparse:GraphBLAS, cuGraph, Aspen, and Our DiGraph for each graph in the dataset.
  • Figure 3: Runtime in seconds (logarithmic scale) and speedup (logarithmic scale) for cloning a graph with PetGraph, SNAP, SuiteSparse:GraphBLAS, cuGraph, Aspen, and Our DiGraph for each graph in the dataset.
  • Figure 4: Runtime split for loading a graph from an MTX file into a CSR representation using Algorithm \ref{['alg:load']} is shown on the left, while the runtime split for cloning a CSR graph into Our DiGraph using Algorithm \ref{['alg:clone']} is on the right. The cloning of Our DiGraph into another one has a similar runtime split.
  • Figure 5: Runtime in milliseconds (logarithmic scale) of deleting a batch of $10^{-7}|E|$ to $0.1|E|$ randomly generated edges into a graph (in-place), in multiples of $10$. Here, we evaluate PetGraph, SNAP, SuiteSparse:GraphBLAS, cuGraph, Aspen, and Our DiGraph on each graph in the dataset. The left subfigure presents overall runtimes using the geometric mean for consistent scaling, while the right subfigure shows runtimes for individual graphs.
  • ...and 6 more figures