Cytoscape.js GPU benchmarks

v4 (src/) vs v3 (v3/src/) · Mitata · times are per-iteration p50 · 2026-08-11 14:54 · 54062c08 (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)
Commit54062c08
docs(65.12c): the renderer device flip is an open question again, measured
Machine id5cf3f79c
Median speedup (geo-mean) 19× 106 v3-vs-gpu comparisons
Biggest win 280141× sweep: edges() @ N=2k
v3 still ahead 2 comparisons
Total run time 22.6 min quick profile

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

sweep: edges() @ 2k
280141×
sweep: nodes() @ 2k
172364×
core: edges() @ 2k
90747×
core: nodes() @ 2k
50470×
sweep: elements() @ 2k
30062×
core: elements() @ 2k
20041×
compare: same() @ 2k
8176×
trav: successors() @ 2k
779×
trav: predecessors() @ 2k
752×
mut-bulk: hide + show @ 2k
269×
degree: nodes.totalDegree() @ 2k
162×
degree: nodes.maxDegree() @ 2k
151×
degree: node.degree() @ 2k
122×
mut-bulk: shift @ 2k
104×
algo: closenessCentrality (one root) @ 2k
73×
algo: pageRank (20 iters) @ 500
70×
algo: closenessCentrality (one root) @ 500
68×
algo: bfs (whole graph) @ 500
63×
algo: dfs (whole graph) @ 500
61×
algo: dfs (whole graph) @ 2k
60×
sweep: nodes(":selected") vs nodes({selected}) @ 2k
59×
mut-bulk: positions(obj) @ 2k
58×
algo: closenessCentrality (weighted, one root) @ 500
56×
algo: dijkstra + pathTo @ 2k
56×
algo: bfs (whole graph) @ 2k
55×
algo: dijkstra + pathTo @ 500
53×
mut-bulk: lock + unlock @ 2k
50×
traverse: components() @ 2k
39×
algo: degreeCentralityNormalized @ 2k
39×
algo: degreeCentralityNormalized @ 500
38×
algo: tarjan SCC @ 2k
38×
sweep: selected nodes ($("node:selected") vs filter({group, selected})) @ 2k
36×
algo: tarjan SCC @ 500
36×
algo: degreeCentrality (one root) @ 500
32×
algo: degreeCentrality (one root) @ 2k
30×
algo: kruskal @ 2k
27×
scn: select-all + fit (listeners on) @ 2k
27×
set: difference() @ 2k
27×
algo: hopcroft-tarjan biconnected @ 500
26×
set: intersection() @ 2k
26×
algo: kruskal @ 500
25×
algo: hopcroft-tarjan biconnected @ 2k
25×
mut: position set @ 2k
24×
core: id lookup ($("#id") vs $id()) @ 2k
24×
trav: band roots() @ 2k
23×
mut-bulk: positions(fn) @ 2k
22×
algo: bellmanFord @ 500
21×
algo: bellmanFord @ 2k
20×
core: add + remove @ 2k
18×
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
13×
mut-bulk: data set @ 2k
13×
algo: betweennessCentrality (unweighted) @ 500
13×
algo: fuzzyCMeans @ 500
12×
algo: betweennessCentrality (unweighted) @ 2k
11×
sweep: all nodes ($("node") vs filter({group})) @ 2k
9.4×
algo: betweennessCentrality (weighted) @ 500
8.9×
algo: hierarchicalClustering (threshold) @ 500
8.3×
scn: explore (expand 2-hop + select + fit) @ 2k
8.0×
mut-bulk: select + unselect @ 2k
7.2×
core: collection() @ 2k
6.9×
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners) @ 2k
6.4×
mut-bulk: remove + re-add (256 nodes + cascade) @ 2k
6.1×
algo: kMedoids @ 500
5.9×
traverse: outgoers() @ 2k
5.4×
traverse: incomers() @ 2k
5.4×
algo: affinityPropagation @ 500
5.3×
algo: hierholzer (directed) @ 500
5.2×
set: union() @ 2k
5.1×
compare: contains() @ 2k
5.0×
trav: band neighborhood() @ 2k
5.0×
trav: outgoers() @ 2k
4.9×
core: nodes ($("node") vs filter({group})) @ 2k
4.9×
trav: incomers() @ 2k
4.9×
algo: kMeans (fixed centroids) @ 500
4.8×
mut: select + unselect @ 2k
4.3×
trav: neighborhood() @ 2k
4.0×
traverse: neighborhood() @ 2k
3.9×
algo: aStar @ 500
3.6×
algo: aStar @ 2k
3.3×
algo: hierholzer (directed) @ 2k
2.9×
trav: band connectedNodes() @ 2k
2.8×
traverse: connectedEdges() @ 2k
2.7×
iter: map() @ 2k
2.6×
trav: closedNeighborhood() @ 2k
2.6×
trav: connectedEdges() @ 2k
2.6×
mut: data set @ 2k
2.5×
core: zoom set @ 2k
2.3×
iter: filter(fn) @ 2k
1.91×
json: element @ 2k
1.90×
scn: refresh (bulk data write + mapped labels + filter + fit, data listener) @ 2k
1.80×
algo: floydWarshall @ 500
1.77×
sweep: filter(fn) @ 2k
1.70×
algo: closenessCentralityNormalized @ 500
1.67×
position: get @ 2k
1.64×
trav: band sources() @ 2k
1.52×
trav: band connectedEdges() @ 2k
1.47×
core: pan() get (x32) @ 2k
1.31×
algo: markovClustering @ 500
1.10×
core: extent() @ 2k
1.08×
algo: kargerStein @ 500
1.07×
iter: forEach() @ 2k
1.04×
data: get @ 2k
1.02×
core: getElementById() @ 2k
0.98×
core: filter(fn) @ 2k
0.97×
0.1×10×100×1000×10000×100000×1000000×

