{"id":17514090,"url":"https://github.com/rohitvarkey/graphbenchmarks.jl","last_synced_at":"2025-07-22T15:33:15.035Z","repository":{"id":81084913,"uuid":"83762701","full_name":"rohitvarkey/GraphBenchmarks.jl","owner":"rohitvarkey","description":"Easily implement benchmarks for Julia graph libraries","archived":false,"fork":false,"pushed_at":"2017-03-07T09:20:47.000Z","size":16,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-10T14:06:15.848Z","etag":null,"topics":["benchmark","graphs","julia"],"latest_commit_sha":null,"homepage":null,"language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rohitvarkey.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-03T05:52:36.000Z","updated_at":"2017-03-04T03:57:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"b96c88fa-25f2-4838-a775-661ebed4981b","html_url":"https://github.com/rohitvarkey/GraphBenchmarks.jl","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rohitvarkey/GraphBenchmarks.jl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rohitvarkey%2FGraphBenchmarks.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rohitvarkey%2FGraphBenchmarks.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rohitvarkey%2FGraphBenchmarks.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rohitvarkey%2FGraphBenchmarks.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rohitvarkey","download_url":"https://codeload.github.com/rohitvarkey/GraphBenchmarks.jl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rohitvarkey%2FGraphBenchmarks.jl/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266520799,"owners_count":23942335,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmark","graphs","julia"],"created_at":"2024-10-20T07:11:23.908Z","updated_at":"2025-07-22T15:33:15.010Z","avatar_url":"https://github.com/rohitvarkey.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GraphBenchmarks\n\n[![Build Status](https://travis-ci.org/rohitvarkey/GraphBenchmarks.jl.svg?branch=master)](https://travis-ci.org/rohitvarkey/GraphBenchmarks.jl)\n\n[![Coverage Status](https://coveralls.io/repos/rohitvarkey/GraphBenchmarks.jl/badge.svg?branch=master\u0026service=github)](https://coveralls.io/github/rohitvarkey/GraphBenchmarks.jl?branch=master)\n\n[![codecov.io](http://codecov.io/github/rohitvarkey/GraphBenchmarks.jl/coverage.svg?branch=master)](http://codecov.io/github/rohitvarkey/GraphBenchmarks.jl?branch=master)\n\nGraphBenchmarks is aimed at providing a package to be able to write benchmarks\nfor Graph libraries in Julia easily. It provides interfaces that can be specialized\non by Graph libraries and allow for easily switching between benchmark specifications,\ngraph representation, graph algorithms and input graph generators.\n\n### Motivation\n\nThe idea behind this package is to be able to perform a workflow such as\n```julia\nusing GraphBenchmarks\nusing StingerWrapper, LightGraphs\nlevelsyncstinger = benchmark(Graph500(), StingerGraph, LevelSynchronousBFS(), Kronecker(15, 16))\nserialstinger = benchmark(Graph500(), StingerGraph, SerialBFS(), Kronecker(15, 16))\nseriallightgraphs = benchmark(Graph500(), LGGraph{DiGraph}, BFS(), Kronecker(15, 16))\n\njudge(minimum(levelsyncstinger),minimum(serialstinger))\njudge(minimum(serialstinger),minimum(seriallightgraphs))\njudge(minimum(levelsyncstinger),minimum(seriallightgraphs))\n```\n\n### The `benchmark` function\n\nThe `benchmark` function is the core function of the package which is\n```julia\nfunction benchmark{B \u003c: GraphBenchmarkSpec, T \u003c: GraphType, A \u003c: GraphAlgorithm, G \u003c: GraphGenerator}(\n        benchmark::B,\n        t::Type{T},\n        alg::A,\n        generator::G\n    )\n    #Generate the edges to be added based on the generator. All generators should return a 2D Array with\n    #the edges.\n    edges = generate(generator)\n    #construct a graph `g` of type `t` with the edges in `edges`\n    g = construct(t, edges)\n    #Run the benchmark\n    trial = runbench(benchmark, alg, g)\nend\n```\n\n### The abstract types\nUsers can create subtypes of the each of the abstract types for the following usecases:\n\n- `GraphBenchmarkSpec` - Allows to specify a benchmark specification. For example,\nthe `Graph500` benchmark picks 64 random vertices as sources for a BFS. A benchmark I\nuse in StingerWrapper.jl was to pick the first 1000. I could just define a\n`StingerBenchmark` type that allowed me to choose the sources I wanted. Similarly,\nother benchmark specifications can be implemented.\n- `GraphType` - Users can define their graph representation type as a subtype of\n`GraphType` and define a `construct` method which constructs the graph representation given an `Array` of edges.\n- `GraphAlgorithm` - This decides the algorithm to be run. Mostly a stub to help on\ndispatch but can be used to encode parameters required for an algorithm.\n- `GraphGenerator` - Create a generator. Generators must implement a `generate` method that\nreturns the edge array. See the example `Kronecker` [generator](src/generators/kronecker.jl).\n\n### Defining the benchmark\n\nA `runbench` method that takes the benchmark specifications, the algorithm to be used\nand the graph type should return a `BenchmarkTools.Trial`. Ideally, the package should\nprovide a macro to replace `@benchmarkable` and assign parameters to it that have been\nconfigured in the package.\n\n### Examples\n\nSee [LightGraphs](src/examples/lg.jl) and [StingerWrapper](src/examples/stinger.jl) as examples\non using the interface and the [tests](test/runtests.jl) to see an example workflow.\n\n*NOTE: This is a prototype and the interface is subject to change.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frohitvarkey%2Fgraphbenchmarks.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frohitvarkey%2Fgraphbenchmarks.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frohitvarkey%2Fgraphbenchmarks.jl/lists"}