diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..013763e9d --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,36 @@ +# Contributing to Gloo +We want to make contributing to this project as easy and transparent as +possible. + +## Pull Requests +We actively welcome your pull requests. + +1. Fork the repo and create your branch from `master`. +2. If you've added code that should be tested, add tests. +3. If you've changed APIs, update the documentation. +4. Ensure the test suite passes. +5. Make sure your code lints. +6. If you haven't already, complete the Contributor License Agreement ("CLA"). + +## Contributor License Agreement ("CLA") +In order to accept your pull request, we need you to submit a CLA. You only need +to do this once to work on any of Facebook's open source projects. + +Complete your CLA here: + +## Issues +We use GitHub issues to track public bugs. Please ensure your description is +clear and has sufficient instructions to be able to reproduce the issue. + +Facebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe +disclosure of security bugs. In those cases, please go through the process +outlined on that page and do not file a public issue. + +## Coding Style +* 2 spaces for indentation rather than tabs +* 80 character line length +* camelCase instead of snake_case + +## License +By contributing to Gloo, you agree that your contributions will be licensed +under the LICENSE file in the root directory of this source tree. diff --git a/README.md b/README.md index c28ef6727..53faad562 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,52 @@ -# gloo +# Gloo +Gloo is a collective communications library. It comes with a number of +collective algorithms useful for machine learning applications. These +include a barrier, broadcast, and allreduce. -TODO +Transport of data between participating machines is abstracted so that +IP can be used at all times, or InifiniBand (or RoCE) when available. + +Where applicable, algorithms have an implementation that works with +system memory buffers, and one that works with NVIDIA GPU memory +buffers. In the latter case, if the InfiniBand transport is used, +GPUDirect can be used to accelerate cross machine GPU-to-GPU memory +transfers. + +## Requirements +Gloo is built to run on Linux and has no hard dependencies other than libc. + +Optional dependencies are: +* cuda -- for CUDA algorithms, tests, and benchmark +* googletest -- to build and run tests +* eigen -- for fast floating point routines +* hiredis -- for coordinating machine rendezvous through Redis + +## Usage +You can build Gloo using CMake. + +Since it is a library, it is most convenient to vendor it in your own +project and include the project root in your own CMake configuration. + +For standalone builds (e.g. to run tests or benchmarks), first +populate the `third-party` directory with a few dependencies to +compile both the tests and the benchmark tool: + +``` shell +cd third-party +./fetch.sh +``` + +Then, to build: + +``` shell +mkdir build +cd build +cmake ../ -DBUILD_TEST=1 -DBUILD_BENCHMARK=1 +ls -l gloo/gloo_{test,benchmark} +``` + +## Documentation +Please refer to [docs/](docs/) for detailed documentation. + +## License +Gloo is BSD-licensed. We also provide an additional patent grant. diff --git a/docs/latency.md b/docs/latency.md new file mode 100644 index 000000000..69368c868 --- /dev/null +++ b/docs/latency.md @@ -0,0 +1,2 @@ +# Latency optimizations +TBD diff --git a/docs/overview.md b/docs/overview.md new file mode 100644 index 000000000..173309e38 --- /dev/null +++ b/docs/overview.md @@ -0,0 +1,2 @@ +# Overview +TBD diff --git a/docs/transport.md b/docs/transport.md new file mode 100644 index 000000000..8f369058b --- /dev/null +++ b/docs/transport.md @@ -0,0 +1,2 @@ +# Transport structure +TBD