Graph databases use graph structures to store data sets as nodes, edges, and properties. They are used to store and search the relationships between a large number of nodes, such as social networking services and recommendation engines that use customer social graphs. Since computation cost for graph search queries increases as the graph becomes large, in this pa- per we accelerate the graph search functions (Dijkstra and A* algorithms) of a graph database Neo4j using two ways: multi- threaded library and CUDA library for graphics processing units (GPUs). We use 100,000-node graphs generated based on a degree distribution of Facebook social graph for evaluations. Our multi-threaded and GPU-based implementations require an auxiliary adjacency matrix for a target graph. The results show that, when we do not take into account additional overhead to generate the auxiliary adjacency matrix, multi-threaded version improves the Dijkstra and A* search performance by 16.2x and 13.8x compared to the original implementation. The GPU-based implementation improves the Dijkstra and A* search performance by 26.2x and 32.8x. When we take into account the overhead, although the speed-ups by our implementations are reduced, by reusing the auxiliary adjacency matrix for multiple graph search queries we can significantly improve the graph search performance.
[1]
Mike O'Connor,et al.
Characterizing and evaluating a key-value store application on heterogeneous CPU-GPU systems
,
2012,
2012 IEEE International Symposium on Performance Analysis of Systems & Software.
[2]
Lars Backstrom,et al.
The Anatomy of the Facebook Social Graph
,
2011,
ArXiv.
[3]
Andrew S. Grimshaw,et al.
Scalable GPU graph traversal
,
2012,
PPoPP '12.
[4]
Mark Kambites,et al.
JOMP—an OpenMP-like interface for Java
,
2000,
JAVA '00.
[5]
Arturo González-Escribano,et al.
A new GPU-based approach to the Shortest Path problem
,
2013,
HPCS.
[6]
Thanh-Tung Cao,et al.
Scalable parallel minimum spanning forest computation
,
2012,
PPoPP '12.