Cytoscape.js GPU benchmarks

v4 (src/) vs v3 (v3/src/) · Mitata · times are per-iteration p50 · 2026-08-09 23:08 · 6df994f1 (v4) · Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz · node v24.18.0 · quick profile

Machine and provenance
CPUIntel(R) Core(TM) i9-9900K CPU @ 3.60GHz
Cores8 physical / 16 logical · 3.6 GHz base · 5 GHz max
Memory62.6 GiB
GPUCoffeeLake-S GT2 [UHD Graphics 630] i915
Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (8.0 GiB) amdgpu
OSFedora Linux 43 (Workstation Edition) · 6.19.14-200.fc43.x86_64 · x64
Nodev24.18.0 (v8 13.6.233.17-node.50)
Commit6df994f1
docs(src): two comments caught by the round-61 sweep name the new wiring
Machine id5cf3f79c
Median speedup (geo-mean) 13× 106 v3-vs-gpu comparisons
Biggest win 22890× core: edges() @ N=2k
v3 still ahead 12 comparisons
Total run time 7.1 min quick profile

Speedup overview v3 p50 ÷ gpu p50, log scale · right of the 1× line = gpu faster

core: edges() @ 2k
22890×
core: elements() @ 2k
18077×
sweep: nodes() @ 2k
15775×
sweep: edges() @ 2k
10555×
compare: same() @ 2k
9429×
core: nodes() @ 2k
5204×
sweep: elements() @ 2k
1996×
trav: successors() @ 2k
804×
trav: predecessors() @ 2k
763×
mut-bulk: hide + show @ 2k
276×
degree: nodes.totalDegree() @ 2k
175×
degree: node.degree() @ 2k
139×
degree: nodes.maxDegree() @ 2k
137×
mut-bulk: positions(obj) @ 2k
122×
mut-bulk: shift @ 2k
112×
mut-bulk: positions(fn) @ 2k
93×
sweep: nodes(":selected") vs nodes({selected}) @ 2k
63×
algo: closenessCentrality (one root) @ 2k
50×
algo: dfs (whole graph) @ 2k
49×
algo: bfs (whole graph) @ 500
45×
algo: dijkstra + pathTo @ 2k
43×
mut-bulk: lock + unlock @ 2k
43×
algo: dfs (whole graph) @ 500
43×
traverse: components() @ 2k
42×
algo: bfs (whole graph) @ 2k
42×
algo: dijkstra + pathTo @ 500
40×
algo: closenessCentrality (one root) @ 500
40×
sweep: selected nodes ($("node:selected") vs filter({group, selected})) @ 2k
38×
algo: closenessCentrality (weighted, one root) @ 500
36×
core: id lookup ($("#id") vs $id()) @ 2k
29×
set: difference() @ 2k
28×
set: intersection() @ 2k
27×
scn: select-all + fit (listeners on) @ 2k
26×
mut: position set @ 2k
24×
algo: hopcroft-tarjan biconnected @ 2k
24×
trav: band roots() @ 2k
23×
algo: hopcroft-tarjan biconnected @ 500
23×
algo: tarjan SCC @ 2k
23×
algo: tarjan SCC @ 500
23×
algo: degreeCentralityNormalized @ 500
22×
algo: degreeCentralityNormalized @ 2k
22×
algo: bellmanFord @ 2k
19×
core: add + remove @ 2k
18×
algo: kruskal @ 2k
17×
algo: bellmanFord @ 500
16×
algo: kruskal @ 500
16×
scn: drag (select band of 100 + 8-step shift, position listener) @ 2k
16×
core: selected ($(":selected") vs filter({selected})) @ 2k
14×
sweep: selected ($(":selected") vs filter({selected})) @ 2k
14×
mut-bulk: data set @ 2k
13×
algo: betweennessCentrality (unweighted) @ 500
12×
algo: betweennessCentrality (unweighted) @ 2k
12×
algo: betweennessCentrality (weighted) @ 500
9.3×
scn: explore (expand 2-hop + select + fit) @ 2k
8.2×
core: collection() @ 2k
8.1×
mut-bulk: select + unselect @ 2k
8.0×
core: nodes ($("node") vs filter({group})) @ 2k
7.7×
sweep: all nodes ($("node") vs filter({group})) @ 2k
7.1×
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners) @ 2k
7.0×
mut-bulk: remove + re-add (256 nodes + cascade) @ 2k
6.6×
trav: outgoers() @ 2k
5.9×
set: union() @ 2k
5.6×
trav: incomers() @ 2k
5.6×
traverse: outgoers() @ 2k
5.5×
traverse: incomers() @ 2k
5.5×
trav: band neighborhood() @ 2k
5.3×
compare: contains() @ 2k
4.9×
algo: hierholzer (directed) @ 500
4.6×
traverse: neighborhood() @ 2k
4.4×
trav: neighborhood() @ 2k
4.3×
mut: select + unselect @ 2k
4.1×
trav: closedNeighborhood() @ 2k
2.9×
algo: hierholzer (directed) @ 2k
2.8×
trav: band connectedNodes() @ 2k
2.7×
iter: map() @ 2k
2.6×
trav: connectedEdges() @ 2k
2.4×
traverse: connectedEdges() @ 2k
2.2×
algo: aStar @ 500
2.2×
iter: filter(fn) @ 2k
2.2×
algo: aStar @ 2k
2.1×
algo: affinityPropagation @ 500
1.84×
core: zoom set @ 2k
1.81×
algo: pageRank (20 iters) @ 500
1.79×
scn: refresh (bulk data write + mapped labels + filter + fit, data listener) @ 2k
1.73×
sweep: filter(fn) @ 2k
1.71×
core: filter(fn) @ 2k
1.61×
trav: band sources() @ 2k
1.46×
algo: markovClustering @ 500
1.41×
data: get @ 2k
1.11×
algo: kargerStein @ 500
1.05×
trav: band connectedEdges() @ 2k
1.05×
algo: fuzzyCMeans @ 500
1.05×
algo: kMeans (fixed centroids) @ 500
1.04×
core: extent() @ 2k
1.01×
iter: forEach() @ 2k
0.99×
algo: kMedoids @ 500
0.99×
algo: hierarchicalClustering (threshold) @ 500
0.95×
core: pan() get @ 2k
0.92×
position: get @ 2k
0.92×
json: element @ 2k
0.88×
algo: floydWarshall @ 500
0.85×
algo: closenessCentralityNormalized @ 500
0.85×
core: getElementById() @ 2k
0.80×
mut: data set @ 2k
0.58×
algo: degreeCentrality (one root) @ 500
0.11×
algo: degreeCentrality (one root) @ 2k
0.03×
0.01×0.1×10×100×1000×10000×100000×

