Cytoscape.js GPU benchmarks

v4 (src/) vs v3 (v3/src/) · Mitata · times are per-iteration p50 · 2026-08-09 16:39 · e37d2444 (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)
Commite37d2444
docs: round 60 closes — the record, the header, and the summary's week 4
Machine id5cf3f79c
Median speedup (geo-mean) 11× 106 v3-vs-gpu comparisons
Biggest win 23646× core: edges() @ N=2k
v3 still ahead 13 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
23646×
sweep: nodes() @ 2k
14558×
compare: same() @ 2k
10011×
sweep: edges() @ 2k
9146×
core: nodes() @ 2k
5157×
core: elements() @ 2k
3471×
sweep: elements() @ 2k
1749×
trav: successors() @ 2k
863×
trav: predecessors() @ 2k
835×
mut-bulk: hide + show @ 2k
288×
degree: nodes.totalDegree() @ 2k
199×
degree: node.degree() @ 2k
142×
degree: nodes.maxDegree() @ 2k
135×
mut-bulk: positions(obj) @ 2k
134×
mut-bulk: shift @ 2k
116×
mut-bulk: positions(fn) @ 2k
102×
sweep: nodes(":selected") vs nodes({selected}) @ 2k
60×
algo: bfs (whole graph) @ 2k
49×
algo: dfs (whole graph) @ 2k
46×
algo: bfs (whole graph) @ 500
46×
algo: dijkstra + pathTo @ 2k
45×
algo: closenessCentrality (one root) @ 2k
44×
mut-bulk: lock + unlock @ 2k
44×
algo: dfs (whole graph) @ 500
43×
traverse: components() @ 2k
41×
algo: closenessCentrality (one root) @ 500
41×
algo: dijkstra + pathTo @ 500
40×
sweep: selected nodes ($("node:selected") vs filter({group, selected})) @ 2k
35×
algo: closenessCentrality (weighted, one root) @ 500
35×
core: id lookup ($("#id") vs $id()) @ 2k
30×
set: difference() @ 2k
28×
set: intersection() @ 2k
28×
algo: tarjan SCC @ 2k
27×
trav: band roots() @ 2k
24×
algo: hopcroft-tarjan biconnected @ 500
23×
algo: tarjan SCC @ 500
23×
algo: hopcroft-tarjan biconnected @ 2k
23×
algo: degreeCentralityNormalized @ 500
23×
algo: degreeCentralityNormalized @ 2k
22×
mut: position set @ 2k
21×
algo: bellmanFord @ 2k
20×
algo: bellmanFord @ 500
18×
algo: kruskal @ 2k
17×
algo: kruskal @ 500
17×
core: add + remove @ 2k
16×
mut-bulk: data set @ 2k
14×
core: selected ($(":selected") vs filter({selected})) @ 2k
13×
sweep: selected ($(":selected") vs filter({selected})) @ 2k
13×
algo: betweennessCentrality (unweighted) @ 500
12×
algo: betweennessCentrality (unweighted) @ 2k
12×
algo: betweennessCentrality (weighted) @ 500
9.5×
core: nodes ($("node") vs filter({group})) @ 2k
8.6×
core: collection() @ 2k
8.5×
sweep: all nodes ($("node") vs filter({group})) @ 2k
8.2×
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners) @ 2k
5.8×
mut-bulk: remove + re-add (256 nodes + cascade) @ 2k
5.8×
trav: outgoers() @ 2k
5.7×
traverse: outgoers() @ 2k
5.7×
traverse: incomers() @ 2k
5.6×
trav: incomers() @ 2k
5.6×
trav: band neighborhood() @ 2k
5.4×
set: union() @ 2k
5.4×
compare: contains() @ 2k
4.9×
algo: hierholzer (directed) @ 500
4.8×
trav: neighborhood() @ 2k
4.5×
traverse: neighborhood() @ 2k
4.4×
scn: drag (select band of 100 + 8-step shift, position listener) @ 2k
3.9×
scn: select-all + fit (listeners on) @ 2k
3.6×
trav: closedNeighborhood() @ 2k
3.0×
algo: hierholzer (directed) @ 2k
2.8×
trav: band connectedNodes() @ 2k
2.8×
traverse: connectedEdges() @ 2k
2.4×
trav: connectedEdges() @ 2k
2.4×
algo: aStar @ 500
2.3×
iter: map() @ 2k
2.3×
algo: aStar @ 2k
2.2×
iter: filter(fn) @ 2k
2.1×
core: zoom set @ 2k
2.0×
algo: affinityPropagation @ 500
1.99×
scn: explore (expand 2-hop + select + fit) @ 2k
1.98×
scn: refresh (bulk data write + mapped labels + filter + fit, data listener) @ 2k
1.89×
algo: pageRank (20 iters) @ 500
1.83×
core: filter(fn) @ 2k
1.61×
sweep: filter(fn) @ 2k
1.52×
trav: band sources() @ 2k
1.48×
algo: markovClustering @ 500
1.41×
algo: fuzzyCMeans @ 500
1.11×
trav: band connectedEdges() @ 2k
1.09×
algo: kargerStein @ 500
1.07×
data: get @ 2k
1.05×
core: extent() @ 2k
1.03×
algo: kMeans (fixed centroids) @ 500
1.01×
algo: hierarchicalClustering (threshold) @ 500
1.00×
core: getElementById() @ 2k
0.95×
core: pan() get @ 2k
0.90×
position: get @ 2k
0.89×
algo: kMedoids @ 500
0.88×
json: element @ 2k
0.88×
algo: closenessCentralityNormalized @ 500
0.85×
algo: floydWarshall @ 500
0.84×
iter: forEach() @ 2k
0.68×
mut: data set @ 2k
0.64×
mut: select + unselect @ 2k
0.52×
mut-bulk: select + unselect @ 2k
0.30×
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)46×49×
algo: dfs (whole graph)43×46×
algo: dijkstra + pathTo40×45×
algo: aStar2.3×2.2×
algo: bellmanFord18×20×
algo: kruskal17×17×
algo: tarjan SCC23×27×
algo: hopcroft-tarjan biconnected23×23×
algo: hierholzer (directed)4.8×2.8×
algo: betweennessCentrality (unweighted)12×12×
algo: degreeCentralityNormalized23×22×
algo: closenessCentrality (one root)41×44×
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.85×
algo: markovClustering1.41×
algo: hierarchicalClustering (threshold)1.00×
algo: kMeans (fixed centroids)1.01×
algo: kMedoids0.88×
algo: fuzzyCMeans1.11×
algo: affinityPropagation1.99×
algo: kargerStein1.07×
algo: betweennessCentrality (weighted)9.5×

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

