All Projects → alibaba → Libgrape Lite

alibaba / Libgrape Lite

Licence: apache-2.0
🍇 A C++ library for parallel graph processing 🍇

Programming Languages

cxx
24 projects

Projects that are alternatives of or similar to Libgrape Lite

Grakn
TypeDB: a strongly-typed database
Stars: ✭ 2,947 (+1643.79%)
Mutual labels:  graph, graph-algorithms, graph-theory
Graph
Graph algorithms and data structures
Stars: ✭ 431 (+155.03%)
Mutual labels:  graph-algorithms, graph-theory, library
Lightgraphs.jl
An optimized graphs package for the Julia programming language
Stars: ✭ 611 (+261.54%)
Mutual labels:  graph, graph-algorithms, graph-theory
Networkx
Network Analysis in Python
Stars: ✭ 10,057 (+5850.89%)
Mutual labels:  graph-algorithms, graph-theory
Cracking The Coding Interview
Solutions for Cracking the Coding Interview - 6th Edition
Stars: ✭ 35 (-79.29%)
Mutual labels:  graph, graph-algorithms
Pism
repository for the Parallel Ice Sheet Model (PISM)
Stars: ✭ 61 (-63.91%)
Mutual labels:  parallel, mpi
Graph
Graph is a semantic database that is used to create data-driven applications.
Stars: ✭ 855 (+405.92%)
Mutual labels:  graph, graph-theory
Verse
Reference implementation of the paper VERSE: Versatile Graph Embeddings from Similarity Measures
Stars: ✭ 98 (-42.01%)
Mutual labels:  graph, graph-algorithms
Deepwalk C
DeepWalk implementation in C++
Stars: ✭ 88 (-47.93%)
Mutual labels:  graph, graph-algorithms
D3graphtheory
💥 Interactive and colorful 🎨 graph theory tutorials made using d3.js ⚡️
Stars: ✭ 1,364 (+707.1%)
Mutual labels:  graph-algorithms, graph-theory
Core
parallel finite element unstructured meshes
Stars: ✭ 124 (-26.63%)
Mutual labels:  parallel, mpi
Prpl
parallel Raster Processing Library (pRPL) is a MPI-enabled C++ programming library that provides easy-to-use interfaces to parallelize raster/image processing algorithms
Stars: ✭ 15 (-91.12%)
Mutual labels:  parallel, mpi
Leaderboardx
A tool for building graphs quickly
Stars: ✭ 13 (-92.31%)
Mutual labels:  graph, graph-algorithms
Evalne
Source code for EvalNE, a Python library for evaluating Network Embedding methods.
Stars: ✭ 67 (-60.36%)
Mutual labels:  graph-algorithms, library
Parallel Ssh
Asynchronous parallel SSH client library.
Stars: ✭ 864 (+411.24%)
Mutual labels:  parallel, library
Cog
A Persistent Embedded Graph Database for Python
Stars: ✭ 90 (-46.75%)
Mutual labels:  graph, library
Ogre
Clojure library for querying Apache TinkerPop graphs
Stars: ✭ 118 (-30.18%)
Mutual labels:  graph, graph-algorithms
Data Structures
Common data structures and algorithms implemented in JavaScript
Stars: ✭ 139 (-17.75%)
Mutual labels:  graph, graph-algorithms
Graphlib
Simple but powerful graph library for Rust
Stars: ✭ 148 (-12.43%)
Mutual labels:  graph, library
Gush
Fast and distributed workflow runner using ActiveJob and Redis
Stars: ✭ 894 (+428.99%)
Mutual labels:  graph, parallel

libgrape-lite
libgrape-lite

A C++ library for parallel graph processing

C/C++ CI codecov

libgrape-lite is a C++ library from Alibaba for parallel graph processing. It differs from prior systems in its ability to parallelize sequential graph algorithms as a whole by following the PIE programming model from GRAPE. Sequential algorithms can be easily "plugged into" libgrape-lite with only minor changes and get parallelized to handle large graphs efficiently. In addition to the ease of programming, libgrape-lite is designed to be highly efficient and flexible, to cope the scale, variety and complexity from real-life graph applications.

Building libgrape-lite

Dependencies

