Awesome
GraphBLAS C++ Specification
Click here for the most recent HTML draft and most recent PDF draft.
The currently under development GraphBLAS C++ API aims to provide a C++ API for implementing graph algorithms in the language of linear algebra, and is part of the larger GraphBLAS project. The API provides data structures for storing matrices and vectors, as well as a collection of algorithms, such as generalized matrix multiplication, that can be used with custom or pre-defined operators, monoids, and semirings.
The standard document itself can be found in the folder markdown, while minutes for meetings of the GraphBLAS C++ API subcommittee can be found in the folder minutes.
Brief API Example
// Create a GraphBLAS matrix of size 128 x 128.
grb::matrix<float> x({128, 128});
// Write to elements along the diagonal.
for (size_t i = 0; i < 128; i++) {
x[{i, i}] = i*i;
}
float sum = 0;
// Sum up all the elements stored in the matrix.
for (auto&& [index, value] : x) {
sum += value;
}
Libraries
- rgri is being developed as a reference implementation alongside the API.
- GBTL has heavily influenced the development of the C++ API, and is also being updated alongside the development of the API.
Citation
To cite the GraphBLAS C++ Specification:
Benjamin Brock, Scott McMillan, Aydın Buluc ̧, Timothy Mattson, and Jose ́ Moreira. GraphBLAS C++ specification. https://github.com/ GraphBLAS/graphblas-api-cpp, 2022.
@misc{graphblascppspec,
title={Graph{BLAS} {C}++ Specification},
author={Brock, Benjamin and McMillan, Scott and Bulu\c{c}, Ayd{\i}n and Mattson, Timothy and Moreira, Jos{\'e}},
howpublished={\url{https://github.com/GraphBLAS/graphblas-api-cpp}},
volume = {Version 1.0},
year={2023}
}