Skip to content

openucx/ucc

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a4b2a4f · Sep 6, 2023
Mar 16, 2023
Sep 5, 2023
Jul 24, 2023
Nov 2, 2022
Aug 21, 2023
Mar 3, 2023
Mar 14, 2023
Sep 6, 2023
Sep 5, 2023
Apr 20, 2023
Nov 14, 2021
Sep 29, 2022
May 19, 2022
Jun 14, 2022
Jul 28, 2020
Jul 23, 2022
Jul 23, 2022
Jun 7, 2023
Oct 19, 2022
Jul 23, 2022
Aug 21, 2023
Feb 15, 2023

Repository files navigation

Unified Collective Communication (UCC)

UCC is a collective communication operations API and library that is flexible, complete, and feature-rich for current and emerging programming models and runtimes.

Design Goals

  • Highly scalable and performant collectives for HPC, AI/ML and I/O workloads
  • Nonblocking collective operations that cover a variety of programming models
  • Flexible resource allocation model
  • Support for relaxed ordering model
  • Flexible synchronous model
  • Repetitive collective operations (init once and invoke multiple times)
  • Hardware collectives are a first-class citizen

UCC Component Architecture

Contributing

Thanks for your interest in contributing to UCC, please see our technical and legal guidelines in the contributing file.

All contributors have to comply with "Membership Voluntary Consensus Standard" and "Export Compliant Contribution Submissions" policies.

License

UCC is BSD-style licensed, as found in the LICENSE file.

Required packages

  • UCX

    • UCC uses utilities provided by UCX's UCS component
  • CUDA (optional)

    • UCC supports CUDA collectives. To compile with CUDA support, install NVIDIA CUDA 11.0 or above.
  • HIP (optional)

    • UCC supports AMD GPUs using HIP. Instructions for installing ROCM/HIP can be found at AMD ROCM.
  • Doxygen

    • UCC uses Doxygen for generating API documentation

Compiling and Installing

Developer's Build

$ ./autogen.sh
$ ./configure --prefix=<ucc-install-path> --with-ucx=<ucx-install-path>
$ make

Build Documentation

$ ./autogen.sh
$ ./configure --prefix=<ucc-install-path> --with-docs-only
$ make docs

Open MPI and UCC collectives

Compile UCX 

$ git clone https://github.com/openucx/ucx
$ cd ucx
$ ./autogen.sh; ./configure --prefix=<ucx-install-path>; make -j install

Compile UCC

$ git clone https://github.com/openucx/ucc
$ cd ucc
$ ./autogen.sh; ./configure --prefix=<ucc-install-path> --with-ucx=<ucx-install-path>; make -j install

Compile Open MPI 

$ git clone https://github.com/open-mpi/ompi
$ cd ompi
$ ./autogen.pl; ./configure --prefix=<ompi-install-path> --with-ucx=<ucx-install-path> --with-ucc=<ucc-install-path>; make -j install

Run MPI programs

$ mpirun -np 2 --mca coll_ucc_enable 1 --mca coll_ucc_priority 100 ./my_mpi_app

Run OpenSHMEM programs

$ mpirun -np 2 --mca scoll_ucc_enable 1 --mca scoll_ucc_priority 100 ./my_openshmem_app

SUPPORTED Transports

  • UCX/UCP
    • InfiniBand, ROCE, Cray Gemini and Aries, Shared Memory
  • SHARP
  • CUDA
  • NCCL
  • RCCL