{"id":17980820,"url":"https://github.com/nvidia/cudecomp","last_synced_at":"2025-08-24T17:10:02.689Z","repository":{"id":40806290,"uuid":"505909511","full_name":"NVIDIA/cuDecomp","owner":"NVIDIA","description":"An Adaptive Pencil Decomposition Library for NVIDIA GPUs","archived":false,"fork":false,"pushed_at":"2025-04-08T22:36:15.000Z","size":3842,"stargazers_count":60,"open_issues_count":1,"forks_count":12,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-09T22:18:08.762Z","etag":null,"topics":["fft","pencil-decomposition"],"latest_commit_sha":null,"homepage":"https://nvidia.github.io/cuDecomp/","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/NVIDIA.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":"2022-06-21T15:52:42.000Z","updated_at":"2025-04-08T20:50:10.000Z","dependencies_parsed_at":"2024-02-12T22:46:28.286Z","dependency_job_id":"c59a05ca-797c-4c11-9f53-96ad5ce0f657","html_url":"https://github.com/NVIDIA/cuDecomp","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NVIDIA%2FcuDecomp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NVIDIA%2FcuDecomp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NVIDIA%2FcuDecomp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NVIDIA%2FcuDecomp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NVIDIA","download_url":"https://codeload.github.com/NVIDIA/cuDecomp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248119286,"owners_count":21050755,"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":["fft","pencil-decomposition"],"created_at":"2024-10-29T18:06:29.398Z","updated_at":"2025-04-09T22:18:12.033Z","avatar_url":"https://github.com/NVIDIA.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cuDecomp\n\nAn Adaptive Pencil Decomposition Library for NVIDIA GPUs\n\n## Introduction\n\ncuDecomp is a library for managing 1D (slab) and 2D (pencil) parallel decompositions of 3D Cartesian spatial domains on NVIDIA GPUs, with routines to perform global transpositions and halo communications. The library is inspired by the [2DECOMP\u0026FFT Fortran library](https://github.com/xcompact3d/2decomp-fft), a popular decomposition library for numerical simulation codes, with a similar set of available transposition routines. While 2DECOMP\u0026FFT and similar libraries in the past have been written to target CPU systems, this library is designed for GPU systems, leveraging CUDA-aware MPI and additional communication libraries optimized for GPUs, like the [NVIDIA Collective Communication Library (NCCL)](https://github.com/NVIDIA/nccl) and [NVIDIA OpenSHMEM Library (NVSHMEM)](https://developer.nvidia.com/nvshmem).\n\nPlease refer to the [documentation](https://nvidia.github.io/cuDecomp/) for additional information on the library and usage details.\n\nThis library is currently in a research-oriented state, and has been released as a companion to a paper presented at the PASC22 conference ([link](https://dl.acm.org/doi/10.1145/3539781.3539797)). We are making it available here as it can be useful in other applications outside of this study or as a benchmarking tool and usage example for various GPU communication libraries to perform transpose and halo communication.\n\nPlease contact us or open a GitHub issue if you are interested in using this library in your own solvers and have questions on usage and/or feature requests.\n\n## Build\nYou can build this library using CMake. A CMake build of the library without additional examples/tests can be completed using the following commands\n```shell\n$ mkdir build\n$ cd build\n$ cmake ..\n$ make -j\n```\nThere are several build variables available to configure the CMake build which can be found at the top of the project [`CMakeLists.txt`](CMakeLists.txt) file. As an example,\nto configure the build to compile additional examples and enable NVSHMEM backends, you can run the following CMake command\n```shell\n$ cmake -DCUDECOMP_BUILD_EXTRAS=1 -DCUDECOMP_ENABLE_NVSHMEM=1 ..\n```\n\n\n### Dependencies\nWe strongly recommend building this library using NVHPC SDK compilers and libraries, as the SDK contains all required dependencies for this library and is the focus of our testing. Fortran features are only supported using NVHPC SDK compilers.\n\nOne exception is cuDecomp builds using NVSHMEM versions older than v3.0, which require the use of a bootstrapping layer that depends on your MPI distribution. The NVSHMEM library packaged within NVHPC SDK\nsupports OpenMPI only. If you require usage of a different MPI implementation (e.g. Spectrum MPI or Cray MPICH), you need to either build\nNVSHMEM against your desired MPI implementation, or build a custom MPI bootstrap layer separately. Please refer to this [NVSHMEM documentation section](https://docs.nvidia.com/hpc-sdk/nvshmem/install-guide/index.html#use-nvshmem-mpi) for more details.\nFor cuDecomp builds using NVSHMEM v3.0+, this additional MPI boostrapping layer is no longer required.\n\nAdditionally, this library utilizes CUDA-aware MPI and is only compatible with MPI libraries with these features enabled.\n\n## License\nThis library is released under a BSD 3-clause license, which can be found in [LICENSE](license).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnvidia%2Fcudecomp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnvidia%2Fcudecomp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnvidia%2Fcudecomp/lists"}