Cytoscape.js GPU benchmarks

v4 (src/) vs v3 (v3/src/) · Mitata · times are per-iteration p50 · 2026-08-11 15:16 · 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 279324× sweep: edges() @ N=2k
v3 still ahead 3 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
279324×
sweep: nodes() @ 2k
169449×
core: edges() @ 2k
93604×
core: nodes() @ 2k
51128×
sweep: elements() @ 2k
28192×
core: elements() @ 2k
20072×
compare: same() @ 2k
7831×
trav: successors() @ 2k
794×
trav: predecessors() @ 2k
753×
mut-bulk: hide + show @ 2k
274×
degree: nodes.totalDegree() @ 2k
171×
degree: nodes.maxDegree() @ 2k
143×
degree: node.degree() @ 2k
119×
mut-bulk: shift @ 2k
106×
algo: closenessCentrality (one root) @ 2k
72×
algo: pageRank (20 iters) @ 500
70×
algo: closenessCentrality (one root) @ 500
69×
algo: bfs (whole graph) @ 500
67×
mut-bulk: positions(obj) @ 2k
61×
algo: dfs (whole graph) @ 500
60×
sweep: nodes(":selected") vs nodes({selected}) @ 2k
60×
algo: dfs (whole graph) @ 2k
59×
algo: dijkstra + pathTo @ 2k
56×
algo: bfs (whole graph) @ 2k
55×
algo: closenessCentrality (weighted, one root) @ 500
53×
algo: dijkstra + pathTo @ 500
51×
mut-bulk: lock + unlock @ 2k
51×
traverse: components() @ 2k
40×
algo: degreeCentralityNormalized @ 500
37×
algo: tarjan SCC @ 2k
37×
algo: degreeCentralityNormalized @ 2k
37×
sweep: selected nodes ($("node:selected") vs filter({group, selected})) @ 2k
35×
algo: tarjan SCC @ 500
35×
algo: degreeCentrality (one root) @ 500
31×
algo: degreeCentrality (one root) @ 2k
30×
algo: kruskal @ 2k
27×
scn: select-all + fit (listeners on) @ 2k
26×
set: difference() @ 2k
26×
set: intersection() @ 2k
25×
algo: hopcroft-tarjan biconnected @ 500
25×
algo: hopcroft-tarjan biconnected @ 2k
25×
core: id lookup ($("#id") vs $id()) @ 2k
24×
trav: band roots() @ 2k
23×
mut: position set @ 2k
23×
algo: kruskal @ 500
23×
mut-bulk: positions(fn) @ 2k
23×
algo: bellmanFord @ 500
21×
algo: bellmanFord @ 2k
19×
core: add + remove @ 2k
17×
scn: drag (select band of 100 + 8-step shift, position listener) @ 2k
16×
mut-bulk: data set @ 2k
13×
core: selected ($(":selected") vs filter({selected})) @ 2k
13×
sweep: selected ($(":selected") vs filter({selected})) @ 2k
13×
algo: betweennessCentrality (unweighted) @ 500
13×
algo: betweennessCentrality (unweighted) @ 2k
11×
algo: fuzzyCMeans @ 500
11×
algo: kMedoids @ 500
10×
sweep: all nodes ($("node") vs filter({group})) @ 2k
9.4×
algo: betweennessCentrality (weighted) @ 500
9.0×
algo: hierarchicalClustering (threshold) @ 500
8.4×
mut-bulk: select + unselect @ 2k
8.2×
scn: explore (expand 2-hop + select + fit) @ 2k
7.7×
core: collection() @ 2k
7.0×
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners) @ 2k
6.6×
mut-bulk: remove + re-add (256 nodes + cascade) @ 2k
6.5×
set: union() @ 2k
5.5×
trav: incomers() @ 2k
5.4×
algo: affinityPropagation @ 500
5.3×
trav: outgoers() @ 2k
5.3×
algo: hierholzer (directed) @ 500
5.3×
trav: band neighborhood() @ 2k
5.1×
core: nodes ($("node") vs filter({group})) @ 2k
4.9×
compare: contains() @ 2k
4.8×
traverse: incomers() @ 2k
4.7×
traverse: outgoers() @ 2k
4.7×
algo: kMeans (fixed centroids) @ 500
4.3×
mut: select + unselect @ 2k
4.2×
trav: neighborhood() @ 2k
4.0×
algo: aStar @ 500
3.6×
traverse: neighborhood() @ 2k
3.4×
algo: aStar @ 2k
3.4×
trav: closedNeighborhood() @ 2k
2.9×
trav: band connectedNodes() @ 2k
2.8×
algo: hierholzer (directed) @ 2k
2.8×
iter: map() @ 2k
2.8×
trav: connectedEdges() @ 2k
2.6×
mut: data set @ 2k
2.6×
core: zoom set @ 2k
2.3×
traverse: connectedEdges() @ 2k
2.2×
json: element @ 2k
1.87×
iter: filter(fn) @ 2k
1.83×
scn: refresh (bulk data write + mapped labels + filter + fit, data listener) @ 2k
1.83×
algo: floydWarshall @ 500
1.76×
sweep: filter(fn) @ 2k
1.68×
algo: closenessCentralityNormalized @ 500
1.65×
position: get @ 2k
1.60×
trav: band sources() @ 2k
1.49×
trav: band connectedEdges() @ 2k
1.48×
core: pan() get (x32) @ 2k
1.25×
algo: markovClustering @ 500
1.10×
core: extent() @ 2k
1.09×
algo: kargerStein @ 500
1.07×
iter: forEach() @ 2k
1.06×
data: get @ 2k
1.00×
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)67×55×
algo: dfs (whole graph)60×59×
algo: dijkstra + pathTo51×56×
algo: aStar3.6×3.4×
algo: bellmanFord21×19×
algo: kruskal23×27×
algo: tarjan SCC35×37×
algo: hopcroft-tarjan biconnected25×25×
algo: hierholzer (directed)5.3×2.8×
algo: betweennessCentrality (unweighted)13×11×
algo: degreeCentralityNormalized37×37×
algo: closenessCentrality (one root)69×72×
algo: degreeCentrality (one root)31×30×
algo: pageRank (20 iters)70×
algo: closenessCentrality (weighted, one root)53×
algo: floydWarshall1.76×
algo: closenessCentralityNormalized1.65×
algo: markovClustering1.10×
algo: hierarchicalClustering (threshold)8.4×
algo: kMeans (fixed centroids)4.3×
algo: kMedoids10×
algo: fuzzyCMeans11×
algo: affinityPropagation5.3×
algo: kargerStein1.07×
algo: betweennessCentrality (weighted)9.0×

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

