Cytoscape.js GPU benchmarks

v4 (src/) vs v3 (v3/src/) · Mitata · times are per-iteration p50 · 2026-08-05 18:11 · dc6d3505 (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)
Commitdc6d3505
refactor(status): drop an unused parameter from the benchmark trend table
Machine id2d2ea233
Median speedup (geo-mean) 13× 106 v3-vs-gpu comparisons
Biggest win 22101× 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
22101×
core: elements() @ 2k
16358×
sweep: nodes() @ 2k
14035×
compare: same() @ 2k
9525×
sweep: edges() @ 2k
7671×
core: nodes() @ 2k
4663×
sweep: elements() @ 2k
1486×
trav: successors() @ 2k
794×
trav: predecessors() @ 2k
745×
mut-bulk: hide + show @ 2k
267×
degree: nodes.totalDegree() @ 2k
196×
degree: nodes.maxDegree() @ 2k
150×
degree: node.degree() @ 2k
140×
mut-bulk: positions(obj) @ 2k
126×
mut-bulk: shift @ 2k
118×
mut-bulk: positions(fn) @ 2k
99×
mut-bulk: lock + unlock @ 2k
74×
sweep: nodes(":selected") vs nodes({selected}) @ 2k
61×
algo: dfs (whole graph) @ 500
49×
algo: bfs (whole graph) @ 500
47×
algo: dfs (whole graph) @ 2k
46×
algo: closenessCentrality (one root) @ 2k
45×
algo: dijkstra + pathTo @ 2k
43×
algo: dijkstra + pathTo @ 500
41×
algo: bfs (whole graph) @ 2k
41×
algo: closenessCentrality (one root) @ 500
41×
traverse: components() @ 2k
39×
mut-bulk: select + unselect @ 2k
38×
sweep: selected nodes ($("node:selected") vs filter({group, selected})) @ 2k
37×
algo: closenessCentrality (weighted, one root) @ 500
35×
scn: select-all + fit (listeners on) @ 2k
35×
core: id lookup ($("#id") vs $id()) @ 2k
31×
set: difference() @ 2k
28×
set: intersection() @ 2k
27×
algo: tarjan SCC @ 2k
25×
algo: hopcroft-tarjan biconnected @ 500
24×
algo: hopcroft-tarjan biconnected @ 2k
24×
mut: select + unselect @ 2k
23×
algo: tarjan SCC @ 500
23×
algo: degreeCentralityNormalized @ 2k
23×
trav: band roots() @ 2k
22×
algo: degreeCentralityNormalized @ 500
22×
mut: position set @ 2k
20×
algo: bellmanFord @ 2k
19×
algo: bellmanFord @ 500
18×
scn: drag (select band of 100 + 8-step shift, position listener) @ 2k
18×
algo: kruskal @ 2k
17×
algo: kruskal @ 500
16×
core: add + remove @ 2k
16×
mut-bulk: data set @ 2k
15×
core: selected ($(":selected") vs filter({selected})) @ 2k
14×
sweep: selected ($(":selected") vs filter({selected})) @ 2k
13×
algo: betweennessCentrality (unweighted) @ 500
13×
scn: explore (expand 2-hop + select + fit) @ 2k
12×
algo: betweennessCentrality (unweighted) @ 2k
12×
algo: betweennessCentrality (weighted) @ 500
9.1×
core: collection() @ 2k
8.4×
core: nodes ($("node") vs filter({group})) @ 2k
7.0×
sweep: all nodes ($("node") vs filter({group})) @ 2k
6.5×
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners) @ 2k
6.0×
mut-bulk: remove + re-add (256 nodes + cascade) @ 2k
5.9×
set: union() @ 2k
5.7×
trav: outgoers() @ 2k
5.5×
trav: incomers() @ 2k
5.4×
traverse: outgoers() @ 2k
5.3×
traverse: incomers() @ 2k
5.3×
trav: band neighborhood() @ 2k
5.2×
compare: contains() @ 2k
4.9×
algo: hierholzer (directed) @ 500
4.6×
traverse: neighborhood() @ 2k
4.3×
trav: neighborhood() @ 2k
4.1×
algo: hierholzer (directed) @ 2k
2.8×
trav: band connectedNodes() @ 2k
2.8×
trav: closedNeighborhood() @ 2k
2.8×
iter: map() @ 2k
2.6×
trav: connectedEdges() @ 2k
2.3×
algo: aStar @ 500
2.3×
iter: filter(fn) @ 2k
2.2×
algo: aStar @ 2k
2.2×
traverse: connectedEdges() @ 2k
2.1×
core: zoom set @ 2k
1.85×
algo: affinityPropagation @ 500
1.84×
algo: pageRank (20 iters) @ 500
1.83×
scn: refresh (bulk data write + mapped labels + filter + fit, data listener) @ 2k
1.81×
core: filter(fn) @ 2k
1.65×
trav: band sources() @ 2k
1.60×
sweep: filter(fn) @ 2k
1.58×
algo: markovClustering @ 500
1.38×
algo: fuzzyCMeans @ 500
1.04×
data: get @ 2k
1.04×
algo: kargerStein @ 500
1.03×
algo: kMedoids @ 500
1.02×
iter: forEach() @ 2k
1.01×
core: extent() @ 2k
1.01×
algo: hierarchicalClustering (threshold) @ 500
1.00×
algo: kMeans (fixed centroids) @ 500
0.99×
core: pan() get @ 2k
0.96×
core: getElementById() @ 2k
0.89×
algo: closenessCentralityNormalized @ 500
0.86×
trav: band connectedEdges() @ 2k
0.86×
json: element @ 2k
0.85×
algo: floydWarshall @ 500
0.84×
position: get @ 2k
0.74×
mut: data set @ 2k
0.64×
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)47×41×
algo: dfs (whole graph)49×46×
algo: dijkstra + pathTo41×43×
algo: aStar2.3×2.2×
algo: bellmanFord18×19×
algo: kruskal16×17×
algo: tarjan SCC23×25×
algo: hopcroft-tarjan biconnected24×24×
algo: hierholzer (directed)4.6×2.8×
algo: betweennessCentrality (unweighted)13×12×
algo: degreeCentralityNormalized22×23×
algo: closenessCentrality (one root)41×45×
algo: degreeCentrality (one root)0.11×0.03×
algo: pageRank (20 iters)1.83×
algo: closenessCentrality (weighted, one root)35×
algo: floydWarshall0.84×
algo: closenessCentralityNormalized0.86×
algo: markovClustering1.38×
algo: hierarchicalClustering (threshold)1.00×
algo: kMeans (fixed centroids)0.99×
algo: kMedoids1.02×
algo: fuzzyCMeans1.04×
algo: affinityPropagation1.84×
algo: kargerStein1.03×
algo: betweennessCentrality (weighted)9.1×

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

