This project contains implementations, benchmarks and visualization used in my master thesis GraphBLAS in the context of Java. It compares existing graph algorithm implementations in GDS and JGraphT against implementations via EJML, graphblas-java-native and the Pregel-API of GDS.
Implementations:
-
EJML-Graph format implementing the Graph API of GDS, which represents the graph by an EJML matrix.
-
Algorithms implemented via EJML and graphblas-java-native:
-
Breadth First Search (LEVEL and PARENT)
-
PageRank (weighted and unweighted)
-
Triangle Count (global and vertex-wise)
-
-
Format converters:
-
GDS graph → EJML-Graph | JGraphT graph | graphblas-java-native matrix
-
EJML matrix → graphblas-java-native matrix
-
Benchmarks:
-
Semiring and Mask in EJML and graphblas-java-native via mxm and column-wise reduce
-
Graph algorithms BFS, (weighted) PageRank, and Triangle Count
Relies on locally build fork of EJML
-
java (tested with openjdk 11.0.8 via sdkman)
-
mvn
-
git
# starting from this directory cd .. # ejml (my fork as not everythink is in the main-repo) git clone [email protected]:FlorentinD/ejml.git cd ejml/ git checkout mask_rebased ./gradlew autogenerate ./gradlew install # SuiteSparse:Graphblas (make sure to install under `usr/local` and you might not need setting the LD_LIBRARY_PATH) git clone [email protected]:DrTimothyAldenDavis/GraphBLAS.git cd GraphBLAS/ make JOBS=32 sudo make install -j32 INSTALL=/usr/local/ # run benchmarks (exclude, include benchmarks via build.gradle) cd GraphBlasInJavaBenchmarks/ ./gradlew :jmh --no-daemon