core: getElementById()
0.98×
core: id lookup ($("#id") vs $id())
24×
core: nodes()
51128×
core: edges()
93604×
core: elements()
20072×
core: nodes ($("node") vs filter({group}))
4.9×
core: selected ($(":selected") vs filter({selected}))
13×
core: filter(fn)
0.97×
core: collection()
7.0×
core: pan() get (x32)
1.25×
core: extent()
1.09×
core: add + remove
17×
core: zoom set
2.3×
traverse: neighborhood()
3.4×
traverse: connectedEdges()
2.2×
traverse: outgoers()
4.7×
traverse: incomers()
4.7×
traverse: components()
40×
degree: node.degree()
119×
degree: nodes.totalDegree()
171×
degree: nodes.maxDegree()
143×
data: get
1.00×
position: get
1.60×
json: element
1.87×
set: union()
5.5×
set: intersection()
25×
set: difference()
26×
iter: map()
2.8×
iter: forEach()
1.06×
iter: filter(fn)
1.83×
compare: same()
7831×
compare: contains()
4.8×
mut: data set
2.6×
mut: position set
23×
mut: select + unselect
4.2×
1 ns10 ns100 ns1 µs10 µs100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
core: getElementById()v3 90.3 ns93.4 ns 138 ns88.5 ns 1835
core: getElementById()gpu 92.1 ns94.6 ns 128 ns89.1 ns 1810
core: id lookup ($("#id") vs $id())v3 2.08 µs2.40 µs 3.56 µs1.94 µs 66
core: id lookup ($("#id") vs $id())gpu 85.0 ns88.5 ns 166 ns82.4 ns 1932
core: nodes()v3 419 µs432 µs 659 µs412 µs 1615
core: nodes()gpu 8.19 ns8.64 ns 17.9 ns7.72 ns 19639
core: edges()v3 723 µs739 µs 939 µs704 µs 946
core: edges()gpu 7.73 ns8.32 ns 16.2 ns7.67 ns 20397
core: elements()v3 140 µs150 µs 410 µs138 µs 4639
core: elements()gpu 6.98 ns7.28 ns 16.8 ns6.66 ns 23340
core: nodes ($("node") vs filter({group}))v3 548 µs576 µs 1.20 ms536 µs 1213
core: nodes ($("node") vs filter({group}))gpu 111 µs117 µs 259 µs82.8 µs 5854
core: selected ($(":selected") vs filter({selected}))v3 327 µs341 µs 620 µs320 µs 2041
core: selected ($(":selected") vs filter({selected}))gpu 24.5 µs25.1 µs 25.2 µs24.4 µs 12
core: filter(fn)v3 411 µs421 µs 580 µs406 µs 1660
core: filter(fn)gpu 422 µs451 µs 892 µs409 µs 1530
core: collection()v3 461 ns569 ns 1.86 µs447 ns 291
core: collection()gpu 65.9 ns71.0 ns 283 ns63.1 ns 2370
core: pan() get (x32)v3 44.7 ns46.9 ns 57.2 ns42.9 ns 3633
core: pan() get (x32)gpu 35.8 ns36.9 ns 53.6 ns33.6 ns 4638
core: extent()v3 22.6 ns40.1 ns 134 ns21.4 ns 4158
core: extent()gpu 20.8 ns27.9 ns 108 ns19.5 ns 5979
core: add + removev3 122 µs128 µs 265 µs113 µs 5401
core: add + removegpu 7.09 µs8.26 µs 21.8 µs6.66 µs 77228
core: zoom setv3 1.39 µs1.41 µs 1.57 µs1.29 µs 115
core: zoom setgpu 597 ns609 ns 816 ns578 ns 268
traverse: neighborhood()v3 3.63 µs3.83 µs 4.76 µs3.42 µs 41
traverse: neighborhood()gpu 1.06 µs1.22 µs 2.52 µs1.01 µs 133
traverse: connectedEdges()v3 1.02 µs1.12 µs 2.06 µs963 ns 147
traverse: connectedEdges()gpu 454 ns512 ns 1.47 µs440 ns 326
traverse: outgoers()v3 2.32 µs2.53 µs 3.49 µs2.22 µs 63
traverse: outgoers()gpu 497 ns535 ns 1.24 µs478 ns 300
traverse: incomers()v3 2.34 µs2.55 µs 3.50 µs2.21 µs 63
traverse: incomers()gpu 494 ns503 ns 620 ns484 ns 320
traverse: components()v3 78.6 ms82.0 ms 91.1 ms75.6 ms 12
traverse: components()gpu 1.98 ms2.17 ms 3.70 ms1.91 ms 307
degree: node.degree()v3 3.33 µs3.74 µs 5.17 µs3.19 µs 42
degree: node.degree()gpu 27.9 ns29.3 ns 45.1 ns26.3 ns 5826
degree: nodes.totalDegree()v3 7.67 ms8.52 ms 13.0 ms6.84 ms 78
degree: nodes.totalDegree()gpu 44.7 µs45.4 µs 45.6 µs44.3 µs 12
degree: nodes.maxDegree()v3 7.41 ms8.30 ms 13.5 ms7.01 ms 80
degree: nodes.maxDegree()gpu 51.7 µs52.6 µs 84.0 µs50.3 µs 13307
data: getv3 29.8 ns31.2 ns 53.4 ns28.7 ns 5482
data: getgpu 29.8 ns31.5 ns 57.2 ns28.8 ns 5424
position: getv3 35.2 ns37.2 ns 97.8 ns33.6 ns 4594
position: getgpu 22.0 ns26.7 ns 65.0 ns20.8 ns 6239
json: elementv3 298 ns389 ns 3.58 µs291 ns 423
json: elementgpu 159 ns169 ns 350 ns153 ns 973
set: union()v3 94.1 µs107 µs 185 µs90.7 µs 6436
set: union()gpu 17.0 µs17.8 µs 19.2 µs16.1 µs 12
set: intersection()v3 90.6 µs103 µs 126 µs88.8 µs 6678
set: intersection()gpu 3.58 µs3.62 µs 3.97 µs3.52 µs 42
set: difference()v3 91.8 µs104 µs 157 µs88.8 µs 6626
set: difference()gpu 3.55 µs3.59 µs 3.95 µs3.48 µs 43
iter: map()v3 28.5 µs30.3 µs 79.2 µs27.5 µs 22761
iter: map()gpu 10.3 µs10.4 µs 10.5 µs10.3 µs 12
iter: forEach()v3 3.50 µs3.83 µs 4.65 µs3.43 µs 36
iter: forEach()gpu 3.30 µs3.33 µs 3.44 µs3.25 µs 45
iter: filter(fn)v3 247 µs261 µs 520 µs242 µs 2684
iter: filter(fn)gpu 135 µs140 µs 212 µs131 µs 4976
compare: same()v3 116 µs122 µs 288 µs112 µs 5726
compare: same()gpu 14.9 ns15.7 ns 26.6 ns14.1 ns 10893
compare: contains()v3 5.95 µs5.94 µs 6.05 µs5.83 µs 25
compare: contains()gpu 1.24 µs1.25 µs 1.41 µs1.20 µs 130
mut: data setv3 603 ns621 ns 740 ns569 ns 269
mut: data setgpu 235 ns250 ns 571 ns229 ns 676
mut: position setv3 1.23 µs1.27 µs 1.84 µs1.14 µs 130
mut: position setgpu 52.7 ns56.8 ns 105 ns51.2 ns 2987
mut: select + unselectv3 2.53 µs2.70 µs 3.33 µs2.41 µs 57
mut: select + unselectgpu 604 ns613 ns 709 ns582 ns 263

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