core: getElementById()
0.95×
core: id lookup ($("#id") vs $id())
30×
core: nodes()
5157×
core: edges()
23646×
core: elements()
3471×
core: nodes ($("node") vs filter({group}))
8.6×
core: selected ($(":selected") vs filter({selected}))
13×
core: filter(fn)
1.61×
core: collection()
8.5×
core: pan() get
0.90×
core: extent()
1.03×
core: add + remove
16×
core: zoom set
2.0×
traverse: neighborhood()
4.4×
traverse: connectedEdges()
2.4×
traverse: outgoers()
5.7×
traverse: incomers()
5.6×
traverse: components()
41×
degree: node.degree()
142×
degree: nodes.totalDegree()
199×
degree: nodes.maxDegree()
135×
data: get
1.05×
position: get
0.89×
json: element
0.88×
set: union()
5.4×
set: intersection()
28×
set: difference()
28×
iter: map()
2.3×
iter: forEach()
0.68×
iter: filter(fn)
2.1×
compare: same()
10011×
compare: contains()
4.9×
mut: data set
0.64×
mut: position set
21×
mut: select + unselect
0.52×
1 ns10 ns100 ns1 µs10 µs100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
core: getElementById()v3 87.3 ns90.3 ns 135 ns83.5 ns 1897
core: getElementById()gpu 92.1 ns99.4 ns 230 ns74.6 ns 1718
core: id lookup ($("#id") vs $id())v3 2.42 µs2.75 µs 7.11 µs2.27 µs 203184
core: id lookup ($("#id") vs $id())gpu 80.0 ns85.0 ns 169 ns71.1 ns 1968
core: nodes()v3 418 µs436 µs 758 µs412 µs 1599
core: nodes()gpu 81.0 ns85.6 ns 164 ns50.0 ns 1956849
core: edges()v3 733 µs760 µs 1.25 ms722 µs 916
core: edges()gpu 31.0 ns57.5 ns 172 ns27.0 ns 2248510
core: elements()v3 135 µs144 µs 252 µs133 µs 4824
core: elements()gpu 39.0 ns47.4 ns 247 ns34.0 ns 1803278
core: nodes ($("node") vs filter({group}))v3 538 µs575 µs 975 µs522 µs 1213
core: nodes ($("node") vs filter({group}))gpu 62.5 µs79.8 µs 199 µs53.6 µs 8638
core: selected ($(":selected") vs filter({selected}))v3 333 µs356 µs 829 µs320 µs 1960
core: selected ($(":selected") vs filter({selected}))gpu 25.7 µs27.6 µs 31.8 µs25.1 µs 12
core: filter(fn)v3 418 µs440 µs 804 µs407 µs 1578
core: filter(fn)gpu 260 µs293 µs 901 µs250 µs 2356
core: collection()v3 463 ns562 ns 1.52 µs451 ns 298
core: collection()gpu 54.7 ns58.2 ns 107 ns52.8 ns 2869
core: pan() getv3 5.99 ns6.43 ns 13.8 ns5.86 ns 26219
core: pan() getgpu 6.68 ns7.33 ns 14.1 ns6.12 ns 23157
core: extent()v3 22.0 ns26.6 ns 57.9 ns20.9 ns 6309
core: extent()gpu 21.5 ns26.6 ns 96.3 ns20.6 ns 6257
core: add + removev3 121 µs126 µs 267 µs111 µs 5494
core: add + removegpu 7.71 µs9.07 µs 30.8 µs7.28 µs 71431
core: zoom setv3 1.27 µs1.29 µs 1.40 µs1.24 µs 126
core: zoom setgpu 631 ns644 ns 802 ns616 ns 248
traverse: neighborhood()v3 3.60 µs4.10 µs 6.70 µs3.50 µs 36
traverse: neighborhood()gpu 827 ns991 ns 2.21 µs808 ns 164
traverse: connectedEdges()v3 1.06 µs1.18 µs 2.20 µs1.01 µs 141
traverse: connectedEdges()gpu 438 ns524 ns 1.83 µs426 ns 310
traverse: outgoers()v3 2.42 µs2.62 µs 3.35 µs2.32 µs 58
traverse: outgoers()gpu 423 ns511 ns 1.96 µs412 ns 318
traverse: incomers()v3 2.43 µs2.60 µs 3.46 µs2.37 µs 60
traverse: incomers()gpu 431 ns513 ns 1.98 µs419 ns 319
traverse: components()v3 80.7 ms85.7 ms 99.6 ms77.8 ms 12
traverse: components()gpu 1.95 ms2.09 ms 3.40 ms1.90 ms 312
degree: node.degree()v3 3.40 µs3.64 µs 4.68 µs3.20 µs 42
degree: node.degree()gpu 23.9 ns25.9 ns 47.3 ns22.4 ns 6556
degree: nodes.totalDegree()v3 7.67 ms8.49 ms 13.5 ms6.96 ms 78
degree: nodes.totalDegree()gpu 38.5 µs39.1 µs 61.6 µs37.4 µs 16995
degree: nodes.maxDegree()v3 7.17 ms7.91 ms 11.8 ms6.77 ms 84
degree: nodes.maxDegree()gpu 53.1 µs54.5 µs 84.2 µs52.0 µs 12842
data: getv3 25.9 ns27.8 ns 60.5 ns25.1 ns 6139
data: getgpu 24.7 ns26.3 ns 45.3 ns23.9 ns 6464
position: getv3 24.2 ns25.8 ns 44.6 ns23.2 ns 6632
position: getgpu 27.2 ns30.5 ns 61.3 ns26.1 ns 5502
json: elementv3 293 ns391 ns 3.52 µs286 ns 422
json: elementgpu 335 ns388 ns 815 ns325 ns 412
set: union()v3 92.5 µs106 µs 167 µs89.8 µs 6486
set: union()gpu 17.1 µs17.5 µs 17.4 µs16.7 µs 12
set: intersection()v3 94.8 µs109 µs 182 µs90.8 µs 6355
set: intersection()gpu 3.37 µs3.40 µs 3.71 µs3.28 µs 45
set: difference()v3 94.6 µs109 µs 168 µs88.7 µs 6303
set: difference()gpu 3.35 µs3.40 µs 4.19 µs3.31 µs 45
iter: map()v3 23.3 µs24.8 µs 44.6 µs22.4 µs 27549
iter: map()gpu 10.0 µs10.6 µs 34.0 µs9.65 µs 63487
iter: forEach()v3 3.45 µs3.73 µs 3.81 µs3.40 µs 37
iter: forEach()gpu 5.10 µs5.31 µs 12.4 µs5.09 µs 125640
iter: filter(fn)v3 218 µs228 µs 370 µs216 µs 3072
iter: filter(fn)gpu 105 µs109 µs 172 µs102 µs 6399
compare: same()v3 122 µs125 µs 176 µs119 µs 5598
compare: same()gpu 12.2 ns13.1 ns 26.1 ns11.6 ns 13104
compare: contains()v3 6.74 µs6.91 µs 9.58 µs6.45 µs 97555
compare: contains()gpu 1.39 µs1.40 µs 1.46 µs1.37 µs 115
mut: data setv3 492 ns512 ns 740 ns480 ns 325
mut: data setgpu 773 ns797 ns 1.12 µs756 ns 207
mut: position setv3 1.20 µs1.22 µs 1.34 µs1.17 µs 134
mut: position setgpu 57.8 ns61.8 ns 106 ns54.6 ns 2749
mut: select + unselectv3 2.56 µs2.74 µs 3.56 µs2.39 µs 58
mut: select + unselectgpu 4.92 µs5.60 µs 18.2 µs4.66 µs 115140

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

