We appreciate contributions from the community! GraphBrew is a graph reordering and benchmarking framework, and there are many ways to help improve it.
- Bug fixes - Performance or correctness issues
- New reordering algorithms - Add your own vertex reordering methods
- New graph benchmarks - Additional graph kernels (e.g., MST, SCC, ALS)
- Support for additional input formats - New graph file formats
- ML/Perceptron improvements - Better weight training or feature extraction
- Documentation - Wiki pages, code comments, examples
- Python tooling - Analysis scripts, visualization, automation
- Fork the repository on GitHub
- Clone your fork:
git clone https://github.com/YOUR-USERNAME/GraphBrew.git cd GraphBrew - Build the project:
make all
- Run tests:
make test
This repo follows the Google C++ Style Guide. Key points:
- Use 2-space indentation
- Keep lines under 100 characters
- Use descriptive variable names
- Add comments for complex logic
See the Wiki: Adding New Algorithms for detailed instructions.
Quick overview:
- Add your algorithm to the
ReorderingAlgoenum inbench/include/external/gapbs/util.h - Register it in
getAlgorithmNameMap()inbench/include/graphbrew/reorder/reorder_types.h - Add training support in
scripts/lib/core/utils.py(ALGORITHMS dict)
Algorithm variant lists are defined in scripts/lib/core/utils.py as the single source of truth:
GRAPHBREW_VARIANTS- GraphBrewOrder clustering variantsRABBITORDER_VARIANTS- RabbitOrder variants (csr, boost)GORDER_VARIANTS- GOrder implementation variants (default, csr, fast)RCM_VARIANTS- RCM variants (default, bnf)
Other constants also centralized in utils.py:
ALGORITHMS/SLOW_ALGORITHMS- Algorithm definitionsBENCHMARKS- Benchmark listSIZE_SMALL/SIZE_MEDIUM/SIZE_LARGE/SIZE_XLARGE- Size thresholds (MB)TIMEOUT_REORDER/TIMEOUT_BENCHMARK/TIMEOUT_SIM/TIMEOUT_SIM_HEAVY- Timeouts (seconds)
Never duplicate these definitions in other files - always import from utils.py.
See the Wiki: Adding New Benchmarks for detailed instructions.
- Create a feature branch:
git checkout -b feature/my-feature - Make your changes with clear commit messages
- Ensure all tests pass:
make test - Push to your fork:
git push origin feature/my-feature - Open a Pull Request against
main
CI will automatically run sanity checks on your PR.
Use clear, descriptive commit messages:
Add: New RabbitOrder integration
Fix: Memory leak in Leiden community detection
Update: Perceptron weights for PageRank workload
Docs: Add wiki page for correlation analysis
When reporting bugs, please include:
- GraphBrew version / commit hash
- Operating system and compiler version
- Steps to reproduce the issue
- Expected vs actual behavior
- Relevant error messages or logs
Before starting a large feature:
- Check existing issues for similar requests
- Open an issue to discuss your proposal
- Wait for feedback before investing significant time
By contributing, you agree that your contributions will be licensed under the same license as the project (see LICENSE).
Thank you for contributing to GraphBrew! 🍺