sweep: nodes()
169449×
sweep: edges()
279324×
sweep: elements()
28192×
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}))
35×
sweep: nodes(":selected") vs nodes({selected})
60×
sweep: filter(fn)
1.68×
1 ns10 ns100 ns1 µs10 µs100 µs1 ms
All stats (table view)
groupbenchp50avgp99minsamples
sweep: nodes()v3 409 µs421 µs 579 µs399 µs 1667
sweep: nodes()gpu 2.41 ns2.50 ns 3.03 ns2.40 ns 66115
sweep: edges()v3 702 µs719 µs 915 µs680 µs 972
sweep: edges()gpu 2.51 ns2.63 ns 5.74 ns2.46 ns 63162
sweep: elements()v3 137 µs146 µs 238 µs125 µs 4796
sweep: elements()gpu 4.85 ns5.05 ns 10.8 ns4.65 ns 33467
sweep: all nodes ($("node") vs filter({group}))v3 543 µs573 µs 913 µs526 µs 1220
sweep: all nodes ($("node") vs filter({group}))gpu 57.6 µs71.7 µs 161 µs53.2 µs 9654
sweep: selected ($(":selected") vs filter({selected}))v3 332 µs343 µs 586 µs320 µs 2038
sweep: selected ($(":selected") vs filter({selected}))gpu 25.7 µs26.1 µs 26.5 µs25.3 µs 12
sweep: selected nodes ($("node:selected") vs filter({group, selected}))v3 317 µs329 µs 599 µs313 µs 2129
sweep: selected nodes ($("node:selected") vs filter({group, selected}))gpu 9.05 µs9.06 µs 9.28 µs8.85 µs 15
sweep: nodes(":selected") vs nodes({selected})v3 534 µs545 µs 740 µs520 µs 1284
sweep: nodes(":selected") vs nodes({selected})gpu 8.95 µs9.02 µs 9.45 µs8.82 µs 15
sweep: filter(fn)v3 407 µs420 µs 624 µs395 µs 1668
sweep: filter(fn)gpu 243 µs259 µs 557 µs237 µs 2683

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