Scaling speedup vs graph size

algorithms

group× @ N=500× @ N=2k
algo: bfs (whole graph)45×42×
algo: dfs (whole graph)43×49×
algo: dijkstra + pathTo40×43×
algo: aStar2.2×2.1×
algo: bellmanFord16×19×
algo: kruskal16×17×
algo: tarjan SCC23×23×
algo: hopcroft-tarjan biconnected23×24×
algo: hierholzer (directed)4.6×2.8×
algo: betweennessCentrality (unweighted)12×12×
algo: degreeCentralityNormalized22×22×
algo: closenessCentrality (one root)40×50×
algo: degreeCentrality (one root)0.11×0.03×
algo: pageRank (20 iters)1.79×
algo: closenessCentrality (weighted, one root)36×
algo: floydWarshall0.85×
algo: closenessCentralityNormalized0.85×
algo: markovClustering1.41×
algo: hierarchicalClustering (threshold)0.95×
algo: kMeans (fixed centroids)1.04×
algo: kMedoids0.99×
algo: fuzzyCMeans1.05×
algo: affinityPropagation1.84×
algo: kargerStein1.05×
algo: betweennessCentrality (weighted)9.3×

core+collection N=2,000 · 59.2 sv4 (gpu) v3

core: getElementById()
0.80×
core: id lookup ($("#id") vs $id())
29×
core: nodes()
5204×
core: edges()
22890×
core: elements()
18077×
core: nodes ($("node") vs filter({group}))
7.7×
core: selected ($(":selected") vs filter({selected}))
14×
core: filter(fn)
1.61×
core: collection()
8.1×
core: pan() get
0.92×
core: extent()
1.01×
core: add + remove
18×
core: zoom set
1.81×
traverse: neighborhood()
4.4×
traverse: connectedEdges()
2.2×
traverse: outgoers()
5.5×
traverse: incomers()
5.5×
traverse: components()
42×
degree: node.degree()
139×
degree: nodes.totalDegree()
175×
degree: nodes.maxDegree()
137×
data: get
1.11×
position: get
0.92×
json: element
0.88×
set: union()
5.6×
set: intersection()
27×
set: difference()
28×
iter: map()
2.6×
iter: forEach()
0.99×
iter: filter(fn)
2.2×
compare: same()
9429×
compare: contains()
4.9×
mut: data set
0.58×
mut: position set
24×
mut: select + unselect
4.1×
1 ns10 ns100 ns1 µs10 µs100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
core: getElementById()v3 73.5 ns76.7 ns 123 ns70.8 ns 2235
core: getElementById()gpu 92.1 ns97.4 ns 238 ns74.6 ns 1755
core: id lookup ($("#id") vs $id())v3 2.44 µs2.88 µs 7.29 µs2.27 µs 201957
core: id lookup ($("#id") vs $id())gpu 85.2 ns85.8 ns 162 ns70.6 ns 1950
core: nodes()v3 427 µs466 µs 932 µs412 µs 1496
core: nodes()gpu 82.0 ns92.8 ns 236 ns58.0 ns 1785260
core: edges()v3 732 µs772 µs 1.75 ms708 µs 903
core: edges()gpu 32.0 ns58.2 ns 158 ns27.0 ns 2227997
core: elements()v3 152 µs160 µs 357 µs147 µs 4338
core: elements()gpu 8.43 ns9.32 ns 17.8 ns7.94 ns 18224
core: nodes ($("node") vs filter({group}))v3 538 µs581 µs 1.38 ms522 µs 1200
core: nodes ($("node") vs filter({group}))gpu 69.8 µs81.4 µs 235 µs54.3 µs 8456
core: selected ($(":selected") vs filter({selected}))v3 354 µs373 µs 850 µs342 µs 1857
core: selected ($(":selected") vs filter({selected}))gpu 25.2 µs26.2 µs 26.2 µs24.9 µs 12
core: filter(fn)v3 424 µs443 µs 1.01 ms411 µs 1577
core: filter(fn)gpu 263 µs296 µs 745 µs256 µs 2340
core: collection()v3 464 ns580 ns 1.70 µs449 ns 287
core: collection()gpu 57.1 ns60.6 ns 114 ns55.8 ns 2689
core: pan() getv3 6.04 ns6.72 ns 16.0 ns5.86 ns 25172
core: pan() getgpu 6.57 ns7.26 ns 14.6 ns6.22 ns 23400
core: extent()v3 21.8 ns28.3 ns 81.7 ns20.7 ns 5932
core: extent()gpu 21.6 ns27.6 ns 92.7 ns20.6 ns 6045
core: add + removev3 124 µs129 µs 237 µs114 µs 5329
core: add + removegpu 6.99 µs8.05 µs 27.6 µs6.63 µs 80112
core: zoom setv3 1.22 µs1.26 µs 1.58 µs1.19 µs 131
core: zoom setgpu 671 ns694 ns 918 ns648 ns 235
traverse: neighborhood()v3 3.93 µs4.39 µs 6.49 µs3.60 µs 34
traverse: neighborhood()gpu 886 ns1.00 µs 2.04 µs854 ns 163
traverse: connectedEdges()v3 1.04 µs1.16 µs 2.24 µs1.01 µs 137
traverse: connectedEdges()gpu 468 ns567 ns 1.99 µs457 ns 286
traverse: outgoers()v3 2.43 µs2.65 µs 3.63 µs2.31 µs 58
traverse: outgoers()gpu 440 ns537 ns 2.04 µs434 ns 297
traverse: incomers()v3 2.47 µs2.68 µs 3.64 µs2.32 µs 58
traverse: incomers()gpu 453 ns550 ns 2.14 µs432 ns 292
traverse: components()v3 82.4 ms86.7 ms 91.5 ms76.6 ms 12
traverse: components()gpu 1.97 ms2.12 ms 3.42 ms1.90 ms 311
degree: node.degree()v3 3.36 µs3.72 µs 4.76 µs3.19 µs 42
degree: node.degree()gpu 24.1 ns25.9 ns 44.8 ns22.8 ns 6584
degree: nodes.totalDegree()v3 7.74 ms8.41 ms 13.8 ms6.90 ms 79
degree: nodes.totalDegree()gpu 44.3 µs49.8 µs 94.5 µs43.2 µs 13958
degree: nodes.maxDegree()v3 7.35 ms8.06 ms 11.3 ms6.84 ms 83
degree: nodes.maxDegree()gpu 53.8 µs55.4 µs 99.0 µs52.6 µs 12644
data: getv3 26.2 ns27.8 ns 55.4 ns25.5 ns 6144
data: getgpu 23.7 ns25.4 ns 45.6 ns22.9 ns 6681
position: getv3 23.9 ns25.4 ns 45.1 ns22.8 ns 6730
position: getgpu 26.1 ns29.8 ns 59.4 ns24.3 ns 5633
json: elementv3 293 ns396 ns 3.56 µs291 ns 422
json: elementgpu 332 ns390 ns 2.10 µs330 ns 417
set: union()v3 93.1 µs111 µs 202 µs90.9 µs 6077
set: union()gpu 16.7 µs17.2 µs 17.2 µs16.3 µs 12
set: intersection()v3 90.2 µs110 µs 212 µs87.1 µs 6233
set: intersection()gpu 3.38 µs3.43 µs 3.91 µs3.25 µs 43
set: difference()v3 90.2 µs106 µs 217 µs88.6 µs 6526
set: difference()gpu 3.28 µs3.36 µs 4.08 µs3.15 µs 45
iter: map()v3 25.2 µs27.5 µs 52.9 µs24.1 µs 25126
iter: map()gpu 9.70 µs9.78 µs 10.1 µs9.53 µs 13
iter: forEach()v3 3.48 µs3.70 µs 3.90 µs3.44 µs 36
iter: forEach()gpu 3.50 µs3.56 µs 3.76 µs3.42 µs 42
iter: filter(fn)v3 222 µs239 µs 555 µs217 µs 2928
iter: filter(fn)gpu 102 µs107 µs 249 µs97.9 µs 6511
compare: same()v3 118 µs124 µs 329 µs113 µs 5660
compare: same()gpu 12.5 ns13.3 ns 24.6 ns11.5 ns 12785
compare: contains()v3 6.17 µs6.42 µs 11.6 µs5.78 µs 104227
compare: contains()gpu 1.25 µs1.28 µs 1.44 µs1.24 µs 127
mut: data setv3 465 ns497 ns 737 ns449 ns 332
mut: data setgpu 803 ns829 ns 1.12 µs781 ns 197
mut: position setv3 1.25 µs1.29 µs 1.56 µs1.21 µs 127
mut: position setgpu 52.4 ns58.5 ns 113 ns51.0 ns 2899
mut: select + unselectv3 2.69 µs2.84 µs 3.59 µs2.53 µs 55
mut: select + unselectgpu 654 ns726 ns 1.55 µs595 ns 692869