sweep: nodes()
14558×
sweep: edges()
9146×
sweep: elements()
1749×
sweep: all nodes ($("node") vs filter({group}))
8.2×
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.52×
10 ns100 ns1 µs10 µs100 µs1 ms
All stats (table view)
groupbenchp50avgp99minsamples
sweep: nodes()v3 422 µs435 µs 627 µs409 µs 1612
sweep: nodes()gpu 29.0 ns30.8 ns 55.0 ns27.0 ns 1901506
sweep: edges()v3 723 µs737 µs 945 µs703 µs 947
sweep: edges()gpu 79.0 ns81.0 ns 94.0 ns50.0 ns 2094411
sweep: elements()v3 138 µs148 µs 185 µs131 µs 4711
sweep: elements()gpu 79.0 ns82.7 ns 159 ns41.0 ns 1999408
sweep: all nodes ($("node") vs filter({group}))v3 527 µs537 µs 808 µs514 µs 1295
sweep: all nodes ($("node") vs filter({group}))gpu 64.0 µs78.2 µs 161 µs56.9 µs 8843
sweep: selected ($(":selected") vs filter({selected}))v3 328 µs348 µs 671 µs312 µs 1996
sweep: selected ($(":selected") vs filter({selected}))gpu 26.0 µs26.6 µs 27.9 µs25.7 µs 12
sweep: selected nodes ($("node:selected") vs filter({group, selected}))v3 315 µs321 µs 503 µs308 µs 2180
sweep: selected nodes ($("node:selected") vs filter({group, selected}))gpu 8.93 µs8.94 µs 9.08 µs8.76 µs 15
sweep: nodes(":selected") vs nodes({selected})v3 534 µs545 µs 719 µs520 µs 1283
sweep: nodes(":selected") vs nodes({selected})gpu 8.91 µs8.93 µs 9.11 µs8.75 µs 16
sweep: filter(fn)v3 417 µs425 µs 605 µs408 µs 1648
sweep: filter(fn)gpu 274 µs291 µs 591 µs265 µs 2387

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

