This project contains implementations, benchmarks and visualization used in my master thesis GraphBLAS in the context of Java and in A GraphBLAS implementation in pure 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 # graphblas-java-native git clone --recurse-submodules https://github.com/FlorentinD/graphblas-java-native git checkout graphBLAS_4_0_3 cd graphblas-java-native/ git submodule update --init --recursive cd GraphBLAS/ make JOBS=32 sudo make install -j32 INSTALL=/usr/local/ cd .. # on linux `sudo ldconfig` is needed mvn clean install -Dgpg.skip # Package gds pregel examples # (1) copy pregel examples into bootstrap project # (2) Create shadowjar # (3) copy jar into /libs folder # run benchmarks (exclude, include benchmarks via build.gradle) # Specify the dataset directory containing neo4j db dumps of your dataset # Change the org.github.florentind.bench.DataSetManager.DATA_SETS map according to your datasets cd GraphBlasInJavaBenchmarks/ /gradlew -PmainClass=benchmarkClass -PdatasetDir=.. simpleBenchmark