From e773bce58e206789f7315d0de6c430bffc76f282 Mon Sep 17 00:00:00 2001 From: Filippos Christou Date: Fri, 15 Mar 2024 08:43:59 +0100 Subject: [PATCH] Bringing the `.github/workflows/postbench.yml` to master (#350) * First try on benchmark CI (#315) (WIP) TODO: store results and PR label triggering * Test consecutive PR (#346) Merge all new advancements on the `benchx` branch in order to do a follow up consecutive PR to test github actions * Trivial change, test PR (#347) * Trivial change, test PR * Add PR write permission * Test full permissions * Granular permissions * try write-all * try label event * labeled in pull_request * Store results as artifact and trigger a consecutive workflow_run * Workflow chain almost complete (WIP) * correct .benchmarkci path * Add benchx support branch * Just try pull_request_target instead * Remove target * Get rid of s to get the chain going --------- Co-authored-by: Guillaume Dalle <22795598+gdalle@users.noreply.github.com> * Simplify for master merge * Fixed formatting * Integrate review comments --------- Co-authored-by: Guillaume Dalle <22795598+gdalle@users.noreply.github.com> --- .github/workflows/postbench.yml | 61 +++ .github/workflows/runbenchandupload.yml | 61 +++ .gitignore | 2 + benchmark/Project.toml | 7 + benchmark/benchmarks.jl | 32 +- benchmark/centrality.jl | 26 -- benchmark/connectivity.jl | 14 - benchmark/core.jl | 39 -- benchmark/insertions.jl | 4 - benchmark/parallel/egonets.jl | 97 ++-- benchmark/serial/centrality.jl | 37 ++ benchmark/serial/connectivity.jl | 11 + benchmark/serial/core.jl | 41 ++ benchmark/{ => serial}/edges.jl | 22 +- benchmark/serial/insertions.jl | 6 + benchmark/serial/traversals.jl | 17 + benchmark/traversals.jl | 14 - benchmark/tune.json | 588 ++++++++++++++++++++++++ 18 files changed, 914 insertions(+), 165 deletions(-) create mode 100644 .github/workflows/postbench.yml create mode 100644 .github/workflows/runbenchandupload.yml create mode 100644 benchmark/Project.toml delete mode 100644 benchmark/centrality.jl delete mode 100644 benchmark/connectivity.jl delete mode 100644 benchmark/core.jl delete mode 100644 benchmark/insertions.jl create mode 100644 benchmark/serial/centrality.jl create mode 100644 benchmark/serial/connectivity.jl create mode 100644 benchmark/serial/core.jl rename benchmark/{ => serial}/edges.jl (56%) create mode 100644 benchmark/serial/insertions.jl create mode 100644 benchmark/serial/traversals.jl delete mode 100644 benchmark/traversals.jl create mode 100644 benchmark/tune.json diff --git a/.github/workflows/postbench.yml b/.github/workflows/postbench.yml new file mode 100644 index 000000000..e0995c814 --- /dev/null +++ b/.github/workflows/postbench.yml @@ -0,0 +1,61 @@ +name: PostBenchmarks +on: + workflow_run: + workflows: [RunUploadBenchmarks] + types: [completed] + branches: [master, benchx] +jobs: + on-success: + runs-on: ubuntu-latest + # if: ${{ github.event.workflow_run.conclusion == 'success' }} + steps: + - run: echo 'The triggering workflow passed' + - name: 'Download artifact' + uses: actions/github-script@v6 + with: + script: | + let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: context.payload.workflow_run.id, + }); + let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { + return artifact.name == "BenchmarkResults" + })[0]; + let download = await github.rest.actions.downloadArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: matchArtifact.id, + archive_format: 'zip', + }); + let fs = require('fs'); + fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/BenchmarkResults.zip`, Buffer.from(download.data)); + + - name: 'Unzip artifact' + run: unzip BenchmarkResults.zip -d .benchmarkci/ + - name: 'Post results test 1' + run: julia -e 'using BenchmarkCI; BenchmarkCI.postjudge()' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: 'Comment on PR test 2' + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + let fs = require('fs'); + let issue_number = Number(fs.readFileSync('./pr_number')); + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issue_number, + body: 'Thank you for the PR!' + }); + - name: 'Comment on PR test 3' + run: gh pr comment "$NUMBER" --body "$BODY" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + NUMBER: ${{ github.event.pull_request.number }} + BODY: > + This pr comment is testing. + **This should be bold** diff --git a/.github/workflows/runbenchandupload.yml b/.github/workflows/runbenchandupload.yml new file mode 100644 index 000000000..1f804067a --- /dev/null +++ b/.github/workflows/runbenchandupload.yml @@ -0,0 +1,61 @@ +name: RunUploadBenchmarks +env: + JULIA_NUM_THREADS: auto +on: + pull_request: + types: [labeled] + branches: + - master + - benchx +jobs: + benchmark: + if: ${{ github.event.label.name == 'to-benchmark' }} + name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} + runs-on: ${{ matrix.os }} + continue-on-error: ${{ matrix.allow_failure }} + strategy: + fail-fast: false + matrix: + version: + - '1' + os: + - ubuntu-latest + arch: + - x64 + include: + - version: '1' + allow_failure: false + steps: + - uses: actions/checkout@v4 + - uses: julia-actions/setup-julia@latest + with: + version: ${{ matrix.version }} + arch: ${{ matrix.arch }} + - uses: actions/cache@v3 + env: + cache-name: cache-artifacts + with: + path: ~/.julia/artifacts + key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/Project.toml') }} + restore-keys: | + ${{ runner.os }}-test-${{ env.cache-name }}- + ${{ runner.os }}-test- + ${{ runner.os }}- + - uses: julia-actions/julia-buildpkg@latest + - name: install dependencies + run: julia -e 'using Pkg; pkg"add PkgBenchmark BenchmarkCI@0.1"' + - name: Run benchmark judge + run: julia -e " + using BenchmarkCI, PkgBenchmark; + jd=BenchmarkCI.judge(baseline=\"origin/${GITHUB_BASE_REF}\"); + " + - name: Save PR number + env: + PR_NUMBER: ${{ github.event.pull_request.number }} + run: | + echo $PR_NUMBER > .benchmarkci/pr_number + - uses: actions/upload-artifact@v3 + with: + name: BenchmarkResults + path: .benchmarkci/ + diff --git a/.gitignore b/.gitignore index 0164354dd..2135f4172 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,8 @@ docs/build/ docs/site/ benchmark/.results/* benchmark/.tune.jld +benchmark/Manifest.toml +.benchmarkci *.cov /Manifest.toml /docs/Manifest.toml diff --git a/benchmark/Project.toml b/benchmark/Project.toml new file mode 100644 index 000000000..ed523b621 --- /dev/null +++ b/benchmark/Project.toml @@ -0,0 +1,7 @@ +[deps] +BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" +Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" +Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[compat] +BenchmarkTools = "1.5" diff --git a/benchmark/benchmarks.jl b/benchmark/benchmarks.jl index 76b9c6fef..b00a2e888 100644 --- a/benchmark/benchmarks.jl +++ b/benchmark/benchmarks.jl @@ -1,18 +1,34 @@ -using BenchmarkTools -using Graphs +using BenchmarkTools, Graphs -DIGRAPHS = Dict{String,DiGraph}( +const BENCHDIR = dirname(@__FILE__) + +const DIGRAPHS = Dict{String,DiGraph}( "complete100" => complete_digraph(100), "path500" => path_digraph(500) ) -GRAPHS = Dict{String,Graph}( +const GRAPHS = Dict{String,Graph}( "complete100" => complete_graph(100), "tutte" => smallgraph(:tutte), "path500" => path_graph(500), ) -suite = BenchmarkGroup() -include("core.jl") +serialbenchmarks = [ + "serial/core.jl", + "serial/connectivity.jl", + "serial/centrality.jl", + "serial/edges.jl", + "serial/insertions.jl", + "serial/traversals.jl", +] + +const SUITE = BenchmarkGroup() + +foreach(serialbenchmarks) do bm + include(bm) +end + +parallelbenchmarks = ["parallel/egonets.jl"] -tune!(suite); -results = run(suite; verbose=true, seconds=10) +foreach(parallelbenchmarks) do bm + include(joinpath(BENCHDIR, bm)) +end diff --git a/benchmark/centrality.jl b/benchmark/centrality.jl deleted file mode 100644 index edbd8accb..000000000 --- a/benchmark/centrality.jl +++ /dev/null @@ -1,26 +0,0 @@ - -@benchgroup "centrality" begin - @benchgroup "graphs" begin - for (name, g) in GRAPHS - @bench "$(name): degree" Graphs.degree_centrality($g) - @bench "$(name): closeness" Graphs.closeness_centrality($g) - if nv(g) < 1000 - @bench "$(name): betweenness" Graphs.betweenness_centrality($g) - @bench "$(name): katz" Graphs.katz_centrality($g) - end - end - end # graphs - @benchgroup "digraphs" begin - for (name, g) in DIGRAPHS - @bench "$(name): degree" Graphs.degree_centrality($g) - @bench "$(name): closeness" Graphs.closeness_centrality($g) - if nv(g) < 1000 - @bench "$(name): betweenness" Graphs.betweenness_centrality($g) - @bench "$(name): katz" Graphs.katz_centrality($g) - end - if nv(g) < 500 - @bench "$(name): pagerank" Graphs.pagerank($g) - end - end - end # digraphs -end # centrality diff --git a/benchmark/connectivity.jl b/benchmark/connectivity.jl deleted file mode 100644 index 4ba340919..000000000 --- a/benchmark/connectivity.jl +++ /dev/null @@ -1,14 +0,0 @@ -@benchgroup "connectivity" begin - @benchgroup "digraphs" begin - for (name, g) in DIGRAPHS - @bench "$(name): strongly_connected_components" Graphs.strongly_connected_components( - $g - ) - end - end # digraphs - @benchgroup "graphs" begin - for (name, g) in GRAPHS - @bench "$(name): connected_components" Graphs.connected_components($g) - end - end # graphs -end # connectivity diff --git a/benchmark/core.jl b/benchmark/core.jl deleted file mode 100644 index d28a2a7ce..000000000 --- a/benchmark/core.jl +++ /dev/null @@ -1,39 +0,0 @@ -suite["core"] = BenchmarkGroup(["nv", "edges", "has_edge"]) - -# nv -suite["core"]["nv"] = BenchmarkGroup(["graphs", "digraphs"]) -suite["core"]["nv"]["graphs"] = @benchmarkable [nv(g) for (n, g) in $GRAPHS] -suite["core"]["nv"]["digraphs"] = @benchmarkable [nv(g) for (n, g) in $DIGRAPHS] - -# iterate edges -function iter_edges(g::AbstractGraph) - i = 0 - for e in edges(g) - i += 1 - end - return i -end - -suite["core"]["edges"] = BenchmarkGroup(["graphs", "digraphs"]) -suite["core"]["edges"]["graphs"] = @benchmarkable [iter_edges(g) for (n, g) in $GRAPHS] -suite["core"]["edges"]["digraphs"] = @benchmarkable [iter_edges(g) for (n, g) in $DIGRAPHS] - -# has edge -function all_has_edge(g::AbstractGraph) - nvg = nv(g) - srcs = rand([1:nvg;], cld(nvg, 4)) - dsts = rand([1:nvg;], cld(nvg, 4)) - i = 0 - for (s, d) in zip(srcs, dsts) - if has_edge(g, s, d) - i += 1 - end - end - return i -end - -suite["core"]["has_edge"] = BenchmarkGroup(["graphs", "digraphs"]) -suite["core"]["has_edge"]["graphs"] = @benchmarkable [all_has_edge(g) for (n, g) in $GRAPHS] -suite["core"]["has_edge"]["digraphs"] = @benchmarkable [ - all_has_edge(g) for (n, g) in $DIGRAPHS -] diff --git a/benchmark/insertions.jl b/benchmark/insertions.jl deleted file mode 100644 index 3fdc292a9..000000000 --- a/benchmark/insertions.jl +++ /dev/null @@ -1,4 +0,0 @@ -@benchgroup "insertions" begin - n = 10000 - @bench "ER Generation" g = SimpleGraph($n, 16 * $n) -end diff --git a/benchmark/parallel/egonets.jl b/benchmark/parallel/egonets.jl index 22d239019..0dc328a84 100644 --- a/benchmark/parallel/egonets.jl +++ b/benchmark/parallel/egonets.jl @@ -1,62 +1,57 @@ using Graphs using BenchmarkTools -@show Threads.nthreads() - -@benchgroup "parallel" begin - @benchgroup "egonet" begin - function vertex_function(g::Graph, i::Int) - a = 0 - for u in neighbors(g, i) - a += degree(g, u) - end - return a - end - - function twohop(g::Graph, i::Int) - a = 0 - for u in neighbors(g, i) - for v in neighbors(g, u) - a += degree(g, v) - end - end - return a - end - function mapvertices(f, g::Graph) - n = nv(g) - a = zeros(Int, n) - Threads.@threads for i in 1:n - a[i] = f(g, i) - end - return a - end +SUITE["parallel"] = BenchmarkGroup([], "egonet" => BenchmarkGroup([])) - function mapvertices_single(f, g) - n = nv(g) - a = zeros(Int, n) - for i in 1:n - a[i] = f(g, i) - end - return a - end +SUITE["serial"] = BenchmarkGroup([], "egonet" => BenchmarkGroup([])) - function comparison(f, g) - println("Mulithreaded on $(Threads.nthreads())") - b1 = @benchmarkable mapvertices($f, $g) - println(b1) +function vertex_function(g::Graph, i::Int) + a = 0 + for u in neighbors(g, i) + a += degree(g, u) + end + return a +end - println("singlethreaded") - b2 = @benchmarkable mapvertices_single($f, $g) - println(b2) - return println("done") +function twohop(g::Graph, i::Int) + a = 0 + for u in neighbors(g, i) + for v in neighbors(g, u) + a += degree(g, v) end + end + return a +end - nv_ = 10000 - g = SimpleGraph(nv_, 64 * nv_) - f = vertex_function - println(g) +function mapvertices(f, g::Graph) + n = nv(g) + a = zeros(Int, n) + Threads.@threads for i in 1:n + a[i] = f(g, i) + end + return a +end - comparison(vertex_function, g) - comparison(twohop, g) +function mapvertices_single(f, g) + n = nv(g) + a = zeros(Int, n) + for i in 1:n + a[i] = f(g, i) end + return a +end + +let + nv_ = 10000 + g = SimpleGraph(nv_, 64 * nv_) + + SUITE["parallel"]["egonet"]["vertexfunction"] = @benchmarkable mapvertices( + $vertex_function, $g + ) + SUITE["parallel"]["egonet"]["twohop"] = @benchmarkable mapvertices($twohop, $g) + + SUITE["serial"]["egonet"]["vertexfunction"] = @benchmarkable mapvertices_single( + $vertex_function, $g + ) + SUITE["serial"]["egonet"]["twohop"] = @benchmarkable mapvertices_single($twohop, $g) end diff --git a/benchmark/serial/centrality.jl b/benchmark/serial/centrality.jl new file mode 100644 index 000000000..dae87826a --- /dev/null +++ b/benchmark/serial/centrality.jl @@ -0,0 +1,37 @@ +SUITE["centrality"] = BenchmarkGroup( + [], "graphs" => BenchmarkGroup([]), "digraphs" => BenchmarkGroup([]) +) + +# graphs +SUITE["centrality"]["graphs"]["degree_centrality"] = @benchmarkable [ + Graphs.degree_centrality(g) for (_, g) in $GRAPHS +] +SUITE["centrality"]["graphs"]["closeness_centrality"] = @benchmarkable [ + Graphs.closeness_centrality(g) for (_, g) in $GRAPHS +] +# if nv(g) < 1000 is needed ? +SUITE["centrality"]["graphs"]["betweenness_centrality"] = @benchmarkable [ + Graphs.betweenness_centrality(g) for (_, g) in $GRAPHS +] +SUITE["centrality"]["graphs"]["katz_centrality"] = @benchmarkable [ + Graphs.katz_centrality(g) for (_, g) in $GRAPHS +] + +#digraphs +SUITE["centrality"]["digraphs"]["degree_centrality"] = @benchmarkable [ + Graphs.degree_centrality(g) for (_, g) in $DIGRAPHS +] +SUITE["centrality"]["digraphs"]["closeness_centrality"] = @benchmarkable [ + Graphs.closeness_centrality(g) for (_, g) in $DIGRAPHS +] +# if nv(g) < 1000 is needed ? +SUITE["centrality"]["digraphs"]["betweenness_centrality"] = @benchmarkable [ + Graphs.betweenness_centrality(g) for (_, g) in $DIGRAPHS +] +SUITE["centrality"]["digraphs"]["katz_centrality"] = @benchmarkable [ + Graphs.katz_centrality(g) for (_, g) in $DIGRAPHS +] +# if nv(g) < 500 is needed ? +SUITE["centrality"]["digraphs"]["pagerank"] = @benchmarkable [ + Graphs.pagerank(g) for (_, g) in $DIGRAPHS +] diff --git a/benchmark/serial/connectivity.jl b/benchmark/serial/connectivity.jl new file mode 100644 index 000000000..6e610878c --- /dev/null +++ b/benchmark/serial/connectivity.jl @@ -0,0 +1,11 @@ +SUITE["connectivity"] = BenchmarkGroup( + [], "graphs" => BenchmarkGroup([]), "digraphs" => BenchmarkGroup([]) +) + +SUITE["connectivity"]["digraphs"]["strongly_connected_components"] = @benchmarkable [ + Graphs.strongly_connected_components(g) for (_, g) in $DIGRAPHS +] + +SUITE["connectivity"]["graphs"]["connected_components"] = @benchmarkable [ + Graphs.connected_components(g) for (_, g) in $GRAPHS +] diff --git a/benchmark/serial/core.jl b/benchmark/serial/core.jl new file mode 100644 index 000000000..bd6a209e1 --- /dev/null +++ b/benchmark/serial/core.jl @@ -0,0 +1,41 @@ +SUITE["core"] = BenchmarkGroup( + [], + "nv" => BenchmarkGroup([]), + "edges" => BenchmarkGroup([]), + "has_edge" => BenchmarkGroup([]), +) + +# nv +SUITE["core"]["nv"]["graphs"] = @benchmarkable [nv(g) for (_, g) in $GRAPHS] +SUITE["core"]["nv"]["digraphs"] = @benchmarkable [nv(g) for (_, g) in $DIGRAPHS] + +# iterate edges +function iter_edges(g::AbstractGraph) + i = 0 + for e in edges(g) + i += 1 + end + return i +end + +SUITE["core"]["edges"]["graphs"] = @benchmarkable [iter_edges(g) for (_, g) in $GRAPHS] +SUITE["core"]["edges"]["digraphs"] = @benchmarkable [iter_edges(g) for (_, g) in $DIGRAPHS] + +# has edge +function all_has_edge(g::AbstractGraph) + nvg = nv(g) + srcs = rand([1:nvg;], cld(nvg, 4)) + dsts = rand([1:nvg;], cld(nvg, 4)) + i = 0 + for (s, d) in zip(srcs, dsts) + if has_edge(g, s, d) + i += 1 + end + end + return i +end + +SUITE["core"]["has_edge"]["graphs"] = @benchmarkable [all_has_edge(g) for (_, g) in $GRAPHS] +SUITE["core"]["has_edge"]["digraphs"] = @benchmarkable [ + all_has_edge(g) for (_, g) in $DIGRAPHS +] diff --git a/benchmark/edges.jl b/benchmark/serial/edges.jl similarity index 56% rename from benchmark/edges.jl rename to benchmark/serial/edges.jl index c35329d4d..cf2f1d7aa 100644 --- a/benchmark/edges.jl +++ b/benchmark/serial/edges.jl @@ -5,7 +5,7 @@ const P = Pair{Int,Int} convert(::Type{Tuple}, e::Pair) = (e.first, e.second) function fille(n) - t = Array{Graphs.Edge,1}(n) + t = Vector{Graphs.Edge}(undef, n) for i in 1:n t[i] = Graphs.Edge(i, i + 1) end @@ -13,7 +13,7 @@ function fille(n) end function fillp(n) - t = Array{P,1}(n) + t = Vector{P}(undef, n) for i in 1:n t[i] = P(i, i + 1) end @@ -30,11 +30,15 @@ function tsum(t) return x end -n = 10000 -@benchgroup "edges" begin - @bench "$(n): fille" fille($n) - @bench "$(n): fillp" fillp($n) +let + n = 10_000 + + SUITE["edges"] = BenchmarkGroup([]) + SUITE["edges"]["fille"] = @benchmarkable fille($n) + SUITE["edges"]["fillp"] = @benchmarkable fille($n) + a, b = fille(n), fillp(n) - @bench "$(n): tsume" tsum($a) - @bench "$(n): tsump" tsum($b) -end # edges + + SUITE["edges"]["tsume"] = @benchmarkable tsum($a) + SUITE["edges"]["tsump"] = @benchmarkable tsum($b) +end diff --git a/benchmark/serial/insertions.jl b/benchmark/serial/insertions.jl new file mode 100644 index 000000000..10e107508 --- /dev/null +++ b/benchmark/serial/insertions.jl @@ -0,0 +1,6 @@ +SUITE["insertions"] = BenchmarkGroup([]) + +let + n = 10_000 + SUITE["insertions"]["SG(n,e) Generation"] = @benchmarkable SimpleGraph($n, 16 * $n) +end diff --git a/benchmark/serial/traversals.jl b/benchmark/serial/traversals.jl new file mode 100644 index 000000000..2a7416d5f --- /dev/null +++ b/benchmark/serial/traversals.jl @@ -0,0 +1,17 @@ +SUITE["traversals"] = BenchmarkGroup( + [], "graphs" => BenchmarkGroup([]), "digraphs" => BenchmarkGroup([]) +) + +SUITE["traversals"]["graphs"]["bfs_tree"] = @benchmarkable [ + Graphs.bfs_tree(g, 1) for (_, g) in $GRAPHS +] +SUITE["traversals"]["graphs"]["dfs_tree"] = @benchmarkable [ + Graphs.dfs_tree(g, 1) for (_, g) in $GRAPHS +] + +SUITE["traversals"]["digraphs"]["bfs_tree"] = @benchmarkable [ + Graphs.bfs_tree(g, 1) for (_, g) in $DIGRAPHS +] +SUITE["traversals"]["digraphs"]["dfs_tree"] = @benchmarkable [ + Graphs.dfs_tree(g, 1) for (_, g) in $DIGRAPHS +] diff --git a/benchmark/traversals.jl b/benchmark/traversals.jl deleted file mode 100644 index 97b511173..000000000 --- a/benchmark/traversals.jl +++ /dev/null @@ -1,14 +0,0 @@ -@benchgroup "traversals" begin - @benchgroup "graphs" begin - for (name, g) in GRAPHS - @bench "$(name): bfs_tree" Graphs.bfs_tree($g, 1) - @bench "$(name): dfs_tree" Graphs.dfs_tree($g, 1) - end - end # graphs - @benchgroup "digraphs" begin - for (name, g) in DIGRAPHS - @bench "$(name): bfs_tree" Graphs.bfs_tree($g, 1) - @bench "$(name): dfs_tree" Graphs.dfs_tree($g, 1) - end - end # digraphs -end # traversals diff --git a/benchmark/tune.json b/benchmark/tune.json new file mode 100644 index 000000000..ed04988e2 --- /dev/null +++ b/benchmark/tune.json @@ -0,0 +1,588 @@ +[ + { + "Julia": "1.10.1", + "BenchmarkTools": "1.0.0" + }, + [ + [ + "BenchmarkGroup", + { + "data": { + "centrality": [ + "BenchmarkGroup", + { + "data": { + "graphs": [ + "BenchmarkGroup", + { + "data": { + "closeness_centrality": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "betweenness_centrality": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "katz_centrality": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "degree_centrality": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 28, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ] + }, + "tags": [] + } + ], + "digraphs": [ + "BenchmarkGroup", + { + "data": { + "closeness_centrality": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "betweenness_centrality": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "katz_centrality": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "degree_centrality": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 10, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "pagerank": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ] + }, + "tags": [] + } + ] + }, + "tags": [] + } + ], + "parallel": [ + "BenchmarkGroup", + { + "data": { + "egonet": [ + "BenchmarkGroup", + { + "data": { + "vertexfunction": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "twohop": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ] + }, + "tags": [] + } + ] + }, + "tags": [] + } + ], + "core": [ + "BenchmarkGroup", + { + "data": { + "nv": [ + "BenchmarkGroup", + { + "data": { + "graphs": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 807, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "digraphs": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 846, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ] + }, + "tags": [] + } + ], + "edges": [ + "BenchmarkGroup", + { + "data": { + "graphs": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 7, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "digraphs": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 7, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ] + }, + "tags": [] + } + ], + "has_edge": [ + "BenchmarkGroup", + { + "data": { + "graphs": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 8, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "digraphs": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 8, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ] + }, + "tags": [] + } + ] + }, + "tags": [] + } + ], + "connectivity": [ + "BenchmarkGroup", + { + "data": { + "graphs": [ + "BenchmarkGroup", + { + "data": { + "connected_components": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ] + }, + "tags": [] + } + ], + "digraphs": [ + "BenchmarkGroup", + { + "data": { + "strongly_connected_components": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ] + }, + "tags": [] + } + ] + }, + "tags": [] + } + ], + "insertions": [ + "BenchmarkGroup", + { + "data": { + "SG(n,e) Generation": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ] + }, + "tags": [] + } + ], + "traversals": [ + "BenchmarkGroup", + { + "data": { + "graphs": [ + "BenchmarkGroup", + { + "data": { + "bfs_tree": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "dfs_tree": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ] + }, + "tags": [] + } + ], + "digraphs": [ + "BenchmarkGroup", + { + "data": { + "bfs_tree": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "dfs_tree": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ] + }, + "tags": [] + } + ] + }, + "tags": [] + } + ], + "serial": [ + "BenchmarkGroup", + { + "data": { + "egonet": [ + "BenchmarkGroup", + { + "data": { + "vertexfunction": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "twohop": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ] + }, + "tags": [] + } + ] + }, + "tags": [] + } + ], + "edges": [ + "BenchmarkGroup", + { + "data": { + "fillp": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "fille": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "tsume": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ], + "tsump": [ + "Parameters", + { + "gctrial": true, + "time_tolerance": 0.05, + "evals_set": false, + "samples": 10000, + "evals": 1, + "gcsample": false, + "seconds": 5, + "overhead": 0, + "memory_tolerance": 0.01 + } + ] + }, + "tags": [] + } + ] + }, + "tags": [] + } + ] + ] +]