core: getElementById()
0.89×
core: id lookup ($("#id") vs $id())
31×
core: nodes()
4663×
core: edges()
22101×
core: elements()
16358×
core: nodes ($("node") vs filter({group}))
7.0×
core: selected ($(":selected") vs filter({selected}))
14×
core: filter(fn)
1.65×
core: collection()
8.4×
core: pan() get
0.96×
core: extent()
1.01×
core: add + remove
16×
core: zoom set
1.85×
traverse: neighborhood()
4.3×
traverse: connectedEdges()
2.1×
traverse: outgoers()
5.3×
traverse: incomers()
5.3×
traverse: components()
39×
degree: node.degree()
140×
degree: nodes.totalDegree()
196×
degree: nodes.maxDegree()
150×
data: get
1.04×
position: get
0.74×
json: element
0.85×
set: union()
5.7×
set: intersection()
27×
set: difference()
28×
iter: map()
2.6×
iter: forEach()
1.01×
iter: filter(fn)
2.2×
compare: same()
9525×
compare: contains()
4.9×
mut: data set
0.64×
mut: position set
20×
mut: select + unselect
23×
1 ns10 ns100 ns1 µs10 µs100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
core: getElementById()v3 83.1 ns85.9 ns 137 ns78.2 ns 1995
core: getElementById()gpu 93.5 ns98.1 ns 204 ns76.9 ns 1740
core: id lookup ($("#id") vs $id())v3 2.63 µs2.97 µs 7.05 µs2.44 µs 189744
core: id lookup ($("#id") vs $id())gpu 84.7 ns84.2 ns 163 ns71.0 ns 1982
core: nodes()v3 415 µs437 µs 824 µs404 µs 1594
core: nodes()gpu 89.0 ns92.5 ns 165 ns44.0 ns 1922888
core: edges()v3 729 µs759 µs 1.35 ms710 µs 902
core: edges()gpu 33.0 ns62.9 ns 235 ns28.0 ns 2191273
core: elements()v3 139 µs146 µs 250 µs136 µs 4772
core: elements()gpu 8.49 ns9.46 ns 17.9 ns7.94 ns 17962
core: nodes ($("node") vs filter({group}))v3 545 µs601 µs 1.20 ms528 µs 1162
core: nodes ($("node") vs filter({group}))gpu 77.9 µs77.2 µs 176 µs52.9 µs 8848
core: selected ($(":selected") vs filter({selected}))v3 354 µs375 µs 714 µs340 µs 1843
core: selected ($(":selected") vs filter({selected}))gpu 25.2 µs25.7 µs 26.3 µs24.4 µs 12
core: filter(fn)v3 424 µs477 µs 881 µs413 µs 1465
core: filter(fn)gpu 257 µs287 µs 666 µs248 µs 2420
core: collection()v3 461 ns562 ns 1.71 µs451 ns 294
core: collection()gpu 54.8 ns60.4 ns 145 ns52.6 ns 2797
core: pan() getv3 6.31 ns6.96 ns 14.0 ns6.20 ns 24300
core: pan() getgpu 6.57 ns7.26 ns 13.5 ns6.22 ns 23379
core: extent()v3 21.9 ns28.2 ns 118 ns20.8 ns 5964
core: extent()gpu 21.7 ns29.0 ns 90.0 ns20.7 ns 5741
core: add + removev3 122 µs128 µs 264 µs112 µs 5401
core: add + removegpu 7.37 µs8.55 µs 20.5 µs6.90 µs 74198
core: zoom setv3 1.23 µs1.25 µs 1.46 µs1.16 µs 132
core: zoom setgpu 662 ns719 ns 1.28 µs642 ns 223
traverse: neighborhood()v3 3.70 µs4.03 µs 5.11 µs3.42 µs 37
traverse: neighborhood()gpu 862 ns985 ns 2.10 µs826 ns 166
traverse: connectedEdges()v3 1.01 µs1.10 µs 2.19 µs971 ns 147
traverse: connectedEdges()gpu 471 ns563 ns 1.90 µs459 ns 288
traverse: outgoers()v3 2.30 µs2.50 µs 3.25 µs2.23 µs 62
traverse: outgoers()gpu 432 ns519 ns 2.03 µs422 ns 312
traverse: incomers()v3 2.31 µs2.50 µs 3.36 µs2.22 µs 62
traverse: incomers()gpu 438 ns524 ns 2.05 µs427 ns 304
traverse: components()v3 78.9 ms82.3 ms 91.7 ms74.8 ms 12
traverse: components()gpu 2.03 ms2.21 ms 3.66 ms1.95 ms 300
degree: node.degree()v3 3.50 µs3.70 µs 4.69 µs3.21 µs 42
degree: node.degree()gpu 25.0 ns25.9 ns 45.6 ns24.2 ns 6234
degree: nodes.totalDegree()v3 7.46 ms8.17 ms 12.3 ms6.90 ms 81
degree: nodes.totalDegree()gpu 38.0 µs38.9 µs 67.5 µs36.6 µs 17008
degree: nodes.maxDegree()v3 7.82 ms8.59 ms 13.0 ms6.94 ms 77
degree: nodes.maxDegree()gpu 52.0 µs53.3 µs 76.1 µs50.2 µs 13133
data: getv3 25.8 ns27.4 ns 66.6 ns24.3 ns 6237
data: getgpu 24.8 ns26.4 ns 50.8 ns24.0 ns 6455
position: getv3 23.8 ns25.2 ns 44.3 ns23.2 ns 6763
position: getgpu 32.0 ns35.6 ns 70.8 ns29.7 ns 4716
json: elementv3 292 ns387 ns 3.57 µs285 ns 424
json: elementgpu 342 ns386 ns 861 ns334 ns 414
set: union()v3 94.3 µs106 µs 186 µs89.2 µs 6428
set: union()gpu 16.6 µs17.2 µs 17.6 µs16.1 µs 12
set: intersection()v3 88.5 µs98.1 µs 148 µs86.9 µs 7064
set: intersection()gpu 3.27 µs3.34 µs 3.95 µs3.22 µs 46
set: difference()v3 90.8 µs104 µs 162 µs87.7 µs 6634
set: difference()gpu 3.23 µs3.25 µs 3.49 µs3.15 µs 47
iter: map()v3 26.3 µs27.8 µs 50.9 µs25.2 µs 24393
iter: map()gpu 10.2 µs10.3 µs 10.7 µs10.0 µs 13
iter: forEach()v3 3.49 µs3.72 µs 3.74 µs3.44 µs 36
iter: forEach()gpu 3.44 µs3.50 µs 3.68 µs3.41 µs 43
iter: filter(fn)v3 224 µs234 µs 295 µs220 µs 2973
iter: filter(fn)gpu 99.9 µs103 µs 151 µs98.4 µs 6791
compare: same()v3 114 µs116 µs 157 µs108 µs 6042
compare: same()gpu 12.0 ns12.7 ns 24.5 ns11.4 ns 13441
compare: contains()v3 6.11 µs6.28 µs 10.7 µs5.64 µs 106821
compare: contains()gpu 1.25 µs1.26 µs 1.45 µs1.21 µs 128
mut: data setv3 479 ns495 ns 664 ns464 ns 338
mut: data setgpu 744 ns761 ns 1.10 µs715 ns 217
mut: position setv3 1.20 µs1.22 µs 1.41 µs1.16 µs 135
mut: position setgpu 59.0 ns62.7 ns 107 ns57.1 ns 2688
mut: select + unselectv3 2.46 µs2.65 µs 3.41 µs2.38 µs 60
mut: select + unselectgpu 106 ns113 ns 210 ns102 ns 1501

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