mut-bulk: select + unselect
8.2×
mut-bulk: hide + show
274×
mut-bulk: lock + unlock
51×
mut-bulk: positions(obj)
61×
mut-bulk: positions(fn)
23×
mut-bulk: shift
106×
mut-bulk: data set
13×
mut-bulk: remove + re-add (256 nodes + cascade)
6.5×
10 µs100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
mut-bulk: select + unselectv3 2.00 ms2.04 ms 3.20 ms1.91 ms 327
mut-bulk: select + unselectgpu 243 µs251 µs 380 µs234 µs 2791
mut-bulk: hide + showv3 59.8 ms64.5 ms 70.5 ms57.2 ms 12
mut-bulk: hide + showgpu 218 µs225 µs 379 µs209 µs 3016
mut-bulk: lock + unlockv3 1.98 ms2.05 ms 3.52 ms1.91 ms 338
mut-bulk: lock + unlockgpu 38.9 µs39.1 µs 39.4 µs38.5 µs 12
mut-bulk: positions(obj)v3 2.25 ms2.30 ms 3.70 ms2.20 ms 299
mut-bulk: positions(obj)gpu 37.1 µs38.3 µs 70.2 µs35.8 µs 17695
mut-bulk: positions(fn)v3 3.37 ms3.58 ms 5.75 ms3.27 ms 192
mut-bulk: positions(fn)gpu 146 µs151 µs 230 µs139 µs 4476
mut-bulk: shiftv3 3.45 ms3.66 ms 5.58 ms3.33 ms 188
mut-bulk: shiftgpu 32.6 µs34.0 µs 65.8 µs31.2 µs 19768
mut-bulk: data setv3 853 µs868 µs 1.11 ms820 µs 780
mut-bulk: data setgpu 63.5 µs66.4 µs 135 µs61.1 µs 10516
mut-bulk: remove + re-add (256 nodes + cascade)v3 44.3 ms46.7 ms 53.8 ms41.0 ms 11
mut-bulk: remove + re-add (256 nodes + cascade)gpu 6.81 ms6.90 ms 8.11 ms6.15 ms 95

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

