{"id":19705885,"url":"https://github.com/llnl/lwgrp","last_synced_at":"2025-04-29T16:32:02.293Z","repository":{"id":4200213,"uuid":"5319596","full_name":"LLNL/lwgrp","owner":"LLNL","description":"The Light-weight Group Library provides methods for MPI codes to quickly create and destroy process groups","archived":false,"fork":false,"pushed_at":"2024-06-28T18:00:56.000Z","size":1308,"stargazers_count":5,"open_issues_count":1,"forks_count":7,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-04-26T14:09:50.937Z","etag":null,"topics":["mpi","shell"],"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/LLNL.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.TXT","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2012-08-06T20:57:39.000Z","updated_at":"2024-06-28T17:45:45.000Z","dependencies_parsed_at":"2024-11-11T21:32:03.287Z","dependency_job_id":"8b35cc57-6b5f-4dd4-bb35-721c637bb278","html_url":"https://github.com/LLNL/lwgrp","commit_stats":{"total_commits":48,"total_committers":2,"mean_commits":24.0,"dds":0.0625,"last_synced_commit":"ad25a9ce79f0e2552bd2503ca93f2d4a975ff93b"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LLNL%2Flwgrp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LLNL%2Flwgrp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LLNL%2Flwgrp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LLNL%2Flwgrp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LLNL","download_url":"https://codeload.github.com/LLNL/lwgrp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251540278,"owners_count":21605875,"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":["mpi","shell"],"created_at":"2024-11-11T21:31:24.124Z","updated_at":"2025-04-29T16:31:57.279Z","avatar_url":"https://github.com/LLNL.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"The light-weight group library defines data structures and collective\noperations to group MPI processes as an ordered set.  Such groups are\nuseful as substitutes for MPI communicators when the overhead of\ncommunicator creation is too costly.  For example, certain sorting\nalgorithms recursively divide processes into subgroups as the sort\nalgorithm progresses.  These groups may be different with each\ninvocation, so that it is inefficient to create and destroy\ncommunicators during the sort routine.\n\nData structures:\n  chain    - each member records addresses of left and right members\n             first and last rank set boundary to MPI_PROC_NULL\n  ring     - like the chain, except first and last rank wrap around \n  logchain - each member records addresses of each member 2^d hops\n             to left and right d=0..log(N)-1 (MPI_PROC_NULL at ends)\n  logring  - each member records addresses of each member 2^d hops\n             to left and right with wrap at ends\n\nWe represent groups of processes using a doubly-linked list called\na \"chain\".  This is a very simple struct that records the number\nof processes in the group, the rank of the local process within the\ngroup, the address of the local process, and the addresses of the\nprocesses having ranks one less (left) and one more (right) than the\nlocal process.  We implement the LWGRP library on top of MPI, so for\naddresses we record a parent communicator and ranks within that\ncommunicator.  To be light-weight, the reference to the communicator\nis a literal copy of the handle value, not a full dup.\n\nSince each member only stores the addresses for a few other group\nmembers, it is the responsibility of higher level software to exchange\naddress information for more general point-to-point communication.\nAdditionally, the caller is responsible for choosing tag values as a\ngroup context.\n\nThere is also a \"ring\", which is like a chain, but it wraps around\nat the ends.\n\nThere are two structures, called a logchain and logring, used to cache\nadddresses of more group members.  These structures must be used in\nconjunction with either a chain or ring, respectively.  They cache\naddresses for processes that are 2^d hops to the left and right sides\nwhere d ranges from 0 to log(N)-1 inclusive.  This pattern enables\none to construct trees, and so it's useful to cache this information\nfor use in collective operations.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fllnl%2Flwgrp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fllnl%2Flwgrp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fllnl%2Flwgrp/lists"}