mut-bulk: select + unselect
0.30×
mut-bulk: hide + show
288×
mut-bulk: lock + unlock
44×
mut-bulk: positions(obj)
134×
mut-bulk: positions(fn)
102×
mut-bulk: shift
116×
mut-bulk: data set
14×
mut-bulk: remove + re-add (256 nodes + cascade)
5.8×
10 µs100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
mut-bulk: select + unselectv3 1.92 ms1.99 ms 3.30 ms1.81 ms 332
mut-bulk: select + unselectgpu 6.30 ms6.51 ms 8.72 ms6.19 ms 104
mut-bulk: hide + showv3 62.0 ms66.0 ms 73.1 ms58.7 ms 12
mut-bulk: hide + showgpu 216 µs225 µs 397 µs211 µs 3011
mut-bulk: lock + unlockv3 2.12 ms2.18 ms 3.35 ms2.06 ms 313
mut-bulk: lock + unlockgpu 48.5 µs49.1 µs 49.6 µs48.1 µs 12
mut-bulk: positions(obj)v3 2.39 ms2.43 ms 3.52 ms2.27 ms 279
mut-bulk: positions(obj)gpu 17.8 µs19.2 µs 39.1 µs16.6 µs 35687
mut-bulk: positions(fn)v3 3.57 ms3.71 ms 4.83 ms3.39 ms 178
mut-bulk: positions(fn)gpu 35.0 µs38.5 µs 97.8 µs33.2 µs 17907
mut-bulk: shiftv3 3.53 ms3.68 ms 6.45 ms3.35 ms 185
mut-bulk: shiftgpu 30.4 µs32.8 µs 66.9 µs29.2 µs 21120
mut-bulk: data setv3 867 µs900 µs 1.30 ms840 µs 752
mut-bulk: data setgpu 60.3 µs62.6 µs 114 µs57.9 µs 10908
mut-bulk: remove + re-add (256 nodes + cascade)v3 41.9 ms43.8 ms 52.2 ms40.4 ms 12
mut-bulk: remove + re-add (256 nodes + cascade)gpu 7.24 ms7.48 ms 9.10 ms6.63 ms 88

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