materializers N=2,000 · 20.4 sv4 (gpu) v3

sweep: nodes()
15775×
sweep: edges()
10555×
sweep: elements()
1996×
sweep: all nodes ($("node") vs filter({group}))
7.1×
sweep: selected ($(":selected") vs filter({selected}))
14×
sweep: selected nodes ($("node:selected") vs filter({group, selected}))
38×
sweep: nodes(":selected") vs nodes({selected})
63×
sweep: filter(fn)
1.71×
10 ns100 ns1 µs10 µs100 µs1 ms
All stats (table view)
groupbenchp50avgp99minsamples
sweep: nodes()v3 473 µs492 µs 885 µs455 µs 1422
sweep: nodes()gpu 30.0 ns32.1 ns 69.0 ns28.0 ns 1769729
sweep: edges()v3 834 µs875 µs 1.75 ms783 µs 795
sweep: edges()gpu 79.0 ns82.7 ns 156 ns51.0 ns 1979386
sweep: elements()v3 158 µs168 µs 271 µs146 µs 4141
sweep: elements()gpu 79.0 ns82.0 ns 154 ns39.0 ns 2024257
sweep: all nodes ($("node") vs filter({group}))v3 570 µs594 µs 952 µs563 µs 1159
sweep: all nodes ($("node") vs filter({group}))gpu 80.3 µs79.0 µs 169 µs56.8 µs 8763
sweep: selected ($(":selected") vs filter({selected}))v3 364 µs384 µs 643 µs357 µs 1812
sweep: selected ($(":selected") vs filter({selected}))gpu 26.1 µs26.6 µs 27.7 µs25.7 µs 12
sweep: selected nodes ($("node:selected") vs filter({group, selected}))v3 345 µs357 µs 609 µs336 µs 1957
sweep: selected nodes ($("node:selected") vs filter({group, selected}))gpu 9.11 µs9.20 µs 9.52 µs8.95 µs 15
sweep: nodes(":selected") vs nodes({selected})v3 580 µs625 µs 1.04 ms571 µs 1118
sweep: nodes(":selected") vs nodes({selected})gpu 9.21 µs9.30 µs 9.98 µs8.96 µs 15
sweep: filter(fn)v3 455 µs475 µs 828 µs449 µs 1474
sweep: filter(fn)gpu 266 µs282 µs 560 µs261 µs 2459

