Skip to content
This repository has been archived by the owner on Jul 24, 2022. It is now read-only.

Latest commit

 

History

History
21 lines (11 loc) · 1.63 KB

README.md

File metadata and controls

21 lines (11 loc) · 1.63 KB

Delta-Stepping

Parallel Delta-Stepping SSSP algorithm with the bucket fusion technique invented by Zhang et al. (CGO 2020). Implemented in C++, using OpenMP.

Disclaimer

The implementation in this repo is not stable! The algorithms might work for small graph samples, but CRASH under larger loads.

Algorithm overview

Delta-stepping is an algorithm originally suggested by Meyer et al. in 1998 as an alternative to Dijkstra's purely sequential approach to SSSP. The central idea is that of priority coarsening. That is, one can give up on strict ordering, without making the algorithm incorrect.

SSSP tries to calculate the distances of all nodes to a fixed source node. During Delta-stepping, to each node we attribute a ordering "category", instead of a fixed position. More concretely, each node is put in a bucket of width delta, according to its distance to the source node. For example, nodes with distance 0 to 1000 to the source node can all be placed in the bucket (read category) 0, if we take a delta of 1000.

This observation opens opportunity to parallelize the code. Specifically, we can work concurrently with different nodes of the same bucket. In practice, the algorithm can achieve significant speedups over Dijkstra's.

Compile instructions

To compile the code, just type make in the project's main directory. The executable file delta-stepping should be created in the folder build. From there, it should be intuitive how to run the algorithm.

The main implementation of the algorithm can be found in the file lib/main/appliance/Alg/delta-stepping.cpp.