Scaling speedup vs graph size

algorithms

group× @ N=500× @ N=2k
algo: bfs (whole graph)63×55×
algo: dfs (whole graph)61×60×
algo: dijkstra + pathTo53×56×
algo: aStar3.6×3.3×
algo: bellmanFord21×20×
algo: kruskal25×27×
algo: tarjan SCC36×38×
algo: hopcroft-tarjan biconnected26×25×
algo: hierholzer (directed)5.2×2.9×
algo: betweennessCentrality (unweighted)13×11×
algo: degreeCentralityNormalized38×39×
algo: closenessCentrality (one root)68×73×
algo: degreeCentrality (one root)32×30×
algo: pageRank (20 iters)70×
algo: closenessCentrality (weighted, one root)56×
algo: floydWarshall1.77×
algo: closenessCentralityNormalized1.67×
algo: markovClustering1.10×
algo: hierarchicalClustering (threshold)8.3×
algo: kMeans (fixed centroids)4.8×
algo: kMedoids5.9×
algo: fuzzyCMeans12×
algo: affinityPropagation5.3×
algo: kargerStein1.07×
algo: betweennessCentrality (weighted)8.9×

core+collection N=2,000 · 2.9 minv4 (gpu) v3

core: getElementById()
0.98×
core: id lookup ($("#id") vs $id())
24×
core: nodes()
50470×
core: edges()
90747×
core: elements()
20041×
core: nodes ($("node") vs filter({group}))
4.9×
core: selected ($(":selected") vs filter({selected}))
14×
core: filter(fn)
0.97×
core: collection()
6.9×
core: pan() get (x32)
1.31×
core: extent()
1.08×
core: add + remove
18×
core: zoom set
2.3×
traverse: neighborhood()
3.9×
traverse: connectedEdges()
2.7×
traverse: outgoers()
5.4×
traverse: incomers()
5.4×
traverse: components()
39×
degree: node.degree()
122×
degree: nodes.totalDegree()
162×
degree: nodes.maxDegree()
151×
data: get
1.02×
position: get
1.64×
json: element
1.90×
set: union()
5.1×
set: intersection()
26×
set: difference()
27×
iter: map()
2.6×
iter: forEach()
1.04×
iter: filter(fn)
1.91×
compare: same()
8176×
compare: contains()
5.0×
mut: data set
2.5×
mut: position set
24×
mut: select + unselect
4.3×
1 ns10 ns100 ns1 µs10 µs100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
core: getElementById()v3 89.8 ns93.4 ns 141 ns87.1 ns 1835
core: getElementById()gpu 91.3 ns94.7 ns 145 ns87.8 ns 1809
core: id lookup ($("#id") vs $id())v3 2.01 µs2.36 µs 3.57 µs1.90 µs 68
core: id lookup ($("#id") vs $id())gpu 85.2 ns88.2 ns 165 ns82.7 ns 1938
core: nodes()v3 414 µs426 µs 586 µs400 µs 1641
core: nodes()gpu 8.20 ns8.70 ns 17.5 ns7.77 ns 19570
core: edges()v3 720 µs749 µs 1.32 ms702 µs 933
core: edges()gpu 7.93 ns8.45 ns 16.2 ns7.72 ns 20127
core: elements()v3 139 µs147 µs 257 µs137 µs 4757
core: elements()gpu 6.95 ns7.34 ns 23.8 ns6.50 ns 23080
core: nodes ($("node") vs filter({group}))v3 556 µs590 µs 1.28 ms541 µs 1184
core: nodes ($("node") vs filter({group}))gpu 113 µs119 µs 253 µs83.4 µs 5779
core: selected ($(":selected") vs filter({selected}))v3 340 µs361 µs 672 µs327 µs 1926
core: selected ($(":selected") vs filter({selected}))gpu 25.1 µs25.9 µs 27.7 µs24.6 µs 12
core: filter(fn)v3 415 µs426 µs 568 µs411 µs 1641
core: filter(fn)gpu 426 µs463 µs 979 µs411 µs 1489
core: collection()v3 458 ns543 ns 1.57 µs447 ns 304
core: collection()gpu 66.1 ns71.3 ns 154 ns63.6 ns 2332
core: pan() get (x32)v3 44.6 ns46.2 ns 57.9 ns43.7 ns 3593
core: pan() get (x32)gpu 34.0 ns36.2 ns 54.0 ns33.2 ns 4726
core: extent()v3 22.6 ns40.9 ns 147 ns21.6 ns 4067
core: extent()gpu 20.8 ns27.9 ns 106 ns19.5 ns 5978
core: add + removev3 125 µs129 µs 205 µs115 µs 5346
core: add + removegpu 7.09 µs8.19 µs 21.6 µs6.64 µs 78211
core: zoom setv3 1.36 µs1.38 µs 1.58 µs1.25 µs 118
core: zoom setgpu 602 ns617 ns 766 ns592 ns 263
traverse: neighborhood()v3 3.67 µs3.91 µs 4.62 µs3.49 µs 39
traverse: neighborhood()gpu 943 ns1.02 µs 2.37 µs908 ns 154
traverse: connectedEdges()v3 1.05 µs1.18 µs 2.17 µs1.01 µs 140
traverse: connectedEdges()gpu 383 ns412 ns 1.36 µs367 ns 398
traverse: outgoers()v3 2.41 µs2.59 µs 3.42 µs2.30 µs 62
traverse: outgoers()gpu 443 ns564 ns 2.12 µs432 ns 285
traverse: incomers()v3 2.40 µs2.57 µs 3.42 µs2.27 µs 62
traverse: incomers()gpu 445 ns527 ns 2.02 µs434 ns 308
traverse: components()v3 79.0 ms82.2 ms 90.2 ms76.6 ms 12
traverse: components()gpu 2.01 ms2.14 ms 3.66 ms1.95 ms 312
degree: node.degree()v3 3.38 µs3.74 µs 5.06 µs3.14 µs 42
degree: node.degree()gpu 27.8 ns29.3 ns 43.1 ns26.5 ns 5827
degree: nodes.totalDegree()v3 7.25 ms8.20 ms 13.3 ms6.80 ms 81
degree: nodes.totalDegree()gpu 44.7 µs46.3 µs 82.1 µs42.8 µs 14993
degree: nodes.maxDegree()v3 7.83 ms8.53 ms 12.7 ms7.20 ms 78
degree: nodes.maxDegree()gpu 52.0 µs53.8 µs 97.5 µs50.8 µs 13004
data: getv3 30.3 ns31.4 ns 53.6 ns29.3 ns 5441
data: getgpu 29.7 ns31.2 ns 50.7 ns28.8 ns 5480
position: getv3 35.7 ns38.1 ns 87.0 ns34.0 ns 4488
position: getgpu 21.8 ns26.4 ns 63.9 ns20.9 ns 6307
json: elementv3 302 ns393 ns 3.58 µs294 ns 423
json: elementgpu 159 ns166 ns 264 ns155 ns 982
set: union()v3 92.6 µs106 µs 178 µs90.3 µs 6436
set: union()gpu 18.0 µs18.6 µs 20.1 µs17.4 µs 12
set: intersection()v3 89.2 µs100 µs 155 µs86.1 µs 6796
set: intersection()gpu 3.45 µs3.50 µs 3.85 µs3.38 µs 44
set: difference()v3 90.9 µs104 µs 160 µs88.0 µs 6640
set: difference()gpu 3.42 µs3.47 µs 4.05 µs3.32 µs 43
iter: map()v3 27.5 µs29.1 µs 78.0 µs26.4 µs 23716
iter: map()gpu 10.6 µs11.2 µs 36.1 µs10.1 µs 59939
iter: forEach()v3 3.51 µs3.80 µs 3.68 µs3.43 µs 35
iter: forEach()gpu 3.36 µs3.46 µs 3.96 µs3.34 µs 44
iter: filter(fn)v3 248 µs261 µs 539 µs242 µs 2678
iter: filter(fn)gpu 130 µs135 µs 224 µs124 µs 5168
compare: same()v3 122 µs127 µs 218 µs118 µs 5503
compare: same()gpu 14.9 ns15.9 ns 29.7 ns14.3 ns 10752
compare: contains()v3 6.24 µs6.26 µs 6.39 µs6.15 µs 23
compare: contains()gpu 1.24 µs1.25 µs 1.34 µs1.21 µs 130
mut: data setv3 600 ns619 ns 1.05 µs586 ns 268
mut: data setgpu 238 ns242 ns 365 ns232 ns 693
mut: position setv3 1.20 µs1.22 µs 1.58 µs1.15 µs 136
mut: position setgpu 49.3 ns53.8 ns 106 ns47.3 ns 3159
mut: select + unselectv3 2.56 µs2.72 µs 3.77 µs2.34 µs 58
mut: select + unselectgpu 593 ns603 ns 720 ns575 ns 271

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