scn: explore (expand 2-hop + select + fit)
7.7×
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)
6.6×
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)
1.83×
10 µs100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
scn: explore (expand 2-hop + select + fit)v3 290 µs337 µs 920 µs271 µs 2062
scn: explore (expand 2-hop + select + fit)gpu 37.8 µs41.8 µs 118 µs34.4 µs 16483
scn: select-all + fit (listeners on)v3 24.5 ms24.4 ms 26.4 ms22.1 ms 24
scn: select-all + fit (listeners on)gpu 944 µs984 µs 1.45 ms897 µs 684
scn: drag (select band of 100 + 8-step shift, position listener)v3 1.64 ms1.73 ms 3.53 ms1.58 ms 387
scn: drag (select band of 100 + 8-step shift, position listener)gpu 99.7 µs104 µs 173 µs97.6 µs 6450
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners)v3 45.5 ms45.7 ms 46.4 ms43.7 ms 11
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners)gpu 6.93 ms7.12 ms 9.06 ms6.31 ms 92
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)v3 7.73 ms8.28 ms 11.1 ms7.22 ms 78
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)gpu 4.23 ms4.36 ms 7.36 ms3.75 ms 147

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

trav: neighborhood()
4.0×
trav: closedNeighborhood()
2.9×
trav: connectedEdges()
2.6×
trav: outgoers()
5.3×
trav: incomers()
5.4×
trav: successors()
794×
trav: predecessors()
753×
trav: band neighborhood()
5.1×
trav: band connectedEdges()
1.48×
trav: band roots()
23×
trav: band sources()
1.49×
trav: band connectedNodes()
2.8×
100 ns1 µs10 µs100 µs1 ms10 ms100 ms1 s
All stats (table view)
groupbenchp50avgp99minsamples
trav: neighborhood()v3 4.00 µs4.22 µs 5.68 µs3.48 µs 36
trav: neighborhood()gpu 990 ns1.04 µs 2.01 µs835 ns 158
trav: closedNeighborhood()v3 6.01 µs5.85 µs 6.29 µs5.30 µs 25
trav: closedNeighborhood()gpu 2.10 µs2.27 µs 2.89 µs2.06 µs 71
trav: connectedEdges()v3 1.01 µs1.12 µs 1.98 µs981 ns 148
trav: connectedEdges()gpu 389 ns403 ns 688 ns380 ns 420
trav: outgoers()v3 2.35 µs2.51 µs 3.09 µs2.27 µs 64
trav: outgoers()gpu 442 ns526 ns 2.01 µs432 ns 316
trav: incomers()v3 2.34 µs2.50 µs 3.10 µs2.28 µs 64
trav: incomers()gpu 436 ns523 ns 2.01 µs433 ns 315
trav: successors()v3 442 ms446 ms 454 ms435 ms 12
trav: successors()gpu 557 µs588 µs 1.75 ms543 µs 1156
trav: predecessors()v3 436 ms440 ms 451 ms433 ms 12
trav: predecessors()gpu 579 µs612 µs 1.54 ms559 µs 1113
trav: band neighborhood()v3 192 µs204 µs 279 µs185 µs 3415
trav: band neighborhood()gpu 37.3 µs37.9 µs 39.6 µs36.9 µs 12
trav: band connectedEdges()v3 24.7 µs24.9 µs 25.5 µs23.7 µs 12
trav: band connectedEdges()gpu 16.6 µs17.4 µs 20.1 µs16.4 µs 12
trav: band roots()v3 114 µs124 µs 207 µs110 µs 5612
trav: band roots()gpu 4.87 µs4.90 µs 5.12 µs4.80 µs 31
trav: band sources()v3 6.51 µs6.53 µs 7.07 µs6.28 µs 22
trav: band sources()gpu 4.38 µs4.42 µs 4.61 µs4.28 µs 34
trav: band connectedNodes()v3 14.0 µs14.0 µs 14.1 µs13.8 µs 9
trav: band connectedNodes()gpu 4.95 µs5.01 µs 5.26 µs4.85 µs 30

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

