graphflow

Distributed graph data structures and algorithms in PGAS model

https://github.com/lnikon/graphflow

Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (10.7%) to scientific vocabulary
Last synced: 10 months ago · JSON representation ·

Repository

Distributed graph data structures and algorithms in PGAS model

Basic Info
  • Host: GitHub
  • Owner: lnikon
  • License: mit
  • Language: Jupyter Notebook
  • Default Branch: main
  • Size: 10 MB
Statistics
  • Stars: 3
  • Watchers: 1
  • Forks: 0
  • Open Issues: 1
  • Releases: 0
Created over 5 years ago · Last pushed about 2 years ago
Metadata Files
Readme License Citation

README.md

Description

PGASGraph is a library that provides distributed graph algorithms and data structures. This library uses distributed vertex store as a underlying graph storage. PGASGraph is based on a UPCXX and uses Remote Procedure Calls (RPC) for communication, distributed objects, and global pointers provided by the UPCXX.

Supported graph storages

  • + Distributed Vertex Store

Supported distributed algorithms

  • + MST: Prim;
  • + MST: Kruskal;
  • - MST: GHS;
  • + Gossip: Randomized Push; Broadcast;
  • - Shortest paths;
  • - Clustering;
  • - Centrality;
  • - Link analysis;

Requirements

Make sure that you've installed UPCXX and have correctly set $UPCXX_INSTALL environment variable. For more information see official UPCXX wiki and INSTALL.md UPCXX.

Build

Launch ./scripts/ExecuteConan.sh/ and ./scripts/Build.sh

Dependencies

Library depends on Boost for program options parsing and CPU timer. Make sure that you've Boost libraries installed.

Cmake/ninja/make

Library can be built using Cmake. Following commands can be used to build the library using Cmake and ninja. Though, the use of ninja is not necessary and it can be safely replaced with usual make.

sh mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Debug -G"Ninja" -DCMAKE_CXX_COMPILER=/usr/bin/g++ ninja

After these steps executable pgas-graph-test will be generated, execute it using upcxx-run wrapper e.g.

sh upcxx-run -n4 ./pgas-graph-test

Manual

Using the following instructions you can build library manually. Once again, make sure that you've correctly set the $UPCXX_INSTALL variable.

sh mkdir build && cd build $UPCXX_INSTALL/bin/upcxx -codemode=opt -threadmode=seq -network=udp -std=c++17 -O -I../inc ../src/main.cpp ../src/graph-utilities.cpp ../src/pgas-graph.cpp -lboost_program_options -lboost_timer -o custom_build

Important UPCXX options here are codemode, threadmode and network. As the library uses modern C++ features such as structured bindings or auto lambdas make sure to compile it with the -std=c++17 flag.

Distributed run notes

If you wish to make distributed run then make sure that you've compiled UPCXX with UDP or InfiniBand conduits. Then make sure that you've correctly set the following variables. $SSH_SERVERS and $GASNET_SSH_SERVERS contain IP's of those nodes which will participate in a distributed computation. $GASNET_MASTERIP contains IP of the node which initiates the computation. It's very important to set this variable.

$SSH_SERVERS=111.111.11.11,111.111.11.12

$GASNET_SSH_SERVERS=${SSH_SERVERS}

$GASNET_MASTERIP=10.0.0.30

$UPCXX_NETWORK=udp

Performance Evaluation

ToDo

  • REST Server to serve UPCXX computation requests.
  • Add command line option to choose computation algorithm.
  • Add command line option to choose graph generation algorithm.
  • Add input graph parsing.
  • Export graph in JSON format.

Owner

  • Name: Vahag Bejanyan
  • Login: lnikon
  • Kind: user
  • Location: Yerevan, Armenia
  • Company: Questrade

C++ Software Engineer with interests in Graph Theory, Machine Learning, and High-Performance Computing.

Citation (CITATION.cff)

# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!

cff-version: 1.2.0
title: GraphFlow
message: >-
  Distributed graph data structures and algorithms in PGAS
  model 
type: software
authors:
  - given-names: Vahag Bejanyan
    email: bejanyan.vahag@pm.me
    affiliation: BSc
    orcid: 'https://orcid.org/0000-0002-0842-7776'
repository-code: 'https://github.com/lnikon/graphflow'
keywords:
  - graph
  - hpc
  - parallel
  - distributed
  - scalability
license: MIT

GitHub Events

Total
Last Year

Dependencies

Dockerfile docker
  • BASE latest build
  • UPCXX_BUILD_INSTALL latest build
  • ubuntu latest build
notebooks/requirements.txt pypi
  • Jinja2 ==3.1.2
  • MarkupSafe ==2.1.1
  • Pillow ==9.2.0
  • Pygments ==2.13.0
  • QtPy ==2.2.1
  • Send2Trash ==1.8.0
  • anyio ==3.6.2
  • argon2-cffi ==21.3.0
  • argon2-cffi-bindings ==21.2.0
  • asttokens ==2.0.8
  • attrs ==22.1.0
  • backcall ==0.2.0
  • beautifulsoup4 ==4.11.1
  • bleach ==5.0.1
  • cffi ==1.15.1
  • contourpy ==1.0.5
  • cycler ==0.11.0
  • debugpy ==1.6.3
  • decorator ==5.1.1
  • defusedxml ==0.7.1
  • entrypoints ==0.4
  • executing ==1.1.1
  • fastjsonschema ==2.16.2
  • fonttools ==4.38.0
  • idna ==3.4
  • ipykernel ==6.16.1
  • ipython ==8.5.0
  • ipython-genutils ==0.2.0
  • ipywidgets ==8.0.2
  • jedi ==0.18.1
  • jsonschema ==4.16.0
  • jupyter ==1.0.0
  • jupyter-console ==6.4.4
  • jupyter-server ==1.21.0
  • jupyter_client ==7.4.3
  • jupyter_core ==4.11.2
  • jupyterlab-pygments ==0.2.2
  • jupyterlab-widgets ==3.0.3
  • kiwisolver ==1.4.4
  • matplotlib ==3.6.1
  • matplotlib-inline ==0.1.6
  • mistune ==2.0.4
  • nbclassic ==0.4.5
  • nbclient ==0.7.0
  • nbconvert ==7.2.2
  • nbformat ==5.7.0
  • nest-asyncio ==1.5.6
  • networkx ==2.8.7
  • notebook ==6.5.1
  • notebook_shim ==0.2.0
  • numpy ==1.23.4
  • packaging ==21.3
  • pandocfilters ==1.5.0
  • parso ==0.8.3
  • pexpect ==4.8.0
  • pickleshare ==0.7.5
  • prometheus-client ==0.15.0
  • prompt-toolkit ==3.0.31
  • psutil ==5.9.3
  • ptyprocess ==0.7.0
  • pure-eval ==0.2.2
  • pycparser ==2.21
  • pyparsing ==3.0.9
  • pyrsistent ==0.18.1
  • python-dateutil ==2.8.2
  • pyzmq ==24.0.1
  • qtconsole ==5.3.2
  • six ==1.16.0
  • sniffio ==1.3.0
  • soupsieve ==2.3.2.post1
  • stack-data ==0.5.1
  • terminado ==0.16.0
  • tinycss2 ==1.2.1
  • tornado ==6.2
  • traitlets ==5.5.0
  • wcwidth ==0.2.5
  • webencodings ==0.5.1
  • websocket-client ==1.4.1
  • widgetsnbextension ==4.0.3