sweep: nodes()
172364×
sweep: edges()
280141×
sweep: elements()
30062×
sweep: all nodes ($("node") vs filter({group}))
9.4×
sweep: selected ($(":selected") vs filter({selected}))
13×
sweep: selected nodes ($("node:selected") vs filter({group, selected}))
36×
sweep: nodes(":selected") vs nodes({selected})
59×
sweep: filter(fn)
1.70×
1 ns10 ns100 ns1 µs10 µs100 µs1 ms
All stats (table view)
groupbenchp50avgp99minsamples
sweep: nodes()v3 415 µs427 µs 559 µs408 µs 1641
sweep: nodes()gpu 2.41 ns2.51 ns 6.22 ns2.35 ns 65610
sweep: edges()v3 718 µs736 µs 1.09 ms696 µs 949
sweep: edges()gpu 2.56 ns2.63 ns 4.75 ns2.51 ns 63034
sweep: elements()v3 144 µs152 µs 263 µs142 µs 4597
sweep: elements()gpu 4.80 ns5.04 ns 12.3 ns4.59 ns 33503
sweep: all nodes ($("node") vs filter({group}))v3 542 µs572 µs 864 µs532 µs 1222
sweep: all nodes ($("node") vs filter({group}))gpu 57.6 µs71.6 µs 160 µs53.6 µs 9664
sweep: selected ($(":selected") vs filter({selected}))v3 341 µs350 µs 558 µs335 µs 1996
sweep: selected ($(":selected") vs filter({selected}))gpu 26.2 µs26.5 µs 27.4 µs25.8 µs 12
sweep: selected nodes ($("node:selected") vs filter({group, selected}))v3 327 µs351 µs 644 µs315 µs 1980
sweep: selected nodes ($("node:selected") vs filter({group, selected}))gpu 9.04 µs9.08 µs 9.36 µs8.91 µs 15
sweep: nodes(":selected") vs nodes({selected})v3 530 µs543 µs 766 µs525 µs 1290
sweep: nodes(":selected") vs nodes({selected})gpu 8.98 µs9.01 µs 9.08 µs8.85 µs 15
sweep: filter(fn)v3 411 µs419 µs 519 µs407 µs 1671
sweep: filter(fn)gpu 241 µs259 µs 561 µs236 µs 2690

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

