Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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: 9 days ago
JSON representation
An experimental GPU accelerated implementation of ForceAtlas2
- Host: GitHub
- URL: https://github.com/govertb/GPUGraphLayout
- Owner: govertb
- License: other
- Created: 2017-01-29T19:24:01.000Z (almost 8 years ago)
- Default Branch: main
- Last Pushed: 2022-07-11T11:48:22.000Z (over 2 years ago)
- Last Synced: 2024-08-02T14:05:31.370Z (3 months ago)
- Topics: cuda, forceatlas2, gephi, graph-algorithms, graph-layout, social-network-analysis, visualization
- Language: C++
- Homepage:
- Size: 143 KB
- Stars: 45
- Watchers: 6
- Forks: 15
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: COPYING
- Citation: CITATION.cff
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.