mutators N=2,000 · 18.5 sv4 (gpu) v3

mut-bulk: select + unselect
8.0×
mut-bulk: hide + show
276×
mut-bulk: lock + unlock
43×
mut-bulk: positions(obj)
122×
mut-bulk: positions(fn)
93×
mut-bulk: shift
112×
mut-bulk: data set
13×
mut-bulk: remove + re-add (256 nodes + cascade)
6.6×
10 µs100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
mut-bulk: select + unselectv3 1.86 ms1.93 ms 3.16 ms1.78 ms 342
mut-bulk: select + unselectgpu 231 µs240 µs 403 µs223 µs 2923
mut-bulk: hide + showv3 60.3 ms65.9 ms 72.9 ms57.4 ms 12
mut-bulk: hide + showgpu 218 µs234 µs 758 µs211 µs 2942
mut-bulk: lock + unlockv3 2.12 ms2.24 ms 3.73 ms2.01 ms 301
mut-bulk: lock + unlockgpu 49.2 µs49.8 µs 49.7 µs48.0 µs 12
mut-bulk: positions(obj)v3 2.20 ms2.28 ms 3.66 ms2.16 ms 301
mut-bulk: positions(obj)gpu 18.1 µs19.4 µs 41.4 µs16.4 µs 35428
mut-bulk: positions(fn)v3 3.27 ms3.41 ms 4.97 ms3.16 ms 196
mut-bulk: positions(fn)gpu 35.0 µs38.6 µs 96.8 µs33.0 µs 17781
mut-bulk: shiftv3 3.37 ms3.53 ms 4.80 ms3.27 ms 191
mut-bulk: shiftgpu 30.2 µs32.2 µs 58.8 µs29.1 µs 21573
mut-bulk: data setv3 843 µs874 µs 1.50 ms821 µs 794
mut-bulk: data setgpu 63.2 µs66.2 µs 157 µs61.2 µs 10485
mut-bulk: remove + re-add (256 nodes + cascade)v3 42.3 ms45.6 ms 56.4 ms39.7 ms 11
mut-bulk: remove + re-add (256 nodes + cascade)gpu 6.43 ms6.57 ms 7.88 ms5.86 ms 98

