{"id":19863915,"url":"https://github.com/sandialabs/jet-partitioner","last_synced_at":"2025-05-02T05:30:30.792Z","repository":{"id":234495186,"uuid":"748274247","full_name":"sandialabs/Jet-Partitioner","owner":"sandialabs","description":"Jet: Graph Partitioner for GPU","archived":false,"fork":false,"pushed_at":"2025-01-23T20:25:34.000Z","size":156,"stargazers_count":8,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-06T22:38:50.755Z","etag":null,"topics":["graph-algorithm","partitioning-algorithms","scr-2957","snl-comp-science-libs","snl-science-libs"],"latest_commit_sha":null,"homepage":"","language":"C++","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/sandialabs.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}},"created_at":"2024-01-25T16:30:09.000Z","updated_at":"2025-03-31T15:22:09.000Z","dependencies_parsed_at":"2025-01-23T21:32:20.223Z","dependency_job_id":null,"html_url":"https://github.com/sandialabs/Jet-Partitioner","commit_stats":null,"previous_names":["sandialabs/jet-partitioner"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandialabs%2FJet-Partitioner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandialabs%2FJet-Partitioner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandialabs%2FJet-Partitioner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandialabs%2FJet-Partitioner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sandialabs","download_url":"https://codeload.github.com/sandialabs/Jet-Partitioner/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251992563,"owners_count":21677018,"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":["graph-algorithm","partitioning-algorithms","scr-2957","snl-comp-science-libs","snl-science-libs"],"created_at":"2024-11-12T15:16:34.646Z","updated_at":"2025-05-02T05:30:30.770Z","avatar_url":"https://github.com/sandialabs.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# A K-Way Graph Partitioner for the GPU\n\nThe Jet Partitioner is a parallel graph partitioner that runs on most CPU and GPU systems (via Kokkos, a required dependency).\nThis partitioner was developed in a collaboration between Sandia National Labs and Pennsylvania State University.\nFor details about the algorithm, please see https://arxiv.org/abs/2304.13194  \nIf you intend to cite this partitioner in a publication, please cite https://doi.org/10.1137/23M1559129\n\n## Dependencies\n\nKokkos (https://github.com/kokkos/kokkos): Enables performance portable parallelism.  \nKokkosKernels (https://github.com/kokkos/kokkos-kernels): Necessary only for KokkosSparse::CrsMatrix class.  \nMetis (https://github.com/KarypisLab/METIS): Used for initial partitioning of coarsest graph.  \n(Circumstantial) GKLib (https://github.com/KarypisLab/GKlib.git): Needed to link against the github distribution of Metis. Not needed for older distributions of Metis.\n\n## Usage\n\n### Building\n\nStandard CMake build process. CMake version \u003e= 3.23 required. If your Metis build requires GKlib, add `-DLINK_GKLIB=True` to your cmake command when building Jet. You can add `-DMETIS_HINT=\u003cmetis install location\u003e` to help cmake find metis (and gklib if it has the same install location) if you have not added metis to your relevant path variables. Example build scripts are provided for macOS with OpenMP and Linux systems with Cuda. These scripts handle all required dependencies.\n\n### Executables\n\n#### Partitioners\nEach partitioner executable requires 2 parameters. The first is a graph file in metis format, the second is a config file. Multiple sample config files are provided in the \"configs\" directory. Optionally, a third parameter can be used to specify an output file for the partition, and a fourth parameter for runtime statistics in JSON format.  \nAlthough the partitioner itself supports weighted edges and vertices, the import method currently does not support weighted vertices.  \njet: The primary partitioner exe. Coarsening algorithm can be set in config file. Runs on the default device.  \njet\\_host: jet but runs on the host device.  \njet\\_serial: jet but runs on the host on a single thread.\n\n#### Helpers\npstat: Given a metis graph file, partition file, and k-value, will print out quality information on the partition.\n\n### Using Jet Partitioner in Your Code\nWe provide a cmake package that you can install on your system. Add `find_package(jet CONFIG REQUIRED)` to your project's CMakeLists.txt file and link your executable/s to `jet::jet`. Include `jet.h` in your code to use one of the provided partitioning functions. Each function is distinguished by the target Kokkos execution space it will run in and the type of KokkosKernels CrsMatrix which it accepts. Reference `jet_defs.h` for the relevant template definitions of these parameters. You can set the desired part count and imbalance values on the input config_t struct (see `jet_config.h` for other parameters).\n\n#### Tips\nOn Linux systems, you can create a file `~/.cmake/packages/jet/find.txt` that cmake will automatically use to find the jet cmake package.\nInside this file, add the full path to the jet install directory.\n\n### Input Format\nThe partitioner executables accept graphs stored in the metis graph file format. We do not yet support vertex weights within metis graph files.\n\n### Config File format:  \n\\\u003cCoarsening algorithm\\\u003e (0 for 2-hop matching)/(1 for HEC)/(2 for pure matching)/(default is 2-hop matching)  \n\\\u003cNumber of parts\\\u003e  \n\\\u003cPartitioning attempts\\\u003e  \n\\\u003cImbalance value\\\u003e  \n\\\u003cUltra quality settings\\\u003e (Optional) 1 to enable, 0 to disable (default)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandialabs%2Fjet-partitioner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsandialabs%2Fjet-partitioner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandialabs%2Fjet-partitioner/lists"}