libgrape-lite is developed and tested on CentOS 7. It should also work on other unix-like distributions. Building libgrape-lite requires the following softwares installed as dependencies.

  • CMake (>=2.8)
  • A modern C++ compiler compliant with C++-11 standard. (g++ >= 4.8.1 or clang++ >= 3.3)
  • MPICH (>= 2.1.4) or OpenMPI (>= 3.0.0)
  • glog (>= 0.3.4)

Here are the dependencies for optional features:

  • jemalloc (>= 5.0.0) for better memory allocation;
  • Doxygen (>= 1.8) for generating documentation;
  • Linux HUGE_PAGES support, for better performance.

Extra dependencies are required by examples:

Building libgrape-lite and examples

Once the required dependencies have been installed, go to the root directory of libgrape-lite and do a out-of-source build using CMake.

mkdir build && cd build
cmake ..
make -j

The building targets include a shared/static library, and two sets of examples: analytical_apps and a gnn_sampler.

Alternatively, you can build a particular target with command:

make libgrape-lite # or
make analytical_apps # or
make gnn_sampler

Running libgrape-lite applications

Graph format

The input of libgrape-lite is formatted following the LDBC Graph Analytics benchmark, with two files for each graph, a .v file for vertices with 1 or 2 columns, which are a vertex_id and optionally followed by the data assigned to the vertex; and a .e file for edges with 2 or 3 columns, representing source, destination and optionally the data on the edge, correspondingly. See sample files p2p-31.v and p2p-31.e under the dataset directory.

Example applications

libgrape-lite provides six algorithms from the LDBC benchmark as examples. The deterministic algorithms are, single-source shortest path(SSSP), connected component(WCC), PageRank, local clustering coefficient(LCC), community detection of label propagation(CDLP), and breadth first search(BFS).

To run a specific analytical application, users may use command like this:

# run single-source shortest path with 4 workers in local.
mpirun -n 4 ./run_app --vfile ../dataset/p2p-31.v --efile ../dataset/p2p-31.e --application sssp --sssp_source 6 --out_prefix ./output_sssp --directed

# or run connected component with 4 workers on a cluster.
# HOSTFILE provides a list of hosts where MPI processes are launched. 
mpirun -n 4 -hostfile HOSTFILE ./run_app --application=wcc --vfile ../dataset/p2p-31.v --efile ../dataset/p2p-31.e --out_prefix ./output_wcc

# see more flags info.
./run_app --help

LDBC benchmarking

The analytical applications support the LDBC Analytical Benchmark suite with the provided ldbc_driver. Please refer to ldbc_driver for more details. The benchmark results for libgrape-lite and other state-of-the-art systems could be found here.

GNN sampler

In addition to offline graph analytics, libgrape-lite could also be utilized to handle more complex graph tasks. A sampler for GNN training/inference on dynamic graphs (taking graph changes and queries, and producing results via Kafka) is included as an example. Please refer to examples/gnn_sampler for more details.

Documentation

Documentation is generated using Doxygen. Users can build doxygen documentation in the build directory using:

cd build
make doc
# open docs/index.html

The latest version of online documentation can be found at https://alibaba.github.io/libgrape-lite

License

libgrape-lite is distributed under Apache License 2.0. Please note that third-party libraries may not have the same license as libgrape-lite.

Acknowledgements

  • flat_hash_map, an efficient hashmap implementation;
  • granula, a tool for gathering performance information for LDBC Benchmark;
  • xoroshiro, a pseudo-random number generator.

Publications

  • Wenfei Fan, Jingbo Xu, Wenyuan Yu, Jingren Zhou, Xiaojian Luo, Ping Lu, Qiang Yin, Yang Cao, and Ruiqi Xu. Parallelizing Sequential Graph Computations. ACM Transactions on Database Systems (TODS) 43(4): 18:1-18:39.

  • Wenfei Fan, Jingbo Xu, Yinghui Wu, Wenyuan Yu, Jiaxin Jiang. GRAPE: Parallelizing Sequential Graph Computations. The 43rd International Conference on Very Large Data Bases (VLDB), demo, 2017 (the Best Demo Award).

  • Wenfei Fan, Jingbo Xu, Yinghui Wu, Wenyuan Yu, Jiaxin Jiang, Zeyu Zheng, Bohan Zhang, Yang Cao, and Chao Tian. Parallelizing Sequential Graph Computations, ACM SIG Conference on Management of Data (SIGMOD), 2017 (the Best Paper Award).

Getting involved

Thank you in advance for your contributions!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].