scn: explore (expand 2-hop + select + fit)
1.98×
scn: select-all + fit (listeners on)
3.6×
scn: drag (select band of 100 + 8-step shift, position listener)
3.9×
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners)
5.8×
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)
1.89×
100 µs1 ms10 ms100 ms
All stats (table view)
groupbenchp50avgp99minsamples
scn: explore (expand 2-hop + select + fit)v3 326 µs383 µs 1.05 ms274 µs 1813
scn: explore (expand 2-hop + select + fit)gpu 165 µs179 µs 383 µs160 µs 3726
scn: select-all + fit (listeners on)v3 25.7 ms26.8 ms 30.2 ms24.1 ms 22
scn: select-all + fit (listeners on)gpu 7.14 ms7.24 ms 8.16 ms6.98 ms 91
scn: drag (select band of 100 + 8-step shift, position listener)v3 1.61 ms1.72 ms 3.32 ms1.55 ms 399
scn: drag (select band of 100 + 8-step shift, position listener)gpu 412 µs425 µs 704 µs406 µs 1607
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners)v3 43.7 ms44.1 ms 44.9 ms43.2 ms 12
scn: edit (remove + re-add 256 nodes + cascade, add/remove listeners)gpu 7.55 ms7.75 ms 9.08 ms6.95 ms 84
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)v3 7.92 ms8.22 ms 10.5 ms7.15 ms 80
scn: refresh (bulk data write + mapped labels + filter + fit, data listener)gpu 4.20 ms4.35 ms 7.09 ms3.78 ms 148

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

