Gunrock

High-performance Graph Primitives on GPU

View the Project on GitHub gunrock/gunrock

Gunrock documentation

Introduction

Gunrock is a CUDA library for graph-processing designed specifically for the GPU. It uses a high-level, bulk-synchronous, data-centric abstraction focused on operations on a vertex or edge frontier. Gunrock achieves a balance between performance and expressiveness by coupling high performance GPU computing primitives and optimization strategies with a high-level programming model that allows programmers to quickly develop new graph primitives with small code size and minimal GPU programming knowledge. For more details, please read our paper on arXiv: Gunrock: A High-Performance Graph Processing Library on the GPU and check out the Publications section.

Home Page

Homepage for Gunrock: http://gunrock.github.io/

Getting Started with Gunrock

For Frequently Asked Questions, see FAQ.

For information on building Gunrock, see Building Gunrock and refer to Operating System Support and Requirements.

The "tests" subdirectory included with Gunrock has a comprehensive test application for all the functionality of Gunrock.

For the programming model we use in Gunrock, see Programming Model.

We have also provided a code walk-through of a simple example and annotated code for two typical graph primitives.

Reporting Problems

To report Gunrock bugs or request features, please file an issue directly using Github.

Operating System Support and Requirements

This release (0.2) has only been tested on Linux Mint 15 (64-bit), Ubuntu 12.04 (64-bit), and CentOS 6.4 with CUDA 5.5, 6.0, and 6.5 installed. We expect Gunrock to build and run correctly on other 64-bit and 32-bit Linux distributions, Mac OS, and Windows.

Requirements

Gunrock has not been tested with any CUDA version < 5.5.

Several graph primitives' CPU validation code uses Boost Graph Library v1.53.0.

CUDA

Gunrock is implemented in CUDA C/C++. It requires the CUDA Toolkit. Please see the NVIDIA CUDA homepage to download CUDA as well as the CUDA Programming Guide and CUDA SDK, which includes many CUDA code examples. Please refer to NVIDIA CUDA Getting Started Guide for Linux for detailed information.

Publications

Yuechao Pan, Yangzihao Wang, Yuduo Wu, Carl Yang, and John D. Owens. Multi-GPU Graph Analytics. CoRR, abs/1504.04804, Apr. 2015. arXiv

Yangzihao Wang, Andrew Davidson, Yuechao Pan, Yuduo Wu, Andy Riffel, and John D. Owens. Gunrock: A High-Performance Graph Processing Library on the GPU. CoRR, abs/1501.05387v2, March 2015. arXiv

Carl Yang, Yangzihao Wang, and John D. Owens. Fast Sparse Matrix and Sparse Vector Multiplication Algorithm on the GPU. In Graph Algorithms Building Blocks, GABB 2015, May 2015. http

Afton Geil, Yangzihao Wang, and John D. Owens. WTF, GPU! Computing Twitter's Who-To-Follow on the GPU. In Proceedings of the Second ACM Conference on Online Social Networks, COSN '14, pages 63–68, October 2014. DOI | http

Road Map

Credits

Gunrock Developers

Acknowledgements

Thanks to the following developers who contributed code: The connected-component implementation was derived from code written by Jyothish Soman, Kothapalli Kishore, and P. J. Narayanan and described in their IPDPSW '10 paper A Fast GPU Algorithm for Graph Connectivity (DOI). The breadth-first search implementation and many of the utility functions in Gunrock are derived from the b40c library of Duane Merrill. The algorithm is described in his PPoPP '12 paper Scalable GPU Graph Traversal (DOI). Thanks to Erich Elsen and Vishal Vaidyanathan from Royal Caliber for their discussion on library development and the dataset auto-generating code.

This work was funded by the DARPA XDATA program under AFRL Contract FA8750-13-C-0002 and by NSF awards CCF-1017399 and OCI-1032859. Our XDATA principal investigator is Eric Whyne of Data Tactics Corporation and our DARPA program manager is Dr. Christopher White.

Gunrock Copyright and Software License

Gunrock is copyright The Regents of the University of California, 2013. The library, examples, and all source code are released under Apache 2.0.