mut-bulk: select + unselect
7.2×
mut-bulk: hide + show
269×
mut-bulk: lock + unlock
50×
mut-bulk: positions(obj)
58×
mut-bulk: positions(fn)
22×
mut-bulk: shift
104×
mut-bulk: data set
13×
mut-bulk: remove + re-add (256 nodes + cascade)
6.1×
10 µs100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
mut-bulk: select + unselectv3 1.97 ms2.04 ms 3.54 ms1.91 ms 322
mut-bulk: select + unselectgpu 274 µs285 µs 428 µs268 µs 2459
mut-bulk: hide + showv3 60.1 ms64.6 ms 70.8 ms57.5 ms 12
mut-bulk: hide + showgpu 224 µs229 µs 397 µs218 µs 2958
mut-bulk: lock + unlockv3 1.96 ms2.02 ms 3.57 ms1.91 ms 341
mut-bulk: lock + unlockgpu 38.8 µs39.1 µs 39.7 µs38.2 µs 12
mut-bulk: positions(obj)v3 2.13 ms2.18 ms 3.59 ms2.08 ms 314
mut-bulk: positions(obj)gpu 36.8 µs38.3 µs 75.0 µs35.5 µs 18008
mut-bulk: positions(fn)v3 3.25 ms3.39 ms 4.96 ms3.16 ms 201
mut-bulk: positions(fn)gpu 148 µs151 µs 226 µs142 µs 4522
mut-bulk: shiftv3 3.37 ms3.52 ms 4.64 ms3.29 ms 193
mut-bulk: shiftgpu 32.4 µs33.9 µs 65.7 µs31.1 µs 20438
mut-bulk: data setv3 832 µs869 µs 1.47 ms807 µs 792
mut-bulk: data setgpu 65.2 µs67.8 µs 137 µs63.0 µs 10184
mut-bulk: remove + re-add (256 nodes + cascade)v3 40.9 ms42.0 ms 49.1 ms39.5 ms 13
mut-bulk: remove + re-add (256 nodes + cascade)gpu 6.70 ms6.83 ms 8.82 ms5.98 ms 97

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