trav: neighborhood()
4.5×
trav: closedNeighborhood()
3.0×
trav: connectedEdges()
2.4×
trav: outgoers()
5.7×
trav: incomers()
5.6×
trav: successors()
863×
trav: predecessors()
835×
trav: band neighborhood()
5.4×
trav: band connectedEdges()
1.09×
trav: band roots()
24×
trav: band sources()
1.48×
trav: band connectedNodes()
2.8×
100 ns1 µs10 µs100 µs1 ms10 ms100 ms1 s
All stats (table view)
groupbenchp50avgp99minsamples
trav: neighborhood()v3 4.30 µs4.32 µs 5.64 µs3.51 µs 35
trav: neighborhood()gpu 964 ns1.00 µs 1.99 µs789 ns 165
trav: closedNeighborhood()v3 6.16 µs5.93 µs 6.43 µs5.45 µs 25
trav: closedNeighborhood()gpu 2.08 µs2.17 µs 2.64 µs2.02 µs 74
trav: connectedEdges()v3 1.04 µs1.12 µs 1.84 µs1.00 µs 150
trav: connectedEdges()gpu 433 ns517 ns 1.83 µs420 ns 322
trav: outgoers()v3 2.33 µs2.48 µs 3.08 µs2.25 µs 64
trav: outgoers()gpu 407 ns486 ns 1.97 µs395 ns 341
trav: incomers()v3 2.38 µs2.52 µs 3.03 µs2.31 µs 63
trav: incomers()gpu 427 ns510 ns 2.04 µs416 ns 323
trav: successors()v3 465 ms466 ms 486 ms455 ms 12
trav: successors()gpu 538 µs567 µs 1.82 ms521 µs 1210
trav: predecessors()v3 454 ms457 ms 464 ms450 ms 12
trav: predecessors()gpu 544 µs579 µs 1.84 ms525 µs 1182
trav: band neighborhood()v3 193 µs211 µs 406 µs184 µs 3298
trav: band neighborhood()gpu 35.6 µs38.3 µs 69.1 µs33.8 µs 18019
trav: band connectedEdges()v3 25.7 µs25.9 µs 25.9 µs25.4 µs 12
trav: band connectedEdges()gpu 23.6 µs24.5 µs 26.9 µs23.2 µs 12
trav: band roots()v3 116 µs125 µs 168 µs110 µs 5574
trav: band roots()gpu 4.82 µs4.83 µs 4.93 µs4.75 µs 31
trav: band sources()v3 6.68 µs6.66 µs 6.79 µs6.41 µs 22
trav: band sources()gpu 4.52 µs4.77 µs 5.47 µs4.41 µs 32
trav: band connectedNodes()v3 14.1 µs14.4 µs 14.5 µs13.9 µs 12
trav: band connectedNodes()gpu 5.11 µs5.14 µs 5.40 µs4.99 µs 29

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

algo: bfs (whole graph)
49×
algo: dfs (whole graph)
46×
algo: dijkstra + pathTo
45×
algo: aStar
2.2×
algo: bellmanFord
20×
algo: kruskal
17×
algo: tarjan SCC
27×
algo: hopcroft-tarjan biconnected
23×
algo: hierholzer (directed)
2.8×
algo: betweennessCentrality (unweighted)
12×
algo: degreeCentralityNormalized
22×
algo: closenessCentrality (one root)
44×
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 55.5 ms56.5 ms 61.8 ms51.8 ms 9
algo: bfs (whole graph)gpu 1.14 ms1.18 ms 1.57 ms1.09 ms 590
algo: dfs (whole graph)v3 50.2 ms51.1 ms 53.0 ms49.5 ms 10
algo: dfs (whole graph)gpu 1.09 ms1.12 ms 1.74 ms1.06 ms 619
algo: dijkstra + pathTov3 54.7 ms55.4 ms 56.9 ms53.7 ms 9
algo: dijkstra + pathTogpu 1.23 ms1.25 ms 1.65 ms1.18 ms 543
algo: aStarv3 1.76 ms1.86 ms 3.43 ms1.69 ms 371
algo: aStargpu 812 µs843 µs 1.46 ms767 µs 827
algo: bellmanFordv3 244 ms243 ms 263 ms223 ms 12
algo: bellmanFordgpu 12.3 ms12.9 ms 16.4 ms12.0 ms 48
algo: kruskalv3 13.7 ms14.6 ms 18.0 ms13.1 ms 43
algo: kruskalgpu 799 µs836 µs 1.15 ms741 µs 821
algo: tarjan SCCv3 24.8 ms25.3 ms 28.2 ms22.9 ms 24
algo: tarjan SCCgpu 928 µs973 µs 1.44 ms878 µs 696
algo: hopcroft-tarjan biconnectedv3 86.7 ms87.5 ms 88.9 ms83.5 ms 12
algo: hopcroft-tarjan biconnectedgpu 3.76 ms3.89 ms 5.18 ms3.67 ms 170
algo: hierholzer (directed)v3 23.2 ms24.6 ms 31.1 ms21.9 ms 24
algo: hierholzer (directed)gpu 8.35 ms8.51 ms 9.49 ms8.08 ms 76
algo: betweennessCentrality (unweighted)v3 4.13 s4.14 s 4.18 s4.09 s 12
algo: betweennessCentrality (unweighted)gpu 341 ms366 ms 432 ms339 ms 12
algo: degreeCentralityNormalizedv3 14.9 ms15.9 ms 18.9 ms14.1 ms 40
algo: degreeCentralityNormalizedgpu 669 µs689 µs 1.00 ms651 µs 1013
algo: closenessCentrality (one root)v3 60.8 ms62.9 ms 66.3 ms59.7 ms 12
algo: closenessCentrality (one root)gpu 1.38 ms1.42 ms 1.99 ms1.33 ms 486
algo: degreeCentrality (one root)v3 7.10 µs7.91 µs 15.5 µs6.80 µs 83355
algo: degreeCentrality (one root)gpu 276 µs285 µs 463 µs263 µs 2449

