{"id":19863802,"url":"https://github.com/sandialabs/tenzing","last_synced_at":"2026-04-29T14:34:08.147Z","repository":{"id":79053525,"uuid":"463304556","full_name":"sandialabs/tenzing","owner":"sandialabs","description":"Core library for optimizing CUDA+MPI programs as sequential decision problems.","archived":false,"fork":false,"pushed_at":"2022-03-04T13:50:23.000Z","size":1671,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-11T15:25:15.512Z","etag":null,"topics":["cuda","mpi","scr-2759","sequential-decision-problem"],"latest_commit_sha":null,"homepage":"","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/sandialabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-02-24T21:18:21.000Z","updated_at":"2024-02-20T19:01:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"89793629-7759-42e8-965d-bbf4962e9b19","html_url":"https://github.com/sandialabs/tenzing","commit_stats":{"total_commits":291,"total_committers":3,"mean_commits":97.0,"dds":0.05841924398625431,"last_synced_commit":"816a3f5843e68f1a674f3de30506bb84e7671df1"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandialabs%2Ftenzing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandialabs%2Ftenzing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandialabs%2Ftenzing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandialabs%2Ftenzing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sandialabs","download_url":"https://codeload.github.com/sandialabs/tenzing/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241272628,"owners_count":19937092,"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":["cuda","mpi","scr-2759","sequential-decision-problem"],"created_at":"2024-11-12T15:16:08.958Z","updated_at":"2026-04-29T14:34:08.068Z","avatar_url":"https://github.com/sandialabs.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tenzing-core\n\nThe core library of the Tenzing project.\ntenzing-core provides facilities for interacting with CUDA + MPI programs as sequential decision problems.\nThis facilitates optimizing CUDA + MPI programs using sequential decision strategies.\n\nTwo solvers are available\n* [tenzing-mcts](https://github.com/sandialabs/tenzing-mcts):  Uses Monte-Carlo tree search\n* [tenzing-dfs](https://github.com/sandialabs/tenzing-dfs): Uses depth-first search\n\n[![Ubuntu 20.04 / CUDA 11.6.1 / OpenMPI 4.0.3](https://github.com/sandialabs/tenzing-core/actions/workflows/ubuntu2004_cuda116_openmpi.yml/badge.svg)](https://github.com/sandialabs/tenzing-core/actions/workflows/ubuntu2004_cuda116_openmpi.yml)\n\n## Build\n\nOn a supported platform:\n```bash\nsource load-env.sh\n```\n\nIn any case:\n```bash\nmkdir build \u0026\u0026 cd build\ncmake .. -DCMAKE_CUDA_ARCHITECTURES=70\nmake\n```\n\n## Tests\n\nTests are split into two locations:\n* unit tests may be defined in source files\n* tests with a more \"itegration\" flavor are in `test/`\n\nTo run tests, you can do\n* `make test`\n* `ctest`\n* `tenzing-all`\n  * `-ltc`: list tests cases\n  * `-tc=\"a,b\"`: only run test cases named `a` and `b`\n\nThis creates some CMake complexity, as the test functions present in static libraries will not be linked into the resulting test binary.\nTherefore, we use a CMake object library to generate the test binary, and then generate a static library from the object library.\nobject library properties do not get propagated properly / at all, so we have to redefine what needs to be linked and included, etc\n\ntenzing-core has been tested on the following platforms:\n* NERSC perlmutter: g++ 10.3 / nvcc 11.4 / Cray MPICH 8.1.13\n* Sandia vortex (similar to ORNL Lassen and OLCF Summit): g++ 7.5.0 / nvcc 10.1 / IBM Spectrum MPI\n* Sandia ascicgpu\n\n## Documentation\n\n* Visit the API documentation in [docs/api.md](docs/api.md)\n* `ascicgpu` system documentation in [docs/ascicgpu.md](docs/ascicgpu.md)\n* `vortex` system documentation in [docs/vortex.md](docs/vortex.md)\n* `perlmutter` ssytem documentation in [docs/perlmutter.md](docs/perlmutter.md)\n\n## Roadmap\n\n- [ ] python bindings (with pybind11)\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines.\n\n## Design Issues\n\n- [ ] enable / disable CUDA / MPI\n  - [ ] isolate Ser/Des\n  - [ ] isolate platform assignments\n- [ ] a `BoundOp` cannot produce the `std::shared_ptr\u003cOpBase\u003e` of it's unbound self, only `OpBase`\n  - can't ask an `std::shared_ptr\u003cBoundOp\u003e` for `std::shared_ptr\u003cOpBase\u003e`\n  - maybe std::shared_from_this?\n- [ ] special status of `Start` and `End` is a bit clumsy.\n  - maybe there should be a `StartEnd : BoundOp` that they both are instead of separate classes\n    - in the algs they're probably treated the same (always synced, etc)\n- [ ] `Platform` is a clumsy abstraction, since it also tracks resources that are only valid for a single order\n   - e.g., each order requires a certain number of events, which can be resued for the next order\n\n## Copyright and License\n\nPlease see [NOTICE.md](https://github.com/sandialabs/tenzing-core/blob/master/NOTICE.md) for copyright and license information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandialabs%2Ftenzing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsandialabs%2Ftenzing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandialabs%2Ftenzing/lists"}