Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/govertb/GPUGraphLayout

An experimental GPU accelerated implementation of ForceAtlas2
https://github.com/govertb/GPUGraphLayout

cuda forceatlas2 gephi graph-algorithms graph-layout social-network-analysis visualization

Last synced: about 2 months ago
JSON representation

An experimental GPU accelerated implementation of ForceAtlas2

Awesome Lists containing this project

README

        

`graph_viewer` | GPU accelerated graph layout
=============================================

This repository contains experimental code for large scale graph layout using the GPU. Currently we only implement the basics of ForceAtlas2, a graph layout algorithm designed for social network visualization in Gephi[1](#jacomy14),[2](#bastian09). Our implementation of ForceAtlas2 is based on [the open source implementation](https://github.com/gephi/gephi/tree/6efb108718fa67d1055160f3a18b63edb4ca7be2/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2) used in Gephi itself, and considers the graph to be undirected. For force approximation, we use a CUDA implementation of the Barnes-Hut approximation algorithm[3](#barnes86) by Martin Burtscher and Keshav Pingali[4](#burtscher11). This implementation is available as part of [LonstarGPU](http://iss.ices.utexas.edu/?p=projects/galois/lonestargpu). The average speedup, compared to a *de facto* CPU implementation of ForceAtlas2, is over 40x. This makes it feasible to compute layouts for networks with millions of nodes and edges. More details and results can be found in:

* G.G. Brinkmann, [K.F.D. Rietveld](https://liacs.leidenuniv.nl/~rietveldkfd) and [F.W. Takes](https://liacs.leidenuniv.nl/~takesfw), [Exploiting GPUs for fast force-directed visualization of large-scale networks](https://dx.doi.org/10.1109/ICPP.2017.47), in Proceedings of the 46th International Conference on Parallel Processing (ICPP), pp. 382-391, 2017.

#### Citing
To cite this software, please use the aforementioned reference, or the `preferred-citation` section in [CITATION.cff](./CITATION.cff). The latter can be converted to the desired format using [various tools](https://github.com/citation-file-format/citation-file-format/tree/52647a247e9b1a5b04154934f39615b5ee8c4d65#tools-to-work-with-citationcff-files-wrench), or using the _Cite this repository_ button in the _About_ section of [this project's GitHub page](https://github.com/govertb/GPUGraphLayout).

#### System Requirements

A CUDA capable GPU. Currently only Linux is supported.

#### Obtaining all code
This repository contains a submodule (`lib/pngwriter`). Be sure to run
```
git submodule init && git submodule update
```
from the root of this Git repository before compiling. The code also depends on the `libpng` library (including its development headers). It should be possible to obtain this using the package manager for your Linux distribution.

#### Compiling
A `Makefile` is located in `builds/linux`. Running
```
make graph_viewer
```
from this directory compiles `graph_viewer` with CUDA support.
To compile without CUDA support, run `make graph_viewer CUDA_SUPPORT=0`.

#### Usage
`graph_viewer gpu|cpu max_iterations num_snaps sg|wg scale gravity exact|approximate edgelist_path out_path [png|csv|bin]`

| Argument | Description |
| -------------------- | ----------- |
| `gpu\|cpu` | Choose between a parallel GPU implementation or a serial CPU implementation. |
| `max_iterations` | How many iterations of the layout algorithm to run. |
| `num_snaps` | Choose how many times during the layout process a visualization should be rendered. |
| `wg\|sg` | Choose between weak gravity (inversely proportional to distance) or strong gravity. |
| `scale` | Scale repulsive force. |
| `gravity` | Scale gravitational force. |
| `exact\|approximate` | Choose between the exact/pairwise $O(\|V\|^2)$ repulsive force calculation or the $O(\|V\| \log \|V\|)$ approximation using Barnes-Hut (GPU implementation only supports Barnes-Hut). |
| `edgelist_path` | Text file (ascii) containing node IDs for each edge on a separate line (whitespace separated). Lines starting with a `#`, the direction of edges, and self-loops are ignored. |
| `out_path` | Path to write resulting layout to. |

`[png|csv|bin]` is optional, defaulting to `png`, and determines the format of the layout written to `out_path`.

#### References
1 M. Jacomy, T. Venturini, S. Heymann, and M. Bastian, ["Forceatlas2, a continuous graph layout algorithm for handy network visualization designed for the Gephi software"](http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0098679), PLoS ONE, vol. 9, no. 6, pp. 1–12, 2014.

2 M. Bastian, S. Heymann, and M. Jacomy, ["Gephi: an open source software for exploring and manipulating networks."](https://aaai.org/ocs/index.php/ICWSM/09/paper/view/154) in Proceedings of International Conference on Web and Social Media (ICWSM), 2009, pp. 361–362.

3J. Barnes and P. Hut, ["A hierarchical O(N log N) force-calculation algorithm"](https://www.nature.com/nature/journal/v324/n6096/abs/324446a0.html), Nature, vol. 324, pp. 446–449, 1986.

4 M. Burtscher and K. Pingali, ["An efficient CUDA implementation of the tree-based Barnes Hut n-body algorithm"](https://www.sciencedirect.com/science/article/pii/B9780123849885000061), in GPU Computing Gems Emerald Edition, W. mei W. Hwu, Ed., 2011, ch. 6, pp. 75–92.

#### License
Most source files for this program are released under the GNU Affero General Public License. The license notice in each file provides more information. A copy of the GNU Affero General Public License can be found in the `LICENCE` file.

#### Disclaimer
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.