algorithms N=500 · 3.2 minv4 (gpu) v3

algo: bfs (whole graph)
46×
algo: dfs (whole graph)
43×
algo: dijkstra + pathTo
40×
algo: aStar
2.3×
algo: bellmanFord
18×
algo: kruskal
17×
algo: tarjan SCC
23×
algo: hopcroft-tarjan biconnected
23×
algo: hierholzer (directed)
4.8×
algo: betweennessCentrality (unweighted)
12×
algo: degreeCentralityNormalized
23×
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.85×
algo: markovClustering
1.41×
algo: hierarchicalClustering (threshold)
1.00×
algo: kMeans (fixed centroids)
1.01×
algo: kMedoids
0.88×
algo: fuzzyCMeans
1.11×
algo: affinityPropagation
1.99×
algo: kargerStein
1.07×
algo: betweennessCentrality (weighted)
9.5×
1 µs10 µs100 µs1 ms10 ms100 ms1 s10 s
All stats (table view)
groupbenchp50avgp99minsamples
algo: bfs (whole graph)v3 12.7 ms13.3 ms 16.8 ms11.2 ms 49
algo: bfs (whole graph)gpu 279 µs286 µs 449 µs259 µs 2429
algo: dfs (whole graph)v3 11.3 ms12.1 ms 15.2 ms10.9 ms 54
algo: dfs (whole graph)gpu 262 µs270 µs 447 µs254 µs 2566
algo: dijkstra + pathTov3 11.8 ms12.5 ms 15.3 ms11.3 ms 51
algo: dijkstra + pathTogpu 297 µs306 µs 476 µs283 µs 2281
algo: aStarv3 439 µs452 µs 655 µs426 µs 1548
algo: aStargpu 187 µs194 µs 281 µs183 µs 3599
algo: bellmanFordv3 15.9 ms16.1 ms 17.2 ms15.7 ms 39
algo: bellmanFordgpu 896 µs935 µs 1.97 ms886 µs 735
algo: kruskalv3 3.20 ms3.45 ms 6.75 ms3.12 ms 199
algo: kruskalgpu 191 µs202 µs 337 µs185 µs 3456
algo: tarjan SCCv3 5.34 ms5.70 ms 8.65 ms5.21 ms 117
algo: tarjan SCCgpu 230 µs277 µs 569 µs219 µs 2505
algo: hopcroft-tarjan biconnectedv3 20.2 ms21.0 ms 23.7 ms18.7 ms 30
algo: hopcroft-tarjan biconnectedgpu 867 µs887 µs 1.24 ms841 µs 786
algo: hierholzer (directed)v3 4.32 ms4.62 ms 7.36 ms4.11 ms 145
algo: hierholzer (directed)gpu 905 µs933 µs 1.27 ms876 µs 729
algo: betweennessCentrality (unweighted)v3 254 ms255 ms 256 ms250 ms 12
algo: betweennessCentrality (unweighted)gpu 20.5 ms20.8 ms 23.1 ms20.1 ms 29
algo: degreeCentralityNormalizedv3 3.71 ms3.96 ms 7.41 ms3.43 ms 173
algo: degreeCentralityNormalizedgpu 163 µs174 µs 269 µs159 µs 4001
algo: closenessCentrality (one root)v3 13.8 ms14.5 ms 18.0 ms13.0 ms 44
algo: closenessCentrality (one root)gpu 335 µs345 µs 584 µs325 µs 2029
algo: degreeCentrality (one root)v3 7.09 µs7.76 µs 13.6 µs6.80 µs 84784
algo: degreeCentrality (one root)gpu 63.4 µs65.0 µs 105 µs61.0 µs 10756
algo: pageRank (20 iters)v3 2.79 ms2.97 ms 6.38 ms2.71 ms 223
algo: pageRank (20 iters)gpu 1.53 ms1.74 ms 3.52 ms1.49 ms 397
algo: closenessCentrality (weighted, one root)v3 13.7 ms14.4 ms 16.9 ms13.0 ms 45
algo: closenessCentrality (weighted, one root)gpu 389 µs397 µs 653 µs376 µs 1760
algo: floydWarshallv3 251 ms270 ms 293 ms245 ms 12
algo: floydWarshallgpu 300 ms301 ms 308 ms297 ms 12
algo: closenessCentralityNormalizedv3 275 ms295 ms 411 ms245 ms 12
algo: closenessCentralityNormalizedgpu 325 ms325 ms 328 ms320 ms 12
algo: markovClusteringv3 4.66 s4.67 s 4.70 s4.65 s 12
algo: markovClusteringgpu 3.31 s3.50 s 3.82 s3.26 s 12
algo: hierarchicalClustering (threshold)v3 26.9 ms27.0 ms 27.6 ms25.9 ms 22
algo: hierarchicalClustering (threshold)gpu 26.8 ms26.9 ms 27.6 ms26.5 ms 22
algo: kMeans (fixed centroids)v3 9.00 ms9.07 ms 9.68 ms8.73 ms 73
algo: kMeans (fixed centroids)gpu 8.88 ms8.93 ms 9.62 ms8.64 ms 74
algo: kMedoidsv3 306 ms334 ms 454 ms157 ms 12
algo: kMedoidsgpu 349 ms305 ms 388 ms170 ms 12
algo: fuzzyCMeansv3 85.9 ms87.3 ms 93.9 ms84.4 ms 12
algo: fuzzyCMeansgpu 77.4 ms78.8 ms 84.2 ms76.2 ms 12
algo: affinityPropagationv3 227 ms240 ms 288 ms214 ms 12
algo: affinityPropagationgpu 114 ms120 ms 131 ms112 ms 12
algo: kargerSteinv3 325 ms330 ms 345 ms315 ms 12
algo: kargerSteingpu 304 ms308 ms 315 ms299 ms 12
algo: betweennessCentrality (weighted)v3 732 ms736 ms 747 ms729 ms 12
algo: betweennessCentrality (weighted)gpu 77.2 ms81.4 ms 86.9 ms75.6 ms 12

mappers N=2,000 · 8.2 s

mapper: bulk write, color — cpu eval
3.79 ms
mapper: bulk write, color — gpu path
176 µs
mapper: bulk write, color + size — cpu eval
4.27 ms
mapper: bulk write, color + size — gpu color / cpu size
3.88 ms
mapper: bulk write, mapped labels (round-5 path) — label refresh
4.00 ms
100 µs1 ms10 ms
All stats (table view)
groupbenchp50avgp99minsamples
mapper: bulk write, colorcpu eval 3.79 ms3.89 ms 5.87 ms3.67 ms 172
mapper: bulk write, colorgpu path 176 µs182 µs 306 µs172 µs 3843
mapper: bulk write, color + sizecpu eval 4.27 ms4.31 ms 4.93 ms4.13 ms 155
mapper: bulk write, color + sizegpu color / cpu size 3.88 ms3.94 ms 4.92 ms3.75 ms 174
mapper: bulk write, mapped labels (round-5 path)label refresh 4.00 ms4.29 ms 6.87 ms3.89 ms 158