sweep: nodes()
14035×
sweep: edges()
7671×
sweep: elements()
1486×
sweep: all nodes ($("node") vs filter({group}))
6.5×
sweep: selected ($(":selected") vs filter({selected}))
13×
sweep: selected nodes ($("node:selected") vs filter({group, selected}))
37×
sweep: nodes(":selected") vs nodes({selected})
61×
sweep: filter(fn)
1.58×
10 ns100 ns1 µs10 µs100 µs1 ms
All stats (table view)
groupbenchp50avgp99minsamples
sweep: nodes()v3 421 µs434 µs 676 µs409 µs 1614
sweep: nodes()gpu 30.0 ns31.5 ns 50.0 ns27.0 ns 1938679
sweep: edges()v3 729 µs735 µs 870 µs691 µs 949
sweep: edges()gpu 95.0 ns96.7 ns 101 ns47.0 ns 1996569
sweep: elements()v3 141 µs146 µs 209 µs131 µs 4789
sweep: elements()gpu 95.0 ns98.0 ns 163 ns42.0 ns 1940217
sweep: all nodes ($("node") vs filter({group}))v3 543 µs580 µs 1.07 ms536 µs 1201
sweep: all nodes ($("node") vs filter({group}))gpu 83.2 µs79.3 µs 181 µs57.8 µs 8733
sweep: selected ($(":selected") vs filter({selected}))v3 340 µs347 µs 491 µs330 µs 2008
sweep: selected ($(":selected") vs filter({selected}))gpu 25.2 µs25.9 µs 26.6 µs24.9 µs 12
sweep: selected nodes ($("node:selected") vs filter({group, selected}))v3 325 µs332 µs 506 µs315 µs 2110
sweep: selected nodes ($("node:selected") vs filter({group, selected}))gpu 8.71 µs8.82 µs 9.06 µs8.64 µs 16
sweep: nodes(":selected") vs nodes({selected})v3 527 µs542 µs 827 µs511 µs 1292
sweep: nodes(":selected") vs nodes({selected})gpu 8.65 µs8.70 µs 8.88 µs8.59 µs 16
sweep: filter(fn)v3 415 µs421 µs 512 µs404 µs 1660
sweep: filter(fn)gpu 263 µs281 µs 578 µs255 µs 2471

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

