{"id":17646986,"url":"https://github.com/bencardoen/devs-ex-machina","last_synced_at":"2025-03-30T08:41:25.999Z","repository":{"id":244826855,"uuid":"816384891","full_name":"bencardoen/devs-ex-machina","owner":"bencardoen","description":"A PDEVS C++ parallel simulator. supporting multiple synchronization paradigms","archived":false,"fork":false,"pushed_at":"2024-06-17T16:33:28.000Z","size":59936,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-05T10:49:27.167Z","etag":null,"topics":["conservative-concurrency","cpp","discrete-event-simulation","memory-allocator","optimistic-concurrency","pdevs","simulation"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"eupl-1.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bencardoen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.bib","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-17T16:29:55.000Z","updated_at":"2024-06-17T16:34:39.000Z","dependencies_parsed_at":"2024-06-17T18:54:53.131Z","dependency_job_id":null,"html_url":"https://github.com/bencardoen/devs-ex-machina","commit_stats":null,"previous_names":["bencardoen/devs-ex-machina"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bencardoen%2Fdevs-ex-machina","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bencardoen%2Fdevs-ex-machina/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bencardoen%2Fdevs-ex-machina/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bencardoen%2Fdevs-ex-machina/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bencardoen","download_url":"https://codeload.github.com/bencardoen/devs-ex-machina/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246296583,"owners_count":20754632,"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","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":["conservative-concurrency","cpp","discrete-event-simulation","memory-allocator","optimistic-concurrency","pdevs","simulation"],"created_at":"2024-10-23T11:09:25.120Z","updated_at":"2025-03-30T08:41:25.968Z","avatar_url":"https://github.com/bencardoen.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# README #\r\n\r\n### About ###\r\n\r\nThis is the main repository for the Devs Ex Machina ('dxex') simulator, a [PythonPDEVS](http://msdl.cs.mcgill.ca/projects/DEVS/PythonPDEVS ) inspired C++ PDEVS simulation engine supporting conservative and optimistic synchronization. Models written for dxex can be written agnostic of the runtime synchronization protocol.\r\nA quick overview of features:\r\n\r\n* High performance (P)DEVS simulation engine (see publications folder for results)\r\n\r\n* Extensible Tracing module, output to Json, XML, ... . Custom tracers supported. (compile time optional)\r\n\r\n* High performance logging framework (compile time optional)\r\n\r\n* Visualisation and internal tracing of a simulation (compile time optional)\r\n\r\n* Implemented in standard C++ (C++11, C++14 optional) for maximum portability.\r\n\r\n\r\n\r\nFor a more in depth review of the design and features we refer you the to publications. \r\n\r\n### Publications ###\r\n\r\nIf you want to cite this project, kindly use the following bibtex\r\n\r\n```\r\n#!tex\r\n@inproceedings{Dxex,\r\n    author                  = {Cardoen, Ben and\r\n                               Manhaeve, Stijn and\r\n                               Tuijn, Tim and\r\n                               Van Tendeloo, Yentl and\r\n                               Vanmechelen, Kurt and\r\n                               Vangheluwe, Hans and\r\n                               Broeckhove, Jan},\r\n    title                   = {Performance Analysis of a {PDEVS} Simulator Supporting Multiple Synchronization Protocols},\r\n    booktitle               = {Proceedings of the 2016 Symposium on Theory of Modeling and Simulation - DEVS},\r\n    series                  = {TMS/DEVS '16, part of the Spring Simulation Multi-Conference},\r\n    month                   = APR,\r\n    pages                   = {614 -- 621},\r\n    year                    = {2016},\r\n    location                = {Pasadena, CA, USA},\r\n    publisher               = {Society for Computer Simulation International},\r\n}\r\n\r\n```\r\n\r\n\r\nAll benchmark data used in the conference paper can be found in \r\n\r\n* Rscript/data\r\n* publications/Springsim2016/final_libreoffice_plots.ods\r\n\r\nFor the journal paper (under review), the relevant data can be found in\r\n\r\n* publications/Journal/fig/plots.ods\r\n\r\n\r\n\r\n### License ###\r\n\r\nThis project is licensed under the EUPL, see COPYING.txt\r\nCopyright 2014-2016 University of Antwerp\r\nThis project uses GTest, GPerftools, TRNG and includes their sources, see their respective licenses for details.\r\n\r\n### Requirements ###\r\n\r\n* CMake \u003e= 2.8.8\r\n* [Boost](http://www.boost.org/) \u003e= 1.57\r\n* g++ \u003e= 4.8 , clang++ \u003e= 3.4 (versions of GCC up to 6.1 are supported)\r\n* *Nix environment (Linux, Cygwin, MacOS). The project is developed on Fedora 24, Linux Mint 17, these are guaranteed to work.\r\n\r\nOptional:\r\n\r\n* Python 3.4 for the benchmark script.\r\n* R for the statistical analysis of the benchmarks\r\n* Perf (+kernel support) for the profiling/benchmark analysis.\r\n* libubsan (clang or g++ should provide this) for leak/race/undefined detection\r\n* Valgrind for memory profiling\r\n* adevs for comparison\r\n\r\n### Building \u0026 running ###\r\n\r\n* **$ git clone git@bitbucket.org:bcardoen/devs-ex-machina.git**\r\n* **$ cd devs-ex-machina**\r\n* **$ ./setup.sh OPTIONS**\r\n\r\nTo find all options of the setup script: \r\n\r\n* **$ ./setup.sh -h**\r\n* **$ cd ./build/Release/**\r\n* **$ make TARGET OPTIONS**\r\n\r\nA list of targets:\r\n\r\n* dxexmachina\r\n* dxexmachina_devstone\r\n* dxexmachina_interconnect\r\n* dxexmachina_phold\r\n* dxexmachina_pholdtree\r\n\r\nPDEVS can be activated using \r\n\r\n``` ./setup.sh -x \"-DPDEVS=ON\"```\r\n\r\nExtra configuration is possible using the macro \"-DPDEVS_THREADS=x\"\r\n\r\nNote that at this point, only Clang and g++ are supported (with stringname : g++ , clang++)\r\n\r\nThe script makes a new directory build, next to directory main. This build directory will contain directories Debug, Release and Benchmark. Each with different compiler options and macros.\r\n\r\n#### Hotswap ####\r\n\r\nDxex supports runtime switching of synchronization protocols. This is available in branch hotswap, see file \r\nmain/src/test/hotswaptest.cpp for an example on how to use this feature\r\n\r\n#### IDE Support ####\r\n\r\nEclipse \r\n\r\nOptionally, you can open the project in Eclipse (provided you have the CDT plugin):\r\n\r\n* File \u003e Import \u003e General \u003e Existing Projects into Workspace\r\n* Select the clone directory (containing main, build)\r\n* CMake has preconfigured all compile/link settings for you.\r\n\r\nNetBeans (version \u003e= 7.0 with C++ support)\r\n\r\n* File \u003e New Project \u003e C++ Project with existing sources\r\n* Select the devsexmachina/build/{Debug|Release|Benchmark|BenchmarkFrng} as root folder\r\n* The remainder of configuration can be left at default, NetBeans will use the make files generated by CMake\r\n* Optionally, select 'custom' for configuration mode and add \"-j {nrcores*2}\" in \"Build Actions after \"Build Command\"\r\n* NetBeans will build the project and parse the source code, depending on which build you selected (default = dxexmachina kernel) you will have full IDE support for the project (Code completion, refactoring etc... .) \r\n\r\n### Benchmarking ###\r\nAll benchmark data used in the conference paper can be found in \r\n\r\n* Rscript/data\r\n* publications/Springsim2016/final_libreoffice_plots.ods\r\n\r\nFirst, to be able to build our adevs models the source of adevs is required.\r\nCreate a file in {project_root}/main named \"localpreferences.txt\" where you can inform CMake of adevs' path :   \r\n`set(ADEVS_ROOT mypath)`\r\n\r\nIf you wish to run different benchmarks and save the performance results in .csv files: \r\n\r\n**$ ./doBenchmark.py**\r\n\r\nTo find all the options of the doBenchmark script: \r\n\r\n**$ ./doBenchmark.py -h**\r\n\r\nThe memory benchmarks (only if you have at least 8GB RAM) requires a POSIX shell, and valgrind. Each benchmark that is profiled for memory can take up to a factor 100 longer to execute under valgrind, please take this into account. The actual memory usage changes little over time (except with optimistic), so you can manually adjust the runtime in the script should this be required.\r\n\r\n```$ ./membench.sh```\r\n\r\n\r\nFor the 2nd paper, this memory profiling script avoids valgrind. \r\n\r\n```$ ./membenchvs.sh```\r\n\r\nThe PDEVS comparison benchmarks were run using\r\n\r\n```$ ./pdevsbench.sh```\r\n\r\n### Windows ###\r\nBuilding on Windows is possible using [Cygwin 64-bit](https://cygwin.com/install.html ).\r\n\r\nThe Cygwin installer will give you the opportunity to install all dependencies. From inside the Cygwin shell you can follow the build instructions above. \r\n\r\nNote that the compiler will issue warnings about -fPic having no effect, this is a harmless side-effect.\r\n\r\nNote that this project is developed on Linux, we cannot guarantee that the latest development version will build on Cygwin without issues.\r\n\r\n### Troubleshooting ###\r\n* CMake fails to find dependencies : \r\nif Boost is not located where cmake looks for them, make a local file in the root project directory named _localpreferences.txt_ where you put\r\n`set(BOOST_ROOT{my_path})`\r\n\r\n* After any change to the CMakeLists.txt, remove your build directory to prevent stale CMake configuration files corrupting the build. The setup.sh script is capable of doing this for you.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbencardoen%2Fdevs-ex-machina","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbencardoen%2Fdevs-ex-machina","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbencardoen%2Fdevs-ex-machina/lists"}