{"id":29253591,"url":"https://github.com/spcl/evalnet","last_synced_at":"2025-08-17T01:33:27.888Z","repository":{"id":299367552,"uuid":"998746936","full_name":"spcl/EvalNet","owner":"spcl","description":"Official Implementation of \"EvalNet: A Practical Toolchain for Generation and Analysis of Extreme-Scale Interconnects\"","archived":false,"fork":false,"pushed_at":"2025-08-03T16:39:39.000Z","size":354,"stargazers_count":3,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-03T18:25:30.819Z","etag":null,"topics":["interference","multiplicity","network-analysis","network-topology","networking","shortest-paths"],"latest_commit_sha":null,"homepage":"http://arxiv.org/abs/2105.12663","language":"Python","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/spcl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2025-06-09T07:24:23.000Z","updated_at":"2025-07-27T10:56:45.000Z","dependencies_parsed_at":"2025-06-16T07:36:26.121Z","dependency_job_id":"ea418d7f-150f-48c1-9210-50a380de4cc9","html_url":"https://github.com/spcl/EvalNet","commit_stats":null,"previous_names":["spcl/evalnet"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/spcl/EvalNet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spcl%2FEvalNet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spcl%2FEvalNet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spcl%2FEvalNet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spcl%2FEvalNet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spcl","download_url":"https://codeload.github.com/spcl/EvalNet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spcl%2FEvalNet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270796219,"owners_count":24647319,"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-08-16T02:00:11.002Z","response_time":91,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","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":["interference","multiplicity","network-analysis","network-topology","networking","shortest-paths"],"created_at":"2025-07-04T02:06:57.750Z","updated_at":"2025-08-17T01:33:27.866Z","avatar_url":"https://github.com/spcl.png","language":"Python","readme":"# EvalNet\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"paper/pics/topology_overview.svg\" width=\"95%\"\u003e\n\u003c/p\u003e\n\nThis is the official implementation of [EvalNet: A Practical Toolchain for Generation and Analysis of Extreme-Scale Interconnects](http://arxiv.org/abs/2105.12663).\n\nEvalNet is a toolchain for scalable generation and analysis over 25 important network topologies, such as Slim Fly, PolarFly, and Orthogonal Fat Trees, with a strong focus on path diversity metrics.\nEvalNet provides an extensive and fine-grained analysis of shortest and non-shortest paths, including their multiplicities, lengths, and interference.\n\n\n## Setup Guide\n\nIn order to use this framework, you need to have a working installation of Python 3.9 or newer.\n\n\n### Installing EvalNet\n\nBefore running the installation, make sure to activate your Python environment (if any) beforehand.\n\n```\ngit clone https://github.com/spcl/EvalNet.git\ncd EvalNet\npip install .\napt-get install libsqlite3-dev\ncd analysis\nedit Makefile\nmake\n```\nOur analysis code depends on libsqlite3, so please install its development files (header, static libraries) via your distributions packet manager.\nBefore compiling the source code in the [analysis](analysis) directory, please update the Python version (`PYTHON_VERSION`, default: 3.9) as well as the installation directory of your Python version (`PYTHON_DIR`) as well as your Python packages (`VIRTUALENV_DIR`) in [analysis/Makefile](analysis/Makefile).\nIf necessary, please update the C compiler (default: `gcc`) as well.\n\n\n## Usage\n\nWe have integrated all currently supported functionality into a single tool.\n\n```\npython3 tool.py -h\nusage: tool.py [-h] {generate,validate,clean,info,analyse,plot,show,ggplot,ggplot2} ...\n\npositional arguments:\n  {generate,validate,clean,info,analyse,plot,show,ggplot,ggplot2}\n                        type of operation\n    generate            generates a topology\n    validate            validates a topology\n    clean               removes generated topologies\n    info                saves information about selected topologies\n    analyse             analysing tool\n    plot                plotting tool\n    show                Execute a SQL query and show the results.\n    ggplot              Execute a SQL query and plot results using python-ggplot. Uses matplotlib, pandas and the ggplot package.\n    ggplot2             Execute a SQL query and plot results using R ggplot2. Requires sqldf and ggplot2 for R.\n\noptional arguments:\n  -h, --help            show this help message and exit\n```\nSpecifically the tool supports the generation of new topologies (more in [topogen/README.md](topogen/README.md)), the analysis of already generated topologies as well as plotting the analyzed metrics (more in [analysis/README.md](analysis/README.md)).\n\n\n## Supported Topologies\n\nEvalNet supports the following topologies:\n- n-dimensional hypercube\n- k-ary n-dimensional torus\n- k-ary n-flat (Flattened Butterfly)\n- h-MLFM (Multi-Layer Full-Mesh)\n- k-OFT (Two-Level k-Orthogonal Fat-Tree)\n- Jellyfish (r-regular)\n- regular HyperX\n- Dragonfly (balanced)\n- Fat-Tree (three-stage variant)\n- Xpander\n- 2x oversubscribed Fat-Tree\n- Slim Fly\n- Delorme\n- Brown/Erdos-Renyi (ER) Graphs\n- incremental extensions of Brown/ER graphs\n- Bundlefly\n- Kautz\n- arrangement network\n- extended generalized Fat Tree\n- k-ary-n tree\n- mesh\n- Tofu\n- Cascade Dragonfly\n- Spectralfly\n- Megafly\n- Polarstar\n\n\nThe general command line interface for the topology generation can be found below:\n```\nusage: tool.py generate [-h]\n                        {hypercube,torus,flatbutterfly,mlfm,oft,jellyfish,hyperx,dragonfly,fattree,xpander,slimfly,delorme,brown,brown_ext,bundlefly,kautz,arrnetwork,xgft,karyn,mesh,tofu,casdf,specfly,megafly,polarstar} ...\n\npositional arguments:\n  {hypercube,torus,flatbutterfly,mlfm,oft,jellyfish,hyperx,dragonfly,fattree,xpander,slimfly,delorme,brown,brown_ext,bundlefly,kautz,arrnetwork,xgft,karyn,mesh,tofu,casdf,specfly,megafly,polarstar}\n                        type of topology\n    hypercube           generates a n-dimensional Hypercube topology\n    torus               generates a k-ary n-Torus topology\n    flatbutterfly       generates a k-ary n-flat (Flattened Butterfly)\n    mlfm                generates a h-MLFM topology (Multi-Layer Full-Mesh)\n    oft                 generates a k-OFT topology (Two-Level Orthogonal Fat-Tree)\n    jellyfish           generates a r-regular Jellyfish topology\n    hyperx              generates a regular HyperX topology\n    dragonfly           generates a Dragonfly topology\n    fattree             generates a FatTree topology\n    xpander             generates a Xpander topology\n    slimfly             generates a SlimFly topology\n    delorme             generates a Delorme topology\n    brown               generates a Brown topology\n    brown_ext           generates incremental expansions of a Brown topology\n    bundlefly           generates bundlefly\n    kautz               generates kautz\n    arrnetwork          generates arrangement network\n    xgft                generates extended generalized fat tree\n    karyn               generates k-ary-n Tree\n    mesh                generates Mesh k^n\n    tofu                generates Tofu 6D Tofu\n    casdf               generates Cascade Dragonfly (a=96,p=8,h=10) with g groups\n    specfly             construct lps graphs (spectralfly)\n    megafly             construct megafly\n    polarstar           construct polarstar\n\noptional arguments:\n  -h, --help            show this help message and exit\n```\nWe document the supported parameters for each topology in [topogen/README.md](topogen/README.md).\n\nThe output of the generated topologies is stored in the respective topology directory of the `data` directory.\n\n## Supported Measures\n\nEvalNet supports the following measures:\n- shortest path length\n- shortest path multiplicity\n- count of edge disjoint paths\n- path interference\n\nThe analyze part of the tool comes with the following command line interface:\n```\nusage: tool.py analyse [-h] {shortestpaths,disjointpaths,interference} ...\n\npositional arguments:\n  {shortestpaths,disjointpaths,interference}\n                        type of analysis\n    shortestpaths       analyses shortest paths\n    disjointpaths       analyses disjoint paths\n    interference        analyses interference\n\noptional arguments:\n  -h, --help            show this help message and exit\n```\nWe document the supported parameters for each measure in [analysis/README.md](analysis/README.md#measures).\n\nMultiple topologies as well as the topologies classes, i.e. the number of nodes in the network, can be specified.\nThe output of the analysis is stored in `data/analysis/{analysis type}.db`.\n\n## Supported Visualizations\n\nEvalNet supports the following visualizations:\n- histogram of shortest path length\n- histogram of shortest path multiplicity\n- histogram of count of edge disjoint paths\n- 2-dimentional map of low connectivity pairs\n- histogram of path interference\n- detailed view of path interference\n\nThe respective tool part has the following command line interface:\n```\nusage: tool.py plot [-h] {shortestpaths,multiplicity,disjointpaths,interference,interferencedetail,lowconnectivity} ...\n\npositional arguments:\n  {shortestpaths,multiplicity,disjointpaths,interference,interferencedetail,lowconnectivity}\n                        type of plot\n    shortestpaths       plots shortest paths\n    multiplicity        plots shortest paths multiplicity\n    disjointpaths       plots histogram of disjoint paths\n    interference        plots histogram showing interference\n    interferencedetail  plots histogram showing interference\n    lowconnectivity     low connectivity plot\n\noptional arguments:\n  -h, --help            show this help message and exit\n```\nWe document the supported parameters for each visualization in [analysis/README.md](analysis/README.md#visualizations).\n\n\n## Citations\n\nIf you find this repository useful, please consider giving it a star! If you have any questions or feedback, don't hesitate to reach out and open an issue.\n\nWhen using EvalNet in your work, please reference us with the citation provided below:\n\n```bibtex\n@misc{besta2025evalnet,\n  title = {{EvalNet: A Practical Toolchain for Generation and Analysis of Extreme-Scale Interconnects}},\n  author = {Besta, Maciej and Patrick Iff and Marcel Schneider and Nils Blach and Alessandro Maissen and Salvatore Di Girolamo and Jens Domke and Jascha Krattenmacher and Ankit Singla and Kartik Lakhotia and Laura Monroe and Fabrizio Petrini and Robert Gerstenberger and Hoefler, Torsten},\n  year = 2025,\n  month = Jun,\n  doi = {10.48550/arXiv.2105.12663},\n  url = {http://arxiv.org/abs/2105.12663},\n  eprinttype = {arXiv},\n  eprint = {2105.12663}\n}\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspcl%2Fevalnet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspcl%2Fevalnet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspcl%2Fevalnet/lists"}