mut-bulk: select + unselect
38×
mut-bulk: hide + show
267×
mut-bulk: lock + unlock
74×
mut-bulk: positions(obj)
126×
mut-bulk: positions(fn)
99×
mut-bulk: shift
118×
mut-bulk: data set
15×
mut-bulk: remove + re-add (256 nodes + cascade)
5.9×
10 µs100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
mut-bulk: select + unselectv3 1.81 ms1.86 ms 3.12 ms1.76 ms 359
mut-bulk: select + unselectgpu 47.9 µs49.5 µs 85.0 µs44.7 µs 14074
mut-bulk: hide + showv3 59.7 ms65.1 ms 69.6 ms57.4 ms 12
mut-bulk: hide + showgpu 223 µs229 µs 352 µs217 µs 2939
mut-bulk: lock + unlockv3 2.21 ms2.27 ms 3.47 ms2.16 ms 304
mut-bulk: lock + unlockgpu 29.8 µs31.3 µs 35.0 µs29.5 µs 12
mut-bulk: positions(obj)v3 2.27 ms2.33 ms 3.68 ms2.23 ms 294
mut-bulk: positions(obj)gpu 18.0 µs19.3 µs 40.2 µs16.4 µs 35740
mut-bulk: positions(fn)v3 3.43 ms3.63 ms 5.73 ms3.38 ms 188
mut-bulk: positions(fn)gpu 34.7 µs36.6 µs 85.1 µs33.1 µs 18482
mut-bulk: shiftv3 3.56 ms3.71 ms 5.03 ms3.48 ms 181
mut-bulk: shiftgpu 30.1 µs32.5 µs 63.7 µs28.6 µs 21303
mut-bulk: data setv3 921 µs953 µs 1.63 ms903 µs 725
mut-bulk: data setgpu 60.4 µs64.5 µs 149 µs57.5 µs 10739
mut-bulk: remove + re-add (256 nodes + cascade)v3 40.8 ms43.8 ms 53.5 ms39.1 ms 12
mut-bulk: remove + re-add (256 nodes + cascade)gpu 6.94 ms7.06 ms 8.38 ms6.27 ms 93

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