scn: explore (expand 2-hop + select + fit)
8.0×
scn: select-all + fit (listeners on)
27×
scn: drag (select band of 100 + 8-step shift, position listener)
16×
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners)
6.4×
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)
1.80×
10 µs100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
scn: explore (expand 2-hop + select + fit)v3 297 µs345 µs 958 µs268 µs 2007
scn: explore (expand 2-hop + select + fit)gpu 37.3 µs41.8 µs 93.5 µs33.4 µs 16207
scn: select-all + fit (listeners on)v3 24.8 ms24.9 ms 27.8 ms22.9 ms 23
scn: select-all + fit (listeners on)gpu 930 µs976 µs 1.50 ms881 µs 692
scn: drag (select band of 100 + 8-step shift, position listener)v3 1.62 ms1.68 ms 2.17 ms1.56 ms 399
scn: drag (select band of 100 + 8-step shift, position listener)gpu 98.4 µs106 µs 334 µs94.7 µs 6594
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners)v3 44.7 ms44.9 ms 47.0 ms42.6 ms 12
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners)gpu 6.93 ms7.20 ms 8.86 ms6.28 ms 91
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)v3 7.45 ms8.02 ms 14.1 ms6.98 ms 81
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)gpu 4.14 ms4.28 ms 7.05 ms3.70 ms 150

traversal N=2,000 · 2.0 minv4 (gpu) v3