scenarios N=2,000 · 12.7 sv4 (gpu) v3

scn: explore (expand 2-hop + select + fit)
8.2×
scn: select-all + fit (listeners on)
26×
scn: drag (select band of 100 + 8-step shift, position listener)
16×
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners)
7.0×
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)
1.73×
10 µs100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
scn: explore (expand 2-hop + select + fit)v3 315 µs365 µs 1.00 ms283 µs 1906
scn: explore (expand 2-hop + select + fit)gpu 38.3 µs43.4 µs 186 µs34.7 µs 15723
scn: select-all + fit (listeners on)v3 24.9 ms24.9 ms 26.5 ms23.2 ms 23
scn: select-all + fit (listeners on)gpu 958 µs1.01 ms 1.65 ms905 µs 674
scn: drag (select band of 100 + 8-step shift, position listener)v3 1.60 ms1.65 ms 2.18 ms1.56 ms 409
scn: drag (select band of 100 + 8-step shift, position listener)gpu 103 µs109 µs 338 µs98.6 µs 6365
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners)v3 49.0 ms49.7 ms 51.4 ms47.6 ms 10
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners)gpu 6.98 ms7.18 ms 8.14 ms6.31 ms 92
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)v3 7.51 ms8.11 ms 13.6 ms7.06 ms 80
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)gpu 4.35 ms4.55 ms 7.36 ms3.81 ms 141

traversal N=2,000 · 32.7 sv4 (gpu) v3