algo: bfs (whole graph)
55×
algo: dfs (whole graph)
59×
algo: dijkstra + pathTo
56×
algo: aStar
3.4×
algo: bellmanFord
19×
algo: kruskal
27×
algo: tarjan SCC
37×
algo: hopcroft-tarjan biconnected
25×
algo: hierholzer (directed)
2.8×
algo: betweennessCentrality (unweighted)
11×
algo: degreeCentralityNormalized
37×
algo: closenessCentrality (one root)
72×
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.1 ms51.9 ms 56.4 ms48.1 ms 10
algo: bfs (whole graph)gpu 911 µs928 µs 1.39 ms849 µs 747
algo: dfs (whole graph)v3 48.6 ms48.8 ms 50.0 ms47.9 ms 11
algo: dfs (whole graph)gpu 818 µs841 µs 1.12 ms806 µs 818
algo: dijkstra + pathTov3 52.1 ms52.1 ms 52.7 ms50.9 ms 10
algo: dijkstra + pathTogpu 927 µs942 µs 1.22 ms881 µs 738
algo: aStarv3 1.72 ms1.75 ms 2.35 ms1.67 ms 387
algo: aStargpu 505 µs520 µs 661 µs488 µs 1341
algo: bellmanFordv3 230 ms225 ms 244 ms206 ms 12
algo: bellmanFordgpu 11.8 ms11.9 ms 12.9 ms11.6 ms 55
algo: kruskalv3 13.2 ms14.2 ms 17.0 ms12.6 ms 45
algo: kruskalgpu 493 µs528 µs 892 µs469 µs 1313
algo: tarjan SCCv3 22.7 ms23.5 ms 26.0 ms21.2 ms 26
algo: tarjan SCCgpu 611 µs657 µs 1.16 ms591 µs 1035
algo: hopcroft-tarjan biconnectedv3 85.0 ms87.0 ms 94.9 ms81.1 ms 12
algo: hopcroft-tarjan biconnectedgpu 3.44 ms3.54 ms 4.80 ms3.35 ms 192
algo: hierholzer (directed)v3 22.0 ms23.2 ms 26.4 ms21.2 ms 26
algo: hierholzer (directed)gpu 7.89 ms8.22 ms 13.5 ms7.69 ms 73
algo: betweennessCentrality (unweighted)v3 4.02 s4.03 s 4.09 s3.98 s 12
algo: betweennessCentrality (unweighted)gpu 357 ms372 ms 438 ms338 ms 12
algo: degreeCentralityNormalizedv3 14.7 ms15.5 ms 18.9 ms13.9 ms 41
algo: degreeCentralityNormalizedgpu 396 µs406 µs 606 µs384 µs 1721
algo: closenessCentrality (one root)v3 59.5 ms61.9 ms 67.3 ms58.3 ms 12
algo: closenessCentrality (one root)gpu 825 µs861 µs 1.43 ms797 µs 813
algo: degreeCentrality (one root)v3 7.43 µs7.33 µs 7.78 µs6.59 µs 20
algo: degreeCentrality (one root)gpu 247 ns252 ns 305 ns241 ns 672