trav: neighborhood()
4.0×
trav: closedNeighborhood()
2.6×
trav: connectedEdges()
2.6×
trav: outgoers()
4.9×
trav: incomers()
4.9×
trav: successors()
779×
trav: predecessors()
752×
trav: band neighborhood()
5.0×
trav: band connectedEdges()
1.47×
trav: band roots()
23×
trav: band sources()
1.52×
trav: band connectedNodes()
2.8×
100 ns1 µs10 µs100 µs1 ms10 ms100 ms1 s
All stats (table view)
groupbenchp50avgp99minsamples
trav: neighborhood()v3 4.04 µs4.24 µs 5.67 µs3.42 µs 36
trav: neighborhood()gpu 999 ns1.06 µs 2.09 µs851 ns 156
trav: closedNeighborhood()v3 5.75 µs5.61 µs 6.07 µs5.13 µs 27
trav: closedNeighborhood()gpu 2.23 µs2.31 µs 2.70 µs2.17 µs 69
trav: connectedEdges()v3 988 ns1.06 µs 1.77 µs958 ns 157
trav: connectedEdges()gpu 387 ns401 ns 650 ns373 ns 421
trav: outgoers()v3 2.31 µs2.44 µs 2.98 µs2.21 µs 66
trav: outgoers()gpu 469 ns543 ns 2.03 µs433 ns 306
trav: incomers()v3 2.30 µs2.46 µs 3.07 µs2.22 µs 65
trav: incomers()gpu 468 ns546 ns 2.06 µs450 ns 304
trav: successors()v3 435 ms436 ms 450 ms423 ms 12
trav: successors()gpu 558 µs585 µs 1.72 ms530 µs 1162
trav: predecessors()v3 435 ms439 ms 453 ms427 ms 12
trav: predecessors()gpu 579 µs609 µs 1.41 ms561 µs 1117
trav: band neighborhood()v3 185 µs203 µs 386 µs177 µs 3436
trav: band neighborhood()gpu 37.3 µs38.0 µs 39.1 µs36.7 µs 12
trav: band connectedEdges()v3 24.3 µs24.8 µs 25.5 µs23.9 µs 12
trav: band connectedEdges()gpu 16.5 µs17.2 µs 19.0 µs16.3 µs 12
trav: band roots()v3 109 µs117 µs 156 µs105 µs 5966
trav: band roots()gpu 4.81 µs4.84 µs 5.04 µs4.75 µs 31
trav: band sources()v3 6.65 µs6.63 µs 6.95 µs6.28 µs 22
trav: band sources()gpu 4.37 µs4.40 µs 4.56 µs4.31 µs 34
trav: band connectedNodes()v3 14.3 µs14.6 µs 14.7 µs14.0 µs 12
trav: band connectedNodes()gpu 5.07 µs5.14 µs 5.57 µs4.94 µs 29

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

algo: bfs (whole graph)
55×
algo: dfs (whole graph)
60×
algo: dijkstra + pathTo
56×
algo: aStar
3.3×
algo: bellmanFord
20×
algo: kruskal
27×
algo: tarjan SCC
38×
algo: hopcroft-tarjan biconnected
25×
algo: hierholzer (directed)
2.9×
algo: betweennessCentrality (unweighted)
11×
algo: degreeCentralityNormalized
39×
algo: closenessCentrality (one root)
73×
algo: degreeCentrality (one root)
30×
100 ns1 µs10 µs100 µs1 ms10 ms100 ms1 s10 s
All stats (table view)
groupbenchp50avgp99minsamples
algo: bfs (whole graph)v3 50.9 ms52.8 ms 56.8 ms49.8 ms 10
algo: bfs (whole graph)gpu 933 µs977 µs 1.59 ms858 µs 709
algo: dfs (whole graph)v3 50.7 ms51.6 ms 55.3 ms48.6 ms 10
algo: dfs (whole graph)gpu 838 µs868 µs 1.26 ms820 µs 799
algo: dijkstra + pathTov3 52.6 ms53.1 ms 54.6 ms52.1 ms 10
algo: dijkstra + pathTogpu 937 µs954 µs 1.18 ms910 µs 727
algo: aStarv3 1.67 ms1.72 ms 2.38 ms1.62 ms 402
algo: aStargpu 504 µs517 µs 684 µs487 µs 1351
algo: bellmanFordv3 235 ms230 ms 252 ms207 ms 12
algo: bellmanFordgpu 11.8 ms11.8 ms 12.8 ms11.4 ms 55
algo: kruskalv3 13.4 ms14.6 ms 18.6 ms12.7 ms 44
algo: kruskalgpu 494 µs525 µs 813 µs467 µs 1308
algo: tarjan SCCv3 23.7 ms23.9 ms 26.8 ms21.4 ms 25
algo: tarjan SCCgpu 622 µs667 µs 1.19 ms595 µs 1029
algo: hopcroft-tarjan biconnectedv3 85.9 ms87.0 ms 92.2 ms81.8 ms 12
algo: hopcroft-tarjan biconnectedgpu 3.44 ms3.57 ms 5.04 ms3.36 ms 189
algo: hierholzer (directed)v3 22.7 ms23.4 ms 26.3 ms21.5 ms 26
algo: hierholzer (directed)gpu 7.88 ms8.01 ms 9.35 ms7.62 ms 81
algo: betweennessCentrality (unweighted)v3 4.07 s4.07 s 4.15 s3.96 s 12
algo: betweennessCentrality (unweighted)gpu 357 ms372 ms 436 ms342 ms 12
algo: degreeCentralityNormalizedv3 15.8 ms17.0 ms 20.6 ms15.0 ms 37
algo: degreeCentralityNormalizedgpu 404 µs419 µs 700 µs398 µs 1668
algo: closenessCentrality (one root)v3 60.4 ms64.0 ms 73.2 ms59.2 ms 12
algo: closenessCentrality (one root)gpu 822 µs849 µs 1.15 ms793 µs 820
algo: degreeCentrality (one root)v3 7.45 µs7.34 µs 8.23 µs6.54 µs 19
algo: degreeCentrality (one root)gpu 249 ns256 ns 450 ns242 ns 657

