<?xml-model href='http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng' schematypens='http://relaxng.org/ns/structure/1.0'?><TEI xmlns="http://www.tei-c.org/ns/1.0">
	<teiHeader>
		<fileDesc>
			<titleStmt><title level='a'>Adaptive Optimizations for Parallel Single-Source Shortest Paths</title></titleStmt>
			<publicationStmt>
				<publisher>ACM</publisher>
				<date>03/01/2025</date>
			</publicationStmt>
			<sourceDesc>
				<bibl> 
					<idno type="par_id">10614557</idno>
					<idno type="doi">10.1145/3711708.3723450</idno>
					
					<author>Runbang Hu</author><author>Chaoqun Li</author><author>Xiaojiang Du</author><author>Yuede Ji</author>
				</bibl>
			</sourceDesc>
		</fileDesc>
		<profileDesc>
			<abstract><ab><![CDATA[The single-source shortest path (SSSP) problem is essential in graph theory with applications in navigation, biology, socialnetworks, and traffic analysis. The -Stepping algorithm enhances parallelism by grouping vertices into "buckets" basedon their tentative distances. However, its performance depends on values and graph properties. This paper introducesan adaptive parallel Delta-Stepping implementation with three innovations: neighbor reordering, bucket fusion, andgraph type-aware selection. Tested on 11 diverse graphs, it achieves an average 7.1× speedup over serial Dijkstra’salgorithm on a 48-thread CPU server.]]></ab></abstract>
		</profileDesc>
	</teiHeader>
	<text><body xmlns="http://www.tei-c.org/ns/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink">
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Introduction</head><p>The single-source shortest path (SSSP) problem is a fundamental problem in graph theory with applications in navigation <ref type="bibr">[26,</ref><ref type="bibr">28]</ref>, social network analysis <ref type="bibr">[5,</ref><ref type="bibr">9,</ref><ref type="bibr">13,</ref><ref type="bibr">17,</ref><ref type="bibr">18,</ref><ref type="bibr">24]</ref>, traffic analysis <ref type="bibr">[25]</ref>, cybersecurity applications <ref type="bibr">[6,</ref><ref type="bibr">12,</ref><ref type="bibr">15,</ref><ref type="bibr">16]</ref>, and computing other graph algorithms <ref type="bibr">[10]</ref>.</p><p>Dijkstra's algorithm is a classic algorithm for finding SSSP on non-negative weighted regular graphs, while its sequential priority queue operations limit parallelism <ref type="bibr">[7,</ref><ref type="bibr">14,</ref><ref type="bibr">29]</ref>. To address that, the -Stepping algorithm groups vertices into "buckets" based on tentative distances, enabling parallel processing. However, its performance depends on values and graph properties, such as diameter, weight distribution, and sparsity. While previous optimizations exist for specific graphs <ref type="bibr">[3,</ref><ref type="bibr">8]</ref>, an adaptive approach remains an open challenge <ref type="bibr">[22,</ref><ref type="bibr">31]</ref>. This paper presents an adaptive parallel -Stepping implementation that integrates graph-specific preprocessing and dynamic strategy selection. There are three key innovations. (i) Neighbor reordering reorganizes edges based on their weights and classifies graphs by properties such as diameter and density to improve selection. (ii) Bucket fusion reduces synchronization overhead by combining consecutive processing rounds for the same bucket. It will relax the current bucket repeatedly until no new insertions occur. (iii) Adaptively optimizations adaptively switches between standard -Stepping, and bucket fusion. This can optimize the trade-off between parallelism and synchronization.</p><p>We evaluated our method on 11 diverse graphs, achieving an average 7.1&#8677; speedup over serial Dijkstra's algorithm on a 48-thread system, with more than 12&#8677; speedup for dense, and small-diameter graphs.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">Background and Challenge</head><p>To improve the performance of serial SSSP implementations, parallel approaches have been proposed, such as Bellman-Ford <ref type="bibr">[11]</ref> and -Stepping <ref type="bibr">[27]</ref>.</p><p>-Stepping improves efficiency by reducing redundant computations in parallel Bellman-Ford while balancing parallelism and synchronization overhead. It groups vertices into buckets based on their tentative distances and processes them in two stages: first relaxing light edges (&#63743; ) in parallel, followed by handling heavy edges (&gt; ). This design maximizes concurrency for small-weight edges while minimizing excessive fragmentation and synchronization, making -Stepping highly effective for favorable graph structures.</p><p>Selection of value. The bucket size directly impacts performance. A small increases parallelism but raises synchronization costs, while a large reduces synchronization but may over-group vertices, limiting efficiency. Finding the optimal across different graph types remains challenging.</p><p>Workload imbalance is another challenge in parallel SSSP algorithms. Sparse graphs may lead to underutilization of resources due to mostly empty buckets, while dense graphs with uniform edge weights require careful dependency management to prevent bottlenecks. Existing solutions, such as bucket fusion (which consolidates adjacent buckets to reduce synchronization) and dynamic tuning, help mitigate these issues. However, these techniques often require manual tuning and are not universally effective across all graph types.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Methodology</head><p>Our method is based on -Stepping algorithm by creating parallel regions to reduce repeated thread allocation overhead. First, we implement a hybrid bucket architecture combining thread-local storage with synchronized global coordination, where each thread independently manages its bucket for tentative distance updates, minimizing communication between threads during light edge relaxation. After processing the light edges, each thread handles heavy edges once. Periodically, the threads atomically commit their local minimum bucket index to a shared global bucket, consolidating related vertices, and processing them in parallel. In addition, we apply three optimizations as discussed below, including neighbor reordering, bucket fusion, and adaptive optimizations.</p><p>Neighbor Reordering. The -Stepping algorithm requires separating light and heavy edges, which can be done in three ways: (i) scanning edges at runtime, (ii) using a status array of size |&#8674;| to mark edge types, (iii) maintaining separate queues for light and heavy edges. However, these approaches have drawbacks: redundant computation (i, ii), extra memory usage (ii, iii), and poor cache utilization (iii). To address these issues, we introduce neighbor reordering. Particularly, we reorder each vertex's adjacency list in ascending weight order and use an additional offset array with the size of |+ | (&gt; Bucket Fusion. A single bucket often requires multiple processing rounds to relax the bucket, updating tentative distances, and reinserting vertices until no new insertions occur. This repeated reprocessing introduces significant overhead. To mitigate this, we apply bucket fusion, which combines consecutive processing rounds within the same bucket. By allowing threads to continue execution without frequent global barriers, this technique substantially lowers synchronization costs. We introduce a threshold-based approach (e.g., 1,000 vertices) to optimize workload distribution: If a bucket has a small workload, the owning thread processes it immediately. Otherwise, it is passed to a global bucket for shared processing. This strategy prevents straggler overload and ensures efficient workload balancing.</p><p>Adaptive Optimizations. Real-world graphs vary widely in structure, including sparse vs. dense, real vs. uniform weights, and small vs. large diameters. To optimize -Stepping across different graphs, we introduce adaptive strategies.</p><p>value is crucial for balancing parallelism and redundant computation in the -Stepping algorithm. It determines the granularity of buckets, influencing synchronization costs and workload distribution. We define as: = (&lt;0G_F486&#8984;C Small graphs are special as the dominant cost may shift from computation to thread management and synchronization overhead, making multi-threading less efficient than a serial approach. In such cases, we switch to serial -Stepping with a small value to optimize performance. A graph is classified as small if its Compressed Sparse Row (CSR) <ref type="bibr">[4]</ref> representation fits within the L1 cache, ensuring efficient memory access. CSR is a graph representation that is widely used in graph analytics <ref type="bibr">[10,</ref><ref type="bibr">[19]</ref><ref type="bibr">[20]</ref><ref type="bibr">[21]</ref><ref type="bibr">23]</ref>. Given a 32 KB L1 cache, and assuming Unsigned integer for the begin position and adjacency list arrays, and Single-precision floating point for edge weights, this condition is expressed as</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">Experiment</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.1">Overall benchmark</head><p>Table <ref type="table">1</ref> summarizes the details of the tested graph benchmark. We evaluate our method on the graph benchmarks and compare against a baseline algorithm, i.e., the priority queuebased Dijkstra's algorithm. We use a CPU instance with 48 threads and 96 GB memory on the Speedcode platform <ref type="bibr">[30]</ref>.</p><p>Table <ref type="table">2</ref> summarizes the results. (i) On average, our method achieves 7.1&#8677; speedup over the Dijkstra's algorithm, which is a significant improvement. (ii) For most graphs, our parallel -Stepping algorithm significantly outperforms the Dijkstra's algorithm. (iii) Our method underperforms on three graphs  (CN, SN, and KG), which illustrates that parallelism does not always guarantee performance gains. Additionally, the lack of a clear boundary between graph categories can occasionally lead to suboptimal strategy selection.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.2">Benefits of Specific Techniques</head><p>Neighbor reordering. Figure <ref type="figure">1</ref> shows the performance in terms of million edges per second with and without neighbor reordering. We have two interesting observations. (i) On average, neighbor reordering can improve the performance by 1.4&#8677; speedup on all the graphs, showing a stable performance improvement. (ii) Neighbor reordering achieves the highest speedup for WG and SD graphs, which are 2.3&#8677;, 2.4&#8677;, respectively. This clearly shows the benefits of neighbor reordering.</p><p>Bucket fusion. Figure <ref type="figure">2</ref> shows the performance of Dijkstra's algorithm, original (without bucket fusion), and with bucket fusion. We show the performance for three representative graphs, including a sparse graph (SN), a dense graph (KG), and an extremely dense graph (CN). We observe that it has varying effects based on graph properties. In sparse graphs (e.g., SN), it lowers synchronization overhead and improves performance. However, in dense graphs (e.g., KG), fusion causes workload imbalance, as profiling shows a single thread often dominates fusion operations, leaving others idle. This workload imbalance arises from non-uniform bucket sizes, where frequent fusion is unevenly distributed. Small graph. Figure <ref type="figure">3</ref> shows the performance on small graphs. The serial -Stepping algorithm demonstrates superior performance, as the overhead associated with thread  management in parallel -Stepping outweighs its parallelization benefits. When the number of vertices is less than 2K, serial -Stepping achieves a 1.5 2&#8677; speedup over the parallel implementation. However, as the graph size increases, the parallel algorithm gradually surpasses the serial version, while the efficiency of the serial approach declines, eventually converging to the performance of Dijkstra's algorithm. When the graph reaches 10K vertices, the parallel method achieves a 1.7&#8677; speedup over the serial approach.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5">Related Work and Conclusion</head><p>Improvements of -Stepping <ref type="bibr">[27]</ref> have focused on tuning to graph properties and optimizing buckets <ref type="bibr">[32]</ref> (e.g., fusion and priority-aware splitting) to reduce synchronization overhead. While merging underpopulated buckets improves performance in road networks, it can cause load imbalance in dense graphs <ref type="bibr">[1,</ref><ref type="bibr">2,</ref><ref type="bibr">33]</ref>. Preprocessing, such as edge sorting, helps reduce redundant relaxations but often relies on static heuristics that overlook graph heterogeneity.</p><p>This paper presents an adaptive parallel -Stepping implementation that integrates three key innovations, including neighbor reordering, bucket fusion, and adaptive optimization. We test our method on 11 diverse graphs in terms of size, diameter, density, and edge weight variance. On a CPU server with 48 threads, our method achieves an average of 7.1&#8677; speedup over the serial Dijkstra's algorithm.</p></div></body>
		</text>
</TEI>