scn: explore (expand 2-hop + select + fit)
12×
scn: select-all + fit (listeners on)
35×
scn: drag (select band of 100 + 8-step shift, position listener)
18×
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners)
6.0×
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)
1.81×
10 µs100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
scn: explore (expand 2-hop + select + fit)v3 296 µs345 µs 953 µs272 µs 2010
scn: explore (expand 2-hop + select + fit)gpu 25.3 µs28.6 µs 95.7 µs22.5 µs 23685
scn: select-all + fit (listeners on)v3 24.1 ms24.3 ms 25.9 ms23.1 ms 24
scn: select-all + fit (listeners on)gpu 695 µs757 µs 1.36 ms662 µs 913
scn: drag (select band of 100 + 8-step shift, position listener)v3 1.66 ms1.69 ms 2.18 ms1.65 ms 395
scn: drag (select band of 100 + 8-step shift, position listener)gpu 91.2 µs93.0 µs 136 µs88.3 µs 7204
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners)v3 43.7 ms44.0 ms 45.5 ms42.1 ms 12
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners)gpu 7.26 ms7.57 ms 11.8 ms6.55 ms 86
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)v3 7.55 ms8.10 ms 12.9 ms7.03 ms 81
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)gpu 4.17 ms4.28 ms 7.34 ms3.66 ms 150

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