algorithms N=500 · 10.2 minv4 (gpu) v3

algo: bfs (whole graph)
63×
algo: dfs (whole graph)
61×
algo: dijkstra + pathTo
53×
algo: aStar
3.6×
algo: bellmanFord
21×
algo: kruskal
25×
algo: tarjan SCC
36×
algo: hopcroft-tarjan biconnected
26×
algo: hierholzer (directed)
5.2×
algo: betweennessCentrality (unweighted)
13×
algo: degreeCentralityNormalized
38×
algo: closenessCentrality (one root)
68×
algo: degreeCentrality (one root)
32×
algo: pageRank (20 iters)
70×
algo: closenessCentrality (weighted, one root)
56×
algo: floydWarshall
1.77×
algo: closenessCentralityNormalized
1.67×
algo: markovClustering
1.10×
algo: hierarchicalClustering (threshold)
8.3×
algo: kMeans (fixed centroids)
4.8×
algo: kMedoids
5.9×
algo: fuzzyCMeans
12×
algo: affinityPropagation
5.3×
algo: kargerStein
1.07×
algo: betweennessCentrality (weighted)
8.9×
100 ns1 µs10 µs100 µs1 ms10 ms100 ms1 s10 s
All stats (table view)
groupbenchp50avgp99minsamples
algo: bfs (whole graph)v3 12.4 ms13.3 ms 17.3 ms11.0 ms 48
algo: bfs (whole graph)gpu 198 µs206 µs 306 µs195 µs 3404
algo: dfs (whole graph)v3 11.5 ms12.5 ms 15.4 ms11.1 ms 52
algo: dfs (whole graph)gpu 190 µs197 µs 318 µs187 µs 3556
algo: dijkstra + pathTov3 12.3 ms12.9 ms 16.1 ms11.5 ms 50
algo: dijkstra + pathTogpu 230 µs243 µs 421 µs221 µs 2860
algo: aStarv3 437 µs452 µs 712 µs423 µs 1548
algo: aStargpu 122 µs128 µs 216 µs117 µs 5476
algo: bellmanFordv3 17.1 ms17.4 ms 18.3 ms16.7 ms 36
algo: bellmanFordgpu 812 µs840 µs 1.94 ms799 µs 827
algo: kruskalv3 3.24 ms3.51 ms 6.98 ms3.13 ms 196
algo: kruskalgpu 127 µs143 µs 275 µs125 µs 4883
algo: tarjan SCCv3 5.39 ms6.07 ms 10.6 ms5.27 ms 110
algo: tarjan SCCgpu 151 µs160 µs 371 µs147 µs 4371
algo: hopcroft-tarjan biconnectedv3 21.6 ms22.4 ms 25.1 ms20.0 ms 27
algo: hopcroft-tarjan biconnectedgpu 823 µs861 µs 1.56 ms804 µs 807
algo: hierholzer (directed)v3 4.25 ms4.55 ms 7.31 ms4.10 ms 144
algo: hierholzer (directed)gpu 816 µs840 µs 1.18 ms795 µs 824
algo: betweennessCentrality (unweighted)v3 259 ms260 ms 263 ms255 ms 12
algo: betweennessCentrality (unweighted)gpu 20.8 ms21.2 ms 25.2 ms20.2 ms 29
algo: degreeCentralityNormalizedv3 3.57 ms3.93 ms 7.35 ms3.46 ms 174
algo: degreeCentralityNormalizedgpu 93.4 µs97.1 µs 154 µs91.5 µs 7190
algo: closenessCentrality (one root)v3 13.9 ms14.5 ms 19.3 ms13.0 ms 44
algo: closenessCentrality (one root)gpu 204 µs211 µs 284 µs198 µs 3322
algo: degreeCentrality (one root)v3 7.73 µs7.63 µs 8.50 µs6.83 µs 19
algo: degreeCentrality (one root)gpu 245 ns250 ns 317 ns235 ns 680
algo: pageRank (20 iters)v3 2.77 ms2.86 ms 5.84 ms2.69 ms 234
algo: pageRank (20 iters)gpu 39.3 µs44.4 µs 157 µs37.7 µs 15611
algo: closenessCentrality (weighted, one root)v3 14.0 ms14.8 ms 17.7 ms13.2 ms 43
algo: closenessCentrality (weighted, one root)gpu 249 µs255 µs 333 µs241 µs 2750
algo: floydWarshallv3 248 ms273 ms 383 ms244 ms 12
algo: floydWarshallgpu 140 ms153 ms 210 ms137 ms 12
algo: closenessCentralityNormalizedv3 275 ms277 ms 285 ms269 ms 12
algo: closenessCentralityNormalizedgpu 165 ms166 ms 169 ms163 ms 12
algo: markovClusteringv3 4.13 s4.38 s 4.66 s4.09 s 12
algo: markovClusteringgpu 3.75 s3.75 s 3.77 s3.74 s 12
algo: hierarchicalClustering (threshold)v3 34.5 ms34.6 ms 35.1 ms33.9 ms 17
algo: hierarchicalClustering (threshold)gpu 4.15 ms4.31 ms 6.17 ms4.05 ms 157
algo: kMeans (fixed centroids)v3 9.19 ms9.27 ms 9.85 ms9.08 ms 71
algo: kMeans (fixed centroids)gpu 1.93 ms1.98 ms 3.09 ms1.88 ms 350
algo: kMedoidsv3 247 ms250 ms 379 ms69.2 ms 12
algo: kMedoidsgpu 41.7 ms39.6 ms 44.9 ms26.9 ms 15
algo: fuzzyCMeansv3 78.4 ms79.5 ms 81.8 ms77.5 ms 12
algo: fuzzyCMeansgpu 6.81 ms6.88 ms 7.47 ms6.56 ms 97
algo: affinityPropagationv3 212 ms213 ms 222 ms200 ms 12
algo: affinityPropagationgpu 39.7 ms39.8 ms 41.2 ms38.4 ms 11
algo: kargerSteinv3 320 ms325 ms 339 ms312 ms 12
algo: kargerSteingpu 300 ms306 ms 321 ms295 ms 12
algo: betweennessCentrality (weighted)v3 724 ms727 ms 753 ms712 ms 12
algo: betweennessCentrality (weighted)gpu 80.9 ms83.4 ms 85.0 ms79.3 ms 12

mappers N=2,000 · 24.4 s

mapper: bulk write, color — cpu eval
2.58 ms
mapper: bulk write, color — gpu path
175 µs
mapper: bulk write, color + size — cpu eval
2.96 ms
mapper: bulk write, color + size — gpu color / cpu size
2.60 ms
mapper: bulk write, mapped labels (round-5 path) — label refresh
3.93 ms
100 µs1 ms10 ms
All stats (table view)
groupbenchp50avgp99minsamples
mapper: bulk write, colorcpu eval 2.58 ms2.63 ms 3.98 ms2.46 ms 258
mapper: bulk write, colorgpu path 175 µs181 µs 273 µs171 µs 3873
mapper: bulk write, color + sizecpu eval 2.96 ms3.00 ms 3.55 ms2.89 ms 228
mapper: bulk write, color + sizegpu color / cpu size 2.60 ms2.64 ms 3.13 ms2.54 ms 263
mapper: bulk write, mapped labels (round-5 path)label refresh 3.93 ms4.20 ms 6.78 ms3.55 ms 162