algorithms N=500 · 10.3 minv4 (gpu) v3

algo: bfs (whole graph)
67×
algo: dfs (whole graph)
60×
algo: dijkstra + pathTo
51×
algo: aStar
3.6×
algo: bellmanFord
21×
algo: kruskal
23×
algo: tarjan SCC
35×
algo: hopcroft-tarjan biconnected
25×
algo: hierholzer (directed)
5.3×
algo: betweennessCentrality (unweighted)
13×
algo: degreeCentralityNormalized
37×
algo: closenessCentrality (one root)
69×
algo: degreeCentrality (one root)
31×
algo: pageRank (20 iters)
70×
algo: closenessCentrality (weighted, one root)
53×
algo: floydWarshall
1.76×
algo: closenessCentralityNormalized
1.65×
algo: markovClustering
1.10×
algo: hierarchicalClustering (threshold)
8.4×
algo: kMeans (fixed centroids)
4.3×
algo: kMedoids
10×
algo: fuzzyCMeans
11×
algo: affinityPropagation
5.3×
algo: kargerStein
1.07×
algo: betweennessCentrality (weighted)
9.0×
100 ns1 µs10 µs100 µs1 ms10 ms100 ms1 s10 s
All stats (table view)
groupbenchp50avgp99minsamples
algo: bfs (whole graph)v3 12.9 ms13.5 ms 20.1 ms10.7 ms 47
algo: bfs (whole graph)gpu 194 µs197 µs 271 µs182 µs 3552
algo: dfs (whole graph)v3 11.4 ms12.4 ms 16.4 ms11.0 ms 53
algo: dfs (whole graph)gpu 191 µs196 µs 266 µs188 µs 3572
algo: dijkstra + pathTov3 12.0 ms12.7 ms 15.7 ms11.4 ms 51
algo: dijkstra + pathTogpu 233 µs239 µs 291 µs226 µs 2931
algo: aStarv3 439 µs449 µs 555 µs424 µs 1559
algo: aStargpu 121 µs124 µs 174 µs117 µs 5625
algo: bellmanFordv3 17.2 ms17.3 ms 18.2 ms17.0 ms 37
algo: bellmanFordgpu 810 µs836 µs 1.92 ms805 µs 832
algo: kruskalv3 3.21 ms3.50 ms 7.09 ms3.11 ms 191
algo: kruskalgpu 139 µs143 µs 203 µs136 µs 4884
algo: tarjan SCCv3 5.40 ms5.81 ms 9.23 ms5.27 ms 115
algo: tarjan SCCgpu 156 µs164 µs 277 µs151 µs 4258
algo: hopcroft-tarjan biconnectedv3 20.5 ms21.2 ms 23.9 ms19.0 ms 29
algo: hopcroft-tarjan biconnectedgpu 821 µs844 µs 1.19 ms802 µs 825
algo: hierholzer (directed)v3 4.24 ms4.51 ms 7.24 ms4.11 ms 148
algo: hierholzer (directed)gpu 806 µs827 µs 1.15 ms791 µs 823
algo: betweennessCentrality (unweighted)v3 258 ms260 ms 270 ms254 ms 12
algo: betweennessCentrality (unweighted)gpu 20.5 ms20.9 ms 23.5 ms19.8 ms 29
algo: degreeCentralityNormalizedv3 3.50 ms3.84 ms 7.52 ms3.42 ms 178
algo: degreeCentralityNormalizedgpu 93.9 µs96.3 µs 138 µs92.5 µs 7258
algo: closenessCentrality (one root)v3 13.6 ms14.6 ms 18.2 ms13.1 ms 44
algo: closenessCentrality (one root)gpu 199 µs206 µs 311 µs192 µs 3396
algo: degreeCentrality (one root)v3 7.46 µs7.39 µs 8.27 µs6.56 µs 19
algo: degreeCentrality (one root)gpu 239 ns245 ns 345 ns233 ns 692
algo: pageRank (20 iters)v3 2.76 ms2.88 ms 5.89 ms2.69 ms 238
algo: pageRank (20 iters)gpu 39.6 µs45.1 µs 167 µs38.4 µs 15359
algo: closenessCentrality (weighted, one root)v3 13.8 ms14.9 ms 18.4 ms13.3 ms 43
algo: closenessCentrality (weighted, one root)gpu 259 µs265 µs 324 µs252 µs 2646
algo: floydWarshallv3 247 ms272 ms 384 ms244 ms 12
algo: floydWarshallgpu 140 ms157 ms 212 ms137 ms 12
algo: closenessCentralityNormalizedv3 276 ms276 ms 280 ms271 ms 12
algo: closenessCentralityNormalizedgpu 167 ms169 ms 171 ms166 ms 12
algo: markovClusteringv3 4.12 s4.37 s 4.67 s4.07 s 12
algo: markovClusteringgpu 3.75 s3.76 s 3.80 s3.73 s 12
algo: hierarchicalClustering (threshold)v3 34.8 ms34.8 ms 35.1 ms34.5 ms 16
algo: hierarchicalClustering (threshold)gpu 4.16 ms4.29 ms 5.81 ms4.05 ms 157
algo: kMeans (fixed centroids)v3 9.01 ms9.09 ms 9.70 ms8.81 ms 73
algo: kMeans (fixed centroids)gpu 2.10 ms2.16 ms 3.28 ms2.07 ms 320
algo: kMedoidsv3 350 ms307 ms 393 ms107 ms 12
algo: kMedoidsgpu 34.9 ms34.7 ms 46.0 ms16.4 ms 17
algo: fuzzyCMeansv3 79.0 ms80.1 ms 82.1 ms77.9 ms 12
algo: fuzzyCMeansgpu 7.21 ms7.27 ms 7.72 ms7.02 ms 93
algo: affinityPropagationv3 210 ms216 ms 244 ms201 ms 12
algo: affinityPropagationgpu 39.3 ms39.6 ms 40.7 ms38.6 ms 11
algo: kargerSteinv3 323 ms323 ms 337 ms312 ms 12
algo: kargerSteingpu 303 ms305 ms 313 ms298 ms 12
algo: betweennessCentrality (weighted)v3 725 ms730 ms 744 ms714 ms 12
algo: betweennessCentrality (weighted)gpu 80.4 ms82.6 ms 84.7 ms77.6 ms 12

mappers N=2,000 · 24.5 s

mapper: bulk write, color — cpu eval
2.53 ms
mapper: bulk write, color — gpu path
175 µs
mapper: bulk write, color + size — cpu eval
2.91 ms
mapper: bulk write, color + size — gpu color / cpu size
2.53 ms
mapper: bulk write, mapped labels (round-5 path) — label refresh
3.97 ms
100 µs1 ms10 ms
All stats (table view)
groupbenchp50avgp99minsamples
mapper: bulk write, colorcpu eval 2.53 ms2.60 ms 4.38 ms2.43 ms 261
mapper: bulk write, colorgpu path 175 µs182 µs 313 µs172 µs 3844
mapper: bulk write, color + sizecpu eval 2.91 ms2.96 ms 3.45 ms2.79 ms 229
mapper: bulk write, color + sizegpu color / cpu size 2.53 ms2.55 ms 2.98 ms2.44 ms 272
mapper: bulk write, mapped labels (round-5 path)label refresh 3.97 ms4.15 ms 6.84 ms3.52 ms 162