trav: neighborhood()
4.1×
trav: closedNeighborhood()
2.8×
trav: connectedEdges()
2.3×
trav: outgoers()
5.5×
trav: incomers()
5.4×
trav: successors()
794×
trav: predecessors()
745×
trav: band neighborhood()
5.2×
trav: band connectedEdges()
0.86×
trav: band roots()
22×
trav: band sources()
1.60×
trav: band connectedNodes()
2.8×
100 ns1 µs10 µs100 µs1 ms10 ms100 ms1 s
All stats (table view)
groupbenchp50avgp99minsamples
trav: neighborhood()v3 3.84 µs4.03 µs 5.21 µs3.38 µs 39
trav: neighborhood()gpu 941 ns987 ns 1.97 µs785 ns 167
trav: closedNeighborhood()v3 5.70 µs5.78 µs 6.88 µs5.25 µs 26
trav: closedNeighborhood()gpu 2.07 µs2.25 µs 2.91 µs2.01 µs 71
trav: connectedEdges()v3 1.03 µs1.11 µs 1.87 µs1.01 µs 150
trav: connectedEdges()gpu 438 ns447 ns 706 ns427 ns 370
trav: outgoers()v3 2.28 µs2.42 µs 2.98 µs2.20 µs 64
trav: outgoers()gpu 416 ns499 ns 2.00 µs407 ns 333
trav: incomers()v3 2.32 µs2.45 µs 3.00 µs2.25 µs 65
trav: incomers()gpu 427 ns509 ns 2.02 µs420 ns 324
trav: successors()v3 433 ms434 ms 438 ms426 ms 12
trav: successors()gpu 545 µs576 µs 1.79 ms531 µs 1181
trav: predecessors()v3 425 ms429 ms 441 ms419 ms 12
trav: predecessors()gpu 571 µs604 µs 1.74 ms549 µs 1144
trav: band neighborhood()v3 186 µs197 µs 294 µs179 µs 3532
trav: band neighborhood()gpu 35.6 µs37.7 µs 67.7 µs34.3 µs 18339
trav: band connectedEdges()v3 24.5 µs24.8 µs 25.2 µs24.1 µs 12
trav: band connectedEdges()gpu 28.6 µs29.6 µs 32.0 µs28.4 µs 12
trav: band roots()v3 109 µs117 µs 155 µs105 µs 5938
trav: band roots()gpu 4.84 µs4.83 µs 5.00 µs4.70 µs 31
trav: band sources()v3 7.19 µs7.21 µs 7.42 µs6.94 µs 20
trav: band sources()gpu 4.49 µs4.75 µs 5.47 µs4.32 µs 32
trav: band connectedNodes()v3 14.0 µs14.4 µs 14.2 µs13.6 µs 12
trav: band connectedNodes()gpu 5.03 µs5.25 µs 5.86 µs4.88 µs 29

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

algo: bfs (whole graph)
41×
algo: dfs (whole graph)
46×
algo: dijkstra + pathTo
43×
algo: aStar
2.2×
algo: bellmanFord
19×
algo: kruskal
17×
algo: tarjan SCC
25×
algo: hopcroft-tarjan biconnected
24×
algo: hierholzer (directed)
2.8×
algo: betweennessCentrality (unweighted)
12×
algo: degreeCentralityNormalized
23×
algo: closenessCentrality (one root)
45×
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 49.1 ms51.8 ms 58.0 ms48.3 ms 10
algo: bfs (whole graph)gpu 1.20 ms1.24 ms 1.69 ms1.17 ms 547
algo: dfs (whole graph)v3 48.6 ms48.9 ms 49.4 ms48.0 ms 11
algo: dfs (whole graph)gpu 1.06 ms1.08 ms 1.42 ms1.03 ms 636
algo: dijkstra + pathTov3 51.6 ms51.8 ms 52.7 ms50.4 ms 10
algo: dijkstra + pathTogpu 1.21 ms1.23 ms 1.61 ms1.18 ms 563
algo: aStarv3 1.73 ms1.77 ms 2.60 ms1.64 ms 391
algo: aStargpu 784 µs800 µs 1.31 ms757 µs 871
algo: bellmanFordv3 232 ms230 ms 248 ms207 ms 12
algo: bellmanFordgpu 11.9 ms12.5 ms 16.3 ms11.8 ms 50
algo: kruskalv3 12.9 ms13.8 ms 17.9 ms12.3 ms 46
algo: kruskalgpu 766 µs787 µs 1.19 ms710 µs 871
algo: tarjan SCCv3 22.5 ms23.3 ms 26.1 ms21.2 ms 26
algo: tarjan SCCgpu 911 µs962 µs 1.49 ms881 µs 713
algo: hopcroft-tarjan biconnectedv3 86.8 ms88.9 ms 101 ms82.8 ms 12
algo: hopcroft-tarjan biconnectedgpu 3.69 ms3.83 ms 5.03 ms3.60 ms 172
algo: hierholzer (directed)v3 24.3 ms24.5 ms 27.5 ms21.9 ms 25
algo: hierholzer (directed)gpu 8.65 ms8.75 ms 10.7 ms8.15 ms 75
algo: betweennessCentrality (unweighted)v3 4.00 s4.00 s 4.03 s3.96 s 12
algo: betweennessCentrality (unweighted)gpu 343 ms366 ms 429 ms333 ms 12
algo: degreeCentralityNormalizedv3 15.1 ms15.9 ms 19.0 ms14.1 ms 40
algo: degreeCentralityNormalizedgpu 659 µs681 µs 1.00 ms650 µs 1022
algo: closenessCentrality (one root)v3 59.8 ms62.9 ms 68.4 ms58.5 ms 12
algo: closenessCentrality (one root)gpu 1.33 ms1.38 ms 1.77 ms1.32 ms 503
algo: degreeCentrality (one root)v3 6.95 µs7.61 µs 9.89 µs6.63 µs 87041
algo: degreeCentrality (one root)gpu 262 µs270 µs 524 µs255 µs 2586

