{"id":20637526,"url":"https://github.com/long-gong/switch-simulator-cpp","last_synced_at":"2026-06-10T09:31:35.483Z","repository":{"id":176487814,"uuid":"274310578","full_name":"long-gong/switch-simulator-cpp","owner":"long-gong","description":"Input-queued switch simulator (C++ version)","archived":false,"fork":false,"pushed_at":"2020-06-23T16:45:17.000Z","size":953,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-09T08:40:53.142Z","etag":null,"topics":["benchmarks","cpp","crossbar-scheduler","input-queued-switch","queue-proportional-smapling","simulator","switching"],"latest_commit_sha":null,"homepage":"https://github.com/long-gong/switch-simulator-cpp","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/long-gong.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2020-06-23T04:44:18.000Z","updated_at":"2020-06-23T16:59:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"91b6f916-113c-467d-8b86-62d111dd3849","html_url":"https://github.com/long-gong/switch-simulator-cpp","commit_stats":null,"previous_names":["long-gong/switch-simulator-cpp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/long-gong/switch-simulator-cpp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/long-gong%2Fswitch-simulator-cpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/long-gong%2Fswitch-simulator-cpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/long-gong%2Fswitch-simulator-cpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/long-gong%2Fswitch-simulator-cpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/long-gong","download_url":"https://codeload.github.com/long-gong/switch-simulator-cpp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/long-gong%2Fswitch-simulator-cpp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34146871,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-10T02:00:07.152Z","response_time":89,"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":["benchmarks","cpp","crossbar-scheduler","input-queued-switch","queue-proportional-smapling","simulator","switching"],"created_at":"2024-11-16T15:14:48.936Z","updated_at":"2026-06-10T09:31:35.166Z","avatar_url":"https://github.com/long-gong.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SWITCH SIMULATOR \n\n[![Build Status](https://travis-ci.org/long-gong/switch-simulator-cpp.svg?branch=master)](https://travis-ci.org/long-gong/switch-simulator-cpp)\n\nSimulation codes (full version), C++ version of [our old simulation codes in C](https://github.com/long-gong/switch-simulator) and adding more benchmark algorithms and more \"features\" (e.g., P95 delay), for our switching paper:\n\n[Long Gong](https://lgong30.github.io/), Paul Tune, Liang Liu, Sen Yang, and [Jun (Jim) Xu](https://www.cc.gatech.edu/home/jx/). 2017. [Queue-Proportional Sampling: A Better Approach to Crossbar Scheduling for Input-Queued Switches](https://www.cc.gatech.edu/home/jx/reprints/Gong%20et%20al.%20-%202017%20-%20Queue-Proportional%20Sampling%20A%20Better%20Approach%20to%20.pdf). Proc. ACM Meas. Anal. Comput. Syst. 1, 1, Article 3 (June 2017), 33 pages. DOI:https://doi.org/10.1145/3084440\n  \n## Repository Structure\n\n    .\n    ├── common                   Source codes shared by different algorithms\n    ├── FQPP_QPA_iSLIP           Source codes for variants of QPS-iSLIP (with PA)\n    ├── FQPP_QPA_Serena          Source codes for variants of QPS-SERENA (with PA)\n    ├── FQPS_iSLIP               Source codes for variants of QPS-iSLIP \n    ├── FQPS_Serena              Source codes for variants of QPS-SERENA \n    ├── iLQF                     Source codes for iLQF\n    ├── iLQF_ShakeUp             Source codes for iLQF-ShakeUp\n    ├── iSLIP                    Source codes for iSLIP\n    ├── iSLIP_ShakeUp            Source codes for iSLIP-ShakeUp\n    ├── MWM                      Source codes for Maximum Weighted Maximum (MWM)\n    ├── O1                       Source codes for the O(1) algorithm\n    ├── py                       Some useful python script\n    ├── QPP_QPA                  Source codes for QPS (with PA)\n    ├── QPP_QPA_iSLIP            Source codes for QPS-iSLIP (with PA)\n    ├── QPP_QPA_Serena           Source codes for QPS-SERENA (with PA)\n    ├── QPS                      Source codes for QPS \n    ├── QPS_iSLIP                Source codes for QPS-iSLIP \n    ├── QPS_Serena               Source codes for QPS-SERENA \n    ├── results                  Directory for storing simulation results\n    └── Serena                   Source codes for SERENA \n\n## Benchmark Switching Algorithms (Selected)\n\nAlgorithms from literature:\n\n1. **iSLIP** [[1](#1)]: the standard iSLIP algorithm,\n2. **PIM** [[2](#2)]: parallel iterative matching,\n3. **MWM** [[4](#4)]: maximum weighted matching,\n4. **SERENA** [[5](#5)]: previous matching + arrival graph,\n5. **iLQF** [[3](#3)]: iterative longest queue first, and\n6. **ShakeUp** (including **iSLIP-ShakeUP** and **iLQF-ShakeUp**) [[7](#7)]: another \"add-on\" approach\n7. **O(1)** [[8](#8)]: a O(1) crossbar scheduling algorithm based on Glauber dynamics \n\nFinal proposals (**USED IN OUR PAPER**):\n\n1. **QPS-iSLIP** [[6](#6)]: Queue Proportional Sampling (QPS) augmented iSLIP\n2. **QPS-SERENA** [[6](#7)]: Queue Proportional Sampling (QPS) augmented SERENA\n\nOther proposals (**COMPARED IN OUR PAPER**)\n\n1. **FQPS-iSLIP** [[6](#6)]: Variants of Queue Proportional Sampling (QPS) augmented iSLIP\n2. **FQPS-SERENA** [[6](#7)]: Variants of Queue Proportional Sampling (QPS) augmented SERENA\n3. **QPS-iSLIP (with PA)**: Queue Proportional Sampling (QPS), with Proportional Accepting (PA), augmented iSLIP\n4. **QPS-SERENA (with PA)**: Queue Proportional Sampling (QPS), with Proportional Accepting (PA), augmented SERENA\n\n## Usage\n\n+ Install dependencies: `./install_dependencies.sh`\n+ compile: \n    ```bash\n    mkdir build \n    cd build\n    cmake ..\n    make\n    ```\n\n## Traffic Modules\n\n### Traffic Patterns\n\n1. uniform,\n2. diagonal,\n3. log diagonal, and\n4. quasi diagonal.\n\n### Arrival Processes\n\n1. Bernoulli,\n2. Pareto bursts\n\n## Acknowledgements\n\nThis project was modified from [Dr. Bill Lin](http://cwcserv.ucsd.edu/~billlin/)'s original source codes.\n\n## Authors\n\n+ Long Gong long.github@gmail.com\n\n## References\n\n[\u003ca id=\"1\"\u003e1\u003c/a\u003e] [McKeown, N.](http://yuba.stanford.edu/~nickm/), 1999. [The iSLIP scheduling algorithm for input-queued switches](https://www.cs.rutgers.edu/~sn624/552-F18/papers/islip.pdf). IEEE/ACM transactions on networking, 7(2), pp.188-201.  \n[\u003ca id=\"2\"\u003e2\u003c/a\u003e] Anderson, T.E., Owicki, S.S., Saxe, J.B. and Thacker, C.P., 1993. [High-speed switch scheduling for local-area networks](https://dl.acm.org/doi/abs/10.1145/161541.161736). ACM Transactions on Computer Systems (TOCS), 11(4), pp.319-352.  \n[\u003ca id=\"3\"\u003e3\u003c/a\u003e] [McKeown, N.W.](http://yuba.stanford.edu/~nickm/), 1995. [Scheduling algorithms for input-queued cell switches](http://yuba.stanford.edu/~nickm/papers/nickMcKeown_thesis.pdf) (Doctoral dissertation, University of California, Berkeley).  \n[\u003ca id=\"4\"\u003e4\u003c/a\u003e] [McKeown, N., Mekkittikul](http://yuba.stanford.edu/~nickm/), A., Anantharam, V. and Walrand, J., 1999. [Achieving 100% throughput in an input-queued switch](http://yuba.stanford.edu/~nickm/papers/IEEE_COMM_V3.pdf). IEEE Transactions on Communications, 47(8), pp.1260-1267.  \n[\u003ca id=\"5\"\u003e5\u003c/a\u003e] Giaccone, P., Prabhakar, B. and [Shah, D.](https://devavrat.mit.edu/), 2003. [Randomized scheduling algorithms for high-aggregate bandwidth switches](https://ieeexplore.ieee.org/document/1197700). IEEE Journal on Selected Areas in Communications, 21(4), pp.546-559.\n[\u003ca id=\"6\"\u003e6\u003c/a\u003e] Gong, L., Tune, P., Liu, L., Yang, S. and Xu, J., 2017. [Queue-Proportional Sampling: A Better Approach to Crossbar Scheduling for Input-Queued Switches](https://www.cc.gatech.edu/home/jx/reprints/Gong%20et%20al.%20-%202017%20-%20Queue-Proportional%20Sampling%20A%20Better%20Approach%20to%20.pdf). Proceedings of the ACM on Measurement and Analysis of Computing Systems, 1(1), pp.1-33.  \n[\u003ca id=\"7\"\u003e7\u003c/a\u003e] Goudreau, M.W., Kolliopoulos, S.G. and Rao, S.B., 2000, March. [Scheduling algorithms for input-queued switches: randomized techniques and experimental evaluation](https://ieeexplore.ieee.org/document/832562). In Proceedings IEEE INFOCOM 2000. Conference on Computer Communications. Nineteenth Annual Joint Conference of the IEEE Computer and Communications Societies (Cat. No. 00CH37064) (Vol. 3, pp. 1634-1643). IEEE.  \n[\u003ca id=\"8\"\u003e8\u003c/a\u003e] Ye, S., Shen, Y. and Panwar, S., 2010, September. [An O (1) scheduling algorithm for variable-size packet switching systems](https://ieeexplore.ieee.org/document/5707119). In 2010 48th Annual Allerton Conference on Communication, Control, and Computing (Allerton) (pp. 1683-1690). IEEE.  \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flong-gong%2Fswitch-simulator-cpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flong-gong%2Fswitch-simulator-cpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flong-gong%2Fswitch-simulator-cpp/lists"}