trav: neighborhood()
4.3×
trav: closedNeighborhood()
2.9×
trav: connectedEdges()
2.4×
trav: outgoers()
5.9×
trav: incomers()
5.6×
trav: successors()
804×
trav: predecessors()
763×
trav: band neighborhood()
5.3×
trav: band connectedEdges()
1.05×
trav: band roots()
23×
trav: band sources()
1.46×
trav: band connectedNodes()
2.7×
100 ns1 µs10 µs100 µs1 ms10 ms100 ms1 s
All stats (table view)
groupbenchp50avgp99minsamples
trav: neighborhood()v3 4.04 µs4.17 µs 5.76 µs3.48 µs 37
trav: neighborhood()gpu 932 ns920 ns 1.22 µs770 ns 178
trav: closedNeighborhood()v3 5.89 µs5.82 µs 6.31 µs5.29 µs 26
trav: closedNeighborhood()gpu 2.01 µs2.11 µs 2.49 µs1.98 µs 76
trav: connectedEdges()v3 1.06 µs1.14 µs 1.85 µs1.04 µs 147
trav: connectedEdges()gpu 437 ns448 ns 695 ns426 ns 368
trav: outgoers()v3 2.42 µs2.55 µs 3.12 µs2.33 µs 62
trav: outgoers()gpu 408 ns422 ns 688 ns405 ns 392
trav: incomers()v3 2.42 µs2.60 µs 3.19 µs2.33 µs 61
trav: incomers()gpu 435 ns454 ns 740 ns420 ns 367
trav: successors()v3 438 ms441 ms 448 ms432 ms 12
trav: successors()gpu 545 µs578 µs 1.86 ms534 µs 1201
trav: predecessors()v3 436 ms438 ms 451 ms429 ms 12
trav: predecessors()gpu 571 µs603 µs 1.89 ms548 µs 1136
trav: band neighborhood()v3 187 µs199 µs 277 µs182 µs 3499
trav: band neighborhood()gpu 35.4 µs36.6 µs 63.0 µs33.9 µs 18937
trav: band connectedEdges()v3 24.3 µs24.5 µs 25.1 µs23.7 µs 12
trav: band connectedEdges()gpu 23.1 µs24.1 µs 26.3 µs22.9 µs 12
trav: band roots()v3 113 µs123 µs 227 µs108 µs 5660
trav: band roots()gpu 4.85 µs4.86 µs 5.15 µs4.73 µs 31
trav: band sources()v3 6.48 µs6.55 µs 7.01 µs6.27 µs 22
trav: band sources()gpu 4.43 µs4.67 µs 5.27 µs4.30 µs 32
trav: band connectedNodes()v3 13.7 µs13.8 µs 14.0 µs13.5 µs 9
trav: band connectedNodes()gpu 5.10 µs5.38 µs 6.22 µs4.97 µs 28

algorithms N=2,000 · 1.4 minv4 (gpu) v3

algo: bfs (whole graph)
42×
algo: dfs (whole graph)
49×
algo: dijkstra + pathTo
43×
algo: aStar
2.1×
algo: bellmanFord
19×
algo: kruskal
17×
algo: tarjan SCC
23×
algo: hopcroft-tarjan biconnected
24×
algo: hierholzer (directed)
2.8×
algo: betweennessCentrality (unweighted)
12×
algo: degreeCentralityNormalized
22×
algo: closenessCentrality (one root)
50×
algo: degreeCentrality (one root)
0.03×
1 µs10 µs100 µs1 ms10 ms100 ms1 s10 s
All stats (table view)
groupbenchp50avgp99minsamples
algo: bfs (whole graph)v3 51.1 ms53.4 ms 60.1 ms49.1 ms 9
algo: bfs (whole graph)gpu 1.22 ms1.26 ms 1.57 ms1.17 ms 540
algo: dfs (whole graph)v3 51.6 ms52.2 ms 54.1 ms49.9 ms 10
algo: dfs (whole graph)gpu 1.05 ms1.09 ms 1.47 ms1.02 ms 630
algo: dijkstra + pathTov3 52.5 ms52.8 ms 53.8 ms51.1 ms 10
algo: dijkstra + pathTogpu 1.21 ms1.23 ms 1.60 ms1.17 ms 550
algo: aStarv3 1.69 ms1.74 ms 2.55 ms1.64 ms 397
algo: aStargpu 789 µs802 µs 1.18 ms749 µs 870
algo: bellmanFordv3 227 ms229 ms 250 ms207 ms 12
algo: bellmanFordgpu 12.1 ms12.3 ms 13.8 ms11.9 ms 52
algo: kruskalv3 12.7 ms13.7 ms 16.5 ms12.3 ms 46
algo: kruskalgpu 750 µs791 µs 1.11 ms720 µs 861
algo: tarjan SCCv3 23.4 ms24.1 ms 26.6 ms21.5 ms 25
algo: tarjan SCCgpu 1.03 ms1.14 ms 4.87 ms880 µs 594
algo: hopcroft-tarjan biconnectedv3 87.9 ms88.3 ms 92.0 ms82.4 ms 12
algo: hopcroft-tarjan biconnectedgpu 3.70 ms3.85 ms 5.12 ms3.59 ms 176
algo: hierholzer (directed)v3 22.6 ms23.5 ms 26.1 ms21.6 ms 26
algo: hierholzer (directed)gpu 8.12 ms8.26 ms 9.35 ms7.91 ms 79
algo: betweennessCentrality (unweighted)v3 4.03 s4.05 s 4.08 s4.00 s 12
algo: betweennessCentrality (unweighted)gpu 343 ms366 ms 431 ms335 ms 12
algo: degreeCentralityNormalizedv3 14.7 ms15.7 ms 18.4 ms13.9 ms 40
algo: degreeCentralityNormalizedgpu 670 µs697 µs 1.25 ms651 µs 999
algo: closenessCentrality (one root)v3 68.0 ms68.8 ms 73.9 ms60.9 ms 12
algo: closenessCentrality (one root)gpu 1.36 ms1.40 ms 1.90 ms1.30 ms 495
algo: degreeCentrality (one root)v3 7.14 µs7.95 µs 17.2 µs6.88 µs 83015
algo: degreeCentrality (one root)gpu 259 µs273 µs 546 µs255 µs 2561