algorithms N=500 · 3.2 minv4 (gpu) v3

algo: bfs (whole graph)
47×
algo: dfs (whole graph)
49×
algo: dijkstra + pathTo
41×
algo: aStar
2.3×
algo: bellmanFord
18×
algo: kruskal
16×
algo: tarjan SCC
23×
algo: hopcroft-tarjan biconnected
24×
algo: hierholzer (directed)
4.6×
algo: betweennessCentrality (unweighted)
13×
algo: degreeCentralityNormalized
22×
algo: closenessCentrality (one root)
41×
algo: degreeCentrality (one root)
0.11×
algo: pageRank (20 iters)
1.83×
algo: closenessCentrality (weighted, one root)
35×
algo: floydWarshall
0.84×
algo: closenessCentralityNormalized
0.86×
algo: markovClustering
1.38×
algo: hierarchicalClustering (threshold)
1.00×
algo: kMeans (fixed centroids)
0.99×
algo: kMedoids
1.02×
algo: fuzzyCMeans
1.04×
algo: affinityPropagation
1.84×
algo: kargerStein
1.03×
algo: betweennessCentrality (weighted)
9.1×
1 µs10 µs100 µs1 ms10 ms100 ms1 s10 s
All stats (table view)
groupbenchp50avgp99minsamples
algo: bfs (whole graph)v3 12.9 ms13.3 ms 17.1 ms10.9 ms 48
algo: bfs (whole graph)gpu 276 µs285 µs 491 µs255 µs 2448
algo: dfs (whole graph)v3 12.7 ms13.4 ms 23.8 ms10.9 ms 48
algo: dfs (whole graph)gpu 258 µs267 µs 458 µs252 µs 2614
algo: dijkstra + pathTov3 11.7 ms12.6 ms 15.3 ms11.2 ms 51
algo: dijkstra + pathTogpu 288 µs297 µs 493 µs275 µs 2349
algo: aStarv3 428 µs439 µs 648 µs420 µs 1593
algo: aStargpu 187 µs192 µs 253 µs181 µs 3652
algo: bellmanFordv3 16.0 ms16.1 ms 17.1 ms15.4 ms 40
algo: bellmanFordgpu 873 µs902 µs 1.97 ms849 µs 763
algo: kruskalv3 3.12 ms3.45 ms 7.21 ms3.05 ms 199
algo: kruskalgpu 189 µs199 µs 324 µs183 µs 3477
algo: tarjan SCCv3 5.34 ms5.71 ms 8.87 ms5.18 ms 117
algo: tarjan SCCgpu 229 µs273 µs 544 µs219 µs 2496
algo: hopcroft-tarjan biconnectedv3 20.9 ms20.9 ms 23.3 ms18.6 ms 30
algo: hopcroft-tarjan biconnectedgpu 858 µs886 µs 1.25 ms839 µs 785
algo: hierholzer (directed)v3 4.13 ms4.39 ms 7.28 ms4.02 ms 152
algo: hierholzer (directed)gpu 896 µs920 µs 1.31 ms884 µs 749
algo: betweennessCentrality (unweighted)v3 252 ms253 ms 257 ms248 ms 12
algo: betweennessCentrality (unweighted)gpu 19.9 ms20.3 ms 22.2 ms19.4 ms 30
algo: degreeCentralityNormalizedv3 3.41 ms3.67 ms 7.10 ms3.33 ms 186
algo: degreeCentralityNormalizedgpu 158 µs163 µs 227 µs153 µs 4278
algo: closenessCentrality (one root)v3 13.3 ms14.2 ms 16.8 ms12.8 ms 45
algo: closenessCentrality (one root)gpu 327 µs340 µs 592 µs316 µs 2055
algo: degreeCentrality (one root)v3 7.06 µs7.75 µs 15.8 µs6.65 µs 84732
algo: degreeCentrality (one root)gpu 64.9 µs65.3 µs 66.1 µs63.9 µs 12
algo: pageRank (20 iters)v3 2.80 ms2.99 ms 6.24 ms2.76 ms 222
algo: pageRank (20 iters)gpu 1.53 ms1.78 ms 4.09 ms1.51 ms 380
algo: closenessCentrality (weighted, one root)v3 13.5 ms14.3 ms 17.1 ms13.1 ms 45
algo: closenessCentrality (weighted, one root)gpu 380 µs389 µs 588 µs371 µs 1765
algo: floydWarshallv3 248 ms268 ms 294 ms244 ms 12
algo: floydWarshallgpu 295 ms297 ms 301 ms293 ms 12
algo: closenessCentralityNormalizedv3 276 ms296 ms 419 ms237 ms 12
algo: closenessCentralityNormalizedgpu 320 ms322 ms 327 ms317 ms 12
algo: markovClusteringv3 4.65 s4.67 s 4.72 s4.62 s 12
algo: markovClusteringgpu 3.37 s3.56 s 3.86 s3.32 s 12
algo: hierarchicalClustering (threshold)v3 27.9 ms27.8 ms 28.7 ms26.5 ms 22
algo: hierarchicalClustering (threshold)gpu 27.9 ms27.9 ms 29.0 ms26.6 ms 21
algo: kMeans (fixed centroids)v3 8.52 ms8.63 ms 9.54 ms8.32 ms 77
algo: kMeans (fixed centroids)gpu 8.56 ms8.79 ms 11.9 ms8.33 ms 75
algo: kMedoidsv3 367 ms307 ms 389 ms140 ms 12
algo: kMedoidsgpu 359 ms342 ms 403 ms75.4 ms 12
algo: fuzzyCMeansv3 80.3 ms82.4 ms 85.3 ms78.8 ms 12
algo: fuzzyCMeansgpu 76.9 ms78.3 ms 80.6 ms75.5 ms 12
algo: affinityPropagationv3 215 ms230 ms 287 ms206 ms 12
algo: affinityPropagationgpu 117 ms133 ms 190 ms113 ms 12
algo: kargerSteinv3 325 ms332 ms 343 ms320 ms 12
algo: kargerSteingpu 314 ms316 ms 321 ms306 ms 12
algo: betweennessCentrality (weighted)v3 757 ms766 ms 782 ms752 ms 12
algo: betweennessCentrality (weighted)gpu 83.1 ms85.1 ms 89.0 ms78.7 ms 12

mappers N=2,000 · 8.2 s

mapper: bulk write, color — cpu eval
3.73 ms
mapper: bulk write, color — gpu path
180 µs
mapper: bulk write, color + size — cpu eval
4.06 ms
mapper: bulk write, color + size — gpu color / cpu size
3.69 ms
mapper: bulk write, mapped labels (round-5 path) — label refresh
3.98 ms
100 µs1 ms10 ms
All stats (table view)
groupbenchp50avgp99minsamples
mapper: bulk write, colorcpu eval 3.73 ms3.96 ms 6.85 ms3.59 ms 170
mapper: bulk write, colorgpu path 180 µs188 µs 330 µs176 µs 3730
mapper: bulk write, color + sizecpu eval 4.06 ms4.19 ms 5.32 ms3.93 ms 161
mapper: bulk write, color + sizegpu color / cpu size 3.69 ms3.79 ms 5.42 ms3.57 ms 181
mapper: bulk write, mapped labels (round-5 path)label refresh 3.98 ms4.31 ms 7.74 ms3.47 ms 156