algorithms N=500 · 3.2 minv4 (gpu) v3

algo: bfs (whole graph)
45×
algo: dfs (whole graph)
43×
algo: dijkstra + pathTo
40×
algo: aStar
2.2×
algo: bellmanFord
16×
algo: kruskal
16×
algo: tarjan SCC
23×
algo: hopcroft-tarjan biconnected
23×
algo: hierholzer (directed)
4.6×
algo: betweennessCentrality (unweighted)
12×
algo: degreeCentralityNormalized
22×
algo: closenessCentrality (one root)
40×
algo: degreeCentrality (one root)
0.11×
algo: pageRank (20 iters)
1.79×
algo: closenessCentrality (weighted, one root)
36×
algo: floydWarshall
0.85×
algo: closenessCentralityNormalized
0.85×
algo: markovClustering
1.41×
algo: hierarchicalClustering (threshold)
0.95×
algo: kMeans (fixed centroids)
1.04×
algo: kMedoids
0.99×
algo: fuzzyCMeans
1.05×
algo: affinityPropagation
1.84×
algo: kargerStein
1.05×
algo: betweennessCentrality (weighted)
9.3×
1 µs10 µs100 µs1 ms10 ms100 ms1 s10 s
All stats (table view)
groupbenchp50avgp99minsamples
algo: bfs (whole graph)v3 12.2 ms12.8 ms 16.5 ms10.4 ms 51
algo: bfs (whole graph)gpu 274 µs282 µs 473 µs256 µs 2456
algo: dfs (whole graph)v3 10.8 ms11.7 ms 14.3 ms10.5 ms 56
algo: dfs (whole graph)gpu 254 µs262 µs 421 µs249 µs 2673
algo: dijkstra + pathTov3 11.9 ms12.4 ms 15.6 ms11.0 ms 53
algo: dijkstra + pathTogpu 294 µs305 µs 506 µs278 µs 2247
algo: aStarv3 418 µs430 µs 726 µs398 µs 1626
algo: aStargpu 190 µs196 µs 258 µs184 µs 3574
algo: bellmanFordv3 14.3 ms14.5 ms 16.3 ms13.9 ms 44
algo: bellmanFordgpu 888 µs904 µs 1.94 ms869 µs 757
algo: kruskalv3 3.07 ms3.33 ms 6.55 ms2.99 ms 206
algo: kruskalgpu 193 µs198 µs 298 µs183 µs 3493
algo: tarjan SCCv3 5.31 ms5.65 ms 8.75 ms5.15 ms 119
algo: tarjan SCCgpu 234 µs277 µs 600 µs219 µs 2464
algo: hopcroft-tarjan biconnectedv3 19.6 ms20.7 ms 23.3 ms18.9 ms 30
algo: hopcroft-tarjan biconnectedgpu 859 µs882 µs 1.27 ms823 µs 789
algo: hierholzer (directed)v3 4.15 ms4.41 ms 7.29 ms4.00 ms 152
algo: hierholzer (directed)gpu 893 µs911 µs 1.21 ms852 µs 747
algo: betweennessCentrality (unweighted)v3 252 ms254 ms 264 ms246 ms 12
algo: betweennessCentrality (unweighted)gpu 20.2 ms20.6 ms 23.7 ms19.6 ms 30
algo: degreeCentralityNormalizedv3 3.52 ms3.80 ms 7.21 ms3.42 ms 179
algo: degreeCentralityNormalizedgpu 160 µs167 µs 322 µs156 µs 4102
algo: closenessCentrality (one root)v3 13.3 ms14.3 ms 18.0 ms12.8 ms 44
algo: closenessCentrality (one root)gpu 334 µs346 µs 599 µs325 µs 2022
algo: degreeCentrality (one root)v3 7.24 µs7.86 µs 11.8 µs6.93 µs 83784
algo: degreeCentrality (one root)gpu 65.0 µs65.3 µs 66.1 µs64.0 µs 12
algo: pageRank (20 iters)v3 2.74 ms2.91 ms 6.32 ms2.68 ms 228
algo: pageRank (20 iters)gpu 1.53 ms1.81 ms 3.63 ms1.49 ms 378
algo: closenessCentrality (weighted, one root)v3 13.9 ms14.6 ms 18.2 ms13.1 ms 43
algo: closenessCentrality (weighted, one root)gpu 387 µs399 µs 650 µs380 µs 1753
algo: floydWarshallv3 252 ms270 ms 302 ms244 ms 12
algo: floydWarshallgpu 296 ms298 ms 303 ms293 ms 12
algo: closenessCentralityNormalizedv3 274 ms272 ms 283 ms227 ms 12
algo: closenessCentralityNormalizedgpu 322 ms325 ms 330 ms319 ms 12
algo: markovClusteringv3 4.65 s4.66 s 4.69 s4.63 s 12
algo: markovClusteringgpu 3.30 s3.46 s 3.81 s3.27 s 12
algo: hierarchicalClustering (threshold)v3 27.6 ms27.9 ms 29.4 ms26.8 ms 21
algo: hierarchicalClustering (threshold)gpu 28.9 ms29.7 ms 31.7 ms27.0 ms 19
algo: kMeans (fixed centroids)v3 8.53 ms8.62 ms 9.93 ms8.23 ms 77
algo: kMeans (fixed centroids)gpu 8.24 ms8.32 ms 9.10 ms7.91 ms 80
algo: kMedoidsv3 335 ms294 ms 406 ms104 ms 12
algo: kMedoidsgpu 340 ms308 ms 398 ms131 ms 12
algo: fuzzyCMeansv3 79.8 ms82.2 ms 88.6 ms78.0 ms 12
algo: fuzzyCMeansgpu 76.1 ms77.3 ms 81.9 ms74.9 ms 12
algo: affinityPropagationv3 211 ms224 ms 275 ms200 ms 12
algo: affinityPropagationgpu 115 ms130 ms 181 ms111 ms 12
algo: kargerSteinv3 326 ms324 ms 330 ms314 ms 12
algo: kargerSteingpu 309 ms311 ms 316 ms304 ms 12
algo: betweennessCentrality (weighted)v3 714 ms717 ms 728 ms710 ms 12
algo: betweennessCentrality (weighted)gpu 76.5 ms79.3 ms 81.9 ms74.2 ms 12

mappers N=2,000 · 8.1 s

mapper: bulk write, color — cpu eval
2.55 ms
mapper: bulk write, color — gpu path
175 µs
mapper: bulk write, color + size — cpu eval
2.88 ms
mapper: bulk write, color + size — gpu color / cpu size
2.46 ms
mapper: bulk write, mapped labels (round-5 path) — label refresh
3.94 ms
100 µs1 ms10 ms
All stats (table view)
groupbenchp50avgp99minsamples
mapper: bulk write, colorcpu eval 2.55 ms2.61 ms 3.97 ms2.43 ms 261
mapper: bulk write, colorgpu path 175 µs183 µs 314 µs171 µs 3839
mapper: bulk write, color + sizecpu eval 2.88 ms2.91 ms 3.37 ms2.82 ms 231
mapper: bulk write, color + sizegpu color / cpu size 2.46 ms2.48 ms 2.71 ms2.36 ms 278
mapper: bulk write, mapped labels (round-5 path)label refresh 3.94 ms4.22 ms 7.49 ms3.46 ms 159